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

Commit 9574fb80 authored by Fan Zhang's avatar Fan Zhang Committed by Android (Google) Code Review
Browse files

Merge "Listen to category changes in preference fragment."

parents a3e77342 81adfcfc
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);
        }
    }

}