From 7819a56217fd4e216d3675905586b275799723bb Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Thu, 19 Sep 2013 15:55:45 -0700 Subject: Tweaking page indicators to support add page icon, remembering widget picker page (Bug 10787439) Change-Id: Iab0b5676aa9c34a610b4b968940abc81c913c234 --- .../android/launcher3/AppsCustomizePagedView.java | 6 ++++- src/com/android/launcher3/Launcher.java | 5 ++-- src/com/android/launcher3/PageIndicator.java | 31 +++++++++++++++++----- src/com/android/launcher3/PageIndicatorMarker.java | 16 ++++++++--- src/com/android/launcher3/PagedView.java | 10 ++++--- src/com/android/launcher3/Workspace.java | 12 ++++++--- 6 files changed, 58 insertions(+), 22 deletions(-) (limited to 'src') diff --git a/src/com/android/launcher3/AppsCustomizePagedView.java b/src/com/android/launcher3/AppsCustomizePagedView.java index ee33f3a3f..a36f44459 100644 --- a/src/com/android/launcher3/AppsCustomizePagedView.java +++ b/src/com/android/launcher3/AppsCustomizePagedView.java @@ -941,8 +941,12 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen } public void setContentType(ContentType type) { + int page = getCurrentPage(); + if (mContentType != type) { + page = 0; + } mContentType = type; - invalidatePageData(0, true); + invalidatePageData(page, true); } public ContentType getContentType() { diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 9777ea94a..ad7d238ca 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -1451,7 +1451,6 @@ public class Launcher extends Activity // Reset AllApps to its initial state only if we are not in the middle of // processing a multi-step drop if (mAppsCustomizeTabHost != null && mPendingAddInfo.container == ItemInfo.NO_ID) { - mAppsCustomizeTabHost.reset(); showWorkspaceAndExitOverviewMode(false); } } else if (Intent.ACTION_USER_PRESENT.equals(action)) { @@ -1670,8 +1669,8 @@ public class Launcher extends Activity imm.hideSoftInputFromWindow(v.getWindowToken(), 0); } - // Reset AllApps to its initial state - if (!alreadyOnHome && mAppsCustomizeTabHost != null) { + // Reset the apps customize page + if (mAppsCustomizeTabHost != null) { mAppsCustomizeTabHost.reset(); } } diff --git a/src/com/android/launcher3/PageIndicator.java b/src/com/android/launcher3/PageIndicator.java index a9016d5ea..52c844760 100644 --- a/src/com/android/launcher3/PageIndicator.java +++ b/src/com/android/launcher3/PageIndicator.java @@ -49,6 +49,20 @@ public class PageIndicator extends LinearLayout { new ArrayList(); private int mActiveMarkerIndex; + public static class PageMarkerResources { + int activeId; + int inactiveId; + + public PageMarkerResources() { + activeId = R.drawable.ic_pageindicator_current; + inactiveId = R.drawable.ic_pageindicator_default; + } + public PageMarkerResources(int aId, int iaId) { + activeId = aId; + inactiveId = iaId; + } + } + public PageIndicator(Context context) { this(context, null); } @@ -155,17 +169,20 @@ public class PageIndicator extends LinearLayout { mWindowRange[1] = windowEnd; } - void addMarker(int index, int layoutId, boolean allowAnimations) { + void addMarker(int index, PageMarkerResources marker, boolean allowAnimations) { index = Math.max(0, Math.min(index, mMarkers.size())); - PageIndicatorMarker marker = - (PageIndicatorMarker) mLayoutInflater.inflate(layoutId, this, false); - mMarkers.add(index, marker); + PageIndicatorMarker m = + (PageIndicatorMarker) mLayoutInflater.inflate(R.layout.page_indicator_marker, + this, false); + m.setMarkerDrawables(marker.activeId, marker.inactiveId); + + mMarkers.add(index, m); offsetWindowCenterTo(mActiveMarkerIndex, allowAnimations); } - void addMarkers(ArrayList layoutIds, boolean allowAnimations) { - for (int i = 0; i < layoutIds.size(); ++i) { - addMarker(Integer.MAX_VALUE, layoutIds.get(i), allowAnimations); + void addMarkers(ArrayList markers, boolean allowAnimations) { + for (int i = 0; i < markers.size(); ++i) { + addMarker(Integer.MAX_VALUE, markers.get(i), allowAnimations); } } diff --git a/src/com/android/launcher3/PageIndicatorMarker.java b/src/com/android/launcher3/PageIndicatorMarker.java index 1ad0abb6b..b1025d6fe 100644 --- a/src/com/android/launcher3/PageIndicatorMarker.java +++ b/src/com/android/launcher3/PageIndicatorMarker.java @@ -19,10 +19,12 @@ package com.android.launcher3; import android.animation.AnimatorListenerAdapter; import android.animation.LayoutTransition; import android.content.Context; +import android.content.res.Resources; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.ImageView; import android.widget.FrameLayout; import com.android.launcher3.R; @@ -32,8 +34,8 @@ public class PageIndicatorMarker extends FrameLayout { private static final int MARKER_FADE_DURATION = 175; - private View mActiveMarker; - private View mInactiveMarker; + private ImageView mActiveMarker; + private ImageView mInactiveMarker; private boolean mIsActive = false; public PageIndicatorMarker(Context context) { @@ -49,8 +51,14 @@ public class PageIndicatorMarker extends FrameLayout { } protected void onFinishInflate() { - mActiveMarker = findViewById(R.id.active); - mInactiveMarker = findViewById(R.id.inactive); + mActiveMarker = (ImageView) findViewById(R.id.active); + mInactiveMarker = (ImageView) findViewById(R.id.inactive); + } + + void setMarkerDrawables(int activeResId, int inactiveResId) { + Resources r = getResources(); + mActiveMarker.setImageDrawable(r.getDrawable(activeResId)); + mInactiveMarker.setImageDrawable(r.getDrawable(inactiveResId)); } void activate(boolean immediate) { diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java index d8fc98330..763dfa1a9 100644 --- a/src/com/android/launcher3/PagedView.java +++ b/src/com/android/launcher3/PagedView.java @@ -337,7 +337,8 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc mPageIndicator = (PageIndicator) parent.findViewById(mPageIndicatorViewId); mPageIndicator.removeAllMarkers(mAllowPagedViewAnimations); - ArrayList markers = new ArrayList(); + ArrayList markers = + new ArrayList(); for (int i = 0; i < getChildCount(); ++i) { markers.add(getPageIndicatorMarker(i)); } @@ -424,8 +425,8 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc PageIndicator getPageIndicator() { return mPageIndicator; } - protected int getPageIndicatorMarker(int pageIndex) { - return R.layout.page_indicator_marker; + protected PageIndicator.PageMarkerResources getPageIndicatorMarker(int pageIndex) { + return new PageIndicator.PageMarkerResources(); } public void setPageSwitchListener(PageSwitchListener pageSwitchListener) { @@ -969,7 +970,8 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc // add/remove pages if (mPageIndicator != null && !isReordering(false)) { int pageIndex = indexOfChild(child); - mPageIndicator.addMarker(pageIndex, getPageIndicatorMarker(pageIndex), + mPageIndicator.addMarker(pageIndex, + getPageIndicatorMarker(pageIndex), mAllowPagedViewAnimations); } diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index c0b2ae390..2f58571d4 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -4221,10 +4221,16 @@ public class Workspace extends SmoothPagedView } @Override - protected int getPageIndicatorMarker(int pageIndex) { - if (getScreenIdForPageIndex(pageIndex) == CUSTOM_CONTENT_SCREEN_ID) { - return R.layout.custom_content_page_indicator_marker; + protected PageIndicator.PageMarkerResources getPageIndicatorMarker(int pageIndex) { + long screenId = getScreenIdForPageIndex(pageIndex); + if (screenId == EXTRA_EMPTY_SCREEN_ID) { + int count = mScreenOrder.size() - (hasCustomContent() ? 1 : 0); + if (count > 1) { + return new PageIndicator.PageMarkerResources(R.drawable.ic_pageindicator_add, + R.drawable.ic_pageindicator_add); + } } + return super.getPageIndicatorMarker(pageIndex); } -- cgit v1.2.3