Make migrate option menu invisible when src volume is not mounted
When the adopted media storage is ejected, migrate operation from
adopted storage to internal storage always fails.
This CL makes the migrate option menu invisible when the source
volume of migration is not mounted and not accessible.
Bug: 117178027
Test: Settings robotests & manual
Change-Id: I8bfc9de552a8daf861315a5e46ee520ede14dd81
diff --git a/src/com/android/settings/deviceinfo/PrivateVolumeOptionMenuController.java b/src/com/android/settings/deviceinfo/PrivateVolumeOptionMenuController.java
index 4bc3bcc..7981e5f 100644
--- a/src/com/android/settings/deviceinfo/PrivateVolumeOptionMenuController.java
+++ b/src/com/android/settings/deviceinfo/PrivateVolumeOptionMenuController.java
@@ -67,7 +67,8 @@
if (migrate != null) {
migrate.setVisible((privateVol != null)
&& (privateVol.getType() == VolumeInfo.TYPE_PRIVATE)
- && !Objects.equals(mVolumeInfo, privateVol));
+ && !Objects.equals(mVolumeInfo, privateVol)
+ && privateVol.isMountedWritable());
}
}
diff --git a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
index a8b24f6..be40477 100644
--- a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
+++ b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
@@ -416,7 +416,8 @@
.getPrimaryStorageCurrentVolume();
migrate.setVisible((privateVol != null)
&& (privateVol.getType() == VolumeInfo.TYPE_PRIVATE)
- && !Objects.equals(mVolume, privateVol));
+ && !Objects.equals(mVolume, privateVol)
+ && privateVol.isMountedWritable());
}
@Override
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/PrivateVolumeOptionMenuControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/PrivateVolumeOptionMenuControllerTest.java
index bad49f2..4a1d88c 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/PrivateVolumeOptionMenuControllerTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/PrivateVolumeOptionMenuControllerTest.java
@@ -63,6 +63,7 @@
MockitoAnnotations.initMocks(this);
when(mVolumeInfo.getType()).thenReturn(VolumeInfo.TYPE_PRIVATE);
+ when(mVolumeInfo.isMountedWritable()).thenReturn(true);
when(mPrimaryInfo.getType()).thenReturn(VolumeInfo.TYPE_PRIVATE);
when(mMenu.findItem(anyInt())).thenReturn(mMigrateMenuItem);
when(mMigrateMenuItem.getItemId()).thenReturn(100);
@@ -81,6 +82,7 @@
@Test
public void testMigrateDataIsNotVisibleNormally() {
when(mPm.getPrimaryStorageCurrentVolume()).thenReturn(mPrimaryInfo);
+ when(mPrimaryInfo.isMountedWritable()).thenReturn(true);
mController.onCreateOptionsMenu(mMenu, mMenuInflater);
mController.onPrepareOptionsMenu(mMenu);
@@ -99,6 +101,17 @@
}
@Test
+ public void testMigrateDataIsNotVisibleWhenExternalVolumeIsNotMounted() {
+ when(mPm.getPrimaryStorageCurrentVolume()).thenReturn(mVolumeInfo);
+ when(mVolumeInfo.isMountedWritable()).thenReturn(false);
+
+ mController.onCreateOptionsMenu(mMenu, mMenuInflater);
+ mController.onPrepareOptionsMenu(mMenu);
+
+ verify(mMigrateMenuItem).setVisible(false);
+ }
+
+ @Test
public void testMigrateDataGoesToMigrateWizard() {
when(mPm.getPrimaryStorageCurrentVolume()).thenReturn(mVolumeInfo);