Listen to category changes in preference fragment.
Bug: 31781480
Test: make RunSettingsRoboTests
Change-Id: I702e524eb3a9e40b653e112dba80d620be3bc9bb
diff --git a/src/com/android/settings/dashboard/DashboardFeatureProvider.java b/src/com/android/settings/dashboard/DashboardFeatureProvider.java
index 148127e..bbf5bf1 100644
--- a/src/com/android/settings/dashboard/DashboardFeatureProvider.java
+++ b/src/com/android/settings/dashboard/DashboardFeatureProvider.java
@@ -51,4 +51,9 @@
* 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 836bfb0..a41ae18 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 @@
*/
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 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 ab8cc8d..21bedf9 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.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;
@@ -52,11 +60,18 @@
}
@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 @@
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<Tile> 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 @@
screen.addPreference(pref);
}
}
-
-}
\ No newline at end of file
+}