diff options
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 |