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

Commit a79ab489 authored by Fan Zhang's avatar Fan Zhang
Browse files

Make Tile#intent private and immutable.

Bug: 77600770
Test: robotests
Change-Id: I89a838fd05a9a9c70bc4450d376a897f1e081053
parent e69a4919
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -96,8 +96,8 @@ public class DashboardCategory implements Parcelable {
    public synchronized void sortTiles(String skipPackageName) {
        // Sort mTiles based on [priority, package within priority]
        Collections.sort(mTiles, (tile1, tile2) -> {
            final String package1 = tile1.intent.getComponent().getPackageName();
            final String package2 = tile2.intent.getComponent().getPackageName();
            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;
+35 −36
Original line number Diff line number Diff line
@@ -59,36 +59,31 @@ public class Tile implements Parcelable {
     */
    public CharSequence summary;

    /**
     * Intent to launch when the preference is selected.
     */
    public Intent intent;

    /**
     * Optional list of user handles which the intent should be launched on.
     */
    public ArrayList<UserHandle> userHandle = new ArrayList<>();

    private String mCategory;

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

    /**
     * The metaData from the activity that defines this tile.
     */
    private Bundle mMetaData;

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

    /**
     * The metaData from the activity that defines this tile.
     */
    private final Bundle mMetaData;
    private final String mActivityPackage;
    private final String mActivityName;
    private final Intent mIntent;

    private ActivityInfo mActivityInfo;
    private String mCategory;

    public Tile(ActivityInfo activityInfo, String category) {
        mActivityInfo = activityInfo;
@@ -96,6 +91,23 @@ public class Tile implements Parcelable {
        mActivityName = mActivityInfo.name;
        mMetaData = activityInfo.metaData;
        mCategory = category;
        mIntent = new Intent().setClassName(mActivityPackage, mActivityName);
    }

    Tile(Parcel in) {
        mActivityPackage = in.readString();
        mActivityName = in.readString();
        mIntent = new Intent().setClassName(mActivityPackage, mActivityName);
        title = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
        summary = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
        final int N = in.readInt();
        for (int i = 0; i < N; i++) {
            userHandle.add(UserHandle.CREATOR.createFromParcel(in));
        }
        mCategory = in.readString();
        priority = in.readInt();
        mMetaData = in.readBundle();
        key = in.readString();
    }

    @Override
@@ -109,12 +121,6 @@ public class Tile implements Parcelable {
        dest.writeString(mActivityName);
        TextUtils.writeToParcel(title, dest, flags);
        TextUtils.writeToParcel(summary, dest, flags);
        if (intent != null) {
            dest.writeByte((byte) 1);
            intent.writeToParcel(dest, flags);
        } else {
            dest.writeByte((byte) 0);
        }
        final int N = userHandle.size();
        dest.writeInt(N);
        for (int i = 0; i < N; i++) {
@@ -126,6 +132,17 @@ public class Tile implements Parcelable {
        dest.writeString(key);
    }

    public String getPackageName() {
        return mActivityPackage;
    }

    /**
     * Intent to launch when the preference is selected.
     */
    public Intent getIntent() {
        return mIntent;
    }

    /**
     * Category in which the tile should be placed.
     */
@@ -190,24 +207,6 @@ public class Tile implements Parcelable {
                && !TextUtils.equals(pkgName, activityInfo.packageName);
    }

    Tile(Parcel in) {
        mActivityPackage = in.readString();
        mActivityName = in.readString();
        title = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
        summary = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
        if (in.readByte() != 0) {
            intent = Intent.CREATOR.createFromParcel(in);
        }
        final int N = in.readInt();
        for (int i = 0; i < N; i++) {
            userHandle.add(UserHandle.CREATOR.createFromParcel(in));
        }
        mCategory = in.readString();
        priority = in.readInt();
        mMetaData = in.readBundle();
        key = in.readString();
    }

    private ActivityInfo getActivityInfo(Context context) {
        if (mActivityInfo == null) {
            final PackageManager pm = context.getApplicationContext().getPackageManager();
+0 −6
Original line number Diff line number Diff line
@@ -303,8 +303,6 @@ public class TileUtils {
            Tile tile = addedCache.get(key);
            if (tile == null) {
                tile = new Tile(activityInfo, categoryKey);
                tile.intent = new Intent().setClassName(
                        activityInfo.packageName, activityInfo.name);
                tile.priority = usePriority ? resolved.priority : 0;
                updateTileData(context, tile, activityInfo, activityInfo.applicationInfo, pm);
                if (DEBUG) Log.d(LOG_TAG, "Adding tile " + tile.title);
@@ -368,12 +366,8 @@ public class TileUtils {
            // Set title and summary for the preference
            tile.title = title;
            tile.summary = summary;
            // Replace the intent with this specific activity
            tile.intent = new Intent().setClassName(activityInfo.packageName,
                    activityInfo.name);
            // Suggest a key for this tile
            tile.key = keyHint;

            return true;
        }

+4 −1
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ public class TileTest {
    public void setUp() {
        mActivityInfo = new ActivityInfo();
        mActivityInfo.packageName = RuntimeEnvironment.application.getPackageName();
        mActivityInfo.name = "abc";
        mActivityInfo.icon = R.drawable.ic_plus;
        mActivityInfo.metaData = new Bundle();
        mTile = new Tile(mActivityInfo, "category");
@@ -60,7 +61,8 @@ public class TileTest {

    @Test
    public void getIcon_noContextOrMetadata_returnNull() {
        final Tile tile = new Tile(new ActivityInfo(), "category");
        mActivityInfo.metaData = null;
        final Tile tile = new Tile(mActivityInfo, "category");
        assertThat(tile.getIcon(null)).isNull();
        assertThat(tile.getIcon(RuntimeEnvironment.application)).isNull();
    }
@@ -113,6 +115,7 @@ public class TileTest {

        final ActivityInfo activityInfo = new ActivityInfo();
        activityInfo.packageName = "blah";
        activityInfo.name = "abc";

        final Tile tile2 = new Tile(activityInfo, "category");
        assertThat(tile2.isIconTintable(RuntimeEnvironment.application)).isTrue();