summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2021-01-20 16:02:01 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2021-01-20 16:02:01 +0000
commit795872a444a813bd4c0b0d8638975d88ee9f3312 (patch)
tree1d6a40064d66dd7c21216e274516e665cadd1b9f
parent36bc807fe15517ff79d23119dccb9b02edbbf844 (diff)
parent907dcf8fb867b6463e1cb8328e196dbfb0eb60c1 (diff)
Merge "Fix granting default roles timeout."
-rw-r--r--core/java/android/app/role/RoleManager.java21
1 files changed, 16 insertions, 5 deletions
diff --git a/core/java/android/app/role/RoleManager.java b/core/java/android/app/role/RoleManager.java
index 0fcf44d2dda6..3788257bcf17 100644
--- a/core/java/android/app/role/RoleManager.java
+++ b/core/java/android/app/role/RoleManager.java
@@ -174,8 +174,10 @@ public final class RoleManager {
@NonNull
private final Object mListenersLock = new Object();
- @NonNull
- private final RoleControllerManager mRoleControllerManager;
+ @GuardedBy("mRoleControllerManagerLock")
+ @Nullable
+ private RoleControllerManager mRoleControllerManager;
+ private final Object mRoleControllerManagerLock = new Object();
/**
* @hide
@@ -184,7 +186,6 @@ public final class RoleManager {
mContext = context;
mService = IRoleManager.Stub.asInterface(ServiceManager.getServiceOrThrow(
Context.ROLE_SERVICE));
- mRoleControllerManager = new RoleControllerManager(context);
}
/**
@@ -693,7 +694,7 @@ public final class RoleManager {
@TestApi
public void isRoleVisible(@NonNull String roleName,
@NonNull @CallbackExecutor Executor executor, @NonNull Consumer<Boolean> callback) {
- mRoleControllerManager.isRoleVisible(roleName, executor, callback);
+ getRoleControllerManager().isRoleVisible(roleName, executor, callback);
}
/**
@@ -714,10 +715,20 @@ public final class RoleManager {
@TestApi
public void isApplicationVisibleForRole(@NonNull String roleName, @NonNull String packageName,
@NonNull @CallbackExecutor Executor executor, @NonNull Consumer<Boolean> callback) {
- mRoleControllerManager.isApplicationVisibleForRole(roleName, packageName, executor,
+ getRoleControllerManager().isApplicationVisibleForRole(roleName, packageName, executor,
callback);
}
+ @NonNull
+ private RoleControllerManager getRoleControllerManager() {
+ synchronized (mRoleControllerManagerLock) {
+ if (mRoleControllerManager == null) {
+ mRoleControllerManager = new RoleControllerManager(mContext);
+ }
+ return mRoleControllerManager;
+ }
+ }
+
private static class OnRoleHoldersChangedListenerDelegate
extends IOnRoleHoldersChangedListener.Stub {