package org.kvj.bravo7.widget; import org.kvj.bravo7.ApplicationContext; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; import android.util.Log; import android.widget.RemoteViews; public abstract class WidgetProvider extends AppWidgetProvider { private static final String TAG = "WidgetProvider"; protected ApplicationContext app = null; public WidgetProvider(ApplicationContext context) { this.app = context; } protected String getString(SharedPreferences data, int name, int def) { return data.getString(app.getResources().getString(name), app .getResources().getString(def)); } protected void setInt(SharedPreferences data, int name, int value) { data.edit() .putString(app.getResources().getString(name), Integer.toString(value)).commit(); } protected int getInt(SharedPreferences data, int name, int def) { int defInt = -1; try { defInt = Integer .parseInt(data.getString(app.getResources().getString(def), "-1"), 10); } catch (Exception e) { e.printStackTrace(); } try { return Integer.parseInt(getString(data, name, def), 10); } catch (Exception e) { e.printStackTrace(); } return defInt; } @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { super.onUpdate(context, appWidgetManager, appWidgetIds); Log.i(TAG, "onUpdate: " + appWidgetIds.length); for (int i = 0; i < appWidgetIds.length; i++) { // Call update for every widget int id = appWidgetIds[i]; update(id, appWidgetManager, new Bundle()); } } private boolean update(int id, AppWidgetManager appWidgetManager, Bundle extras) { SharedPreferences prefs = app.getWidgetConfig(id); if (null == prefs) { // Skip Log.w(TAG, "onUpdate: no prefs " + id); return false; } RemoteViews views = update(prefs, id, extras); if (null != views) { // Have views - update appWidgetManager.updateAppWidget(id, views); } else { Log.w(TAG, "onUpdate: no views " + id); return false; } return true; } public void update(int id, Bundle extras) { AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(app); update(id, appWidgetManager, extras); } abstract protected RemoteViews update(SharedPreferences preferences, int id, Bundle data); }