package com.androsz.electricsleepbeta.app;
import java.util.List;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.media.AudioManager;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceFragment;
import android.preference.PreferenceScreen;
import android.provider.Settings;
import android.widget.Toast;
import com.androsz.electricsleepbeta.R;
import com.androsz.electricsleepbeta.app.wizard.CalibrationWizardActivity;
import com.androsz.electricsleepbeta.preference.HostPreferenceActivity;
public class SettingsActivity extends HostPreferenceActivity {
@Override
public void onBuildHeaders(List<Header> target) {
super.onBuildHeaders(target);
final SharedPreferences serviceIsRunningPrefs = getSharedPreferences(
SleepMonitoringService.SERVICE_IS_RUNNING, Context.MODE_PRIVATE);
if (serviceIsRunningPrefs.getBoolean("serviceIsRunning", false)) {
Toast.makeText(this, R.string.changes_made_to_these_settings,
Toast.LENGTH_LONG).show();
}
try {
// Set the software version shown in the preference header.
PackageInfo packageInfo = getPackageManager().getPackageInfo(
getPackageName(), 0);
for (Header header : target) {
if (header.getTitle(getResources()).equals(
getText(R.string.title_version))) {
header.summary = packageInfo.versionName;
}
}
} catch (NameNotFoundException e) {
this.trackEvent(
"Retrieving VersionName failed for SettingsActivity-headers.",
1);
}
}
private static final int ALARM_STREAM_TYPE_BIT = 1 << AudioManager.STREAM_ALARM;
/** The default alarm trigger threshold. */
public static float DEFAULT_ALARM_SENSITIVITY = 0.33F;
public static float DEFAULT_MIN_SENSITIVITY = 0.0F;
public static float MAX_ALARM_SENSITIVITY = 1.0F;
private static final String KEY_ALARM_IN_SILENT_MODE = "alarm_in_silent_mode";
public static final String KEY_ALARM_SNOOZE = "snooze_duration";
public static final String KEY_VOLUME_BEHAVIOR = "volume_button_setting";
// name of the preferences file that holds main preferences
// this is actually what android uses as default..
public static String PREFERENCES = "com.androsz.electricsleepbeta_preferences";
// name of the preferences file that holds environmental preferences
// example: show the user a donate message once
public static final String PREFERENCES_ENVIRONMENT = "prefsVersion";
public static final String PREFERENCES_KEY_DONT_SHOW_ZEO = "dontShowZeoMessage";
@Override
protected int getContentAreaLayoutId() {
final SharedPreferences serviceIsRunningPrefs = getSharedPreferences(
SleepMonitoringService.SERVICE_IS_RUNNING, Context.MODE_PRIVATE);
if (serviceIsRunningPrefs.getBoolean("serviceIsRunning", false)) {
Toast.makeText(this, R.string.changes_made_to_these_settings,
Toast.LENGTH_LONG).show();
}
return R.xml.settings;
}
@Override
protected int getHeadersResourceId() {
return R.xml.settings_headers;
}
/**
* This fragment shows the preferences for the first header.
*/
public static class AlarmsPreferenceFragment extends PreferenceFragment
implements Preference.OnPreferenceChangeListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.settings_fragment_alarms);
refresh(this.getActivity());
}
private void refresh(Context c) {
final CheckBoxPreference alarmInSilentModePref = (CheckBoxPreference) findPreference(KEY_ALARM_IN_SILENT_MODE);
final int silentModeStreams = Settings.System.getInt(
c.getContentResolver(),
Settings.System.MODE_RINGER_STREAMS_AFFECTED, 0);
alarmInSilentModePref
.setChecked((silentModeStreams & ALARM_STREAM_TYPE_BIT) == 0);
final ListPreference snooze = (ListPreference) findPreference(KEY_ALARM_SNOOZE);
snooze.setSummary(snooze.getEntry());
snooze.setOnPreferenceChangeListener(this);
}
@Override
public boolean onPreferenceChange(final Preference pref,
final Object newValue) {
final ListPreference listPref = (ListPreference) pref;
final int idx = listPref.findIndexOfValue((String) newValue);
listPref.setSummary(listPref.getEntries()[idx]);
return true;
}
@Override
public boolean onPreferenceTreeClick(
final PreferenceScreen preferenceScreen,
final Preference preference) {
if (KEY_ALARM_IN_SILENT_MODE.equals(preference.getKey())) {
final CheckBoxPreference pref = (CheckBoxPreference) preference;
int ringerModeStreamTypes = Settings.System.getInt(
preferenceScreen.getContext().getContentResolver(),
Settings.System.MODE_RINGER_STREAMS_AFFECTED, 0);
if (pref.isChecked()) {
ringerModeStreamTypes &= ~ALARM_STREAM_TYPE_BIT;
} else {
ringerModeStreamTypes |= ALARM_STREAM_TYPE_BIT;
}
Settings.System.putInt(preferenceScreen.getContext()
.getContentResolver(),
Settings.System.MODE_RINGER_STREAMS_AFFECTED,
ringerModeStreamTypes);
return true;
}
return super.onPreferenceTreeClick(preferenceScreen, preference);
}
}
/**
* This fragment shows the preferences for the first header.
*/
public static class SensorsPreferenceFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.settings_fragment_sensors);
findPreference(getText(R.string.pref_calibration))
.setOnPreferenceClickListener(
new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(
final Preference preference) {
startActivity(new Intent(getActivity(),
CalibrationWizardActivity.class));
return true;
}
});
}
}
/**
* This fragment shows the preferences for the first header.
*/
public static class SleepPreferenceFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.settings_fragment_sleep);
}
}
/**
* This fragment shows the preferences for the first header.
*/
public static class MiscPreferenceFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.settings_fragment_misc);
}
}
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getNeedToLoadOldStylePreferences()) {
try {
// Set the software version shown in the preference header.
PackageInfo packageInfo = getPackageManager().getPackageInfo(
getPackageName(), 0);
findPreference(getText(R.string.title_version)).setSummary(
packageInfo.versionName);
} catch (NameNotFoundException e) {
this.trackEvent(
"Retrieving VersionName failed for SettingsActivity-oldstyle.",
1);
}
}
}
@Override
protected void onDestroy() {
super.onDestroy();
new Thread(new Runnable() {
@Override
public void run() {
final SharedPreferences.Editor ed = getSharedPreferences(
PREFERENCES_ENVIRONMENT, Context.MODE_PRIVATE).edit();
ed.putInt(PREFERENCES_ENVIRONMENT,
getResources().getInteger(R.integer.prefs_version));
ed.commit();
}
}).start();
}
}