diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 8362fd60515..6e1d8f8c6ba 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -2776,13 +2776,17 @@ android:value="com.android.settings.webview.WebViewAppPicker" /> - + + + + android:icon="@drawable/ic_settings_backup"> - @@ -2790,10 +2794,16 @@ - - + + + + + + + + - - - - - getNonIndexableKeys(Context context) { - final List keys = super.getNonIndexableKeys(context); - - // For non-primary user, no backup is available, so don't show it in search - // TODO: http://b/22388012 - if (UserHandle.myUserId() != UserHandle.USER_SYSTEM) { - if (Log.isLoggable(TAG, Log.DEBUG)) { - Log.d(TAG, "Not a system user, not indexing the screen"); - } - keys.add(BACKUP_SEARCH_INDEX_KEY); - } - - return keys; - } }; @VisibleForTesting diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java index 7ba36887c4d..bb292a154f2 100644 --- a/src/com/android/settings/core/gateway/SettingsGateway.java +++ b/src/com/android/settings/core/gateway/SettingsGateway.java @@ -49,6 +49,7 @@ import com.android.settings.applications.specialaccess.deviceadmin.DeviceAdminSe import com.android.settings.applications.specialaccess.pictureinpicture.PictureInPictureDetails; import com.android.settings.applications.specialaccess.pictureinpicture.PictureInPictureSettings; import com.android.settings.applications.specialaccess.vrlistener.VrListenerSettings; +import com.android.settings.backup.UserBackupSettingsActivity; import com.android.settings.backup.PrivacySettings; import com.android.settings.backup.ToggleBackupSettingFragment; import com.android.settings.biometrics.face.FaceSettings; @@ -298,5 +299,6 @@ public class SettingsGateway { Settings.DateTimeSettingsActivity.class.getName(), Settings.EnterprisePrivacySettingsActivity.class.getName(), Settings.MyDeviceInfoActivity.class.getName(), + UserBackupSettingsActivity.class.getName(), }; } diff --git a/tests/robotests/src/com/android/settings/backup/BackupSettingsActivityPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/backup/BackupSettingsActivityPreferenceControllerTest.java deleted file mode 100644 index 97ddc4bc1ad..00000000000 --- a/tests/robotests/src/com/android/settings/backup/BackupSettingsActivityPreferenceControllerTest.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License - */ - -package com.android.settings.backup; - -import static com.google.common.truth.Truth.assertThat; - -import static org.mockito.Mockito.verify; - -import android.app.backup.BackupManager; -import android.content.Context; -import android.os.UserManager; - -import androidx.preference.Preference; - -import com.android.settings.R; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.robolectric.RobolectricTestRunner; -import org.robolectric.RuntimeEnvironment; -import org.robolectric.shadow.api.Shadow; -import org.robolectric.shadows.ShadowApplication; -import org.robolectric.shadows.ShadowUserManager; - -@RunWith(RobolectricTestRunner.class) -public class BackupSettingsActivityPreferenceControllerTest { - - private static final String KEY_BACKUP_SETTINGS = "backup_settings"; - - private Context mContext; - private BackupManager mBackupManager; - private UserManager mUserManager; - - @Mock - private Preference mBackupPreference; - - private BackupSettingsActivityPreferenceController mController; - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - - mContext = RuntimeEnvironment.application; - mBackupManager = new BackupManager(mContext); - - final ShadowApplication shadowApplication = ShadowApplication.getInstance(); - shadowApplication.grantPermissions(android.Manifest.permission.BACKUP); - shadowApplication.setSystemService(Context.BACKUP_SERVICE, mBackupManager); - - mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE); - - mController = new BackupSettingsActivityPreferenceController(mContext, KEY_BACKUP_SETTINGS); - } - - @Test - public void updateState_backupOn() { - mBackupManager.setBackupEnabled(true); - - mController.updateState(mBackupPreference); - String summaryString = mContext.getString(R.string.backup_summary_state_on); - verify(mBackupPreference).setSummary(summaryString); - } - - @Test - public void updateState_backupOff() { - mBackupManager.setBackupEnabled(false); - - mController.updateState(mBackupPreference); - String summaryString = mContext.getString(R.string.backup_summary_state_off); - verify(mBackupPreference).setSummary(summaryString); - } - - @Test - public void isAvailable_systemUser() { - final ShadowUserManager sum = Shadow.extract(mUserManager); - sum.setIsAdminUser(true); - - assertThat(mController.isAvailable()).isTrue(); - } - - @Test - public void isAvailable_nonSystemUser() { - final ShadowUserManager sum = Shadow.extract(mUserManager); - sum.setIsAdminUser(false); - - assertThat(mController.isAvailable()).isFalse(); - } - - @Test - public void getPreferenceKey() { - assertThat(mController.getPreferenceKey()).isEqualTo(KEY_BACKUP_SETTINGS); - } -} diff --git a/tests/robotests/src/com/android/settings/backup/BackupSettingsHelperTest.java b/tests/robotests/src/com/android/settings/backup/BackupSettingsHelperTest.java index 9a809cc7ba2..ee8912af56f 100644 --- a/tests/robotests/src/com/android/settings/backup/BackupSettingsHelperTest.java +++ b/tests/robotests/src/com/android/settings/backup/BackupSettingsHelperTest.java @@ -31,12 +31,16 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; +import android.content.pm.UserInfo; import android.content.res.Resources; import android.os.IBinder; import android.os.RemoteException; +import android.os.UserHandle; +import android.os.UserManager; import com.android.settings.R; +import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -47,11 +51,12 @@ import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import org.robolectric.annotation.Implementation; import org.robolectric.annotation.Implements; +import org.robolectric.shadow.api.Shadow; +import org.robolectric.shadows.ShadowUserManager; @RunWith(RobolectricTestRunner.class) @Config(shadows = BackupSettingsHelperTest.ShadowBackupManagerStub.class) public class BackupSettingsHelperTest { - private static final String DEFAULT_SETTINGS_CLASSNAME = "com.android.settings.Settings$PrivacySettingsActivity"; @@ -72,12 +77,46 @@ public class BackupSettingsHelperTest { @Mock private static IBackupManager mBackupManager; + private ShadowUserManager mUserManager; + @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); mContext = spy(RuntimeEnvironment.application.getApplicationContext()); when(mBackupManager.getCurrentTransport()).thenReturn("test_transport"); mBackupSettingsHelper = new BackupSettingsHelper(mContext); + mUserManager = Shadow.extract(mContext.getSystemService(Context.USER_SERVICE)); + } + + @Test + public void testGetSummary_backupEnabledOnlyOneProfile_showsOn() throws Exception { + mUserManager.addUserProfile(new UserHandle(0)); + when(mBackupManager.isBackupEnabled()).thenReturn(true); + + String backupSummary = mBackupSettingsHelper.getSummary(); + + assertThat(backupSummary).isEqualTo(mContext.getString(R.string.backup_summary_state_on)); + } + + @Test + public void testGetSummary_backupDisabledOnlyOneProfile_showsOff() throws Exception { + mUserManager.addUserProfile(new UserHandle(0)); + when(mBackupManager.isBackupEnabled()).thenReturn(false); + + String backupSummary = mBackupSettingsHelper.getSummary(); + + assertThat(backupSummary).isEqualTo(mContext.getString(R.string.backup_summary_state_off)); + } + + @Test + public void testGetSummary_TwoProfiles_returnsNull() throws Exception { + mUserManager.addUserProfile(new UserHandle(0)); + mUserManager.addUserProfile(new UserHandle(10)); + when(mBackupManager.isBackupEnabled()).thenReturn(true); + + String backupSummary = mBackupSettingsHelper.getSummary(); + + assertThat(backupSummary).isNull(); } @Test diff --git a/tests/robotests/src/com/android/settings/backup/BackupSettingsActivityTest.java b/tests/robotests/src/com/android/settings/backup/UserBackupSettingsActivityTest.java similarity index 82% rename from tests/robotests/src/com/android/settings/backup/BackupSettingsActivityTest.java rename to tests/robotests/src/com/android/settings/backup/UserBackupSettingsActivityTest.java index 931bc1e7ee0..19a6051f143 100644 --- a/tests/robotests/src/com/android/settings/backup/BackupSettingsActivityTest.java +++ b/tests/robotests/src/com/android/settings/backup/UserBackupSettingsActivityTest.java @@ -35,8 +35,6 @@ import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; -import com.android.settings.search.SearchIndexableRaw; - import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -54,14 +52,12 @@ import org.robolectric.annotation.Implements; import org.robolectric.annotation.Resetter; import org.robolectric.shadows.ShadowPackageManager; -import java.util.List; - @RunWith(RobolectricTestRunner.class) -@Config(shadows = {BackupSettingsActivityTest.ShadowBackupSettingsHelper.class, - BackupSettingsActivityTest.ShadowUserHandle.class}) -public class BackupSettingsActivityTest { - private ActivityController mActivityController; - private BackupSettingsActivity mActivity; +@Config(shadows = {UserBackupSettingsActivityTest.ShadowBackupSettingsHelper.class, + UserBackupSettingsActivityTest.ShadowUserHandle.class}) +public class UserBackupSettingsActivityTest { + private ActivityController mActivityController; + private UserBackupSettingsActivity mActivity; private Application mApplication; private ShadowPackageManager mPackageManager; private static boolean mIsBackupProvidedByOEM; @@ -81,7 +77,7 @@ public class BackupSettingsActivityTest { MockitoAnnotations.initMocks(this); mApplication = RuntimeEnvironment.application; - mActivityController = Robolectric.buildActivity(BackupSettingsActivity.class); + mActivityController = Robolectric.buildActivity(UserBackupSettingsActivity.class); mActivity = mActivityController.get(); mPackageManager = Shadows.shadowOf(mApplication.getPackageManager()); when(mIntent.getComponent()).thenReturn(mComponent); @@ -130,9 +126,9 @@ public class BackupSettingsActivityTest { @Test public void getNonIndexableKeys_SystemUser() { - assertThat(BackupSettingsActivity.SEARCH_INDEX_DATA_PROVIDER.getRawDataToIndex( + assertThat(UserBackupSettingsActivity.SEARCH_INDEX_DATA_PROVIDER.getRawDataToIndex( mApplication, true)).isNotEmpty(); - assertThat(BackupSettingsActivity.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys( + assertThat(UserBackupSettingsActivity.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys( mApplication)).isEmpty(); } @@ -140,16 +136,10 @@ public class BackupSettingsActivityTest { public void getNonIndexableKeys_NonSystemUser() { ShadowUserHandle.setUid(1); // Non-SYSTEM user. - final List indexableRaws = - BackupSettingsActivity.SEARCH_INDEX_DATA_PROVIDER.getRawDataToIndex( - mApplication, true); - final List nonIndexableKeys = - BackupSettingsActivity.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys( - mApplication); - - assertThat(indexableRaws).isNotNull(); - assertThat(indexableRaws).isNotEmpty(); - assertThat(nonIndexableKeys).isNotEmpty(); + assertThat(UserBackupSettingsActivity.SEARCH_INDEX_DATA_PROVIDER.getRawDataToIndex( + mApplication, true)).isNotEmpty(); + assertThat(UserBackupSettingsActivity.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys( + mApplication)).isEmpty(); } @Implements(BackupSettingsHelper.class) diff --git a/tests/unit/src/com/android/settings/backup/BackupIntentTest.java b/tests/unit/src/com/android/settings/backup/BackupIntentTest.java index 18fb17a59a0..0115c569aef 100644 --- a/tests/unit/src/com/android/settings/backup/BackupIntentTest.java +++ b/tests/unit/src/com/android/settings/backup/BackupIntentTest.java @@ -37,12 +37,9 @@ import java.util.List; @RunWith(AndroidJUnit4.class) @SmallTest public class BackupIntentTest { - private static final String INTENT_PRIVACY_SETTINGS = "android.settings.PRIVACY_SETTINGS"; - private static final String INTENT_BACKUP_SETTINGS = - "android.settings.BACKUP_AND_RESET_SETTINGS"; private static final String BACKUP_SETTINGS_ACTIVITY = - "com.android.settings.backup.BackupSettingsActivity"; + "com.android.settings.backup.UserBackupSettingsActivity"; private Context mContext; @@ -52,17 +49,6 @@ public class BackupIntentTest { mContext = instrumentation.getTargetContext(); } - @Test - public void testBackupSettingsIntentResolvesToOnlyOneActivity(){ - PackageManager pm = mContext.getPackageManager(); - Intent intent = new Intent(INTENT_BACKUP_SETTINGS); - List activities = pm.queryIntentActivities(intent, 0); - assertThat(activities).isNotNull(); - assertThat(activities.size()).isEqualTo(1); - assertThat(activities.get(0).activityInfo.getComponentName().getClassName()). - isEqualTo(BACKUP_SETTINGS_ACTIVITY); - } - @Test public void testPrivacySettingsIntentResolvesToOnlyOneActivity(){ PackageManager pm = mContext.getPackageManager(); @@ -73,5 +59,4 @@ public class BackupIntentTest { assertThat(activities.get(0).activityInfo.getComponentName().getClassName()). isEqualTo(BACKUP_SETTINGS_ACTIVITY); } - }