Fix Launcher3 issues due to hardcoded default user

Bug: 288407058
Bug: 288406660
Bug: 288406673
Test: atest NexusLauncherOutOfProcTests:com.android.launcher3.ui.TaplTestsLauncher3#testUninstallFromWorkspace
Test: atest NexusLauncherOutOfProcTests:com.android.launcher3.ui.TaplTestsLauncher3#testUninstallFromAllApps
Test: atest NexusLauncherOutOfProcTests:com.android.launcher3.ui.TaplTestsLauncher3#getIconsPosition_afterIconRemoved_notContained
Change-Id: Ibe0c4d8f21721e08b2496bfb5c470903e785c2c5
diff --git a/tests/src/com/android/launcher3/util/TestUtil.java b/tests/src/com/android/launcher3/util/TestUtil.java
index 7332b83..4cd6c53 100644
--- a/tests/src/com/android/launcher3/util/TestUtil.java
+++ b/tests/src/com/android/launcher3/util/TestUtil.java
@@ -67,11 +67,11 @@
     private static final String TAG = "TestUtil";
 
     public static final String DUMMY_PACKAGE = "com.example.android.aardwolf";
-    public static final int DEFAULT_USER_ID = 0;
     public static final long DEFAULT_UI_TIMEOUT = 10000;
 
     public static void installDummyApp() throws IOException {
-        installDummyAppForUser(DEFAULT_USER_ID);
+        final int defaultUserId = getMainUserId();
+        installDummyAppForUser(defaultUserId);
     }
 
     public static void installDummyAppForUser(int userId) throws IOException {
@@ -107,6 +107,23 @@
     }
 
     /**
+     * Returns the main user ID. NOTE: For headless system it is NOT 0. Returns 0 by default, if
+     * there is no main user.
+     *
+     * @return a main user ID
+     */
+    public static int getMainUserId() throws IOException {
+        Instrumentation instrumentation = getInstrumentation();
+        final String result = UiDevice.getInstance(instrumentation)
+                .executeShellCommand("cmd user get-main-user");
+        try {
+            return Integer.parseInt(result.trim());
+        } catch (NumberFormatException e) {
+            return 0;
+        }
+    }
+
+    /**
      * Utility class to override a boolean flag during test. Note that the returned SafeCloseable
      * must be closed to restore the original state
      */