diff --git a/packages/SystemUI/res/layout/home_handle.xml b/packages/SystemUI/res/layout/home_handle.xml
index b7fb374..c9d3f98 100644
--- a/packages/SystemUI/res/layout/home_handle.xml
+++ b/packages/SystemUI/res/layout/home_handle.xml
@@ -19,9 +19,8 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/home_handle"
     android:layout_width="@dimen/navigation_home_handle_width"
-    android:layout_height="@dimen/navigation_home_handle_height"
+    android:layout_height="match_parent"
     android:layout_weight="0"
-    android:layout_gravity="bottom"
     android:contentDescription="@string/accessibility_home"
     android:paddingStart="@dimen/navigation_key_padding"
     android:paddingEnd="@dimen/navigation_key_padding"
diff --git a/packages/SystemUI/res/values/custom_dimens.xml b/packages/SystemUI/res/values/custom_dimens.xml
index 3eb1ec5..dcbb0d3 100644
--- a/packages/SystemUI/res/values/custom_dimens.xml
+++ b/packages/SystemUI/res/values/custom_dimens.xml
@@ -24,10 +24,6 @@
     <!-- Navigation bar dpad -->
     <dimen name="navigation_extra_key_width">36dp</dimen>
 
-    <dimen name="navigation_home_handle_small_width">48dp</dimen>
-    <!-- 2 * navigation_handle_radius + 2 * navigation_handle_bottom-->
-    <dimen name="navigation_home_handle_height">14dp</dimen>
-
     <!-- Brightness and volume slider-->
     <dimen name="rounded_slider_progress_width">8dp</dimen>
     <dimen name="rounded_slider_progress_corner_radius">4dp</dimen>
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/views/NavigationBar.java b/packages/SystemUI/src/com/android/systemui/navigationbar/views/NavigationBar.java
index 10e322f..5f856ca 100644
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/views/NavigationBar.java
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/views/NavigationBar.java
@@ -165,8 +165,6 @@
 
 import dagger.Lazy;
 
-import org.omnirom.omnilib.utils.TaskUtils;
-
 import java.io.PrintWriter;
 import java.util.Locale;
 import java.util.Map;
@@ -1334,10 +1332,6 @@
         ButtonDispatcher backButton = mView.getBackButton();
         backButton.setNavBarButtonClickLogger(mNavBarButtonClickLogger);
 
-        ButtonDispatcher homeHandleButton = mView.getHomeHandle();
-        homeHandleButton.setLongClickable(true);
-        homeHandleButton.setOnLongClickListener(this::onHomeHandleLongClick);
-
         reconfigureHomeLongClick();
 
         ButtonDispatcher accessibilityButton = mView.getAccessibilityButton();
@@ -1941,8 +1935,6 @@
                 useNearestRegion);
         updateButtonLocation(region, mView.getKeyButtonViewById(R.id.dpad_left), inScreenSpace);
         updateButtonLocation(region, mView.getKeyButtonViewById(R.id.dpad_right), inScreenSpace);
-        updateButtonLocation(
-                region, touchRegionCache, mView.getHomeHandle(), inScreenSpace, useNearestRegion);
         if (mView.getFloatingRotationButton().isVisible()) {
             // Note: this button is floating so the nearest region doesn't apply
             updateButtonLocation(
@@ -2109,9 +2101,4 @@
             return false;
         }
     };
-
-    private boolean onHomeHandleLongClick(View v) {
-        TaskUtils.toggleLastApp(mContext, mUserTracker.getUserId());
-        return true;
-    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/views/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/navigationbar/views/NavigationBarView.java
index 2284eef..1dffbd1 100644
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/views/NavigationBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/views/NavigationBarView.java
@@ -65,7 +65,6 @@
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.settingslib.Utils;
 import com.android.systemui.Gefingerpoken;
-import com.android.systemui.Dependency;
 import com.android.systemui.model.SysUiState;
 import com.android.systemui.navigationbar.ScreenPinningNotify;
 import com.android.systemui.navigationbar.gestural.EdgeBackGestureHandler;
@@ -76,7 +75,6 @@
 import com.android.systemui.navigationbar.views.buttons.KeyButtonDrawable;
 import com.android.systemui.navigationbar.views.buttons.KeyButtonView;
 import com.android.systemui.navigationbar.views.buttons.NearestTouchFrame;
-import com.android.systemui.omni.OmniSettingsService;
 import com.android.systemui.recents.Recents;
 import com.android.systemui.res.R;
 import com.android.systemui.settings.DisplayTracker;
@@ -101,8 +99,7 @@
 import java.util.function.Consumer;
 
 /** */
-public class NavigationBarView extends FrameLayout implements
-        OmniSettingsService.OmniSettingsObserver {
+public class NavigationBarView extends FrameLayout {
     final static boolean DEBUG = false;
     final static String TAG = "NavBarView";
 
@@ -152,7 +149,6 @@
     private boolean mInCarMode = false;
     private boolean mDockedStackExists;
     private boolean mScreenOn = true;
-    private boolean mShowDpadArrowKeys;
 
     private final SparseArray<ButtonDispatcher> mButtonDispatchers = new SparseArray<>();
     private final ContextualButtonGroup mContextualButtonGroup;
@@ -617,7 +613,7 @@
 
         updateRecentsIcon();
 
-        if (mShowDpadArrowKeys) {
+        if (showDpadArrowKeys) {
             getKeyButtonViewById(R.id.dpad_left).setImageDrawable(mArrowLeftIcon);
             getKeyButtonViewById(R.id.dpad_right).setImageDrawable(mArrowRightIcon);
             updateDpadKeys();
@@ -630,7 +626,7 @@
         mContextualButtonGroup.setButtonVisibility(R.id.ime_switcher, !disableImeSwitcher);
 
         // right arrow overrules ime in 3 button mode cause there is not enough space
-        if (QuickStepContract.isLegacyMode(mNavBarMode) && mShowDpadArrowKeys) {
+        if (QuickStepContract.isLegacyMode(mNavBarMode) && showDpadArrowKeys) {
             mContextualButtonGroup.setButtonVisibility(R.id.ime_switcher, false);
         }
 
@@ -1110,8 +1106,6 @@
         }
 
         updateNavButtonIcons();
-        Dependency.get(OmniSettingsService.class).addIntObserver(this,
-                OmniSettings.OMNI_NAVIGATION_BAR_ARROW_KEYS);
     }
 
     @Override
@@ -1124,7 +1118,6 @@
             mFloatingRotationButton.hide();
             mRotationButtonController.unregisterListeners();
         }
-        Dependency.get(OmniSettingsService.class).removeObserver(this);
     }
 
     void dump(PrintWriter pw) {
@@ -1235,13 +1228,13 @@
     }
 
     private void updateDpadKeys() {
-        final int visibility = mShowDpadArrowKeys && (mNavigationIconHints
+        final int visibility = showDpadArrowKeys && (mNavigationIconHints
                 & StatusBarManager.NAVIGATION_HINT_BACK_ALT) != 0 ? View.VISIBLE : View.GONE;
         getKeyButtonViewById(R.id.dpad_left).setVisibility(visibility);
         getKeyButtonViewById(R.id.dpad_right).setVisibility(visibility);
     }
     public void setDpadDarkIntensity(float darkIntensity) {
-        if (mShowDpadArrowKeys) {
+        if (showDpadArrowKeys) {
             getKeyButtonViewById(R.id.dpad_left).setDarkIntensity(darkIntensity);
             getKeyButtonViewById(R.id.dpad_right).setDarkIntensity(darkIntensity);
         }
@@ -1250,11 +1243,4 @@
         return Settings.System.getIntForUser(getContext().getContentResolver(),
                 OmniSettings.OMNI_NAVIGATION_BAR_ARROW_KEYS, 0, UserHandle.USER_CURRENT) != 0;
     }
-
-    @Override
-    public void onIntSettingChanged(String key, Integer newValue) {
-        mShowDpadArrowKeys = showDpadArrowKeys();
-        updateNavButtonIcons();
-        notifyActiveTouchRegions();
-    }
 }
