18d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee/*
28d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee * Copyright (C) 2014 The Android Open Source Project
38d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee *
48d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee * Licensed under the Apache License, Version 2.0 (the "License");
58d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee * you may not use this file except in compliance with the License.
68d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee * You may obtain a copy of the License at
78d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee *
88d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee *      http://www.apache.org/licenses/LICENSE-2.0
98d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee *
108d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee * Unless required by applicable law or agreed to in writing, software
118d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee * distributed under the License is distributed on an "AS IS" BASIS,
128d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee * See the License for the specific language governing permissions and
148d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee * limitations under the License.
158d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee */
168d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee
178d66d81ad89e66ccaf688e896286e2a06307a554Andrew Leepackage com.android.phone.settings;
188d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee
198d66d81ad89e66ccaf688e896286e2a06307a554Andrew Leeimport android.content.Context;
208d66d81ad89e66ccaf688e896286e2a06307a554Andrew Leeimport android.content.SharedPreferences;
218d66d81ad89e66ccaf688e896286e2a06307a554Andrew Leeimport android.net.Uri;
228d66d81ad89e66ccaf688e896286e2a06307a554Andrew Leeimport android.preference.PreferenceManager;
238d66d81ad89e66ccaf688e896286e2a06307a554Andrew Leeimport android.provider.Settings;
241ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Leeimport android.telephony.TelephonyManager;
258d66d81ad89e66ccaf688e896286e2a06307a554Andrew Leeimport android.text.TextUtils;
268d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee
271ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Leeimport com.android.internal.telephony.Phone;
288d66d81ad89e66ccaf688e896286e2a06307a554Andrew Leeimport com.android.phone.R;
298d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee
308d66d81ad89e66ccaf688e896286e2a06307a554Andrew Leepublic class VoicemailNotificationSettingsUtil {
311ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee    private static final String VOICEMAIL_NOTIFICATION_RINGTONE_SHARED_PREFS_KEY_PREFIX =
321ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee            "voicemail_notification_ringtone_";
331ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee    private static final String VOICEMAIL_NOTIFICATION_VIBRATION_SHARED_PREFS_KEY_PREFIX =
341ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee            "voicemail_notification_vibrate_";
358d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee
368d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee    // Old voicemail notification vibration string constants used for migration.
371ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee    private static final String OLD_VOICEMAIL_NOTIFICATION_RINGTONE_SHARED_PREFS_KEY =
381ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee            "button_voicemail_notification_ringtone_key";
391ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee    private static final String OLD_VOICEMAIL_NOTIFICATION_VIBRATION_SHARED_PREFS_KEY =
401ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee            "button_voicemail_notification_vibrate_key";
418d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee    private static final String OLD_VOICEMAIL_VIBRATE_WHEN_SHARED_PREFS_KEY =
428d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee            "button_voicemail_notification_vibrate_when_key";
438d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee    private static final String OLD_VOICEMAIL_RINGTONE_SHARED_PREFS_KEY =
448d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee            "button_voicemail_notification_ringtone_key";
458d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee    private static final String OLD_VOICEMAIL_VIBRATION_ALWAYS = "always";
468d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee    private static final String OLD_VOICEMAIL_VIBRATION_NEVER = "never";
478d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee
481ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee    public static void setVibrationEnabled(Phone phone, boolean isEnabled) {
491ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(phone.getContext());
508d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee        SharedPreferences.Editor editor = prefs.edit();
511ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee        editor.putBoolean(getVoicemailVibrationSharedPrefsKey(phone), isEnabled);
528d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee        editor.commit();
538d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee    }
548d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee
551ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee    public static boolean isVibrationEnabled(Phone phone) {
561ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(phone.getContext());
571ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee        migrateVoicemailVibrationSettingsIfNeeded(phone, prefs);
581ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee        return prefs.getBoolean(getVoicemailVibrationSharedPrefsKey(phone), false /* defValue */);
591ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee    }
601ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee
611ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee   public static void setRingtoneUri(Phone phone, Uri ringtoneUri) {
621ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(phone.getContext());
631ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee        String ringtoneUriStr = ringtoneUri != null ? ringtoneUri.toString() : "";
641ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee
651ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee        SharedPreferences.Editor editor = prefs.edit();
661ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee        editor.putString(getVoicemailRingtoneSharedPrefsKey(phone), ringtoneUriStr);
671ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee        editor.commit();
681ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee    }
691ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee
701ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee    public static Uri getRingtoneUri(Phone phone) {
711ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(phone.getContext());
721ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee        migrateVoicemailRingtoneSettingsIfNeeded(phone, prefs);
731ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee        String uriString = prefs.getString(
74fa3de753c544675d95504623706a2eb9cd618468Andrew Lee                getVoicemailRingtoneSharedPrefsKey(phone),
75fa3de753c544675d95504623706a2eb9cd618468Andrew Lee                Settings.System.DEFAULT_NOTIFICATION_URI.toString());
761ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee        return !TextUtils.isEmpty(uriString) ? Uri.parse(uriString) : null;
778d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee    }
788d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee
798d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee    /**
801ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee     * Migrate voicemail settings from {@link #OLD_VIBRATE_WHEN_KEY} or
811ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee     * {@link #OLD_VOICEMAIL_NOTIFICATION_VIBRATE_KEY}.
821ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee     *
831ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee     * TODO: Add helper which migrates settings from old version to new version.
848d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee     */
851ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee    private static void migrateVoicemailVibrationSettingsIfNeeded(
861ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee            Phone phone, SharedPreferences prefs) {
871ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee        String key = getVoicemailVibrationSharedPrefsKey(phone);
881ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee        TelephonyManager telephonyManager = TelephonyManager.from(phone.getContext());
891ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee
901ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee        // Skip if a preference exists, or if phone is MSIM.
911ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee        if (prefs.contains(key) || telephonyManager.getPhoneCount() != 1) {
921ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee            return;
931ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee        }
941ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee
951ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee        if (prefs.contains(OLD_VOICEMAIL_NOTIFICATION_VIBRATION_SHARED_PREFS_KEY)) {
961ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee            boolean voicemailVibrate = prefs.getBoolean(
971ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee                    OLD_VOICEMAIL_NOTIFICATION_VIBRATION_SHARED_PREFS_KEY, false /* defValue */);
981ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee
991ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee            SharedPreferences.Editor editor = prefs.edit();
1001ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee            editor.putBoolean(key, voicemailVibrate)
1011ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee                    .remove(OLD_VOICEMAIL_VIBRATE_WHEN_SHARED_PREFS_KEY)
1021ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee                    .commit();
1031ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee        }
1041ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee
1051ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee        if (prefs.contains(OLD_VOICEMAIL_VIBRATE_WHEN_SHARED_PREFS_KEY)) {
1068d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee            // If vibrateWhen is always, then voicemailVibrate should be true.
1078d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee            // If it is "only in silent mode", or "never", then voicemailVibrate should be false.
1088d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee            String vibrateWhen = prefs.getString(
1098d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee                    OLD_VOICEMAIL_VIBRATE_WHEN_SHARED_PREFS_KEY, OLD_VOICEMAIL_VIBRATION_NEVER);
1108d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee            boolean voicemailVibrate = vibrateWhen.equals(OLD_VOICEMAIL_VIBRATION_ALWAYS);
1118d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee
1128d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee            SharedPreferences.Editor editor = prefs.edit();
1131ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee            editor.putBoolean(key, voicemailVibrate)
1141ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee                    .remove(OLD_VOICEMAIL_NOTIFICATION_VIBRATION_SHARED_PREFS_KEY)
1158d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee                    .commit();
1168d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee        }
1178d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee    }
1188d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee
1191ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee    /**
1201ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee     * Migrate voicemail settings from OLD_VOICEMAIL_NOTIFICATION_RINGTONE_SHARED_PREFS_KEY.
1211ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee     *
1221ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee     * TODO: Add helper which migrates settings from old version to new version.
1231ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee     */
1241ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee    private static void migrateVoicemailRingtoneSettingsIfNeeded(
1251ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee            Phone phone, SharedPreferences prefs) {
1261ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee        String key = getVoicemailRingtoneSharedPrefsKey(phone);
1271ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee        TelephonyManager telephonyManager = TelephonyManager.from(phone.getContext());
1288d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee
1291ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee        // Skip if a preference exists, or if phone is MSIM.
1301ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee        if (prefs.contains(key) || telephonyManager.getPhoneCount() != 1) {
1311ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee            return;
1321ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee        }
1331ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee
1341ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee        if (prefs.contains(OLD_VOICEMAIL_NOTIFICATION_RINGTONE_SHARED_PREFS_KEY)) {
1351ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee            String uriString = prefs.getString(
1361ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee                    OLD_VOICEMAIL_NOTIFICATION_RINGTONE_SHARED_PREFS_KEY, null /* defValue */);
1378d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee
1381ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee            SharedPreferences.Editor editor = prefs.edit();
1391ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee            editor.putString(key, uriString)
1401ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee                    .remove(OLD_VOICEMAIL_NOTIFICATION_RINGTONE_SHARED_PREFS_KEY)
1411ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee                    .commit();
1428d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee        }
1438d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee    }
1448d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee
1451ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee    private static String getVoicemailVibrationSharedPrefsKey(Phone phone) {
1461ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee        return VOICEMAIL_NOTIFICATION_VIBRATION_SHARED_PREFS_KEY_PREFIX + phone.getSubId();
1471ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee    }
1481ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee
1491ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee    public static String getVoicemailRingtoneSharedPrefsKey(Phone phone) {
1501ec7c7e0c27729717907f3e40c0bc2ab240e1e29Andrew Lee        return VOICEMAIL_NOTIFICATION_RINGTONE_SHARED_PREFS_KEY_PREFIX + phone.getSubId();
1518d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee    }
1528d66d81ad89e66ccaf688e896286e2a06307a554Andrew Lee}
153