package edu.fsu.cs.contextprovider;
import edu.fsu.cs.contextprovider.data.ContextConstants;
import android.app.AlarmManager;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.PendingIntent;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.os.Bundle;
import android.os.SystemClock;
import android.preference.CheckBoxPreference;
import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceCategory;
import android.preference.PreferenceManager;
import android.preference.PreferenceScreen;
import android.preference.Preference.OnPreferenceClickListener;
import android.text.method.DigitsKeyListener;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
public class PrefsActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener {
private static final String TAG = "edu.fsu.cs.PrefsActivity";
private static final boolean DEBUG = true;
private static final int MENU_ABOUT_ID = Menu.FIRST;
private static final int ABOUT_DIALOG = 0;
private static final int DIALOG_ABOUT = 0;
private SharedPreferences prefs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getPreferenceManager().setSharedPreferencesName(ContextConstants.CONTEXT_PREFS);
addPreferencesFromResource(R.xml.prefs);
prefs = getSharedPreferences(ContextConstants.CONTEXT_PREFS, MODE_PRIVATE);
// PreferenceManager.setDefaultValues(this, ContextConstants.CONTEXT_PREFS, MODE_WORLD_READABLE, R.xml.prefs, false);
// PreferenceManager.setDefaultValues(PrefsActivity.this, R.xml.prefs, false);
// prefs = getPreferenceScreen().getSharedPreferences();
// prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.registerOnSharedPreferenceChangeListener(this);
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
prefs.unregisterOnSharedPreferenceChangeListener(this);
// Intent intent = new Intent(ContextConstants.CONTEXT_RESTART_INTENT);
// sendBroadcast(intent);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
boolean result = super.onCreateOptionsMenu(menu);
menu.add(0, MENU_ABOUT_ID, 0, "About").setIcon(android.R.drawable.ic_menu_info_details);
return result;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case MENU_ABOUT_ID:
showDialog(ABOUT_DIALOG);
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
protected Dialog onCreateDialog(int id) {
Dialog dialog;
switch (id) {
case DIALOG_ABOUT:
dialog = getAboutBox();
break;
default:
dialog = null;
}
return dialog;
}
private AlertDialog getAboutBox() {
String title = getString(R.string.app_name) + " build " + getVersion(this);
return new AlertDialog.Builder(PrefsActivity.this).setTitle(title).setView(View.inflate(this, R.layout.about, null)).setIcon(R.drawable.context64).setPositiveButton("OK", null).create();
}
public static String getVersion(Context context) {
String version = "1.0";
try {
PackageInfo pi = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
version = pi.versionName;
} catch (PackageManager.NameNotFoundException e) {
Log.e(TAG, "Package name not found", e);
}
return version;
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
// Preference pref = findPreference(key);
// if (pref instanceof ListPreference) {
// ListPreference listPref = (ListPreference) pref;
// pref.setSummary(listPref.getEntry());
// }
if (key.equals(ContextConstants.PREFS_ACCURACY_POPUP_ENABLED) || key.equals(ContextConstants.PREFS_ACCURACY_POPUP_FREQ)) {
if (DEBUG) {
Toast.makeText(this, "ACCURACY_POPUP changed", Toast.LENGTH_SHORT).show();
}
boolean accuracyPopupEnabled = prefs.getBoolean(ContextConstants.PREFS_ACCURACY_POPUP_ENABLED, true);
// int accuracyPopupPeriod = prefs.getInt(ContextConstants.PREFS_ACCURACY_POPUP_FREQ, 45);
String accuracyPopupPeriod = prefs.getString(ContextConstants.PREFS_ACCURACY_POPUP_FREQ, "45");
int period = Integer.parseInt(accuracyPopupPeriod);
if (DEBUG) {
Log.d(TAG, "accuracyPopupPeriod: " + accuracyPopupPeriod + " period: " + period);
}
AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(getBaseContext(), edu.fsu.cs.contextprovider.wakeup.WakeupAlarmReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(getBaseContext(), 0, intent, 0);
if (accuracyPopupEnabled) {
manager.cancel(pi);
manager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 10000, period * 1000, pi);
} else {
manager.cancel(pi);
}
}
}
// private void enabled(final boolean enable) {
// String dialogTitle;
// if (enable) {
// dialogTitle = getString(R.string.enable_dialog_msg);
// } else {
// dialogTitle = getString(R.string.disable_dialog_msg);
// }
// new AlertDialog.Builder(this).setIcon(android.R.drawable.ic_dialog_alert).setTitle(dialogTitle).setPositiveButton(getString(R.string.yes), new DialogInterface.OnClickListener() {
// public void onClick(DialogInterface dialog, int whichButton) {
// // enable monitor here
// }
// }).setNegativeButton(getString(R.string.no), new DialogInterface.OnClickListener() {
// public void onClick(DialogInterface dialog, int whichButton) {
// // Do nothing
// }
// }).show();
//}
}