Create new DeviceProfile when in multi window mode.

This is just a first pass to help make the codebase ready for MW mode.
ie. won't see the effects of this unless resizeableActivity is set to true
in the Android Manifest.

Also allows long clicks from edge when in MW mode.

Bug: 32176631
Change-Id: I48e5cb3bd15e70627d9bf007d93bc731612fba2e
diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java
index 655c218..b25c0a1 100644
--- a/src/com/android/launcher3/DeviceProfile.java
+++ b/src/com/android/launcher3/DeviceProfile.java
@@ -205,6 +205,13 @@
         computeAllAppsButtonSize(context);
     }
 
+    DeviceProfile getMultiWindowProfile(Context context, Point mwSize) {
+        // In multi-window mode, we can have widthPx = availableWidthPx
+        // and heightPx = availableHeightPx because Launcher uses the InvariantDeviceProfiles'
+        // widthPx and heightPx values where it's needed.
+        return new DeviceProfile(context, inv, mwSize, mwSize, mwSize.x, mwSize.y, isLandscape);
+    }
+
     public void addLauncherLayoutChangedListener(LauncherLayoutChangeListener listener) {
         if (!mListeners.contains(listener)) {
             mListeners.add(listener);
@@ -599,4 +606,11 @@
                 hotseatBarHeightPx + hotseatLandGutterPx + mInsets.left) / 2;
         return new int[]{ padding, padding };
     }
+
+    public boolean shouldIgnoreLongPressToOverview(float touchX, float edgeThreshold) {
+        boolean inMultiWindowMode = this != inv.landscapeProfile && this != inv.portraitProfile;
+        boolean touchedLhsEdge = mInsets.left == 0 && touchX < edgeThreshold;
+        boolean touchedRhsEdge = mInsets.right == 0 && touchX > (widthPx - edgeThreshold);
+        return !inMultiWindowMode && (touchedLhsEdge || touchedRhsEdge);
+    }
 }
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 09b5ad5..c7fac87 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -45,6 +45,7 @@
 import android.content.res.Configuration;
 import android.database.sqlite.SQLiteDatabase;
 import android.graphics.Bitmap;
+import android.graphics.Point;
 import android.graphics.Rect;
 import android.graphics.drawable.Drawable;
 import android.os.AsyncTask;
@@ -359,10 +360,17 @@
         LauncherAppState app = LauncherAppState.getInstance();
 
         // Load configuration-specific DeviceProfile
-        mDeviceProfile = getResources().getConfiguration().orientation
-                == Configuration.ORIENTATION_LANDSCAPE ?
-                app.getInvariantDeviceProfile().landscapeProfile
-                : app.getInvariantDeviceProfile().portraitProfile;
+        mDeviceProfile =
+                getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE
+                        ? app.getInvariantDeviceProfile().landscapeProfile
+                        : app.getInvariantDeviceProfile().portraitProfile;
+
+        if (Utilities.isNycOrAbove() && isInMultiWindowMode()) {
+            Display display = getWindowManager().getDefaultDisplay();
+            Point mwSize = new Point();
+            display.getSize(mwSize);
+            mDeviceProfile = mDeviceProfile.getMultiWindowProfile(this, mwSize);
+        }
 
         mSharedPrefs = Utilities.getPrefs(this);
         mIsSafeModeEnabled = getPackageManager().isSafeMode();
@@ -2708,12 +2716,13 @@
             return true;
         }
 
-        boolean fromEdgeOfScreen = mLastDispatchTouchEventX < mEdgeOfScreenThresholdPx
-                || mLastDispatchTouchEventX > (mDeviceProfile.widthPx - mEdgeOfScreenThresholdPx);
+
+        boolean ignoreLongPressToOverview = mDeviceProfile.shouldIgnoreLongPressToOverview(
+                mLastDispatchTouchEventX, mEdgeOfScreenThresholdPx);
 
         if (v instanceof Workspace) {
             if (!mWorkspace.isInOverviewMode()) {
-                if (!mWorkspace.isTouchActive() && !fromEdgeOfScreen) {
+                if (!mWorkspace.isTouchActive() && !ignoreLongPressToOverview) {
                     getUserEventDispatcher().logActionOnContainer(LauncherLogProto.Action.LONGPRESS,
                             LauncherLogProto.Action.NONE, LauncherLogProto.WORKSPACE,
                             mWorkspace.getCurrentPage());
@@ -2748,7 +2757,7 @@
                     getUserEventDispatcher().logActionOnContainer(LauncherLogProto.Action.LONGPRESS,
                             LauncherLogProto.Action.NONE, LauncherLogProto.OVERVIEW);
                 } else {
-                    if (fromEdgeOfScreen) {
+                    if (ignoreLongPressToOverview) {
                         return false;
                     }
                     getUserEventDispatcher().logActionOnContainer(LauncherLogProto.Action.LONGPRESS,