MasterSwitchPreferenceTest.java revision 6467d2027e8fefd646af03c08d51d91386843463
11432cb852972daedd6c2fde78abb769b722fc47dDoris Ling/* 21432cb852972daedd6c2fde78abb769b722fc47dDoris Ling * Copyright (C) 2017 The Android Open Source Project 31432cb852972daedd6c2fde78abb769b722fc47dDoris Ling * 41432cb852972daedd6c2fde78abb769b722fc47dDoris Ling * Licensed under the Apache License, Version 2.0 (the "License"); 51432cb852972daedd6c2fde78abb769b722fc47dDoris Ling * you may not use this file except in compliance with the License. 61432cb852972daedd6c2fde78abb769b722fc47dDoris Ling * You may obtain a copy of the License at 71432cb852972daedd6c2fde78abb769b722fc47dDoris Ling * 81432cb852972daedd6c2fde78abb769b722fc47dDoris Ling * http://www.apache.org/licenses/LICENSE-2.0 91432cb852972daedd6c2fde78abb769b722fc47dDoris Ling * 101432cb852972daedd6c2fde78abb769b722fc47dDoris Ling * Unless required by applicable law or agreed to in writing, software 111432cb852972daedd6c2fde78abb769b722fc47dDoris Ling * distributed under the License is distributed on an "AS IS" BASIS, 121432cb852972daedd6c2fde78abb769b722fc47dDoris Ling * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131432cb852972daedd6c2fde78abb769b722fc47dDoris Ling * See the License for the specific language governing permissions and 141432cb852972daedd6c2fde78abb769b722fc47dDoris Ling * limitations under the License. 151432cb852972daedd6c2fde78abb769b722fc47dDoris Ling */ 161432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 171432cb852972daedd6c2fde78abb769b722fc47dDoris Lingpackage com.android.settings.widget; 181432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 191432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport android.content.Context; 201432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport android.support.v7.preference.Preference; 211432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport android.support.v7.preference.PreferenceViewHolder; 221432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport android.support.v7.preference.Preference.OnPreferenceChangeListener; 231432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport android.view.LayoutInflater; 246467d2027e8fefd646af03c08d51d91386843463Doris Lingimport android.view.View; 256467d2027e8fefd646af03c08d51d91386843463Doris Lingimport android.view.View.OnClickListener; 261432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport android.widget.CompoundButton.OnCheckedChangeListener; 276467d2027e8fefd646af03c08d51d91386843463Doris Lingimport android.widget.LinearLayout; 281432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport android.widget.Switch; 291432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 301432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport com.android.settings.R; 311432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport com.android.settings.SettingsRobolectricTestRunner; 321432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport com.android.settings.TestConfig; 33c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Lingimport com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; 341432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 351432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport org.junit.Before; 361432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport org.junit.Test; 371432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport org.junit.runner.RunWith; 381432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport org.robolectric.annotation.Config; 391432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport org.robolectric.shadows.ShadowApplication; 401432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 411432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport static com.google.common.truth.Truth.assertThat; 421432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport static org.mockito.Matchers.any; 431432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport static org.mockito.Matchers.eq; 441432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport static org.mockito.Mockito.mock; 451432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport static org.mockito.Mockito.spy; 461432cb852972daedd6c2fde78abb769b722fc47dDoris Lingimport static org.mockito.Mockito.verify; 471432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 481432cb852972daedd6c2fde78abb769b722fc47dDoris Ling@RunWith(SettingsRobolectricTestRunner.class) 491432cb852972daedd6c2fde78abb769b722fc47dDoris Ling@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) 501432cb852972daedd6c2fde78abb769b722fc47dDoris Lingpublic class MasterSwitchPreferenceTest { 511432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 521432cb852972daedd6c2fde78abb769b722fc47dDoris Ling private Context mContext; 531432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 541432cb852972daedd6c2fde78abb769b722fc47dDoris Ling @Before 551432cb852972daedd6c2fde78abb769b722fc47dDoris Ling public void setUp() { 561432cb852972daedd6c2fde78abb769b722fc47dDoris Ling mContext = ShadowApplication.getInstance().getApplicationContext(); 571432cb852972daedd6c2fde78abb769b722fc47dDoris Ling } 581432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 591432cb852972daedd6c2fde78abb769b722fc47dDoris Ling @Test 601432cb852972daedd6c2fde78abb769b722fc47dDoris Ling public void createNewPreference_shouldSetLayout() { 611432cb852972daedd6c2fde78abb769b722fc47dDoris Ling final MasterSwitchPreference preference = new MasterSwitchPreference(mContext); 621432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 631432cb852972daedd6c2fde78abb769b722fc47dDoris Ling assertThat(preference.getWidgetLayoutResource()).isEqualTo( 641432cb852972daedd6c2fde78abb769b722fc47dDoris Ling R.layout.preference_widget_master_switch); 651432cb852972daedd6c2fde78abb769b722fc47dDoris Ling } 661432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 671432cb852972daedd6c2fde78abb769b722fc47dDoris Ling @Test 681432cb852972daedd6c2fde78abb769b722fc47dDoris Ling public void setChecked_shouldUpdateButtonCheckedState() { 691432cb852972daedd6c2fde78abb769b722fc47dDoris Ling final MasterSwitchPreference preference = new MasterSwitchPreference(mContext); 701432cb852972daedd6c2fde78abb769b722fc47dDoris Ling final PreferenceViewHolder holder = new PreferenceViewHolder(LayoutInflater.from(mContext) 711432cb852972daedd6c2fde78abb769b722fc47dDoris Ling .inflate(R.layout.preference_widget_master_switch, null)); 721432cb852972daedd6c2fde78abb769b722fc47dDoris Ling final Switch toggle = (Switch) holder.itemView.findViewById(R.id.switchWidget); 731432cb852972daedd6c2fde78abb769b722fc47dDoris Ling preference.onBindViewHolder(holder); 741432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 751432cb852972daedd6c2fde78abb769b722fc47dDoris Ling preference.setChecked(true); 761432cb852972daedd6c2fde78abb769b722fc47dDoris Ling assertThat(toggle.isChecked()).isTrue(); 771432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 781432cb852972daedd6c2fde78abb769b722fc47dDoris Ling preference.setChecked(false); 791432cb852972daedd6c2fde78abb769b722fc47dDoris Ling assertThat(toggle.isChecked()).isFalse(); 801432cb852972daedd6c2fde78abb769b722fc47dDoris Ling } 811432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 821432cb852972daedd6c2fde78abb769b722fc47dDoris Ling @Test 831432cb852972daedd6c2fde78abb769b722fc47dDoris Ling public void setSwitchEnabled_shouldUpdateButtonEnabledState() { 841432cb852972daedd6c2fde78abb769b722fc47dDoris Ling final MasterSwitchPreference preference = new MasterSwitchPreference(mContext); 851432cb852972daedd6c2fde78abb769b722fc47dDoris Ling final PreferenceViewHolder holder = new PreferenceViewHolder( 861432cb852972daedd6c2fde78abb769b722fc47dDoris Ling LayoutInflater.from(mContext).inflate(R.layout.preference_widget_master_switch, null)); 871432cb852972daedd6c2fde78abb769b722fc47dDoris Ling final Switch toggle = (Switch) holder.itemView.findViewById(R.id.switchWidget); 881432cb852972daedd6c2fde78abb769b722fc47dDoris Ling preference.onBindViewHolder(holder); 891432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 901432cb852972daedd6c2fde78abb769b722fc47dDoris Ling preference.setSwitchEnabled(true); 911432cb852972daedd6c2fde78abb769b722fc47dDoris Ling assertThat(toggle.isEnabled()).isTrue(); 921432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 931432cb852972daedd6c2fde78abb769b722fc47dDoris Ling preference.setSwitchEnabled(false); 941432cb852972daedd6c2fde78abb769b722fc47dDoris Ling assertThat(toggle.isEnabled()).isFalse(); 951432cb852972daedd6c2fde78abb769b722fc47dDoris Ling } 961432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 971432cb852972daedd6c2fde78abb769b722fc47dDoris Ling @Test 986467d2027e8fefd646af03c08d51d91386843463Doris Ling public void clickWidgetView_shouldToggleButton() { 991432cb852972daedd6c2fde78abb769b722fc47dDoris Ling final MasterSwitchPreference preference = new MasterSwitchPreference(mContext); 1006467d2027e8fefd646af03c08d51d91386843463Doris Ling final LayoutInflater inflater = LayoutInflater.from(mContext); 1011432cb852972daedd6c2fde78abb769b722fc47dDoris Ling final PreferenceViewHolder holder = new PreferenceViewHolder( 1026467d2027e8fefd646af03c08d51d91386843463Doris Ling inflater.inflate(R.layout.preference_master_switch, null)); 1036467d2027e8fefd646af03c08d51d91386843463Doris Ling final LinearLayout widgetView = holder.itemView.findViewById(android.R.id.widget_frame); 1046467d2027e8fefd646af03c08d51d91386843463Doris Ling inflater.inflate(R.layout.preference_widget_master_switch, widgetView, true); 1051432cb852972daedd6c2fde78abb769b722fc47dDoris Ling final Switch toggle = (Switch) holder.itemView.findViewById(R.id.switchWidget); 1061432cb852972daedd6c2fde78abb769b722fc47dDoris Ling preference.onBindViewHolder(holder); 1071432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 1086467d2027e8fefd646af03c08d51d91386843463Doris Ling widgetView.performClick(); 1096467d2027e8fefd646af03c08d51d91386843463Doris Ling assertThat(toggle.isChecked()).isTrue(); 1106467d2027e8fefd646af03c08d51d91386843463Doris Ling 1116467d2027e8fefd646af03c08d51d91386843463Doris Ling widgetView.performClick(); 1126467d2027e8fefd646af03c08d51d91386843463Doris Ling assertThat(toggle.isChecked()).isFalse(); 1131432cb852972daedd6c2fde78abb769b722fc47dDoris Ling } 1141432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 1151432cb852972daedd6c2fde78abb769b722fc47dDoris Ling @Test 1166467d2027e8fefd646af03c08d51d91386843463Doris Ling public void clickWidgetView_shouldNotifyPreferenceChanged() { 1171432cb852972daedd6c2fde78abb769b722fc47dDoris Ling final MasterSwitchPreference preference = new MasterSwitchPreference(mContext); 1181432cb852972daedd6c2fde78abb769b722fc47dDoris Ling final PreferenceViewHolder holder = new PreferenceViewHolder( 1196467d2027e8fefd646af03c08d51d91386843463Doris Ling LayoutInflater.from(mContext).inflate(R.layout.preference_master_switch, null)); 1206467d2027e8fefd646af03c08d51d91386843463Doris Ling final View widgetView = holder.itemView.findViewById(android.R.id.widget_frame); 1211432cb852972daedd6c2fde78abb769b722fc47dDoris Ling final OnPreferenceChangeListener listener = mock(OnPreferenceChangeListener.class); 1221432cb852972daedd6c2fde78abb769b722fc47dDoris Ling preference.setOnPreferenceChangeListener(listener); 1231432cb852972daedd6c2fde78abb769b722fc47dDoris Ling preference.onBindViewHolder(holder); 1241432cb852972daedd6c2fde78abb769b722fc47dDoris Ling 1256467d2027e8fefd646af03c08d51d91386843463Doris Ling preference.setChecked(false); 1266467d2027e8fefd646af03c08d51d91386843463Doris Ling widgetView.performClick(); 1276467d2027e8fefd646af03c08d51d91386843463Doris Ling verify(listener).onPreferenceChange(preference, true); 1286467d2027e8fefd646af03c08d51d91386843463Doris Ling 1296467d2027e8fefd646af03c08d51d91386843463Doris Ling preference.setChecked(true); 1306467d2027e8fefd646af03c08d51d91386843463Doris Ling widgetView.performClick(); 1311432cb852972daedd6c2fde78abb769b722fc47dDoris Ling verify(listener).onPreferenceChange(preference, false); 1321432cb852972daedd6c2fde78abb769b722fc47dDoris Ling } 133c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling 134c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling @Test 135c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling public void setDisabledByAdmin_hasEnforcedAdmin_shouldDisableButton() { 136c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling final MasterSwitchPreference preference = new MasterSwitchPreference(mContext); 137c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling final PreferenceViewHolder holder = new PreferenceViewHolder( 138c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling LayoutInflater.from(mContext).inflate(R.layout.preference_widget_master_switch, null)); 139c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling final Switch toggle = (Switch) holder.itemView.findViewById(R.id.switchWidget); 140c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling toggle.setEnabled(true); 141c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling preference.onBindViewHolder(holder); 142c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling 143c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling preference.setDisabledByAdmin(mock(EnforcedAdmin.class)); 144c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling assertThat(toggle.isEnabled()).isFalse(); 145c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling } 146c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling 147c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling @Test 1486467d2027e8fefd646af03c08d51d91386843463Doris Ling public void setDisabledByAdmin_noEnforcedAdmin_shouldEnableButton() { 149c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling final MasterSwitchPreference preference = new MasterSwitchPreference(mContext); 150c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling final PreferenceViewHolder holder = new PreferenceViewHolder( 151c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling LayoutInflater.from(mContext).inflate(R.layout.preference_widget_master_switch, null)); 152c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling final Switch toggle = (Switch) holder.itemView.findViewById(R.id.switchWidget); 153c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling toggle.setEnabled(false); 154c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling preference.onBindViewHolder(holder); 155c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling 156c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling preference.setDisabledByAdmin(null); 157c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling assertThat(toggle.isEnabled()).isTrue(); 158c4c9f4d50eec659eb50f8ed671c27d8c6ef0c924Doris Ling } 1591432cb852972daedd6c2fde78abb769b722fc47dDoris Ling} 160