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

Commit 5473f68c authored by Philip Quinn's avatar Philip Quinn
Browse files

Add setting for the assist gesture sensitivity control.

The sensitivity control is only visible when the assist gesture itself
is enabled.

Test: make -j RunSettingsRoboTests; manual test on supported/unsupported
      configurations.

Change-Id: I584975794c5cf9d788e93167292d142ae2faf1c5
parent c1542f1f
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -8071,6 +8071,9 @@
    <!-- Summary text for the assist gesture [CHAR LIMIT=160]-->
    <string name="assist_gesture_summary"></string>
    <!-- Title text for the assist gesture sensitivity setting [CHAR LIMIT=NONE]-->
    <string name="assist_gesture_sensitivity_title">Sensitivity</string>
    <!-- Switch text for each gesture setting state -->
    <string name="gesture_setting_on">On</string>
    <string name="gesture_setting_off">Off</string>
+6 −0
Original line number Diff line number Diff line
@@ -29,4 +29,10 @@
        android:title="@string/assist_gesture_title"
        android:summary="@string/assist_gesture_summary" />

    <com.android.settings.SeekBarPreference
        android:key="gesture_assist_sensitivity"
        android:title="@string/assist_gesture_sensitivity_title"
        android:defaultValue="2"
        android:max="4" />

</PreferenceScreen>
+0 −46
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.applications.assist;

import android.content.Context;

import com.android.settings.core.PreferenceController;
import com.android.settings.gestures.AssistGestureFeatureProvider;
import com.android.settings.overlay.FeatureFactory;

public class GestureAssistPreferenceController extends PreferenceController {

    private static final String KEY_ASSIST_GESTURE = "gesture_assist";

    private AssistGestureFeatureProvider mFeatureProvider;

    public GestureAssistPreferenceController(Context context) {
        super(context);
        mFeatureProvider = FeatureFactory.getFactory(context)
                .getAssistGestureFeatureProvider();
    }

    @Override
    public boolean isAvailable() {
        return mFeatureProvider.isSupported(mContext);
    }

    @Override
    public String getPreferenceKey() {
        return KEY_ASSIST_GESTURE;
    }
}
+2 −1
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import com.android.settings.R;
import com.android.settings.core.PreferenceController;
import com.android.settings.core.lifecycle.Lifecycle;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.gestures.AssistGesturePreferenceController;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;

@@ -70,7 +71,7 @@ public class ManageAssist extends DashboardFragment {
            Lifecycle lifecycle) {
        final List<PreferenceController> controllers = new ArrayList<>();
        controllers.add(new DefaultAssistPreferenceController(context));
        controllers.add(new GestureAssistPreferenceController(context));
        controllers.add(new AssistGesturePreferenceController(context, lifecycle));
        controllers.add(new AssistContextPreferenceController(context, lifecycle));
        controllers.add(new AssistScreenshotPreferenceController(context, lifecycle));
        controllers.add(new AssistFlashScreenPreferenceController(context, lifecycle));
+83 −11
Original line number Diff line number Diff line
@@ -17,39 +17,82 @@
package com.android.settings.gestures;

import android.content.Context;
import android.net.Uri;
import android.provider.Settings;
import android.support.v7.preference.Preference;
import android.util.ArrayMap;
import android.support.v7.preference.PreferenceScreen;

import com.android.settings.applications.assist.AssistSettingObserver;
import com.android.settings.core.lifecycle.Lifecycle;
import com.android.settings.core.lifecycle.events.OnPause;
import com.android.settings.core.lifecycle.events.OnResume;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search2.InlineSwitchPayload;
import com.android.settings.search2.ResultPayload;

public class AssistGesturePreferenceController extends GesturePreferenceController {
import java.util.Arrays;
import java.util.List;

public class AssistGesturePreferenceController extends GesturePreferenceController
        implements OnPause, OnResume {

    private static final String PREF_KEY_VIDEO = "gesture_assist_video";
    private static final String PREF_KEY_ASSIST_GESTURE = "gesture_assist";

    private final AssistGestureFeatureProvider mFeatureProvider;
    private final SettingObserver mSettingObserver;
    private boolean mWasAvailable;

    private PreferenceScreen mScreen;
    private Preference mPreference;

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

    @Override
    public boolean isAvailable() {
        AssistGestureFeatureProvider provider =
                FeatureFactory.getFactory(mContext).getAssistGestureFeatureProvider();
        return provider.isSupported(mContext);
        return mFeatureProvider.isSupported(mContext);
    }

    @Override
    protected String getVideoPrefKey() {
        return PREF_KEY_VIDEO;
    public void displayPreference(PreferenceScreen screen) {
        mScreen = screen;
        mPreference = 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 String getPreferenceKey() {
        return PREF_KEY_ASSIST_GESTURE;
    public void onResume() {
        mSettingObserver.register(mContext.getContentResolver(), true /* register */);
        if (mWasAvailable != isAvailable()) {
            // Only update the preference visibility if the availability has changed -- otherwise
            // the preference may be incorrectly added to screens with collapsed sections.
            updatePreference();
            mWasAvailable = isAvailable();
        }
    }

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

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

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

    @Override
@@ -60,10 +103,39 @@ public class AssistGesturePreferenceController extends GesturePreferenceControll
        return true;
    }

    @Override
    protected String getVideoPrefKey() {
        return PREF_KEY_VIDEO;
    }

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

    @Override
    protected boolean isSwitchPrefEnabled() {
        final int assistGestureEnabled = Settings.Secure.getInt(mContext.getContentResolver(),
                Settings.Secure.ASSIST_GESTURE_ENABLED, 1);
        return assistGestureEnabled != 0;
    }

    class SettingObserver extends AssistSettingObserver {

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

        @Override
        protected List<Uri> getSettingUris() {
            return Arrays.asList(ASSIST_GESTURE_ENABLED_URI);
        }

        @Override
        public void onSettingChange() {
            if (mWasAvailable != isAvailable()) {
                updatePreference();
                mWasAvailable = isAvailable();
            }
        }
    }
}
Loading