summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/drawer/Tile.java67
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java3
-rw-r--r--packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java45
3 files changed, 56 insertions, 59 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/drawer/Tile.java b/packages/SettingsLib/src/com/android/settingslib/drawer/Tile.java
index dd79618b47b0..6d60a09207a8 100644
--- a/packages/SettingsLib/src/com/android/settingslib/drawer/Tile.java
+++ b/packages/SettingsLib/src/com/android/settingslib/drawer/Tile.java
@@ -21,6 +21,8 @@ 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.META_DATA_PREFERENCE_SUMMARY;
+import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SUMMARY_URI;
import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_TITLE;
import static com.android.settingslib.drawer.TileUtils.PROFILE_ALL;
import static com.android.settingslib.drawer.TileUtils.PROFILE_PRIMARY;
@@ -51,14 +53,6 @@ public class Tile implements Parcelable {
private static final String TAG = "Tile";
-
- /**
- * Optional summary describing what this tile controls.
- *
- * @attr ref android.R.styleable#PreferenceHeader_summary
- */
- public CharSequence summary;
-
/**
* Optional list of user handles which the intent should be launched on.
*/
@@ -68,11 +62,13 @@ public class Tile implements Parcelable {
* 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 String mCategory;
public Tile(ActivityInfo activityInfo, String category) {
@@ -88,7 +84,6 @@ public class Tile implements Parcelable {
mActivityPackage = in.readString();
mActivityName = in.readString();
mIntent = new Intent().setClassName(mActivityPackage, mActivityName);
- 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));
@@ -106,7 +101,6 @@ public class Tile implements Parcelable {
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(mActivityPackage);
dest.writeString(mActivityName);
- TextUtils.writeToParcel(summary, dest, flags);
final int N = userHandle.size();
dest.writeInt(N);
for (int i = 0; i < N; i++) {
@@ -189,6 +183,57 @@ public class Tile implements Parcelable {
return title;
}
+ /**
+ * Returns the raw metadata for summary, this is used for comparing 2 summary text without
+ * loading the real string.
+ */
+ public String getSummaryReference() {
+ if (mSummaryOverride != null) {
+ return mSummaryOverride.toString();
+ }
+ if (mMetaData != null && mMetaData.containsKey(META_DATA_PREFERENCE_SUMMARY)) {
+ return mMetaData.get(META_DATA_PREFERENCE_SUMMARY).toString();
+ }
+ return null;
+ }
+
+ /**
+ * Overrides the summary. This can happen when injected tile wants to provide dynamic summary.
+ */
+ public void overrideSummary(CharSequence summaryOverride) {
+ mSummaryOverride = summaryOverride;
+ }
+
+ /**
+ * Optional summary describing what this tile controls.
+ */
+ public CharSequence getSummary(Context context) {
+ if (mSummaryOverride != null) {
+ return mSummaryOverride;
+ }
+ CharSequence summary = null;
+ final PackageManager packageManager = context.getPackageManager();
+ if (mMetaData != null) {
+ if (mMetaData.containsKey(META_DATA_PREFERENCE_SUMMARY_URI)) {
+ return null;
+ }
+ if (mMetaData.containsKey(META_DATA_PREFERENCE_SUMMARY)) {
+ if (mMetaData.get(META_DATA_PREFERENCE_SUMMARY) instanceof Integer) {
+ try {
+ final Resources res =
+ packageManager.getResourcesForApplication(mActivityPackage);
+ summary = res.getString(mMetaData.getInt(META_DATA_PREFERENCE_SUMMARY));
+ } catch (PackageManager.NameNotFoundException | Resources.NotFoundException e) {
+ Log.d(TAG, "Couldn't find info", e);
+ }
+ } else {
+ summary = mMetaData.getString(META_DATA_PREFERENCE_SUMMARY);
+ }
+ }
+ }
+ return summary;
+ }
+
public Bundle getMetaData() {
return mMetaData;
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java b/packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java
index f19bb3150e5f..ffd6791725ed 100644
--- a/packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java
+++ b/packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java
@@ -347,9 +347,6 @@ public class TileUtils {
} catch (PackageManager.NameNotFoundException | Resources.NotFoundException e) {
if (DEBUG) Log.d(LOG_TAG, "Couldn't find info", e);
}
-
- // Set title and summary for the preference
- tile.summary = summary;
return true;
}
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java
index 2e1f66a41edf..3eb273d55639 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java
@@ -24,7 +24,6 @@ import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SUMM
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;
@@ -39,7 +38,6 @@ import static org.robolectric.RuntimeEnvironment.application;
import android.app.ActivityManager;
import android.content.ContentResolver;
import android.content.Context;
-import android.content.IContentProvider;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
@@ -47,9 +45,7 @@ import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo;
import android.content.res.Resources;
-import android.net.Uri;
import android.os.Bundle;
-import android.os.RemoteException;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings.Global;
@@ -80,8 +76,6 @@ public class TileUtilsTest {
@Mock
private UserManager mUserManager;
@Mock
- private IContentProvider mIContentProvider;
- @Mock
private ContentResolver mContentResolver;
private static final String URI_GET_SUMMARY = "content://authority/text/summary";
@@ -286,45 +280,6 @@ public class TileUtilsTest {
}
@Test
- public void getTilesForIntent_shouldNotProcessInvalidUriContentSystemApp()
- throws RemoteException {
- Intent intent = new Intent();
- Map<Pair<String, String>, Tile> addedCache = new ArrayMap<>();
- List<Tile> outTiles = new ArrayList<>();
- List<ResolveInfo> info = new ArrayList<>();
- ResolveInfo resolveInfo = newInfo(true, null /* category */, null, null, URI_GET_SUMMARY);
- info.add(resolveInfo);
-
- when(mPackageManager.queryIntentActivitiesAsUser(eq(intent), anyInt(), anyInt()))
- .thenReturn(info);
-
- // Case 1: No provider associated with the uri specified.
- TileUtils.getTilesForIntent(mContext, UserHandle.CURRENT, intent, addedCache,
- null /* defaultCategory */, outTiles, false /* usePriority */);
-
- assertThat(outTiles.size()).isEqualTo(1);
- assertThat(outTiles.get(0).getIcon(mContext).getResId()).isEqualTo(314159);
- assertThat(outTiles.get(0).summary).isEqualTo("static-summary");
-
- // Case 2: Empty bundle.
- Bundle bundle = new Bundle();
- when(mIContentProvider.call(anyString(),
- eq(TileUtils.getMethodFromUri(Uri.parse(URI_GET_SUMMARY))), eq(URI_GET_SUMMARY),
- any())).thenReturn(bundle);
- when(mContentResolver.acquireUnstableProvider(anyString()))
- .thenReturn(mIContentProvider);
- when(mContentResolver.acquireUnstableProvider(any(Uri.class)))
- .thenReturn(mIContentProvider);
-
- TileUtils.getTilesForIntent(mContext, UserHandle.CURRENT, intent, addedCache,
- null /* defaultCategory */, outTiles, false /* usePriority */);
-
- assertThat(outTiles.size()).isEqualTo(1);
- assertThat(outTiles.get(0).getIcon(mContext).getResId()).isEqualTo(314159);
- assertThat(outTiles.get(0).summary).isEqualTo("static-summary");
- }
-
- @Test
public void getTilesForIntent_shouldProcessUriContentForSystemApp() {
Intent intent = new Intent();
Map<Pair<String, String>, Tile> addedCache = new ArrayMap<>();