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

Commit c772324c authored by YuhanYang's avatar YuhanYang Committed by Yuhan Yang
Browse files

Grey out scrolling speed slider bar

When ever the mouse scrolling acceleration settings is toggled to
set "enabled", the mouse scrolling speed slider bar should be
greyed out.

Bug: 383555305
Bug: 384795606
Test: Local DUT with aconfig flags enabled, verified settings appears
      and is togglable. Verified toggle affects scrolling acceleration.
Flag: com.android.hardware.input.mouse_scrolling_acceleration
Change-Id: Ib96a4437864a0395c8c185bbd8cfb13f3979c84f
parent 2af2cfb8
Loading
Loading
Loading
Loading
+59 −7
Original line number Diff line number Diff line
@@ -16,29 +16,55 @@

package com.android.settings.inputmethod;

import android.content.ContentResolver;
import android.content.Context;
import android.database.ContentObserver;
import android.hardware.input.InputSettings;
import android.os.Handler;
import android.os.Looper;
import android.provider.Settings;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;

import com.android.settings.core.SliderPreferenceController;
import com.android.settings.widget.SeekBarPreference;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStop;

public class MouseScrollingSpeedPreferenceController extends SliderPreferenceController {

public class MouseScrollingSpeedPreferenceController extends SliderPreferenceController implements
        Preference.OnPreferenceChangeListener, LifecycleObserver, OnStop, OnStart  {

    private final ContentResolver mContentResolver;
    private final ContentObserver mContentObserver;

    @Nullable
    private SeekBarPreference mPreference;

    public MouseScrollingSpeedPreferenceController(@NonNull Context context, @NonNull String key) {
        super(context, key);

        mContentResolver = context.getContentResolver();
        mContentObserver = new ContentObserver(new Handler(Looper.getMainLooper())) {
            @Override
            public void onChange(boolean selfChange) {
                updateAvailabilityStatus();
            }
        };
    }

    @Override
    public void displayPreference(@NonNull PreferenceScreen screen) {
        super.displayPreference(screen);
        SeekBarPreference preference = screen.findPreference(getPreferenceKey());
        preference.setMax(getMax());
        preference.setMin(getMin());
        preference.setProgress(getSliderPosition());
        updateState(preference);
        mPreference = screen.findPreference(getPreferenceKey());
        mPreference.setMax(getMax());
        mPreference.setMin(getMin());
        mPreference.setProgress(getSliderPosition());
        updateState(mPreference);
    }

    @Override
@@ -46,7 +72,7 @@ public class MouseScrollingSpeedPreferenceController extends SliderPreferenceCon
        if (!InputSettings.isMouseScrollingAccelerationFeatureFlagEnabled()) {
            return UNSUPPORTED_ON_DEVICE;
        }
        return AVAILABLE;
        return shouldEnableSlideBar() ? AVAILABLE : DISABLED_DEPENDENT_SETTING;
    }

    @Override
@@ -73,4 +99,30 @@ public class MouseScrollingSpeedPreferenceController extends SliderPreferenceCon
    public int getMax() {
        return InputSettings.MAX_MOUSE_SCROLLING_SPEED;
    }

    /**
     * Returns whether the mouse scrolling speed slide bar should allow users to customize or not.
     */
    public boolean shouldEnableSlideBar() {
        return !InputSettings.isMouseScrollingAccelerationEnabled(mContext);
    }

    @Override
    public void onStart() {
        mContentResolver.registerContentObserver(
                Settings.System.getUriFor(
                        Settings.System.MOUSE_SCROLLING_ACCELERATION),
                /* notifyForDescendants= */ false, mContentObserver);
    }

    @Override
    public void onStop() {
        mContentResolver.unregisterContentObserver(mContentObserver);
    }

    private void updateAvailabilityStatus() {
        if (mPreference != null) {
            mPreference.setEnabled(shouldEnableSlideBar());
        }
    }
}