Fix possible race in blocking dialog

- also add dump to show the status of the dialog

Bug: 156817002
Bug: 156653601
Test: check cluster with user switching
Change-Id: I95a00d773c1bd292f6cbfa40379e28e539fd312c
(cherry picked from commit c4c9d80d306568a52923f31717bc08fef3297b4d)
diff --git a/service/src/com/android/car/am/FixedActivityService.java b/service/src/com/android/car/am/FixedActivityService.java
index f381702..cd16463 100644
--- a/service/src/com/android/car/am/FixedActivityService.java
+++ b/service/src/com/android/car/am/FixedActivityService.java
@@ -138,7 +138,7 @@
         }
         if (CarUserManager.USER_LIFECYCLE_EVENT_TYPE_SWITCHING == event.getEventType()) {
             synchronized (FixedActivityService.this.mLock) {
-                FixedActivityService.this.mRunningActivities.clear();
+                clearRunningActivitiesLocked();
             }
         }
     };
@@ -290,6 +290,25 @@
         synchronized (mLock) {
             writer.println("mRunningActivities:" + mRunningActivities
                     + " ,mEventMonitoringActive:" + mEventMonitoringActive);
+            writer.println("mBlockingPresentations:");
+            for (int i = 0; i < mBlockingPresentations.size(); i++) {
+                Presentation p = mBlockingPresentations.valueAt(i);
+                if (p == null) {
+                    continue;
+                }
+                writer.println("display:" + mBlockingPresentations.keyAt(i)
+                        + " showing:" + p.isShowing());
+            }
+        }
+    }
+
+    private void clearRunningActivitiesLocked() {
+        int currentUser = ActivityManager.getCurrentUser();
+        for (int i = mRunningActivities.size() - 1; i >= 0; i--) {
+            RunningActivityInfo info = mRunningActivities.valueAt(i);
+            if (info == null || info.userId != currentUser) {
+                mRunningActivities.removeAt(i);
+            }
         }
     }
 
@@ -411,10 +430,15 @@
                         Presentation p = new Presentation(mContext, display,
                                 android.R.style.Theme_Black_NoTitleBar_Fullscreen);
                         p.setContentView(R.layout.activity_continuous_blank);
-                        p.show();
                         synchronized (mLock) {
+                            RunningActivityInfo info = mRunningActivities.get(displayIdForActivity);
+                            if (info != null && info.userId == ActivityManager.getCurrentUser()) {
+                                Log.i(TAG_AM, "Do not show Presentation, new req already made");
+                                return;
+                            }
                             mBlockingPresentations.append(displayIdForActivity, p);
                         }
+                        p.show();
                     });
                 }
                 mRunningActivities.removeAt(i);