diff --git a/res/xml/accessibility_button_settings.xml b/res/xml/accessibility_button_settings.xml
index 4732da5..02b1c7d 100644
--- a/res/xml/accessibility_button_settings.xml
+++ b/res/xml/accessibility_button_settings.xml
@@ -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"
diff --git a/src/com/android/settings/accessibility/FloatingMenuOpacityPreferenceController.java b/src/com/android/settings/accessibility/FloatingMenuTransparencyPreferenceController.java
similarity index 78%
rename from src/com/android/settings/accessibility/FloatingMenuOpacityPreferenceController.java
rename to src/com/android/settings/accessibility/FloatingMenuTransparencyPreferenceController.java
index fea6fb6..894d3ae 100644
--- a/src/com/android/settings/accessibility/FloatingMenuOpacityPreferenceController.java
+++ b/src/com/android/settings/accessibility/FloatingMenuTransparencyPreferenceController.java
@@ -23,6 +23,7 @@
 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.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 @@
     @VisibleForTesting
     SeekBarPreference mPreference;
 
-    public FloatingMenuOpacityPreferenceController(Context context,
+    public FloatingMenuTransparencyPreferenceController(Context context,
             String preferenceKey) {
         super(context, preferenceKey);
         mContentResolver = context.getContentResolver();
@@ -101,15 +105,14 @@
 
     @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 @@
         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;
     }
 }
-
diff --git a/tests/robotests/src/com/android/settings/accessibility/FloatingMenuOpacityPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/FloatingMenuTransparencyPreferenceControllerTest.java
similarity index 80%
rename from tests/robotests/src/com/android/settings/accessibility/FloatingMenuOpacityPreferenceControllerTest.java
rename to tests/robotests/src/com/android/settings/accessibility/FloatingMenuTransparencyPreferenceControllerTest.java
index 1638f90..55637cd 100644
--- a/tests/robotests/src/com/android/settings/accessibility/FloatingMenuOpacityPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/FloatingMenuTransparencyPreferenceControllerTest.java
@@ -19,8 +19,9 @@
 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.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 @@
     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 @@
 
     @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 @@
         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
