Fix "Permission denied" problem due to permission update slow

This is flaky test. After starting a secondary user and installing MEDIA_FULL.apk in the secondary user, the user initialization may cause slow permission update. So make sure user initialization is complete before updating permission.

Bug:153699381
BUG: 158587595
Test: run cts -m CtsAppSecurityHostTestCases -t android.appsecurity.cts.ExternalStorageHostTest#testMediaSandboxed28

Signed-off-by: qianyou <qianyou@xiaomi.com>
Change-Id: If682df221aa8253b244e779d74c1b8aaca82da04
(cherry picked from commit c3966c75e5f03c3085ae6bd5997781acf9e0cdce)
diff --git a/hostsidetests/appsecurity/src/android/appsecurity/cts/ExternalStorageHostTest.java b/hostsidetests/appsecurity/src/android/appsecurity/cts/ExternalStorageHostTest.java
index a08a515..2a087dc 100644
--- a/hostsidetests/appsecurity/src/android/appsecurity/cts/ExternalStorageHostTest.java
+++ b/hostsidetests/appsecurity/src/android/appsecurity/cts/ExternalStorageHostTest.java
@@ -488,6 +488,8 @@
     private void doMediaSandboxed(Config config, boolean sandboxed) throws Exception {
         installPackage(config.apk);
         installPackage(MEDIA_29.apk);
+        // Make sure user initialization is complete before updating permission
+        waitForBroadcastIdle();
         for (int user : mUsers) {
             updatePermissions(config.pkg, user, new String[] {
                     PERM_READ_EXTERNAL_STORAGE,
@@ -749,6 +751,11 @@
         }
     }
 
+    /** Wait until all broadcast queues are idle. */
+    private void waitForBroadcastIdle() throws Exception{
+        getDevice().executeShellCommand("am wait-for-broadcast-idle");
+    }
+
     private void updateAppOp(String packageName, int userId, String appOp, boolean allow)
             throws Exception {
         updateAppOp(packageName, false, userId, appOp, allow);