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
This commit is contained in:
Ajinkya Chalke
2023-11-07 17:35:38 +00:00
parent 8979681a8d
commit 15c617625a
2 changed files with 33 additions and 0 deletions

View File

@@ -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));

View File

@@ -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);