package net.cactii.flash2; import android.app.PendingIntent; import android.appwidget.AppWidgetManager; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.net.Uri; import android.os.Bundle; import android.preference.CheckBoxPreference; import android.preference.Preference; import android.preference.Preference.OnPreferenceClickListener; import android.preference.PreferenceActivity; import android.preference.PreferenceManager; import android.widget.RemoteViews; public class WidgetOptionsActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener { private int mAppWidgetId; private SeekBarPreference mStrobeFrequency; private SharedPreferences mPreferences; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.layout.optionsview); this.mPreferences = PreferenceManager.getDefaultSharedPreferences(this); Intent intent = getIntent(); Bundle extras = intent.getExtras(); if (extras != null) { mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); } CheckBoxPreference mBrightPref = (CheckBoxPreference) findPreference("widget_bright"); mBrightPref.setChecked(false); CheckBoxPreference mStrobePref = (CheckBoxPreference) findPreference("widget_strobe"); mStrobePref.setChecked(false); mStrobeFrequency = (SeekBarPreference) findPreference("widget_strobe_freq"); mStrobeFrequency.setEnabled(false); getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); Preference mSave = (Preference) findPreference("saveSettings"); mSave.setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { Editor editor = mPreferences.edit(); editor.putBoolean("widget_strobe_" + mAppWidgetId, mPreferences.getBoolean("widget_strobe", false)); //had to do +1 to fix division by zero crash, only temporary fix: editor.putInt("widget_strobe_freq_" + mAppWidgetId, 666 / (1 + mPreferences.getInt("widget_strobe_freq", 5))); editor.putBoolean("widget_bright_" + mAppWidgetId, mPreferences.getBoolean("widget_bright", false)); editor.commit(); //Initialize widget view for first update Context context = getApplicationContext(); RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget); Intent launchIntent = new Intent(); launchIntent.setClass(context, TorchWidgetProvider.class); launchIntent.addCategory(Intent.CATEGORY_ALTERNATIVE); launchIntent.setData(Uri.parse("custom:" + mAppWidgetId + "/0")); PendingIntent pi = PendingIntent.getBroadcast(context, 0 /* * no * requestCode */, launchIntent, 0 /* * no * flags */); views.setOnClickPendingIntent(R.id.btn, pi); if (mPreferences.getBoolean("widget_strobe_" + mAppWidgetId, false)) views.setTextViewText(R.id.ind, "Strobe"); else if (mPreferences.getBoolean("widget_bright_" + mAppWidgetId, false)) views.setTextViewText(R.id.ind, "Bright"); else views.setTextViewText(R.id.ind, "Torch"); final AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); appWidgetManager.updateAppWidget(mAppWidgetId, views); Intent resultValue = new Intent(); resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId); setResult(RESULT_OK, resultValue); finish(); return false; } }); } public void onPause() { super.onPause(); } @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { if (key.equals("widget_strobe")) { this.mStrobeFrequency.setEnabled(sharedPreferences.getBoolean("widget_strobe", false)); } } }