diff options
author | Michael Jurka <mikejurka@google.com> | 2011-11-21 14:05:46 -0800 |
---|---|---|
committer | Michael Jurka <mikejurka@google.com> | 2011-11-22 17:00:06 -0800 |
commit | e326f186af6b00e4ea32849f1527254c669d0600 (patch) | |
tree | 60b08e3581cebbf8edec085d2e9bc8ee341c9a3f /src | |
parent | 31186d0535ce2147e0d094c1409782d0b1aa5ea0 (diff) | |
download | android_packages_apps_Trebuchet-e326f186af6b00e4ea32849f1527254c669d0600.tar.gz android_packages_apps_Trebuchet-e326f186af6b00e4ea32849f1527254c669d0600.tar.bz2 android_packages_apps_Trebuchet-e326f186af6b00e4ea32849f1527254c669d0600.zip |
Unload widget previews when launcher is not visible
Can save ~1-2MB of RAM
Bug #5104303
Change-Id: I992bec33052f4d2c201e528b5edf384d05960e71
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/launcher2/AppsCustomizePagedView.java | 20 | ||||
-rw-r--r-- | src/com/android/launcher2/AppsCustomizeTabHost.java | 25 | ||||
-rw-r--r-- | src/com/android/launcher2/Launcher.java | 10 | ||||
-rw-r--r-- | src/com/android/launcher2/PagedView.java | 2 | ||||
-rw-r--r-- | src/com/android/launcher2/PagedViewGridLayout.java | 6 |
5 files changed, 59 insertions, 4 deletions
diff --git a/src/com/android/launcher2/AppsCustomizePagedView.java b/src/com/android/launcher2/AppsCustomizePagedView.java index 0189d6c35..ca02e1e9e 100644 --- a/src/com/android/launcher2/AppsCustomizePagedView.java +++ b/src/com/android/launcher2/AppsCustomizePagedView.java @@ -393,15 +393,17 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen mWidgetSpacingLayout.measure(widthSpec, heightSpec); mContentWidth = mWidgetSpacingLayout.getContentWidth(); + AppsCustomizeTabHost host = (AppsCustomizeTabHost) getTabHost(); + final boolean hostIsTransitioning = host.isTransitioning(); + // Restore the page int page = getPageForComponent(mSaveInstanceStateItemIndex); - invalidatePageData(Math.max(0, page)); + invalidatePageData(Math.max(0, page), hostIsTransitioning); // Show All Apps cling if we are finished transitioning, otherwise, we will try again when // the transition completes in AppsCustomizeTabHost (otherwise the wrong offsets will be // returned while animating) - AppsCustomizeTabHost host = (AppsCustomizeTabHost) getTabHost(); - if (!host.isTransitioning()) { + if (!hostIsTransitioning) { post(new Runnable() { @Override public void run() { @@ -662,6 +664,18 @@ public class AppsCustomizePagedView extends PagedViewWithDraggableItems implemen cancelAllTasks(); } + public void clearAllWidgetPages() { + cancelAllTasks(); + int count = getChildCount(); + for (int i = 0; i < count; i++) { + View v = getPageAt(i); + if (v instanceof PagedViewGridLayout) { + ((PagedViewGridLayout) v).removeAllViewsOnPage(); + mDirtyPageContent.set(i, true); + } + } + } + private void cancelAllTasks() { // Clean up all the async tasks Iterator<AppsCustomizeAsyncTask> iter = mRunningTasks.iterator(); diff --git a/src/com/android/launcher2/AppsCustomizeTabHost.java b/src/com/android/launcher2/AppsCustomizeTabHost.java index 778d6bc75..2963240fa 100644 --- a/src/com/android/launcher2/AppsCustomizeTabHost.java +++ b/src/com/android/launcher2/AppsCustomizeTabHost.java @@ -366,6 +366,11 @@ public class AppsCustomizeTabHost extends TabHost implements LauncherTransitiona } mContent.setVisibility(VISIBLE); + if (!toWorkspace) { + // Make sure the current page is loaded (we start loading the side pages after the + // transition to prevent slowing down the animation) + mAppsCustomizePane.loadAssociatedPages(mAppsCustomizePane.getCurrentPage(), true); + } if (animated && !delayLauncherTransitionUntilLayout) { enableAndBuildHardwareLayer(); } @@ -391,6 +396,9 @@ public class AppsCustomizeTabHost extends TabHost implements LauncherTransitiona // Dismiss the workspace cling and show the all apps cling (if not already shown) l.dismissWorkspaceCling(null); mAppsCustomizePane.showAllAppsCling(); + // Make sure adjacent pages are loaded (we wait until after the transition to + // prevent slowing down the animation) + mAppsCustomizePane.loadAssociatedPages(mAppsCustomizePane.getCurrentPage()); if (!LauncherApplication.isScreenLarge()) { mAppsCustomizePane.hideScrollingIndicator(false); @@ -398,6 +406,23 @@ public class AppsCustomizeTabHost extends TabHost implements LauncherTransitiona } } + public void onResume() { + if (getVisibility() == VISIBLE) { + mContent.setVisibility(VISIBLE); + // We unload the widget previews when the UI is hidden, so need to reload pages + // Load the current page synchronously, and the neighboring pages asynchronously + mAppsCustomizePane.loadAssociatedPages(mAppsCustomizePane.getCurrentPage(), true); + mAppsCustomizePane.loadAssociatedPages(mAppsCustomizePane.getCurrentPage()); + } + } + + public void onTrimMemory() { + mContent.setVisibility(GONE); + // Clear the widget pages of all their subviews - this will trigger the widget previews + // to delete their bitmaps + mAppsCustomizePane.clearAllWidgetPages(); + } + boolean isTransitioning() { return mInTransition; } diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java index 6ea14db41..c917aec1a 100644 --- a/src/com/android/launcher2/Launcher.java +++ b/src/com/android/launcher2/Launcher.java @@ -36,6 +36,7 @@ import android.content.ActivityNotFoundException; import android.content.BroadcastReceiver; import android.content.ClipData; import android.content.ClipDescription; +import android.content.ComponentCallbacks2; import android.content.ComponentName; import android.content.ContentResolver; import android.content.Context; @@ -563,6 +564,7 @@ public final class Launcher extends Activity // When we resume Launcher, a different Activity might be responsible for the app // market intent, so refresh the icon updateAppMarketIcon(); + mAppsCustomizeTabHost.onResume(); if (!mWorkspaceLoading) { final ViewTreeObserver observer = mWorkspace.getViewTreeObserver(); final Workspace workspace = mWorkspace; @@ -2397,6 +2399,14 @@ public final class Launcher extends Activity } } + @Override + public void onTrimMemory(int level) { + super.onTrimMemory(level); + if (level == ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN) { + mAppsCustomizeTabHost.onTrimMemory(); + } + } + void showWorkspace(boolean animated) { Resources res = getResources(); int stagger = res.getInteger(R.integer.config_appsCustomizeWorkspaceAnimationStagger); diff --git a/src/com/android/launcher2/PagedView.java b/src/com/android/launcher2/PagedView.java index ba303a137..3f5652e1d 100644 --- a/src/com/android/launcher2/PagedView.java +++ b/src/com/android/launcher2/PagedView.java @@ -143,7 +143,7 @@ public abstract class PagedView extends ViewGroup { private PageSwitchListener mPageSwitchListener; - private ArrayList<Boolean> mDirtyPageContent; + protected ArrayList<Boolean> mDirtyPageContent; // choice modes protected static final int CHOICE_MODE_NONE = 0; diff --git a/src/com/android/launcher2/PagedViewGridLayout.java b/src/com/android/launcher2/PagedViewGridLayout.java index 5c32e0934..b1b621598 100644 --- a/src/com/android/launcher2/PagedViewGridLayout.java +++ b/src/com/android/launcher2/PagedViewGridLayout.java @@ -68,6 +68,12 @@ public class PagedViewGridLayout extends GridLayout implements Page { heightMeasureSpec); } + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + mOnLayoutListener = null; + } + public void setOnLayoutListener(Runnable r) { mOnLayoutListener = r; } |