summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Paul Hu <paulhu@google.com> 2020-11-05 09:38:40 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2020-11-05 09:38:40 +0000
commit349b7e3bd974d069b43cce5a804faf35a6fb765c (patch)
tree4a2a06bb825fbef016a3c5e51243ecbc162b5db7
parent1d7f371302ca50b40cc729f488a361a1218f36f0 (diff)
parentf4ceac073aac63d13a966afb8a5ab2b4a816139a (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
-rw-r--r--services/core/java/com/android/server/ConnectivityService.java23
-rw-r--r--services/core/java/com/android/server/connectivity/MultipathPolicyTracker.java11
-rw-r--r--services/core/java/com/android/server/connectivity/Vpn.java2
-rw-r--r--tests/net/java/com/android/server/connectivity/MultipathPolicyTrackerTest.java10
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);