1e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee/*
2e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee * Copyright (C) 2014 The Android Open Source Project
3e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee *
4e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee * Licensed under the Apache License, Version 2.0 (the "License");
5e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee * you may not use this file except in compliance with the License.
6e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee * You may obtain a copy of the License at
7e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee *
8e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee *      http://www.apache.org/licenses/LICENSE-2.0
9e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee *
10e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee * Unless required by applicable law or agreed to in writing, software
11e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee * distributed under the License is distributed on an "AS IS" BASIS,
12e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee * See the License for the specific language governing permissions and
14e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee * limitations under the License
15e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee */
16e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee
17e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Leepackage com.android.dialer.settings;
18e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee
19e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Leeimport android.content.Context;
20e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Leeimport android.media.RingtoneManager;
21dc1806ee3b840a16ec28fb9c4bea1ae848bd1939Brandon Maxwellimport android.os.Build;
22e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Leeimport android.os.Bundle;
23e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Leeimport android.os.Handler;
24e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Leeimport android.os.Message;
25e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Leeimport android.os.Vibrator;
26e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Leeimport android.preference.CheckBoxPreference;
27c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Leeimport android.preference.ListPreference;
28e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Leeimport android.preference.Preference;
29e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Leeimport android.preference.PreferenceFragment;
30e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Leeimport android.preference.PreferenceScreen;
31e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Leeimport android.provider.Settings;
326088576aa518e2d0e158bc035723cd84ed0f4717Junda Liuimport android.telephony.CarrierConfigManager;
33c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Leeimport android.telephony.TelephonyManager;
345f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Leeimport android.widget.Toast;
35e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee
36dc1806ee3b840a16ec28fb9c4bea1ae848bd1939Brandon Maxwellimport com.android.contacts.common.compat.SdkVersionOverride;
37e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Leeimport com.android.dialer.R;
38d909e728c6778723f6dc04d49d30e0f6e38f7e74Brandon Maxwellimport com.android.dialer.compat.SettingsCompat;
39e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Leeimport com.android.phone.common.util.SettingsUtil;
40e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee
41e83576c5503596480d57ff9991df4ad99d26cfc4Andrew Leepublic class SoundSettingsFragment extends PreferenceFragment
42e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee        implements Preference.OnPreferenceChangeListener {
43e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee
44e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee    private static final int NO_DTMF_TONE = 0;
45e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee    private static final int PLAY_DTMF_TONE = 1;
46e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee
47e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee    private static final int NO_VIBRATION_FOR_CALLS = 0;
48e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee    private static final int DO_VIBRATION_FOR_CALLS = 1;
49e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee
50191c5b5e18f45f7652015a6f8581180ea57e0b48Roshan Pius
51191c5b5e18f45f7652015a6f8581180ea57e0b48Roshan Pius    private static final int DTMF_TONE_TYPE_NORMAL = 0;
52191c5b5e18f45f7652015a6f8581180ea57e0b48Roshan Pius
53c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee    private static final int SHOW_CARRIER_SETTINGS = 0;
54c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee    private static final int HIDE_CARRIER_SETTINGS = 1;
55e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee
56c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee    private static final int MSG_UPDATE_RINGTONE_SUMMARY = 1;
57e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee
58e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee    private Preference mRingtonePreference;
59e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee    private CheckBoxPreference mVibrateWhenRinging;
60e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee    private CheckBoxPreference mPlayDtmfTone;
61c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee    private ListPreference mDtmfToneLength;
62e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee
63e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee    private final Runnable mRingtoneLookupRunnable = new Runnable() {
64e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee        @Override
65e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee        public void run() {
66e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee            updateRingtonePreferenceSummary();
67e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee        }
68e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee    };
69e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee
70e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee    private final Handler mRingtoneLookupComplete = new Handler() {
71e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee        @Override
72e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee        public void handleMessage(Message msg) {
73e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee            switch (msg.what) {
74e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee                case MSG_UPDATE_RINGTONE_SUMMARY:
75e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee                    mRingtonePreference.setSummary((CharSequence) msg.obj);
76e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee                    break;
77e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee            }
78e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee        }
79e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee    };
80e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee
81e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee    @Override
82bf0f0fd52ee2315ffd01f7968e5808bea9fdc045Nancy Chen    public Context getContext() {
83bf0f0fd52ee2315ffd01f7968e5808bea9fdc045Nancy Chen        return getActivity();
84bf0f0fd52ee2315ffd01f7968e5808bea9fdc045Nancy Chen    }
85bf0f0fd52ee2315ffd01f7968e5808bea9fdc045Nancy Chen
86bf0f0fd52ee2315ffd01f7968e5808bea9fdc045Nancy Chen    @Override
87e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee    public void onCreate(Bundle savedInstanceState) {
88e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee        super.onCreate(savedInstanceState);
89e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee
90e83576c5503596480d57ff9991df4ad99d26cfc4Andrew Lee        addPreferencesFromResource(R.xml.sound_settings);
91e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee
92c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee        Context context = getActivity();
93c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee
94c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee        mRingtonePreference = findPreference(context.getString(R.string.ringtone_preference_key));
95e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee        mVibrateWhenRinging = (CheckBoxPreference) findPreference(
96c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee                context.getString(R.string.vibrate_on_preference_key));
97e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee        mPlayDtmfTone = (CheckBoxPreference) findPreference(
98c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee                context.getString(R.string.play_dtmf_preference_key));
99c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee        mDtmfToneLength = (ListPreference) findPreference(
100c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee                context.getString(R.string.dtmf_tone_length_preference_key));
101e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee
102e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee        if (hasVibrator()) {
103e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee            mVibrateWhenRinging.setOnPreferenceChangeListener(this);
104e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee        } else {
105e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee            getPreferenceScreen().removePreference(mVibrateWhenRinging);
106e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee            mVibrateWhenRinging = null;
107e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee        }
108e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee
109e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee        mPlayDtmfTone.setOnPreferenceChangeListener(this);
110e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee        mPlayDtmfTone.setChecked(shouldPlayDtmfTone());
111c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee
112c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee        TelephonyManager telephonyManager =
113c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee                (TelephonyManager) getActivity().getSystemService(Context.TELEPHONY_SERVICE);
114dc1806ee3b840a16ec28fb9c4bea1ae848bd1939Brandon Maxwell        if (SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M) >= Build.VERSION_CODES.M
115dc1806ee3b840a16ec28fb9c4bea1ae848bd1939Brandon Maxwell                && telephonyManager.canChangeDtmfToneLength()
116c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee                && (telephonyManager.isWorldPhone() || !shouldHideCarrierSettings())) {
117c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee            mDtmfToneLength.setOnPreferenceChangeListener(this);
118c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee            mDtmfToneLength.setValueIndex(
119c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee                    Settings.System.getInt(context.getContentResolver(),
120191c5b5e18f45f7652015a6f8581180ea57e0b48Roshan Pius                        Settings.System.DTMF_TONE_TYPE_WHEN_DIALING,
121191c5b5e18f45f7652015a6f8581180ea57e0b48Roshan Pius                        DTMF_TONE_TYPE_NORMAL));
122c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee        } else {
123c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee            getPreferenceScreen().removePreference(mDtmfToneLength);
124c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee            mDtmfToneLength = null;
125c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee        }
126e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee    }
127e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee
128e83576c5503596480d57ff9991df4ad99d26cfc4Andrew Lee    @Override
129e83576c5503596480d57ff9991df4ad99d26cfc4Andrew Lee    public void onResume() {
130e83576c5503596480d57ff9991df4ad99d26cfc4Andrew Lee        super.onResume();
131e83576c5503596480d57ff9991df4ad99d26cfc4Andrew Lee
132d909e728c6778723f6dc04d49d30e0f6e38f7e74Brandon Maxwell        if (!SettingsCompat.System.canWrite(getContext())) {
1335f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Lee            // If the user launches this setting fragment, then toggles the WRITE_SYSTEM_SETTINGS
1345f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Lee            // AppOp, then close the fragment since there is nothing useful to do.
1355f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Lee            getActivity().onBackPressed();
1365f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Lee            return;
1375f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Lee        }
1385f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Lee
139e83576c5503596480d57ff9991df4ad99d26cfc4Andrew Lee        if (mVibrateWhenRinging != null) {
140e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee            mVibrateWhenRinging.setChecked(shouldVibrateWhenRinging());
141e83576c5503596480d57ff9991df4ad99d26cfc4Andrew Lee        }
142e83576c5503596480d57ff9991df4ad99d26cfc4Andrew Lee
143e83576c5503596480d57ff9991df4ad99d26cfc4Andrew Lee        // Lookup the ringtone name asynchronously.
144e83576c5503596480d57ff9991df4ad99d26cfc4Andrew Lee        new Thread(mRingtoneLookupRunnable).start();
145e83576c5503596480d57ff9991df4ad99d26cfc4Andrew Lee    }
146e83576c5503596480d57ff9991df4ad99d26cfc4Andrew Lee
147e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee    /**
148e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee     * Supports onPreferenceChangeListener to look for preference changes.
149e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee     *
150e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee     * @param preference The preference to be changed
151e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee     * @param objValue The value of the selection, NOT its localized display value.
152e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee     */
153e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee    @Override
154e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee    public boolean onPreferenceChange(Preference preference, Object objValue) {
155d909e728c6778723f6dc04d49d30e0f6e38f7e74Brandon Maxwell        if (!SettingsCompat.System.canWrite(getContext())) {
1565f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Lee            // A user shouldn't be able to get here, but this protects against monkey crashes.
1575f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Lee            Toast.makeText(
1585f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Lee                    getContext(),
1595f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Lee                    getResources().getString(R.string.toast_cannot_write_system_settings),
1605f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Lee                    Toast.LENGTH_SHORT).show();
1615f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Lee            return true;
1625f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Lee        }
163e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee        if (preference == mVibrateWhenRinging) {
164e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee            boolean doVibrate = (Boolean) objValue;
165c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee            Settings.System.putInt(getActivity().getContentResolver(),
166e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee                    Settings.System.VIBRATE_WHEN_RINGING,
167e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee                    doVibrate ? DO_VIBRATION_FOR_CALLS : NO_VIBRATION_FOR_CALLS);
168c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee        } else if (preference == mDtmfToneLength) {
169c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee            int index = mDtmfToneLength.findIndexOfValue((String) objValue);
170c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee            Settings.System.putInt(getActivity().getContentResolver(),
171c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee                    Settings.System.DTMF_TONE_TYPE_WHEN_DIALING, index);
172e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee        }
173e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee        return true;
174e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee    }
175e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee
176e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee    /**
177e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee     * Click listener for toggle events.
178e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee     */
179e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee    @Override
180e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
181d909e728c6778723f6dc04d49d30e0f6e38f7e74Brandon Maxwell        if (!SettingsCompat.System.canWrite(getContext())) {
1825f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Lee            Toast.makeText(
1835f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Lee                    getContext(),
1845f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Lee                    getResources().getString(R.string.toast_cannot_write_system_settings),
1855f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Lee                    Toast.LENGTH_SHORT).show();
1865f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Lee            return true;
1875f6c901ad062cd7d88db09b555e28ee354ca66c6Yorke Lee        }
188e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee        if (preference == mPlayDtmfTone) {
189c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee            Settings.System.putInt(getActivity().getContentResolver(),
190e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee                    Settings.System.DTMF_TONE_WHEN_DIALING,
191e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee                    mPlayDtmfTone.isChecked() ? PLAY_DTMF_TONE : NO_DTMF_TONE);
192e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee        }
193e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee        return true;
194e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee    }
195e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee
196e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee    /**
197e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee     * Updates the summary text on the ringtone preference with the name of the ringtone.
198e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee     */
199e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee    private void updateRingtonePreferenceSummary() {
200e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee        SettingsUtil.updateRingtoneName(
201c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee                getActivity(),
202e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee                mRingtoneLookupComplete,
203e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee                RingtoneManager.TYPE_RINGTONE,
204e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee                mRingtonePreference.getKey(),
205e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee                MSG_UPDATE_RINGTONE_SUMMARY);
206e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee    }
207fb45b007d84a02b4889b614a1660c97bd5b4ee63Brian Attwell
208fb45b007d84a02b4889b614a1660c97bd5b4ee63Brian Attwell    /**
209e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee     * Obtain the value for "vibrate when ringing" setting. The default value is false.
210fb45b007d84a02b4889b614a1660c97bd5b4ee63Brian Attwell     *
211fb45b007d84a02b4889b614a1660c97bd5b4ee63Brian Attwell     * Watch out: if the setting is missing in the device, this will try obtaining the old
212fb45b007d84a02b4889b614a1660c97bd5b4ee63Brian Attwell     * "vibrate on ring" setting from AudioManager, and save the previous setting to the new one.
213fb45b007d84a02b4889b614a1660c97bd5b4ee63Brian Attwell     */
214e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee    private boolean shouldVibrateWhenRinging() {
215c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee        int vibrateWhenRingingSetting = Settings.System.getInt(getActivity().getContentResolver(),
216e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee                Settings.System.VIBRATE_WHEN_RINGING,
217e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee                NO_VIBRATION_FOR_CALLS);
218e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee        return hasVibrator() && (vibrateWhenRingingSetting == DO_VIBRATION_FOR_CALLS);
219e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee    }
220e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee
221e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee    /**
222e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee     * Obtains the value for dialpad/DTMF tones. The default value is true.
223e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee     */
224e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee    private boolean shouldPlayDtmfTone() {
225c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee        int dtmfToneSetting = Settings.System.getInt(getActivity().getContentResolver(),
226e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee                Settings.System.DTMF_TONE_WHEN_DIALING,
227e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee                PLAY_DTMF_TONE);
228e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee        return dtmfToneSetting == PLAY_DTMF_TONE;
229e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee    }
230e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee
231e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee    /**
232e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee     * Whether the device hardware has a vibrator.
233e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee     */
234e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee    private boolean hasVibrator() {
235c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee        Vibrator vibrator = (Vibrator) getActivity().getSystemService(Context.VIBRATOR_SERVICE);
236e94b9454cb8baf31034af05dc797cdfffb04e308Andrew Lee        return vibrator != null && vibrator.hasVibrator();
237fb45b007d84a02b4889b614a1660c97bd5b4ee63Brian Attwell    }
238c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee
239c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee    private boolean shouldHideCarrierSettings() {
2406088576aa518e2d0e158bc035723cd84ed0f4717Junda Liu        CarrierConfigManager configManager = (CarrierConfigManager) getActivity().getSystemService(
2416088576aa518e2d0e158bc035723cd84ed0f4717Junda Liu                Context.CARRIER_CONFIG_SERVICE);
2426088576aa518e2d0e158bc035723cd84ed0f4717Junda Liu        return configManager.getConfig().getBoolean(
2436088576aa518e2d0e158bc035723cd84ed0f4717Junda Liu                CarrierConfigManager.KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL);
244c65acdff581a103b6baabd25be6fcc8be88215f0Andrew Lee    }
245e4ea104a18417115f35983bd4872bfe22a66bdfdAndrew Lee}
246