package net.cactii.flash2; import android.app.Activity; import android.app.AlertDialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; import android.os.Build; import android.os.Bundle; import android.provider.Settings; import android.preference.PreferenceManager; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.ToggleButton; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.TextView; public class MainActivity extends Activity { private TorchWidgetProvider mWidgetProvider; // On button private ToggleButton buttonOn; // Strobe toggle private CheckBox buttonStrobe; private CheckBox buttonBright; private boolean bright; private boolean mTorchOn; // Strobe frequency slider. private SeekBar slider; // Period of strobe, in milliseconds private int strobeperiod; private Context context; // Label showing strobe frequency private TextView strobeLabel; // Preferences private SharedPreferences mPrefs; private SharedPreferences.Editor mPrefsEditor = null; // Labels private String labelOn = null; private String labelOff = null; private static boolean useBrightSetting = !Build.DEVICE.equals("crespo"); /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mainnew); context = this.getApplicationContext(); buttonOn = (ToggleButton) findViewById(R.id.buttonOn); buttonStrobe = (CheckBox) findViewById(R.id.strobe); strobeLabel = (TextView) findViewById(R.id.strobeTimeLabel); slider = (SeekBar) findViewById(R.id.slider); buttonBright = (CheckBox) findViewById(R.id.bright); strobeperiod = 100; mTorchOn = false; labelOn = this.getString(R.string.label_on); labelOff = this.getString(R.string.label_off); mWidgetProvider = TorchWidgetProvider.getInstance(); // Preferences this.mPrefs = PreferenceManager.getDefaultSharedPreferences(this); // preferenceEditor this.mPrefsEditor = this.mPrefs.edit(); if (useBrightSetting) { bright = this.mPrefs.getBoolean("bright", false); buttonBright.setChecked(bright); buttonBright.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked && mPrefs.getBoolean("bright", false)) MainActivity.this.bright = true; else if (isChecked) openBrightDialog(); else { bright = false; mPrefsEditor.putBoolean("bright", false); mPrefsEditor.commit(); } } }); } else { buttonBright.setEnabled(false); } strobeLabel.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { buttonStrobe.setChecked(!buttonStrobe.isChecked()); } }); buttonOn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(TorchSwitch.TOGGLE_FLASHLIGHT); intent.putExtra("strobe", buttonStrobe.isChecked()); intent.putExtra("period", strobeperiod); intent.putExtra("bright", bright); context.sendBroadcast(intent); } }); // Strobe frequency slider bar handling setProgressBarVisibility(true); slider.setHorizontalScrollBarEnabled(true); slider.setProgress(400 - this.mPrefs.getInt("strobeperiod", 100)); strobeperiod = this.mPrefs.getInt("strobeperiod", 100); final String strStrobeLabel = this.getString(R.string.setting_frequency_title); strobeLabel.setText(strStrobeLabel + ": " + 666 / strobeperiod + "Hz / " + 40000 / strobeperiod + "BPM"); slider.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { strobeperiod = 401 - progress; if (strobeperiod < 20) strobeperiod = 20; strobeLabel.setText(strStrobeLabel + ": " + 666 / strobeperiod + "Hz / " + 40000 / strobeperiod + "BPM"); Intent intent = new Intent("net.cactii.flash2.SET_STROBE"); intent.putExtra("period", strobeperiod); sendBroadcast(intent); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); // Show the about dialog, the first time the user runs the app. if (!this.mPrefs.getBoolean("aboutSeen", false)) { this.openAboutDialog(); this.mPrefsEditor.putBoolean("aboutSeen", true); } } public void onPause() { this.mPrefsEditor.putInt("strobeperiod", this.strobeperiod); this.mPrefsEditor.commit(); this.updateWidget(); context.unregisterReceiver(mStateReceiver); super.onPause(); } public void onDestroy() { this.updateWidget(); super.onDestroy(); } public void onResume() { updateBigButtonState(); this.updateWidget(); context.registerReceiver(mStateReceiver, new IntentFilter(TorchSwitch.TORCH_STATE_CHANGED)); super.onResume(); } @Override public boolean onCreateOptionsMenu(Menu menu) { boolean supRetVal = super.onCreateOptionsMenu(menu); menu.addSubMenu(0, 0, 0, this.getString(R.string.about_btn)); return supRetVal; } @Override public boolean onOptionsItemSelected(MenuItem menuItem) { boolean supRetVal = super.onOptionsItemSelected(menuItem); this.openAboutDialog(); return supRetVal; } private void openAboutDialog() { LayoutInflater li = LayoutInflater.from(this); View view = li.inflate(R.layout.aboutview, null); new AlertDialog.Builder(MainActivity.this).setTitle(this.getString(R.string.about_title)).setView(view) .setNegativeButton(this.getString(R.string.about_close), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { // Log.d(MSG_TAG, "Close pressed"); } }).show(); } private void openBrightDialog() { LayoutInflater li = LayoutInflater.from(this); View view = li.inflate(R.layout.brightwarn, null); new AlertDialog.Builder(MainActivity.this).setTitle(this.getString(R.string.brightwarn_title)) .setView(view) .setNegativeButton(this.getString(R.string.brightwarn_negative), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { MainActivity.this.buttonBright.setChecked(false); } }).setNeutralButton(this.getString(R.string.brightwarn_accept), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { MainActivity.this.bright = true; mPrefsEditor.putBoolean("bright", true); mPrefsEditor.commit(); } }).show(); } public void updateWidget() { this.mWidgetProvider.updateAllStates(context); } private void updateBigButtonState() { if (Settings.System.getInt(context.getContentResolver(), Settings.System.TORCH_STATE, 0) == 1) { mTorchOn = true; buttonOn.setChecked(true); buttonBright.setEnabled(false); buttonStrobe.setEnabled(false); if (!buttonStrobe.isChecked()) { slider.setEnabled(false); } } else { mTorchOn = false; buttonOn.setChecked(false); buttonBright.setEnabled(useBrightSetting); buttonStrobe.setEnabled(true); slider.setEnabled(true); } } private BroadcastReceiver mStateReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(TorchSwitch.TORCH_STATE_CHANGED)) { updateBigButtonState(); } } }; }