From 7ae0b641ddd8cff4fd51a698be9fc9cef4445320 Mon Sep 17 00:00:00 2001 From: menghanli Date: Tue, 19 Apr 2022 08:11:34 +0800 Subject: [PATCH] Fix transparency seekbar is enabled while fade feature is disabled. Root cause: Show default status until setting key changed. It does not show latest status when created. Solution: Update the status when created. Bug: 229566130 Test: make RunSettingsRoboTests ROBOTEST_FILTER=FloatingMenuTransparencyPreferenceControllerTest Change-Id: Ia25fe5cec0444c1771e8ce31aae2a4cb3b0405a1 --- ...gMenuTransparencyPreferenceController.java | 5 +- ...uTransparencyPreferenceControllerTest.java | 68 ++++++++++++++++++- 2 files changed, 67 insertions(+), 6 deletions(-) diff --git a/src/com/android/settings/accessibility/FloatingMenuTransparencyPreferenceController.java b/src/com/android/settings/accessibility/FloatingMenuTransparencyPreferenceController.java index 894d3aea2d4..9f698f20874 100644 --- a/src/com/android/settings/accessibility/FloatingMenuTransparencyPreferenceController.java +++ b/src/com/android/settings/accessibility/FloatingMenuTransparencyPreferenceController.java @@ -51,9 +51,7 @@ public class FloatingMenuTransparencyPreferenceController extends SliderPreferen private final ContentResolver mContentResolver; @VisibleForTesting final ContentObserver mContentObserver; - - @VisibleForTesting - SeekBarPreference mPreference; + private SeekBarPreference mPreference; public FloatingMenuTransparencyPreferenceController(Context context, String preferenceKey) { @@ -83,6 +81,7 @@ public class FloatingMenuTransparencyPreferenceController extends SliderPreferen mPreference.setMin(getMin()); mPreference.setHapticFeedbackMode(SeekBarPreference.HAPTIC_FEEDBACK_MODE_ON_ENDS); + updateAvailabilityStatus(); updateState(mPreference); } diff --git a/tests/robotests/src/com/android/settings/accessibility/FloatingMenuTransparencyPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/FloatingMenuTransparencyPreferenceControllerTest.java index 55637cd137d..eceb185151c 100644 --- a/tests/robotests/src/com/android/settings/accessibility/FloatingMenuTransparencyPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/accessibility/FloatingMenuTransparencyPreferenceControllerTest.java @@ -27,6 +27,7 @@ import static com.android.settings.core.BasePreferenceController.DISABLED_DEPEND import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -34,6 +35,7 @@ import android.content.ContentResolver; import android.content.Context; import android.provider.Settings; +import androidx.preference.PreferenceScreen; import androidx.test.core.app.ApplicationProvider; import com.android.settings.widget.SeekBarPreference; @@ -60,11 +62,18 @@ public class FloatingMenuTransparencyPreferenceControllerTest { @Mock private ContentResolver mContentResolver; private FloatingMenuTransparencyPreferenceController mController; + private SeekBarPreference mSeekBarPreference; + + @Mock + private PreferenceScreen mScreen; @Before public void setUp() { when(mContext.getContentResolver()).thenReturn(mContentResolver); mController = new FloatingMenuTransparencyPreferenceController(mContext, "test_key"); + + mSeekBarPreference = new SeekBarPreference(mContext); + doReturn(mSeekBarPreference).when(mScreen).findPreference("test_key"); } @Test @@ -84,14 +93,67 @@ public class FloatingMenuTransparencyPreferenceControllerTest { } @Test - public void onChange_a11yBtnModeChangeToNavigationBar_preferenceDisabled() { - mController.mPreference = new SeekBarPreference(mContext); + public void displayPreference_floatingMenuMode_fadeEnabled_preferenceEnabled() { + Settings.Secure.putInt(mContentResolver, Settings.Secure.ACCESSIBILITY_BUTTON_MODE, + ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU); + Settings.Secure.putInt(mContentResolver, + Settings.Secure.ACCESSIBILITY_FLOATING_MENU_FADE_ENABLED, /* ON */ 1); + + mController.displayPreference(mScreen); + + assertThat(mSeekBarPreference.isEnabled()).isTrue(); + } + + @Test + public void displayPreference_floatingMenuMode_fadeDisabled_preferenceDisabled() { + Settings.Secure.putInt(mContentResolver, Settings.Secure.ACCESSIBILITY_BUTTON_MODE, + ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU); + Settings.Secure.putInt(mContentResolver, + Settings.Secure.ACCESSIBILITY_FLOATING_MENU_FADE_ENABLED, /* OFF */ 0); + + mController.displayPreference(mScreen); + + assertThat(mSeekBarPreference.isEnabled()).isFalse(); + } + + @Test + public void displayPreference_navigationBarMode_preferenceDisabled() { Settings.Secure.putInt(mContentResolver, Settings.Secure.ACCESSIBILITY_BUTTON_MODE, ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR); + mController.displayPreference(mScreen); + + assertThat(mSeekBarPreference.isEnabled()).isFalse(); + } + + @Test + public void onChange_floatingMenuModeChangeToNavigationBar_preferenceDisabled() { + Settings.Secure.putInt(mContentResolver, Settings.Secure.ACCESSIBILITY_BUTTON_MODE, + ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU); + Settings.Secure.putInt(mContentResolver, + Settings.Secure.ACCESSIBILITY_FLOATING_MENU_FADE_ENABLED, /* ON */ 1); + mController.displayPreference(mScreen); + + Settings.Secure.putInt(mContentResolver, Settings.Secure.ACCESSIBILITY_BUTTON_MODE, + ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR); mController.mContentObserver.onChange(false); - assertThat(mController.mPreference.isEnabled()).isFalse(); + assertThat(mSeekBarPreference.isEnabled()).isFalse(); + } + + @Test + public void onChange_navigationBarModeChangeToFloatingMenu_preferenceDisabled() { + Settings.Secure.putInt(mContentResolver, Settings.Secure.ACCESSIBILITY_BUTTON_MODE, + ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR); + Settings.Secure.putInt(mContentResolver, + Settings.Secure.ACCESSIBILITY_FLOATING_MENU_FADE_ENABLED, /* ON */ 1); + mController.displayPreference(mScreen); + + Settings.Secure.putInt(mContentResolver, Settings.Secure.ACCESSIBILITY_BUTTON_MODE, + ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU); + mController.mContentObserver.onChange(false); + + assertThat(mSeekBarPreference.isEnabled()).isTrue(); } @Test