Loading src/com/android/settings/connecteddevice/stylus/StylusDevicesController.java +30 −20 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ import androidx.preference.SwitchPreference; import com.android.settings.R; import com.android.settings.dashboard.profileselector.ProfileSelectDialog; import com.android.settings.dashboard.profileselector.UserAdapter; import com.android.settingslib.PrimarySwitchPreference; import com.android.settingslib.bluetooth.BluetoothUtils; import com.android.settingslib.bluetooth.CachedBluetoothDevice; import com.android.settingslib.core.AbstractPreferenceController; Loading @@ -59,7 +60,8 @@ import java.util.List; * This class adds stylus preferences. */ public class StylusDevicesController extends AbstractPreferenceController implements Preference.OnPreferenceClickListener, LifecycleObserver, OnResume { Preference.OnPreferenceClickListener, Preference.OnPreferenceChangeListener, LifecycleObserver, OnResume { @VisibleForTesting static final String KEY_STYLUS = "device_stylus"; Loading Loading @@ -138,11 +140,15 @@ public class StylusDevicesController extends AbstractPreferenceController implem return pref; } private SwitchPreference createOrUpdateHandwritingPreference(SwitchPreference preference) { SwitchPreference pref = preference == null ? new SwitchPreference(mContext) : preference; private PrimarySwitchPreference createOrUpdateHandwritingPreference( PrimarySwitchPreference preference) { PrimarySwitchPreference pref = preference == null ? new PrimarySwitchPreference(mContext) : preference; pref.setKey(KEY_HANDWRITING); pref.setTitle(mContext.getString(R.string.stylus_textfield_handwriting)); pref.setIcon(R.drawable.ic_text_fields_alt); // Using a two-target preference, clicking will send an intent and change will toggle. pref.setOnPreferenceChangeListener(this); pref.setOnPreferenceClickListener(this); pref.setChecked(Settings.Secure.getInt(mContext.getContentResolver(), Settings.Secure.STYLUS_HANDWRITING_ENABLED, Loading @@ -165,7 +171,6 @@ public class StylusDevicesController extends AbstractPreferenceController implem @Override public boolean onPreferenceClick(Preference preference) { String key = preference.getKey(); switch (key) { case KEY_DEFAULT_NOTES: PackageManager pm = mContext.getPackageManager(); Loading @@ -181,21 +186,14 @@ public class StylusDevicesController extends AbstractPreferenceController implem } break; case KEY_HANDWRITING: Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.STYLUS_HANDWRITING_ENABLED, ((SwitchPreference) preference).isChecked() ? 1 : 0); if (((SwitchPreference) preference).isChecked()) { InputMethodManager imm = mContext.getSystemService(InputMethodManager.class); InputMethodInfo inputMethod = imm.getCurrentInputMethodInfo(); if (inputMethod == null) break; Intent handwritingIntent = inputMethod.createStylusHandwritingSettingsActivityIntent(); if (handwritingIntent != null) { mContext.startActivity(handwritingIntent); } } break; case KEY_IGNORE_BUTTON: Settings.Secure.putInt(mContext.getContentResolver(), Loading @@ -206,6 +204,19 @@ public class StylusDevicesController extends AbstractPreferenceController implem return true; } @Override public boolean onPreferenceChange(Preference preference, Object newValue) { String key = preference.getKey(); switch (key) { case KEY_HANDWRITING: Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.STYLUS_HANDWRITING_ENABLED, (boolean) newValue ? 1 : 0); break; } return true; } @Override public final void displayPreference(PreferenceScreen screen) { mPreferencesContainer = (PreferenceCategory) screen.findPreference(getPreferenceKey()); Loading Loading @@ -233,7 +244,7 @@ public class StylusDevicesController extends AbstractPreferenceController implem mPreferencesContainer.addPreference(notesPref); } SwitchPreference currHandwritingPref = mPreferencesContainer.findPreference( PrimarySwitchPreference currHandwritingPref = mPreferencesContainer.findPreference( KEY_HANDWRITING); Preference handwritingPref = createOrUpdateHandwritingPreference(currHandwritingPref); if (currHandwritingPref == null) { Loading Loading @@ -328,5 +339,4 @@ public class StylusDevicesController extends AbstractPreferenceController implem return false; } } tests/robotests/src/com/android/settings/connecteddevice/stylus/StylusDevicesControllerTest.java +31 −19 Original line number Diff line number Diff line Loading @@ -57,6 +57,7 @@ import androidx.test.core.app.ApplicationProvider; import com.android.settings.R; import com.android.settings.dashboard.profileselector.UserAdapter; import com.android.settingslib.PrimarySwitchPreference; import com.android.settingslib.bluetooth.CachedBluetoothDevice; import com.android.settingslib.core.lifecycle.Lifecycle; Loading Loading @@ -403,9 +404,10 @@ public class StylusDevicesControllerTest { Settings.Secure.STYLUS_HANDWRITING_ENABLED, 1); showScreen(mController); SwitchPreference handwritingPref = (SwitchPreference) mPreferenceContainer.getPreference(1); PrimarySwitchPreference handwritingPref = (PrimarySwitchPreference) mPreferenceContainer.getPreference(1); assertThat(handwritingPref.isChecked()).isEqualTo(true); assertThat(handwritingPref.getCheckedState()).isEqualTo(true); } @Test Loading @@ -414,9 +416,10 @@ public class StylusDevicesControllerTest { Settings.Secure.STYLUS_HANDWRITING_ENABLED, 0); showScreen(mController); SwitchPreference handwritingPref = (SwitchPreference) mPreferenceContainer.getPreference(1); PrimarySwitchPreference handwritingPref = (PrimarySwitchPreference) mPreferenceContainer.getPreference(1); assertThat(handwritingPref.isChecked()).isEqualTo(false); assertThat(handwritingPref.getCheckedState()).isEqualTo(false); } @Test Loading @@ -424,21 +427,20 @@ public class StylusDevicesControllerTest { Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.STYLUS_HANDWRITING_ENABLED, 0); showScreen(mController); SwitchPreference handwritingPref = (SwitchPreference) mPreferenceContainer.getPreference(1); PrimarySwitchPreference handwritingPref = (PrimarySwitchPreference) mPreferenceContainer.getPreference(1); handwritingPref.performClick(); handwritingPref.callChangeListener(true); assertThat(handwritingPref.isChecked()).isEqualTo(true); assertThat(Settings.Secure.getInt(mContext.getContentResolver(), Settings.Secure.STYLUS_HANDWRITING_ENABLED, -1)).isEqualTo(1); } @Test public void handwritingPreference_startsHandwritingSettingsOnClickIfChecked() { Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.STYLUS_HANDWRITING_ENABLED, 0); public void handwritingPreference_startsHandwritingSettingsOnClick() { showScreen(mController); SwitchPreference handwritingPref = (SwitchPreference) mPreferenceContainer.getPreference(1); PrimarySwitchPreference handwritingPref = (PrimarySwitchPreference) mPreferenceContainer.getPreference(1); handwritingPref.performClick(); Loading @@ -447,11 +449,23 @@ public class StylusDevicesControllerTest { } @Test public void handwritingPreference_doesNotStartHandwritingSettingsOnClickIfNotChecked() { Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.STYLUS_HANDWRITING_ENABLED, 1); public void handwritingPreference_doesNotStartHandwritingSettingsOnChange() { showScreen(mController); PrimarySwitchPreference handwritingPref = (PrimarySwitchPreference) mPreferenceContainer.getPreference(1); handwritingPref.callChangeListener(true); verify(mInputMethodInfo, times(0)).createStylusHandwritingSettingsActivityIntent(); verify(mContext, times(0)).startActivity(any()); } @Test public void handwritingPreference_doesNotCreateIntentIfNoInputMethod() { when(mImm.getCurrentInputMethodInfo()).thenReturn(null); showScreen(mController); SwitchPreference handwritingPref = (SwitchPreference) mPreferenceContainer.getPreference(1); PrimarySwitchPreference handwritingPref = (PrimarySwitchPreference) mPreferenceContainer.getPreference(1); handwritingPref.performClick(); Loading @@ -463,14 +477,12 @@ public class StylusDevicesControllerTest { public void handwritingPreference_doesNotStartHandwritingSettingsIfNoIntent() { when(mInputMethodInfo.createStylusHandwritingSettingsActivityIntent()) .thenReturn(null); Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.STYLUS_HANDWRITING_ENABLED, 1); showScreen(mController); SwitchPreference handwritingPref = (SwitchPreference) mPreferenceContainer.getPreference(1); PrimarySwitchPreference handwritingPref = (PrimarySwitchPreference) mPreferenceContainer.getPreference(1); handwritingPref.performClick(); verify(mInputMethodInfo, times(0)).createStylusHandwritingSettingsActivityIntent(); verify(mContext, times(0)).startActivity(any()); } Loading Loading
src/com/android/settings/connecteddevice/stylus/StylusDevicesController.java +30 −20 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ import androidx.preference.SwitchPreference; import com.android.settings.R; import com.android.settings.dashboard.profileselector.ProfileSelectDialog; import com.android.settings.dashboard.profileselector.UserAdapter; import com.android.settingslib.PrimarySwitchPreference; import com.android.settingslib.bluetooth.BluetoothUtils; import com.android.settingslib.bluetooth.CachedBluetoothDevice; import com.android.settingslib.core.AbstractPreferenceController; Loading @@ -59,7 +60,8 @@ import java.util.List; * This class adds stylus preferences. */ public class StylusDevicesController extends AbstractPreferenceController implements Preference.OnPreferenceClickListener, LifecycleObserver, OnResume { Preference.OnPreferenceClickListener, Preference.OnPreferenceChangeListener, LifecycleObserver, OnResume { @VisibleForTesting static final String KEY_STYLUS = "device_stylus"; Loading Loading @@ -138,11 +140,15 @@ public class StylusDevicesController extends AbstractPreferenceController implem return pref; } private SwitchPreference createOrUpdateHandwritingPreference(SwitchPreference preference) { SwitchPreference pref = preference == null ? new SwitchPreference(mContext) : preference; private PrimarySwitchPreference createOrUpdateHandwritingPreference( PrimarySwitchPreference preference) { PrimarySwitchPreference pref = preference == null ? new PrimarySwitchPreference(mContext) : preference; pref.setKey(KEY_HANDWRITING); pref.setTitle(mContext.getString(R.string.stylus_textfield_handwriting)); pref.setIcon(R.drawable.ic_text_fields_alt); // Using a two-target preference, clicking will send an intent and change will toggle. pref.setOnPreferenceChangeListener(this); pref.setOnPreferenceClickListener(this); pref.setChecked(Settings.Secure.getInt(mContext.getContentResolver(), Settings.Secure.STYLUS_HANDWRITING_ENABLED, Loading @@ -165,7 +171,6 @@ public class StylusDevicesController extends AbstractPreferenceController implem @Override public boolean onPreferenceClick(Preference preference) { String key = preference.getKey(); switch (key) { case KEY_DEFAULT_NOTES: PackageManager pm = mContext.getPackageManager(); Loading @@ -181,21 +186,14 @@ public class StylusDevicesController extends AbstractPreferenceController implem } break; case KEY_HANDWRITING: Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.STYLUS_HANDWRITING_ENABLED, ((SwitchPreference) preference).isChecked() ? 1 : 0); if (((SwitchPreference) preference).isChecked()) { InputMethodManager imm = mContext.getSystemService(InputMethodManager.class); InputMethodInfo inputMethod = imm.getCurrentInputMethodInfo(); if (inputMethod == null) break; Intent handwritingIntent = inputMethod.createStylusHandwritingSettingsActivityIntent(); if (handwritingIntent != null) { mContext.startActivity(handwritingIntent); } } break; case KEY_IGNORE_BUTTON: Settings.Secure.putInt(mContext.getContentResolver(), Loading @@ -206,6 +204,19 @@ public class StylusDevicesController extends AbstractPreferenceController implem return true; } @Override public boolean onPreferenceChange(Preference preference, Object newValue) { String key = preference.getKey(); switch (key) { case KEY_HANDWRITING: Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.STYLUS_HANDWRITING_ENABLED, (boolean) newValue ? 1 : 0); break; } return true; } @Override public final void displayPreference(PreferenceScreen screen) { mPreferencesContainer = (PreferenceCategory) screen.findPreference(getPreferenceKey()); Loading Loading @@ -233,7 +244,7 @@ public class StylusDevicesController extends AbstractPreferenceController implem mPreferencesContainer.addPreference(notesPref); } SwitchPreference currHandwritingPref = mPreferencesContainer.findPreference( PrimarySwitchPreference currHandwritingPref = mPreferencesContainer.findPreference( KEY_HANDWRITING); Preference handwritingPref = createOrUpdateHandwritingPreference(currHandwritingPref); if (currHandwritingPref == null) { Loading Loading @@ -328,5 +339,4 @@ public class StylusDevicesController extends AbstractPreferenceController implem return false; } }
tests/robotests/src/com/android/settings/connecteddevice/stylus/StylusDevicesControllerTest.java +31 −19 Original line number Diff line number Diff line Loading @@ -57,6 +57,7 @@ import androidx.test.core.app.ApplicationProvider; import com.android.settings.R; import com.android.settings.dashboard.profileselector.UserAdapter; import com.android.settingslib.PrimarySwitchPreference; import com.android.settingslib.bluetooth.CachedBluetoothDevice; import com.android.settingslib.core.lifecycle.Lifecycle; Loading Loading @@ -403,9 +404,10 @@ public class StylusDevicesControllerTest { Settings.Secure.STYLUS_HANDWRITING_ENABLED, 1); showScreen(mController); SwitchPreference handwritingPref = (SwitchPreference) mPreferenceContainer.getPreference(1); PrimarySwitchPreference handwritingPref = (PrimarySwitchPreference) mPreferenceContainer.getPreference(1); assertThat(handwritingPref.isChecked()).isEqualTo(true); assertThat(handwritingPref.getCheckedState()).isEqualTo(true); } @Test Loading @@ -414,9 +416,10 @@ public class StylusDevicesControllerTest { Settings.Secure.STYLUS_HANDWRITING_ENABLED, 0); showScreen(mController); SwitchPreference handwritingPref = (SwitchPreference) mPreferenceContainer.getPreference(1); PrimarySwitchPreference handwritingPref = (PrimarySwitchPreference) mPreferenceContainer.getPreference(1); assertThat(handwritingPref.isChecked()).isEqualTo(false); assertThat(handwritingPref.getCheckedState()).isEqualTo(false); } @Test Loading @@ -424,21 +427,20 @@ public class StylusDevicesControllerTest { Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.STYLUS_HANDWRITING_ENABLED, 0); showScreen(mController); SwitchPreference handwritingPref = (SwitchPreference) mPreferenceContainer.getPreference(1); PrimarySwitchPreference handwritingPref = (PrimarySwitchPreference) mPreferenceContainer.getPreference(1); handwritingPref.performClick(); handwritingPref.callChangeListener(true); assertThat(handwritingPref.isChecked()).isEqualTo(true); assertThat(Settings.Secure.getInt(mContext.getContentResolver(), Settings.Secure.STYLUS_HANDWRITING_ENABLED, -1)).isEqualTo(1); } @Test public void handwritingPreference_startsHandwritingSettingsOnClickIfChecked() { Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.STYLUS_HANDWRITING_ENABLED, 0); public void handwritingPreference_startsHandwritingSettingsOnClick() { showScreen(mController); SwitchPreference handwritingPref = (SwitchPreference) mPreferenceContainer.getPreference(1); PrimarySwitchPreference handwritingPref = (PrimarySwitchPreference) mPreferenceContainer.getPreference(1); handwritingPref.performClick(); Loading @@ -447,11 +449,23 @@ public class StylusDevicesControllerTest { } @Test public void handwritingPreference_doesNotStartHandwritingSettingsOnClickIfNotChecked() { Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.STYLUS_HANDWRITING_ENABLED, 1); public void handwritingPreference_doesNotStartHandwritingSettingsOnChange() { showScreen(mController); PrimarySwitchPreference handwritingPref = (PrimarySwitchPreference) mPreferenceContainer.getPreference(1); handwritingPref.callChangeListener(true); verify(mInputMethodInfo, times(0)).createStylusHandwritingSettingsActivityIntent(); verify(mContext, times(0)).startActivity(any()); } @Test public void handwritingPreference_doesNotCreateIntentIfNoInputMethod() { when(mImm.getCurrentInputMethodInfo()).thenReturn(null); showScreen(mController); SwitchPreference handwritingPref = (SwitchPreference) mPreferenceContainer.getPreference(1); PrimarySwitchPreference handwritingPref = (PrimarySwitchPreference) mPreferenceContainer.getPreference(1); handwritingPref.performClick(); Loading @@ -463,14 +477,12 @@ public class StylusDevicesControllerTest { public void handwritingPreference_doesNotStartHandwritingSettingsIfNoIntent() { when(mInputMethodInfo.createStylusHandwritingSettingsActivityIntent()) .thenReturn(null); Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.STYLUS_HANDWRITING_ENABLED, 1); showScreen(mController); SwitchPreference handwritingPref = (SwitchPreference) mPreferenceContainer.getPreference(1); PrimarySwitchPreference handwritingPref = (PrimarySwitchPreference) mPreferenceContainer.getPreference(1); handwritingPref.performClick(); verify(mInputMethodInfo, times(0)).createStylusHandwritingSettingsActivityIntent(); verify(mContext, times(0)).startActivity(any()); } Loading