diff --git a/src/java/com/google/devtools/mobileharness/platform/android/file/AndroidFileUtil.java b/src/java/com/google/devtools/mobileharness/platform/android/file/AndroidFileUtil.java index 05a63f1e2..86d07f651 100644 --- a/src/java/com/google/devtools/mobileharness/platform/android/file/AndroidFileUtil.java +++ b/src/java/com/google/devtools/mobileharness/platform/android/file/AndroidFileUtil.java @@ -314,13 +314,14 @@ public String getExternalStoragePath(String serial, int sdkVersion) int currentUser = androidUserUtil.getCurrentUser(serial, sdkVersion); logger.atInfo().log( "Device %s current user: %s, sdk version: %s", serial, currentUser, sdkVersion); - if (currentUser == SYSTEM_USER - || sdkVersion < AndroidVersion.ANDROID_11.getStartSdkVersion()) { - externalStoragePath = "/storage/emulated/" + currentUser; - } else { - // special cases for multi user devices, especially, auto OS. + if (currentUser != SYSTEM_USER + && sdkVersion == AndroidVersion.ANDROID_11.getStartSdkVersion()) { + // Special case for multi user devices in Android R. Refer to b/152866706 for more + // details. externalStoragePath = MULTI_USER_EXTERNAL_STORAGE_PATH_PREFIX + currentUser + "/emulated/" + currentUser; + } else { + externalStoragePath = "/storage/emulated/" + currentUser; } } } catch (MobileHarnessException e) { diff --git a/src/javatests/com/google/devtools/mobileharness/platform/android/file/AndroidFileUtilTest.java b/src/javatests/com/google/devtools/mobileharness/platform/android/file/AndroidFileUtilTest.java index 9993f5714..ee2f5abf1 100644 --- a/src/javatests/com/google/devtools/mobileharness/platform/android/file/AndroidFileUtilTest.java +++ b/src/javatests/com/google/devtools/mobileharness/platform/android/file/AndroidFileUtilTest.java @@ -193,6 +193,24 @@ public void getExternalStoragePath_api30_multiuser() throws Exception { .isEqualTo(AndroidErrorId.ANDROID_FILE_UTIL_GET_EXTERNAL_STORAGE_ERROR); } + @Test + public void getExternalStoragePath_api32_multiuser() throws Exception { + when(androidUserUtil.getCurrentUser(SERIAL, /* sdkVersion= */ 32)) + .thenReturn(10) + .thenThrow( + new MobileHarnessException( + AndroidErrorId.ANDROID_USER_UTIL_GET_FOREGROUND_USER_ERROR, "Error")); + + assertThat(androidFileUtil.getExternalStoragePath(SERIAL, /* sdkVersion= */ 32)) + .isEqualTo("/storage/emulated/10"); + assertThat( + assertThrows( + MobileHarnessException.class, + () -> androidFileUtil.getExternalStoragePath(SERIAL, /* sdkVersion= */ 32)) + .getErrorId()) + .isEqualTo(AndroidErrorId.ANDROID_FILE_UTIL_GET_EXTERNAL_STORAGE_ERROR); + } + @Test public void getFileInfo_file() throws Exception { int sdkVersion = 28;