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

Commit b95bc662 authored by Yuhan Yang's avatar Yuhan Yang Committed by Android (Google) Code Review
Browse files

Merge "Grey out scrolling speed slider bar" into main

parents 30943c69 c772324c
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());
        }
    }
}