From ceb335f88fc0df88dafc8063733842afe35c5da1 Mon Sep 17 00:00:00 2001 From: Fabrice Di Meglio Date: Wed, 23 Jul 2014 16:25:30 -0700 Subject: [PATCH] Add Settings Dashboard refresh for Home activities - cache the number of Home activities into mHomeActivitiesCount - save and restore its value - use its value for triggering refresh of the Dashboard Change-Id: Ibc228b9b26c3515bba89ab17c7d39531125e8df8 --- .../android/settings/SettingsActivity.java | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java index be3662f33df..df7e0060500 100644 --- a/src/com/android/settings/SettingsActivity.java +++ b/src/com/android/settings/SettingsActivity.java @@ -134,6 +134,7 @@ public class SettingsActivity extends Activity private static final String SAVE_KEY_SEARCH_QUERY = ":settings:search_query"; private static final String SAVE_KEY_SHOW_HOME_AS_UP = ":settings:show_home_as_up"; private static final String SAVE_KEY_SHOW_SEARCH = ":settings:show_search"; + private static final String SAVE_KEY_HOME_ACTIVITIES_COUNT = ":settings:home_activities_count"; /** * When starting this activity, the invoking Intent can contain this extra @@ -349,6 +350,7 @@ public class SettingsActivity extends Activity }; private boolean mNeedToRevertToInitialFragment = false; + private int mHomeActivitiesCount = 1; public SwitchBar getSwitchBar() { return mSwitchBar; @@ -526,6 +528,8 @@ public class SettingsActivity extends Activity mDisplayHomeAsUpEnabled = savedState.getBoolean(SAVE_KEY_SHOW_HOME_AS_UP); mDisplaySearch = savedState.getBoolean(SAVE_KEY_SHOW_SEARCH); + mHomeActivitiesCount = savedState.getInt(SAVE_KEY_HOME_ACTIVITIES_COUNT, + 1 /* one home activity by default */); } else { if (!mIsShowingDashboard) { // Search is shown we are launched thru a Settings "shortcut". UP will be shown @@ -613,6 +617,14 @@ public class SettingsActivity extends Activity } } } + + mHomeActivitiesCount = getHomeActivitiesCount(); + } + + private int getHomeActivitiesCount() { + final ArrayList homeApps = new ArrayList(); + getPackageManager().getHomeActivities(homeApps); + return homeApps.size(); } private void setTitleFromIntent(Intent intent) { @@ -688,12 +700,21 @@ public class SettingsActivity extends Activity String query = (mSearchView != null) ? mSearchView.getQuery().toString() : EMPTY_QUERY; outState.putString(SAVE_KEY_SEARCH_QUERY, query); } + + outState.putInt(SAVE_KEY_HOME_ACTIVITIES_COUNT, mHomeActivitiesCount); } @Override public void onResume() { super.onResume(); + final int newHomeActivityCount = getHomeActivitiesCount(); + if (newHomeActivityCount != mHomeActivitiesCount) { + mHomeActivitiesCount = newHomeActivityCount; + setNeedToRebuildCategories(true); + invalidateCategories(); + } + mDevelopmentPreferencesListener = new SharedPreferences.OnSharedPreferenceChangeListener() { @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { @@ -1145,9 +1166,7 @@ public class SettingsActivity extends Activity } try { - final ArrayList homeApps = new ArrayList(); - getPackageManager().getHomeActivities(homeApps); - if (homeApps.size() < 2) { + if (mHomeActivitiesCount < 2) { // When there's only one available home app, omit this settings // category entirely at the top level UI. If the user just // uninstalled the penultimate home app candidiate, we also