Merge "Stylus: Introduce Show Stylus Hover Pointer Setting (2/2)" into main
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 7291fad..c5d000b 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -12882,4 +12882,7 @@
<!-- Authority of the content provider that support methods restartPhoneProcess and restartRild. Will be overlaid by OEM.-->
<string name="reset_telephony_stack_content_provider_authority" translatable="false"></string>
+
+ <!--Text for Stylus Pointer Icon preference -->
+ <string name="show_stylus_pointer_icon">Show pointer while hovering</string>
</resources>
diff --git a/src/com/android/settings/connecteddevice/stylus/StylusDevicesController.java b/src/com/android/settings/connecteddevice/stylus/StylusDevicesController.java
index d8e8887..cd23103 100644
--- a/src/com/android/settings/connecteddevice/stylus/StylusDevicesController.java
+++ b/src/com/android/settings/connecteddevice/stylus/StylusDevicesController.java
@@ -24,6 +24,7 @@
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.UserInfo;
+import android.hardware.input.InputSettings;
import android.os.Process;
import android.os.UserHandle;
import android.os.UserManager;
@@ -73,6 +74,8 @@
static final String KEY_IGNORE_BUTTON = "ignore_button";
@VisibleForTesting
static final String KEY_DEFAULT_NOTES = "default_notes";
+ @VisibleForTesting
+ static final String KEY_SHOW_STYLUS_POINTER_ICON = "show_stylus_pointer_icon";
private static final String TAG = "StylusDevicesController";
@@ -181,6 +184,26 @@
return pref;
}
+ @Nullable
+ private SwitchPreferenceCompat createShowStylusPointerIconPreference(
+ SwitchPreferenceCompat preference) {
+ if (!mContext.getResources()
+ .getBoolean(com.android.internal.R.bool.config_enableStylusPointerIcon)) {
+ // If the config is not enabled, no need to show the preference to user
+ return null;
+ }
+ SwitchPreferenceCompat pref = preference == null ? new SwitchPreferenceCompat(mContext)
+ : preference;
+ pref.setKey(KEY_SHOW_STYLUS_POINTER_ICON);
+ pref.setTitle(mContext.getString(R.string.show_stylus_pointer_icon));
+ pref.setIcon(R.drawable.ic_stylus);
+ pref.setOnPreferenceClickListener(this);
+ pref.setChecked(Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.STYLUS_POINTER_ICON_ENABLED,
+ InputSettings.DEFAULT_STYLUS_POINTER_ICON_ENABLED) == 1);
+ return pref;
+ }
+
@Override
public boolean onPreferenceClick(Preference preference) {
String key = preference.getKey();
@@ -213,6 +236,11 @@
Secure.STYLUS_BUTTONS_ENABLED,
((TwoStatePreference) preference).isChecked() ? 0 : 1);
break;
+ case KEY_SHOW_STYLUS_POINTER_ICON:
+ Settings.Secure.putInt(mContext.getContentResolver(),
+ Secure.STYLUS_POINTER_ICON_ENABLED,
+ ((SwitchPreferenceCompat) preference).isChecked() ? 1 : 0);
+ break;
}
return true;
}
@@ -268,6 +296,13 @@
if (buttonPref == null) {
mPreferencesContainer.addPreference(createButtonPressPreference());
}
+ SwitchPreferenceCompat currShowStylusPointerIconPref = mPreferencesContainer
+ .findPreference(KEY_SHOW_STYLUS_POINTER_ICON);
+ Preference showStylusPointerIconPref =
+ createShowStylusPointerIconPreference(currShowStylusPointerIconPref);
+ if (currShowStylusPointerIconPref == null && showStylusPointerIconPref != null) {
+ mPreferencesContainer.addPreference(showStylusPointerIconPref);
+ }
}
private boolean currentInputMethodSupportsHandwriting() {
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 a540d28..135be4b 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/stylus/StylusDevicesControllerTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/stylus/StylusDevicesControllerTest.java
@@ -221,7 +221,7 @@
showScreen(controller);
- assertThat(mPreferenceContainer.getPreferenceCount()).isEqualTo(3);
+ assertThat(mPreferenceContainer.getPreferenceCount()).isEqualTo(4);
}
@Test
@@ -249,11 +249,12 @@
@Test
public void btStylusInputDevice_showsAllPreferences() {
showScreen(mController);
+
Preference defaultNotesPref = mPreferenceContainer.getPreference(0);
Preference handwritingPref = mPreferenceContainer.getPreference(1);
Preference buttonPref = mPreferenceContainer.getPreference(2);
+ Preference stylusPointerIconPref = mPreferenceContainer.getPreference(3);
- assertThat(mPreferenceContainer.getPreferenceCount()).isEqualTo(3);
assertThat(defaultNotesPref.getTitle().toString()).isEqualTo(
mContext.getString(R.string.stylus_default_notes_app));
assertThat(defaultNotesPref.isVisible()).isTrue();
@@ -263,6 +264,9 @@
assertThat(buttonPref.getTitle().toString()).isEqualTo(
mContext.getString(R.string.stylus_ignore_button));
assertThat(buttonPref.isVisible()).isTrue();
+ assertThat(stylusPointerIconPref.getTitle().toString()).isEqualTo(
+ mContext.getString(R.string.show_stylus_pointer_icon));
+ assertThat(stylusPointerIconPref.isVisible()).isTrue();
}
@Test
@@ -551,6 +555,46 @@
Secure.STYLUS_BUTTONS_ENABLED, -1)).isEqualTo(1);
}
+ @Test
+ public void stylusPointerIconPreference_checkedWhenFlagTrue() {
+ Settings.Secure.putInt(mContext.getContentResolver(),
+ Settings.Secure.STYLUS_POINTER_ICON_ENABLED, 1);
+
+ showScreen(mController);
+ SwitchPreferenceCompat stylusPointerIconPref =
+ (SwitchPreferenceCompat) mPreferenceContainer.getPreference(3);
+
+ assertThat(stylusPointerIconPref.isChecked()).isEqualTo(true);
+ }
+
+ @Test
+ public void stylusPointerIconPreference_uncheckedWhenFlagFalse() {
+ Settings.Secure.putInt(mContext.getContentResolver(),
+ Settings.Secure.STYLUS_POINTER_ICON_ENABLED, 0);
+
+ showScreen(mController);
+ SwitchPreferenceCompat stylusPointerIconPref =
+ (SwitchPreferenceCompat) mPreferenceContainer.getPreference(3);
+
+ assertThat(stylusPointerIconPref.isChecked()).isEqualTo(false);
+ }
+
+ @Test
+ public void stylusPointerIconPreference_updatesFlagOnClick() {
+ Settings.Secure.putInt(mContext.getContentResolver(),
+ Settings.Secure.STYLUS_POINTER_ICON_ENABLED, 0);
+
+ showScreen(mController);
+ SwitchPreferenceCompat stylusPointerIconPref =
+ (SwitchPreferenceCompat) mPreferenceContainer.getPreference(3);
+
+ stylusPointerIconPref.performClick();
+
+ assertThat(stylusPointerIconPref.isChecked()).isEqualTo(true);
+ assertThat(Settings.Secure.getInt(mContext.getContentResolver(),
+ Secure.STYLUS_POINTER_ICON_ENABLED, -1)).isEqualTo(1);
+ }
+
private void showScreen(StylusDevicesController controller) {
controller.displayPreference(mScreen);
}