SettingsActivity.java revision be8244565cd5e987eaf1bf8754a1750c95477b43
113e902189e05f09a890b9d6673a6f451c758542aJason Parekh/*
213e902189e05f09a890b9d6673a6f451c758542aJason Parekh * Copyright (C) 2009 The Android Open Source Project
313e902189e05f09a890b9d6673a6f451c758542aJason Parekh *
413e902189e05f09a890b9d6673a6f451c758542aJason Parekh * Licensed under the Apache License, Version 2.0 (the "License");
513e902189e05f09a890b9d6673a6f451c758542aJason Parekh * you may not use this file except in compliance with the License.
613e902189e05f09a890b9d6673a6f451c758542aJason Parekh * You may obtain a copy of the License at
713e902189e05f09a890b9d6673a6f451c758542aJason Parekh *
813e902189e05f09a890b9d6673a6f451c758542aJason Parekh *      http://www.apache.org/licenses/LICENSE-2.0
913e902189e05f09a890b9d6673a6f451c758542aJason Parekh *
1013e902189e05f09a890b9d6673a6f451c758542aJason Parekh * Unless required by applicable law or agreed to in writing, software
1113e902189e05f09a890b9d6673a6f451c758542aJason Parekh * distributed under the License is distributed on an "AS IS" BASIS,
1213e902189e05f09a890b9d6673a6f451c758542aJason Parekh * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1313e902189e05f09a890b9d6673a6f451c758542aJason Parekh * See the License for the specific language governing permissions and
1413e902189e05f09a890b9d6673a6f451c758542aJason Parekh * limitations under the License.
1513e902189e05f09a890b9d6673a6f451c758542aJason Parekh */
1613e902189e05f09a890b9d6673a6f451c758542aJason Parekh
17fa954248b41b567dfa2ddd7bd063d3936a51758eDaniel Sandlerpackage com.android.deskclock;
1813e902189e05f09a890b9d6673a6f451c758542aJason Parekh
19be8244565cd5e987eaf1bf8754a1750c95477b43Itzhak Katzenelsonimport android.app.ActionBar;
2063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelsonimport android.content.Intent;
2113e902189e05f09a890b9d6673a6f451c758542aJason Parekhimport android.media.AudioManager;
2213e902189e05f09a890b9d6673a6f451c758542aJason Parekhimport android.os.Bundle;
2313e902189e05f09a890b9d6673a6f451c758542aJason Parekhimport android.preference.CheckBoxPreference;
24abbdb5687b2f4505b16d3f8fad3efbab3ea1cf90Patrick Scottimport android.preference.ListPreference;
2513e902189e05f09a890b9d6673a6f451c758542aJason Parekhimport android.preference.Preference;
2613e902189e05f09a890b9d6673a6f451c758542aJason Parekhimport android.preference.PreferenceActivity;
2713e902189e05f09a890b9d6673a6f451c758542aJason Parekhimport android.preference.PreferenceScreen;
2813e902189e05f09a890b9d6673a6f451c758542aJason Parekhimport android.provider.Settings;
2963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelsonimport android.view.Menu;
3063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelsonimport android.view.MenuItem;
3113e902189e05f09a890b9d6673a6f451c758542aJason Parekh
3213e902189e05f09a890b9d6673a6f451c758542aJason Parekh/**
3313e902189e05f09a890b9d6673a6f451c758542aJason Parekh * Settings for the Alarm Clock.
3413e902189e05f09a890b9d6673a6f451c758542aJason Parekh */
35abbdb5687b2f4505b16d3f8fad3efbab3ea1cf90Patrick Scottpublic class SettingsActivity extends PreferenceActivity
36abbdb5687b2f4505b16d3f8fad3efbab3ea1cf90Patrick Scott        implements Preference.OnPreferenceChangeListener {
3713e902189e05f09a890b9d6673a6f451c758542aJason Parekh
3813e902189e05f09a890b9d6673a6f451c758542aJason Parekh    private static final int ALARM_STREAM_TYPE_BIT =
3913e902189e05f09a890b9d6673a6f451c758542aJason Parekh            1 << AudioManager.STREAM_ALARM;
40abbdb5687b2f4505b16d3f8fad3efbab3ea1cf90Patrick Scott
4163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    static final String KEY_ALARM_IN_SILENT_MODE =
4213e902189e05f09a890b9d6673a6f451c758542aJason Parekh            "alarm_in_silent_mode";
4389811e14c23c7fe6f88a21d13429613b756bce3fPatrick Scott    static final String KEY_ALARM_SNOOZE =
44abbdb5687b2f4505b16d3f8fad3efbab3ea1cf90Patrick Scott            "snooze_duration";
4589811e14c23c7fe6f88a21d13429613b756bce3fPatrick Scott    static final String KEY_VOLUME_BEHAVIOR =
4689811e14c23c7fe6f88a21d13429613b756bce3fPatrick Scott            "volume_button_setting";
4728dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott    static final String KEY_AUTO_SILENCE =
4828dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott            "auto_silence";
4963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    static final String KEY_CLOCK_STYLE =
5063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson            "clock_style";
5163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    static final String KEY_HOME_TZ =
5263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson            "home_time_zone";
5363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    static final String KEY_AUTO_HOME_CLOCK =
5463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson            "automatic_home_clock";
5563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    static final String KEY_VOLUME_BUTTONS =
5663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson            "volume_button_setting";
5713e902189e05f09a890b9d6673a6f451c758542aJason Parekh    @Override
5813e902189e05f09a890b9d6673a6f451c758542aJason Parekh    protected void onCreate(Bundle savedInstanceState) {
5913e902189e05f09a890b9d6673a6f451c758542aJason Parekh        super.onCreate(savedInstanceState);
6013e902189e05f09a890b9d6673a6f451c758542aJason Parekh        addPreferencesFromResource(R.xml.settings);
61e7bf7ed4c4d3680d838a1581832d22be89e37e46Patrick Scott
6263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    /*    final AlarmPreference ringtone =
63e7bf7ed4c4d3680d838a1581832d22be89e37e46Patrick Scott                (AlarmPreference) findPreference(KEY_DEFAULT_RINGTONE);
64e7bf7ed4c4d3680d838a1581832d22be89e37e46Patrick Scott        Uri alert = RingtoneManager.getActualDefaultRingtoneUri(this,
65e7bf7ed4c4d3680d838a1581832d22be89e37e46Patrick Scott                RingtoneManager.TYPE_ALARM);
66e7bf7ed4c4d3680d838a1581832d22be89e37e46Patrick Scott        if (alert != null) {
67e7bf7ed4c4d3680d838a1581832d22be89e37e46Patrick Scott            ringtone.setAlert(alert);
68e7bf7ed4c4d3680d838a1581832d22be89e37e46Patrick Scott        }
6963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        ringtone.setChangeDefault();*/
70be8244565cd5e987eaf1bf8754a1750c95477b43Itzhak Katzenelson        ActionBar actionBar = getActionBar();
71be8244565cd5e987eaf1bf8754a1750c95477b43Itzhak Katzenelson        if (actionBar != null) {
72be8244565cd5e987eaf1bf8754a1750c95477b43Itzhak Katzenelson            actionBar.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP, ActionBar.DISPLAY_HOME_AS_UP);
73be8244565cd5e987eaf1bf8754a1750c95477b43Itzhak Katzenelson        }
7413e902189e05f09a890b9d6673a6f451c758542aJason Parekh    }
7513e902189e05f09a890b9d6673a6f451c758542aJason Parekh
7613e902189e05f09a890b9d6673a6f451c758542aJason Parekh    @Override
7713e902189e05f09a890b9d6673a6f451c758542aJason Parekh    protected void onResume() {
7813e902189e05f09a890b9d6673a6f451c758542aJason Parekh        super.onResume();
7913e902189e05f09a890b9d6673a6f451c758542aJason Parekh        refresh();
8013e902189e05f09a890b9d6673a6f451c758542aJason Parekh    }
8113e902189e05f09a890b9d6673a6f451c758542aJason Parekh
8213e902189e05f09a890b9d6673a6f451c758542aJason Parekh    @Override
8363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    public boolean onOptionsItemSelected (MenuItem item) {
8463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        switch (item.getItemId()) {
8563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson            case R.id.menu_item_help:
8663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson                startActivity(new Intent(this, HelpActivity.class));
8763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson                return true;
88be8244565cd5e987eaf1bf8754a1750c95477b43Itzhak Katzenelson            case android.R.id.home:
89be8244565cd5e987eaf1bf8754a1750c95477b43Itzhak Katzenelson                finish();
90be8244565cd5e987eaf1bf8754a1750c95477b43Itzhak Katzenelson                return true;
9163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson            default:
9263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson                break;
9363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        }
9463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        return super.onOptionsItemSelected(item);
9563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    }
9663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson
9763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson
9863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    @Override
9963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    public boolean onCreateOptionsMenu (Menu menu) {
10063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        getMenuInflater().inflate(R.menu.settings_menu, menu);
1016fc34de781d8fece646b16dc289bbf4c0b01fde4Isaac Katzenelson        MenuItem help = menu.findItem(R.id.menu_item_help);
1026fc34de781d8fece646b16dc289bbf4c0b01fde4Isaac Katzenelson        if (help != null) {
1036fc34de781d8fece646b16dc289bbf4c0b01fde4Isaac Katzenelson            Utils.prepareHelpMenuItem(this, help);
1046fc34de781d8fece646b16dc289bbf4c0b01fde4Isaac Katzenelson        }
10563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        return super.onCreateOptionsMenu(menu);
10663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    }
10763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson
10863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    @Override
10913e902189e05f09a890b9d6673a6f451c758542aJason Parekh    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
11013e902189e05f09a890b9d6673a6f451c758542aJason Parekh            Preference preference) {
11189811e14c23c7fe6f88a21d13429613b756bce3fPatrick Scott        if (KEY_ALARM_IN_SILENT_MODE.equals(preference.getKey())) {
11289811e14c23c7fe6f88a21d13429613b756bce3fPatrick Scott            CheckBoxPreference pref = (CheckBoxPreference) preference;
11313e902189e05f09a890b9d6673a6f451c758542aJason Parekh            int ringerModeStreamTypes = Settings.System.getInt(
11413e902189e05f09a890b9d6673a6f451c758542aJason Parekh                    getContentResolver(),
11513e902189e05f09a890b9d6673a6f451c758542aJason Parekh                    Settings.System.MODE_RINGER_STREAMS_AFFECTED, 0);
116abbdb5687b2f4505b16d3f8fad3efbab3ea1cf90Patrick Scott
11789811e14c23c7fe6f88a21d13429613b756bce3fPatrick Scott            if (pref.isChecked()) {
11813e902189e05f09a890b9d6673a6f451c758542aJason Parekh                ringerModeStreamTypes &= ~ALARM_STREAM_TYPE_BIT;
11913e902189e05f09a890b9d6673a6f451c758542aJason Parekh            } else {
12013e902189e05f09a890b9d6673a6f451c758542aJason Parekh                ringerModeStreamTypes |= ALARM_STREAM_TYPE_BIT;
12113e902189e05f09a890b9d6673a6f451c758542aJason Parekh            }
122abbdb5687b2f4505b16d3f8fad3efbab3ea1cf90Patrick Scott
12313e902189e05f09a890b9d6673a6f451c758542aJason Parekh            Settings.System.putInt(getContentResolver(),
12413e902189e05f09a890b9d6673a6f451c758542aJason Parekh                    Settings.System.MODE_RINGER_STREAMS_AFFECTED,
12513e902189e05f09a890b9d6673a6f451c758542aJason Parekh                    ringerModeStreamTypes);
126abbdb5687b2f4505b16d3f8fad3efbab3ea1cf90Patrick Scott
12713e902189e05f09a890b9d6673a6f451c758542aJason Parekh            return true;
12813e902189e05f09a890b9d6673a6f451c758542aJason Parekh        }
129abbdb5687b2f4505b16d3f8fad3efbab3ea1cf90Patrick Scott
13013e902189e05f09a890b9d6673a6f451c758542aJason Parekh        return super.onPreferenceTreeClick(preferenceScreen, preference);
13113e902189e05f09a890b9d6673a6f451c758542aJason Parekh    }
13213e902189e05f09a890b9d6673a6f451c758542aJason Parekh
13363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    @Override
134abbdb5687b2f4505b16d3f8fad3efbab3ea1cf90Patrick Scott    public boolean onPreferenceChange(Preference pref, Object newValue) {
13563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        if (KEY_AUTO_SILENCE.equals(pref.getKey())) {
13663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson            final ListPreference listPref = (ListPreference) pref;
13763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson            String delay = (String) newValue;
13863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson            updateAutoSnoozeSummary(listPref, delay);
13963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        } else if (KEY_CLOCK_STYLE.equals(pref.getKey())) {
14028dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott            final ListPreference listPref = (ListPreference) pref;
14128dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott            final int idx = listPref.findIndexOfValue((String) newValue);
14228dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott            listPref.setSummary(listPref.getEntries()[idx]);
14363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        } else if (KEY_HOME_TZ.equals(pref.getKey())) {
14428dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott            final ListPreference listPref = (ListPreference) pref;
14563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson            final int idx = listPref.findIndexOfValue((String) newValue);
14663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson            listPref.setSummary(listPref.getEntries()[idx]);
14763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        } else if (KEY_AUTO_HOME_CLOCK.equals(pref.getKey())) {
14863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson            boolean state =((CheckBoxPreference) pref).isChecked();
14963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson            Preference homeTimeZone = findPreference(KEY_HOME_TZ);
15063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson            homeTimeZone.setEnabled(!state);
15163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        } else if (KEY_VOLUME_BUTTONS.equals(pref.getKey())) {
15263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson            final ListPreference listPref = (ListPreference) pref;
15363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson            final int idx = listPref.findIndexOfValue((String) newValue);
15463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson            listPref.setSummary(listPref.getEntries()[idx]);
15528dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott        }
156abbdb5687b2f4505b16d3f8fad3efbab3ea1cf90Patrick Scott        return true;
157abbdb5687b2f4505b16d3f8fad3efbab3ea1cf90Patrick Scott    }
158abbdb5687b2f4505b16d3f8fad3efbab3ea1cf90Patrick Scott
15928dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott    private void updateAutoSnoozeSummary(ListPreference listPref,
16028dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott            String delay) {
16128dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott        int i = Integer.parseInt(delay);
16228dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott        if (i == -1) {
16328dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott            listPref.setSummary(R.string.auto_silence_never);
16428dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott        } else {
16528dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott            listPref.setSummary(getString(R.string.auto_silence_summary, i));
16628dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott        }
16728dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott    }
16828dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott
16913e902189e05f09a890b9d6673a6f451c758542aJason Parekh    private void refresh() {
17063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        ListPreference listPref = (ListPreference) findPreference(KEY_AUTO_SILENCE);
17163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        String delay = listPref.getValue();
17263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        updateAutoSnoozeSummary(listPref, delay);
17363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        listPref.setOnPreferenceChangeListener(this);
17463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson
17563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        listPref = (ListPreference) findPreference(KEY_CLOCK_STYLE);
17628dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott        listPref.setSummary(listPref.getEntry());
17728dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott        listPref.setOnPreferenceChangeListener(this);
178abbdb5687b2f4505b16d3f8fad3efbab3ea1cf90Patrick Scott
17963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        listPref = (ListPreference) findPreference(KEY_HOME_TZ);
18063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        listPref.setSummary(listPref.getEntry());
18128dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott        listPref.setOnPreferenceChangeListener(this);
18263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson
18363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        Preference pref = findPreference(KEY_AUTO_HOME_CLOCK);
18463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        boolean state =((CheckBoxPreference) pref).isChecked();
18563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        pref.setOnPreferenceChangeListener(this);
18663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson
18763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        listPref = (ListPreference)findPreference(KEY_HOME_TZ);
18863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        listPref.setEnabled(state);
18963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        listPref.setSummary(listPref.getEntry());
19063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson
19163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        listPref = (ListPreference) findPreference(KEY_VOLUME_BUTTONS);
19263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        listPref.setSummary(listPref.getEntry());
19363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        listPref.setOnPreferenceChangeListener(this);
19463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson
19563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        SnoozeLengthDialog snoozePref = (SnoozeLengthDialog) findPreference(KEY_ALARM_SNOOZE);
19663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        snoozePref.setSummary();
19728dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott    }
19863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson
19913e902189e05f09a890b9d6673a6f451c758542aJason Parekh}
200