blob: 81876648ae6bf2dd22f6e146cc459614ed06a1e4 [file] [log] [blame]
/**
* Copyright (C) 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.phone.settings;
import android.content.Context;
import android.content.SharedPreferences;
import android.telephony.PhoneNumberUtils;
import android.text.TextUtils;
import android.util.Log;
import com.android.internal.telephony.CallForwardInfo;
import com.android.internal.telephony.CommandsInterface;
import com.android.phone.PhoneGlobals;
public class VoicemailProviderSettingsUtil {
private static final String LOG_TAG = VoicemailProviderSettingsUtil.class.getSimpleName();
private static final boolean DBG = (PhoneGlobals.DBG_LEVEL >= 2);
private static final String VM_NUMBERS_SHARED_PREFERENCES_NAME = "vm_numbers";
// Suffix appended to provider key for storing vm number
private static final String VM_NUMBER_TAG = "#VMNumber";
// Suffix appended to forward settings key for storing an individual setting
private static final String FWD_SETTING_TAG = "#Setting";
// Suffix appended to provider key for storing forwarding settings
private static final String FWD_SETTINGS_TAG = "#FWDSettings";
// Suffix appended to forward settings key for storing length of settings array
private static final String FWD_SETTINGS_LENGTH_TAG = "#Length";
// Suffixes appended to forward setting key for storing an individual setting properties
private static final String FWD_SETTING_STATUS = "#Status";
private static final String FWD_SETTING_REASON = "#Reason";
private static final String FWD_SETTING_NUMBER = "#Number";
private static final String FWD_SETTING_TIME = "#Time";
/**
* Returns settings previously stored for the currently selected voice mail provider. If no
* setting is stored for the voice mail provider, return null.
*/
public static VoicemailProviderSettings load(Context context, String key) {
SharedPreferences prefs = getPrefs(context);
String vmNumberSetting = prefs.getString(key + VM_NUMBER_TAG, null);
if (vmNumberSetting == null) {
Log.w(LOG_TAG, "VoiceMailProvider settings for the key \"" + key + "\""
+ " were not found. Returning null.");
return null;
}
CallForwardInfo[] cfi = VoicemailProviderSettings.NO_FORWARDING;
String fwdKey = key + FWD_SETTINGS_TAG;
int fwdLen = prefs.getInt(fwdKey + FWD_SETTINGS_LENGTH_TAG, 0);
if (fwdLen > 0) {
cfi = new CallForwardInfo[fwdLen];
for (int i = 0; i < cfi.length; i++) {
String settingKey = fwdKey + FWD_SETTING_TAG + String.valueOf(i);
cfi[i] = new CallForwardInfo();
cfi[i].status = prefs.getInt(settingKey + FWD_SETTING_STATUS, 0);
cfi[i].reason = prefs.getInt(
settingKey + FWD_SETTING_REASON,
CommandsInterface.CF_REASON_ALL_CONDITIONAL);
cfi[i].serviceClass = CommandsInterface.SERVICE_CLASS_VOICE;
cfi[i].toa = PhoneNumberUtils.TOA_International;
cfi[i].number = prefs.getString(settingKey + FWD_SETTING_NUMBER, "");
cfi[i].timeSeconds = prefs.getInt(settingKey + FWD_SETTING_TIME, 20);
}
}
VoicemailProviderSettings settings = new VoicemailProviderSettings(vmNumberSetting, cfi);
if (DBG) log("Loaded settings for " + key + ": " + settings.toString());
return settings;
}
/**
* Saves new VM provider settings and associates them with the currently selected provider if
* the settings are different than the ones already stored for this provider.
*
* These will be used later when the user switches a provider.
*/
public static void save(Context context, String key, VoicemailProviderSettings newSettings) {
VoicemailProviderSettings curSettings = load(context, key);
if (newSettings.equals(curSettings)) {
if (DBG) log("save: Not saving setting for " + key + " since they have not changed");
return;
}
if (DBG) log("Saving settings for " + key + ": " + newSettings.toString());
SharedPreferences prefs = getPrefs(context);
SharedPreferences.Editor editor = prefs.edit();
editor.putString(key + VM_NUMBER_TAG, newSettings.getVoicemailNumber());
String fwdKey = key + FWD_SETTINGS_TAG;
CallForwardInfo[] s = newSettings.getForwardingSettings();
if (s != VoicemailProviderSettings.NO_FORWARDING) {
editor.putInt(fwdKey + FWD_SETTINGS_LENGTH_TAG, s.length);
for (int i = 0; i < s.length; i++) {
String settingKey = fwdKey + FWD_SETTING_TAG + String.valueOf(i);
CallForwardInfo fi = s[i];
editor.putInt(settingKey + FWD_SETTING_STATUS, fi.status);
editor.putInt(settingKey + FWD_SETTING_REASON, fi.reason);
editor.putString(settingKey + FWD_SETTING_NUMBER, fi.number);
editor.putInt(settingKey + FWD_SETTING_TIME, fi.timeSeconds);
}
} else {
editor.putInt(fwdKey + FWD_SETTINGS_LENGTH_TAG, 0);
}
editor.apply();
}
/**
* Deletes settings for the provider identified by this key.
*/
public static void delete(Context context, String key) {
if (DBG) log("Deleting settings for" + key);
if (TextUtils.isEmpty(key)) {
return;
}
SharedPreferences prefs = getPrefs(context);
prefs.edit()
.putString(key + VM_NUMBER_TAG, null)
.putInt(key + FWD_SETTINGS_TAG + FWD_SETTINGS_LENGTH_TAG, 0)
.commit();
}
private static SharedPreferences getPrefs(Context context) {
return context.getSharedPreferences(
VM_NUMBERS_SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
}
private static void log(String msg) {
Log.d(LOG_TAG, msg);
}
}