diff --git a/res/xml/trackpad_gesture_settings.xml b/res/xml/trackpad_gesture_settings.xml
index dfc419906a5..6cac7f61c70 100644
--- a/res/xml/trackpad_gesture_settings.xml
+++ b/res/xml/trackpad_gesture_settings.xml
@@ -24,39 +24,45 @@
android:title="@string/trackpad_go_back_title"
android:summary="@string/trackpad_go_back_summary"
android:icon="@drawable/ic_trackpad_gesture_back"
- android:order="10"/>
+ android:order="10"
+ settings:controller="com.android.settings.inputmethod.TrackpadGoBackPreferenceController"/>
+ android:order="20"
+ settings:controller="com.android.settings.inputmethod.TrackpadGoHomePreferenceController"/>
+ android:order="30"
+ settings:controller="com.android.settings.inputmethod.TrackpadRecentAppsPreferenceController"/>
+ android:order="40"
+ settings:controller="com.android.settings.inputmethod.TrackpadNotificationsPreferenceController"/>
+ android:order="50"
+ settings:controller="com.android.settings.inputmethod.TrackpadSwitchAppsPreferenceController"/>
\ No newline at end of file
diff --git a/res/xml/trackpad_settings.xml b/res/xml/trackpad_settings.xml
index 6401fb87c49..4a0897db766 100644
--- a/res/xml/trackpad_settings.xml
+++ b/res/xml/trackpad_settings.xml
@@ -32,6 +32,7 @@
android:key="trackpad_tap_to_click"
android:title="@string/trackpad_tap_to_click"
android:icon="@drawable/ic_trackpad_tap_to_click"
+ settings:controller="com.android.settings.inputmethod.TrackpadTapToClickPreferenceController"
android:order="10"/>
+ settings:controller="com.android.settings.inputmethod.TrackpadPointerSpeedPreferenceController"/>
getMax()) {
+ return false;
+ }
+ mIm.setTouchpadPointerSpeed(mContext, position);
+ return true;
+ }
+
+ @Override
+ public int getSliderPosition() {
+ return mIm.getTouchpadPointerSpeed(mContext);
+ }
+
+ @Override
+ public int getMin() {
+ return InputManager.MIN_POINTER_SPEED;
+ }
+
+ @Override
+ public int getMax() {
+ return InputManager.MAX_POINTER_SPEED;
+ }
+}
diff --git a/src/com/android/settings/inputmethod/TrackpadRecentAppsPreferenceController.java b/src/com/android/settings/inputmethod/TrackpadRecentAppsPreferenceController.java
new file mode 100644
index 00000000000..eab2b330968
--- /dev/null
+++ b/src/com/android/settings/inputmethod/TrackpadRecentAppsPreferenceController.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2023 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.inputmethod;
+
+import android.content.Context;
+import android.provider.Settings;
+
+import com.android.settings.R;
+import com.android.settings.core.TogglePreferenceController;
+
+public class TrackpadRecentAppsPreferenceController extends TogglePreferenceController {
+
+ private static final String SETTING_KEY = Settings.Secure.TRACKPAD_GESTURE_OVERVIEW_ENABLED;
+
+ public TrackpadRecentAppsPreferenceController(Context context, String key) {
+ super(context, key);
+ }
+
+ @Override
+ public boolean isChecked() {
+ return Settings.Secure.getInt(mContext.getContentResolver(), SETTING_KEY, 1) != 0;
+ }
+
+ @Override
+ public boolean setChecked(boolean isChecked) {
+ Settings.Secure.putInt(mContext.getContentResolver(), SETTING_KEY, isChecked ? 1 : 0);
+ return true;
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
+ }
+
+ @Override
+ public int getSliceHighlightMenuRes() {
+ return R.string.menu_key_system;
+ }
+}
diff --git a/src/com/android/settings/inputmethod/TrackpadReverseScrollingPreferenceController.java b/src/com/android/settings/inputmethod/TrackpadReverseScrollingPreferenceController.java
new file mode 100644
index 00000000000..dfdd942290f
--- /dev/null
+++ b/src/com/android/settings/inputmethod/TrackpadReverseScrollingPreferenceController.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2023 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.inputmethod;
+
+import android.content.Context;
+import android.hardware.input.InputManager;
+
+import com.android.settings.R;
+import com.android.settings.core.TogglePreferenceController;
+
+public class TrackpadReverseScrollingPreferenceController extends TogglePreferenceController {
+
+ private InputManager mIm;
+
+ public TrackpadReverseScrollingPreferenceController(Context context, String key) {
+ super(context, key);
+
+ mIm = context.getSystemService(InputManager.class);
+ }
+
+ @Override
+ public boolean isChecked() {
+ return mIm.useTouchpadNaturalScrolling(mContext);
+ }
+
+ @Override
+ public boolean setChecked(boolean isChecked) {
+ mIm.setTouchpadNaturalScrolling(mContext, isChecked);
+ return true;
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
+ }
+
+ @Override
+ public int getSliceHighlightMenuRes() {
+ return R.string.menu_key_system;
+ }
+}
diff --git a/src/com/android/settings/inputmethod/TrackpadSwitchAppsPreferenceController.java b/src/com/android/settings/inputmethod/TrackpadSwitchAppsPreferenceController.java
new file mode 100644
index 00000000000..84de64e9494
--- /dev/null
+++ b/src/com/android/settings/inputmethod/TrackpadSwitchAppsPreferenceController.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2023 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.inputmethod;
+
+import android.content.Context;
+import android.provider.Settings;
+
+import com.android.settings.R;
+import com.android.settings.core.TogglePreferenceController;
+
+public class TrackpadSwitchAppsPreferenceController extends TogglePreferenceController {
+
+ private static final String SETTING_KEY = Settings.Secure.TRACKPAD_GESTURE_QUICK_SWITCH_ENABLED;
+
+ public TrackpadSwitchAppsPreferenceController(Context context, String key) {
+ super(context, key);
+ }
+
+ @Override
+ public boolean isChecked() {
+ return Settings.Secure.getInt(mContext.getContentResolver(), SETTING_KEY, 1) != 0;
+ }
+
+ @Override
+ public boolean setChecked(boolean isChecked) {
+ Settings.Secure.putInt(mContext.getContentResolver(), SETTING_KEY, isChecked ? 1 : 0);
+ return true;
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
+ }
+
+ @Override
+ public int getSliceHighlightMenuRes() {
+ return R.string.menu_key_system;
+ }
+}
diff --git a/src/com/android/settings/inputmethod/TrackpadTapToClickPreferenceController.java b/src/com/android/settings/inputmethod/TrackpadTapToClickPreferenceController.java
new file mode 100644
index 00000000000..b057baaa439
--- /dev/null
+++ b/src/com/android/settings/inputmethod/TrackpadTapToClickPreferenceController.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2023 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.inputmethod;
+
+import android.content.Context;
+import android.hardware.input.InputManager;
+
+import com.android.settings.R;
+import com.android.settings.core.TogglePreferenceController;
+
+public class TrackpadTapToClickPreferenceController extends TogglePreferenceController {
+
+ private InputManager mIm;
+
+ public TrackpadTapToClickPreferenceController(Context context, String key) {
+ super(context, key);
+
+ mIm = context.getSystemService(InputManager.class);
+ }
+
+ @Override
+ public boolean isChecked() {
+ return mIm.useTouchpadTapToClick(mContext);
+ }
+
+ @Override
+ public boolean setChecked(boolean isChecked) {
+ mIm.setTouchpadTapToClick(mContext, isChecked);
+ return true;
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
+ }
+
+ @Override
+ public int getSliceHighlightMenuRes() {
+ return R.string.menu_key_system;
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/inputmethod/TrackpadGoBackPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/inputmethod/TrackpadGoBackPreferenceControllerTest.java
new file mode 100644
index 00000000000..0e1705e6d00
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/inputmethod/TrackpadGoBackPreferenceControllerTest.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2023 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.inputmethod;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+import android.provider.Settings;
+
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+
+/** Tests for {@link TrackpadGoBackPreferenceController} */
+@RunWith(RobolectricTestRunner.class)
+public class TrackpadGoBackPreferenceControllerTest {
+
+ private static final String PREFERENCE_KEY = "gesture_go_back";
+ private static final String SETTING_KEY = Settings.Secure.TRACKPAD_GESTURE_BACK_ENABLED;
+
+ private Context mContext;
+ private TrackpadGoBackPreferenceController mController;
+
+ @Before
+ public void setUp() {
+ mContext = ApplicationProvider.getApplicationContext();
+ mController = new TrackpadGoBackPreferenceController(mContext, PREFERENCE_KEY);
+ }
+
+ @Test
+ public void getAvailabilityStatus_expected() {
+ assertThat(mController.getAvailabilityStatus())
+ .isEqualTo(BasePreferenceController.AVAILABLE);
+ }
+
+ @Test
+ public void getSliceHighlightMenuRes_expected() {
+ assertThat(mController.getSliceHighlightMenuRes()).isEqualTo(R.string.menu_key_system);
+ }
+
+ @Test
+ public void setChecked_true_shouldReturn1() {
+ mController.setChecked(true);
+
+ int result = Settings.Secure.getInt(mContext.getContentResolver(), SETTING_KEY, 1);
+
+ assertThat(result).isEqualTo(1);
+ }
+
+ @Test
+ public void setChecked_false_shouldReturn0() {
+ mController.setChecked(false);
+
+ int result = Settings.Secure.getInt(mContext.getContentResolver(), SETTING_KEY, 1);
+
+ assertThat(result).isEqualTo(0);
+ }
+
+ @Test
+ public void isChecked_providerPutInt1_returnTrue() {
+ Settings.Secure.putInt(mContext.getContentResolver(), SETTING_KEY, 1);
+
+ boolean result = mController.isChecked();
+
+ assertThat(result).isTrue();
+ }
+
+ @Test
+ public void isChecked_providerPutInt0_returnFalse() {
+ Settings.Secure.putInt(mContext.getContentResolver(), SETTING_KEY, 0);
+
+ boolean result = mController.isChecked();
+
+ assertThat(result).isFalse();
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/inputmethod/TrackpadGoHomePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/inputmethod/TrackpadGoHomePreferenceControllerTest.java
new file mode 100644
index 00000000000..3289bccbd52
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/inputmethod/TrackpadGoHomePreferenceControllerTest.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2023 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.inputmethod;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+import android.provider.Settings;
+
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+
+/** Tests for {@link TrackpadGoHomePreferenceController} */
+@RunWith(RobolectricTestRunner.class)
+public class TrackpadGoHomePreferenceControllerTest {
+
+ private static final String PREFERENCE_KEY = "gesture_go_home";
+ private static final String SETTING_KEY = Settings.Secure.TRACKPAD_GESTURE_HOME_ENABLED;
+
+ private Context mContext;
+ private TrackpadGoHomePreferenceController mController;
+
+ @Before
+ public void setUp() {
+ mContext = ApplicationProvider.getApplicationContext();
+ mController = new TrackpadGoHomePreferenceController(mContext, PREFERENCE_KEY);
+ }
+
+ @Test
+ public void getAvailabilityStatus_expected() {
+ assertThat(mController.getAvailabilityStatus())
+ .isEqualTo(BasePreferenceController.AVAILABLE);
+ }
+
+ @Test
+ public void getSliceHighlightMenuRes_expected() {
+ assertThat(mController.getSliceHighlightMenuRes()).isEqualTo(R.string.menu_key_system);
+ }
+
+ @Test
+ public void setChecked_true_shouldReturn1() {
+ mController.setChecked(true);
+
+ int result = Settings.Secure.getInt(mContext.getContentResolver(), SETTING_KEY, 1);
+
+ assertThat(result).isEqualTo(1);
+ }
+
+ @Test
+ public void setChecked_false_shouldReturn0() {
+ mController.setChecked(false);
+
+ int result = Settings.Secure.getInt(mContext.getContentResolver(), SETTING_KEY, 1);
+
+ assertThat(result).isEqualTo(0);
+ }
+
+ @Test
+ public void isChecked_providerPutInt1_returnTrue() {
+ Settings.Secure.putInt(mContext.getContentResolver(), SETTING_KEY, 1);
+
+ boolean result = mController.isChecked();
+
+ assertThat(result).isTrue();
+ }
+
+ @Test
+ public void isChecked_providerPutInt0_returnFalse() {
+ Settings.Secure.putInt(mContext.getContentResolver(), SETTING_KEY, 0);
+
+ boolean result = mController.isChecked();
+
+ assertThat(result).isFalse();
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/inputmethod/TrackpadNotificationsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/inputmethod/TrackpadNotificationsPreferenceControllerTest.java
new file mode 100644
index 00000000000..3df16272655
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/inputmethod/TrackpadNotificationsPreferenceControllerTest.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2023 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.inputmethod;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+import android.provider.Settings;
+
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+
+/** Tests for {@link TrackpadNotificationsPreferenceController} */
+@RunWith(RobolectricTestRunner.class)
+public class TrackpadNotificationsPreferenceControllerTest {
+
+ private static final String PREFERENCE_KEY = "gesture_notifications";
+ private static final String SETTING_KEY = Settings.Secure.TRACKPAD_GESTURE_NOTIFICATION_ENABLED;
+
+ private Context mContext;
+ private TrackpadNotificationsPreferenceController mController;
+
+ @Before
+ public void setUp() {
+ mContext = ApplicationProvider.getApplicationContext();
+ mController = new TrackpadNotificationsPreferenceController(mContext, PREFERENCE_KEY);
+ }
+
+ @Test
+ public void getAvailabilityStatus_expected() {
+ assertThat(mController.getAvailabilityStatus())
+ .isEqualTo(BasePreferenceController.AVAILABLE);
+ }
+
+ @Test
+ public void getSliceHighlightMenuRes_expected() {
+ assertThat(mController.getSliceHighlightMenuRes()).isEqualTo(R.string.menu_key_system);
+ }
+
+ @Test
+ public void setChecked_true_shouldReturn1() {
+ mController.setChecked(true);
+
+ int result = Settings.Secure.getInt(mContext.getContentResolver(), SETTING_KEY, 1);
+
+ assertThat(result).isEqualTo(1);
+ }
+
+ @Test
+ public void setChecked_false_shouldReturn0() {
+ mController.setChecked(false);
+
+ int result = Settings.Secure.getInt(mContext.getContentResolver(), SETTING_KEY, 1);
+
+ assertThat(result).isEqualTo(0);
+ }
+
+ @Test
+ public void isChecked_providerPutInt1_returnTrue() {
+ Settings.Secure.putInt(mContext.getContentResolver(), SETTING_KEY, 1);
+
+ boolean result = mController.isChecked();
+
+ assertThat(result).isTrue();
+ }
+
+ @Test
+ public void isChecked_providerPutInt0_returnFalse() {
+ Settings.Secure.putInt(mContext.getContentResolver(), SETTING_KEY, 0);
+
+ boolean result = mController.isChecked();
+
+ assertThat(result).isFalse();
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/inputmethod/TrackpadRecentAppsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/inputmethod/TrackpadRecentAppsPreferenceControllerTest.java
new file mode 100644
index 00000000000..dbed5421a00
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/inputmethod/TrackpadRecentAppsPreferenceControllerTest.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2023 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.inputmethod;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+import android.provider.Settings;
+
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+
+/** Tests for {@link TrackpadRecentAppsPreferenceController} */
+@RunWith(RobolectricTestRunner.class)
+public class TrackpadRecentAppsPreferenceControllerTest {
+
+ private static final String PREFERENCE_KEY = "gesture_recent_apps";
+ private static final String SETTING_KEY = Settings.Secure.TRACKPAD_GESTURE_OVERVIEW_ENABLED;
+
+ private Context mContext;
+ private TrackpadRecentAppsPreferenceController mController;
+
+ @Before
+ public void setUp() {
+ mContext = ApplicationProvider.getApplicationContext();
+ mController = new TrackpadRecentAppsPreferenceController(mContext, PREFERENCE_KEY);
+ }
+
+ @Test
+ public void getAvailabilityStatus_expected() {
+ assertThat(mController.getAvailabilityStatus())
+ .isEqualTo(BasePreferenceController.AVAILABLE);
+ }
+
+ @Test
+ public void getSliceHighlightMenuRes_expected() {
+ assertThat(mController.getSliceHighlightMenuRes()).isEqualTo(R.string.menu_key_system);
+ }
+
+ @Test
+ public void setChecked_true_shouldReturn1() {
+ mController.setChecked(true);
+
+ int result = Settings.Secure.getInt(mContext.getContentResolver(), SETTING_KEY, 1);
+
+ assertThat(result).isEqualTo(1);
+ }
+
+ @Test
+ public void setChecked_false_shouldReturn0() {
+ mController.setChecked(false);
+
+ int result = Settings.Secure.getInt(mContext.getContentResolver(), SETTING_KEY, 1);
+
+ assertThat(result).isEqualTo(0);
+ }
+
+ @Test
+ public void isChecked_providerPutInt1_returnTrue() {
+ Settings.Secure.putInt(mContext.getContentResolver(), SETTING_KEY, 1);
+
+ boolean result = mController.isChecked();
+
+ assertThat(result).isTrue();
+ }
+
+ @Test
+ public void isChecked_providerPutInt0_returnFalse() {
+ Settings.Secure.putInt(mContext.getContentResolver(), SETTING_KEY, 0);
+
+ boolean result = mController.isChecked();
+
+ assertThat(result).isFalse();
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/inputmethod/TrackpadSwitchAppsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/inputmethod/TrackpadSwitchAppsPreferenceControllerTest.java
new file mode 100644
index 00000000000..3f160258e29
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/inputmethod/TrackpadSwitchAppsPreferenceControllerTest.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2023 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.inputmethod;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+import android.provider.Settings;
+
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+
+/** Tests for {@link TrackpadSwitchAppsPreferenceController} */
+@RunWith(RobolectricTestRunner.class)
+public class TrackpadSwitchAppsPreferenceControllerTest {
+
+ private static final String PREFERENCE_KEY = "gesture_switch_apps";
+ private static final String SETTING_KEY = Settings.Secure.TRACKPAD_GESTURE_QUICK_SWITCH_ENABLED;
+
+ private Context mContext;
+ private TrackpadSwitchAppsPreferenceController mController;
+
+ @Before
+ public void setUp() {
+ mContext = ApplicationProvider.getApplicationContext();
+ mController = new TrackpadSwitchAppsPreferenceController(mContext, PREFERENCE_KEY);
+ }
+
+ @Test
+ public void getAvailabilityStatus_expected() {
+ assertThat(mController.getAvailabilityStatus())
+ .isEqualTo(BasePreferenceController.AVAILABLE);
+ }
+
+ @Test
+ public void getSliceHighlightMenuRes_expected() {
+ assertThat(mController.getSliceHighlightMenuRes()).isEqualTo(R.string.menu_key_system);
+ }
+
+ @Test
+ public void setChecked_true_shouldReturn1() {
+ mController.setChecked(true);
+
+ int result = Settings.Secure.getInt(mContext.getContentResolver(), SETTING_KEY, 1);
+
+ assertThat(result).isEqualTo(1);
+ }
+
+ @Test
+ public void setChecked_false_shouldReturn0() {
+ mController.setChecked(false);
+
+ int result = Settings.Secure.getInt(mContext.getContentResolver(), SETTING_KEY, 1);
+
+ assertThat(result).isEqualTo(0);
+ }
+
+ @Test
+ public void isChecked_providerPutInt1_returnTrue() {
+ Settings.Secure.putInt(mContext.getContentResolver(), SETTING_KEY, 1);
+
+ boolean result = mController.isChecked();
+
+ assertThat(result).isTrue();
+ }
+
+ @Test
+ public void isChecked_providerPutInt0_returnFalse() {
+ Settings.Secure.putInt(mContext.getContentResolver(), SETTING_KEY, 0);
+
+ boolean result = mController.isChecked();
+
+ assertThat(result).isFalse();
+ }
+}