• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2014 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 
17 package com.android.dialer.settings;
18 
19 import android.content.Context;
20 import android.media.RingtoneManager;
21 import android.os.Bundle;
22 import android.os.Handler;
23 import android.os.Message;
24 import android.os.Vibrator;
25 import android.preference.CheckBoxPreference;
26 import android.preference.Preference;
27 import android.preference.PreferenceCategory;
28 import android.preference.PreferenceFragment;
29 import android.preference.PreferenceScreen;
30 import android.provider.Settings;
31 
32 import com.android.dialer.R;
33 import com.android.phone.common.util.SettingsUtil;
34 
35 import java.lang.Boolean;
36 import java.lang.CharSequence;
37 import java.lang.Object;
38 import java.lang.Override;
39 import java.lang.Runnable;
40 import java.lang.String;
41 import java.lang.Thread;
42 
43 public class GeneralSettingsFragment extends PreferenceFragment
44         implements Preference.OnPreferenceChangeListener {
45     private static final String CATEGORY_SOUNDS_KEY    = "dialer_general_sounds_category_key";
46     private static final String BUTTON_RINGTONE_KEY    = "button_ringtone_key";
47     private static final String BUTTON_VIBRATE_ON_RING = "button_vibrate_on_ring";
48     private static final String BUTTON_PLAY_DTMF_TONE  = "button_play_dtmf_tone";
49     private static final String BUTTON_RESPOND_VIA_SMS_KEY = "button_respond_via_sms_key";
50 
51     private static final int MSG_UPDATE_RINGTONE_SUMMARY = 1;
52 
53     private Context mContext;
54 
55     private Preference mRingtonePreference;
56     private CheckBoxPreference mVibrateWhenRinging;
57     private CheckBoxPreference mPlayDtmfTone;
58     private Preference mRespondViaSms;
59 
60     private Runnable mRingtoneLookupRunnable;
61     private final Handler mRingtoneLookupComplete = new Handler() {
62         @Override
63         public void handleMessage(Message msg) {
64             switch (msg.what) {
65                 case MSG_UPDATE_RINGTONE_SUMMARY:
66                     mRingtonePreference.setSummary((CharSequence) msg.obj);
67                     break;
68             }
69         }
70     };
71 
72     @Override
onCreate(Bundle savedInstanceState)73     public void onCreate(Bundle savedInstanceState) {
74         super.onCreate(savedInstanceState);
75 
76         mContext = getActivity().getApplicationContext();
77 
78         addPreferencesFromResource(R.xml.general_settings);
79 
80         mRingtonePreference = findPreference(BUTTON_RINGTONE_KEY);
81         mVibrateWhenRinging = (CheckBoxPreference) findPreference(BUTTON_VIBRATE_ON_RING);
82         mPlayDtmfTone = (CheckBoxPreference) findPreference(BUTTON_PLAY_DTMF_TONE);
83         mRespondViaSms = findPreference(BUTTON_RESPOND_VIA_SMS_KEY);
84 
85         PreferenceCategory soundCategory = (PreferenceCategory) findPreference(CATEGORY_SOUNDS_KEY);
86         if (mVibrateWhenRinging != null) {
87             Vibrator vibrator = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE);
88             if (vibrator != null && vibrator.hasVibrator()) {
89                 mVibrateWhenRinging.setOnPreferenceChangeListener(this);
90             } else {
91                 soundCategory.removePreference(mVibrateWhenRinging);
92                 mVibrateWhenRinging = null;
93             }
94         }
95 
96         if (mPlayDtmfTone != null) {
97             mPlayDtmfTone.setOnPreferenceChangeListener(this);
98             mPlayDtmfTone.setChecked(Settings.System.getInt(mContext.getContentResolver(),
99                     Settings.System.DTMF_TONE_WHEN_DIALING, 1) != 0);
100         }
101 
102         mRingtoneLookupRunnable = new Runnable() {
103             @Override
104             public void run() {
105                 if (mRingtonePreference != null) {
106                     SettingsUtil.updateRingtoneName(
107                             mContext,
108                             mRingtoneLookupComplete,
109                             RingtoneManager.TYPE_RINGTONE,
110                             mRingtonePreference,
111                             MSG_UPDATE_RINGTONE_SUMMARY);
112                 }
113             }
114         };
115     }
116 
117     /**
118      * Supports onPreferenceChangeListener to look for preference changes.
119      *
120      * @param preference The preference to be changed
121      * @param objValue The value of the selection, NOT its localized display value.
122      */
123     @Override
onPreferenceChange(Preference preference, Object objValue)124     public boolean onPreferenceChange(Preference preference, Object objValue) {
125         if (preference == mVibrateWhenRinging) {
126             boolean doVibrate = (Boolean) objValue;
127             Settings.System.putInt(mContext.getContentResolver(),
128                     Settings.System.VIBRATE_WHEN_RINGING, doVibrate ? 1 : 0);
129         }
130         return true;
131     }
132 
133     /**
134      * Click listener for toggle events.
135      */
136     @Override
onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference)137     public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
138         if (preference == mPlayDtmfTone) {
139             Settings.System.putInt(mContext.getContentResolver(),
140                     Settings.System.DTMF_TONE_WHEN_DIALING, mPlayDtmfTone.isChecked() ? 1 : 0);
141         } else if (preference == mRespondViaSms) {
142             // Needs to return false for the intent to launch.
143             return false;
144         }
145         return true;
146     }
147 
148     @Override
onResume()149     public void onResume() {
150         super.onResume();
151 
152         if (mVibrateWhenRinging != null) {
153             mVibrateWhenRinging.setChecked(SettingsUtil.getVibrateWhenRingingSetting(mContext));
154         }
155 
156         // Lookup the ringtone name asynchronously.
157         new Thread(mRingtoneLookupRunnable).start();
158     }
159 }
160