Merge "Use RoleManager in AppBindingService"
diff --git a/services/core/java/com/android/server/appbinding/AppBindingService.java b/services/core/java/com/android/server/appbinding/AppBindingService.java
index 0b6a432..bbe4ed1 100644
--- a/services/core/java/com/android/server/appbinding/AppBindingService.java
+++ b/services/core/java/com/android/server/appbinding/AppBindingService.java
@@ -177,13 +177,12 @@
* Handle boot phase PHASE_ACTIVITY_MANAGER_READY.
*/
private void onPhaseActivityManagerReady() {
+ // RoleManager doesn't tell us about upgrade, so we still need to listen for app upgrades.
+ // (app uninstall/disable will be notified by RoleManager.)
final IntentFilter packageFilter = new IntentFilter();
packageFilter.addAction(Intent.ACTION_PACKAGE_ADDED);
- packageFilter.addAction(Intent.ACTION_PACKAGE_REMOVED);
- packageFilter.addAction(Intent.ACTION_PACKAGE_CHANGED);
packageFilter.addDataScheme("package");
- packageFilter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
mContext.registerReceiverAsUser(mPackageUserMonitor, UserHandle.ALL,
packageFilter, null, mHandler);
@@ -256,14 +255,6 @@
handlePackageAddedReplacing(packageName, userId);
}
break;
- case Intent.ACTION_PACKAGE_REMOVED:
- if (!replacing) {
- handlePackageRemoved(packageName, userId);
- }
- break;
- case Intent.ACTION_PACKAGE_CHANGED:
- handlePackageChanged(packageName, userId);
- break;
}
}
};
@@ -371,31 +362,6 @@
}
}
- private void handlePackageRemoved(String packageName, int userId) {
- if (DEBUG) {
- Slog.d(TAG, "handlePackageRemoved: u" + userId + " " + packageName);
- }
- synchronized (mLock) {
- final AppServiceFinder finder = findFinderLocked(userId, packageName);
- if (finder != null) {
- unbindServicesLocked(userId, finder, "package uninstall");
- }
- }
- }
-
- private void handlePackageChanged(String packageName, int userId) {
- if (DEBUG) {
- Slog.d(TAG, "handlePackageChanged: u" + userId + " " + packageName);
- }
- synchronized (mLock) {
- final AppServiceFinder finder = findFinderLocked(userId, packageName);
- if (finder != null) {
- unbindServicesLocked(userId, finder, "package changed");
- bindServicesLocked(userId, finder, "package changed");
- }
- }
- }
-
private void rebindAllLocked(String reason) {
for (int i = 0; i < mRunningUsers.size(); i++) {
if (!mRunningUsers.valueAt(i)) {
diff --git a/services/core/java/com/android/server/appbinding/finders/CarrierMessagingClientServiceFinder.java b/services/core/java/com/android/server/appbinding/finders/CarrierMessagingClientServiceFinder.java
index 4c5f1a1..753d3b0 100644
--- a/services/core/java/com/android/server/appbinding/finders/CarrierMessagingClientServiceFinder.java
+++ b/services/core/java/com/android/server/appbinding/finders/CarrierMessagingClientServiceFinder.java
@@ -16,14 +16,10 @@
package com.android.server.appbinding.finders;
-import static android.provider.Telephony.Sms.Intents.ACTION_DEFAULT_SMS_PACKAGE_CHANGED_INTERNAL;
-
import android.Manifest.permission;
-import android.content.BroadcastReceiver;
-import android.content.ComponentName;
+import android.app.role.OnRoleHoldersChangedListener;
+import android.app.role.RoleManager;
import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
import android.content.pm.ServiceInfo;
import android.os.Handler;
import android.os.IBinder;
@@ -35,7 +31,8 @@
import android.util.Slog;
import com.android.internal.R;
-import com.android.internal.telephony.SmsApplication;
+import com.android.internal.os.BackgroundThread;
+import com.android.internal.util.CollectionUtils;
import com.android.server.appbinding.AppBindingConstants;
import java.util.function.BiConsumer;
@@ -45,10 +42,15 @@
*/
public class CarrierMessagingClientServiceFinder
extends AppServiceFinder<CarrierMessagingClientService, ICarrierMessagingClientService> {
+
+ private final RoleManager mRoleManager;
+
public CarrierMessagingClientServiceFinder(Context context,
BiConsumer<AppServiceFinder, Integer> listener,
Handler callbackHandler) {
super(context, listener, callbackHandler);
+
+ mRoleManager = context.getSystemService(RoleManager.class);
}
@Override
@@ -84,9 +86,8 @@
@Override
public String getTargetPackage(int userId) {
- final ComponentName cn = SmsApplication.getDefaultSmsApplicationAsUser(
- mContext, /* updateIfNeeded= */ true, userId);
- String ret = cn == null ? null : cn.getPackageName();
+ final String ret = CollectionUtils.firstOrNull(mRoleManager.getRoleHoldersAsUser(
+ RoleManager.ROLE_SMS, UserHandle.of(userId)));
if (DEBUG) {
Slog.d(TAG, "getTargetPackage()=" + ret);
@@ -97,9 +98,8 @@
@Override
public void startMonitoring() {
- final IntentFilter filter = new IntentFilter(ACTION_DEFAULT_SMS_PACKAGE_CHANGED_INTERNAL);
- mContext.registerReceiverAsUser(mSmsAppChangedWatcher, UserHandle.ALL, filter,
- /* permission= */ null, mHandler);
+ mRoleManager.addOnRoleHoldersChangedListenerAsUser(
+ mContext.getMainExecutor(), mRoleHolderChangedListener, UserHandle.ALL);
}
@Override
@@ -118,12 +118,11 @@
return constants.SMS_APP_BIND_FLAGS;
}
- private final BroadcastReceiver mSmsAppChangedWatcher = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- if (ACTION_DEFAULT_SMS_PACKAGE_CHANGED_INTERNAL.equals(intent.getAction())) {
- mListener.accept(CarrierMessagingClientServiceFinder.this, getSendingUserId());
- }
+ private final OnRoleHoldersChangedListener mRoleHolderChangedListener = (role, user) -> {
+ if (RoleManager.ROLE_SMS.equals(role)) {
+ BackgroundThread.getHandler().post(() -> {
+ mListener.accept(CarrierMessagingClientServiceFinder.this, user.getIdentifier());
+ });
}
};
}