Merge "Adding support for custom page indicator markers." into jb-ub-gel-agar
diff --git a/src/com/android/launcher3/CellLayout.java b/src/com/android/launcher3/CellLayout.java
index ac41a2b..86bc1b0 100644
--- a/src/com/android/launcher3/CellLayout.java
+++ b/src/com/android/launcher3/CellLayout.java
@@ -3231,6 +3231,11 @@
public boolean isLockedToGrid = true;
/**
+ * Indicates that this item should use the full extents of its parent.
+ */
+ public boolean isFullscreen = false;
+
+ /**
* Indicates whether this item can be reordered. Always true except in the case of the
* the AllApps button.
*/
diff --git a/src/com/android/launcher3/FocusHelper.java b/src/com/android/launcher3/FocusHelper.java
index a591433..1acaf3e 100644
--- a/src/com/android/launcher3/FocusHelper.java
+++ b/src/com/android/launcher3/FocusHelper.java
@@ -21,6 +21,7 @@
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
+import android.widget.ScrollView;
import android.widget.TabHost;
import android.widget.TabWidget;
@@ -817,7 +818,8 @@
static boolean handleFolderKeyEvent(View v, int keyCode, KeyEvent e) {
ShortcutAndWidgetContainer parent = (ShortcutAndWidgetContainer) v.getParent();
final CellLayout layout = (CellLayout) parent.getParent();
- final Folder folder = (Folder) layout.getParent();
+ final ScrollView scrollView = (ScrollView) layout.getParent();
+ final Folder folder = (Folder) scrollView.getParent();
View title = folder.mFolderName;
final int action = e.getAction();
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 3592045..321c4e7 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -990,7 +990,7 @@
int currentScreen = savedState.getInt(RUNTIME_STATE_CURRENT_SCREEN, -1);
if (currentScreen > -1) {
- mWorkspace.setCurrentPage(currentScreen);
+ mWorkspace.setRestorePage(currentScreen);
}
final long pendingAddContainer = savedState.getLong(RUNTIME_STATE_PENDING_ADD_CONTAINER, -1);
diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java
index 28530e6..eaa2fd2 100644
--- a/src/com/android/launcher3/LauncherModel.java
+++ b/src/com/android/launcher3/LauncherModel.java
@@ -1728,7 +1728,9 @@
}
}
} finally {
- c.close();
+ if (c != null) {
+ c.close();
+ }
}
if (itemsToRemove.size() > 0) {
diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java
index 9bdbe46..2eb7a0c 100644
--- a/src/com/android/launcher3/PagedView.java
+++ b/src/com/android/launcher3/PagedView.java
@@ -104,6 +104,7 @@
protected boolean mFirstLayout = true;
protected int mCurrentPage;
+ protected int mRestorePage = -1;
protected int mChildCountOnLastLayout;
protected int mNextPage = INVALID_PAGE;
@@ -514,6 +515,14 @@
invalidate();
}
+ /**
+ * The restore page will be set in place of the current page at the next (likely first)
+ * layout.
+ */
+ void setRestorePage(int restorePage) {
+ mRestorePage = restorePage;
+ }
+
protected void notifyPageSwitchListener() {
if (mPageSwitchListener != null) {
mPageSwitchListener.onPageSwitch(getPageAt(mCurrentPage), mCurrentPage);
@@ -832,6 +841,7 @@
}
for (int i = startIndex; i != endIndex; i += delta) {
+
final View child = getPageAt(i);
LayoutParams lp = (LayoutParams) child.getLayoutParams();
int childTop;
@@ -855,10 +865,13 @@
// We assume the left and right padding are equal, and hence center the pages
// horizontally
- int scrollOffset = false ? 0 : (getViewportWidth() - childWidth) / 2;
+ int scrollOffset = (getViewportWidth() - childWidth) / 2;
mPageScrolls[i] = childLeft - scrollOffset - offsetX;
- childLeft += childWidth + mPageSpacing;
+ if (i != endIndex - delta) {
+ int nextScrollOffset = (getViewportWidth() - getChildWidth(i + delta)) / 2;
+ childLeft += childWidth + nextScrollOffset;
+ }
}
}
@@ -878,7 +891,12 @@
if (mScroller.isFinished() && mChildCountOnLastLayout != getChildCount() &&
!mDeferringForDelete) {
- setCurrentPage(getNextPage());
+ if (mRestorePage > -1) {
+ setCurrentPage(mRestorePage);
+ mRestorePage = -1;
+ } else {
+ setCurrentPage(getNextPage());
+ }
}
mChildCountOnLastLayout = getChildCount();
}
diff --git a/src/com/android/launcher3/ShortcutAndWidgetContainer.java b/src/com/android/launcher3/ShortcutAndWidgetContainer.java
index 18b9399..64a87ef 100644
--- a/src/com/android/launcher3/ShortcutAndWidgetContainer.java
+++ b/src/com/android/launcher3/ShortcutAndWidgetContainer.java
@@ -92,13 +92,15 @@
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int count = getChildCount();
+
+ int widthSpecSize = MeasureSpec.getSize(widthMeasureSpec);
+ int heightSpecSize = MeasureSpec.getSize(heightMeasureSpec);
+ setMeasuredDimension(widthSpecSize, heightSpecSize);
+
for (int i = 0; i < count; i++) {
View child = getChildAt(i);
measureChild(child);
}
- int widthSpecSize = MeasureSpec.getSize(widthMeasureSpec);
- int heightSpecSize = MeasureSpec.getSize(heightMeasureSpec);
- setMeasuredDimension(widthSpecSize, heightSpecSize);
}
public void setupLp(CellLayout.LayoutParams lp) {
@@ -115,8 +117,15 @@
final int cellWidth = mCellWidth;
final int cellHeight = mCellHeight;
CellLayout.LayoutParams lp = (CellLayout.LayoutParams) child.getLayoutParams();
-
- lp.setup(cellWidth, cellHeight, mWidthGap, mHeightGap, invertLayoutHorizontally(), mCountX);
+ if (!lp.isFullscreen) {
+ lp.setup(cellWidth, cellHeight, mWidthGap, mHeightGap, invertLayoutHorizontally(),
+ mCountX);
+ } else {
+ lp.x = 0;
+ lp.y = 0;
+ lp.width = getMeasuredWidth();
+ lp.height = getMeasuredHeight();
+ }
int childWidthMeasureSpec = MeasureSpec.makeMeasureSpec(lp.width, MeasureSpec.EXACTLY);
int childheightMeasureSpec = MeasureSpec.makeMeasureSpec(lp.height,
MeasureSpec.EXACTLY);
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index 7fb23e2..e590779 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -537,6 +537,7 @@
CellLayout.LayoutParams lp = new CellLayout.LayoutParams(0, 0, spanX, spanY);
lp.canReorder = false;
+ lp.isFullscreen = true;
customScreen.addViewToCellLayout(customContent, 0, 0, lp, true);
@@ -769,6 +770,13 @@
protected void onWindowVisibilityChanged (int visibility) {
mLauncher.onWindowVisibilityChanged(visibility);
+ if (mCustomContentShowing && mCustomContentCallbacks != null) {
+ if (visibility == View.VISIBLE) {
+ mCustomContentCallbacks.onShow();
+ } else if (visibility == View.GONE) {
+ mCustomContentCallbacks.onHide();
+ }
+ }
}
@Override
@@ -929,25 +937,25 @@
stripEmptyScreens();
mStripScreensOnPageStopMoving = false;
}
- }
- @Override
- protected void notifyPageSwitchListener() {
- super.notifyPageSwitchListener();
- Launcher.setScreen(mCurrentPage);
-
- if (hasCustomContent() && mCurrentPage == 0) {
+ if (hasCustomContent() && getNextPage() == 0 && !mCustomContentShowing) {
mCustomContentShowing = true;
if (mCustomContentCallbacks != null) {
mCustomContentCallbacks.onShow();
}
- } else if (hasCustomContent() && mCustomContentShowing) {
+ } else if (hasCustomContent() && getNextPage() != 0 && mCustomContentShowing) {
mCustomContentShowing = false;
if (mCustomContentCallbacks != null) {
mCustomContentCallbacks.onHide();
mLauncher.resetQSBScroll();
}
}
+ }
+
+ @Override
+ protected void notifyPageSwitchListener() {
+ super.notifyPageSwitchListener();
+ Launcher.setScreen(mCurrentPage);
};
// As a ratio of screen height, the total distance we want the parallax effect to span
@@ -1302,11 +1310,9 @@
private void updateStateForCustomContent(int screenCenter) {
if (hasCustomContent()) {
- CellLayout customContent = getScreenWithId(CUSTOM_CONTENT_SCREEN_ID);
int index = mScreenOrder.indexOf(CUSTOM_CONTENT_SCREEN_ID);
int scrollDelta = getScrollForPage(index + 1) - getScrollX();
- float translationX = Math.max(scrollDelta, 0);
float progress = (1.0f * scrollDelta) /
(getScrollForPage(index + 1) - getScrollForPage(index));
@@ -1317,6 +1323,7 @@
if (mLauncher.getHotseat() != null) {
mLauncher.getHotseat().setTranslationY(transY);
+ mLauncher.getHotseat().setAlpha(1 - progress);
}
if (getPageIndicator() != null) {
getPageIndicator().setAlpha(1 - progress);