diff options
| author | 2021-01-20 16:02:01 +0000 | |
|---|---|---|
| committer | 2021-01-20 16:02:01 +0000 | |
| commit | 795872a444a813bd4c0b0d8638975d88ee9f3312 (patch) | |
| tree | 1d6a40064d66dd7c21216e274516e665cadd1b9f | |
| parent | 36bc807fe15517ff79d23119dccb9b02edbbf844 (diff) | |
| parent | 907dcf8fb867b6463e1cb8328e196dbfb0eb60c1 (diff) | |
Merge "Fix granting default roles timeout."
| -rw-r--r-- | core/java/android/app/role/RoleManager.java | 21 |
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 { |