Merge "Fix transparency seekbar in accessibility button page is backwards" into sc-dev

This commit is contained in:
Jason Hsu
2021-05-24 17:34:46 +00:00
committed by Android (Google) Code Review
3 changed files with 36 additions and 29 deletions

View File

@@ -57,7 +57,7 @@
android:key="accessibility_button_opacity" android:key="accessibility_button_opacity"
android:title="@string/accessibility_button_opacity_title" android:title="@string/accessibility_button_opacity_title"
android:persistent="false" android:persistent="false"
settings:controller="com.android.settings.accessibility.FloatingMenuOpacityPreferenceController"/> settings:controller="com.android.settings.accessibility.FloatingMenuTransparencyPreferenceController"/>
<com.android.settings.accessibility.AccessibilityFooterPreference <com.android.settings.accessibility.AccessibilityFooterPreference
android:key="accessibility_button_footer" android:key="accessibility_button_footer"

View File

@@ -23,6 +23,7 @@ import android.os.Handler;
import android.os.Looper; import android.os.Looper;
import android.provider.Settings; import android.provider.Settings;
import androidx.annotation.FloatRange;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import androidx.preference.PreferenceScreen; 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.OnPause;
import com.android.settingslib.core.lifecycle.events.OnResume; import com.android.settingslib.core.lifecycle.events.OnResume;
/** Preference controller that controls the opacity seekbar in accessibility button page. */ /** Preference controller that controls the transparency seekbar in accessibility button page. */
public class FloatingMenuOpacityPreferenceController extends SliderPreferenceController public class FloatingMenuTransparencyPreferenceController extends SliderPreferenceController
implements LifecycleObserver, OnResume, OnPause { implements LifecycleObserver, OnResume, OnPause {
@VisibleForTesting @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 int FADE_ENABLED = 1;
private static final float MIN_PROGRESS = 10f; private static final float MIN_PROGRESS = 0f;
private static final float MAX_PROGRESS = 100f; private static final float MAX_PROGRESS = 90f;
@VisibleForTesting @VisibleForTesting
static final float PRECISION = 100f; static final float PRECISION = 100f;
@@ -51,7 +55,7 @@ public class FloatingMenuOpacityPreferenceController extends SliderPreferenceCon
@VisibleForTesting @VisibleForTesting
SeekBarPreference mPreference; SeekBarPreference mPreference;
public FloatingMenuOpacityPreferenceController(Context context, public FloatingMenuTransparencyPreferenceController(Context context,
String preferenceKey) { String preferenceKey) {
super(context, preferenceKey); super(context, preferenceKey);
mContentResolver = context.getContentResolver(); mContentResolver = context.getContentResolver();
@@ -101,15 +105,14 @@ public class FloatingMenuOpacityPreferenceController extends SliderPreferenceCon
@Override @Override
public int getSliderPosition() { public int getSliderPosition() {
return convertOpacityFloatToInt(getOpacity()); return convertTransparencyFloatToInt(getTransparency());
} }
@Override @Override
public boolean setSliderPosition(int position) { public boolean setSliderPosition(int position) {
final float value = convertOpacityIntToFloat(position); final float opacityValue = MAXIMUM_TRANSPARENCY - convertTransparencyIntToFloat(position);
return Settings.Secure.putFloat(mContentResolver, return Settings.Secure.putFloat(mContentResolver,
Settings.Secure.ACCESSIBILITY_FLOATING_MENU_OPACITY, value); Settings.Secure.ACCESSIBILITY_FLOATING_MENU_OPACITY, opacityValue);
} }
@Override @Override
@@ -130,21 +133,21 @@ public class FloatingMenuOpacityPreferenceController extends SliderPreferenceCon
mPreference.setEnabled(AccessibilityUtil.isFloatingMenuEnabled(mContext) && fadeEnabled); mPreference.setEnabled(AccessibilityUtil.isFloatingMenuEnabled(mContext) && fadeEnabled);
} }
private int convertOpacityFloatToInt(float value) { private int convertTransparencyFloatToInt(float value) {
return Math.round(value * PRECISION); return Math.round(value * PRECISION);
} }
private float convertOpacityIntToFloat(int value) { private float convertTransparencyIntToFloat(int value) {
return (float) value / PRECISION; return (float) value / PRECISION;
} }
private float getOpacity() { private float getTransparency() {
float value = Settings.Secure.getFloat(mContentResolver, float transparencyValue = MAXIMUM_TRANSPARENCY - (Settings.Secure.getFloat(mContentResolver,
Settings.Secure.ACCESSIBILITY_FLOATING_MENU_OPACITY, DEFAULT_OPACITY); Settings.Secure.ACCESSIBILITY_FLOATING_MENU_OPACITY, DEFAULT_TRANSPARENCY));
final float minValue = MIN_PROGRESS / PRECISION; final float minValue = MIN_PROGRESS / PRECISION;
final float maxValue = MAX_PROGRESS / PRECISION; final float maxValue = MAX_PROGRESS / PRECISION;
return (value < minValue || value > maxValue) ? DEFAULT_OPACITY : value; return (transparencyValue < minValue || transparencyValue > maxValue)
? DEFAULT_TRANSPARENCY : transparencyValue;
} }
} }

View File

@@ -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_FLOATING_MENU;
import static android.provider.Settings.Secure.ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR; 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.FloatingMenuTransparencyPreferenceController.DEFAULT_TRANSPARENCY;
import static com.android.settings.accessibility.FloatingMenuOpacityPreferenceController.PRECISION; 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.AVAILABLE;
import static com.android.settings.core.BasePreferenceController.DISABLED_DEPENDENT_SETTING; 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.mockito.junit.MockitoRule;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
/** Tests for {@link FloatingMenuOpacityPreferenceController}. */ /** Tests for {@link FloatingMenuTransparencyPreferenceController}. */
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class FloatingMenuOpacityPreferenceControllerTest { public class FloatingMenuTransparencyPreferenceControllerTest {
@Rule @Rule
public MockitoRule mocks = MockitoJUnit.rule(); public MockitoRule mocks = MockitoJUnit.rule();
@@ -58,12 +59,12 @@ public class FloatingMenuOpacityPreferenceControllerTest {
private final Context mContext = ApplicationProvider.getApplicationContext(); private final Context mContext = ApplicationProvider.getApplicationContext();
@Mock @Mock
private ContentResolver mContentResolver; private ContentResolver mContentResolver;
private FloatingMenuOpacityPreferenceController mController; private FloatingMenuTransparencyPreferenceController mController;
@Before @Before
public void setUp() { public void setUp() {
when(mContext.getContentResolver()).thenReturn(mContentResolver); when(mContext.getContentResolver()).thenReturn(mContentResolver);
mController = new FloatingMenuOpacityPreferenceController(mContext, "test_key"); mController = new FloatingMenuTransparencyPreferenceController(mContext, "test_key");
} }
@Test @Test
@@ -95,10 +96,12 @@ public class FloatingMenuOpacityPreferenceControllerTest {
@Test @Test
public void getSliderPosition_putNormalOpacityValue_expectedValue() { public void getSliderPosition_putNormalOpacityValue_expectedValue() {
final float transparencyValue = 0.65f;
Settings.Secure.putFloat(mContext.getContentResolver(), 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 @Test
@@ -106,17 +109,18 @@ public class FloatingMenuOpacityPreferenceControllerTest {
Settings.Secure.putFloat(mContext.getContentResolver(), Settings.Secure.putFloat(mContext.getContentResolver(),
Settings.Secure.ACCESSIBILITY_FLOATING_MENU_OPACITY, 0.01f); 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); assertThat(mController.getSliderPosition()).isEqualTo(defaultValue);
} }
@Test @Test
public void setSliderPosition_expectedValue() { 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(), final float value = Settings.Secure.getFloat(mContext.getContentResolver(),
Settings.Secure.ACCESSIBILITY_FLOATING_MENU_OPACITY, -1); Settings.Secure.ACCESSIBILITY_FLOATING_MENU_OPACITY, -1);
assertThat(value).isEqualTo(0.27f); assertThat(value).isEqualTo((MAXIMUM_TRANSPARENCY - transparencyValue));
} }
@Test @Test