diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java index d34dfeba3a5..8077ee321e1 100644 --- a/src/com/android/settings/SettingsActivity.java +++ b/src/com/android/settings/SettingsActivity.java @@ -639,12 +639,7 @@ public class SettingsActivity extends SettingsBaseActivity showDev, isAdmin) || somethingChanged; - // For profiles, we want them to be included in the profile select dialog even if - // backup is not activated. - // For other users, enable/disable backup settings depending on whether backup is activated - // for the user. - boolean enableBackupTile = um.isManagedProfile() - || new BackupSettingsHelper(this).isBackupServiceActive(); + boolean enableBackupTile = new BackupSettingsHelper(this).showBackupSettingsForUser(); somethingChanged = setTileEnabled(changedList, new ComponentName(packageName, UserBackupSettingsActivity.class.getName()), enableBackupTile, isAdmin) || somethingChanged; diff --git a/src/com/android/settings/backup/BackupInactivePreferenceController.java b/src/com/android/settings/backup/BackupInactivePreferenceController.java index 83a03185e15..92a9487490b 100644 --- a/src/com/android/settings/backup/BackupInactivePreferenceController.java +++ b/src/com/android/settings/backup/BackupInactivePreferenceController.java @@ -28,6 +28,9 @@ public class BackupInactivePreferenceController extends BasePreferenceController @Override public int getAvailabilityStatus() { + if (!new BackupSettingsHelper(mContext).showBackupSettingsForUser()) { + return AVAILABLE_UNSEARCHABLE; + } if (PrivacySettingsUtils.isInvisibleKey(mContext, PrivacySettingsUtils.BACKUP_INACTIVE)) { return UNSUPPORTED_ON_DEVICE; } diff --git a/src/com/android/settings/backup/BackupSettingsHelper.java b/src/com/android/settings/backup/BackupSettingsHelper.java index 1d3455b1495..ff4b0b5d506 100644 --- a/src/com/android/settings/backup/BackupSettingsHelper.java +++ b/src/com/android/settings/backup/BackupSettingsHelper.java @@ -50,6 +50,14 @@ public class BackupSettingsHelper { mContext = context; } + public boolean showBackupSettingsForUser() { + // For profiles, we want them to be included in the profile select dialog even if + // backup is not activated. + // For other users, enable/disable backup settings depending on whether backup is activated + // for the user. + return UserManager.get(mContext).isManagedProfile() || isBackupServiceActive(); + } + /** * If there is only one profile, show whether the backup is on or off. * Otherwise, show nothing. diff --git a/src/com/android/settings/backup/UserBackupSettingsActivity.java b/src/com/android/settings/backup/UserBackupSettingsActivity.java index 9baa9a3acee..dbbb1358e1c 100644 --- a/src/com/android/settings/backup/UserBackupSettingsActivity.java +++ b/src/com/android/settings/backup/UserBackupSettingsActivity.java @@ -98,7 +98,7 @@ public class UserBackupSettingsActivity extends FragmentActivity implements Inde */ public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = new BaseSearchIndexProvider() { - private static final String BACKUP_SEARCH_INDEX_KEY = "backup"; + private static final String BACKUP_SEARCH_INDEX_KEY = "Backup"; @Override public List getRawDataToIndex(Context context, @@ -119,6 +119,15 @@ public class UserBackupSettingsActivity extends FragmentActivity implements Inde return result; } + + @Override + public List getNonIndexableKeys(Context context) { + final List keys = super.getNonIndexableKeys(context); + if (!new BackupSettingsHelper(context).showBackupSettingsForUser()) { + keys.add(BACKUP_SEARCH_INDEX_KEY); + } + return keys; + } }; @VisibleForTesting diff --git a/tests/robotests/src/com/android/settings/backup/BackupInactivePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/backup/BackupInactivePreferenceControllerTest.java index 1d8d0283c2f..669aabb0db4 100644 --- a/tests/robotests/src/com/android/settings/backup/BackupInactivePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/backup/BackupInactivePreferenceControllerTest.java @@ -31,8 +31,10 @@ import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; +import static com.android.settings.backup.UserBackupSettingsActivityTest.ShadowBackupSettingsHelper; + @RunWith(RobolectricTestRunner.class) -@Config(shadows = {ShadowPrivacySettingsUtils.class}) +@Config(shadows = {ShadowPrivacySettingsUtils.class, ShadowBackupSettingsHelper.class}) public class BackupInactivePreferenceControllerTest { private Context mContext; private BackupInactivePreferenceController mController; @@ -48,18 +50,32 @@ public class BackupInactivePreferenceControllerTest { @After public void tearDown() { ShadowPrivacySettingsUtils.reset(); + ShadowBackupSettingsHelper.reset(); } @Test - public void getAvailabilityStatus_isnotInvisibleKey_shouldBeAvailable() { + public void getAvailabilityStatus_isnotInvisibleKey_showBackup_shouldBeAvailable() { ShadowPrivacySettingsUtils.setIsInvisibleKey(false); + ShadowBackupSettingsHelper.showBackupSettingsForUser = true; + assertThat(mController.getAvailabilityStatus()) .isEqualTo(BasePreferenceController.AVAILABLE); } + @Test + public void getAvailabilityStatus_isnotInvisibleKey_dontShowBackup_shouldBeUnsearchable() { + ShadowPrivacySettingsUtils.setIsInvisibleKey(false); + ShadowBackupSettingsHelper.showBackupSettingsForUser = false; + + assertThat(mController.getAvailabilityStatus()) + .isEqualTo(BasePreferenceController.AVAILABLE_UNSEARCHABLE); + } + @Test public void getAvailabilityStatus_isInvisibleKey_shouldBeDisabledUnsupported() { ShadowPrivacySettingsUtils.setIsInvisibleKey(true); + ShadowBackupSettingsHelper.showBackupSettingsForUser = true; + assertThat(mController.getAvailabilityStatus()) .isEqualTo(BasePreferenceController.UNSUPPORTED_ON_DEVICE); } diff --git a/tests/robotests/src/com/android/settings/backup/UserBackupSettingsActivityTest.java b/tests/robotests/src/com/android/settings/backup/UserBackupSettingsActivityTest.java index 19a6051f143..9c5a11a22ff 100644 --- a/tests/robotests/src/com/android/settings/backup/UserBackupSettingsActivityTest.java +++ b/tests/robotests/src/com/android/settings/backup/UserBackupSettingsActivityTest.java @@ -29,7 +29,6 @@ import android.app.Application; import android.content.ComponentName; import android.content.Intent; import android.content.pm.PackageManager; -import android.os.UserHandle; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; @@ -53,8 +52,7 @@ import org.robolectric.annotation.Resetter; import org.robolectric.shadows.ShadowPackageManager; @RunWith(RobolectricTestRunner.class) -@Config(shadows = {UserBackupSettingsActivityTest.ShadowBackupSettingsHelper.class, - UserBackupSettingsActivityTest.ShadowUserHandle.class}) +@Config(shadows = {UserBackupSettingsActivityTest.ShadowBackupSettingsHelper.class}) public class UserBackupSettingsActivityTest { private ActivityController mActivityController; private UserBackupSettingsActivity mActivity; @@ -85,7 +83,7 @@ public class UserBackupSettingsActivityTest { @After public void resetShadows() { - ShadowUserHandle.reset(); + ShadowBackupSettingsHelper.reset(); } @Test @@ -125,7 +123,9 @@ public class UserBackupSettingsActivityTest { } @Test - public void getNonIndexableKeys_SystemUser() { + public void getNonIndexableKeys_whenShowBackupSettings() { + ShadowBackupSettingsHelper.showBackupSettingsForUser = true; + assertThat(UserBackupSettingsActivity.SEARCH_INDEX_DATA_PROVIDER.getRawDataToIndex( mApplication, true)).isNotEmpty(); assertThat(UserBackupSettingsActivity.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys( @@ -133,17 +133,24 @@ public class UserBackupSettingsActivityTest { } @Test - public void getNonIndexableKeys_NonSystemUser() { - ShadowUserHandle.setUid(1); // Non-SYSTEM user. + public void getNonIndexableKeys_whenDontShowBackupSettings() { + ShadowBackupSettingsHelper.showBackupSettingsForUser = false; assertThat(UserBackupSettingsActivity.SEARCH_INDEX_DATA_PROVIDER.getRawDataToIndex( mApplication, true)).isNotEmpty(); assertThat(UserBackupSettingsActivity.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys( - mApplication)).isEmpty(); + mApplication)).contains("Backup"); } @Implements(BackupSettingsHelper.class) public static class ShadowBackupSettingsHelper { + static boolean showBackupSettingsForUser = true; + + @Implementation + public boolean showBackupSettingsForUser() { + return showBackupSettingsForUser; + } + @Implementation protected Intent getIntentForBackupSettings() { return mIntent; @@ -153,24 +160,10 @@ public class UserBackupSettingsActivityTest { protected boolean isBackupProvidedByManufacturer() { return mIsBackupProvidedByOEM; } - } - - @Implements(UserHandle.class) - public static class ShadowUserHandle { - private static int sUid = 0; // SYSTEM by default - - public static void setUid(int uid) { - sUid = uid; - } - - @Implementation - protected static int myUserId() { - return sUid; - } @Resetter public static void reset() { - sUid = 0; + showBackupSettingsForUser = true; } } }