summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/res/res/values/config.xml3
-rw-r--r--core/res/res/values/symbols.xml2
-rw-r--r--services/core/java/com/android/server/appbinding/AppBindingConstants.java18
-rw-r--r--services/core/java/com/android/server/appbinding/AppBindingService.java2
-rw-r--r--services/core/java/com/android/server/appbinding/finders/AppServiceFinder.java15
-rw-r--r--services/core/java/com/android/server/appbinding/finders/SmsAppServiceFinder.java16
6 files changed, 52 insertions, 4 deletions
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index f55f391cd722..8b73b6768479 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -3550,4 +3550,7 @@
<!-- Pre-scale volume at volume step 3 for Absolute Volume -->
<fraction name="config_prescaleAbsoluteVolume_index3">85%</fraction>
+
+ <!-- Whether or not the "SMS app service" feature is enabled -->
+ <bool name="config_useSmsAppService">true</bool>
</resources>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 72ae0d61654a..a7b6dde12628 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -3475,4 +3475,6 @@
<java-symbol type="fraction" name="config_prescaleAbsoluteVolume_index1" />
<java-symbol type="fraction" name="config_prescaleAbsoluteVolume_index2" />
<java-symbol type="fraction" name="config_prescaleAbsoluteVolume_index3" />
+
+ <java-symbol type="bool" name="config_useSmsAppService" />
</resources>
diff --git a/services/core/java/com/android/server/appbinding/AppBindingConstants.java b/services/core/java/com/android/server/appbinding/AppBindingConstants.java
index b0088a824618..71847694b1d8 100644
--- a/services/core/java/com/android/server/appbinding/AppBindingConstants.java
+++ b/services/core/java/com/android/server/appbinding/AppBindingConstants.java
@@ -40,6 +40,9 @@ public class AppBindingConstants {
private static final String SERVICE_STABLE_CONNECTION_THRESHOLD_SEC_KEY =
"service_stable_connection_threshold_sec";
+ private static final String SMS_SERVICE_ENABLED_KEY =
+ "sms_service_enabled";
+
private static final String SMS_APP_BIND_FLAGS_KEY =
"sms_app_bind_flags";
@@ -67,6 +70,11 @@ public class AppBindingConstants {
public final long SERVICE_STABLE_CONNECTION_THRESHOLD_SEC;
/**
+ * Whether to actually bind to the default SMS app service. (Feature flag)
+ */
+ public final boolean SMS_SERVICE_ENABLED;
+
+ /**
* Extra binding flags for SMS service.
*/
public final int SMS_APP_BIND_FLAGS;
@@ -92,6 +100,8 @@ public class AppBindingConstants {
long serviceReconnectMaxBackoffSec = parser.getLong(
SERVICE_RECONNECT_MAX_BACKOFF_SEC_KEY, TimeUnit.HOURS.toSeconds(1));
+ boolean smsServiceEnabled = parser.getBoolean(SMS_SERVICE_ENABLED_KEY, true);
+
int smsAppBindFlags = parser.getInt(
SMS_APP_BIND_FLAGS_KEY,
Context.BIND_NOT_VISIBLE | Context.BIND_FOREGROUND_SERVICE);
@@ -114,6 +124,7 @@ public class AppBindingConstants {
SERVICE_RECONNECT_BACKOFF_INCREASE = serviceReconnectBackoffIncrease;
SERVICE_RECONNECT_MAX_BACKOFF_SEC = serviceReconnectMaxBackoffSec;
SERVICE_STABLE_CONNECTION_THRESHOLD_SEC = serviceStableConnectionThresholdSec;
+ SMS_SERVICE_ENABLED = smsServiceEnabled;
SMS_APP_BIND_FLAGS = smsAppBindFlags;
}
@@ -129,7 +140,8 @@ public class AppBindingConstants {
*/
public void dump(String prefix, PrintWriter pw) {
pw.print(prefix);
- pw.println("Constants:");
+ pw.print("Constants: ");
+ pw.println(sourceSettings);
pw.print(prefix);
pw.print(" SERVICE_RECONNECT_BACKOFF_SEC: ");
@@ -148,6 +160,10 @@ public class AppBindingConstants {
pw.println(SERVICE_STABLE_CONNECTION_THRESHOLD_SEC);
pw.print(prefix);
+ pw.print(" SMS_SERVICE_ENABLED: ");
+ pw.println(SMS_SERVICE_ENABLED);
+
+ pw.print(prefix);
pw.print(" SMS_APP_BIND_FLAGS: 0x");
pw.println(Integer.toHexString(SMS_APP_BIND_FLAGS));
}
diff --git a/services/core/java/com/android/server/appbinding/AppBindingService.java b/services/core/java/com/android/server/appbinding/AppBindingService.java
index 8c388092bb1b..3131255a61cd 100644
--- a/services/core/java/com/android/server/appbinding/AppBindingService.java
+++ b/services/core/java/com/android/server/appbinding/AppBindingService.java
@@ -422,7 +422,7 @@ public class AppBindingService extends Binder {
unbindServicesLocked(userId, target, reasonForLog);
}
- final ServiceInfo service = app.findService(userId, mIPackageManager);
+ final ServiceInfo service = app.findService(userId, mIPackageManager, mConstants);
if (service == null) {
continue;
}
diff --git a/services/core/java/com/android/server/appbinding/finders/AppServiceFinder.java b/services/core/java/com/android/server/appbinding/finders/AppServiceFinder.java
index 3d37317ad409..a075c50733d5 100644
--- a/services/core/java/com/android/server/appbinding/finders/AppServiceFinder.java
+++ b/services/core/java/com/android/server/appbinding/finders/AppServiceFinder.java
@@ -69,6 +69,11 @@ public abstract class AppServiceFinder<TServiceType, TServiceInterfaceType exten
mHandler = callbackHandler;
}
+ /** Whether this service should really be enabled. */
+ protected boolean isEnabled(AppBindingConstants constants) {
+ return true;
+ }
+
/** Human readable description of the type of apps; e.g. [Default SMS app] */
@NonNull
public abstract String getAppDescription();
@@ -90,12 +95,20 @@ public abstract class AppServiceFinder<TServiceType, TServiceInterfaceType exten
* Find the target service from the target app on a given user.
*/
@Nullable
- public final ServiceInfo findService(int userId, IPackageManager ipm) {
+ public final ServiceInfo findService(int userId, IPackageManager ipm,
+ AppBindingConstants constants) {
synchronized (mLock) {
mTargetPackages.put(userId, null);
mTargetServices.put(userId, null);
mLastMessages.put(userId, null);
+ if (!isEnabled(constants)) {
+ final String message = "feature disabled";
+ mLastMessages.put(userId, message);
+ Slog.i(TAG, getAppDescription() + " " + message);
+ return null;
+ }
+
final String targetPackage = getTargetPackage(userId);
if (DEBUG) {
Slog.d(TAG, getAppDescription() + " package=" + targetPackage);
diff --git a/services/core/java/com/android/server/appbinding/finders/SmsAppServiceFinder.java b/services/core/java/com/android/server/appbinding/finders/SmsAppServiceFinder.java
index 3340900ade7d..fcc28f8e2886 100644
--- a/services/core/java/com/android/server/appbinding/finders/SmsAppServiceFinder.java
+++ b/services/core/java/com/android/server/appbinding/finders/SmsAppServiceFinder.java
@@ -32,7 +32,9 @@ import android.os.IBinder;
import android.os.UserHandle;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
+import android.util.Slog;
+import com.android.internal.R;
import com.android.internal.telephony.SmsApplication;
import com.android.server.appbinding.AppBindingConstants;
@@ -49,6 +51,12 @@ public class SmsAppServiceFinder extends AppServiceFinder<SmsAppService, ISmsApp
}
@Override
+ protected boolean isEnabled(AppBindingConstants constants) {
+ return constants.SMS_SERVICE_ENABLED
+ && mContext.getResources().getBoolean(R.bool.config_useSmsAppService);
+ }
+
+ @Override
public String getAppDescription() {
return "[Default SMS app]";
}
@@ -77,7 +85,13 @@ public class SmsAppServiceFinder extends AppServiceFinder<SmsAppService, ISmsApp
public String getTargetPackage(int userId) {
final ComponentName cn = SmsApplication.getDefaultSmsApplicationAsUser(
mContext, /* updateIfNeeded= */ true, userId);
- return cn == null ? null : cn.getPackageName();
+ String ret = cn == null ? null : cn.getPackageName();
+
+ if (DEBUG) {
+ Slog.d(TAG, "getTargetPackage()=" + ret);
+ }
+
+ return ret;
}
@Override