package com.koushikdutta.desktopsms; import android.app.PendingIntent; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.widget.RemoteViews; public class WidgetProvider extends AppWidgetProvider { private static final String TOGGLE_EMAIL = "com.koushikdutta.desktopsms.TOGGLE_EMAIL"; private static final String TOGGLE_XMPP = "com.koushikdutta.desktopsms.TOGGLE_XMPP"; private static final String TOGGLE_WEB = "com.koushikdutta.desktopsms.TOGGLE_WEB"; public static final String UPDATE = "com.koushikdutta.desktopsms.APPWIDGET_UPDATE"; @Override public void onReceive(Context context, Intent intent) { super.onReceive(context, intent); Settings settings = Settings.getInstance(context); boolean xmpp = settings.getBoolean("forward_xmpp", true); boolean email = settings.getBoolean("forward_email", true); boolean web = settings.getBoolean("forward_web", true); if (TOGGLE_EMAIL.equals(intent.getAction())) { AppWidgetManager.getInstance(context).updateAppWidget(new ComponentName(context, WidgetProvider.class), getRemoteViews(context, xmpp, !email, web)); ServiceHelper.updateSettings(context, xmpp, !email, web, null); } else if (TOGGLE_XMPP.equals(intent.getAction())) { AppWidgetManager.getInstance(context).updateAppWidget(new ComponentName(context, WidgetProvider.class), getRemoteViews(context, !xmpp, email, web)); ServiceHelper.updateSettings(context, !xmpp, email, web, null); } else if (TOGGLE_WEB.equals(intent.getAction())) { AppWidgetManager.getInstance(context).updateAppWidget(new ComponentName(context, WidgetProvider.class), getRemoteViews(context, xmpp, email, !web)); ServiceHelper.updateSettings(context, xmpp, email, !web, null); } else if (UPDATE.equals(intent.getAction())) { AppWidgetManager.getInstance(context).updateAppWidget(new ComponentName(context, WidgetProvider.class), getRemoteViews(context, xmpp, email, web)); } } @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { super.onUpdate(context, appWidgetManager, appWidgetIds); Settings settings = Settings.getInstance(context); boolean xmpp = settings.getBoolean("forward_xmpp", true); boolean email = settings.getBoolean("forward_email", true); boolean web = settings.getBoolean("forward_web", true); for (int appWidgetId: appWidgetIds) { appWidgetManager.updateAppWidget(appWidgetId, getRemoteViews(context, xmpp, email, web)); } } public RemoteViews getRemoteViews(Context context, boolean forward_xmpp, boolean forward_email, boolean forward_web) { RemoteViews rvs = new RemoteViews(context.getPackageName(), R.layout.widget); rvs.setImageViewResource(R.id.email_ind, forward_email ? R.drawable.appwidget_settings_ind_on_l : R.drawable.appwidget_settings_ind_mid_red_l); rvs.setImageViewResource(R.id.xmpp_ind, forward_xmpp ? R.drawable.appwidget_settings_ind_on_c : R.drawable.appwidget_settings_ind_mid_red_c); rvs.setImageViewResource(R.id.web_ind, forward_web ? R.drawable.appwidget_settings_ind_on_r : R.drawable.appwidget_settings_ind_mid_red_r); Intent i = new Intent(TOGGLE_EMAIL); PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0); rvs.setOnClickPendingIntent(R.id.forward_email, pi); i = new Intent(TOGGLE_XMPP); pi = PendingIntent.getBroadcast(context, 0, i, 0); rvs.setOnClickPendingIntent(R.id.forward_xmpp, pi); i = new Intent(TOGGLE_WEB); pi = PendingIntent.getBroadcast(context, 0, i, 0); rvs.setOnClickPendingIntent(R.id.forward_web, pi); return rvs; } }