diff options
| author | 2020-11-05 09:38:40 +0000 | |
|---|---|---|
| committer | 2020-11-05 09:38:40 +0000 | |
| commit | 349b7e3bd974d069b43cce5a804faf35a6fb765c (patch) | |
| tree | 4a2a06bb825fbef016a3c5e51243ecbc162b5db7 | |
| parent | 1d7f371302ca50b40cc729f488a361a1218f36f0 (diff) | |
| parent | f4ceac073aac63d13a966afb8a5ab2b4a816139a (diff) | |
Merge "Replace Context @hide APIs" am: a1c0a06580 am: d5ee31aba5 am: f4ceac073a
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1458063
Change-Id: Ib4aae2fd7eebd700928edc2c715df8de90b428a7
4 files changed, 31 insertions, 15 deletions
| diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 22423fe00b6c..a992aa6c409f 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -1105,23 +1105,26 @@ public class ConnectivityService extends IConnectivityManager.Stub          intentFilter.addAction(Intent.ACTION_USER_ADDED);          intentFilter.addAction(Intent.ACTION_USER_REMOVED);          intentFilter.addAction(Intent.ACTION_USER_UNLOCKED); -        mContext.registerReceiverAsUser( + +        final Context userAllContext = mContext.createContextAsUser(UserHandle.ALL, 0 /* flags */); +        userAllContext.registerReceiver(                  mIntentReceiver, -                UserHandle.ALL,                  intentFilter,                  null /* broadcastPermission */,                  mHandler); -        mContext.registerReceiverAsUser(mUserPresentReceiver, UserHandle.SYSTEM, -                new IntentFilter(Intent.ACTION_USER_PRESENT), null, null); +        mContext.createContextAsUser(UserHandle.SYSTEM, 0 /* flags */).registerReceiver( +                mUserPresentReceiver, +                new IntentFilter(Intent.ACTION_USER_PRESENT), +                null /* broadcastPermission */, +                null /* scheduler */);          // Listen to package add and removal events for all users.          intentFilter = new IntentFilter();          intentFilter.addAction(Intent.ACTION_PACKAGE_REPLACED);          intentFilter.addAction(Intent.ACTION_PACKAGE_REMOVED);          intentFilter.addDataScheme("package"); -        mContext.registerReceiverAsUser( +        userAllContext.registerReceiver(                  mIntentReceiver, -                UserHandle.ALL,                  intentFilter,                  null /* broadcastPermission */,                  mHandler); @@ -1129,8 +1132,8 @@ public class ConnectivityService extends IConnectivityManager.Stub          // Listen to lockdown VPN reset.          intentFilter = new IntentFilter();          intentFilter.addAction(LockdownVpnTracker.ACTION_LOCKDOWN_RESET); -        mContext.registerReceiverAsUser( -                mIntentReceiver, UserHandle.ALL, intentFilter, NETWORK_STACK, mHandler); +        userAllContext.registerReceiver( +                mIntentReceiver, intentFilter, NETWORK_STACK, mHandler);          try {              mNMS.registerObserver(mDataActivityObserver); @@ -5259,7 +5262,9 @@ public class ConnectivityService extends IConnectivityManager.Stub              // Try creating lockdown tracker, since user present usually means              // unlocked keystore.              updateLockdownVpn(); -            mContext.unregisterReceiver(this); +            // Use the same context that registered receiver before to unregister it. Because use +            // different context to unregister receiver will cause exception. +            context.unregisterReceiver(this);          }      }; diff --git a/services/core/java/com/android/server/connectivity/MultipathPolicyTracker.java b/services/core/java/com/android/server/connectivity/MultipathPolicyTracker.java index d5488712aa34..17828a0549b3 100644 --- a/services/core/java/com/android/server/connectivity/MultipathPolicyTracker.java +++ b/services/core/java/com/android/server/connectivity/MultipathPolicyTracker.java @@ -95,7 +95,11 @@ public class MultipathPolicyTracker {      private static final boolean DBG = false; +    // This context is for the current user.      private final Context mContext; +    // This context is for all users, so register a BroadcastReceiver which can receive intents from +    // all users. +    private final Context mUserAllContext;      private final Handler mHandler;      private final Clock mClock;      private final Dependencies mDeps; @@ -132,6 +136,7 @@ public class MultipathPolicyTracker {      public MultipathPolicyTracker(Context ctx, Handler handler, Dependencies deps) {          mContext = ctx; +        mUserAllContext = ctx.createContextAsUser(UserHandle.ALL, 0 /* flags */);          mHandler = handler;          mClock = deps.getClock();          mDeps = deps; @@ -155,8 +160,8 @@ public class MultipathPolicyTracker {          final IntentFilter intentFilter = new IntentFilter();          intentFilter.addAction(Intent.ACTION_CONFIGURATION_CHANGED); -        mContext.registerReceiverAsUser( -                mConfigChangeReceiver, UserHandle.ALL, intentFilter, null, mHandler); +        mUserAllContext.registerReceiver( +                mConfigChangeReceiver, intentFilter, null /* broadcastPermission */, mHandler);      }      public void shutdown() { @@ -167,7 +172,7 @@ public class MultipathPolicyTracker {          }          mMultipathTrackers.clear();          mResolver.unregisterContentObserver(mSettingsObserver); -        mContext.unregisterReceiver(mConfigChangeReceiver); +        mUserAllContext.unregisterReceiver(mConfigChangeReceiver);      }      // Called on an arbitrary binder thread. diff --git a/services/core/java/com/android/server/connectivity/Vpn.java b/services/core/java/com/android/server/connectivity/Vpn.java index a14199b58ad5..9e43b5481739 100644 --- a/services/core/java/com/android/server/connectivity/Vpn.java +++ b/services/core/java/com/android/server/connectivity/Vpn.java @@ -865,7 +865,7 @@ public class Vpn {              Intent serviceIntent = new Intent(VpnConfig.SERVICE_INTERFACE);              serviceIntent.setPackage(alwaysOnPackage);              try { -                return mContext.startServiceAsUser(serviceIntent, UserHandle.of(mUserId)) != null; +                return mUserIdContext.startService(serviceIntent) != null;              } catch (RuntimeException e) {                  Log.e(TAG, "VpnService " + serviceIntent + " failed to start", e);                  return false; diff --git a/tests/net/java/com/android/server/connectivity/MultipathPolicyTrackerTest.java b/tests/net/java/com/android/server/connectivity/MultipathPolicyTrackerTest.java index de1028cd2303..c53462cfb0b2 100644 --- a/tests/net/java/com/android/server/connectivity/MultipathPolicyTrackerTest.java +++ b/tests/net/java/com/android/server/connectivity/MultipathPolicyTrackerTest.java @@ -34,6 +34,7 @@ import static org.mockito.ArgumentMatchers.any;  import static org.mockito.ArgumentMatchers.anyInt;  import static org.mockito.ArgumentMatchers.argThat;  import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doReturn;  import static org.mockito.Mockito.times;  import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.when; @@ -53,6 +54,7 @@ import android.net.NetworkTemplate;  import android.net.StringNetworkSpecifier;  import android.net.TelephonyNetworkSpecifier;  import android.os.Handler; +import android.os.UserHandle;  import android.provider.Settings;  import android.telephony.TelephonyManager;  import android.test.mock.MockContentResolver; @@ -91,6 +93,7 @@ public class MultipathPolicyTrackerTest {      private static final int POLICY_SNOOZED = -100;      @Mock private Context mContext; +    @Mock private Context mUserAllContext;      @Mock private Resources mResources;      @Mock private Handler mHandler;      @Mock private MultipathPolicyTracker.Dependencies mDeps; @@ -127,8 +130,11 @@ public class MultipathPolicyTrackerTest {          when(mContext.getResources()).thenReturn(mResources);          when(mContext.getApplicationInfo()).thenReturn(new ApplicationInfo()); -        when(mContext.registerReceiverAsUser(mConfigChangeReceiverCaptor.capture(), -                any(), argThat(f -> f.hasAction(ACTION_CONFIGURATION_CHANGED)), any(), any())) +        doReturn(UserHandle.ALL.getIdentifier()).when(mUserAllContext).getUserId(); +        when(mContext.createContextAsUser(eq(UserHandle.ALL), anyInt())) +                .thenReturn(mUserAllContext); +        when(mUserAllContext.registerReceiver(mConfigChangeReceiverCaptor.capture(), +                argThat(f -> f.hasAction(ACTION_CONFIGURATION_CHANGED)), any(), any()))                  .thenReturn(null);          when(mDeps.getClock()).thenReturn(mClock); |