diff --git a/quickstep/src/com/android/quickstep/interaction/BackGestureTutorialFragment.java b/quickstep/src/com/android/quickstep/interaction/BackGestureTutorialFragment.java
index 593b695..aeb718d 100644
--- a/quickstep/src/com/android/quickstep/interaction/BackGestureTutorialFragment.java
+++ b/quickstep/src/com/android/quickstep/interaction/BackGestureTutorialFragment.java
@@ -107,11 +107,11 @@
     }
 
     void onAttachedToWindow() {
-        mEdgeBackGestureHandler.setIsEnabled(true);
+        mEdgeBackGestureHandler.setViewGroupParent((ViewGroup) getRootView());
     }
 
     void onDetachedFromWindow() {
-        mEdgeBackGestureHandler.setIsEnabled(false);
+        mEdgeBackGestureHandler.setViewGroupParent(null);
     }
 
     @Override
diff --git a/quickstep/src/com/android/quickstep/interaction/EdgeBackGestureHandler.java b/quickstep/src/com/android/quickstep/interaction/EdgeBackGestureHandler.java
index 04cd2f4..f34530e 100644
--- a/quickstep/src/com/android/quickstep/interaction/EdgeBackGestureHandler.java
+++ b/quickstep/src/com/android/quickstep/interaction/EdgeBackGestureHandler.java
@@ -17,21 +17,18 @@
 
 import android.content.Context;
 import android.content.res.Resources;
-import android.graphics.PixelFormat;
 import android.graphics.Point;
 import android.graphics.PointF;
-import android.hardware.display.DisplayManager;
-import android.hardware.display.DisplayManager.DisplayListener;
-import android.os.Handler;
-import android.os.Looper;
 import android.os.SystemProperties;
 import android.view.Display;
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.View.OnTouchListener;
 import android.view.ViewConfiguration;
-import android.view.WindowManager;
-import android.view.WindowManager.LayoutParams;
+import android.view.ViewGroup;
+import android.view.ViewGroup.LayoutParams;
+
+import androidx.annotation.Nullable;
 
 import com.android.launcher3.ResourceUtils;
 
@@ -40,7 +37,7 @@
  *
  * Forked from platform/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/EdgeBackGestureHandler.java.
  */
-public class EdgeBackGestureHandler implements DisplayListener, OnTouchListener {
+public class EdgeBackGestureHandler implements OnTouchListener {
 
     private static final String TAG = "EdgeBackGestureHandler";
     private static final int MAX_LONG_PRESS_TIMEOUT = SystemProperties.getInt(
@@ -106,29 +103,22 @@
         mEdgeWidth = ResourceUtils.getNavbarSize("config_backGestureInset", res);
     }
 
-    void setIsEnabled(boolean isEnabled) {
-        if (isEnabled == mIsEnabled) {
-            return;
-        }
-        mIsEnabled = isEnabled;
+    void setViewGroupParent(@Nullable ViewGroup parent) {
+        mIsEnabled = parent != null;
 
         if (mEdgeBackPanel != null) {
             mEdgeBackPanel.onDestroy();
             mEdgeBackPanel = null;
         }
 
-        if (!mIsEnabled) {
-            mContext.getSystemService(DisplayManager.class).unregisterDisplayListener(this);
-        } else {
-            updateDisplaySize();
-            mContext.getSystemService(DisplayManager.class).registerDisplayListener(this,
-                    new Handler(Looper.getMainLooper()));
-
+        if (mIsEnabled) {
             // Add a nav bar panel window.
-            mEdgeBackPanel = new EdgeBackGesturePanel(mContext);
+            mEdgeBackPanel = new EdgeBackGesturePanel(mContext, parent, createLayoutParams());
             mEdgeBackPanel.setBackCallback(mBackCallback);
-            mEdgeBackPanel.setLayoutParams(createLayoutParams());
-            updateDisplaySize();
+            if (mContext.getDisplay() != null) {
+                mContext.getDisplay().getRealSize(mDisplaySize);
+                mEdgeBackPanel.setDisplaySize(mDisplaySize);
+            }
         }
     }
 
@@ -136,21 +126,11 @@
         mGestureCallback = callback;
     }
 
-    private WindowManager.LayoutParams createLayoutParams() {
+    private LayoutParams createLayoutParams() {
         Resources resources = mContext.getResources();
-        WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(
+        return new LayoutParams(
                 ResourceUtils.getNavbarSize("navigation_edge_panel_width", resources),
-                ResourceUtils.getNavbarSize("navigation_edge_panel_height", resources),
-                LayoutParams.TYPE_APPLICATION_PANEL,
-                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
-                        | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
-                        | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH
-                        | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
-                PixelFormat.TRANSLUCENT);
-        layoutParams.setTitle(TAG + mDisplayId);
-        layoutParams.windowAnimations = 0;
-        layoutParams.setFitInsetsTypes(0 /* types */);
-        return layoutParams;
+                ResourceUtils.getNavbarSize("navigation_edge_panel_height", resources));
     }
 
     @Override
@@ -232,26 +212,6 @@
         }
     }
 
-    @Override
-    public void onDisplayAdded(int displayId) { }
-
-    @Override
-    public void onDisplayRemoved(int displayId) { }
-
-    @Override
-    public void onDisplayChanged(int displayId) {
-        if (displayId == mDisplayId) {
-            updateDisplaySize();
-        }
-    }
-
-    private void updateDisplaySize() {
-        mContext.getDisplay().getRealSize(mDisplaySize);
-        if (mEdgeBackPanel != null) {
-            mEdgeBackPanel.setDisplaySize(mDisplaySize);
-        }
-    }
-
     void setInsets(int leftInset, int rightInset) {
         mLeftInset = leftInset;
         mRightInset = rightInset;
diff --git a/quickstep/src/com/android/quickstep/interaction/EdgeBackGesturePanel.java b/quickstep/src/com/android/quickstep/interaction/EdgeBackGesturePanel.java
index 34eeafc..5bf5026 100644
--- a/quickstep/src/com/android/quickstep/interaction/EdgeBackGesturePanel.java
+++ b/quickstep/src/com/android/quickstep/interaction/EdgeBackGesturePanel.java
@@ -26,11 +26,11 @@
 import android.graphics.Path;
 import android.graphics.Point;
 import android.os.SystemClock;
-import android.view.Gravity;
 import android.view.MotionEvent;
 import android.view.VelocityTracker;
 import android.view.View;
-import android.view.WindowManager;
+import android.view.ViewGroup;
+import android.view.ViewGroup.LayoutParams;
 import android.view.animation.Interpolator;
 import android.view.animation.PathInterpolator;
 
@@ -110,7 +110,6 @@
     private static final Interpolator RUBBER_BAND_INTERPOLATOR_APPEAR =
             new PathInterpolator(1.0f / RUBBER_BAND_AMOUNT_APPEAR, 1.0f, 1.0f, 1.0f);
 
-    private final WindowManager mWindowManager;
     private BackCallback mBackCallback;
 
     /**
@@ -147,7 +146,6 @@
 
     private VelocityTracker mVelocityTracker;
     private int mArrowPaddingEnd;
-    private WindowManager.LayoutParams mLayoutParams;
 
     /**
      * True if the panel is currently on the left of the screen
@@ -232,11 +230,9 @@
                 }
             };
 
-    public EdgeBackGesturePanel(Context context) {
+    public EdgeBackGesturePanel(Context context, ViewGroup parent, LayoutParams layoutParams) {
         super(context);
 
-        mWindowManager = context.getSystemService(WindowManager.class);
-
         mDensity = context.getResources().getDisplayMetrics().density;
 
         mBaseTranslation = dp(BASE_TRANSLATION_DP);
@@ -290,11 +286,15 @@
 
         mSwipeThreshold = ResourceUtils.getDimenByName(
             "navigation_edge_action_drag_threshold", context.getResources(), 16 /* defaultValue */);
+        parent.addView(this, layoutParams);
         setVisibility(GONE);
     }
 
     void onDestroy() {
-        mWindowManager.removeView(this);
+        ViewGroup parent = (ViewGroup) getParent();
+        if (parent != null) {
+            parent.removeView(this);
+        }
     }
 
     @Override
@@ -305,9 +305,6 @@
     @SuppressLint("RtlHardcoded")
     void setIsLeftPanel(boolean isLeftPanel) {
         mIsLeftPanel = isLeftPanel;
-        mLayoutParams.gravity = mIsLeftPanel
-                ? (Gravity.LEFT | Gravity.TOP)
-                : (Gravity.RIGHT | Gravity.TOP);
     }
 
     boolean getIsLeftPanel() {
@@ -323,11 +320,6 @@
         mBackCallback = callback;
     }
 
-    void setLayoutParams(WindowManager.LayoutParams layoutParams) {
-        mLayoutParams = layoutParams;
-        mWindowManager.addView(this, mLayoutParams);
-    }
-
     private float getCurrentAngle() {
         return mCurrentAngle;
     }
@@ -349,7 +341,6 @@
                 mStartY = event.getY();
                 setVisibility(VISIBLE);
                 updatePosition(event.getY());
-                mWindowManager.updateViewLayout(this, mLayoutParams);
                 break;
             case MotionEvent.ACTION_MOVE:
                 handleMoveEvent(event);
@@ -614,10 +605,11 @@
     }
 
     private void updatePosition(float touchY) {
-        float position = touchY - mFingerOffset;
-        position = Math.max(position, mMinArrowPosition);
-        position -= mLayoutParams.height / 2.0f;
-        mLayoutParams.y = MathUtils.clamp((int) position, 0, mDisplaySize.y);
+        float positionY = touchY - mFingerOffset;
+        positionY = Math.max(positionY, mMinArrowPosition);
+        positionY -= getLayoutParams().height / 2.0f;
+        setX(mIsLeftPanel ? 0 : mDisplaySize.x - getLayoutParams().width);
+        setY(MathUtils.clamp((int) positionY, 0, mDisplaySize.y));
     }
 
     private void setDesiredVerticalTransition(float verticalTranslation, boolean animated) {
