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: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"

View File

@@ -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;
}
}

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_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