package org.kvj.bravo7.widget; import java.util.ArrayList; import java.util.List; import org.kvj.bravo7.ApplicationContext; import android.content.Intent; import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceActivity; public class WidgetPreferenceActivity extends PreferenceActivity { private ApplicationContext app = null; protected Integer widgetID = null; protected String widgetType; private int prefID; List<WidgetPreference> prefs = new ArrayList<WidgetPreference>(); String[] ids = new String[0]; public WidgetPreferenceActivity(ApplicationContext app, String widgetType, int prefID) { super(); this.app = app; this.widgetType = widgetType; this.prefID = prefID; } protected void setCustomPreferences(String... ids) { this.ids = ids; } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK) { // Selected for (String id : ids) { // For every id Preference p = findPreference(id); if (null != p && p instanceof WidgetPreference) { // Our case WidgetPreference wp = (WidgetPreference) p; boolean res = wp.onActivityResult(requestCode, data); if (res) { // Stop return; } } } } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); widgetID = app.getWidgetConfigID(getIntent()); if (null != widgetID) { app.setWidgetConfigDone(this); } if (null == widgetID && getIntent().getExtras() != null) { widgetID = getIntent().getExtras().getInt("id"); } if (null != widgetID) { // Have widget ID getPreferenceManager().setSharedPreferencesName( "widget_" + widgetID); addPreferencesFromResource(prefID); for (String id : ids) { // For every id Preference p = findPreference(id); if (null != p && p instanceof WidgetPreference) { // Our case WidgetPreference wp = (WidgetPreference) p; wp.setActivity(this); } } } } protected void onSave() { for (String id : ids) { // For every id Preference p = findPreference(id); if (null != p && p instanceof WidgetPreference) { // Our case WidgetPreference wp = (WidgetPreference) p; wp.onFinish(); } } } @Override public void onBackPressed() { if (null != widgetID) { getPreferenceManager().getSharedPreferences().edit() .putString("type", widgetType).commit(); onSave(); app.setWidgetConfig(widgetID, widgetType); app.updateWidgets(widgetID); } super.onBackPressed(); } }