Use simpler delayed writing logic in RoleUserState.

This change makes RoleUserState to use a simpler delayed writing
logic.

Bug: 110557011
Test: manual
Change-Id: I29d848263af36bf632a1bb48659520b66e8c4492
diff --git a/services/core/java/com/android/server/role/RoleUserState.java b/services/core/java/com/android/server/role/RoleUserState.java
index 81adb11..ec614a4 100644
--- a/services/core/java/com/android/server/role/RoleUserState.java
+++ b/services/core/java/com/android/server/role/RoleUserState.java
@@ -62,7 +62,6 @@
     private static final String ROLES_FILE_NAME = "roles.xml";
 
     private static final long WRITE_DELAY_MILLIS = 200;
-    private static final long MAX_WRITE_DELAY_MILLIS = 2000;
 
     private static final String TAG_ROLES = "roles";
     private static final String TAG_ROLE = "role";
@@ -92,7 +91,7 @@
     private ArrayMap<String, ArraySet<String>> mRoles = new ArrayMap<>();
 
     @GuardedBy("mLock")
-    private long mWritePendingSinceMillis;
+    private boolean mWriteScheduled;
 
     @GuardedBy("mLock")
     private boolean mDestroyed;
@@ -292,26 +291,11 @@
     private void scheduleWriteFileLocked() {
         throwIfDestroyedLocked();
 
-        long currentTimeMillis = System.currentTimeMillis();
-        long writeDelayMillis;
-        if (!mWriteHandler.hasMessagesOrCallbacks()) {
-            mWritePendingSinceMillis = currentTimeMillis;
-            writeDelayMillis = WRITE_DELAY_MILLIS;
-        } else {
-            mWriteHandler.removeCallbacksAndMessages(null);
-            long writePendingDurationMillis = currentTimeMillis - mWritePendingSinceMillis;
-            if (writePendingDurationMillis >= MAX_WRITE_DELAY_MILLIS) {
-                writeDelayMillis = 0;
-            } else {
-                long maxWriteDelayMillis = Math.max(MAX_WRITE_DELAY_MILLIS
-                        - writePendingDurationMillis, 0);
-                writeDelayMillis = Math.min(WRITE_DELAY_MILLIS, maxWriteDelayMillis);
-            }
+        if (!mWriteScheduled) {
+            mWriteHandler.sendMessageDelayed(PooledLambda.obtainMessage(RoleUserState::writeFile,
+                    this), WRITE_DELAY_MILLIS);
+            mWriteScheduled = true;
         }
-
-        mWriteHandler.sendMessageDelayed(PooledLambda.obtainMessage(RoleUserState::writeFile, this),
-                writeDelayMillis);
-        Slog.i(LOG_TAG, "Scheduled writing roles.xml");
     }
 
     @WorkerThread
@@ -324,6 +308,8 @@
                 return;
             }
 
+            mWriteScheduled = false;
+
             version = mVersion;
             packagesHash = mPackagesHash;
             roles = snapshotRolesLocked();