1ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler/* 2ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler * Copyright (C) 2017 The Android Open Source Project 3ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler * 4ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler * Licensed under the Apache License, Version 2.0 (the "License"); 5ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler * you may not use this file except in compliance with the License. 6ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler * You may obtain a copy of the License at 7ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler * 8ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler * http://www.apache.org/licenses/LICENSE-2.0 9ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler * 10ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler * Unless required by applicable law or agreed to in writing, software 11ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler * distributed under the License is distributed on an "AS IS" BASIS, 12ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler * See the License for the specific language governing permissions and 14ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler * limitations under the License. 15ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler */ 16ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler 17ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantlerpackage com.android.settingslib.development; 18ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler 19ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantlerimport static com.google.common.truth.Truth.assertThat; 20ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantlerimport static org.mockito.Answers.RETURNS_DEEP_STUBS; 214ac34c4a87ab1387d759f90812eee89680bf2154jeffreyhuangimport static org.mockito.Mockito.doReturn; 22ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantlerimport static org.mockito.Mockito.spy; 23ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantlerimport static org.mockito.Mockito.when; 24ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler 25ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantlerimport android.content.Context; 26ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantlerimport android.content.pm.PackageManager; 27ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantlerimport android.os.UserManager; 28ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantlerimport android.provider.Settings; 29ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantlerimport android.support.v14.preference.SwitchPreference; 30ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantlerimport android.support.v7.preference.Preference; 31ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantlerimport android.support.v7.preference.PreferenceScreen; 32ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler 334ca9ebd5d355b72eb6076b5cce68968ea9d794c3Tony Mantlerimport com.android.settingslib.SettingsLibRobolectricTestRunner; 34ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler 35ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantlerimport org.junit.Before; 36ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantlerimport org.junit.Test; 37ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantlerimport org.junit.runner.RunWith; 38ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantlerimport org.mockito.Mock; 39ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantlerimport org.mockito.MockitoAnnotations; 40ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantlerimport org.robolectric.shadows.ShadowApplication; 41ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler 424ca9ebd5d355b72eb6076b5cce68968ea9d794c3Tony Mantler@RunWith(SettingsLibRobolectricTestRunner.class) 43ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantlerpublic class EnableAdbPreferenceControllerTest { 44ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler @Mock(answer = RETURNS_DEEP_STUBS) 45ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler private PreferenceScreen mScreen; 46ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler @Mock 47ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler private UserManager mUserManager; 48ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler @Mock 49ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler private PackageManager mPackageManager; 50ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler 51ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler private Context mContext; 52ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler private SwitchPreference mPreference; 53ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler private ConcreteEnableAdbPreferenceController mController; 54ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler 55ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler @Before 56ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler public void setUp() { 57ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler MockitoAnnotations.initMocks(this); 58ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler ShadowApplication shadowContext = ShadowApplication.getInstance(); 59ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler shadowContext.setSystemService(Context.USER_SERVICE, mUserManager); 60ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler mContext = spy(shadowContext.getApplicationContext()); 61ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler when(mContext.getPackageManager()).thenReturn(mPackageManager); 62ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler mController = new ConcreteEnableAdbPreferenceController(mContext); 637293cf44ba3a2cb7be4a47790d31aa294d86609fFan Zhang mPreference = new SwitchPreference(mContext); 64ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler mPreference.setKey(mController.getPreferenceKey()); 657293cf44ba3a2cb7be4a47790d31aa294d86609fFan Zhang when(mScreen.findPreference(mPreference.getKey())).thenReturn(mPreference); 66ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler } 67ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler 68ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler @Test 69ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler public void displayPreference_isNotAdmin_shouldRemovePreference() { 70ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler when(mUserManager.isAdminUser()).thenReturn(false); 71ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler 72ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler mController.displayPreference(mScreen); 73ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler 747293cf44ba3a2cb7be4a47790d31aa294d86609fFan Zhang assertThat(mPreference.isVisible()).isFalse(); 75ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler } 76ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler 77ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler @Test 78ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler public void displayPreference_isAdmin_shouldNotRemovePreference() { 79ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler when(mUserManager.isAdminUser()).thenReturn(true); 80ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler 81ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler mController.displayPreference(mScreen); 82ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler 837293cf44ba3a2cb7be4a47790d31aa294d86609fFan Zhang assertThat(mPreference.isVisible()).isTrue(); 84ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler } 85ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler 86ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler 87ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler @Test 88ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler public void resetPreference_shouldUncheck() { 89ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler when(mUserManager.isAdminUser()).thenReturn(true); 90ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler mController.displayPreference(mScreen); 91ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler mPreference.setChecked(true); 92ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler 93ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler mController.resetPreference(); 94ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler 95ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler assertThat(mPreference.isChecked()).isFalse(); 96ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler } 97ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler 98ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler @Test 99ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler public void handlePreferenceTreeClick_shouldUpdateSettings() { 100ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler when(mUserManager.isAdminUser()).thenReturn(true); 101ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler Settings.Secure.putInt(mContext.getContentResolver(), 102ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler Settings.Global.ADB_ENABLED, 1); 103ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler mPreference.setChecked(true); 104ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler mController.displayPreference(mScreen); 105ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler 106ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler mController.handlePreferenceTreeClick(mPreference); 107ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler 108ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler assertThat(Settings.Secure.getInt(mContext.getContentResolver(), 109ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler Settings.Global.ADB_ENABLED, 0)).isEqualTo(0); 110ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler } 111ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler 112ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler @Test 1134ac34c4a87ab1387d759f90812eee89680bf2154jeffreyhuang public void handlePreferenceTreeClick_isMonkeyUser_shouldBeFalse() { 1144ac34c4a87ab1387d759f90812eee89680bf2154jeffreyhuang mController = spy(mController); 1154ac34c4a87ab1387d759f90812eee89680bf2154jeffreyhuang doReturn(true).when(mController).isUserAMonkey(); 1164ac34c4a87ab1387d759f90812eee89680bf2154jeffreyhuang when(mUserManager.isAdminUser()).thenReturn(true); 1174ac34c4a87ab1387d759f90812eee89680bf2154jeffreyhuang mController.displayPreference(mScreen); 1184ac34c4a87ab1387d759f90812eee89680bf2154jeffreyhuang 1194ac34c4a87ab1387d759f90812eee89680bf2154jeffreyhuang final boolean handled = mController.handlePreferenceTreeClick(mPreference); 1204ac34c4a87ab1387d759f90812eee89680bf2154jeffreyhuang 1214ac34c4a87ab1387d759f90812eee89680bf2154jeffreyhuang assertThat(handled).isFalse(); 1224ac34c4a87ab1387d759f90812eee89680bf2154jeffreyhuang } 1234ac34c4a87ab1387d759f90812eee89680bf2154jeffreyhuang 1244ac34c4a87ab1387d759f90812eee89680bf2154jeffreyhuang @Test 125ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler public void updateState_settingsOn_shouldCheck() { 126ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler when(mUserManager.isAdminUser()).thenReturn(true); 127ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler Settings.Secure.putInt(mContext.getContentResolver(), 128ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler Settings.Global.ADB_ENABLED, 1); 129ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler mPreference.setChecked(false); 130ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler mController.displayPreference(mScreen); 131ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler 132ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler mController.updateState(mPreference); 133ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler 134ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler assertThat(mPreference.isChecked()).isTrue(); 135ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler } 136ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler 137ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler @Test 138ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler public void updateState_settingsOff_shouldUncheck() { 139ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler when(mUserManager.isAdminUser()).thenReturn(true); 140ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler Settings.Secure.putInt(mContext.getContentResolver(), 141ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler Settings.Global.ADB_ENABLED, 0); 142ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler mPreference.setChecked(true); 143ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler mController.displayPreference(mScreen); 144ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler 145ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler mController.updateState(mPreference); 146ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler 147ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler assertThat(mPreference.isChecked()).isFalse(); 148ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler } 149ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler 150ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler class ConcreteEnableAdbPreferenceController extends AbstractEnableAdbPreferenceController { 151ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler public ConcreteEnableAdbPreferenceController(Context context) { 152ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler super(context); 153ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler } 154ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler 155ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler @Override 156265e7fbcc30d507fa1670353f5c7ca24c60cf1c7Tony Mantler public void showConfirmationDialog(Preference preference) { 157ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler // Don't show a dialog, just set setting. 158ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler writeAdbSetting(true); 159ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler } 160265e7fbcc30d507fa1670353f5c7ca24c60cf1c7Tony Mantler 161265e7fbcc30d507fa1670353f5c7ca24c60cf1c7Tony Mantler @Override 162265e7fbcc30d507fa1670353f5c7ca24c60cf1c7Tony Mantler public boolean isConfirmationDialogShowing() { 163265e7fbcc30d507fa1670353f5c7ca24c60cf1c7Tony Mantler return false; 164265e7fbcc30d507fa1670353f5c7ca24c60cf1c7Tony Mantler } 165265e7fbcc30d507fa1670353f5c7ca24c60cf1c7Tony Mantler 166265e7fbcc30d507fa1670353f5c7ca24c60cf1c7Tony Mantler @Override 1674ac34c4a87ab1387d759f90812eee89680bf2154jeffreyhuang public void dismissConfirmationDialog() { 1684ac34c4a87ab1387d759f90812eee89680bf2154jeffreyhuang } 169ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler } 170ec4bae9d862b07493e19b2bc82ecfa7d5cb6f4e1Tony Mantler} 171