1 /* 2 * Copyright (C) 2022 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.settings.accessibility; 18 19 import static com.android.settings.accessibility.FontWeightAdjustmentPreferenceController.BOLD_TEXT_ADJUSTMENT; 20 21 import static com.google.common.truth.Truth.assertThat; 22 23 import static org.mockito.Mockito.doReturn; 24 import static org.mockito.Mockito.mock; 25 import static org.mockito.Mockito.spy; 26 import static org.mockito.Mockito.verify; 27 import static org.mockito.Mockito.when; 28 29 import android.app.settings.SettingsEnums; 30 import android.content.Context; 31 import android.content.DialogInterface; 32 import android.provider.Settings; 33 34 import androidx.appcompat.app.AlertDialog; 35 import androidx.fragment.app.FragmentActivity; 36 import androidx.preference.PreferenceManager; 37 import androidx.test.core.app.ApplicationProvider; 38 39 import com.android.settings.R; 40 import com.android.settings.accessibility.AccessibilityDialogUtils.DialogEnums; 41 import com.android.settings.accessibility.TextReadingResetController.ResetStateListener; 42 import com.android.settings.testutils.XmlTestUtils; 43 import com.android.settings.utils.ActivityControllerWrapper; 44 45 import org.junit.Before; 46 import org.junit.Ignore; 47 import org.junit.Rule; 48 import org.junit.Test; 49 import org.junit.runner.RunWith; 50 import org.mockito.Answers; 51 import org.mockito.Mock; 52 import org.mockito.junit.MockitoJUnit; 53 import org.mockito.junit.MockitoRule; 54 import org.robolectric.Robolectric; 55 import org.robolectric.RobolectricTestRunner; 56 import org.robolectric.shadows.ShadowToast; 57 58 import java.util.ArrayList; 59 import java.util.Arrays; 60 import java.util.List; 61 62 /** Tests for {@link TextReadingPreferenceFragment}. */ 63 @RunWith(RobolectricTestRunner.class) 64 public class TextReadingPreferenceFragmentTest { 65 66 @Rule 67 public final MockitoRule mMockito = MockitoJUnit.rule(); 68 @Mock(answer = Answers.RETURNS_DEEP_STUBS) 69 private PreferenceManager mPreferenceManager; 70 private Context mContext = ApplicationProvider.getApplicationContext(); 71 private TextReadingPreferenceFragment mFragment; 72 73 @Before setUp()74 public void setUp() { 75 mContext.setTheme(R.style.Theme_AppCompat); 76 77 mFragment = spy(new TextReadingPreferenceFragment()); 78 when(mFragment.getPreferenceManager()).thenReturn(mPreferenceManager); 79 when(mFragment.getPreferenceManager().getContext()).thenReturn(mContext); 80 when(mFragment.getContext()).thenReturn(mContext); 81 when(mFragment.getActivity()).thenReturn((FragmentActivity) 82 ActivityControllerWrapper.setup(Robolectric.buildActivity( 83 FragmentActivity.class)).get()); 84 85 // Avoid a NPE is happened in ShadowWindowManagerGlobal 86 doReturn(mock(DisplaySizeData.class)).when(mFragment).createDisplaySizeData(mContext); 87 mFragment.createPreferenceControllers(mContext); 88 } 89 90 @Test onDialogPositiveButtonClicked_boldTextEnabled_needResetSettings()91 public void onDialogPositiveButtonClicked_boldTextEnabled_needResetSettings() { 92 Settings.Secure.putInt(mContext.getContentResolver(), 93 Settings.Secure.FONT_WEIGHT_ADJUSTMENT, BOLD_TEXT_ADJUSTMENT); 94 final AlertDialog dialog = (AlertDialog) mFragment.onCreateDialog( 95 DialogEnums.DIALOG_RESET_SETTINGS); 96 dialog.show(); 97 98 dialog.getButton(DialogInterface.BUTTON_POSITIVE).callOnClick(); 99 100 assertThat(mFragment.mNeedResetSettings).isTrue(); 101 } 102 103 @Test onDialogPositiveButtonClicked_boldTextDisabled_resetAllListeners()104 public void onDialogPositiveButtonClicked_boldTextDisabled_resetAllListeners() { 105 final ResetStateListener listener1 = mock(ResetStateListener.class); 106 final ResetStateListener listener2 = mock(ResetStateListener.class); 107 mFragment.mResetStateListeners = new ArrayList<>(Arrays.asList(listener1, listener2)); 108 final AlertDialog dialog = (AlertDialog) mFragment.onCreateDialog( 109 DialogEnums.DIALOG_RESET_SETTINGS); 110 dialog.show(); 111 112 dialog.getButton(DialogInterface.BUTTON_POSITIVE).callOnClick(); 113 114 verify(listener1).resetState(); 115 verify(listener2).resetState(); 116 } 117 118 @Test onDialogPositiveButtonClicked_boldTextEnabled_showToast()119 public void onDialogPositiveButtonClicked_boldTextEnabled_showToast() { 120 Settings.Secure.putInt(mContext.getContentResolver(), 121 Settings.Secure.FONT_WEIGHT_ADJUSTMENT, BOLD_TEXT_ADJUSTMENT); 122 final AlertDialog dialog = (AlertDialog) mFragment.onCreateDialog( 123 DialogEnums.DIALOG_RESET_SETTINGS); 124 dialog.show(); 125 126 dialog.getButton(DialogInterface.BUTTON_POSITIVE).callOnClick(); 127 128 assertThat(ShadowToast.getTextOfLatestToast()) 129 .isEqualTo(mContext.getString(R.string.accessibility_text_reading_reset_message)); 130 } 131 132 @Test getMetricsCategory_returnsCorrectCategory()133 public void getMetricsCategory_returnsCorrectCategory() { 134 assertThat(mFragment.getMetricsCategory()).isEqualTo( 135 SettingsEnums.ACCESSIBILITY_TEXT_READING_OPTIONS); 136 } 137 138 @Test getPreferenceScreenResId_returnsCorrectXml()139 public void getPreferenceScreenResId_returnsCorrectXml() { 140 assertThat(mFragment.getPreferenceScreenResId()).isEqualTo( 141 R.xml.accessibility_text_reading_options); 142 } 143 144 @Ignore 145 @Test getLogTag_returnsCorrectTag()146 public void getLogTag_returnsCorrectTag() { 147 assertThat(mFragment.getLogTag()).isEqualTo("TextReadingPreferenceFragment"); 148 } 149 150 @Test getNonIndexableKeys_existInXmlLayout()151 public void getNonIndexableKeys_existInXmlLayout() { 152 final List<String> niks = TextReadingPreferenceFragment.SEARCH_INDEX_DATA_PROVIDER 153 .getNonIndexableKeys(mContext); 154 final List<String> keys = 155 XmlTestUtils.getKeysFromPreferenceXml(mContext, 156 R.xml.accessibility_text_reading_options); 157 158 assertThat(keys).containsAtLeastElementsIn(niks); 159 } 160 } 161