From f8b2180b9674e39beeee1ea5efce8f52bf95ed4c Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Tue, 12 Apr 2016 10:32:20 -0400 Subject: [PATCH] Settings dashboard performance work - Don't block main thread with rebuild work - Don't run rebuild as foreground priority - Don't use comparator on apps/notifications summaries, we don't care about order - Simplify dashboard item layout Change-Id: I33bdd06a234ea308b44b45cac5ed1e9eac1c7d43 Fixes: 26541310 --- res/layout/dashboard_tile.xml | 73 +++++++------------ .../applications/ManageApplications.java | 26 ++++--- .../applications/NotificationApps.java | 14 +++- 3 files changed, 55 insertions(+), 58 deletions(-) diff --git a/res/layout/dashboard_tile.xml b/res/layout/dashboard_tile.xml index cd7c8ee08b0..983e6eac385 100644 --- a/res/layout/dashboard_tile.xml +++ b/res/layout/dashboard_tile.xml @@ -15,57 +15,40 @@ --> + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center_vertical" + android:minHeight="@dimen/dashboard_tile_minimum_height" + android:clickable="true" + android:background="@drawable/selectable_card" > + android:id="@android:id/icon" + android:layout_width="@dimen/dashboard_tile_image_size" + android:layout_height="@dimen/dashboard_tile_image_size" + android:scaleType="centerInside" + android:layout_marginStart="@dimen/dashboard_tile_image_margin_start" + android:layout_marginEnd="@dimen/dashboard_tile_image_margin_end" /> + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical"> - + - - - - - - - - - + diff --git a/src/com/android/settings/applications/ManageApplications.java b/src/com/android/settings/applications/ManageApplications.java index 49ef23a19b1..9de3f7a6475 100644 --- a/src/com/android/settings/applications/ManageApplications.java +++ b/src/com/android/settings/applications/ManageApplications.java @@ -23,10 +23,7 @@ import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.icu.text.AlphabeticIndex; -import android.os.Bundle; -import android.os.Environment; -import android.os.UserHandle; -import android.os.UserManager; +import android.os.*; import android.preference.PreferenceFrameLayout; import android.text.TextUtils; import android.util.ArraySet; @@ -1225,6 +1222,7 @@ public class ManageApplications extends InstrumentedFragment // TODO: Can probably hack together with less than full app state. private final ApplicationsState mAppState; private final ApplicationsState.Session mSession; + private final Handler mHandler; private SummaryProvider(Context context, SummaryLoader loader) { mContext = context; @@ -1232,6 +1230,7 @@ public class ManageApplications extends InstrumentedFragment mAppState = ApplicationsState.getInstance((Application) context.getApplicationContext()); mSession = mAppState.newSession(this); + mHandler = new Handler(mAppState.getBackgroundLooper()); } @Override @@ -1248,6 +1247,16 @@ public class ManageApplications extends InstrumentedFragment mLoader.setSummary(this, mContext.getString(R.string.apps_summary, apps.size())); } + private void postRebuild() { + mHandler.post(new Runnable() { + @Override + public void run() { + updateSummary(mSession.rebuild(ApplicationsState.FILTER_DOWNLOADED_AND_LAUNCHER, + null, false)); + } + }); + } + @Override public void onRebuildComplete(ArrayList apps) { updateSummary(apps); @@ -1255,20 +1264,17 @@ public class ManageApplications extends InstrumentedFragment @Override public void onPackageListChanged() { - updateSummary(mSession.rebuild(ApplicationsState.FILTER_DOWNLOADED_AND_LAUNCHER, - ApplicationsState.ALPHA_COMPARATOR)); + postRebuild(); } @Override public void onLauncherInfoChanged() { - updateSummary(mSession.rebuild(ApplicationsState.FILTER_DOWNLOADED_AND_LAUNCHER, - ApplicationsState.ALPHA_COMPARATOR)); + postRebuild(); } @Override public void onLoadEntriesCompleted() { - updateSummary(mSession.rebuild(ApplicationsState.FILTER_DOWNLOADED_AND_LAUNCHER, - ApplicationsState.ALPHA_COMPARATOR)); + postRebuild(); } @Override diff --git a/src/com/android/settings/applications/NotificationApps.java b/src/com/android/settings/applications/NotificationApps.java index f76aa8d765c..b599eb6e6aa 100644 --- a/src/com/android/settings/applications/NotificationApps.java +++ b/src/com/android/settings/applications/NotificationApps.java @@ -17,6 +17,7 @@ package com.android.settings.applications; import android.app.Activity; import android.app.Application; import android.content.Context; +import android.os.Handler; import com.android.settings.R; import com.android.settings.applications.AppStateBaseBridge.Callback; import com.android.settings.dashboard.SummaryLoader; @@ -44,6 +45,7 @@ public class NotificationApps extends ManageApplications { private final ApplicationsState.Session mSession; private final NotificationBackend mNotifBackend; private final AppStateNotificationBridge mExtraInfoBridge; + private final Handler mHandler; private SummaryProvider(Context context, SummaryLoader loader) { mContext = context; @@ -54,6 +56,7 @@ public class NotificationApps extends ManageApplications { mNotifBackend = new NotificationBackend(); mExtraInfoBridge = new AppStateNotificationBridge(mContext, mAppState, this, mNotifBackend); + mHandler = new Handler(mAppState.getBackgroundLooper()); } @Override @@ -84,9 +87,14 @@ public class NotificationApps extends ManageApplications { @Override public void onExtraInfoUpdated() { - updateSummary(mSession.rebuild( - AppStateNotificationBridge.FILTER_APP_NOTIFICATION_BLOCKED, - ApplicationsState.ALPHA_COMPARATOR)); + mHandler.post(new Runnable() { + @Override + public void run() { + updateSummary(mSession.rebuild( + AppStateNotificationBridge.FILTER_APP_NOTIFICATION_BLOCKED, + null, false)); + } + }); } @Override