From 15c617625ad20344004d000103547f9b1f24fc94 Mon Sep 17 00:00:00 2001 From: Ajinkya Chalke Date: Tue, 7 Nov 2023 17:35:38 +0000 Subject: [PATCH] Conditionally add tail button pref - The connected device settings shouldn't show the tail button pref setting if the input device doesn't support it. Bug: 293472525 Test: atest StylusDevicesControllerTest Flag: NONE Change-Id: I50ab43e971b0dd8530a5bdab8544a46e889366ee --- .../stylus/StylusDevicesController.java | 7 +++++ .../stylus/StylusDevicesControllerTest.java | 26 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/src/com/android/settings/connecteddevice/stylus/StylusDevicesController.java b/src/com/android/settings/connecteddevice/stylus/StylusDevicesController.java index 64ec63f088b..ec19e8d7b85 100644 --- a/src/com/android/settings/connecteddevice/stylus/StylusDevicesController.java +++ b/src/com/android/settings/connecteddevice/stylus/StylusDevicesController.java @@ -32,6 +32,7 @@ import android.provider.Settings.Secure; import android.text.TextUtils; import android.util.Log; import android.view.InputDevice; +import android.view.KeyEvent; import android.view.inputmethod.InputMethodInfo; import android.view.inputmethod.InputMethodManager; @@ -107,6 +108,12 @@ public class StylusDevicesController extends AbstractPreferenceController implem return null; } + boolean doesStylusSupportTailButton = mInputDevice.hasKeys( + KeyEvent.KEYCODE_STYLUS_BUTTON_TAIL)[0]; + if (!doesStylusSupportTailButton) { + return null; + } + Preference pref = preference == null ? new Preference(mContext) : preference; pref.setKey(KEY_DEFAULT_NOTES); pref.setTitle(mContext.getString(R.string.stylus_default_notes_app)); diff --git a/tests/robotests/src/com/android/settings/connecteddevice/stylus/StylusDevicesControllerTest.java b/tests/robotests/src/com/android/settings/connecteddevice/stylus/StylusDevicesControllerTest.java index b521be17bcd..047a7d5d2dd 100644 --- a/tests/robotests/src/com/android/settings/connecteddevice/stylus/StylusDevicesControllerTest.java +++ b/tests/robotests/src/com/android/settings/connecteddevice/stylus/StylusDevicesControllerTest.java @@ -16,6 +16,8 @@ package com.android.settings.connecteddevice.stylus; +import static android.view.KeyEvent.KEYCODE_STYLUS_BUTTON_TAIL; + import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; @@ -139,6 +141,8 @@ public class StylusDevicesControllerTest { .setSources(InputDevice.SOURCE_STYLUS) .build()); when(mInputDevice.getBluetoothAddress()).thenReturn("SOME:ADDRESS"); + when(mInputDevice.hasKeys(KEYCODE_STYLUS_BUTTON_TAIL)).thenReturn( + new boolean[]{true}); mController = new StylusDevicesController(mContext, mInputDevice, null, mLifecycle); } @@ -220,6 +224,28 @@ public class StylusDevicesControllerTest { assertThat(mPreferenceContainer.getPreferenceCount()).isEqualTo(3); } + @Test + public void usiStylusInputDevice_doesntSupportTailButton_tailButtonPreferenceNotShown() { + when(mInputDevice.hasKeys(KEYCODE_STYLUS_BUTTON_TAIL)).thenReturn(new boolean[]{false}); + when(mBluetoothDevice.getMetadata(BluetoothDevice.METADATA_DEVICE_TYPE)).thenReturn( + BluetoothDevice.DEVICE_TYPE_WATCH.getBytes()); + StylusDevicesController controller = new StylusDevicesController( + mContext, mInputDevice, mCachedBluetoothDevice, mLifecycle + ); + + showScreen(controller); + Preference handwritingPref = mPreferenceContainer.getPreference(0); + Preference buttonPref = mPreferenceContainer.getPreference(1); + + assertThat(mPreferenceContainer.getPreferenceCount()).isEqualTo(2); + assertThat(handwritingPref.getTitle().toString()).isEqualTo( + mContext.getString(R.string.stylus_textfield_handwriting)); + assertThat(handwritingPref.isVisible()).isTrue(); + assertThat(buttonPref.getTitle().toString()).isEqualTo( + mContext.getString(R.string.stylus_ignore_button)); + assertThat(buttonPref.isVisible()).isTrue(); + } + @Test public void btStylusInputDevice_showsAllPreferences() { showScreen(mController);