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