diff --git a/src/com/android/settings/deviceinfo/PrivateVolumeOptionMenuController.java b/src/com/android/settings/deviceinfo/PrivateVolumeOptionMenuController.java index 6047f8cc082..75fc73b2f0f 100644 --- a/src/com/android/settings/deviceinfo/PrivateVolumeOptionMenuController.java +++ b/src/com/android/settings/deviceinfo/PrivateVolumeOptionMenuController.java @@ -68,7 +68,8 @@ public class PrivateVolumeOptionMenuController implements LifecycleObserver, OnC 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 54e0eef4897..7fcedb7e6e9 100644 --- a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java +++ b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java @@ -415,7 +415,8 @@ public class PrivateVolumeSettings extends SettingsPreferenceFragment { .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 5f250dd0385..7b9b7b82cff 100644 --- a/tests/robotests/src/com/android/settings/deviceinfo/PrivateVolumeOptionMenuControllerTest.java +++ b/tests/robotests/src/com/android/settings/deviceinfo/PrivateVolumeOptionMenuControllerTest.java @@ -62,6 +62,7 @@ public class PrivateVolumeOptionMenuControllerTest { 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); @@ -80,6 +81,7 @@ public class PrivateVolumeOptionMenuControllerTest { @Test public void testMigrateDataIsNotVisibleNormally() { when(mPm.getPrimaryStorageCurrentVolume()).thenReturn(mPrimaryInfo); + when(mPrimaryInfo.isMountedWritable()).thenReturn(true); mController.onCreateOptionsMenu(mMenu, mMenuInflater); mController.onPrepareOptionsMenu(mMenu); @@ -97,6 +99,17 @@ public class PrivateVolumeOptionMenuControllerTest { verify(mMigrateMenuItem).setVisible(true); } + @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);