Fix wrong package availability check for multi-user.
Currently we are checking if the ICS package is enabled during runtime
before we try to bind to it. However, if we switched to second user,
checking availability will always return false. Fix this by checking
it with package manager of the current user.
Test: make sure Telecom can bind to all non-UI ICS after switched to
second user manually
Bug: 197820445
Change-Id: I7944705fff1323c471a378c3dd7ee3cd8911dbc0
diff --git a/src/com/android/server/telecom/InCallController.java b/src/com/android/server/telecom/InCallController.java
index ca76456..d315127 100644
--- a/src/com/android/server/telecom/InCallController.java
+++ b/src/com/android/server/telecom/InCallController.java
@@ -1696,11 +1696,16 @@
}
PackageManager packageManager = mContext.getPackageManager();
+ Context userContext = mContext.createContextAsUser(mCallsManager.getCurrentUserHandle(),
+ 0 /* flags */);
+ PackageManager userPackageManager = userContext != null ?
+ userContext.getPackageManager() : packageManager;
for (ResolveInfo entry : packageManager.queryIntentServicesAsUser(
serviceIntent,
PackageManager.GET_META_DATA | PackageManager.MATCH_DISABLED_COMPONENTS,
mCallsManager.getCurrentUserHandle().getIdentifier())) {
ServiceInfo serviceInfo = entry.serviceInfo;
+
if (serviceInfo != null) {
boolean isExternalCallsSupported = serviceInfo.metaData != null &&
serviceInfo.metaData.getBoolean(
@@ -1718,7 +1723,7 @@
}
boolean isEnabled = isServiceEnabled(foundComponentName,
- serviceInfo, packageManager);
+ serviceInfo, userPackageManager);
boolean isRequestedType;
if (requestedType == IN_CALL_SERVICE_TYPE_INVALID) {
isRequestedType = true;
@@ -1737,6 +1742,10 @@
private boolean isServiceEnabled(ComponentName componentName,
ServiceInfo serviceInfo, PackageManager packageManager) {
+ if (packageManager == null) {
+ return serviceInfo.isEnabled();
+ }
+
int componentEnabledState = packageManager.getComponentEnabledSetting(componentName);
if (componentEnabledState == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) {
diff --git a/tests/src/com/android/server/telecom/tests/ComponentContextFixture.java b/tests/src/com/android/server/telecom/tests/ComponentContextFixture.java
index ebb336e..10d8e93 100644
--- a/tests/src/com/android/server/telecom/tests/ComponentContextFixture.java
+++ b/tests/src/com/android/server/telecom/tests/ComponentContextFixture.java
@@ -123,6 +123,11 @@
}
@Override
+ public Context createContextAsUser(UserHandle userHandle, int flags) {
+ return this;
+ }
+
+ @Override
public String getPackageName() {
return "com.android.server.telecom.tests";
}