From aaee157fddea04eec3ada38744197a8f1d45c7a6 Mon Sep 17 00:00:00 2001 From: menghanli Date: Thu, 7 Jul 2022 09:00:09 +0800 Subject: [PATCH] Fix extra dim turns on failed in setting search bar Root cause: Don't call displayPreference before setChecked called. Solution: Don't show quick settings tooltips if preference is not ready. Bug: 237850687 Bug: 244676175 Test: make RunSettingsRoboTests ROBOTEST_FILTER=AccessibilityQuickSettingsPrimarySwitchPreferenceControllerTest Change-Id: I52425190cce4ab3cf31be025a743bf8b212fa1f9 Merged-In: I52425190cce4ab3cf31be025a743bf8b212fa1f9 --- ...kSettingsPrimarySwitchPreferenceController.java | 5 +++++ ...tingsPrimarySwitchPreferenceControllerTest.java | 14 +++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/accessibility/AccessibilityQuickSettingsPrimarySwitchPreferenceController.java b/src/com/android/settings/accessibility/AccessibilityQuickSettingsPrimarySwitchPreferenceController.java index d272a0be49f..429fd9deca9 100644 --- a/src/com/android/settings/accessibility/AccessibilityQuickSettingsPrimarySwitchPreferenceController.java +++ b/src/com/android/settings/accessibility/AccessibilityQuickSettingsPrimarySwitchPreferenceController.java @@ -102,6 +102,11 @@ public abstract class AccessibilityQuickSettingsPrimarySwitchPreferenceControlle } private void showQuickSettingsTooltipIfNeeded() { + if (mPreference == null) { + // Returns if no preference found by slice highlight menu. + return; + } + final ComponentName tileComponentName = getTileComponentName(); if (tileComponentName == null) { // Returns if no tile service assigned. diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityQuickSettingsPrimarySwitchPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityQuickSettingsPrimarySwitchPreferenceControllerTest.java index 89c91209ffd..deab7453337 100644 --- a/tests/robotests/src/com/android/settings/accessibility/AccessibilityQuickSettingsPrimarySwitchPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityQuickSettingsPrimarySwitchPreferenceControllerTest.java @@ -118,18 +118,29 @@ public class AccessibilityQuickSettingsPrimarySwitchPreferenceControllerTest { mController = new TestAccessibilityQuickSettingsPrimarySwitchPreferenceController(mContext, TEST_KEY); when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference); - mController.displayPreference(mScreen); } @Test public void setChecked_showTooltipView() { + mController.displayPreference(mScreen); + mController.setChecked(true); assertThat(getLatestPopupWindow().isShowing()).isTrue(); } + @Test + public void setChecked_notCallDisplayPreference_notShowTooltipView() { + // Simulates the slice highlight menu that does not call {@link #displayPreference} before + // {@link #setChecked} called. + mController.setChecked(true); + + assertThat(getLatestPopupWindow()).isNull(); + } + @Test public void setChecked_tooltipViewShown_notShowTooltipView() { + mController.displayPreference(mScreen); mController.setChecked(true); getLatestPopupWindow().dismiss(); mController.setChecked(false); @@ -142,6 +153,7 @@ public class AccessibilityQuickSettingsPrimarySwitchPreferenceControllerTest { @Test @Config(shadows = ShadowFragment.class) public void restoreValueFromSavedInstanceState_showTooltipView() { + mController.displayPreference(mScreen); mController.setChecked(true); final Bundle savedInstanceState = new Bundle(); savedInstanceState.putBoolean(KEY_SAVED_QS_TOOLTIP_RESHOW, /* value= */ true);