Merge "Show touchpad entry when input device is detected as touchpad."

This commit is contained in:
Daniel Huang
2023-02-08 04:48:24 +00:00
committed by Android (Google) Code Review
4 changed files with 80 additions and 22 deletions

View File

@@ -27,13 +27,13 @@ import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.inputmethod.PhysicalKeyboardFragment.HardKeyboardDeviceInfo;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnPause;
import com.android.settingslib.core.lifecycle.events.OnResume;
import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStop;
import java.util.List;
public class KeyboardPreferenceController extends BasePreferenceController
implements PreferenceControllerMixin, LifecycleObserver, OnResume, OnPause,
implements PreferenceControllerMixin, LifecycleObserver, OnStart, OnStop,
InputManager.InputDeviceListener {
private final InputManager mIm;
@@ -61,13 +61,13 @@ public class KeyboardPreferenceController extends BasePreferenceController
}
@Override
public void onPause() {
mIm.unregisterInputDeviceListener(this);
public void onStart() {
mIm.registerInputDeviceListener(this, null);
}
@Override
public void onResume() {
mIm.registerInputDeviceListener(this, null);
public void onStop() {
mIm.unregisterInputDeviceListener(this);
}
@Override
@@ -84,6 +84,9 @@ public class KeyboardPreferenceController extends BasePreferenceController
}
private void updateSummary() {
if (mPreference == null) {
return;
}
final List<HardKeyboardDeviceInfo> keyboards =
PhysicalKeyboardFragment.getHardKeyboards(mContext);
if (keyboards.isEmpty()) {

View File

@@ -17,7 +17,7 @@
package com.android.settings.inputmethod;
import android.content.Context;
import android.provider.Settings;
import android.view.InputDevice;
import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodManager;
import android.view.inputmethod.InputMethodSubtype;
@@ -38,17 +38,18 @@ public class NewKeyboardSettingsUtils {
static final String EXTRA_INPUT_METHOD_INFO = "input_method_info";
static final String EXTRA_INPUT_METHOD_SUBTYPE = "input_method_subtype";
static InputMethodInfo getActiveIme(Context context, InputMethodManager imm) {
InputMethodInfo activeIme = null;
List<InputMethodInfo> infoList = imm.getEnabledInputMethodList();
String imeId = Settings.Secure.getStringForUser(context.getContentResolver(),
Settings.Secure.DEFAULT_INPUT_METHOD, context.getUserId());
for (InputMethodInfo method : infoList) {
if (method.getId().equals(imeId)) {
activeIme = method;
static boolean isTouchpad() {
for (int deviceId : InputDevice.getDeviceIds()) {
final InputDevice device = InputDevice.getDevice(deviceId);
if (device == null) {
continue;
}
if ((device.getSources() & InputDevice.SOURCE_TOUCHPAD)
== InputDevice.SOURCE_TOUCHPAD) {
return true;
}
}
return activeIme;
return false;
}
static List<String> getSuitableImeLabels(Context context, InputMethodManager imm, int userId) {

View File

@@ -63,7 +63,9 @@ public class TouchGesturesButtonPreferenceController extends BasePreferenceContr
@Override
public int getAvailabilityStatus() {
return AVAILABLE;
boolean touchGestureDeveloperMode = FeatureFlagUtils
.isEnabled(mContext, FeatureFlagUtils.SETTINGS_NEW_KEYBOARD_TRACKPAD_GESTURE);
return touchGestureDeveloperMode ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
}
private void showTouchpadGestureEducation() {

View File

@@ -17,21 +17,73 @@
package com.android.settings.inputmethod;
import android.content.Context;
import android.hardware.input.InputManager;
import android.util.FeatureFlagUtils;
import com.android.settings.core.BasePreferenceController;
import androidx.preference.Preference;
public class TrackpadSettingsController extends BasePreferenceController {
import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.PreferenceControllerMixin;
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 TrackpadSettingsController extends BasePreferenceController
implements PreferenceControllerMixin, LifecycleObserver, OnStart, OnStop,
InputManager.InputDeviceListener {
private final InputManager mIm;
private Preference mPreference;
public TrackpadSettingsController(Context context, String key) {
super(context, key);
mIm = context.getSystemService(InputManager.class);
}
@Override
public void onInputDeviceAdded(int deviceId) {
updateEntry();
}
@Override
public void onInputDeviceRemoved(int deviceId) {
updateEntry();
}
@Override
public void onInputDeviceChanged(int deviceId) {
updateEntry();
}
@Override
public void onStart() {
mIm.registerInputDeviceListener(this, null);
}
@Override
public void onStop() {
mIm.unregisterInputDeviceListener(this);
}
@Override
public void updateState(Preference preference) {
mPreference = preference;
updateEntry();
}
private void updateEntry() {
if (mPreference == null) {
return;
}
mPreference.setVisible(isAvailable());
}
@Override
public int getAvailabilityStatus() {
// TODO: Need to detect if trackpad is connected with device.
boolean isFeatureOn = FeatureFlagUtils
.isEnabled(mContext, FeatureFlagUtils.SETTINGS_NEW_KEYBOARD_TRACKPAD);
return isFeatureOn ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
boolean isTouchpad = NewKeyboardSettingsUtils.isTouchpad();
return (isFeatureOn && isTouchpad) ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
}
}