SettingsActivity.java revision e7bf7ed4c4d3680d838a1581832d22be89e37e46
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.SharedPreferences;
20import android.media.AudioManager;
21import android.media.RingtoneManager;
22import android.net.Uri;
23import android.os.Bundle;
24import android.preference.CheckBoxPreference;
25import android.preference.ListPreference;
26import android.preference.Preference;
27import android.preference.PreferenceActivity;
28import android.preference.PreferenceScreen;
29import android.preference.RingtonePreference;
30import android.provider.Settings;
31
32/**
33 * Settings for the Alarm Clock.
34 */
35public class SettingsActivity extends PreferenceActivity
36        implements Preference.OnPreferenceChangeListener {
37
38    private static final int ALARM_STREAM_TYPE_BIT =
39            1 << AudioManager.STREAM_ALARM;
40
41    private static final String KEY_ALARM_IN_SILENT_MODE =
42            "alarm_in_silent_mode";
43    static final String KEY_ALARM_SNOOZE =
44            "snooze_duration";
45    static final String KEY_VOLUME_BEHAVIOR =
46            "volume_button_setting";
47    static final String KEY_DEFAULT_RINGTONE =
48            "default_ringtone";
49
50    @Override
51    protected void onCreate(Bundle savedInstanceState) {
52        super.onCreate(savedInstanceState);
53        addPreferencesFromResource(R.xml.settings);
54
55        final AlarmPreference ringtone =
56                (AlarmPreference) findPreference(KEY_DEFAULT_RINGTONE);
57        Uri alert = RingtoneManager.getActualDefaultRingtoneUri(this,
58                RingtoneManager.TYPE_ALARM);
59        if (alert != null) {
60            ringtone.setAlert(alert);
61        }
62        ringtone.setChangeDefault();
63    }
64
65    @Override
66    protected void onResume() {
67        super.onResume();
68        refresh();
69    }
70
71    @Override
72    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
73            Preference preference) {
74        if (KEY_ALARM_IN_SILENT_MODE.equals(preference.getKey())) {
75            CheckBoxPreference pref = (CheckBoxPreference) preference;
76            int ringerModeStreamTypes = Settings.System.getInt(
77                    getContentResolver(),
78                    Settings.System.MODE_RINGER_STREAMS_AFFECTED, 0);
79
80            if (pref.isChecked()) {
81                ringerModeStreamTypes &= ~ALARM_STREAM_TYPE_BIT;
82            } else {
83                ringerModeStreamTypes |= ALARM_STREAM_TYPE_BIT;
84            }
85
86            Settings.System.putInt(getContentResolver(),
87                    Settings.System.MODE_RINGER_STREAMS_AFFECTED,
88                    ringerModeStreamTypes);
89
90            return true;
91        }
92
93        return super.onPreferenceTreeClick(preferenceScreen, preference);
94    }
95
96    public boolean onPreferenceChange(Preference pref, Object newValue) {
97        final ListPreference listPref = (ListPreference) pref;
98        final int idx = listPref.findIndexOfValue((String) newValue);
99        listPref.setSummary(listPref.getEntries()[idx]);
100        return true;
101    }
102
103    private void refresh() {
104        final CheckBoxPreference alarmInSilentModePref =
105                (CheckBoxPreference) findPreference(KEY_ALARM_IN_SILENT_MODE);
106        final int silentModeStreams =
107                Settings.System.getInt(getContentResolver(),
108                        Settings.System.MODE_RINGER_STREAMS_AFFECTED, 0);
109        alarmInSilentModePref.setChecked(
110                (silentModeStreams & ALARM_STREAM_TYPE_BIT) == 0);
111
112        final ListPreference snooze =
113                (ListPreference) findPreference(KEY_ALARM_SNOOZE);
114        snooze.setSummary(snooze.getEntry());
115        snooze.setOnPreferenceChangeListener(this);
116    }
117
118}
119