Android Open Source - Munin-for-Android Widget_ Alerts Widget_ Views Factory






From Project

Back to project page Munin-for-Android.

License

The source code is released under:

GNU General Public License

If you think the Android project Munin-for-Android listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.chteuchteu.munin.wdget;
//www.  j  a  v  a2s  . com

import android.appwidget.AppWidgetManager;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.view.View;
import android.widget.RemoteViews;
import android.widget.RemoteViewsService;

import com.chteuchteu.munin.MuninFoo;
import com.chteuchteu.munin.R;
import com.chteuchteu.munin.hlpr.DatabaseHelper;
import com.chteuchteu.munin.hlpr.Util;
import com.chteuchteu.munin.obj.AlertsWidget;
import com.chteuchteu.munin.obj.MuninServer;

import java.util.ArrayList;
import java.util.List;

public class Widget_AlertsWidget_ViewsFactory implements RemoteViewsService.RemoteViewsFactory {
  private List<MuninServer> servers;
  private Context context;
  private boolean pluginsStatesFetched;
  private int widgetId;

  public Widget_AlertsWidget_ViewsFactory(Context context, Intent intent) {
    this.context = context;
    this.widgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
        AppWidgetManager.INVALID_APPWIDGET_ID);
    this.servers = new ArrayList<>();
    this.pluginsStatesFetched = false;

    refresh();
  }

  private void refresh() {
    this.servers.clear();
    AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
    Util.setPref(context, Util.PrefKeys.Widget2_ForceUpdate, "false");
    new PluginsStatesFetcher(appWidgetManager, widgetId).execute();
  }

  private class PluginsStatesFetcher extends AsyncTask<Void, Void, Void> {
    private AppWidgetManager appWidgetManager;
    private int appWidgetId;

    public PluginsStatesFetcher(AppWidgetManager appWidgetManager, int appWidgetId) {
      this.appWidgetManager = appWidgetManager;
      this.appWidgetId = appWidgetId;
    }

    @Override
    protected Void doInBackground(Void... params) {
      DatabaseHelper dbHelper = new DatabaseHelper(context);
      AlertsWidget alertsWidget = dbHelper.getAlertsWidget(appWidgetId, null);

      // Remove servers duplicates (duplicated in db for no reason)
      List<MuninServer> newServersList = new ArrayList<>();
      for (MuninServer server : alertsWidget.getServers()) {
        if (!newServersList.contains(server))
          newServersList.add(server);
      }

      for (MuninServer server : newServersList)
        server.fetchPluginsStates(MuninFoo.getUserAgent(context));

      // Update servers list according to those results
      servers.clear();
      for (MuninServer server : newServersList) {
        if (server.reachable != Util.SpecialBool.TRUE || server.getErroredPlugins().size() > 0 || server.getWarnedPlugins().size() > 0)
          servers.add(server);
      }

      return null;
    }

    @Override
    protected void onPostExecute(Void result) {
      pluginsStatesFetched = true;

      appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetId, R.id.servers);
    }
  }

  @Override
  public void onCreate() { }

  @Override
  public void onDestroy() { }

  @Override
  public int getCount() {
    if (!pluginsStatesFetched)
      return 1; // Fake view
    else if (this.servers.isEmpty())
      return 1; // Everything's ok
    else
      return servers.size();
  }

  @Override
  public RemoteViews getViewAt(int position) {
    RemoteViews row = new RemoteViews(context.getPackageName(), R.layout.widget_alertswidget_part);

    if (!pluginsStatesFetched && position == 0) // Loading
      row.setTextViewText(R.id.item, context.getString(R.string.loading));
    else if (servers.isEmpty()) // Everything's ok
      row.setTextViewText(R.id.item, context.getString(R.string.alerts_ok));
    else { // Loading finished : display data
      MuninServer server = servers.get(position);
      int nbWarnings = server.getWarnedPlugins().size();
      int nbCriticals = server.getErroredPlugins().size();

      row.setTextViewText(R.id.item, server.getName());

      String[] strings = context.getString(R.string.text58).split("/");

      // Check reason
      if (server.reachable != Util.SpecialBool.TRUE) {
        row.setViewVisibility(R.id.icon_unreachable, View.VISIBLE);
        row.setViewVisibility(R.id.item2, View.GONE);
      } else if (nbCriticals > 0 && nbWarnings > 0) {
        row.setViewVisibility(R.id.icon_error, View.VISIBLE);

        // Construct string
        String row2Text = nbCriticals + "";
        if (nbCriticals == 1)
          row2Text += " " + strings[0];
        else
          row2Text += strings[1];
        row2Text += strings[2];
        row2Text += nbWarnings;
        if (nbWarnings == 1)
          row2Text += strings[3];
        else
          row2Text += strings[4];

        row.setTextViewText(R.id.item2, row2Text);
      } else if (nbCriticals > 0 && nbWarnings == 0) {
        row.setViewVisibility(R.id.icon_error, View.VISIBLE);

        // Construct string
        String row2Text = nbCriticals + "";
        if (nbCriticals == 1)
          row2Text += " " + strings[0];
        else
          row2Text += strings[1];

        row.setTextViewText(R.id.item2, row2Text);
      } else if (nbCriticals == 0 && nbWarnings > 0) {
        row.setViewVisibility(R.id.icon_warning, View.VISIBLE);

        // Construct string
        String row2Text = nbWarnings + "";
        if (nbWarnings == 1)
          row2Text += strings[3];
        else
          row2Text += strings[4];

        row.setTextViewText(R.id.item2, row2Text);
      }
    }

    // Hide separator if needed
    if (!pluginsStatesFetched && position == 0
        || servers.isEmpty()
        || position == servers.size()-1)
      row.setViewVisibility(R.id.separator, View.GONE);
    else // Recycling view...
      row.setViewVisibility(R.id.separator, View.VISIBLE);

    // Set onclick : open Activity_Alerts
    Intent openIntent = new Intent();
    openIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId);
    openIntent.setAction(Widget_AlertsWidget_WidgetProvider.ACTION_START_ACTIVITY);
    row.setOnClickFillInIntent(R.id.line, openIntent);

    return row;
  }

  @Override
  public void onDataSetChanged() {
    // Called from Widget_AlertsWidget_WidgetProvider on refresh button click
    if (!pluginsStatesFetched || Util.getPref(context, Util.PrefKeys.Widget2_ForceUpdate).equals("true"))
      refresh();
  }

  @Override
  public RemoteViews getLoadingView() { return null; }

  @Override
  public int getViewTypeCount() { return 1; }

  @Override
  public long getItemId(int position) { return position; }

  @Override
  public boolean hasStableIds() { return true; }
}




Java Source Code List

com.chteuchteu.munin.BootReceiver.java
com.chteuchteu.munin.CustomSSLFactory.java
com.chteuchteu.munin.MuninFoo.java
com.chteuchteu.munin.Service_Notifications.java
com.chteuchteu.munin.adptr.Adapter_ExpandableListView.java
com.chteuchteu.munin.adptr.Adapter_GraphView.java
com.chteuchteu.munin.adptr.Adapter_IconList.java
com.chteuchteu.munin.adptr.Adapter_SeparatedList.java
com.chteuchteu.munin.exc.ImportExportWebserviceException.java
com.chteuchteu.munin.exc.NullMuninFooException.java
com.chteuchteu.munin.exc.TrialExpirationDateReached.java
com.chteuchteu.munin.hlpr.BillingService.java
com.chteuchteu.munin.hlpr.DatabaseHelper.java
com.chteuchteu.munin.hlpr.DigestUtils.java
com.chteuchteu.munin.hlpr.DocumentationHelper.java
com.chteuchteu.munin.hlpr.DrawerHelper.java
com.chteuchteu.munin.hlpr.DynazoomHelper.java
com.chteuchteu.munin.hlpr.EncryptionHelper.java
com.chteuchteu.munin.hlpr.GridDownloadHelper.java
com.chteuchteu.munin.hlpr.I18nHelper.java
com.chteuchteu.munin.hlpr.ImportExportHelper.java
com.chteuchteu.munin.hlpr.JSONHelper.java
com.chteuchteu.munin.hlpr.MediaScannerUtil.java
com.chteuchteu.munin.hlpr.NetHelper.java
com.chteuchteu.munin.hlpr.SQLite.java
com.chteuchteu.munin.hlpr.Util.java
com.chteuchteu.munin.obj.AlertsWidget.java
com.chteuchteu.munin.obj.GraphWidget.java
com.chteuchteu.munin.obj.GridItem.java
com.chteuchteu.munin.obj.Grid.java
com.chteuchteu.munin.obj.HTTPResponse_Bitmap.java
com.chteuchteu.munin.obj.HTTPResponse.java
com.chteuchteu.munin.obj.Label.java
com.chteuchteu.munin.obj.MuninMaster.java
com.chteuchteu.munin.obj.MuninPlugin.java
com.chteuchteu.munin.obj.MuninServer.java
com.chteuchteu.munin.obj.SearchResult.java
com.chteuchteu.munin.ui.Activity_About.java
com.chteuchteu.munin.ui.Activity_AlertsPluginSelection.java
com.chteuchteu.munin.ui.Activity_Alerts.java
com.chteuchteu.munin.ui.Activity_GoPremium.java
com.chteuchteu.munin.ui.Activity_GraphView.java
com.chteuchteu.munin.ui.Activity_Grid.java
com.chteuchteu.munin.ui.Activity_Grids.java
com.chteuchteu.munin.ui.Activity_Label.java
com.chteuchteu.munin.ui.Activity_Labels.java
com.chteuchteu.munin.ui.Activity_Main.java
com.chteuchteu.munin.ui.Activity_Notifications.java
com.chteuchteu.munin.ui.Activity_Plugins.java
com.chteuchteu.munin.ui.Activity_Server.java
com.chteuchteu.munin.ui.Activity_ServersEdit.java
com.chteuchteu.munin.ui.Activity_Servers.java
com.chteuchteu.munin.ui.Activity_Settings.java
com.chteuchteu.munin.ui.HackyDrawerLayout.java
com.chteuchteu.munin.ui.MuninActivity.java
com.chteuchteu.munin.wdget.Widget_AlertsWidget_Configure.java
com.chteuchteu.munin.wdget.Widget_AlertsWidget_ViewsFactory.java
com.chteuchteu.munin.wdget.Widget_AlertsWidget_WidgetProvider.java
com.chteuchteu.munin.wdget.Widget_AlertsWidget_WidgetService.java
com.chteuchteu.munin.wdget.Widget_GraphWidget_Configure.java
com.chteuchteu.munin.wdget.Widget_GraphWidget_WidgetProvider.java
com.mobeta.android.dslv.DragSortController.java
com.mobeta.android.dslv.DragSortCursorAdapter.java
com.mobeta.android.dslv.DragSortItemViewCheckable.java
com.mobeta.android.dslv.DragSortItemView.java
com.mobeta.android.dslv.DragSortListView.java
com.mobeta.android.dslv.ResourceDragSortCursorAdapter.java
com.mobeta.android.dslv.SimpleDragSortCursorAdapter.java
com.mobeta.android.dslv.SimpleFloatViewManager.java
org.taptwo.android.widget.CircleFlowIndicator.java
org.taptwo.android.widget.FlowIndicator.java
org.taptwo.android.widget.TitleFlowIndicator.java
org.taptwo.android.widget.TitleProvider.java
org.taptwo.android.widget.ViewFlow.java
uk.co.senab.photoview.Compat.java
uk.co.senab.photoview.IPhotoView.java
uk.co.senab.photoview.PhotoViewAttacher.java
uk.co.senab.photoview.PhotoView.java
uk.co.senab.photoview.SDK16.java
uk.co.senab.photoview.ScrollerProxy.java
uk.co.senab.photoview.VersionedGestureDetector.java