Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ea6bb2dc authored by jasonwshsu's avatar jasonwshsu
Browse files

Fix transparency seekbar in accessibility button page is backwards

Root Cause: Store value in opacity value, need to be inverted to
transparency value.

Solution: transfer to transparency value and rename related field.

Bug: 183980065
Test: atest FloatingMenuTransparencyPreferenceControllerTest
Change-Id: I763dda47854e7cf945a95f4a7d4965725cd73824
parent 56713ae0
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -57,7 +57,7 @@
        android:key="accessibility_button_opacity"
        android:title="@string/accessibility_button_opacity_title"
        android:persistent="false"
        settings:controller="com.android.settings.accessibility.FloatingMenuOpacityPreferenceController"/>
        settings:controller="com.android.settings.accessibility.FloatingMenuTransparencyPreferenceController"/>

    <com.android.settings.accessibility.AccessibilityFooterPreference
        android:key="accessibility_button_footer"
+20 −17
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import android.os.Handler;
import android.os.Looper;
import android.provider.Settings;

import androidx.annotation.FloatRange;
import androidx.annotation.VisibleForTesting;
import androidx.preference.PreferenceScreen;

@@ -32,15 +33,18 @@ import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnPause;
import com.android.settingslib.core.lifecycle.events.OnResume;

/** Preference controller that controls the opacity seekbar in accessibility button page. */
public class FloatingMenuOpacityPreferenceController extends SliderPreferenceController
/** Preference controller that controls the transparency seekbar in accessibility button page. */
public class FloatingMenuTransparencyPreferenceController extends SliderPreferenceController
        implements LifecycleObserver, OnResume, OnPause {

    @VisibleForTesting
    static final float DEFAULT_OPACITY = 0.55f;
    @FloatRange(from = 0.0, to = 1.0)
    static final float DEFAULT_TRANSPARENCY = 0.45f;
    @VisibleForTesting
    static final float MAXIMUM_TRANSPARENCY = 1.0f;
    private static final int FADE_ENABLED = 1;
    private static final float MIN_PROGRESS = 10f;
    private static final float MAX_PROGRESS = 100f;
    private static final float MIN_PROGRESS = 0f;
    private static final float MAX_PROGRESS = 90f;
    @VisibleForTesting
    static final float PRECISION = 100f;

@@ -51,7 +55,7 @@ public class FloatingMenuOpacityPreferenceController extends SliderPreferenceCon
    @VisibleForTesting
    SeekBarPreference mPreference;

    public FloatingMenuOpacityPreferenceController(Context context,
    public FloatingMenuTransparencyPreferenceController(Context context,
            String preferenceKey) {
        super(context, preferenceKey);
        mContentResolver = context.getContentResolver();
@@ -101,15 +105,14 @@ public class FloatingMenuOpacityPreferenceController extends SliderPreferenceCon

    @Override
    public int getSliderPosition() {
        return convertOpacityFloatToInt(getOpacity());
        return convertTransparencyFloatToInt(getTransparency());
    }

    @Override
    public boolean setSliderPosition(int position) {
        final float value = convertOpacityIntToFloat(position);

        final float opacityValue = MAXIMUM_TRANSPARENCY - convertTransparencyIntToFloat(position);
        return Settings.Secure.putFloat(mContentResolver,
                Settings.Secure.ACCESSIBILITY_FLOATING_MENU_OPACITY, value);
                Settings.Secure.ACCESSIBILITY_FLOATING_MENU_OPACITY, opacityValue);
    }

    @Override
@@ -130,21 +133,21 @@ public class FloatingMenuOpacityPreferenceController extends SliderPreferenceCon
        mPreference.setEnabled(AccessibilityUtil.isFloatingMenuEnabled(mContext) && fadeEnabled);
    }

    private int convertOpacityFloatToInt(float value) {
    private int convertTransparencyFloatToInt(float value) {
        return Math.round(value * PRECISION);
    }

    private float convertOpacityIntToFloat(int value) {
    private float convertTransparencyIntToFloat(int value) {
        return (float) value / PRECISION;
    }

    private float getOpacity() {
        float value = Settings.Secure.getFloat(mContentResolver,
                Settings.Secure.ACCESSIBILITY_FLOATING_MENU_OPACITY, DEFAULT_OPACITY);
    private float getTransparency() {
        float transparencyValue = MAXIMUM_TRANSPARENCY - (Settings.Secure.getFloat(mContentResolver,
                Settings.Secure.ACCESSIBILITY_FLOATING_MENU_OPACITY, DEFAULT_TRANSPARENCY));
        final float minValue = MIN_PROGRESS / PRECISION;
        final float maxValue = MAX_PROGRESS / PRECISION;

        return (value < minValue || value > maxValue) ? DEFAULT_OPACITY : value;
        return (transparencyValue < minValue || transparencyValue > maxValue)
                ? DEFAULT_TRANSPARENCY : transparencyValue;
    }
}
+15 −11
Original line number Diff line number Diff line
@@ -19,8 +19,9 @@ package com.android.settings.accessibility;
import static android.provider.Settings.Secure.ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU;
import static android.provider.Settings.Secure.ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR;

import static com.android.settings.accessibility.FloatingMenuOpacityPreferenceController.DEFAULT_OPACITY;
import static com.android.settings.accessibility.FloatingMenuOpacityPreferenceController.PRECISION;
import static com.android.settings.accessibility.FloatingMenuTransparencyPreferenceController.DEFAULT_TRANSPARENCY;
import static com.android.settings.accessibility.FloatingMenuTransparencyPreferenceController.MAXIMUM_TRANSPARENCY;
import static com.android.settings.accessibility.FloatingMenuTransparencyPreferenceController.PRECISION;
import static com.android.settings.core.BasePreferenceController.AVAILABLE;
import static com.android.settings.core.BasePreferenceController.DISABLED_DEPENDENT_SETTING;

@@ -47,9 +48,9 @@ import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
import org.robolectric.RobolectricTestRunner;

/** Tests for {@link FloatingMenuOpacityPreferenceController}. */
/** Tests for {@link FloatingMenuTransparencyPreferenceController}. */
@RunWith(RobolectricTestRunner.class)
public class FloatingMenuOpacityPreferenceControllerTest {
public class FloatingMenuTransparencyPreferenceControllerTest {

    @Rule
    public MockitoRule mocks = MockitoJUnit.rule();
@@ -58,12 +59,12 @@ public class FloatingMenuOpacityPreferenceControllerTest {
    private final Context mContext = ApplicationProvider.getApplicationContext();
    @Mock
    private ContentResolver mContentResolver;
    private FloatingMenuOpacityPreferenceController mController;
    private FloatingMenuTransparencyPreferenceController mController;

    @Before
    public void setUp() {
        when(mContext.getContentResolver()).thenReturn(mContentResolver);
        mController = new FloatingMenuOpacityPreferenceController(mContext, "test_key");
        mController = new FloatingMenuTransparencyPreferenceController(mContext, "test_key");
    }

    @Test
@@ -95,10 +96,12 @@ public class FloatingMenuOpacityPreferenceControllerTest {

    @Test
    public void getSliderPosition_putNormalOpacityValue_expectedValue() {
        final float transparencyValue = 0.65f;
        Settings.Secure.putFloat(mContext.getContentResolver(),
                Settings.Secure.ACCESSIBILITY_FLOATING_MENU_OPACITY, 0.35f);
                Settings.Secure.ACCESSIBILITY_FLOATING_MENU_OPACITY,
                (MAXIMUM_TRANSPARENCY - transparencyValue));

        assertThat(mController.getSliderPosition()).isEqualTo(35);
        assertThat(mController.getSliderPosition()).isEqualTo((int) (transparencyValue * 100));
    }

    @Test
@@ -106,17 +109,18 @@ public class FloatingMenuOpacityPreferenceControllerTest {
        Settings.Secure.putFloat(mContext.getContentResolver(),
                Settings.Secure.ACCESSIBILITY_FLOATING_MENU_OPACITY, 0.01f);

        final int defaultValue = Math.round(DEFAULT_OPACITY * PRECISION);
        final int defaultValue = Math.round(DEFAULT_TRANSPARENCY * PRECISION);
        assertThat(mController.getSliderPosition()).isEqualTo(defaultValue);
    }

    @Test
    public void setSliderPosition_expectedValue() {
        mController.setSliderPosition(27);
        final float transparencyValue = 0.27f;
        mController.setSliderPosition((int) (transparencyValue * 100));

        final float value = Settings.Secure.getFloat(mContext.getContentResolver(),
                Settings.Secure.ACCESSIBILITY_FLOATING_MENU_OPACITY, -1);
        assertThat(value).isEqualTo(0.27f);
        assertThat(value).isEqualTo((MAXIMUM_TRANSPARENCY - transparencyValue));
    }

    @Test