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

Commit ff2945a6 authored by Meng Wang's avatar Meng Wang
Browse files

Do not use hidden API registerUserSwitchObserver

Use ACTION_USER_FOREGROUND BroadcastReceiver instead.

Bug: 141193711
Test: manual - broadcasts received when switching users.
Change-Id: Ie79deecebcbd9c05f2c00452c233a4ce231e2ff4
parent 1be1dc51
Loading
Loading
Loading
Loading
+14 −23
Original line number Diff line number Diff line
@@ -21,22 +21,22 @@ import android.annotation.Nullable;
import android.annotation.UnsupportedAppUsage;
import android.app.ActivityManager;
import android.app.AppGlobals;
import android.app.UserSwitchObserver;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.pm.IPackageManager;
import android.os.AsyncResult;
import android.os.Handler;
import android.os.IRemoteCallback;
import android.os.Looper;
import android.os.Message;
import android.os.ParcelUuid;
import android.os.PersistableBundle;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.UserHandle;
import android.permission.IPermissionManager;
import android.preference.PreferenceManager;
import android.provider.Settings;
@@ -168,30 +168,21 @@ public class SubscriptionInfoUpdater extends Handler {
        // -Whenever new carrier privilege rules might change (new SIM is loaded)
        // -Whenever we switch to a new user
        mCurrentlyActiveUserId = 0;
        try {
            ActivityManager.getService().registerUserSwitchObserver(new UserSwitchObserver() {
        sContext.registerReceiverAsUser(new BroadcastReceiver() {
            @Override
                public void onUserSwitching(int newUserId, IRemoteCallback reply)
                        throws RemoteException {
                    mCurrentlyActiveUserId = newUserId;
            public void onReceive(Context context, Intent intent) {
                // Remove this line after testing
                if (Intent.ACTION_USER_FOREGROUND.equals(intent.getAction())) {
                    // If couldn't get current user ID, guess it's 0.
                    mCurrentlyActiveUserId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0);
                    CarrierAppUtils.disableCarrierAppsUntilPrivileged(sContext.getOpPackageName(),
                            mPackageManager, mPermissionManager, TelephonyManager.getDefault(),
                            sContext.getContentResolver(), mCurrentlyActiveUserId);

                    if (reply != null) {
                        try {
                            reply.sendResult(null);
                        } catch (RemoteException e) {
                }
            }
                }
            }, LOG_TAG);
            ActivityManager am = (ActivityManager) sContext.getSystemService(
                Context.ACTIVITY_SERVICE);
        }, UserHandle.ALL, new IntentFilter(Intent.ACTION_USER_FOREGROUND), null, null);
        ActivityManager am = (ActivityManager) sContext.getSystemService(Context.ACTIVITY_SERVICE);
        mCurrentlyActiveUserId = am.getCurrentUser();
        } catch (RemoteException e) {
            logd("Couldn't get current user ID; guessing it's 0: " + e.getMessage());
        }
        CarrierAppUtils.disableCarrierAppsUntilPrivileged(sContext.getOpPackageName(),
                mPackageManager, mPermissionManager, TelephonyManager.getDefault(),
                sContext.getContentResolver(), mCurrentlyActiveUserId);