Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 81adfcfc authored by Fan Zhang's avatar Fan Zhang
Browse files

Listen to category changes in preference fragment.

Bug: 31781480
Test: make RunSettingsRoboTests
Change-Id: I702e524eb3a9e40b653e112dba80d620be3bc9bb
parent 9c1fcf99
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -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);
}
+14 −0
Original line number Diff line number Diff line
@@ -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();
    }
}
+53 −10
Original line number Diff line number Diff line
@@ -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);
        }
    }

}