Tweaking page indicators to support add page icon, remembering widget picker page (Bug 10787439)
Change-Id: Iab0b5676aa9c34a610b4b968940abc81c913c234
diff --git a/src/com/android/launcher3/AppsCustomizePagedView.java b/src/com/android/launcher3/AppsCustomizePagedView.java
index ee33f3a..a36f444 100644
--- a/src/com/android/launcher3/AppsCustomizePagedView.java
+++ b/src/com/android/launcher3/AppsCustomizePagedView.java
@@ -941,8 +941,12 @@
}
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 9777ea9..ad7d238 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -1451,7 +1451,6 @@
// 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 @@
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 a9016d5..52c8447 100644
--- a/src/com/android/launcher3/PageIndicator.java
+++ b/src/com/android/launcher3/PageIndicator.java
@@ -49,6 +49,20 @@
new ArrayList<PageIndicatorMarker>();
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 @@
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<Integer> layoutIds, boolean allowAnimations) {
- for (int i = 0; i < layoutIds.size(); ++i) {
- addMarker(Integer.MAX_VALUE, layoutIds.get(i), allowAnimations);
+ void addMarkers(ArrayList<PageMarkerResources> 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 1ad0abb..b1025d6 100644
--- a/src/com/android/launcher3/PageIndicatorMarker.java
+++ b/src/com/android/launcher3/PageIndicatorMarker.java
@@ -19,10 +19,12 @@
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 @@
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 @@
}
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 d8fc983..763dfa1 100644
--- a/src/com/android/launcher3/PagedView.java
+++ b/src/com/android/launcher3/PagedView.java
@@ -337,7 +337,8 @@
mPageIndicator = (PageIndicator) parent.findViewById(mPageIndicatorViewId);
mPageIndicator.removeAllMarkers(mAllowPagedViewAnimations);
- ArrayList<Integer> markers = new ArrayList<Integer>();
+ ArrayList<PageIndicator.PageMarkerResources> markers =
+ new ArrayList<PageIndicator.PageMarkerResources>();
for (int i = 0; i < getChildCount(); ++i) {
markers.add(getPageIndicatorMarker(i));
}
@@ -424,8 +425,8 @@
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 @@
// 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 c0b2ae3..2f58571 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -4221,10 +4221,16 @@
}
@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);
}