diff --git a/packages/SystemUI/res/color/qs_dialog_btn_filled_background.xml b/packages/SystemUI/res/color/qs_dialog_btn_filled_background.xml new file mode 100644 index 0000000000000..40bab5ed08f25 --- /dev/null +++ b/packages/SystemUI/res/color/qs_dialog_btn_filled_background.xml @@ -0,0 +1,23 @@ + + + + + + \ No newline at end of file diff --git a/packages/SystemUI/res/color/qs_dialog_btn_filled_text_color.xml b/packages/SystemUI/res/color/qs_dialog_btn_filled_text_color.xml new file mode 100644 index 0000000000000..e76ad991a92c5 --- /dev/null +++ b/packages/SystemUI/res/color/qs_dialog_btn_filled_text_color.xml @@ -0,0 +1,23 @@ + + + + + + \ No newline at end of file diff --git a/packages/SystemUI/res/drawable/qs_dialog_btn_filled.xml b/packages/SystemUI/res/drawable/qs_dialog_btn_filled.xml index c4e45bf2c2237..9bc8b53b308eb 100644 --- a/packages/SystemUI/res/drawable/qs_dialog_btn_filled.xml +++ b/packages/SystemUI/res/drawable/qs_dialog_btn_filled.xml @@ -15,7 +15,6 @@ ~ limitations under the License. --> @@ -28,7 +27,7 @@ - + 28dp @drawable/qs_dialog_btn_filled - ?androidprv:attr/materialColorOnPrimary + @color/qs_dialog_btn_filled_text_color 14sp 20sp @*android:string/config_bodyFontFamilyMedium diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/fontscaling/FontScalingDialog.kt b/packages/SystemUI/src/com/android/systemui/accessibility/fontscaling/FontScalingDialog.kt index 783460c325fad..0ef256d411578 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/fontscaling/FontScalingDialog.kt +++ b/packages/SystemUI/src/com/android/systemui/accessibility/fontscaling/FontScalingDialog.kt @@ -145,6 +145,8 @@ class FontScalingDialog( */ @MainThread fun updateFontScaleDelayed(delayMsFromSource: Long) { + doneButton.isEnabled = false + var delayMs = delayMsFromSource if (systemClock.elapsedRealtime() - lastUpdateTime < MIN_UPDATE_INTERVAL_MS) { delayMs += MIN_UPDATE_INTERVAL_MS @@ -197,17 +199,22 @@ class FontScalingDialog( title.post { title.setTextAppearance(R.style.TextAppearance_Dialog_Title) doneButton.setTextAppearance(R.style.Widget_Dialog_Button) + doneButton.isEnabled = true } } } @WorkerThread fun updateFontScale() { - systemSettings.putStringForUser( - Settings.System.FONT_SCALE, - strEntryValues[lastProgress.get()], - userTracker.userId - ) + if ( + !systemSettings.putStringForUser( + Settings.System.FONT_SCALE, + strEntryValues[lastProgress.get()], + userTracker.userId + ) + ) { + title.post { doneButton.isEnabled = true } + } } @WorkerThread diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/fontscaling/FontScalingDialogTest.kt b/packages/SystemUI/tests/src/com/android/systemui/accessibility/fontscaling/FontScalingDialogTest.kt index d5e6881500bca..7b99314692b4a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/fontscaling/FontScalingDialogTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/fontscaling/FontScalingDialogTest.kt @@ -15,11 +15,13 @@ */ package com.android.systemui.accessibility.fontscaling +import android.content.res.Configuration import android.os.Handler import android.provider.Settings import android.testing.AndroidTestingRunner import android.testing.TestableLooper import android.view.ViewGroup +import android.widget.Button import android.widget.SeekBar import androidx.test.filters.SmallTest import com.android.systemui.R @@ -61,6 +63,7 @@ class FontScalingDialogTest : SysuiTestCase() { private lateinit var secureSettings: SecureSettings private lateinit var systemClock: FakeSystemClock private lateinit var backgroundDelayableExecutor: FakeExecutor + private lateinit var testableLooper: TestableLooper private val fontSizeValueArray: Array = mContext .getResources() @@ -73,7 +76,8 @@ class FontScalingDialogTest : SysuiTestCase() { @Before fun setUp() { MockitoAnnotations.initMocks(this) - val mainHandler = Handler(TestableLooper.get(this).getLooper()) + testableLooper = TestableLooper.get(this) + val mainHandler = Handler(testableLooper.looper) systemSettings = FakeSettings() // Guarantee that the systemSettings always starts with the default font scale. systemSettings.putFloatForUser(Settings.System.FONT_SCALE, 1.0f, userTracker.userId) @@ -286,4 +290,26 @@ class FontScalingDialogTest : SysuiTestCase() { verify(fontScalingDialog).createTextPreview(/* index= */ 0) fontScalingDialog.dismiss() } + + @Test + fun changeFontSize_buttonIsDisabledBeforeFontSizeChangeFinishes() { + fontScalingDialog.show() + + val iconEndFrame: ViewGroup = fontScalingDialog.findViewById(R.id.icon_end_frame)!! + val doneButton: Button = fontScalingDialog.findViewById(com.android.internal.R.id.button1)!! + + iconEndFrame.performClick() + backgroundDelayableExecutor.runAllReady() + backgroundDelayableExecutor.advanceClockToNext() + backgroundDelayableExecutor.runAllReady() + + // Verify that the button is disabled before receiving onConfigurationChanged + assertThat(doneButton.isEnabled).isFalse() + + val config = Configuration() + config.fontScale = 1.15f + fontScalingDialog.onConfigurationChanged(config) + testableLooper.processAllMessages() + assertThat(doneButton.isEnabled).isTrue() + } }