SettingsActivity.java revision 63211efa1565b5dc171938740ba183302d0e46f3
1/*
2 * Copyright (C) 2009 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.deskclock;
18
19import android.content.Intent;
20import android.media.AudioManager;
21import android.os.Bundle;
22import android.preference.CheckBoxPreference;
23import android.preference.ListPreference;
24import android.preference.Preference;
25import android.preference.PreferenceActivity;
26import android.preference.PreferenceScreen;
27import android.provider.Settings;
28import android.view.Menu;
29import android.view.MenuItem;
30
31/**
32 * Settings for the Alarm Clock.
33 */
34public class SettingsActivity extends PreferenceActivity
35        implements Preference.OnPreferenceChangeListener {
36
37    private static final int ALARM_STREAM_TYPE_BIT =
38            1 << AudioManager.STREAM_ALARM;
39
40    static final String KEY_ALARM_IN_SILENT_MODE =
41            "alarm_in_silent_mode";
42    static final String KEY_ALARM_SNOOZE =
43            "snooze_duration";
44    static final String KEY_VOLUME_BEHAVIOR =
45            "volume_button_setting";
46    static final String KEY_AUTO_SILENCE =
47            "auto_silence";
48    static final String KEY_CLOCK_STYLE =
49            "clock_style";
50    static final String KEY_HOME_TZ =
51            "home_time_zone";
52    static final String KEY_AUTO_HOME_CLOCK =
53            "automatic_home_clock";
54    static final String KEY_VOLUME_BUTTONS =
55            "volume_button_setting";
56    @Override
57    protected void onCreate(Bundle savedInstanceState) {
58        super.onCreate(savedInstanceState);
59        addPreferencesFromResource(R.xml.settings);
60
61    /*    final AlarmPreference ringtone =
62                (AlarmPreference) findPreference(KEY_DEFAULT_RINGTONE);
63        Uri alert = RingtoneManager.getActualDefaultRingtoneUri(this,
64                RingtoneManager.TYPE_ALARM);
65        if (alert != null) {
66            ringtone.setAlert(alert);
67        }
68        ringtone.setChangeDefault();*/
69    }
70
71    @Override
72    protected void onResume() {
73        super.onResume();
74        refresh();
75    }
76
77    @Override
78    public boolean onOptionsItemSelected (MenuItem item) {
79        switch (item.getItemId()) {
80            case R.id.menu_item_help:
81                startActivity(new Intent(this, HelpActivity.class));
82                return true;
83            default:
84                break;
85        }
86        return super.onOptionsItemSelected(item);
87    }
88
89
90    @Override
91    public boolean onCreateOptionsMenu (Menu menu) {
92        getMenuInflater().inflate(R.menu.settings_menu, menu);
93        return super.onCreateOptionsMenu(menu);
94    }
95
96    @Override
97    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
98            Preference preference) {
99        if (KEY_ALARM_IN_SILENT_MODE.equals(preference.getKey())) {
100            CheckBoxPreference pref = (CheckBoxPreference) preference;
101            int ringerModeStreamTypes = Settings.System.getInt(
102                    getContentResolver(),
103                    Settings.System.MODE_RINGER_STREAMS_AFFECTED, 0);
104
105            if (pref.isChecked()) {
106                ringerModeStreamTypes &= ~ALARM_STREAM_TYPE_BIT;
107            } else {
108                ringerModeStreamTypes |= ALARM_STREAM_TYPE_BIT;
109            }
110
111            Settings.System.putInt(getContentResolver(),
112                    Settings.System.MODE_RINGER_STREAMS_AFFECTED,
113                    ringerModeStreamTypes);
114
115            return true;
116        }
117
118        return super.onPreferenceTreeClick(preferenceScreen, preference);
119    }
120
121    @Override
122    public boolean onPreferenceChange(Preference pref, Object newValue) {
123        if (KEY_AUTO_SILENCE.equals(pref.getKey())) {
124            final ListPreference listPref = (ListPreference) pref;
125            String delay = (String) newValue;
126            updateAutoSnoozeSummary(listPref, delay);
127        } else if (KEY_CLOCK_STYLE.equals(pref.getKey())) {
128            final ListPreference listPref = (ListPreference) pref;
129            final int idx = listPref.findIndexOfValue((String) newValue);
130            listPref.setSummary(listPref.getEntries()[idx]);
131        } else if (KEY_HOME_TZ.equals(pref.getKey())) {
132            final ListPreference listPref = (ListPreference) pref;
133            final int idx = listPref.findIndexOfValue((String) newValue);
134            listPref.setSummary(listPref.getEntries()[idx]);
135        } else if (KEY_AUTO_HOME_CLOCK.equals(pref.getKey())) {
136            boolean state =((CheckBoxPreference) pref).isChecked();
137            Preference homeTimeZone = findPreference(KEY_HOME_TZ);
138            homeTimeZone.setEnabled(!state);
139        } else if (KEY_VOLUME_BUTTONS.equals(pref.getKey())) {
140            final ListPreference listPref = (ListPreference) pref;
141            final int idx = listPref.findIndexOfValue((String) newValue);
142            listPref.setSummary(listPref.getEntries()[idx]);
143        }
144        return true;
145    }
146
147    private void updateAutoSnoozeSummary(ListPreference listPref,
148            String delay) {
149        int i = Integer.parseInt(delay);
150        if (i == -1) {
151            listPref.setSummary(R.string.auto_silence_never);
152        } else {
153            listPref.setSummary(getString(R.string.auto_silence_summary, i));
154        }
155    }
156
157    private void refresh() {
158        ListPreference listPref = (ListPreference) findPreference(KEY_AUTO_SILENCE);
159        String delay = listPref.getValue();
160        updateAutoSnoozeSummary(listPref, delay);
161        listPref.setOnPreferenceChangeListener(this);
162
163        listPref = (ListPreference) findPreference(KEY_CLOCK_STYLE);
164        listPref.setSummary(listPref.getEntry());
165        listPref.setOnPreferenceChangeListener(this);
166
167        listPref = (ListPreference) findPreference(KEY_HOME_TZ);
168        listPref.setSummary(listPref.getEntry());
169        listPref.setOnPreferenceChangeListener(this);
170
171        Preference pref = findPreference(KEY_AUTO_HOME_CLOCK);
172        boolean state =((CheckBoxPreference) pref).isChecked();
173        pref.setOnPreferenceChangeListener(this);
174
175        listPref = (ListPreference)findPreference(KEY_HOME_TZ);
176        listPref.setEnabled(state);
177        listPref.setSummary(listPref.getEntry());
178
179        listPref = (ListPreference) findPreference(KEY_VOLUME_BUTTONS);
180        listPref.setSummary(listPref.getEntry());
181        listPref.setOnPreferenceChangeListener(this);
182
183        SnoozeLengthDialog snoozePref = (SnoozeLengthDialog) findPreference(KEY_ALARM_SNOOZE);
184        snoozePref.setSummary();
185    }
186
187}
188