diff --git a/res/values/strings.xml b/res/values/strings.xml
index 4928c11..81c8973 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -4439,10 +4439,6 @@
     <string name="keyboard_a11y_category">Accessibility</string>
     <!-- Title for the 'physical keyboard' settings screen. [CHAR LIMIT=35] -->
     <string name="physical_keyboard_title">Physical keyboard</string>
-    <!-- Title for the 'show virtual keyboard' preference switch. [CHAR LIMIT=35] -->
-    <string name="show_ime">Use on-screen keyboard</string>
-    <!-- Summary text for the 'add virtual keyboard' preference sub-screen. [CHAR LIMIT=100] -->
-    <string name="show_ime_summary">Keep it on screen while physical keyboard is active</string>
     <!-- Title for the 'Bounce keys' preference switch. [CHAR LIMIT=35] -->
     <string name="bounce_keys">Bounce keys</string>
     <!-- Summary text for the 'Bounce keys' preference sub-screen. [CHAR LIMIT=300] -->
diff --git a/res/xml/physical_keyboard_settings.xml b/res/xml/physical_keyboard_settings.xml
index 5b545bb..dd2b709 100644
--- a/res/xml/physical_keyboard_settings.xml
+++ b/res/xml/physical_keyboard_settings.xml
@@ -21,12 +21,6 @@
     <PreferenceCategory
         android:key="keyboard_options_category"
         android:title="@string/keyboard_options_category">
-        <SwitchPreferenceCompat
-            android:key="show_virtual_keyboard_switch"
-            android:title="@string/show_ime"
-            android:summary="@string/show_ime_summary"
-            android:defaultValue="false" />
-
         <Preference
             android:key="keyboard_shortcuts_helper"
             android:title="@string/keyboard_shortcuts_helper"
diff --git a/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java b/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java
index 5ba1c84..29292a1 100644
--- a/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java
+++ b/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java
@@ -70,7 +70,6 @@
 
     private static final String KEYBOARD_OPTIONS_CATEGORY = "keyboard_options_category";
     private static final String KEYBOARD_A11Y_CATEGORY = "keyboard_a11y_category";
-    private static final String SHOW_VIRTUAL_KEYBOARD_SWITCH = "show_virtual_keyboard_switch";
     private static final String ACCESSIBILITY_BOUNCE_KEYS = "accessibility_bounce_keys";
     private static final String ACCESSIBILITY_SLOW_KEYS = "accessibility_slow_keys";
     private static final String ACCESSIBILITY_STICKY_KEYS = "accessibility_sticky_keys";
@@ -100,8 +99,6 @@
     @Nullable
     private PreferenceCategory mKeyboardA11yCategory = null;
     @Nullable
-    private TwoStatePreference mShowVirtualKeyboardSwitch = null;
-    @Nullable
     private TwoStatePreference mAccessibilityBounceKeys = null;
     @Nullable
     private TwoStatePreference mAccessibilitySlowKeys = null;
@@ -129,8 +126,6 @@
         mImm = Preconditions.checkNotNull(activity.getSystemService(InputMethodManager.class));
         mKeyboardAssistanceCategory = Preconditions.checkNotNull(
                 findPreference(KEYBOARD_OPTIONS_CATEGORY));
-        mShowVirtualKeyboardSwitch = Objects.requireNonNull(
-                mKeyboardAssistanceCategory.findPreference(SHOW_VIRTUAL_KEYBOARD_SWITCH));
 
         mKeyboardA11yCategory = Objects.requireNonNull(findPreference(KEYBOARD_A11Y_CATEGORY));
         mAccessibilityBounceKeys = Objects.requireNonNull(
@@ -207,8 +202,6 @@
         mLastHardKeyboards.clear();
         scheduleUpdateHardKeyboards();
         mIm.registerInputDeviceListener(this, null);
-        Objects.requireNonNull(mShowVirtualKeyboardSwitch).setOnPreferenceChangeListener(
-                mShowVirtualKeyboardSwitchPreferenceChangeListener);
         Objects.requireNonNull(mAccessibilityBounceKeys).setOnPreferenceChangeListener(
                 mAccessibilityBounceKeysSwitchPreferenceChangeListener);
         Objects.requireNonNull(mAccessibilitySlowKeys).setOnPreferenceChangeListener(
@@ -223,7 +216,6 @@
         super.onPause();
         mLastHardKeyboards.clear();
         mIm.unregisterInputDeviceListener(this);
-        Objects.requireNonNull(mShowVirtualKeyboardSwitch).setOnPreferenceChangeListener(null);
         Objects.requireNonNull(mAccessibilityBounceKeys).setOnPreferenceChangeListener(null);
         Objects.requireNonNull(mAccessibilitySlowKeys).setOnPreferenceChangeListener(null);
         Objects.requireNonNull(mAccessibilityStickyKeys).setOnPreferenceChangeListener(null);
@@ -314,7 +306,6 @@
         if (mSupportsFirmwareUpdate) {
             mFeatureProvider.addFirmwareUpdateCategory(getPrefContext(), preferenceScreen);
         }
-        updateShowVirtualKeyboardSwitch();
 
         if (InputSettings.isAccessibilityBounceKeysFeatureEnabled()
                 || InputSettings.isAccessibilityStickyKeysFeatureEnabled()
@@ -374,7 +365,6 @@
                     mContentObserver,
                     UserHandle.myUserId());
         }
-        updateShowVirtualKeyboardSwitch();
         updateAccessibilityBounceKeysSwitch();
         updateAccessibilitySlowKeysSwitch();
         updateAccessibilityStickyKeysSwitch();
@@ -384,11 +374,6 @@
         getActivity().getContentResolver().unregisterContentObserver(mContentObserver);
     }
 
-    private void updateShowVirtualKeyboardSwitch() {
-        Objects.requireNonNull(mShowVirtualKeyboardSwitch).setChecked(
-                Secure.getInt(getContentResolver(), Secure.SHOW_IME_WITH_HARD_KEYBOARD, 0) != 0);
-    }
-
     private void updateAccessibilityBounceKeysSwitch() {
         if (!InputSettings.isAccessibilityBounceKeysFeatureEnabled()) {
             return;
@@ -417,15 +402,6 @@
         getActivity().requestShowKeyboardShortcuts();
     }
 
-    private final OnPreferenceChangeListener mShowVirtualKeyboardSwitchPreferenceChangeListener =
-            (preference, newValue) -> {
-                final ContentResolver cr = getContentResolver();
-                Secure.putInt(cr, Secure.SHOW_IME_WITH_HARD_KEYBOARD, ((Boolean) newValue) ? 1 : 0);
-                cr.notifyChange(Secure.getUriFor(Secure.SHOW_IME_WITH_HARD_KEYBOARD),
-                        null /* observer */, ContentResolver.NOTIFY_NO_DELAY);
-                return true;
-            };
-
     private final OnPreferenceChangeListener
             mAccessibilityBounceKeysSwitchPreferenceChangeListener = (preference, newValue) -> {
                 InputSettings.setAccessibilityBounceKeysThreshold(getContext(),
@@ -449,9 +425,7 @@
     private final ContentObserver mContentObserver = new ContentObserver(new Handler(true)) {
         @Override
         public void onChange(boolean selfChange, Uri uri) {
-            if (sVirtualKeyboardSettingsUri.equals(uri)) {
-                updateShowVirtualKeyboardSwitch();
-            } else if (sAccessibilityBounceKeysUri.equals(uri)) {
+            if (sAccessibilityBounceKeysUri.equals(uri)) {
                 updateAccessibilityBounceKeysSwitch();
             } else if (sAccessibilitySlowKeysUri.equals(uri)) {
                 updateAccessibilitySlowKeysSwitch();
