diff --git a/src/com/android/settings/PointerSpeedPreference.java b/src/com/android/settings/PointerSpeedPreference.java
index fa56635..0486e25 100644
--- a/src/com/android/settings/PointerSpeedPreference.java
+++ b/src/com/android/settings/PointerSpeedPreference.java
@@ -24,6 +24,7 @@
 import android.content.Context;
 import android.database.ContentObserver;
 import android.hardware.input.InputManager;
+import android.hardware.input.InputSettings;
 import android.os.Handler;
 import android.os.Parcel;
 import android.os.Parcelable;
@@ -74,16 +75,16 @@
         super.onBindDialogView(view);
 
         mSeekBar = getSeekBar(view);
-        mSeekBar.setMax(InputManager.MAX_POINTER_SPEED - InputManager.MIN_POINTER_SPEED);
-        mOldSpeed = mIm.getPointerSpeed(getContext());
-        mSeekBar.setProgress(mOldSpeed - InputManager.MIN_POINTER_SPEED);
+        mSeekBar.setMax(InputSettings.MAX_POINTER_SPEED - InputSettings.MIN_POINTER_SPEED);
+        mOldSpeed = InputSettings.getPointerSpeed(getContext());
+        mSeekBar.setProgress(mOldSpeed - InputSettings.MIN_POINTER_SPEED);
         mSeekBar.setOnSeekBarChangeListener(this);
         mSeekBar.setContentDescription(getTitle());
     }
 
     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) {
         if (!mTouchInProgress) {
-            mIm.tryPointerSpeed(progress + InputManager.MIN_POINTER_SPEED);
+            mIm.tryPointerSpeed(progress + InputSettings.MIN_POINTER_SPEED);
         }
         if (progress != mLastProgress) {
             seekBar.performHapticFeedback(CLOCK_TICK);
@@ -100,13 +101,13 @@
 
     public void onStopTrackingTouch(SeekBar seekBar) {
         mTouchInProgress = false;
-        mIm.tryPointerSpeed(seekBar.getProgress() + InputManager.MIN_POINTER_SPEED);
+        mIm.tryPointerSpeed(seekBar.getProgress() + InputSettings.MIN_POINTER_SPEED);
         mJankMonitor.end(CUJ_SETTINGS_SLIDER);
     }
 
     private void onSpeedChanged() {
-        int speed = mIm.getPointerSpeed(getContext());
-        mSeekBar.setProgress(speed - InputManager.MIN_POINTER_SPEED);
+        int speed = InputSettings.getPointerSpeed(getContext());
+        mSeekBar.setProgress(speed - InputSettings.MIN_POINTER_SPEED);
     }
 
     @Override
@@ -116,8 +117,8 @@
         final ContentResolver resolver = getContext().getContentResolver();
 
         if (positiveResult) {
-            mIm.setPointerSpeed(getContext(),
-                    mSeekBar.getProgress() + InputManager.MIN_POINTER_SPEED);
+            InputSettings.setPointerSpeed(getContext(),
+                    mSeekBar.getProgress() + InputSettings.MIN_POINTER_SPEED);
         } else {
             restoreOldState();
         }
@@ -158,7 +159,7 @@
         SavedState myState = (SavedState) state;
         super.onRestoreInstanceState(myState.getSuperState());
         mOldSpeed = myState.oldSpeed;
-        mIm.tryPointerSpeed(myState.progress + InputManager.MIN_POINTER_SPEED);
+        mIm.tryPointerSpeed(myState.progress + InputSettings.MIN_POINTER_SPEED);
     }
 
     private static class SavedState extends BaseSavedState {
diff --git a/src/com/android/settings/inputmethod/TrackpadBottomPreferenceController.java b/src/com/android/settings/inputmethod/TrackpadBottomPreferenceController.java
index 983925e..5133d04 100644
--- a/src/com/android/settings/inputmethod/TrackpadBottomPreferenceController.java
+++ b/src/com/android/settings/inputmethod/TrackpadBottomPreferenceController.java
@@ -17,29 +17,25 @@
 package com.android.settings.inputmethod;
 
 import android.content.Context;
-import android.hardware.input.InputManager;
+import android.hardware.input.InputSettings;
 
 import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 
 public class TrackpadBottomPreferenceController extends TogglePreferenceController {
 
-    private InputManager mIm;
-
     public TrackpadBottomPreferenceController(Context context, String key) {
         super(context, key);
-
-        mIm =  context.getSystemService(InputManager.class);
     }
 
     @Override
     public boolean isChecked() {
-        return mIm.useTouchpadRightClickZone(mContext);
+        return InputSettings.useTouchpadRightClickZone(mContext);
     }
 
     @Override
     public boolean setChecked(boolean isChecked) {
-        mIm.setTouchpadRightClickZone(mContext, isChecked);
+        InputSettings.setTouchpadRightClickZone(mContext, isChecked);
         return true;
     }
 
diff --git a/src/com/android/settings/inputmethod/TrackpadPointerSpeedPreferenceController.java b/src/com/android/settings/inputmethod/TrackpadPointerSpeedPreferenceController.java
index 59945cf..71b4119 100644
--- a/src/com/android/settings/inputmethod/TrackpadPointerSpeedPreferenceController.java
+++ b/src/com/android/settings/inputmethod/TrackpadPointerSpeedPreferenceController.java
@@ -17,7 +17,7 @@
 package com.android.settings.inputmethod;
 
 import android.content.Context;
-import android.hardware.input.InputManager;
+import android.hardware.input.InputSettings;
 
 import androidx.preference.PreferenceScreen;
 
@@ -26,13 +26,10 @@
 
 public class TrackpadPointerSpeedPreferenceController extends SliderPreferenceController {
 
-    private InputManager mIm;
     private SeekBarPreference mPreference;
 
     public TrackpadPointerSpeedPreferenceController(Context context, String key) {
         super(context, key);
-
-        mIm = context.getSystemService(InputManager.class);
     }
 
     @Override
@@ -55,22 +52,22 @@
         if (position < getMin() || position > getMax()) {
             return false;
         }
-        mIm.setTouchpadPointerSpeed(mContext, position);
+        InputSettings.setTouchpadPointerSpeed(mContext, position);
         return true;
     }
 
     @Override
     public int getSliderPosition() {
-        return mIm.getTouchpadPointerSpeed(mContext);
+        return InputSettings.getTouchpadPointerSpeed(mContext);
     }
 
     @Override
     public int getMin() {
-        return InputManager.MIN_POINTER_SPEED;
+        return InputSettings.MIN_POINTER_SPEED;
     }
 
     @Override
     public int getMax() {
-        return InputManager.MAX_POINTER_SPEED;
+        return InputSettings.MAX_POINTER_SPEED;
     }
 }
diff --git a/src/com/android/settings/inputmethod/TrackpadReverseScrollingPreferenceController.java b/src/com/android/settings/inputmethod/TrackpadReverseScrollingPreferenceController.java
index dfdd942..0bbfb98 100644
--- a/src/com/android/settings/inputmethod/TrackpadReverseScrollingPreferenceController.java
+++ b/src/com/android/settings/inputmethod/TrackpadReverseScrollingPreferenceController.java
@@ -17,29 +17,25 @@
 package com.android.settings.inputmethod;
 
 import android.content.Context;
-import android.hardware.input.InputManager;
+import android.hardware.input.InputSettings;
 
 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);
+        return InputSettings.useTouchpadNaturalScrolling(mContext);
     }
 
     @Override
     public boolean setChecked(boolean isChecked) {
-        mIm.setTouchpadNaturalScrolling(mContext, isChecked);
+        InputSettings.setTouchpadNaturalScrolling(mContext, isChecked);
         return true;
     }
 
diff --git a/src/com/android/settings/inputmethod/TrackpadTapToClickPreferenceController.java b/src/com/android/settings/inputmethod/TrackpadTapToClickPreferenceController.java
index b057baa..8655307 100644
--- a/src/com/android/settings/inputmethod/TrackpadTapToClickPreferenceController.java
+++ b/src/com/android/settings/inputmethod/TrackpadTapToClickPreferenceController.java
@@ -17,29 +17,25 @@
 package com.android.settings.inputmethod;
 
 import android.content.Context;
-import android.hardware.input.InputManager;
+import android.hardware.input.InputSettings;
 
 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);
+        return InputSettings.useTouchpadTapToClick(mContext);
     }
 
     @Override
     public boolean setChecked(boolean isChecked) {
-        mIm.setTouchpadTapToClick(mContext, isChecked);
+        InputSettings.setTouchpadTapToClick(mContext, isChecked);
         return true;
     }
 
diff --git a/tests/robotests/src/com/android/settings/inputmethod/TrackpadPointerSpeedPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/inputmethod/TrackpadPointerSpeedPreferenceControllerTest.java
index 5c70877..daf1773 100644
--- a/tests/robotests/src/com/android/settings/inputmethod/TrackpadPointerSpeedPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/inputmethod/TrackpadPointerSpeedPreferenceControllerTest.java
@@ -19,7 +19,7 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import android.content.Context;
-import android.hardware.input.InputManager;
+import android.hardware.input.InputSettings;
 import android.os.UserHandle;
 import android.provider.Settings;
 
@@ -50,7 +50,7 @@
         mDefaultSpeed = Settings.System.getIntForUser(
                 mContext.getContentResolver(),
                 SETTING_KEY,
-                InputManager.DEFAULT_POINTER_SPEED,
+                InputSettings.DEFAULT_POINTER_SPEED,
                 UserHandle.USER_CURRENT);
     }
 
@@ -62,12 +62,12 @@
 
     @Test
     public void getMin_expected() {
-        assertThat(mController.getMin()).isEqualTo(InputManager.MIN_POINTER_SPEED);
+        assertThat(mController.getMin()).isEqualTo(InputSettings.MIN_POINTER_SPEED);
     }
 
     @Test
     public void getMax_expected() {
-        assertThat(mController.getMax()).isEqualTo(InputManager.MAX_POINTER_SPEED);
+        assertThat(mController.getMax()).isEqualTo(InputSettings.MAX_POINTER_SPEED);
     }
 
     @Test
@@ -89,7 +89,7 @@
 
     @Test
     public void setSliderPosition_speedValueOverMaxValue_shouldReturnFalse() {
-        int inputSpeed = InputManager.MAX_POINTER_SPEED + 1;
+        int inputSpeed = InputSettings.MAX_POINTER_SPEED + 1;
 
         boolean result = mController.setSliderPosition(inputSpeed);
 
@@ -99,7 +99,7 @@
 
     @Test
     public void setSliderPosition_speedValueOverMinValue_shouldReturnFalse() {
-        int inputSpeed = InputManager.MIN_POINTER_SPEED - 1;
+        int inputSpeed = InputSettings.MIN_POINTER_SPEED - 1;
 
         boolean result = mController.setSliderPosition(inputSpeed);
 
