Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c20de154 authored by Makoto Onuki's avatar Makoto Onuki Committed by Android (Google) Code Review
Browse files

Merge "Use RoleManager in AppBindingService"

parents 88d6fd81 d546ae47
Loading
Loading
Loading
Loading
+2 −36
Original line number Diff line number Diff line
@@ -177,13 +177,12 @@ public class AppBindingService extends Binder {
     * 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 @@ public class AppBindingService extends Binder {
                        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 @@ public class AppBindingService extends Binder {
        }
    }

    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)) {
+18 −19
Original line number Diff line number Diff line
@@ -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.text.TextUtils;
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 @@ import java.util.function.BiConsumer;
 */
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 @@ public class CarrierMessagingClientServiceFinder

    @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 @@ public class CarrierMessagingClientServiceFinder

    @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 @@ public class CarrierMessagingClientServiceFinder
        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());
            });
        }
    };
}