diff options
6 files changed, 87 insertions, 9 deletions
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 000000000000..40bab5ed08f2 --- /dev/null +++ b/packages/SystemUI/res/color/qs_dialog_btn_filled_background.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +  ~ Copyright (C) 2023 The Android Open Source Project +  ~ +  ~ Licensed under the Apache License, Version 2.0 (the "License"); +  ~ you may not use this file except in compliance with the License. +  ~ You may obtain a copy of the License at +  ~ +  ~      http://www.apache.org/licenses/LICENSE-2.0 +  ~ +  ~ Unless required by applicable law or agreed to in writing, software +  ~ distributed under the License is distributed on an "AS IS" BASIS, +  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +  ~ See the License for the specific language governing permissions and +  ~ limitations under the License. +  --> +<selector xmlns:android="http://schemas.android.com/apk/res/android" +          xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"> +    <item android:state_enabled="false" +          android:color="?androidprv:attr/materialColorPrimary" +          android:alpha="0.30"/> +    <item android:color="?androidprv:attr/materialColorPrimary"/> +</selector>
\ 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 000000000000..e76ad991a92c --- /dev/null +++ b/packages/SystemUI/res/color/qs_dialog_btn_filled_text_color.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +  ~ Copyright (C) 2023 The Android Open Source Project +  ~ +  ~ Licensed under the Apache License, Version 2.0 (the "License"); +  ~ you may not use this file except in compliance with the License. +  ~ You may obtain a copy of the License at +  ~ +  ~      http://www.apache.org/licenses/LICENSE-2.0 +  ~ +  ~ Unless required by applicable law or agreed to in writing, software +  ~ distributed under the License is distributed on an "AS IS" BASIS, +  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +  ~ See the License for the specific language governing permissions and +  ~ limitations under the License. +  --> +<selector xmlns:android="http://schemas.android.com/apk/res/android" +          xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"> +    <item android:state_enabled="false" +          android:color="?androidprv:attr/materialColorOnPrimary" +          android:alpha="0.30"/> +    <item android:color="?androidprv:attr/materialColorOnPrimary"/> +</selector>
\ 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 c4e45bf2c223..9bc8b53b308e 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.    -->  <inset xmlns:android="http://schemas.android.com/apk/res/android" -       xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"         android:insetTop="@dimen/dialog_button_vertical_inset"         android:insetBottom="@dimen/dialog_button_vertical_inset">      <ripple android:color="?android:attr/colorControlHighlight"> @@ -28,7 +27,7 @@          <item>              <shape android:shape="rectangle">                  <corners android:radius="?android:attr/buttonCornerRadius"/> -                <solid android:color="?androidprv:attr/materialColorPrimary"/> +                <solid android:color="@color/qs_dialog_btn_filled_background"/>                  <padding android:left="@dimen/dialog_button_horizontal_padding"                           android:top="@dimen/dialog_button_vertical_padding"                           android:right="@dimen/dialog_button_horizontal_padding" diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml index 31f40e99e91c..1c46a91e5d29 100644 --- a/packages/SystemUI/res/values/styles.xml +++ b/packages/SystemUI/res/values/styles.xml @@ -1116,7 +1116,7 @@      <style name="Widget.Dialog.Button">          <item name="android:buttonCornerRadius">28dp</item>          <item name="android:background">@drawable/qs_dialog_btn_filled</item> -        <item name="android:textColor">?androidprv:attr/materialColorOnPrimary</item> +        <item name="android:textColor">@color/qs_dialog_btn_filled_text_color</item>          <item name="android:textSize">14sp</item>          <item name="android:lineHeight">20sp</item>          <item name="android:fontFamily">@*android:string/config_bodyFontFamilyMedium</item> 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 783460c325fa..0ef256d41157 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 d5e6881500bc..7b99314692b4 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<String> =          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() +    }  }  |