summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMichael Jurka <mikejurka@google.com>2012-03-12 18:36:12 -0700
committerMichael Jurka <mikejurka@google.com>2012-03-20 01:40:41 -0700
commit39e5d176e6e375e7ae46d42ed14412d54cb223c9 (patch)
tree0b8ce3e8550e6611f0206efa5e585373319fcc2d /src
parent37ad978fd992342c3539376affb1902d8fbd92ff (diff)
downloadandroid_packages_apps_Trebuchet-39e5d176e6e375e7ae46d42ed14412d54cb223c9.tar.gz
android_packages_apps_Trebuchet-39e5d176e6e375e7ae46d42ed14412d54cb223c9.tar.bz2
android_packages_apps_Trebuchet-39e5d176e6e375e7ae46d42ed14412d54cb223c9.zip
Fix more cases where blips show up in All Apps
- defer any updates to the widget previews if we're mid-transition - call System.gc() before a transition to avoid gc mid-transition Change-Id: If8b4699b142af20b2f14e9a8653f893139adf90e
Diffstat (limited to 'src')
-rw-r--r--src/com/android/launcher2/AppsCustomizePagedView.java114
-rw-r--r--src/com/android/launcher2/AppsCustomizeTabHost.java7
2 files changed, 83 insertions, 38 deletions
diff --git a/src/com/android/launcher2/AppsCustomizePagedView.java b/src/com/android/launcher2/AppsCustomizePagedView.java
index 3fcff726f..a44765acd 100644
--- a/src/com/android/launcher2/AppsCustomizePagedView.java
+++ b/src/com/android/launcher2/AppsCustomizePagedView.java
@@ -32,7 +32,6 @@ import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
-import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.MaskFilter;
import android.graphics.Matrix;
@@ -170,7 +169,8 @@ class AppsCustomizeAsyncTask extends AsyncTask<AsyncTaskPageData, Void, AsyncTas
*/
public class AppsCustomizePagedView extends PagedViewWithDraggableItems implements
AllAppsView, View.OnClickListener, View.OnKeyListener, DragSource,
- PagedViewIcon.PressedCallback, PagedViewWidget.ShortPressListener {
+ PagedViewIcon.PressedCallback, PagedViewWidget.ShortPressListener,
+ LauncherTransitionable {
static final String LOG_TAG = "AppsCustomizePagedView";
/**
@@ -241,6 +241,11 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen
PendingAddWidgetInfo mCreateWidgetInfo = null;
private boolean mDraggingWidget = false;
+ // Deferral of loading widget previews during launcher transitions
+ private boolean mInTransition;
+ private ArrayList<AsyncTaskPageData> mDeferredSyncWidgetPageItems =
+ new ArrayList<AsyncTaskPageData>();
+
public AppsCustomizePagedView(Context context, AttributeSet attrs) {
super(context, attrs);
mLayoutInflater = LayoutInflater.from(context);
@@ -732,6 +737,32 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen
}
@Override
+ public void onLauncherTransitionStart(Launcher l, boolean animated, boolean toWorkspace) {
+ mInTransition = true;
+ if (toWorkspace) {
+ cancelAllTasks();
+ }
+ }
+
+ @Override
+ public View getContent() {
+ return null;
+ }
+
+ @Override
+ public void onLauncherTransitionStep(Launcher l, float t) {
+ }
+
+ @Override
+ public void onLauncherTransitionEnd(Launcher l, boolean animated, boolean toWorkspace) {
+ mInTransition = false;
+ for (AsyncTaskPageData d : mDeferredSyncWidgetPageItems) {
+ onSyncWidgetPageItems(d);
+ }
+ mDeferredSyncWidgetPageItems.clear();
+ }
+
+ @Override
public void onDropCompleted(View target, DragObject d, boolean success) {
endDragging(target, success);
@@ -785,6 +816,7 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen
AppsCustomizeAsyncTask task = (AppsCustomizeAsyncTask) iter.next();
task.cancel(false);
iter.remove();
+ mDirtyPageContent.set(task.page, true);
}
}
@@ -804,7 +836,7 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen
Iterator<AppsCustomizeAsyncTask> iter = mRunningTasks.iterator();
while (iter.hasNext()) {
AppsCustomizeAsyncTask task = (AppsCustomizeAsyncTask) iter.next();
- int pageIndex = task.page + mNumAppsPages;
+ int pageIndex = task.page;
if ((mNextPage > mCurrentPage && pageIndex >= mCurrentPage) ||
(mNextPage < mCurrentPage && pageIndex <= mCurrentPage)) {
task.setThreadPriority(getThreadPriorityForPage(pageIndex));
@@ -906,7 +938,7 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen
int minPageDiff = Integer.MAX_VALUE;
while (iter.hasNext()) {
AppsCustomizeAsyncTask task = (AppsCustomizeAsyncTask) iter.next();
- minPageDiff = Math.abs(task.page + mNumAppsPages - toPage);
+ minPageDiff = Math.abs(task.page - toPage);
}
int rawPageDiff = Math.abs(page - toPage);
@@ -941,7 +973,7 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen
Iterator<AppsCustomizeAsyncTask> iter = mRunningTasks.iterator();
while (iter.hasNext()) {
AppsCustomizeAsyncTask task = (AppsCustomizeAsyncTask) iter.next();
- int taskPage = task.page + mNumAppsPages;
+ int taskPage = task.page;
if (taskPage < getAssociatedLowerPageBound(mCurrentPage) ||
taskPage > getAssociatedUpperPageBound(mCurrentPage)) {
task.cancel(false);
@@ -952,7 +984,7 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen
}
// We introduce a slight delay to order the loading of side pages so that we don't thrash
- final int sleepMs = getSleepForPage(page + mNumAppsPages);
+ final int sleepMs = getSleepForPage(page);
AsyncTaskPageData pageData = new AsyncTaskPageData(page, widgets, cellWidth, cellHeight,
new AsyncTaskCallback() {
@Override
@@ -972,20 +1004,17 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen
new AsyncTaskCallback() {
@Override
public void run(AppsCustomizeAsyncTask task, AsyncTaskPageData data) {
- try {
- mRunningTasks.remove(task);
- if (task.isCancelled()) return;
- onSyncWidgetPageItems(data);
- } finally {
- data.cleanup(task.isCancelled());
- }
+ mRunningTasks.remove(task);
+ if (task.isCancelled()) return;
+ // do cleanup inside onSyncWidgetPageItems
+ onSyncWidgetPageItems(data);
}
});
// Ensure that the task is appropriately prioritized and runs in parallel
AppsCustomizeAsyncTask t = new AppsCustomizeAsyncTask(page,
AsyncTaskPageData.Type.LoadWidgetPreviewData);
- t.setThreadPriority(getThreadPriorityForPage(page + mNumAppsPages));
+ t.setThreadPriority(getThreadPriorityForPage(page));
t.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, pageData);
mRunningTasks.add(t);
}
@@ -1128,13 +1157,13 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen
- ((mWidgetCountY - 1) * mWidgetHeightGap)) / mWidgetCountY);
// Prepare the set of widgets to load previews for in the background
- int offset = page * numItemsPerPage;
+ int offset = (page - mNumAppsPages) * numItemsPerPage;
for (int i = offset; i < Math.min(offset + numItemsPerPage, mWidgets.size()); ++i) {
items.add(mWidgets.get(i));
}
// Prepopulate the pages with the other widget info, and fill in the previews later
- final PagedViewGridLayout layout = (PagedViewGridLayout) getPageAt(page + mNumAppsPages);
+ final PagedViewGridLayout layout = (PagedViewGridLayout) getPageAt(page);
layout.setColumnCount(layout.getCellCountX());
for (int i = 0; i < items.size(); ++i) {
Object rawInfo = items.get(i);
@@ -1245,29 +1274,38 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen
}
}
}
- private void onSyncWidgetPageItems(AsyncTaskPageData data) {
- int page = data.page;
- PagedViewGridLayout layout = (PagedViewGridLayout) getPageAt(page + mNumAppsPages);
- ArrayList<Object> items = data.items;
- int count = items.size();
- for (int i = 0; i < count; ++i) {
- PagedViewWidget widget = (PagedViewWidget) layout.getChildAt(i);
- if (widget != null) {
- Bitmap preview = data.generatedImages.get(i);
- widget.applyPreview(new FastBitmapDrawable(preview), i);
- }
+ private void onSyncWidgetPageItems(AsyncTaskPageData data) {
+ if (mInTransition) {
+ mDeferredSyncWidgetPageItems.add(data);
+ return;
}
+ try {
+ int page = data.page;
+ PagedViewGridLayout layout = (PagedViewGridLayout) getPageAt(page);
+
+ ArrayList<Object> items = data.items;
+ int count = items.size();
+ for (int i = 0; i < count; ++i) {
+ PagedViewWidget widget = (PagedViewWidget) layout.getChildAt(i);
+ if (widget != null) {
+ Bitmap preview = data.generatedImages.get(i);
+ widget.applyPreview(new FastBitmapDrawable(preview), i);
+ }
+ }
- layout.createHardwareLayer();
- invalidate();
+ layout.createHardwareLayer();
+ invalidate();
- // Update all thread priorities
- Iterator<AppsCustomizeAsyncTask> iter = mRunningTasks.iterator();
- while (iter.hasNext()) {
- AppsCustomizeAsyncTask task = (AppsCustomizeAsyncTask) iter.next();
- int pageIndex = task.page + mNumAppsPages;
- task.setThreadPriority(getThreadPriorityForPage(pageIndex));
+ // Update all thread priorities
+ Iterator<AppsCustomizeAsyncTask> iter = mRunningTasks.iterator();
+ while (iter.hasNext()) {
+ AppsCustomizeAsyncTask task = (AppsCustomizeAsyncTask) iter.next();
+ int pageIndex = task.page;
+ task.setThreadPriority(getThreadPriorityForPage(pageIndex));
+ }
+ } finally {
+ data.cleanup(false);
}
}
@@ -1281,7 +1319,7 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen
PagedViewGridLayout layout = new PagedViewGridLayout(context, mWidgetCountX,
mWidgetCountY);
setupPage(layout);
- addView(layout, new PagedViewGridLayout.LayoutParams(LayoutParams.MATCH_PARENT,
+ addView(layout, new PagedView.LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT));
}
@@ -1297,14 +1335,14 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen
if (page < mNumAppsPages) {
syncAppsPageItems(page, immediate);
} else {
- syncWidgetPageItems(page - mNumAppsPages, immediate);
+ syncWidgetPageItems(page, immediate);
}
}
// We want our pages to be z-ordered such that the further a page is to the left, the higher
// it is in the z-order. This is important to insure touch events are handled correctly.
View getPageAt(int index) {
- return getChildAt(getChildCount() - index - 1);
+ return getChildAt(indexToPage(index));
}
@Override
diff --git a/src/com/android/launcher2/AppsCustomizeTabHost.java b/src/com/android/launcher2/AppsCustomizeTabHost.java
index 7108c9f53..af0f205d5 100644
--- a/src/com/android/launcher2/AppsCustomizeTabHost.java
+++ b/src/com/android/launcher2/AppsCustomizeTabHost.java
@@ -355,6 +355,11 @@ public class AppsCustomizeTabHost extends TabHost implements LauncherTransitiona
// force building the layer, so you don't get a blip early in an animation
// when the layer is created layer
buildLayer();
+
+ // Let the GC system know that now is a good time to do any garbage
+ // collection; makes it less likely we'll get a GC during the all apps
+ // to workspace animation
+ System.gc();
}
}
@@ -366,6 +371,7 @@ public class AppsCustomizeTabHost extends TabHost implements LauncherTransitiona
/* LauncherTransitionable overrides */
@Override
public void onLauncherTransitionStart(Launcher l, boolean animated, boolean toWorkspace) {
+ mAppsCustomizePane.onLauncherTransitionStart(l, animated, toWorkspace);
mInTransition = true;
mTransitioningToWorkspace = toWorkspace;
@@ -405,6 +411,7 @@ public class AppsCustomizeTabHost extends TabHost implements LauncherTransitiona
@Override
public void onLauncherTransitionEnd(Launcher l, boolean animated, boolean toWorkspace) {
+ mAppsCustomizePane.onLauncherTransitionEnd(l, animated, toWorkspace);
mInTransition = false;
if (animated) {
setLayerType(LAYER_TYPE_NONE, null);