Loading src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java +1 −1 Original line number Diff line number Diff line Loading @@ -246,7 +246,7 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra Activity activity, Lifecycle lifecycle, DevelopmentSettingsDashboardFragment fragment) { final List<AbstractPreferenceController> controllers = new ArrayList<>(); // take bug report // desktop backup password controllers.add(new LocalBackupPasswordPreferenceController(context)); controllers.add(new StayAwakePreferenceController(context, lifecycle)); // hdcp checking controllers.add(new BluetoothSnoopLogPreferenceController(context)); Loading src/com/android/settings/development/LocalBackupPasswordPreferenceController.java 0 → 100644 +85 −0 Original line number Diff line number Diff line /* * 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.development; import android.app.backup.IBackupManager; import android.content.Context; import android.os.RemoteException; import android.os.ServiceManager; import android.os.UserManager; import android.support.annotation.VisibleForTesting; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import com.android.settings.R; public class LocalBackupPasswordPreferenceController extends DeveloperOptionsPreferenceController { private static final String LOCAL_BACKUP_PASSWORD = "local_backup_password"; private final UserManager mUserManager; private final IBackupManager mBackupManager; public LocalBackupPasswordPreferenceController(Context context) { super(context); mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE); mBackupManager = IBackupManager.Stub.asInterface( ServiceManager.getService(Context.BACKUP_SERVICE)); } @Override public String getPreferenceKey() { return LOCAL_BACKUP_PASSWORD; } @Override public void updateState(Preference preference) { updatePasswordSummary(preference); } @Override protected void onDeveloperOptionsSwitchEnabled() { // intentional no-op } @Override protected void onDeveloperOptionsSwitchDisabled() { // intentional no-op } private void updatePasswordSummary(Preference preference) { preference.setEnabled(isAdminUser() && mBackupManager != null); if (mBackupManager == null) { return; } try { if (mBackupManager.hasBackupPassword()) { preference.setSummary(R.string.local_backup_password_summary_change); } else { preference.setSummary(R.string.local_backup_password_summary_none); } } catch (RemoteException e) { // Not much we can do here } } @VisibleForTesting boolean isAdminUser() { return mUserManager.isAdminUser(); } } tests/robotests/src/com/android/settings/development/LocalBackupPasswordPreferenceControllerTest.java 0 → 100644 +120 −0 Original line number Diff line number Diff line package com.android.settings.development; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.app.backup.IBackupManager; import android.content.Context; import android.os.RemoteException; import android.os.UserManager; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.TestConfig; import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import org.robolectric.util.ReflectionHelpers; @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class LocalBackupPasswordPreferenceControllerTest { @Mock private Preference mPreference; @Mock private PreferenceScreen mScreen; @Mock private UserManager mUserManager; @Mock private IBackupManager mBackupManager; private Context mContext; private LocalBackupPasswordPreferenceController mController; @Before public void setup() { MockitoAnnotations.initMocks(this); mContext = RuntimeEnvironment.application; mController = spy(new LocalBackupPasswordPreferenceController(mContext)); ReflectionHelpers.setField(mController, "mUserManager", mUserManager); when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn( mPreference); } @Test public void updateState_hasBackupPassword_preferenceShouldHavePasswordSetSummary() throws RemoteException { ReflectionHelpers.setField(mController, "mBackupManager", mBackupManager); doReturn(true).when(mController).isAdminUser(); when(mBackupManager.hasBackupPassword()).thenReturn(true); mController.displayPreference(mScreen); mController.updateState(mPreference); verify(mPreference).setSummary(R.string.local_backup_password_summary_change); } @Test public void updateState_noBackupPassword_preferenceShouldHaveNoPasswordSetSummary() throws RemoteException { ReflectionHelpers.setField(mController, "mBackupManager", mBackupManager); doReturn(true).when(mController).isAdminUser(); when(mBackupManager.hasBackupPassword()).thenReturn(false); mController.displayPreference(mScreen); mController.updateState(mPreference); verify(mPreference).setSummary(R.string.local_backup_password_summary_none); } @Test public void updateState_backupManagerIsNull_shouldDisablePreference() throws RemoteException { ReflectionHelpers.setField(mController, "mBackupManager", null); doReturn(true).when(mController).isAdminUser(); when(mBackupManager.hasBackupPassword()).thenReturn(true); mController.displayPreference(mScreen); mController.updateState(mPreference); verify(mPreference).setEnabled(false); verify(mPreference, never()).setSummary(any()); } @Test public void updateState_backupManagerIsNotNullAndNotAdminUser_shouldDisablePreference() throws RemoteException { ReflectionHelpers.setField(mController, "mBackupManager", mBackupManager); doReturn(false).when(mController).isAdminUser(); when(mBackupManager.hasBackupPassword()).thenReturn(true); mController.updateState(mPreference); verify(mPreference).setEnabled(false); verify(mPreference, never()).setSummary(any()); } @Test public void updateState_backupManagerIsNotNullAndAdminUser_shouldEnablePreference() throws RemoteException { ReflectionHelpers.setField(mController, "mBackupManager", mBackupManager); doReturn(true).when(mController).isAdminUser(); when(mBackupManager.hasBackupPassword()).thenReturn(true); mController.updateState(mPreference); verify(mPreference).setEnabled(true); verify(mPreference, never()).setSummary(any()); } } Loading
src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java +1 −1 Original line number Diff line number Diff line Loading @@ -246,7 +246,7 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra Activity activity, Lifecycle lifecycle, DevelopmentSettingsDashboardFragment fragment) { final List<AbstractPreferenceController> controllers = new ArrayList<>(); // take bug report // desktop backup password controllers.add(new LocalBackupPasswordPreferenceController(context)); controllers.add(new StayAwakePreferenceController(context, lifecycle)); // hdcp checking controllers.add(new BluetoothSnoopLogPreferenceController(context)); Loading
src/com/android/settings/development/LocalBackupPasswordPreferenceController.java 0 → 100644 +85 −0 Original line number Diff line number Diff line /* * 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.development; import android.app.backup.IBackupManager; import android.content.Context; import android.os.RemoteException; import android.os.ServiceManager; import android.os.UserManager; import android.support.annotation.VisibleForTesting; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import com.android.settings.R; public class LocalBackupPasswordPreferenceController extends DeveloperOptionsPreferenceController { private static final String LOCAL_BACKUP_PASSWORD = "local_backup_password"; private final UserManager mUserManager; private final IBackupManager mBackupManager; public LocalBackupPasswordPreferenceController(Context context) { super(context); mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE); mBackupManager = IBackupManager.Stub.asInterface( ServiceManager.getService(Context.BACKUP_SERVICE)); } @Override public String getPreferenceKey() { return LOCAL_BACKUP_PASSWORD; } @Override public void updateState(Preference preference) { updatePasswordSummary(preference); } @Override protected void onDeveloperOptionsSwitchEnabled() { // intentional no-op } @Override protected void onDeveloperOptionsSwitchDisabled() { // intentional no-op } private void updatePasswordSummary(Preference preference) { preference.setEnabled(isAdminUser() && mBackupManager != null); if (mBackupManager == null) { return; } try { if (mBackupManager.hasBackupPassword()) { preference.setSummary(R.string.local_backup_password_summary_change); } else { preference.setSummary(R.string.local_backup_password_summary_none); } } catch (RemoteException e) { // Not much we can do here } } @VisibleForTesting boolean isAdminUser() { return mUserManager.isAdminUser(); } }
tests/robotests/src/com/android/settings/development/LocalBackupPasswordPreferenceControllerTest.java 0 → 100644 +120 −0 Original line number Diff line number Diff line package com.android.settings.development; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.app.backup.IBackupManager; import android.content.Context; import android.os.RemoteException; import android.os.UserManager; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.TestConfig; import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import org.robolectric.util.ReflectionHelpers; @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class LocalBackupPasswordPreferenceControllerTest { @Mock private Preference mPreference; @Mock private PreferenceScreen mScreen; @Mock private UserManager mUserManager; @Mock private IBackupManager mBackupManager; private Context mContext; private LocalBackupPasswordPreferenceController mController; @Before public void setup() { MockitoAnnotations.initMocks(this); mContext = RuntimeEnvironment.application; mController = spy(new LocalBackupPasswordPreferenceController(mContext)); ReflectionHelpers.setField(mController, "mUserManager", mUserManager); when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn( mPreference); } @Test public void updateState_hasBackupPassword_preferenceShouldHavePasswordSetSummary() throws RemoteException { ReflectionHelpers.setField(mController, "mBackupManager", mBackupManager); doReturn(true).when(mController).isAdminUser(); when(mBackupManager.hasBackupPassword()).thenReturn(true); mController.displayPreference(mScreen); mController.updateState(mPreference); verify(mPreference).setSummary(R.string.local_backup_password_summary_change); } @Test public void updateState_noBackupPassword_preferenceShouldHaveNoPasswordSetSummary() throws RemoteException { ReflectionHelpers.setField(mController, "mBackupManager", mBackupManager); doReturn(true).when(mController).isAdminUser(); when(mBackupManager.hasBackupPassword()).thenReturn(false); mController.displayPreference(mScreen); mController.updateState(mPreference); verify(mPreference).setSummary(R.string.local_backup_password_summary_none); } @Test public void updateState_backupManagerIsNull_shouldDisablePreference() throws RemoteException { ReflectionHelpers.setField(mController, "mBackupManager", null); doReturn(true).when(mController).isAdminUser(); when(mBackupManager.hasBackupPassword()).thenReturn(true); mController.displayPreference(mScreen); mController.updateState(mPreference); verify(mPreference).setEnabled(false); verify(mPreference, never()).setSummary(any()); } @Test public void updateState_backupManagerIsNotNullAndNotAdminUser_shouldDisablePreference() throws RemoteException { ReflectionHelpers.setField(mController, "mBackupManager", mBackupManager); doReturn(false).when(mController).isAdminUser(); when(mBackupManager.hasBackupPassword()).thenReturn(true); mController.updateState(mPreference); verify(mPreference).setEnabled(false); verify(mPreference, never()).setSummary(any()); } @Test public void updateState_backupManagerIsNotNullAndAdminUser_shouldEnablePreference() throws RemoteException { ReflectionHelpers.setField(mController, "mBackupManager", mBackupManager); doReturn(true).when(mController).isAdminUser(); when(mBackupManager.hasBackupPassword()).thenReturn(true); mController.updateState(mPreference); verify(mPreference).setEnabled(true); verify(mPreference, never()).setSummary(any()); } }