Add API to launcher to insert a custom page to the left of workspace

Change-Id: I85a4e096aab9bfcb1de74f04075bcabcb7e3262f
diff --git a/res/layout/workspace_custom_content.xml b/res/layout/workspace_custom_content.xml
new file mode 100644
index 0000000..6497685
--- /dev/null
+++ b/res/layout/workspace_custom_content.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2008 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<com.android.launcher3.CellLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:launcher="http://schemas.android.com/apk/res-auto/com.android.launcher3"
+
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:paddingStart="0dp"
+    android:paddingEnd="0dp"
+    android:paddingTop="0dp"
+    android:paddingBottom="0dp"
+    android:hapticFeedbackEnabled="false"
+
+    launcher:cellWidth="@dimen/workspace_cell_width"
+    launcher:cellHeight="@dimen/workspace_cell_height"
+    launcher:widthGap="@dimen/workspace_width_gap"
+    launcher:heightGap="@dimen/workspace_height_gap"
+    launcher:maxGap="@dimen/workspace_max_gap" />
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index bb264d6..25b1fd4 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -826,6 +826,34 @@
         mDragController.resetLastGestureUpTime();
     }
 
+    protected void onFinishBindingItems() {
+    }
+
+    // Add a fullscreen unpadded view to the workspace to the left all other screens.
+    public void addCustomContentToLeft(View customContent) {
+        CellLayout customScreen = (CellLayout)
+                getLayoutInflater().inflate(R.layout.workspace_custom_content, null);
+
+        int spanX = customScreen.getCountX();
+        int spanY = customScreen.getCountY();
+
+        CellLayout.LayoutParams lp = new CellLayout.LayoutParams(0, 0, spanX, spanY);
+        lp.canReorder  = false;
+
+        customScreen.addViewToCellLayout(customContent, 0, 0, lp, true);
+
+        mWorkspace.addView(customScreen, 0);
+
+        // We don't want to change the current or the default screen
+        mWorkspace.post(new Runnable() {
+            @Override
+            public void run() {
+                mWorkspace.incrementDefaultScreen();
+                mWorkspace.setCurrentPage(mWorkspace.getCurrentPage() + 1);
+            }
+        });
+    }
+
     @Override
     public Object onRetainNonConfigurationInstance() {
         // Flag the loader to stop early before switching
@@ -3617,6 +3645,12 @@
             mWorkspace.stripDuplicateApps();
             mIntentsOnWorkspaceFromUpgradePath = mWorkspace.stripDuplicateApps();
         }
+        mWorkspace.post(new Runnable() {
+            @Override
+            public void run() {
+                onFinishBindingItems();
+            }
+        });
     }
 
     private boolean canRunNewAppsAnimation() {
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index d600e9e..e519312 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -398,6 +398,12 @@
         UninstallShortcutReceiver.disableAndFlushUninstallQueue(getContext());
     }
 
+    // Just a hack so that if a custom content screen is added to the left, we adjust the
+    // default screen accordingly so that it stays the same.
+    void incrementDefaultScreen() {
+        mDefaultPage++;
+    }
+
     /**
      * Initializes various states for this workspace.
      */