Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 24a28637 authored by Vania Januar's avatar Vania Januar
Browse files

Use two-target preference for stylus handwriting toggle.

Bug: 294279890
Test: StylusDevicesControllerTest
Change-Id: I8e83fb3a8bb76469c4bf1b99df5524930ebad086
parent 270b7ef1
Loading
Loading
Loading
Loading
+30 −20
Original line number Diff line number Diff line
@@ -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;
@@ -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";
@@ -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,
@@ -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();
@@ -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(),
@@ -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());
@@ -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) {
@@ -328,5 +339,4 @@ public class StylusDevicesController extends AbstractPreferenceController implem

        return false;
    }

}
+31 −19
Original line number Diff line number Diff line
@@ -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;

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

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

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