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

Commit a10dc528 authored by Taran Singh's avatar Taran Singh Committed by Android (Google) Code Review
Browse files

Merge "Introduce developer option for Stylus handwriting" into tm-dev

parents 602ea501 5a30a808
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -12317,6 +12317,14 @@
    <!-- Location setting: preference summary - describes the behavior of forcing full raw GNSS satellite measurements [CHAR LIMIT=NONE] -->
    <string name="enable_gnss_raw_meas_full_tracking_summary">Track all GNSS constellations and frequencies with no duty cycling</string>
    <!-- Developer options Input method category strings -->
    <!-- Title for input method category [CHAR LIMIT=30]-->
    <string name="input_method_category">Input Method</string>
    <!-- [CHAR LIMIT=30] Title for Stylus handwriting settings -->
    <string name="stylus_handwriting">Stylus handwriting</string>
    <!-- [CHAR LIMIT=130] Summary for Stylus handwriting toggle -->
    <string name="stylus_handwriting_summary">When enabled, current Input method receives stylus MotionEvent if an Editor is focused.</string>
    <!-- Name of setting for switching device theme [CHAR LIMIT=60] -->
    <string name="device_theme">Device theme</string>
    <!-- Name of default device theme [CHAR LIMIT=60] -->
+11 −0
Original line number Diff line number Diff line
@@ -709,4 +709,15 @@
            android:key="location_indicator_settings"
            settings:controller="com.android.settings.location.LocationIndicatorsPreferenceController"/>
    </PreferenceCategory>

    <PreferenceCategory
        android:key="input_method_category"
        android:title="@string/input_method_category"
        android:order="1400">

        <SwitchPreference
            android:key="stylus_handwriting"
            android:title="@string/stylus_handwriting"
            android:summary="@string/stylus_handwriting_summary" />
    </PreferenceCategory>
</PreferenceScreen>
+1 −0
Original line number Diff line number Diff line
@@ -582,6 +582,7 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra
                bluetoothA2dpConfigStore, fragment));
        controllers.add(new SharedDataPreferenceController(context));
        controllers.add(new OverlaySettingsPreferenceController(context));
        controllers.add(new StylusHandwritingPreferenceController(context));

        return controllers;
    }
+69 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2022 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.settings.development;

import android.content.Context;
import android.provider.Settings;

import androidx.preference.Preference;
import androidx.preference.SwitchPreference;

import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.development.DeveloperOptionsPreferenceController;

class StylusHandwritingPreferenceController extends DeveloperOptionsPreferenceController
        implements Preference.OnPreferenceChangeListener, PreferenceControllerMixin {

    static final int SETTING_VALUE_ON = 1;
    static final int SETTING_VALUE_OFF = 0;

    private static final String STYLUS_HANDWRITING_OPTIONS_KEY = "stylus_handwriting";

    StylusHandwritingPreferenceController(Context context) {
        super(context);
    }

    @Override
    public String getPreferenceKey() {
        return STYLUS_HANDWRITING_OPTIONS_KEY;
    }

    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        final boolean isEnabled = (Boolean) newValue;
        Settings.Global.putInt(mContext.getContentResolver(),
                Settings.Global.STYLUS_HANDWRITING_ENABLED,
                isEnabled ? SETTING_VALUE_ON : SETTING_VALUE_OFF);

        return true;
    }

    @Override
    public void updateState(Preference preference) {
        final int enable = Settings.Global.getInt(mContext.getContentResolver(),
                Settings.Global.STYLUS_HANDWRITING_ENABLED, SETTING_VALUE_OFF);
        ((SwitchPreference) mPreference).setChecked(enable != SETTING_VALUE_OFF);
    }

    @Override
    protected void onDeveloperOptionsSwitchDisabled() {
        super.onDeveloperOptionsSwitchDisabled();
        Settings.Global.putInt(mContext.getContentResolver(),
                Settings.Global.STYLUS_HANDWRITING_ENABLED, SETTING_VALUE_OFF);
        ((SwitchPreference) mPreference).setChecked(false);
    }
}
+111 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2022 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.settings.development;

import static com.android.settings.development.StylusHandwritingPreferenceController.SETTING_VALUE_OFF;
import static com.android.settings.development.StylusHandwritingPreferenceController.SETTING_VALUE_ON;

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.content.Context;
import android.provider.Settings;

import androidx.preference.PreferenceScreen;
import androidx.preference.SwitchPreference;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;

@RunWith(RobolectricTestRunner.class)
public class StylusHandwritingPreferenceControllerTest {

    @Mock
    private SwitchPreference mPreference;
    @Mock
    private PreferenceScreen mPreferenceScreen;

    private Context mContext;
    private StylusHandwritingPreferenceController mController;

    @Before
    public void setup() {
        MockitoAnnotations.initMocks(this);
        mContext = RuntimeEnvironment.application;
        mController = new StylusHandwritingPreferenceController(mContext);
        when(mPreferenceScreen.findPreference(mController.getPreferenceKey()))
            .thenReturn(mPreference);
        mController.displayPreference(mPreferenceScreen);
    }

    @Test
    public void onPreferenceChange_settingEnabled_stylusHandwritingShouldBeOn() {
        mController.onPreferenceChange(mPreference, true /* new value */);

        final int mode = Settings.Global.getInt(mContext.getContentResolver(),
                Settings.Global.STYLUS_HANDWRITING_ENABLED, -1 /* default */);

        assertThat(mode).isEqualTo(SETTING_VALUE_ON);
    }

    @Test
    public void onPreferenceChange_settingEnabled_stylusHandwritingShouldBeOff() {
        mController.onPreferenceChange(mPreference, false /* new value */);

        final int mode = Settings.Global.getInt(mContext.getContentResolver(),
                Settings.Global.STYLUS_HANDWRITING_ENABLED, -1 /* default */);

        assertThat(mode).isEqualTo(SETTING_VALUE_OFF);
    }

    @Test
    public void updateState_settingDisabled_preferenceShouldNotBeChecked() {
        Settings.Global.putInt(mContext.getContentResolver(),
                Settings.Global.STYLUS_HANDWRITING_ENABLED, SETTING_VALUE_OFF);
        mController.updateState(mPreference);

        verify(mPreference).setChecked(false);
    }

    @Test
    public void updateState_settingEnabled_preferenceShouldBeChecked() {
        Settings.Global.putInt(mContext.getContentResolver(),
                Settings.Global.STYLUS_HANDWRITING_ENABLED, SETTING_VALUE_ON);
        mController.updateState(mPreference);

        verify(mPreference).setChecked(true);
    }

    @Test
    public void onDeveloperOptionsSwitchDisabled_shouldDisablePreference() {
        mController.onDeveloperOptionsSwitchDisabled();

        final int mode = Settings.Global.getInt(mContext.getContentResolver(),
                Settings.Global.STYLUS_HANDWRITING_ENABLED, -1 /* default */);

        assertThat(mode).isEqualTo(SETTING_VALUE_OFF);
        verify(mPreference).setChecked(false);
        verify(mPreference).setEnabled(false);
    }
}