Increased the number of adding a role holder retries to 12.

This CL also contains an extra check on whether the role has been assigned or not.

Bug: 383915983
Bug: 383126661
Test: atest DeviceLockUnitTests
Flag: EXEMPT bugfix

Change-Id: Ib28973ca8141480a13028b41084af3022d769925
diff --git a/service/java/com/android/server/devicelock/DeviceLockServiceImpl.java b/service/java/com/android/server/devicelock/DeviceLockServiceImpl.java
index ee384df..084f3fb 100644
--- a/service/java/com/android/server/devicelock/DeviceLockServiceImpl.java
+++ b/service/java/com/android/server/devicelock/DeviceLockServiceImpl.java
@@ -95,7 +95,7 @@
             "com.android.devicelock.action.KEEPALIVE";
 
     // Workaround for timeout while adding the kiosk app as role holder for financing.
-    private static final int MAX_ADD_ROLE_HOLDER_TRIES = 4;
+    private static final int MAX_ADD_ROLE_HOLDER_TRIES = 12;
 
     private final Context mContext;
     private final ExecutorService mExecutorService;
@@ -765,6 +765,16 @@
                     if (accepted || remainingTries == 1) {
                         reportResult(accepted, identity, remoteCallback);
                     } else {
+                        // Check if the role is already added.
+                        if (mRoleManager.getRoleHoldersAsUser(
+                                RoleManager.ROLE_FINANCED_DEVICE_KIOSK, userHandle).
+                                contains(packageName)) {
+                            Slog.w(TAG, "Role (" +
+                                RoleManager.ROLE_FINANCED_DEVICE_KIOSK + ") already added for "
+                                + packageName);
+                            return;
+                        }
+
                         final int retryNumber = MAX_ADD_ROLE_HOLDER_TRIES - remainingTries + 1;
                         Slog.w(TAG, "Retrying adding financed device role to kiosk app (retry "
                                 + retryNumber + ")");