Switch VVM SMS filter to Builder pattern
Bug:27816386
Change-Id: Ia15303fc680671f14ac41179c620f4dd873143ab
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index 68ab937..4c9700d 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -52,9 +52,9 @@
import android.telephony.ServiceState;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
-import android.telephony.TelephonyManager;
-import android.telephony.ModemActivityInfo;
import android.telephony.TelephonyHistogram;
+import android.telephony.TelephonyManager;
+import android.telephony.VisualVoicemailSmsFilterSettings;
import android.text.TextUtils;
import android.util.ArraySet;
import android.util.Log;
@@ -74,7 +74,6 @@
import com.android.internal.telephony.PhoneConstants;
import com.android.internal.telephony.PhoneFactory;
import com.android.internal.telephony.ProxyController;
-import com.android.internal.telephony.PhoneConstants;
import com.android.internal.telephony.RIL;
import com.android.internal.telephony.RILConstants;
import com.android.internal.telephony.SubscriptionController;
@@ -1832,55 +1831,36 @@
}
@Override
- public void setVisualVoicemailSmsFilterEnabled(int subId, boolean value) {
+ public void enableVisualVoicemailSmsFilter(String callingPackage, int subId,
+ VisualVoicemailSmsFilterSettings settings) {
+ mAppOps.checkPackage(Binder.getCallingUid(), callingPackage);
VisualVoicemailSmsFilterConfig
- .setVisualVoicemailSmsFilterEnabled(mPhone.getContext(), subId, value);
+ .enableVisualVoicemailSmsFilter(mPhone.getContext(), callingPackage, subId,
+ settings);
}
@Override
- public boolean isVisualVoicemailSmsFilterEnabled(String packageName, int subId) {
- return VisualVoicemailSmsFilterConfig
- .isVisualVoicemailSmsFilterEnabled(mPhone.getContext(), packageName, subId);
- }
-
- @Override
- public void setVisualVoicemailSmsFilterClientPrefix(int subId, String prefix) {
+ public void disableVisualVoicemailSmsFilter(String callingPackage, int subId) {
+ mAppOps.checkPackage(Binder.getCallingUid(), callingPackage);
VisualVoicemailSmsFilterConfig
- .setVisualVoicemailSmsFilterClientPrefix(mPhone.getContext(), subId, prefix);
+ .disableVisualVoicemailSmsFilter(mPhone.getContext(), callingPackage, subId);
}
@Override
- public String getVisualVoicemailSmsFilterClientPrefix(String packageName, int subId) {
+ public VisualVoicemailSmsFilterSettings getVisualVoicemailSmsFilterSettings(
+ String callingPackage, int subId) {
+ mAppOps.checkPackage(Binder.getCallingUid(), callingPackage);
return VisualVoicemailSmsFilterConfig
- .getVisualVoicemailSmsFilterClientPrefix(mPhone.getContext(), packageName, subId);
+ .getVisualVoicemailSmsFilterSettings(mPhone.getContext(), callingPackage, subId);
}
@Override
- public void setVisualVoicemailSmsFilterOriginatingNumbers(int subId, String[] numbers) {
- VisualVoicemailSmsFilterConfig
- .setVisualVoicemailSmsFilterOriginatingNumbers(mPhone.getContext(), subId, numbers);
- }
-
- @Override
- public String[] getVisualVoicemailSmsFilterOriginatingNumbers(String packageName, int subId) {
+ public VisualVoicemailSmsFilterSettings getSystemVisualVoicemailSmsFilterSettings(
+ String packageName, int subId) {
+ enforceReadPrivilegedPermission();
return VisualVoicemailSmsFilterConfig
- .getVisualVoicemailSmsFilterOriginatingNumbers(mPhone.getContext(), packageName,
- subId);
+ .getVisualVoicemailSmsFilterSettings(mPhone.getContext(), packageName, subId);
}
-
- @Override
- public void setVisualVoicemailSmsFilterDestinationPort(int subId, int port) {
- VisualVoicemailSmsFilterConfig
- .setVisualVoicemailSmsFilterDestinationPort(mPhone.getContext(), subId, port);
- }
-
- @Override
- public int getVisualVoicemailSmsFilterDestinationPort(String packageName, int subId) {
- return VisualVoicemailSmsFilterConfig
- .getVisualVoicemailSmsFilterDestinationPort(mPhone.getContext(), packageName,
- subId);
- }
-
/**
* Returns the unread count of voicemails
*/
diff --git a/src/com/android/phone/VisualVoicemailSmsFilterConfig.java b/src/com/android/phone/VisualVoicemailSmsFilterConfig.java
index e0139ee..2b2e2f5 100644
--- a/src/com/android/phone/VisualVoicemailSmsFilterConfig.java
+++ b/src/com/android/phone/VisualVoicemailSmsFilterConfig.java
@@ -15,13 +15,15 @@
*/
package com.android.phone;
+import android.annotation.Nullable;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
-import android.telephony.TelephonyManager;
+import android.telephony.VisualVoicemailSmsFilterSettings;
import android.util.ArraySet;
-import java.util.Arrays;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Set;
/**
@@ -38,104 +40,126 @@
private static final String ORIGINATING_NUMBERS_KEY = "_originating_numbers";
private static final String DESTINATION_PORT_KEY = "_destination_port";
- public static void setVisualVoicemailSmsFilterEnabled(Context context, int subId,
- boolean value) {
- setBoolean(context, subId, ENABLED_KEY, value);
+ public static void enableVisualVoicemailSmsFilter(Context context, String callingPackage,
+ int subId,
+ VisualVoicemailSmsFilterSettings settings) {
+ new Editor(context, callingPackage, subId)
+ .setBoolean(ENABLED_KEY, true)
+ .setString(PREFIX_KEY, settings.clientPrefix)
+ .setStringList(ORIGINATING_NUMBERS_KEY, settings.originatingNumbers)
+ .setInt(DESTINATION_PORT_KEY, settings.destinationPort)
+ .apply();
}
- public static boolean isVisualVoicemailSmsFilterEnabled(Context context, String packageName,
+ public static void disableVisualVoicemailSmsFilter(Context context, String callingPackage,
int subId) {
- return getBoolean(context, packageName, subId, ENABLED_KEY);
+ new Editor(context, callingPackage, subId)
+ .setBoolean(ENABLED_KEY, false)
+ .apply();
}
- public static void setVisualVoicemailSmsFilterClientPrefix(Context context, int subId,
- String prefix) {
- setString(context, subId, PREFIX_KEY, prefix);
- }
-
- public static String getVisualVoicemailSmsFilterClientPrefix(Context context,
+ @Nullable
+ public static VisualVoicemailSmsFilterSettings getVisualVoicemailSmsFilterSettings(
+ Context context,
String packageName, int subId) {
- return getString(context, packageName, subId, PREFIX_KEY);
+ Reader reader = new Reader(context, packageName, subId);
+ if (!reader.getBoolean(ENABLED_KEY, false)) {
+ return null;
+ }
+ return new VisualVoicemailSmsFilterSettings.Builder()
+ .setClientPrefix(reader.getString(PREFIX_KEY,
+ VisualVoicemailSmsFilterSettings.DEFAULT_CLIENT_PREFIX))
+ .setOriginatingNumbers(reader.getStringSet(ORIGINATING_NUMBERS_KEY,
+ VisualVoicemailSmsFilterSettings.DEFAULT_ORIGINATING_NUMBERS))
+ .setDestinationPort(reader.getInt(DESTINATION_PORT_KEY,
+ VisualVoicemailSmsFilterSettings.DEFAULT_DESTINATION_PORT))
+ .build();
}
-
- public static void setVisualVoicemailSmsFilterOriginatingNumbers(Context context, int subId,
- String[] numbers) {
- ArraySet<String> set = new ArraySet<>();
- set.addAll(Arrays.asList(numbers));
- setStringSet(context, subId, ORIGINATING_NUMBERS_KEY, set);
- }
-
- public static String[] getVisualVoicemailSmsFilterOriginatingNumbers(Context context,
- String packageName, int subId) {
- Set<String> numbers = getStringSet(context, packageName, subId, ORIGINATING_NUMBERS_KEY);
- return numbers.toArray(new String[numbers.size()]);
- }
-
- public static void setVisualVoicemailSmsFilterDestinationPort(Context context, int subId,
- int port) {
- setInt(context, subId, DESTINATION_PORT_KEY, port);
- }
-
- public static int getVisualVoicemailSmsFilterDestinationPort(Context context,
- String packageName, int subId) {
- return getInt(context, packageName, subId, DESTINATION_PORT_KEY,
- TelephonyManager.VVM_SMS_FILTER_DESTINATION_PORT_ANY);
- }
-
- private static int getInt(Context context, String packageName, int subId, String key,
- int defaultValue) {
- SharedPreferences prefs = getSharedPreferences(context);
- return prefs.getInt(makePerPhoneAccountKey(packageName, subId, key), defaultValue);
- }
-
- private static void setInt(Context context, int subId, String key, int value) {
- SharedPreferences.Editor editor = getSharedPreferences(context).edit();
- editor.putInt(makePerPhoneAccountKey(context.getOpPackageName(), subId, key), value);
- editor.apply();
- }
-
- private static boolean getBoolean(Context context, String packageName, int subId, String key) {
- SharedPreferences prefs = getSharedPreferences(context);
- return prefs.getBoolean(makePerPhoneAccountKey(packageName, subId, key), false);
- }
-
- private static void setBoolean(Context context, int subId, String key, boolean value) {
- SharedPreferences.Editor editor = getSharedPreferences(context).edit();
- editor.putBoolean(makePerPhoneAccountKey(context.getOpPackageName(), subId, key), value);
- editor.apply();
- }
-
- private static String getString(Context context, String packageName, int subId, String key) {
- SharedPreferences prefs = getSharedPreferences(context);
- return prefs.getString(makePerPhoneAccountKey(packageName, subId, key), null);
- }
-
- private static void setString(Context context, int subId, String key, String value) {
- SharedPreferences.Editor editor = getSharedPreferences(context).edit();
- editor.putString(makePerPhoneAccountKey(context.getOpPackageName(), subId, key), value);
- editor.apply();
- }
-
- private static Set<String> getStringSet(Context context, String packageName, int subId,
- String key) {
- return getSharedPreferences(context)
- .getStringSet(makePerPhoneAccountKey(packageName, subId, key), null);
- }
-
- private static void setStringSet(Context context, int subId, String key, Set<String> value) {
- SharedPreferences.Editor editor = getSharedPreferences(context).edit();
- editor.putStringSet(makePerPhoneAccountKey(context.getOpPackageName(), subId, key), value);
- editor.apply();
- }
-
private static SharedPreferences getSharedPreferences(Context context) {
return PreferenceManager
.getDefaultSharedPreferences(context.createDeviceProtectedStorageContext());
}
- private static String makePerPhoneAccountKey(String packageName, int subId, String key) {
- // TODO: make sure subId is persistent enough to serve as a key
+ private static String makePerPhoneAccountKeyPrefix(String packageName, int subId) {
+ // subId is persistent across reboot and upgrade, but not across devices.
+ // ICC id is better as a key but it involves more trouble to get one as subId is more
+ // commonly passed around.
return VVM_SMS_FILTER_COFIG_SHARED_PREFS_KEY_PREFIX + packageName + "_"
- + subId + key;
+ + subId;
+ }
+
+ private static class Editor {
+
+ private final SharedPreferences.Editor mPrefsEditor;
+ private final String mKeyPrefix;
+
+ public Editor(Context context, String packageName, int subId) {
+ mPrefsEditor = getSharedPreferences(context).edit();
+ mKeyPrefix = makePerPhoneAccountKeyPrefix(packageName, subId);
+ }
+
+ private Editor setInt(String key, int value) {
+ mPrefsEditor.putInt(makeKey(key), value);
+ return this;
+ }
+
+ private Editor setString(String key, String value) {
+ mPrefsEditor.putString(makeKey(key), value);
+ return this;
+ }
+
+ private Editor setBoolean(String key, boolean value) {
+ mPrefsEditor.putBoolean(makeKey(key), value);
+ return this;
+ }
+
+ private Editor setStringList(String key, List<String> value) {
+ mPrefsEditor.putStringSet(makeKey(key), new ArraySet(value));
+ return this;
+ }
+
+ public void apply() {
+ mPrefsEditor.apply();
+ }
+
+ private String makeKey(String key) {
+ return mKeyPrefix + key;
+ }
+ }
+
+
+ private static class Reader {
+
+ private final SharedPreferences mPrefs;
+ private final String mKeyPrefix;
+
+ public Reader(Context context, String packageName, int subId) {
+ mPrefs = getSharedPreferences(context);
+ mKeyPrefix = makePerPhoneAccountKeyPrefix(packageName, subId);
+ }
+
+ private int getInt(String key, int defaultValue) {
+ return mPrefs.getInt(makeKey(key), defaultValue);
+ }
+
+ private String getString(String key, String defaultValue) {
+ return mPrefs.getString(makeKey(key), defaultValue);
+ }
+
+ private boolean getBoolean(String key, boolean defaultValue) {
+ return mPrefs.getBoolean(makeKey(key), defaultValue);
+ }
+
+ private List<String> getStringSet(String key, List<String> defaultValue) {
+ Set<String> result = mPrefs.getStringSet(makeKey(key), null);
+ if (result == null) {
+ return defaultValue;
+ }
+ return new ArrayList<>(result);
+ }
+
+ private String makeKey(String key) {
+ return mKeyPrefix + key;
+ }
}
}
diff --git a/src/com/android/phone/vvm/omtp/OmtpVvmCarrierConfigHelper.java b/src/com/android/phone/vvm/omtp/OmtpVvmCarrierConfigHelper.java
index df706d5..7abf299 100644
--- a/src/com/android/phone/vvm/omtp/OmtpVvmCarrierConfigHelper.java
+++ b/src/com/android/phone/vvm/omtp/OmtpVvmCarrierConfigHelper.java
@@ -23,6 +23,7 @@
import android.telephony.SmsManager;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
+import android.telephony.VisualVoicemailSmsFilterSettings;
import android.text.TextUtils;
import android.util.ArraySet;
import android.util.Log;
@@ -250,8 +251,9 @@
public void startActivation() {
TelephonyManager telephonyManager = mContext.getSystemService(TelephonyManager.class);
- telephonyManager.setVisualVoicemailSmsFilterEnabled(mSubId, true);
- telephonyManager.setVisualVoicemailSmsFilterClientPrefix(mSubId, getClientPrefix());
+ telephonyManager.enableVisualVoicemailSmsFilter(mSubId,
+ new VisualVoicemailSmsFilterSettings.Builder().setClientPrefix(getClientPrefix())
+ .build());
OmtpMessageSender messageSender = getMessageSender();
if (messageSender != null) {
@@ -262,7 +264,7 @@
public void startDeactivation() {
mContext.getSystemService(TelephonyManager.class)
- .setVisualVoicemailSmsFilterEnabled(mSubId, false);
+ .disableVisualVoicemailSmsFilter(mSubId);
OmtpMessageSender messageSender = getMessageSender();
if (messageSender != null) {
Log.i(TAG, "Requesting VVM deactivation for subId: " + mSubId);