Adding hint for launcher to pre-create custom workspace screen.
Change-Id: I150fb8b6ff13053bf4b0b49f2b510630ed50714a
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 321c4e7..e84c708 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -444,6 +444,11 @@
sPausedFromUserAction = true;
}
+ /** To be overriden by subclasses to hint to Launcher that we have custom content */
+ protected boolean hasCustomContentToLeft() {
+ return false;
+ }
+
private void updateGlobalIcons() {
boolean searchVisible = false;
boolean voiceVisible = false;
@@ -868,13 +873,13 @@
}
// Add a fullscreen unpadded view to the workspace to the left all other screens.
- public QSBScroller addCustomContentToLeft(View customContent) {
- return addCustomContentToLeft(customContent, null);
+ public QSBScroller addToCustomContentPage(View customContent) {
+ return addToCustomContentPage(customContent, null);
}
- public QSBScroller addCustomContentToLeft(View customContent,
+ public QSBScroller addToCustomContentPage(View customContent,
CustomContentCallbacks callbacks) {
- mWorkspace.addCustomContentToLeft(customContent, callbacks);
+ mWorkspace.addToCustomContentPage(customContent, callbacks);
return mQsbScroller;
}
@@ -3718,6 +3723,11 @@
mSavedState = null;
}
+ // Create the custom content page here before onLayout to prevent flashing
+ if (!mWorkspace.hasCustomContent() && hasCustomContentToLeft()) {
+ mWorkspace.createCustomContentPage();
+ }
+
mWorkspace.restoreInstanceStateForRemainingPages();
// If we received the result of any pending adds while the loader was running (e.g. the
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index 91f5396..1727c72 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -528,19 +528,10 @@
return screenId;
}
- public void addCustomContentToLeft(View customContent, CustomContentCallbacks callbacks) {
+ public void createCustomContentPage() {
CellLayout customScreen = (CellLayout)
mLauncher.getLayoutInflater().inflate(R.layout.workspace_screen, null);
- int spanX = customScreen.getCountX();
- int spanY = customScreen.getCountY();
-
- CellLayout.LayoutParams lp = new CellLayout.LayoutParams(0, 0, spanX, spanY);
- lp.canReorder = false;
- lp.isFullscreen = true;
-
- customScreen.addViewToCellLayout(customContent, 0, 0, lp, true);
-
Rect p = new Rect();
AppWidgetHostView.getDefaultPaddingForWidget(mLauncher, mLauncher.getComponentName(), p);
@@ -549,13 +540,28 @@
addFullScreenPage(customScreen);
- mCustomContentCallbacks = callbacks;
-
// Ensure that the current page and default page are maintained.
mDefaultPage++;
setCurrentPage(getCurrentPage() + 1);
}
+ public void addToCustomContentPage(View customContent, CustomContentCallbacks callbacks) {
+ if (getPageIndexForScreenId(CUSTOM_CONTENT_SCREEN_ID) < 0) {
+ throw new RuntimeException("Expected custom content screen to exist");
+ }
+
+ // Add the custom content to the full screen custom page
+ CellLayout customScreen = getScreenWithId(CUSTOM_CONTENT_SCREEN_ID);
+ int spanX = customScreen.getCountX();
+ int spanY = customScreen.getCountY();
+ CellLayout.LayoutParams lp = new CellLayout.LayoutParams(0, 0, spanX, spanY);
+ lp.canReorder = false;
+ lp.isFullscreen = true;
+ customScreen.addViewToCellLayout(customContent, 0, 0, lp, true);
+
+ mCustomContentCallbacks = callbacks;
+ }
+
public long commitExtraEmptyScreen() {
CellLayout cl = mWorkspaceScreens.get(EXTRA_EMPTY_SCREEN_ID);
mWorkspaceScreens.remove(EXTRA_EMPTY_SCREEN_ID);
@@ -1293,7 +1299,7 @@
}
}
- private boolean hasCustomContent() {
+ public boolean hasCustomContent() {
return (mScreenOrder.size() > 0 && mScreenOrder.get(0) == CUSTOM_CONTENT_SCREEN_ID);
}