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

Commit 83961e1b authored by Fan Zhang's avatar Fan Zhang
Browse files

Update metadata bundle every time we refresh tiles.

This ensures the metadata is refreshed every time we query tiles (which
happens every time when we launch a new settings page).

So if things are stale, it will be refreshed at next page load.

Fixes: 77600770
Test: robotests
Change-Id: I0259673da3e3498d8ef9643704b7e9baed69dfab
parent 63a67c5f
Loading
Loading
Loading
Loading
+9 −6
Original line number Diff line number Diff line
@@ -58,17 +58,13 @@ public class Tile implements Parcelable {
     */
    public ArrayList<UserHandle> userHandle = new ArrayList<>();

    /**
     * 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 CharSequence mSummaryOverride;

    private Bundle mMetaData;
    private String mCategory;

    public Tile(ActivityInfo activityInfo, String category) {
@@ -234,6 +230,13 @@ public class Tile implements Parcelable {
        return summary;
    }

    public void setMetaData(Bundle metaData) {
        mMetaData = metaData;
    }

    /**
     * The metaData from the activity that defines this tile.
     */
    public Bundle getMetaData() {
        return mMetaData;
    }
+2 −0
Original line number Diff line number Diff line
@@ -289,6 +289,8 @@ public class TileUtils {
            if (tile == null) {
                tile = new Tile(activityInfo, categoryKey);
                addedCache.put(key, tile);
            } else {
                tile.setMetaData(metaData);
            }

            if (!tile.userHandle.contains(user)) {
+34 −1
Original line number Diff line number Diff line
@@ -28,7 +28,6 @@ import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.isNull;
import static org.mockito.Mockito.atLeastOnce;
@@ -54,6 +53,7 @@ import android.provider.Settings.Global;
import android.util.ArrayMap;
import android.util.Pair;

import com.android.settingslib.R;
import com.android.settingslib.SettingsLibRobolectricTestRunner;

import org.junit.Before;
@@ -233,6 +233,39 @@ public class TileUtilsTest {
        assertThat(outTiles.get(0).isIconTintable(mContext)).isFalse();
    }

    @Test
    public void getTilesForIntent_tileAlreadyInCache_shouldUpdateMetaData() {
        final Map<Pair<String, String>, Tile> addedCache = new ArrayMap<>();
        final List<Tile> outTiles = new ArrayList<>();
        final List<ResolveInfo> info = new ArrayList<>();
        final ResolveInfo resolveInfo = newInfo(true, null /* category */, null, URI_GET_ICON,
                URI_GET_SUMMARY, null, 123);
        resolveInfo.activityInfo.packageName = "com.android.settings";
        resolveInfo.activityInfo.applicationInfo.packageName = "com.android.settings";
        info.add(resolveInfo);

        when(mPackageManager.queryIntentActivitiesAsUser(any(Intent.class), anyInt(), anyInt()))
                .thenReturn(info);

        TileUtils.getTilesForAction(mContext, UserHandle.CURRENT, IA_SETTINGS_ACTION, addedCache,
                null /* defaultCategory */, outTiles, false /* usePriority */);

        assertThat(outTiles).hasSize(1);
        final Bundle oldMetadata = outTiles.get(0).getMetaData();

        resolveInfo.activityInfo.metaData = new Bundle(oldMetadata);
        resolveInfo.activityInfo.metaData.putInt(META_DATA_PREFERENCE_ICON,
                R.drawable.ic_bt_cellphone);
        outTiles.clear();
        TileUtils.getTilesForAction(mContext, UserHandle.CURRENT, IA_SETTINGS_ACTION, addedCache,
                null /* defaultCategory */, outTiles, false /* usePriority */);

        assertThat(outTiles).hasSize(1);
        final Bundle newMetaData = outTiles.get(0).getMetaData();
        assertThat(newMetaData).isNotSameAs(oldMetadata);
    }


    @Test
    public void getTilesForIntent_shouldMarkIconTintableIfMetadataSet() {
        Map<Pair<String, String>, Tile> addedCache = new ArrayMap<>();