19cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen/*
29cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen * Copyright (C) 2015 The Android Open Source Project
39cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen *
49cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen * Licensed under the Apache License, Version 2.0 (the "License");
59cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen * you may not use this file except in compliance with the License.
69cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen * You may obtain a copy of the License at
79cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen *
89cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen *      http://www.apache.org/licenses/LICENSE-2.0
99cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen *
109cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen * Unless required by applicable law or agreed to in writing, software
119cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen * distributed under the License is distributed on an "AS IS" BASIS,
129cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen * See the License for the specific language governing permissions and
149cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen * limitations under the License
159cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen */
169cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chenpackage com.android.phone.settings;
179cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen
189cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chenimport android.content.Context;
199cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chenimport android.content.SharedPreferences;
209cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chenimport android.preference.PreferenceManager;
219cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chenimport android.telecom.PhoneAccountHandle;
229cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen
2357c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chenimport com.android.internal.telephony.Phone;
2457c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chenimport com.android.phone.PhoneUtils;
259cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chenimport com.android.phone.vvm.omtp.OmtpConstants;
269cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chenimport com.android.phone.vvm.omtp.sms.StatusMessage;
279cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen
289cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen/**
29a04959f74ba9009612804a4a5a5d8dd470969ddcNancy Chen * Save visual voicemail login values and whether or not a particular account is enabled in shared
30a04959f74ba9009612804a4a5a5d8dd470969ddcNancy Chen * preferences to be retrieved later.
3157c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chen * Because a voicemail source is tied 1:1 to a phone account, the phone account handle is used in
3257c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chen * the key for each voicemail source and the associated data.
339cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen */
349cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chenpublic class VisualVoicemailSettingsUtil {
359cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen    private static final String VISUAL_VOICEMAIL_SHARED_PREFS_KEY_PREFIX =
369cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen            "visual_voicemail_";
379cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen
389cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen    private static final String IS_ENABLED_KEY = "is_enabled";
39a04959f74ba9009612804a4a5a5d8dd470969ddcNancy Chen    // If a carrier vvm app is installed, Google visual voicemail is automatically switched off
40a04959f74ba9009612804a4a5a5d8dd470969ddcNancy Chen    // however, the user can override this setting.
41a04959f74ba9009612804a4a5a5d8dd470969ddcNancy Chen    private static final String IS_USER_SET = "is_user_set";
424406848c72d9d4f46e30842f434e6e27f4319503Nancy Chen    // Record the timestamp of the last full sync so that duplicate syncs can be reduced.
434406848c72d9d4f46e30842f434e6e27f4319503Nancy Chen    private static final String LAST_FULL_SYNC_TIMESTAMP = "last_full_sync_timestamp";
444406848c72d9d4f46e30842f434e6e27f4319503Nancy Chen    // Constant indicating that there has never been a full sync.
454406848c72d9d4f46e30842f434e6e27f4319503Nancy Chen    public static final long NO_PRIOR_FULL_SYNC = -1;
469cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen
476337d1be5db67c7b81e7998988ca53da50ab44c2Nancy Chen    // Setting for how often retries should be done.
486337d1be5db67c7b81e7998988ca53da50ab44c2Nancy Chen    private static final String SYNC_RETRY_INTERVAL = "sync_retry_interval";
496337d1be5db67c7b81e7998988ca53da50ab44c2Nancy Chen    private static final long MAX_SYNC_RETRY_INTERVAL_MS = 86400000;   // 24 hours
506337d1be5db67c7b81e7998988ca53da50ab44c2Nancy Chen    private static final long DEFAULT_SYNC_RETRY_INTERVAL_MS = 900000; // 15 minutes
516337d1be5db67c7b81e7998988ca53da50ab44c2Nancy Chen
526337d1be5db67c7b81e7998988ca53da50ab44c2Nancy Chen
53a04959f74ba9009612804a4a5a5d8dd470969ddcNancy Chen    public static void setVisualVoicemailEnabled(Phone phone, boolean isEnabled,
54a04959f74ba9009612804a4a5a5d8dd470969ddcNancy Chen            boolean isUserSet) {
5557c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chen        setVisualVoicemailEnabled(phone.getContext(), PhoneUtils.makePstnPhoneAccountHandle(phone),
56a04959f74ba9009612804a4a5a5d8dd470969ddcNancy Chen                isEnabled, isUserSet);
5757c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chen    }
5857c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chen
599cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen    public static void setVisualVoicemailEnabled(Context context, PhoneAccountHandle phoneAccount,
60a04959f74ba9009612804a4a5a5d8dd470969ddcNancy Chen            boolean isEnabled, boolean isUserSet) {
619cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
629cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen        SharedPreferences.Editor editor = prefs.edit();
639cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen        editor.putBoolean(
649cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen                getVisualVoicemailSharedPrefsKey(IS_ENABLED_KEY, phoneAccount), isEnabled);
65a04959f74ba9009612804a4a5a5d8dd470969ddcNancy Chen        editor.putBoolean(
66a04959f74ba9009612804a4a5a5d8dd470969ddcNancy Chen                getVisualVoicemailSharedPrefsKey(IS_USER_SET, phoneAccount),
67a04959f74ba9009612804a4a5a5d8dd470969ddcNancy Chen                isUserSet);
689cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen        editor.commit();
699cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen    }
709cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen
7157c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chen    public static boolean isVisualVoicemailEnabled(Context context,
729cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen            PhoneAccountHandle phoneAccount) {
739cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen        if (phoneAccount == null) {
749cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen            return false;
759cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen        }
769cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
779cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen        return prefs.getBoolean(getVisualVoicemailSharedPrefsKey(IS_ENABLED_KEY, phoneAccount),
7857c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chen                false);
7957c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chen    }
8057c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chen
8157c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chen    public static boolean isVisualVoicemailEnabled(Phone phone) {
8257c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chen        return isVisualVoicemailEnabled(phone.getContext(),
8357c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chen                PhoneUtils.makePstnPhoneAccountHandle(phone));
849cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen    }
859cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen
86a04959f74ba9009612804a4a5a5d8dd470969ddcNancy Chen    /**
87a04959f74ba9009612804a4a5a5d8dd470969ddcNancy Chen     * Differentiate user-enabled/disabled to know whether to ignore automatic enabling and
88a04959f74ba9009612804a4a5a5d8dd470969ddcNancy Chen     * disabling by the system. This is relevant when a carrier vvm app is installed and the user
89a04959f74ba9009612804a4a5a5d8dd470969ddcNancy Chen     * manually enables dialer visual voicemail. In that case we would want that setting to persist.
90a04959f74ba9009612804a4a5a5d8dd470969ddcNancy Chen     */
91a04959f74ba9009612804a4a5a5d8dd470969ddcNancy Chen    public static boolean isVisualVoicemailUserSet(Context context,
92a04959f74ba9009612804a4a5a5d8dd470969ddcNancy Chen            PhoneAccountHandle phoneAccount) {
93a04959f74ba9009612804a4a5a5d8dd470969ddcNancy Chen        if (phoneAccount == null) {
94a04959f74ba9009612804a4a5a5d8dd470969ddcNancy Chen            return false;
95a04959f74ba9009612804a4a5a5d8dd470969ddcNancy Chen        }
96a04959f74ba9009612804a4a5a5d8dd470969ddcNancy Chen        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
97a04959f74ba9009612804a4a5a5d8dd470969ddcNancy Chen        return prefs.getBoolean(
98a04959f74ba9009612804a4a5a5d8dd470969ddcNancy Chen                getVisualVoicemailSharedPrefsKey(IS_USER_SET, phoneAccount),
99a04959f74ba9009612804a4a5a5d8dd470969ddcNancy Chen                false);
100a04959f74ba9009612804a4a5a5d8dd470969ddcNancy Chen    }
101a04959f74ba9009612804a4a5a5d8dd470969ddcNancy Chen
10257c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chen    public static void setVisualVoicemailCredentialsFromStatusMessage(Context context,
1039cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen            PhoneAccountHandle phoneAccount, StatusMessage message) {
1049cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
1059cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen        SharedPreferences.Editor editor = prefs.edit();
1069cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen
1079cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen        editor.putString(
1089cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen                getVisualVoicemailSharedPrefsKey(OmtpConstants.IMAP_PORT, phoneAccount),
1099cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen                message.getImapPort());
1109cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen        editor.putString(
1119cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen                getVisualVoicemailSharedPrefsKey(OmtpConstants.SERVER_ADDRESS, phoneAccount),
1129cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen                message.getServerAddress());
1139cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen        editor.putString(
1149cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen                getVisualVoicemailSharedPrefsKey(OmtpConstants.IMAP_USER_NAME, phoneAccount),
1159cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen                message.getImapUserName());
1169cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen        editor.putString(
1179cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen                getVisualVoicemailSharedPrefsKey(OmtpConstants.IMAP_PASSWORD, phoneAccount),
1189cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen                message.getImapPassword());
1199cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen        editor.commit();
1209cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen    }
1219cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen
12257c59860b3737d7c3cd36455ad484c035c6c1dfbNancy Chen    public static String getVisualVoicemailCredentials(Context context, String key,
1239cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen            PhoneAccountHandle phoneAccount) {
1249cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
1259cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen        return prefs.getString(getVisualVoicemailSharedPrefsKey(key, phoneAccount), null);
1269cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen    }
1279cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen
1286337d1be5db67c7b81e7998988ca53da50ab44c2Nancy Chen    public static long getVisualVoicemailRetryInterval(Context context,
1296337d1be5db67c7b81e7998988ca53da50ab44c2Nancy Chen            PhoneAccountHandle phoneAccount) {
1306337d1be5db67c7b81e7998988ca53da50ab44c2Nancy Chen        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
1316337d1be5db67c7b81e7998988ca53da50ab44c2Nancy Chen        return prefs.getLong(getVisualVoicemailSharedPrefsKey(SYNC_RETRY_INTERVAL, phoneAccount),
1326337d1be5db67c7b81e7998988ca53da50ab44c2Nancy Chen                DEFAULT_SYNC_RETRY_INTERVAL_MS);
1336337d1be5db67c7b81e7998988ca53da50ab44c2Nancy Chen    }
1346337d1be5db67c7b81e7998988ca53da50ab44c2Nancy Chen
1356337d1be5db67c7b81e7998988ca53da50ab44c2Nancy Chen    public static void resetVisualVoicemailRetryInterval(Context context,
1366337d1be5db67c7b81e7998988ca53da50ab44c2Nancy Chen            PhoneAccountHandle phoneAccount) {
1376337d1be5db67c7b81e7998988ca53da50ab44c2Nancy Chen        setVisualVoicemailRetryInterval(context, phoneAccount, DEFAULT_SYNC_RETRY_INTERVAL_MS);
1386337d1be5db67c7b81e7998988ca53da50ab44c2Nancy Chen    }
1396337d1be5db67c7b81e7998988ca53da50ab44c2Nancy Chen
1406337d1be5db67c7b81e7998988ca53da50ab44c2Nancy Chen    public static void setVisualVoicemailRetryInterval(Context context,
1416337d1be5db67c7b81e7998988ca53da50ab44c2Nancy Chen            PhoneAccountHandle phoneAccount, long interval) {
1426337d1be5db67c7b81e7998988ca53da50ab44c2Nancy Chen        SharedPreferences.Editor editor =
1436337d1be5db67c7b81e7998988ca53da50ab44c2Nancy Chen                PreferenceManager.getDefaultSharedPreferences(context).edit();
1446337d1be5db67c7b81e7998988ca53da50ab44c2Nancy Chen        editor.putLong(getVisualVoicemailSharedPrefsKey(SYNC_RETRY_INTERVAL, phoneAccount),
1456337d1be5db67c7b81e7998988ca53da50ab44c2Nancy Chen                Math.min(interval, MAX_SYNC_RETRY_INTERVAL_MS));
1466337d1be5db67c7b81e7998988ca53da50ab44c2Nancy Chen        editor.commit();
1476337d1be5db67c7b81e7998988ca53da50ab44c2Nancy Chen    }
1486337d1be5db67c7b81e7998988ca53da50ab44c2Nancy Chen
1494406848c72d9d4f46e30842f434e6e27f4319503Nancy Chen    public static void setVisualVoicemailLastFullSyncTime(Context context,
1504406848c72d9d4f46e30842f434e6e27f4319503Nancy Chen            PhoneAccountHandle phoneAccount, long timestamp) {
1514406848c72d9d4f46e30842f434e6e27f4319503Nancy Chen        SharedPreferences.Editor editor =
1524406848c72d9d4f46e30842f434e6e27f4319503Nancy Chen                PreferenceManager.getDefaultSharedPreferences(context).edit();
1534406848c72d9d4f46e30842f434e6e27f4319503Nancy Chen        editor.putLong(getVisualVoicemailSharedPrefsKey(LAST_FULL_SYNC_TIMESTAMP, phoneAccount),
1544406848c72d9d4f46e30842f434e6e27f4319503Nancy Chen                timestamp);
1554406848c72d9d4f46e30842f434e6e27f4319503Nancy Chen        editor.commit();
1564406848c72d9d4f46e30842f434e6e27f4319503Nancy Chen
1574406848c72d9d4f46e30842f434e6e27f4319503Nancy Chen    }
1584406848c72d9d4f46e30842f434e6e27f4319503Nancy Chen
1594406848c72d9d4f46e30842f434e6e27f4319503Nancy Chen    public static long getVisualVoicemailLastFullSyncTime(Context context,
1604406848c72d9d4f46e30842f434e6e27f4319503Nancy Chen            PhoneAccountHandle phoneAccount) {
1614406848c72d9d4f46e30842f434e6e27f4319503Nancy Chen        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
1624406848c72d9d4f46e30842f434e6e27f4319503Nancy Chen        return prefs.getLong(
1634406848c72d9d4f46e30842f434e6e27f4319503Nancy Chen                getVisualVoicemailSharedPrefsKey(LAST_FULL_SYNC_TIMESTAMP, phoneAccount),
1644406848c72d9d4f46e30842f434e6e27f4319503Nancy Chen                NO_PRIOR_FULL_SYNC);
1654406848c72d9d4f46e30842f434e6e27f4319503Nancy Chen    }
1664406848c72d9d4f46e30842f434e6e27f4319503Nancy Chen
1671026b43f434926df8edf54cafe626d921cee6165Ta-wei Yen    public static String getVisualVoicemailSharedPrefsKey(String key,
1689cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen            PhoneAccountHandle phoneAccount) {
1699cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen        return VISUAL_VOICEMAIL_SHARED_PREFS_KEY_PREFIX + key + "_" + phoneAccount.getId();
1709cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen    }
1719cc75becf6d2b474b319eeaa10ad16228355b806Nancy Chen}
172