VoicemailProviderSettingsUtil.java revision 6950c6cb7bc1e7db1b1b30dc53711261b4352934
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; 2288b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Leeimport android.util.Log; 2388b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee 2488b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Leeimport com.android.internal.telephony.CallForwardInfo; 2588b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Leeimport com.android.internal.telephony.CommandsInterface; 2688b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Leeimport com.android.phone.PhoneGlobals; 2788b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee 2888b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Leepublic class VoicemailProviderSettingsUtil { 2988b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee private static final String LOG_TAG = VoicemailProviderSettingsUtil.class.getSimpleName(); 3088b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee private static final boolean DBG = (PhoneGlobals.DBG_LEVEL >= 2); 3188b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee 3288b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee private static final String VM_NUMBERS_SHARED_PREFERENCES_NAME = "vm_numbers"; 3388b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee 3488b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee // Suffix appended to provider key for storing vm number 3588b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee private static final String VM_NUMBER_TAG = "#VMNumber"; 3688b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee // Suffix appended to forward settings key for storing an individual setting 3788b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee private static final String FWD_SETTING_TAG = "#Setting"; 3888b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee // Suffix appended to provider key for storing forwarding settings 3988b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee private static final String FWD_SETTINGS_TAG = "#FWDSettings"; 4088b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee // Suffix appended to forward settings key for storing length of settings array 4188b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee private static final String FWD_SETTINGS_LENGTH_TAG = "#Length"; 4288b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee 4388b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee // Suffixes appended to forward setting key for storing an individual setting properties 4488b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee private static final String FWD_SETTING_STATUS = "#Status"; 4588b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee private static final String FWD_SETTING_REASON = "#Reason"; 4688b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee private static final String FWD_SETTING_NUMBER = "#Number"; 4788b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee private static final String FWD_SETTING_TIME = "#Time"; 4888b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee 4988b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee /** 5088b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee * Returns settings previously stored for the currently selected voice mail provider. If no 5188b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee * setting is stored for the voice mail provider, return null. 5288b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee */ 536950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee public static VoicemailProviderSettings load(Context context, String key) { 546950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee SharedPreferences prefs = getPrefs(context); 556950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee 566950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee String vmNumberSetting = prefs.getString(key + VM_NUMBER_TAG, null); 5788b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee if (vmNumberSetting == null) { 5888b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee Log.w(LOG_TAG, "VoiceMailProvider settings for the key \"" + key + "\"" 5988b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee + " were not found. Returning null."); 6088b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee return null; 6188b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee } 6288b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee 6388b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee CallForwardInfo[] cfi = VoicemailProviderSettings.NO_FORWARDING; 6488b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee String fwdKey = key + FWD_SETTINGS_TAG; 656950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee int fwdLen = prefs.getInt(fwdKey + FWD_SETTINGS_LENGTH_TAG, 0); 6688b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee if (fwdLen > 0) { 6788b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee cfi = new CallForwardInfo[fwdLen]; 6888b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee for (int i = 0; i < cfi.length; i++) { 6988b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee String settingKey = fwdKey + FWD_SETTING_TAG + String.valueOf(i); 7088b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee cfi[i] = new CallForwardInfo(); 716950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee cfi[i].status = prefs.getInt(settingKey + FWD_SETTING_STATUS, 0); 726950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee cfi[i].reason = prefs.getInt( 7388b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee settingKey + FWD_SETTING_REASON, 7488b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee CommandsInterface.CF_REASON_ALL_CONDITIONAL); 7588b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee cfi[i].serviceClass = CommandsInterface.SERVICE_CLASS_VOICE; 7688b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee cfi[i].toa = PhoneNumberUtils.TOA_International; 776950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee cfi[i].number = prefs.getString(settingKey + FWD_SETTING_NUMBER, ""); 786950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee cfi[i].timeSeconds = prefs.getInt(settingKey + FWD_SETTING_TIME, 20); 7988b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee } 8088b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee } 8188b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee 8288b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee VoicemailProviderSettings settings = new VoicemailProviderSettings(vmNumberSetting, cfi); 8388b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee if (DBG) log("Loaded settings for " + key + ": " + settings.toString()); 8488b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee return settings; 8588b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee } 8688b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee 8788b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee /** 8888b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee * Saves new VM provider settings and associates them with the currently selected provider if 8988b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee * the settings are different than the ones already stored for this provider. 9088b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee * 9188b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee * These will be used later when the user switches a provider. 9288b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee */ 936950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee public static void save(Context context, String key, VoicemailProviderSettings newSettings) { 946950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee VoicemailProviderSettings curSettings = load(context, key); 9588b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee if (newSettings.equals(curSettings)) { 9688b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee if (DBG) log("save: Not saving setting for " + key + " since they have not changed"); 9788b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee return; 9888b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee } 9988b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee 10088b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee if (DBG) log("Saving settings for " + key + ": " + newSettings.toString()); 10188b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee 1026950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee SharedPreferences prefs = getPrefs(context); 1036950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee SharedPreferences.Editor editor = prefs.edit(); 10488b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee editor.putString(key + VM_NUMBER_TAG, newSettings.getVoicemailNumber()); 10588b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee String fwdKey = key + FWD_SETTINGS_TAG; 10688b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee 10788b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee CallForwardInfo[] s = newSettings.getForwardingSettings(); 10888b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee if (s != VoicemailProviderSettings.NO_FORWARDING) { 10988b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee editor.putInt(fwdKey + FWD_SETTINGS_LENGTH_TAG, s.length); 11088b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee for (int i = 0; i < s.length; i++) { 11188b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee String settingKey = fwdKey + FWD_SETTING_TAG + String.valueOf(i); 11288b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee CallForwardInfo fi = s[i]; 11388b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee editor.putInt(settingKey + FWD_SETTING_STATUS, fi.status); 11488b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee editor.putInt(settingKey + FWD_SETTING_REASON, fi.reason); 11588b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee editor.putString(settingKey + FWD_SETTING_NUMBER, fi.number); 11688b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee editor.putInt(settingKey + FWD_SETTING_TIME, fi.timeSeconds); 11788b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee } 11888b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee } else { 11988b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee editor.putInt(fwdKey + FWD_SETTINGS_LENGTH_TAG, 0); 12088b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee } 12188b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee 12288b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee editor.apply(); 12388b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee } 12488b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee 12588b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee /** 12688b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee * Deletes settings for the provider identified by this key. 12788b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee */ 1286950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee public static void delete(Context context, String key) { 12988b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee if (DBG) log("Deleting settings for" + key); 13088b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee 1316950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee SharedPreferences prefs = getPrefs(context); 1326950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee prefs.edit() 13388b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee .putString(key + VM_NUMBER_TAG, null) 13488b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee .putInt(key + FWD_SETTINGS_TAG + FWD_SETTINGS_LENGTH_TAG, 0) 13588b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee .commit(); 13688b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee } 13788b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee 1386950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee private static SharedPreferences getPrefs(Context context) { 1396950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee return context.getSharedPreferences( 1406950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee VM_NUMBERS_SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); 1416950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee } 1426950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee 1436950c6cb7bc1e7db1b1b30dc53711261b4352934Andrew Lee private static void log(String msg) { 14488b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee Log.d(LOG_TAG, msg); 14588b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee } 14688b51e2bf554e086b9cb49dd76ccb52c80e4f503Andrew Lee} 147