188b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee/** 288b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee * Copyright (C) 2014 The Android Open Source Project 388b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee * 488b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee * Licensed under the Apache License, Version 2.0 (the "License"); 588b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee * you may not use this file except in compliance with the License. 688b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee * You may obtain a copy of the License at 788b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee * 888b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee * http://www.apache.org/licenses/LICENSE-2.0 988b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee * 1088b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee * Unless required by applicable law or agreed to in writing, software 1188b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee * distributed under the License is distributed on an "AS IS" BASIS, 1288b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1388b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee * See the License for the specific language governing permissions and 1488b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee * limitations under the License. 1588b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee */ 1688b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee 1788b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Leepackage com.android.phone.settings; 1888b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee 1988b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Leeimport android.content.Context; 2088b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Leeimport android.content.SharedPreferences; 2188b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Leeimport android.telephony.PhoneNumberUtils; 2264e5c9dc774344f88b536589bd05d171ef5e3062Andrew Leeimport android.text.TextUtils; 2388b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Leeimport android.util.Log; 2488b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee 2588b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Leeimport com.android.internal.telephony.CallForwardInfo; 2688b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Leeimport com.android.internal.telephony.CommandsInterface; 2788b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Leeimport com.android.phone.PhoneGlobals; 2888b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee 2988b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Leepublic class VoicemailProviderSettingsUtil { 3088b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee private static final String LOG_TAG = VoicemailProviderSettingsUtil.class.getSimpleName(); 3188b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee private static final boolean DBG = (PhoneGlobals.DBG_LEVEL >= 2); 3288b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee 3388b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee private static final String VM_NUMBERS_SHARED_PREFERENCES_NAME = "vm_numbers"; 3488b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee 3588b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee // Suffix appended to provider key for storing vm number 3688b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee private static final String VM_NUMBER_TAG = "#VMNumber"; 3788b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee // Suffix appended to forward settings key for storing an individual setting 3888b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee private static final String FWD_SETTING_TAG = "#Setting"; 3988b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee // Suffix appended to provider key for storing forwarding settings 4088b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee private static final String FWD_SETTINGS_TAG = "#FWDSettings"; 4188b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee // Suffix appended to forward settings key for storing length of settings array 4288b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee private static final String FWD_SETTINGS_LENGTH_TAG = "#Length"; 4388b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee 4488b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee // Suffixes appended to forward setting key for storing an individual setting properties 4588b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee private static final String FWD_SETTING_STATUS = "#Status"; 4688b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee private static final String FWD_SETTING_REASON = "#Reason"; 4788b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee private static final String FWD_SETTING_NUMBER = "#Number"; 4888b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee private static final String FWD_SETTING_TIME = "#Time"; 4988b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee 5088b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee /** 5188b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee * Returns settings previously stored for the currently selected voice mail provider. If no 5288b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee * setting is stored for the voice mail provider, return null. 5388b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee */ 546950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee public static VoicemailProviderSettings load(Context context, String key) { 556950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee SharedPreferences prefs = getPrefs(context); 566950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee 576950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee String vmNumberSetting = prefs.getString(key + VM_NUMBER_TAG, null); 5888b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee if (vmNumberSetting == null) { 5988b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee Log.w(LOG_TAG, "VoiceMailProvider settings for the key \"" + key + "\"" 6088b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee + " were not found. Returning null."); 6188b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee return null; 6288b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee } 6388b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee 6488b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee CallForwardInfo[] cfi = VoicemailProviderSettings.NO_FORWARDING; 6588b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee String fwdKey = key + FWD_SETTINGS_TAG; 666950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee int fwdLen = prefs.getInt(fwdKey + FWD_SETTINGS_LENGTH_TAG, 0); 6788b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee if (fwdLen > 0) { 6888b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee cfi = new CallForwardInfo[fwdLen]; 6988b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee for (int i = 0; i < cfi.length; i++) { 7088b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee String settingKey = fwdKey + FWD_SETTING_TAG + String.valueOf(i); 7188b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee cfi[i] = new CallForwardInfo(); 726950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee cfi[i].status = prefs.getInt(settingKey + FWD_SETTING_STATUS, 0); 736950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee cfi[i].reason = prefs.getInt( 7488b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee settingKey + FWD_SETTING_REASON, 7588b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee CommandsInterface.CF_REASON_ALL_CONDITIONAL); 7688b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee cfi[i].serviceClass = CommandsInterface.SERVICE_CLASS_VOICE; 7788b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee cfi[i].toa = PhoneNumberUtils.TOA_International; 786950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee cfi[i].number = prefs.getString(settingKey + FWD_SETTING_NUMBER, ""); 796950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee cfi[i].timeSeconds = prefs.getInt(settingKey + FWD_SETTING_TIME, 20); 8088b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee } 8188b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee } 8288b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee 8388b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee VoicemailProviderSettings settings = new VoicemailProviderSettings(vmNumberSetting, cfi); 8488b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee if (DBG) log("Loaded settings for " + key + ": " + settings.toString()); 8588b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee return settings; 8688b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee } 8788b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee 8888b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee /** 8988b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee * Saves new VM provider settings and associates them with the currently selected provider if 9088b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee * the settings are different than the ones already stored for this provider. 9188b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee * 9288b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee * These will be used later when the user switches a provider. 9388b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee */ 946950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee public static void save(Context context, String key, VoicemailProviderSettings newSettings) { 956950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee VoicemailProviderSettings curSettings = load(context, key); 9688b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee if (newSettings.equals(curSettings)) { 9788b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee if (DBG) log("save: Not saving setting for " + key + " since they have not changed"); 9888b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee return; 9988b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee } 10088b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee 10188b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee if (DBG) log("Saving settings for " + key + ": " + newSettings.toString()); 10288b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee 1036950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee SharedPreferences prefs = getPrefs(context); 1046950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee SharedPreferences.Editor editor = prefs.edit(); 10588b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee editor.putString(key + VM_NUMBER_TAG, newSettings.getVoicemailNumber()); 10688b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee String fwdKey = key + FWD_SETTINGS_TAG; 10788b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee 10888b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee CallForwardInfo[] s = newSettings.getForwardingSettings(); 10988b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee if (s != VoicemailProviderSettings.NO_FORWARDING) { 11088b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee editor.putInt(fwdKey + FWD_SETTINGS_LENGTH_TAG, s.length); 11188b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee for (int i = 0; i < s.length; i++) { 11288b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee String settingKey = fwdKey + FWD_SETTING_TAG + String.valueOf(i); 11388b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee CallForwardInfo fi = s[i]; 11488b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee editor.putInt(settingKey + FWD_SETTING_STATUS, fi.status); 11588b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee editor.putInt(settingKey + FWD_SETTING_REASON, fi.reason); 11688b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee editor.putString(settingKey + FWD_SETTING_NUMBER, fi.number); 11788b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee editor.putInt(settingKey + FWD_SETTING_TIME, fi.timeSeconds); 11888b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee } 11988b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee } else { 12088b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee editor.putInt(fwdKey + FWD_SETTINGS_LENGTH_TAG, 0); 12188b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee } 12288b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee 12388b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee editor.apply(); 12488b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee } 12588b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee 12688b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee /** 12788b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee * Deletes settings for the provider identified by this key. 12888b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee */ 1296950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee public static void delete(Context context, String key) { 13088b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee if (DBG) log("Deleting settings for" + key); 13188b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee 13264e5c9dc774344f88b536589bd05d171ef5e3062Andrew Lee if (TextUtils.isEmpty(key)) { 13364e5c9dc774344f88b536589bd05d171ef5e3062Andrew Lee return; 13464e5c9dc774344f88b536589bd05d171ef5e3062Andrew Lee } 13564e5c9dc774344f88b536589bd05d171ef5e3062Andrew Lee 1366950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee SharedPreferences prefs = getPrefs(context); 1376950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee prefs.edit() 13888b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee .putString(key + VM_NUMBER_TAG, null) 13988b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee .putInt(key + FWD_SETTINGS_TAG + FWD_SETTINGS_LENGTH_TAG, 0) 14088b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee .commit(); 14188b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee } 14288b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee 1436950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee private static SharedPreferences getPrefs(Context context) { 1446950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee return context.getSharedPreferences( 1456950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee VM_NUMBERS_SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); 1466950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee } 1476950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee 1486950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee private static void log(String msg) { 14988b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee Log.d(LOG_TAG, msg); 15088b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee } 15188b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee} 152