diff options
5 files changed, 224 insertions, 130 deletions
diff --git a/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/ActivityTile.java b/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/ActivityTile.java new file mode 100644 index 000000000000..06a4a45b4853 --- /dev/null +++ b/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/ActivityTile.java @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settingslib.drawer; + +import android.content.Context; +import android.content.Intent; +import android.content.pm.ComponentInfo; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.os.Parcel; +import android.util.Log; + +import java.util.List; +import java.util.Objects; + +/** + * Description of a single dashboard tile which is generated from an activity. + */ +public class ActivityTile extends Tile { + private static final String TAG = "ActivityTile"; + + public ActivityTile(ComponentInfo info, String category) { + super(info, category); + setMetaData(info.metaData); + } + + ActivityTile(Parcel in) { + super(in); + } + + @Override + public int getId() { + return Objects.hash(getPackageName(), getComponentName()); + } + + @Override + public String getDescription() { + return getPackageName() + "/" + getComponentName(); + } + + @Override + protected CharSequence getComponentLabel(Context context) { + final PackageManager pm = context.getPackageManager(); + final ComponentInfo info = getComponentInfo(context); + return info == null + ? null + : info.loadLabel(pm); + } + + @Override + protected ComponentInfo getComponentInfo(Context context) { + if (mComponentInfo == null) { + final PackageManager pm = context.getApplicationContext().getPackageManager(); + final Intent intent = getIntent(); + final List<ResolveInfo> infoList = + pm.queryIntentActivities(intent, PackageManager.GET_META_DATA); + if (infoList != null && !infoList.isEmpty()) { + mComponentInfo = infoList.get(0).activityInfo; + setMetaData(mComponentInfo.metaData); + } else { + Log.e(TAG, "Cannot find package info for " + + intent.getComponent().flattenToString()); + } + } + return mComponentInfo; + } +} diff --git a/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/Tile.java b/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/Tile.java index ca2d1ed122f9..722f734b8021 100644 --- a/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/Tile.java +++ b/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/Tile.java @@ -30,9 +30,8 @@ import static com.android.settingslib.drawer.TileUtils.PROFILE_PRIMARY; import android.content.Context; import android.content.Intent; -import android.content.pm.ActivityInfo; +import android.content.pm.ComponentInfo; import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; import android.content.res.Resources; import android.content.res.TypedArray; import android.graphics.drawable.Icon; @@ -47,13 +46,11 @@ import androidx.annotation.VisibleForTesting; import java.util.ArrayList; import java.util.Comparator; -import java.util.List; -import java.util.Objects; /** * Description of a single dashboard tile that the user can select. */ -public class Tile implements Parcelable { +public abstract class Tile implements Parcelable { private static final String TAG = "Tile"; @@ -64,28 +61,27 @@ public class Tile implements Parcelable { @VisibleForTesting long mLastUpdateTime; - private final String mActivityPackage; - private final String mActivityName; + private final String mComponentPackage; + private final String mComponentName; private final Intent mIntent; - private ActivityInfo mActivityInfo; + protected ComponentInfo mComponentInfo; private CharSequence mSummaryOverride; private Bundle mMetaData; private String mCategory; - public Tile(ActivityInfo activityInfo, String category) { - mActivityInfo = activityInfo; - mActivityPackage = mActivityInfo.packageName; - mActivityName = mActivityInfo.name; - mMetaData = activityInfo.metaData; + public Tile(ComponentInfo info, String category) { + mComponentInfo = info; + mComponentPackage = mComponentInfo.packageName; + mComponentName = mComponentInfo.name; mCategory = category; - mIntent = new Intent().setClassName(mActivityPackage, mActivityName); + mIntent = new Intent().setClassName(mComponentPackage, mComponentName); } Tile(Parcel in) { - mActivityPackage = in.readString(); - mActivityName = in.readString(); - mIntent = new Intent().setClassName(mActivityPackage, mActivityName); + mComponentPackage = in.readString(); + mComponentName = in.readString(); + mIntent = new Intent().setClassName(mComponentPackage, mComponentName); final int number = in.readInt(); for (int i = 0; i < number; i++) { userHandle.add(UserHandle.CREATOR.createFromParcel(in)); @@ -101,8 +97,8 @@ public class Tile implements Parcelable { @Override public void writeToParcel(Parcel dest, int flags) { - dest.writeString(mActivityPackage); - dest.writeString(mActivityName); + dest.writeString(mComponentPackage); + dest.writeString(mComponentName); final int size = userHandle.size(); dest.writeInt(size); for (int i = 0; i < size; i++) { @@ -112,16 +108,22 @@ public class Tile implements Parcelable { dest.writeBundle(mMetaData); } - public int getId() { - return Objects.hash(mActivityPackage, mActivityName); - } + /** + * Unique ID of the tile + */ + public abstract int getId(); - public String getDescription() { - return mActivityPackage + "/" + mActivityName; - } + /** + * Human-readable description of the tile + */ + public abstract String getDescription(); public String getPackageName() { - return mActivityPackage; + return mComponentPackage; + } + + public String getComponentName() { + return mComponentName; } /** @@ -154,7 +156,7 @@ public class Tile implements Parcelable { } /** - * Check whether title has order. + * Check whether tile has order. */ public boolean hasOrder() { return mMetaData.containsKey(META_DATA_KEY_ORDER) @@ -170,14 +172,14 @@ public class Tile implements Parcelable { final PackageManager packageManager = context.getPackageManager(); if (mMetaData.containsKey(META_DATA_PREFERENCE_TITLE)) { if (mMetaData.containsKey(META_DATA_PREFERENCE_TITLE_URI)) { - // If has as uri to provide dynamic summary, skip loading here. UI will later load + // If has as uri to provide dynamic title, skip loading here. UI will later load // at tile binding time. return null; } if (mMetaData.get(META_DATA_PREFERENCE_TITLE) instanceof Integer) { try { final Resources res = - packageManager.getResourcesForApplication(mActivityPackage); + packageManager.getResourcesForApplication(mComponentPackage); title = res.getString(mMetaData.getInt(META_DATA_PREFERENCE_TITLE)); } catch (PackageManager.NameNotFoundException | Resources.NotFoundException e) { Log.w(TAG, "Couldn't find info", e); @@ -186,18 +188,15 @@ public class Tile implements Parcelable { title = mMetaData.getString(META_DATA_PREFERENCE_TITLE); } } - // Set the preference title to the activity's label if no - // meta-data is found + // Set the preference title by the component if no meta-data is found if (title == null) { - final ActivityInfo activityInfo = getActivityInfo(context); - if (activityInfo == null) { - return null; - } - title = activityInfo.loadLabel(packageManager); + title = getComponentLabel(context); } return title; } + protected abstract CharSequence getComponentLabel(Context context); + /** * Overrides the summary. This can happen when injected tile wants to provide dynamic summary. */ @@ -225,7 +224,7 @@ public class Tile implements Parcelable { if (mMetaData.get(META_DATA_PREFERENCE_SUMMARY) instanceof Integer) { try { final Resources res = - packageManager.getResourcesForApplication(mActivityPackage); + packageManager.getResourcesForApplication(mComponentPackage); summary = res.getString(mMetaData.getInt(META_DATA_PREFERENCE_SUMMARY)); } catch (PackageManager.NameNotFoundException | Resources.NotFoundException e) { Log.d(TAG, "Couldn't find info", e); @@ -281,24 +280,24 @@ public class Tile implements Parcelable { return null; } ensureMetadataNotStale(context); - final ActivityInfo activityInfo = getActivityInfo(context); - if (activityInfo == null) { - Log.w(TAG, "Cannot find ActivityInfo for " + getDescription()); + final ComponentInfo componentInfo = getComponentInfo(context); + if (componentInfo == null) { + Log.w(TAG, "Cannot find ComponentInfo for " + getDescription()); return null; } int iconResId = mMetaData.getInt(META_DATA_PREFERENCE_ICON); // Set the icon if (iconResId == 0) { - // Only fallback to activityinfo.icon if metadata does not contain ICON_URI. + // Only fallback to componentInfo.icon if metadata does not contain ICON_URI. // ICON_URI should be loaded in app UI when need the icon object. Handling IPC at this // level is too complex because we don't have a strong threading contract for this class if (!mMetaData.containsKey(META_DATA_PREFERENCE_ICON_URI)) { - iconResId = activityInfo.icon; + iconResId = componentInfo.icon; } } if (iconResId != 0) { - final Icon icon = Icon.createWithResource(activityInfo.packageName, iconResId); + final Icon icon = Icon.createWithResource(componentInfo.packageName, iconResId); if (isIconTintable(context)) { final TypedArray a = context.obtainStyledAttributes(new int[]{ android.R.attr.colorControlNormal}); @@ -331,41 +330,26 @@ public class Tile implements Parcelable { final PackageManager pm = context.getApplicationContext().getPackageManager(); try { - final long lastUpdateTime = pm.getPackageInfo(mActivityPackage, + final long lastUpdateTime = pm.getPackageInfo(mComponentPackage, PackageManager.GET_META_DATA).lastUpdateTime; if (lastUpdateTime == mLastUpdateTime) { // All good. Do nothing return; } // App has been updated since we load metadata last time. Reload metadata. - mActivityInfo = null; - getActivityInfo(context); + mComponentInfo = null; + getComponentInfo(context); mLastUpdateTime = lastUpdateTime; } catch (PackageManager.NameNotFoundException e) { Log.d(TAG, "Can't find package, probably uninstalled."); } } - private ActivityInfo getActivityInfo(Context context) { - if (mActivityInfo == null) { - final PackageManager pm = context.getApplicationContext().getPackageManager(); - final Intent intent = new Intent().setClassName(mActivityPackage, mActivityName); - final List<ResolveInfo> infoList = - pm.queryIntentActivities(intent, PackageManager.GET_META_DATA); - if (infoList != null && !infoList.isEmpty()) { - mActivityInfo = infoList.get(0).activityInfo; - mMetaData = mActivityInfo.metaData; - } else { - Log.e(TAG, "Cannot find package info for " - + intent.getComponent().flattenToString()); - } - } - return mActivityInfo; - } + protected abstract ComponentInfo getComponentInfo(Context context); public static final Creator<Tile> CREATOR = new Creator<Tile>() { public Tile createFromParcel(Parcel source) { - return new Tile(source); + return new ActivityTile(source); } public Tile[] newArray(int size) { diff --git a/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/TileUtils.java b/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/TileUtils.java index aced5ef9429a..c4df2e8860b4 100644 --- a/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/TileUtils.java +++ b/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/TileUtils.java @@ -20,6 +20,7 @@ import android.content.Context; import android.content.IContentProvider; import android.content.Intent; import android.content.pm.ActivityInfo; +import android.content.pm.ComponentInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.net.Uri; @@ -127,6 +128,7 @@ public class TileUtils { */ public static final String META_DATA_PREFERENCE_ICON_BACKGROUND_HINT = "com.android.settings.bg.hint"; + /** * Name of the meta-data item that should be set in the AndroidManifest.xml * to specify the icon background color as raw ARGB. @@ -220,10 +222,11 @@ public class TileUtils { public static List<DashboardCategory> getCategories(Context context, Map<Pair<String, String>, Tile> cache) { final long startTime = System.currentTimeMillis(); - boolean setup = Global.getInt(context.getContentResolver(), Global.DEVICE_PROVISIONED, 0) - != 0; - ArrayList<Tile> tiles = new ArrayList<>(); - UserManager userManager = (UserManager) context.getSystemService(Context.USER_SERVICE); + final boolean setup = + Global.getInt(context.getContentResolver(), Global.DEVICE_PROVISIONED, 0) != 0; + final ArrayList<Tile> tiles = new ArrayList<>(); + final UserManager userManager = (UserManager) context.getSystemService( + Context.USER_SERVICE); for (UserHandle user : userManager.getUserProfiles()) { // TODO: Needs much optimization, too many PM queries going on here. if (user.getIdentifier() == ActivityManager.getCurrentUser()) { @@ -240,7 +243,7 @@ public class TileUtils { } } - HashMap<String, DashboardCategory> categoryMap = new HashMap<>(); + final HashMap<String, DashboardCategory> categoryMap = new HashMap<>(); for (Tile tile : tiles) { final String categoryKey = tile.getCategory(); DashboardCategory category = categoryMap.get(categoryKey); @@ -255,7 +258,7 @@ public class TileUtils { } category.addTile(tile); } - ArrayList<DashboardCategory> categories = new ArrayList<>(categoryMap.values()); + final ArrayList<DashboardCategory> categories = new ArrayList<>(categoryMap.values()); for (DashboardCategory category : categories) { category.sortTiles(); } @@ -275,63 +278,90 @@ public class TileUtils { if (requireSettings) { intent.setPackage(SETTING_PKG); } + getActivityTiles(context, user, addedCache, defaultCategory, outTiles, intent); + } + + private static void getActivityTiles(Context context, + UserHandle user, Map<Pair<String, String>, Tile> addedCache, + String defaultCategory, List<Tile> outTiles, Intent intent) { final PackageManager pm = context.getPackageManager(); - List<ResolveInfo> results = pm.queryIntentActivitiesAsUser(intent, + final List<ResolveInfo> results = pm.queryIntentActivitiesAsUser(intent, PackageManager.GET_META_DATA, user.getIdentifier()); for (ResolveInfo resolved : results) { if (!resolved.system) { // Do not allow any app to add to settings, only system ones. continue; } - ActivityInfo activityInfo = resolved.activityInfo; - Bundle metaData = activityInfo.metaData; - String categoryKey = defaultCategory; - - // Load category - if ((metaData == null || !metaData.containsKey(EXTRA_CATEGORY_KEY)) - && categoryKey == null) { - Log.w(LOG_TAG, "Found " + resolved.activityInfo.name + " for intent " - + intent + " missing metadata " - + (metaData == null ? "" : EXTRA_CATEGORY_KEY)); - continue; - } else { - categoryKey = metaData.getString(EXTRA_CATEGORY_KEY); - } + final ActivityInfo activityInfo = resolved.activityInfo; + final Bundle metaData = activityInfo.metaData; + getTile(user, addedCache, defaultCategory, outTiles, intent, metaData, activityInfo); + } + } - Pair<String, String> key = new Pair<>(activityInfo.packageName, activityInfo.name); - Tile tile = addedCache.get(key); - if (tile == null) { - tile = new Tile(activityInfo, categoryKey); - addedCache.put(key, tile); - } else { - tile.setMetaData(metaData); - } + private static void getTile(UserHandle user, Map<Pair<String, String>, Tile> addedCache, + String defaultCategory, List<Tile> outTiles, Intent intent, Bundle metaData, + ComponentInfo componentInfo) { + String categoryKey = defaultCategory; + // Load category + if ((metaData == null || !metaData.containsKey(EXTRA_CATEGORY_KEY)) + && categoryKey == null) { + Log.w(LOG_TAG, "Found " + componentInfo.name + " for intent " + + intent + " missing metadata " + + (metaData == null ? "" : EXTRA_CATEGORY_KEY)); + return; + } else { + categoryKey = metaData.getString(EXTRA_CATEGORY_KEY); + } - if (!tile.userHandle.contains(user)) { - tile.userHandle.add(user); - } - if (!outTiles.contains(tile)) { - outTiles.add(tile); - } + final Pair<String, String> key = new Pair<>(componentInfo.packageName, componentInfo.name); + Tile tile = addedCache.get(key); + if (tile == null) { + tile = new ActivityTile(componentInfo, categoryKey); + addedCache.put(key, tile); + } else { + tile.setMetaData(metaData); + } + + if (!tile.userHandle.contains(user)) { + tile.userHandle.add(user); + } + if (!outTiles.contains(tile)) { + outTiles.add(tile); } } /** + * Returns the complete uri from the meta data key of the tile. + + * @param tile Tile which contains meta data + * @param metaDataKey Key mapping to the uri in meta data + * @return Uri associated with the key + */ + public static Uri getCompleteUri(Tile tile, String metaDataKey) { + final String uriString = tile.getMetaData().getString(metaDataKey); + if (TextUtils.isEmpty(uriString)) { + return null; + } + + return Uri.parse(uriString); + } + + /** * Gets the icon package name and resource id from content provider. * * @param context context * @param packageName package name of the target activity - * @param uriString URI for the content provider + * @param uri URI for the content provider * @param providerMap Maps URI authorities to providers * @return package name and resource id of the icon specified */ public static Pair<String, Integer> getIconFromUri(Context context, String packageName, - String uriString, Map<String, IContentProvider> providerMap) { - Bundle bundle = getBundleFromUri(context, uriString, providerMap); + Uri uri, Map<String, IContentProvider> providerMap) { + final Bundle bundle = getBundleFromUri(context, uri, providerMap, null); if (bundle == null) { return null; } - String iconPackageName = bundle.getString(EXTRA_PREFERENCE_ICON_PACKAGE); + final String iconPackageName = bundle.getString(EXTRA_PREFERENCE_ICON_PACKAGE); if (TextUtils.isEmpty(iconPackageName)) { return null; } @@ -342,7 +372,7 @@ public class TileUtils { // Icon can either come from the target package or from the Settings app. if (iconPackageName.equals(packageName) || iconPackageName.equals(context.getPackageName())) { - return Pair.create(iconPackageName, bundle.getInt(META_DATA_PREFERENCE_ICON, 0)); + return Pair.create(iconPackageName, resId); } return null; } @@ -351,34 +381,33 @@ public class TileUtils { * Gets text associated with the input key from the content provider. * * @param context context - * @param uriString URI for the content provider + * @param uri URI for the content provider * @param providerMap Maps URI authorities to providers * @param key Key mapping to the text in bundle returned by the content provider * @return Text associated with the key, if returned by the content provider */ - public static String getTextFromUri(Context context, String uriString, + public static String getTextFromUri(Context context, Uri uri, Map<String, IContentProvider> providerMap, String key) { - Bundle bundle = getBundleFromUri(context, uriString, providerMap); + final Bundle bundle = getBundleFromUri(context, uri, providerMap, null); return (bundle != null) ? bundle.getString(key) : null; } - private static Bundle getBundleFromUri(Context context, String uriString, - Map<String, IContentProvider> providerMap) { - if (TextUtils.isEmpty(uriString)) { + private static Bundle getBundleFromUri(Context context, Uri uri, + Map<String, IContentProvider> providerMap, Bundle bundle) { + if (uri == null) { return null; } - Uri uri = Uri.parse(uriString); - String method = getMethodFromUri(uri); + final String method = getMethodFromUri(uri); if (TextUtils.isEmpty(method)) { return null; } - IContentProvider provider = getProviderFromUri(context, uri, providerMap); + final IContentProvider provider = getProviderFromUri(context, uri, providerMap); if (provider == null) { return null; } try { return provider.call(context.getPackageName(), uri.getAuthority(), - method, uriString, null); + method, uri.toString(), bundle); } catch (RemoteException e) { return null; } @@ -389,7 +418,7 @@ public class TileUtils { if (uri == null) { return null; } - String authority = uri.getAuthority(); + final String authority = uri.getAuthority(); if (TextUtils.isEmpty(authority)) { return null; } @@ -400,7 +429,7 @@ public class TileUtils { } /** Returns the first path segment of the uri if it exists as the method, otherwise null. */ - static String getMethodFromUri(Uri uri) { + private static String getMethodFromUri(Uri uri) { if (uri == null) { return null; } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileTest.java index 5da6205d45bd..2664ecd17dd3 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileTest.java @@ -23,7 +23,6 @@ import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.shadow.api.Shadow; import org.robolectric.shadows.ShadowPackageManager; -import org.robolectric.util.ReflectionHelpers; @RunWith(RobolectricTestRunner.class) public class TileTest { @@ -41,7 +40,7 @@ public class TileTest { mActivityInfo.name = "abc"; mActivityInfo.icon = com.android.internal.R.drawable.ic_plus; mActivityInfo.metaData = new Bundle(); - mTile = new Tile(mActivityInfo, "category"); + mTile = new ActivityTile(mActivityInfo, "category"); } @Test @@ -70,7 +69,7 @@ public class TileTest { @Test public void getIcon_noContextOrMetadata_returnNull() { mActivityInfo.metaData = null; - final Tile tile = new Tile(mActivityInfo, "category"); + final Tile tile = new ActivityTile(mActivityInfo, "category"); assertThat(tile.getIcon(null)).isNull(); assertThat(tile.getIcon(RuntimeEnvironment.application)).isNull(); } @@ -100,7 +99,7 @@ public class TileTest { @Test public void isIconTintable_hasMetadata_shouldReturnIconTintableMetadata() { - final Tile tile = new Tile(mActivityInfo, "category"); + final Tile tile = new ActivityTile(mActivityInfo, "category"); mActivityInfo.metaData.putBoolean(TileUtils.META_DATA_PREFERENCE_ICON_TINTABLE, false); assertThat(tile.isIconTintable(RuntimeEnvironment.application)).isFalse(); @@ -111,14 +110,14 @@ public class TileTest { @Test public void isIconTintable_noIcon_shouldReturnFalse() { - final Tile tile = new Tile(mActivityInfo, "category"); + final Tile tile = new ActivityTile(mActivityInfo, "category"); assertThat(tile.isIconTintable(RuntimeEnvironment.application)).isFalse(); } @Test public void isIconTintable_noTintableMetadata_shouldReturnFalse() { - final Tile tile = new Tile(mActivityInfo, "category"); + final Tile tile = new ActivityTile(mActivityInfo, "category"); mActivityInfo.metaData.putInt(META_DATA_PREFERENCE_ICON, android.R.drawable.ic_info); assertThat(tile.isIconTintable(RuntimeEnvironment.application)).isFalse(); @@ -126,7 +125,7 @@ public class TileTest { @Test public void getPriority_noMetadata_return0() { - final Tile tile = new Tile(mActivityInfo, "category"); + final Tile tile = new ActivityTile(mActivityInfo, "category"); assertThat(tile.getOrder()).isEqualTo(0); } @@ -135,7 +134,7 @@ public class TileTest { public void getPriority_badMetadata_return0() { mActivityInfo.metaData.putString(META_DATA_KEY_ORDER, "1"); - final Tile tile = new Tile(mActivityInfo, "category"); + final Tile tile = new ActivityTile(mActivityInfo, "category"); assertThat(tile.getOrder()).isEqualTo(0); } @@ -144,7 +143,7 @@ public class TileTest { public void getPriority_validMetadata_returnMetadataValue() { mActivityInfo.metaData.putInt(META_DATA_KEY_ORDER, 1); - final Tile tile = new Tile(mActivityInfo, "category"); + final Tile tile = new ActivityTile(mActivityInfo, "category"); assertThat(tile.getOrder()).isEqualTo(1); } @@ -157,7 +156,7 @@ public class TileTest { spm.addResolveInfoForIntent( new Intent().setClassName(mActivityInfo.packageName, mActivityInfo.name), info); - final Tile tile = new Tile(mActivityInfo, "category"); + final Tile tile = new ActivityTile(mActivityInfo, "category"); final long staleTimeStamp = -10000; tile.mLastUpdateTime = staleTimeStamp; @@ -173,8 +172,8 @@ public class TileTest { final ShadowPackageManager spm = Shadow.extract(mContext.getPackageManager()); spm.removePackage(mActivityInfo.packageName); - final Tile tile = new Tile(mActivityInfo, "category"); - ReflectionHelpers.setField(tile, "mActivityInfo", null); + final Tile tile = new ActivityTile(mActivityInfo, "category"); + tile.mComponentInfo = null; assertThat(tile.getTitle(RuntimeEnvironment.application)).isNull(); } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/AdaptiveIconTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/AdaptiveIconTest.java index ed6b9b0a135e..6cbae05ce9a5 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/AdaptiveIconTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/widget/AdaptiveIconTest.java @@ -37,6 +37,7 @@ import android.graphics.drawable.ShapeDrawable; import android.os.Bundle; import com.android.settingslib.R; +import com.android.settingslib.drawer.ActivityTile; import com.android.settingslib.drawer.CategoryKey; import com.android.settingslib.drawer.Tile; @@ -84,7 +85,7 @@ public class AdaptiveIconTest { @Test public void setBackgroundColor_externalTileWithBackgroundColorRawValue_shouldUpdateIcon() { - final Tile tile = spy(new Tile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE)); + final Tile tile = spy(new ActivityTile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE)); mActivityInfo.metaData.putInt(META_DATA_PREFERENCE_ICON_BACKGROUND_ARGB, 0xff0000); doReturn(Icon.createWithResource(mContext, R.drawable.ic_system_update)) .when(tile).getIcon(mContext); @@ -97,7 +98,7 @@ public class AdaptiveIconTest { @Test public void setBackgroundColor_tileWithoutBackgroundColor_shouldSetDefaultBackgroundColor() { - final Tile tile = spy(new Tile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE)); + final Tile tile = spy(new ActivityTile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE)); doReturn(Icon.createWithResource(mContext, R.drawable.ic_system_update)) .when(tile).getIcon(mContext); final AdaptiveIcon icon = new AdaptiveIcon(mContext, new ColorDrawable(Color.BLACK)); @@ -110,7 +111,7 @@ public class AdaptiveIconTest { @Test public void onBindTile_externalTileWithBackgroundColorHint_shouldUpdateIcon() { - final Tile tile = spy(new Tile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE)); + final Tile tile = spy(new ActivityTile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE)); mActivityInfo.metaData.putInt(META_DATA_PREFERENCE_ICON_BACKGROUND_HINT, R.color.bt_outline_color); doReturn(Icon.createWithResource(mContext, R.drawable.ic_system_update)) |