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

Commit 6f365765 authored by Kevin Chyn's avatar Kevin Chyn Committed by Android (Google) Code Review
Browse files

Merge "Move assist gestures settings to overlay" into oc-dr1-dev

parents fc9622ef f475bc2f
Loading
Loading
Loading
Loading
+0 −6
Original line number Diff line number Diff line
@@ -31,10 +31,4 @@
        android:summary="@string/assist_gesture_summary"
        app:keywords="@string/keywords_squeeze_to_launch_gesture"/>

    <com.android.settings.widget.SeekBarPreference
        android:key="gesture_assist_sensitivity"
        android:title="@string/assist_gesture_sensitivity_title"
        android:defaultValue="5"
        android:max="10" />

</PreferenceScreen>
+14 −0
Original line number Diff line number Diff line
@@ -18,10 +18,24 @@ package com.android.settings.gestures;

import android.content.Context;

import com.android.settings.core.PreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;

import java.util.List;

/** Feature provider for the assist gesture. */
public interface AssistGestureFeatureProvider {

    /** Returns true if the assist gesture is supported. */
    boolean isSupported(Context context);

    /** Returns true if the sensor is available. */
    boolean isSensorAvailable(Context context);

    /** Returns the resource */
    int getPreferenceResourceId();

    /** Returns a list of additional preference controllers */
    List<PreferenceController> getControllers(Context context, Lifecycle lifecycle);

}
+22 −0
Original line number Diff line number Diff line
@@ -18,6 +18,13 @@ package com.android.settings.gestures;

import android.content.Context;

import com.android.settings.R;
import com.android.settings.core.PreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;

import java.util.ArrayList;
import java.util.List;

public class AssistGestureFeatureProviderImpl implements AssistGestureFeatureProvider {

    @Override
@@ -25,4 +32,19 @@ public class AssistGestureFeatureProviderImpl implements AssistGestureFeaturePro
        return false;
    }

    @Override
    public boolean isSensorAvailable(Context context) {
        return false;
    }

    @Override
    public int getPreferenceResourceId() {
        return R.xml.assist_gesture_settings;
    }

    @Override
    public List<PreferenceController> getControllers(Context context, Lifecycle lifecycle) {
        return new ArrayList<>();
    }

}
+0 −151
Original line number Diff line number Diff line
/*
 * Copyright (C) 2017 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.settings.gestures;

import android.content.ContentResolver;
import android.content.Context;
import android.database.ContentObserver;
import android.net.Uri;
import android.provider.Settings;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;

import com.android.settings.widget.SeekBarPreference;
import com.android.settings.core.PreferenceController;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnPause;
import com.android.settingslib.core.lifecycle.events.OnResume;

public class AssistGestureSensitivityPreferenceController extends PreferenceController
        implements Preference.OnPreferenceChangeListener, LifecycleObserver, OnPause, OnResume {

    private static final String PREF_KEY_ASSIST_GESTURE_SENSITIVITY = "gesture_assist_sensitivity";

    private final AssistGestureFeatureProvider mFeatureProvider;
    private final SettingObserver mSettingObserver;

    private PreferenceScreen mScreen;
    private SeekBarPreference mPreference;

    public AssistGestureSensitivityPreferenceController(Context context, Lifecycle lifecycle) {
        super(context);
        mFeatureProvider = FeatureFactory.getFactory(context).getAssistGestureFeatureProvider();
        mSettingObserver = new SettingObserver();

        if (lifecycle != null) {
            lifecycle.addObserver(this);
        }
    }

    @Override
    public void onResume() {
        mSettingObserver.register(mContext.getContentResolver(), true /* register */);
        updatePreference();
    }

    @Override
    public void onPause() {
        mSettingObserver.register(mContext.getContentResolver(), false /* register */);
    }

    @Override
    public boolean isAvailable() {
        // The sensitivity control is contingent on the assist gesture being supported and the
        // gesture being enabled.
        final int gestureEnabled = Settings.Secure.getInt(
                mContext.getContentResolver(),
                Settings.Secure.ASSIST_GESTURE_ENABLED,
                1);
        return (gestureEnabled == 1) && mFeatureProvider.isSupported(mContext);
    }

    @Override
    public void displayPreference(PreferenceScreen screen) {
        mScreen = screen;
        mPreference = (SeekBarPreference) screen.findPreference(getPreferenceKey());
        // Call super last or AbstractPreferenceController might remove the preference from the
        // screen (if !isAvailable()) before we can save a reference to it.
        super.displayPreference(screen);
    }

    @Override
    public void updateState(Preference preference) {
        super.updateState(preference);
        updatePreference();
    }

    private void updatePreference() {
        if (mPreference == null) {
            return;
        }

        if (isAvailable()) {
            if (mScreen.findPreference(getPreferenceKey()) == null) {
                mScreen.addPreference(mPreference);
            }
        } else {
            mScreen.removePreference(mPreference);
        }

        final int sensitivity = Settings.Secure.getInt(
                mContext.getContentResolver(),
                Settings.Secure.ASSIST_GESTURE_SENSITIVITY,
                mPreference.getProgress());
        mPreference.setProgress(sensitivity);
    }

    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        final int sensitivity = (int) newValue;
        Settings.Secure.putInt(mContext.getContentResolver(),
                Settings.Secure.ASSIST_GESTURE_SENSITIVITY, sensitivity);
        return true;
    }

    @Override
    public String getPreferenceKey() {
        return PREF_KEY_ASSIST_GESTURE_SENSITIVITY;
    }

    class SettingObserver extends ContentObserver {

        private final Uri ASSIST_GESTURE_ENABLED_URI =
                Settings.Secure.getUriFor(Settings.Secure.ASSIST_GESTURE_ENABLED);
        private final Uri ASSIST_GESTURE_SENSITIVITY_URI =
                Settings.Secure.getUriFor(Settings.Secure.ASSIST_GESTURE_SENSITIVITY);

        public SettingObserver() {
            super(null /* handler */);
        }

        public void register(ContentResolver cr, boolean register) {
            if (register) {
                cr.registerContentObserver(ASSIST_GESTURE_ENABLED_URI, false, this);
                cr.registerContentObserver(ASSIST_GESTURE_SENSITIVITY_URI, false, this);
            } else {
                cr.unregisterContentObserver(this);
            }
        }

        @Override
        public void onChange(boolean selfChange) {
            updatePreference();
        }
    }
}
+6 −2
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.core.PreferenceController;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.core.lifecycle.Lifecycle;

@@ -48,7 +49,8 @@ public class AssistGestureSettings extends DashboardFragment {

    @Override
    protected int getPreferenceScreenResId() {
        return R.xml.assist_gesture_settings;
        return FeatureFactory.getFactory(getContext())
                .getAssistGestureFeatureProvider().getPreferenceResourceId();
    }

    @Override
@@ -60,7 +62,9 @@ public class AssistGestureSettings extends DashboardFragment {
            Lifecycle lifecycle) {
        final List<PreferenceController> controllers = new ArrayList<>();
        controllers.add(new AssistGesturePreferenceController(context, lifecycle, KEY_ASSIST));
        controllers.add(new AssistGestureSensitivityPreferenceController(context, lifecycle));
        controllers.addAll(FeatureFactory.getFactory(context).getAssistGestureFeatureProvider()
                .getControllers(context, lifecycle));

        return controllers;
    }

Loading