[Multi-user] Change Backup Settings page to support multi-user.
With multi-user backup, backup will be available or secondary users and profiles too. 1. When there are profile users, this CL changes UI flow A to B A. Settings Homepage -> System -> Google Backup Settings for primary user to B. Settings Homepage -> System -> Profile Select Dialog -> Google Backup Settings for chosen profile. Change done as per https://g3doc.corp.google.com/company/teams/apps-android-settings/howto/ia.md?cl=head 2. Functionality remains the same when there are no profiles (BackupSettingsHelper, BackupSettingsContentProvider) 3. Also, enabled Backup Settings for secondary users. (Previously, backup settings were only shown for system user).(SettingsGateway) Bug: 121198738 Test: 1) System -> Backup -> shows Profile Select Dialog -> Backup page for selected profile 2) On secondary user without profile, System -> Backup (with summary) -> Backup page for secondary user. Change-Id: I6e21279978a5dfc6eca6f5a34bbfc15a34eac68b
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
@@ -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
|
||||
|
@@ -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<BackupSettingsActivity> mActivityController;
|
||||
private BackupSettingsActivity mActivity;
|
||||
@Config(shadows = {UserBackupSettingsActivityTest.ShadowBackupSettingsHelper.class,
|
||||
UserBackupSettingsActivityTest.ShadowUserHandle.class})
|
||||
public class UserBackupSettingsActivityTest {
|
||||
private ActivityController<UserBackupSettingsActivity> 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<SearchIndexableRaw> indexableRaws =
|
||||
BackupSettingsActivity.SEARCH_INDEX_DATA_PROVIDER.getRawDataToIndex(
|
||||
mApplication, true);
|
||||
final List<String> 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)
|
Reference in New Issue
Block a user