Listen to category changes in preference fragment.

Bug: 31781480
Test: make RunSettingsRoboTests
Change-Id: I702e524eb3a9e40b653e112dba80d620be3bc9bb
This commit is contained in:
Fan Zhang
2016-10-03 13:46:22 -07:00
parent 9c1fcf9916
commit 81adfcfcca
3 changed files with 72 additions and 10 deletions

View File

@@ -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);
}

View File

@@ -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();
}
}

View File

@@ -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<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 @@ public class SystemDashboardFragment extends SettingsPreferenceFragment {
screen.addPreference(pref);
}
}
}
}