From 81adfcfccae2e06ec2960b24e4a708d694e6bfd9 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Mon, 3 Oct 2016 13:46:22 -0700 Subject: [PATCH] Listen to category changes in preference fragment. Bug: 31781480 Test: make RunSettingsRoboTests Change-Id: I702e524eb3a9e40b653e112dba80d620be3bc9bb --- .../dashboard/DashboardFeatureProvider.java | 5 ++ .../DashboardFeatureProviderImpl.java | 14 +++++ .../system/SystemDashboardFragment.java | 63 ++++++++++++++++--- 3 files changed, 72 insertions(+), 10 deletions(-) diff --git a/src/com/android/settings/dashboard/DashboardFeatureProvider.java b/src/com/android/settings/dashboard/DashboardFeatureProvider.java index 148127eeded..bbf5bf1cf9b 100644 --- a/src/com/android/settings/dashboard/DashboardFeatureProvider.java +++ b/src/com/android/settings/dashboard/DashboardFeatureProvider.java @@ -51,4 +51,9 @@ public interface DashboardFeatureProvider { * group 200, and so on. */ int getPriorityGroup(Tile tile); + + /** + * Returns an unique string key for the tile. + */ + String getDashboardKeyForTile(Tile tile); } diff --git a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java index 836bfb08fae..a41ae181888 100644 --- a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java +++ b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java @@ -16,6 +16,7 @@ package com.android.settings.dashboard; +import android.content.ComponentName; import android.content.Context; import com.android.settingslib.drawer.CategoryKey; @@ -30,6 +31,8 @@ import java.util.List; */ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider { + private static final String DASHBOARD_TILE_PREF_KEY_PREFIX = "dashboard_tile_pref_"; + protected final Context mContext; private final CategoryManager mCategoryManager; @@ -63,4 +66,15 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider { public int getPriorityGroup(Tile tile) { return tile.priority / 100; } + + @Override + public String getDashboardKeyForTile(Tile tile) { + if (tile == null || tile.intent == null) { + return null; + } + final StringBuilder sb = new StringBuilder(DASHBOARD_TILE_PREF_KEY_PREFIX); + final ComponentName component = tile.intent.getComponent(); + sb.append(component.getClassName()); + return sb.toString(); + } } diff --git a/src/com/android/settings/system/SystemDashboardFragment.java b/src/com/android/settings/system/SystemDashboardFragment.java index ab8cc8d80dc..21bedf9947e 100644 --- a/src/com/android/settings/system/SystemDashboardFragment.java +++ b/src/com/android/settings/system/SystemDashboardFragment.java @@ -15,11 +15,14 @@ */ package com.android.settings.system; +import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.os.UserManager; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; +import android.text.TextUtils; +import android.util.Log; import com.android.settings.R; import com.android.settings.SettingsPreferenceFragment; @@ -27,12 +30,17 @@ import com.android.settings.dashboard.DashboardFeatureProvider; import com.android.settings.dashboard.DashboardTilePreference; import com.android.settings.deviceinfo.SystemUpdatePreferenceController; import com.android.settings.overlay.FeatureFactory; +import com.android.settings.search.Indexable; import com.android.settingslib.drawer.DashboardCategory; +import com.android.settingslib.drawer.SettingsDrawerActivity; import com.android.settingslib.drawer.Tile; import java.util.List; -public class SystemDashboardFragment extends SettingsPreferenceFragment { +public class SystemDashboardFragment extends SettingsPreferenceFragment + implements SettingsDrawerActivity.CategoryListener, Indexable { + + private static final String TAG = "SystemDashboardFrag"; private DashboardFeatureProvider mDashboardFeatureProvider; private SystemUpdatePreferenceController mSystemUpdatePreferenceController; @@ -51,12 +59,19 @@ public class SystemDashboardFragment extends SettingsPreferenceFragment { new SystemUpdatePreferenceController(context, UserManager.get(context)); } + @Override + public void onStart() { + super.onStart(); + final Activity activity = getActivity(); + if (activity instanceof SettingsDrawerActivity) { + ((SettingsDrawerActivity) activity).addCategoryListener(this); + } + } + @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { super.onCreatePreferences(savedInstanceState, rootKey); - addPreferencesFromResource(R.xml.system_dashboard_fragment); - mSystemUpdatePreferenceController.displayPreference(getPreferenceScreen()); - addDashboardCategoryAsPreference(); + refreshAllPreferences(); } @Override @@ -66,17 +81,46 @@ public class SystemDashboardFragment extends SettingsPreferenceFragment { return handled || super.onPreferenceTreeClick(preference); } + @Override + public void onStop() { + super.onStop(); + final Activity activity = getActivity(); + if (activity instanceof SettingsDrawerActivity) { + ((SettingsDrawerActivity) activity).remCategoryListener(this); + } + } + + @Override + public void onCategoriesChanged() { + refreshAllPreferences(); + } + /** - * Adds dynamic tiles for system category onto PreferenceScreen. + * Refresh preference items using system category dashboard items. */ - private void addDashboardCategoryAsPreference() { + private void refreshAllPreferences() { + PreferenceScreen screen = getPreferenceScreen(); + if (screen != null) { + screen.removeAll(); + } + final Context context = getContext(); - final PreferenceScreen screen = getPreferenceScreen(); final DashboardCategory category = mDashboardFeatureProvider.getTilesForSystemCategory(); final List tiles = category.tiles; + + addPreferencesFromResource(R.xml.system_dashboard_fragment); + screen = getPreferenceScreen(); + mSystemUpdatePreferenceController.displayPreference(getPreferenceScreen()); + for (Tile tile : tiles) { - final DashboardTilePreference pref = new DashboardTilePreference(context); + final String key = mDashboardFeatureProvider.getDashboardKeyForTile(tile); + if (TextUtils.isEmpty(key)) { + Log.d(TAG, "tile does not contain a key, skipping " + tile); + continue; + } + final Preference pref = new DashboardTilePreference(context); pref.setTitle(tile.title); + pref.setKey(key); pref.setSummary(tile.summary); if (tile.icon != null) { pref.setIcon(tile.icon.loadDrawable(context)); @@ -91,5 +135,4 @@ public class SystemDashboardFragment extends SettingsPreferenceFragment { screen.addPreference(pref); } } - -} \ No newline at end of file +}