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

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

Merge "Stop using intent-filter priority as display order"

parents 56f79f0f 4c07a713
Loading
Loading
Loading
Loading
+8 −7
Original line number Diff line number Diff line
@@ -94,17 +94,18 @@ public class DashboardCategory implements Parcelable {
     * Sort priority value and package name for tiles in this category.
     */
    public synchronized void sortTiles(String skipPackageName) {
        // Sort mTiles based on [priority, package within priority]
        // Sort mTiles based on [order, package within order]
        Collections.sort(mTiles, (tile1, tile2) -> {
            // First sort by order
            final int orderCompare = tile2.getOrder() - tile1.getOrder();
            if (orderCompare != 0) {
                return orderCompare;
            }

            // Then sort by package name, skip package take precedence
            final String package1 = tile1.getPackageName();
            final String package2 = tile2.getPackageName();
            final int packageCompare = CASE_INSENSITIVE_ORDER.compare(package1, package2);
            // First sort by priority
            final int priorityCompare = tile2.priority - tile1.priority;
            if (priorityCompare != 0) {
                return priorityCompare;
            }
            // Then sort by package name, skip package take precedence
            if (packageCompare != 0) {
                if (TextUtils.equals(package1, skipPackageName)) {
                    return -1;
+33 −18
Original line number Diff line number Diff line
@@ -16,9 +16,11 @@

package com.android.settingslib.drawer;

import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_ORDER;
import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_PROFILE;
import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON;
import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON_URI;
import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_KEYHINT;
import static com.android.settingslib.drawer.TileUtils.PROFILE_ALL;
import static com.android.settingslib.drawer.TileUtils.PROFILE_PRIMARY;

@@ -64,16 +66,6 @@ public class Tile implements Parcelable {
     */
    public ArrayList<UserHandle> userHandle = new ArrayList<>();

    /**
     * Priority of the intent filter that created this tile, used for display ordering.
     */
    public int priority;

    /**
     * Optional key to use for this tile.
     */
    public String key;

    /**
     * The metaData from the activity that defines this tile.
     */
@@ -105,9 +97,7 @@ public class Tile implements Parcelable {
            userHandle.add(UserHandle.CREATOR.createFromParcel(in));
        }
        mCategory = in.readString();
        priority = in.readInt();
        mMetaData = in.readBundle();
        key = in.readString();
    }

    @Override
@@ -127,9 +117,7 @@ public class Tile implements Parcelable {
            userHandle.get(i).writeToParcel(dest, flags);
        }
        dest.writeString(mCategory);
        dest.writeInt(priority);
        dest.writeBundle(mMetaData);
        dest.writeString(key);
    }

    public String getPackageName() {
@@ -155,16 +143,43 @@ public class Tile implements Parcelable {
    }

    /**
     * Priority of the intent filter that created this tile, used for display ordering.
     * Priority of this tile, used for display ordering.
     */
    public int getPriority() {
    public int getOrder() {
        if (hasOrder()) {
            return mMetaData.getInt(META_DATA_KEY_ORDER);
        } else {
            return 0;
        }
    }

    public boolean hasOrder() {
        return mMetaData.containsKey(META_DATA_KEY_ORDER)
                && mMetaData.get(META_DATA_KEY_ORDER) instanceof Integer;
    }

    public Bundle getMetaData() {
        return mMetaData;
    }

    /**
     * Optional key to use for this tile.
     */
    public String getKey(Context context) {
        if (!hasKey()) {
            return null;
        }
        if (mMetaData.get(META_DATA_PREFERENCE_KEYHINT) instanceof Integer) {
            return context.getResources().getString(mMetaData.getInt(META_DATA_PREFERENCE_KEYHINT));
        } else {
            return mMetaData.getString(META_DATA_PREFERENCE_KEYHINT);
        }
    }

    public boolean hasKey() {
        return mMetaData != null && mMetaData.containsKey(META_DATA_PREFERENCE_KEYHINT);
    }

    /**
     * Optional icon to show for this tile.
     *
@@ -238,5 +253,5 @@ public class Tile implements Parcelable {
    }

    public static final Comparator<Tile> TILE_COMPARATOR =
            (lhs, rhs) -> rhs.priority - lhs.priority;
            (lhs, rhs) -> rhs.getOrder() - lhs.getOrder();
}
+9 −17
Original line number Diff line number Diff line
@@ -65,20 +65,17 @@ public class TileUtils {
     *
     * <p>A summary my be defined by meta-data named {@link #META_DATA_PREFERENCE_SUMMARY}
     */
    public static final String EXTRA_SETTINGS_ACTION =
            "com.android.settings.action.EXTRA_SETTINGS";
    public static final String EXTRA_SETTINGS_ACTION = "com.android.settings.action.EXTRA_SETTINGS";

    /**
     * @See {@link #EXTRA_SETTINGS_ACTION}.
     */
    private static final String IA_SETTINGS_ACTION =
            "com.android.settings.action.IA_SETTINGS";
    private static final String IA_SETTINGS_ACTION = "com.android.settings.action.IA_SETTINGS";

    /**
     * Same as #EXTRA_SETTINGS_ACTION but used for the platform Settings activities.
     */
    private static final String SETTINGS_ACTION =
            "com.android.settings.action.SETTINGS";
    private static final String SETTINGS_ACTION = "com.android.settings.action.SETTINGS";

    private static final String OPERATOR_SETTINGS =
            "com.android.settings.OPERATOR_APPLICATION_SETTING";
@@ -111,6 +108,12 @@ public class TileUtils {
     */
    public static final String META_DATA_PREFERENCE_KEYHINT = "com.android.settings.keyhint";

    /**
     * Order of the item that should be displayed on screen. Bigger value items displays closer on
     * top.
     */
    public static final String META_DATA_KEY_ORDER = "com.android.settings.order";

    /**
     * Name of the meta-data item that should be set in the AndroidManifest.xml
     * to specify the icon that should be displayed for the preference.
@@ -303,7 +306,6 @@ public class TileUtils {
            Tile tile = addedCache.get(key);
            if (tile == null) {
                tile = new Tile(activityInfo, categoryKey);
                tile.priority = usePriority ? resolved.priority : 0;
                updateTileData(context, tile, activityInfo, activityInfo.applicationInfo, pm);
                if (DEBUG) Log.d(LOG_TAG, "Adding tile " + tile.title);
                addedCache.put(key, tile);
@@ -323,7 +325,6 @@ public class TileUtils {
        if (applicationInfo.isSystemApp()) {
            CharSequence title = null;
            String summary = null;
            String keyHint = null;

            // Get the activity's meta-data
            try {
@@ -345,13 +346,6 @@ public class TileUtils {
                            summary = metaData.getString(META_DATA_PREFERENCE_SUMMARY);
                        }
                    }
                    if (metaData.containsKey(META_DATA_PREFERENCE_KEYHINT)) {
                        if (metaData.get(META_DATA_PREFERENCE_KEYHINT) instanceof Integer) {
                            keyHint = res.getString(metaData.getInt(META_DATA_PREFERENCE_KEYHINT));
                        } else {
                            keyHint = metaData.getString(META_DATA_PREFERENCE_KEYHINT);
                        }
                    }
                }
            } catch (PackageManager.NameNotFoundException | Resources.NotFoundException e) {
                if (DEBUG) Log.d(LOG_TAG, "Couldn't find info", e);
@@ -366,8 +360,6 @@ public class TileUtils {
            // Set title and summary for the preference
            tile.title = title;
            tile.summary = summary;
            // Suggest a key for this tile
            tile.key = keyHint;
            return true;
        }

+26 −0
Original line number Diff line number Diff line
package com.android.settingslib.drawer;

import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_ORDER;
import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_PROFILE;
import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON;
import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON_URI;
@@ -120,4 +121,29 @@ public class TileTest {
        final Tile tile2 = new Tile(activityInfo, "category");
        assertThat(tile2.isIconTintable(RuntimeEnvironment.application)).isTrue();
    }

    @Test
    public void getPriority_noMetadata_return0() {
        final Tile tile = new Tile(mActivityInfo, "category");

        assertThat(tile.getOrder()).isEqualTo(0);
    }

    @Test
    public void getPriority_badMetadata_return0() {
        mActivityInfo.metaData.putString(META_DATA_KEY_ORDER, "1");

        final Tile tile = new Tile(mActivityInfo, "category");

        assertThat(tile.getOrder()).isEqualTo(0);
    }

    @Test
    public void getPriority_validMetadata_returnMetadataValue() {
        mActivityInfo.metaData.putInt(META_DATA_KEY_ORDER, 1);

        final Tile tile = new Tile(mActivityInfo, "category");

        assertThat(tile.getOrder()).isEqualTo(1);
    }
}
+12 −19
Original line number Diff line number Diff line
@@ -16,6 +16,12 @@

package com.android.settingslib.drawer;

import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON;
import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON_URI;
import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_KEYHINT;
import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SUMMARY;
import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SUMMARY_URI;

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.ArgumentMatchers.any;
@@ -47,7 +53,6 @@ import android.os.RemoteException;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings.Global;
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.Pair;

@@ -131,7 +136,7 @@ public class TileUtilsTest {
                null /* defaultCategory */, outTiles, false /* usePriority */);

        assertThat(outTiles.size()).isEqualTo(1);
        assertThat(outTiles.get(0).key).isEqualTo(keyHint);
        assertThat(outTiles.get(0).getKey(mContext)).isEqualTo(keyHint);
    }

    @Test
@@ -361,16 +366,16 @@ public class TileUtilsTest {
        info.activityInfo.name = "123";
        info.activityInfo.metaData = new Bundle();
        info.activityInfo.metaData.putString("com.android.settings.category", category);
        info.activityInfo.metaData.putInt("com.android.settings.icon", 314159);
        info.activityInfo.metaData.putString("com.android.settings.summary", "static-summary");
        info.activityInfo.metaData.putInt(META_DATA_PREFERENCE_ICON, 314159);
        info.activityInfo.metaData.putString(META_DATA_PREFERENCE_SUMMARY, "static-summary");
        if (keyHint != null) {
            info.activityInfo.metaData.putString("com.android.settings.keyhint", keyHint);
            info.activityInfo.metaData.putString(META_DATA_PREFERENCE_KEYHINT, keyHint);
        }
        if (iconUri != null) {
            info.activityInfo.metaData.putString("com.android.settings.icon_uri", iconUri);
            info.activityInfo.metaData.putString(META_DATA_PREFERENCE_ICON_URI, iconUri);
        }
        if (summaryUri != null) {
            info.activityInfo.metaData.putString("com.android.settings.summary_uri", summaryUri);
            info.activityInfo.metaData.putString(META_DATA_PREFERENCE_SUMMARY_URI, summaryUri);
        }
        if (titleResId != 0) {
            info.activityInfo.metaData.putInt(TileUtils.META_DATA_PREFERENCE_TITLE, titleResId);
@@ -383,16 +388,4 @@ public class TileUtilsTest {
        }
        return info;
    }

    private void addMetadataToInfo(ResolveInfo info, String key, String value) {
        if (!TextUtils.isEmpty(key)) {
            if (info.activityInfo == null) {
                info.activityInfo = new ActivityInfo();
            }
            if (info.activityInfo.metaData == null) {
                info.activityInfo.metaData = new Bundle();
            }
            info.activityInfo.metaData.putString(key, value);
        }
    }
}