From a88ed48cb881a63f30177817cfac07fe6adcb80d Mon Sep 17 00:00:00 2001 From: Takamasa Kuramitsu Date: Tue, 2 Oct 2018 17:12:06 +0900 Subject: [PATCH] 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 --- .../PrivateVolumeOptionMenuController.java | 3 ++- .../settings/deviceinfo/PrivateVolumeSettings.java | 3 ++- .../PrivateVolumeOptionMenuControllerTest.java | 13 +++++++++++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/com/android/settings/deviceinfo/PrivateVolumeOptionMenuController.java b/src/com/android/settings/deviceinfo/PrivateVolumeOptionMenuController.java index 4bc3bccd774..7981e5f7d17 100644 --- a/src/com/android/settings/deviceinfo/PrivateVolumeOptionMenuController.java +++ b/src/com/android/settings/deviceinfo/PrivateVolumeOptionMenuController.java @@ -67,7 +67,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 a8b24f62c5e..be40477be01 100644 --- a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java +++ b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java @@ -416,7 +416,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 bad49f2ab60..4a1d88c1d80 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 @@ 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); @@ -81,6 +82,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); @@ -98,6 +100,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);