Adding a title to contentDesciption of the seekbar. The title is helpful to indicate which seekbar user is changing when talkback is enabled. Also move SeekBarPreference from root package to widget packge. Change-Id: I793f41c4902e350b6bc6d62761362779cc3722a9 Fix: 35421942 Test: make RunSettingsRoboTests
152 lines
5.3 KiB
Java
152 lines
5.3 KiB
Java
/*
|
|
* 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();
|
|
}
|
|
}
|
|
}
|