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. * group 200, and so on.
*/ */
int getPriorityGroup(Tile tile); 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; package com.android.settings.dashboard;
import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import com.android.settingslib.drawer.CategoryKey; import com.android.settingslib.drawer.CategoryKey;
@@ -30,6 +31,8 @@ import java.util.List;
*/ */
public class DashboardFeatureProviderImpl implements DashboardFeatureProvider { public class DashboardFeatureProviderImpl implements DashboardFeatureProvider {
private static final String DASHBOARD_TILE_PREF_KEY_PREFIX = "dashboard_tile_pref_";
protected final Context mContext; protected final Context mContext;
private final CategoryManager mCategoryManager; private final CategoryManager mCategoryManager;
@@ -63,4 +66,15 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider {
public int getPriorityGroup(Tile tile) { public int getPriorityGroup(Tile tile) {
return tile.priority / 100; 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; package com.android.settings.system;
import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import android.os.UserManager; import android.os.UserManager;
import android.support.v7.preference.Preference; import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen; import android.support.v7.preference.PreferenceScreen;
import android.text.TextUtils;
import android.util.Log;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment; 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.dashboard.DashboardTilePreference;
import com.android.settings.deviceinfo.SystemUpdatePreferenceController; import com.android.settings.deviceinfo.SystemUpdatePreferenceController;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.Indexable;
import com.android.settingslib.drawer.DashboardCategory; import com.android.settingslib.drawer.DashboardCategory;
import com.android.settingslib.drawer.SettingsDrawerActivity;
import com.android.settingslib.drawer.Tile; import com.android.settingslib.drawer.Tile;
import java.util.List; 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 DashboardFeatureProvider mDashboardFeatureProvider;
private SystemUpdatePreferenceController mSystemUpdatePreferenceController; private SystemUpdatePreferenceController mSystemUpdatePreferenceController;
@@ -51,12 +59,19 @@ public class SystemDashboardFragment extends SettingsPreferenceFragment {
new SystemUpdatePreferenceController(context, UserManager.get(context)); 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 @Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
super.onCreatePreferences(savedInstanceState, rootKey); super.onCreatePreferences(savedInstanceState, rootKey);
addPreferencesFromResource(R.xml.system_dashboard_fragment); refreshAllPreferences();
mSystemUpdatePreferenceController.displayPreference(getPreferenceScreen());
addDashboardCategoryAsPreference();
} }
@Override @Override
@@ -66,17 +81,46 @@ public class SystemDashboardFragment extends SettingsPreferenceFragment {
return handled || super.onPreferenceTreeClick(preference); 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 Context context = getContext();
final PreferenceScreen screen = getPreferenceScreen();
final DashboardCategory category = mDashboardFeatureProvider.getTilesForSystemCategory(); final DashboardCategory category = mDashboardFeatureProvider.getTilesForSystemCategory();
final List<Tile> tiles = category.tiles; final List<Tile> tiles = category.tiles;
addPreferencesFromResource(R.xml.system_dashboard_fragment);
screen = getPreferenceScreen();
mSystemUpdatePreferenceController.displayPreference(getPreferenceScreen());
for (Tile tile : tiles) { 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.setTitle(tile.title);
pref.setKey(key);
pref.setSummary(tile.summary); pref.setSummary(tile.summary);
if (tile.icon != null) { if (tile.icon != null) {
pref.setIcon(tile.icon.loadDrawable(context)); pref.setIcon(tile.icon.loadDrawable(context));
@@ -91,5 +135,4 @@ public class SystemDashboardFragment extends SettingsPreferenceFragment {
screen.addPreference(pref); screen.addPreference(pref);
} }
} }
} }