summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/drawer/DashboardCategory.java41
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/drawer/Tile.java42
-rw-r--r--packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileTest.java18
-rw-r--r--packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java4
4 files changed, 48 insertions, 57 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/drawer/DashboardCategory.java b/packages/SettingsLib/src/com/android/settingslib/drawer/DashboardCategory.java
index 3a03644b6226..1cf83ac51306 100644
--- a/packages/SettingsLib/src/com/android/settingslib/drawer/DashboardCategory.java
+++ b/packages/SettingsLib/src/com/android/settingslib/drawer/DashboardCategory.java
@@ -5,7 +5,7 @@
* 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
+ * 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,
@@ -18,11 +18,9 @@ package com.android.settingslib.drawer;
import static java.lang.String.CASE_INSENSITIVE_ORDER;
-import android.content.ComponentName;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
-import android.util.Log;
import java.util.ArrayList;
import java.util.Collections;
@@ -31,9 +29,6 @@ import java.util.List;
public class DashboardCategory implements Parcelable {
- private static final String TAG = "DashboardCategory";
- private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
-
/**
* Title of the category that is shown to the user.
*/
@@ -54,21 +49,14 @@ public class DashboardCategory implements Parcelable {
*/
private List<Tile> mTiles = new ArrayList<>();
- DashboardCategory(DashboardCategory in) {
- if (in != null) {
- title = in.title;
- key = in.key;
- priority = in.priority;
- for (Tile tile : in.mTiles) {
- mTiles.add(tile);
- }
- }
- }
-
public DashboardCategory() {
// Empty
}
+ DashboardCategory(Parcel in) {
+ readFromParcel(in);
+ }
+
/**
* Get a copy of the list of the category's children.
*
@@ -107,22 +95,6 @@ public class DashboardCategory implements Parcelable {
return mTiles.get(n);
}
- public synchronized boolean containsComponent(ComponentName component) {
- for (Tile tile : mTiles) {
- if (TextUtils.equals(tile.intent.getComponent().getClassName(),
- component.getClassName())) {
- if (DEBUG) {
- Log.d(TAG, "category " + key + "contains component" + component);
- }
- return true;
- }
- }
- if (DEBUG) {
- Log.d(TAG, "category " + key + " does not contain component" + component);
- }
- return false;
- }
-
/**
* Sort priority value for tiles in this category.
*/
@@ -190,9 +162,6 @@ public class DashboardCategory implements Parcelable {
}
}
- DashboardCategory(Parcel in) {
- readFromParcel(in);
- }
public static final Creator<DashboardCategory> CREATOR = new Creator<DashboardCategory>() {
public DashboardCategory createFromParcel(Parcel source) {
diff --git a/packages/SettingsLib/src/com/android/settingslib/drawer/Tile.java b/packages/SettingsLib/src/com/android/settingslib/drawer/Tile.java
index 47624ffbca83..fe8303ed6c5e 100644
--- a/packages/SettingsLib/src/com/android/settingslib/drawer/Tile.java
+++ b/packages/SettingsLib/src/com/android/settingslib/drawer/Tile.java
@@ -22,8 +22,11 @@ import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON
import static com.android.settingslib.drawer.TileUtils.PROFILE_ALL;
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.PackageManager;
+import android.content.pm.ResolveInfo;
import android.graphics.drawable.Icon;
import android.os.Bundle;
import android.os.Parcel;
@@ -32,6 +35,7 @@ import android.os.UserHandle;
import android.text.TextUtils;
import java.util.ArrayList;
+import java.util.List;
/**
* Description of a single dashboard tile that the user can select.
@@ -39,7 +43,6 @@ import java.util.ArrayList;
public class Tile implements Parcelable {
private static final String TAG = "Tile";
- private ActivityInfo mActivityInfo;
/**
* Title of the tile that is shown to the user.
@@ -96,8 +99,15 @@ public class Tile implements Parcelable {
*/
public String key;
+
+ private final String mActivityPackage;
+ private final String mActivityName;
+ private ActivityInfo mActivityInfo;
+
public Tile(ActivityInfo activityInfo) {
mActivityInfo = activityInfo;
+ mActivityPackage = mActivityInfo.packageName;
+ mActivityName = mActivityInfo.name;
}
@Override
@@ -107,7 +117,8 @@ public class Tile implements Parcelable {
@Override
public void writeToParcel(Parcel dest, int flags) {
- dest.writeParcelable(mActivityInfo, flags);
+ dest.writeString(mActivityPackage);
+ dest.writeString(mActivityName);
TextUtils.writeToParcel(title, dest, flags);
TextUtils.writeToParcel(summary, dest, flags);
if (intent != null) {
@@ -134,10 +145,11 @@ public class Tile implements Parcelable {
*
* @attr ref android.R.styleable#PreferenceHeader_icon
*/
- public Icon getIcon() {
- if (mActivityInfo == null || metaData == null) {
+ public Icon getIcon(Context context) {
+ if (context == null || metaData == null) {
return null;
}
+
int iconResId = metaData.getInt(META_DATA_PREFERENCE_ICON);
// Set the icon
if (iconResId == 0) {
@@ -145,18 +157,19 @@ public class Tile implements Parcelable {
// 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 (!metaData.containsKey(META_DATA_PREFERENCE_ICON_URI)) {
- iconResId = mActivityInfo.icon;
+ iconResId = getActivityInfo(context).icon;
}
}
if (iconResId != 0) {
- return Icon.createWithResource(mActivityInfo.packageName, iconResId);
+ return Icon.createWithResource(getActivityInfo(context).packageName, iconResId);
} else {
return null;
}
}
- public void readFromParcel(Parcel in) {
- mActivityInfo = ActivityInfo.CREATOR.createFromParcel(in);
+ 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) {
@@ -174,8 +187,17 @@ public class Tile implements Parcelable {
isIconTintable = in.readBoolean();
}
- Tile(Parcel in) {
- readFromParcel(in);
+ 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;
+ }
+ }
+ return mActivityInfo;
}
public static final Creator<Tile> CREATOR = new Creator<Tile>() {
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 f03b33488b20..a9e5aaea8241 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
@@ -59,32 +59,32 @@ public class TileTest {
}
@Test
- public void getIcon_noActivityOrMetadata_returnNull() {
- final Tile tile1 = new Tile((ActivityInfo) null);
- assertThat(tile1.getIcon()).isNull();
-
- final Tile tile2 = new Tile(new ActivityInfo());
- assertThat(tile2.getIcon()).isNull();
+ public void getIcon_noContextOrMetadata_returnNull() {
+ final Tile tile = new Tile(new ActivityInfo());
+ assertThat(tile.getIcon(null)).isNull();
+ assertThat(tile.getIcon(RuntimeEnvironment.application)).isNull();
}
@Test
public void getIcon_providedByUri_returnNull() {
mTile.metaData.putString(META_DATA_PREFERENCE_ICON_URI, "content://foobar/icon");
- assertThat(mTile.getIcon()).isNull();
+ assertThat(mTile.getIcon(RuntimeEnvironment.application)).isNull();
}
@Test
public void getIcon_hasIconMetadata_returnIcon() {
mTile.metaData.putInt(META_DATA_PREFERENCE_ICON, R.drawable.ic_info);
- assertThat(mTile.getIcon().getResId()).isEqualTo(R.drawable.ic_info);
+ assertThat(mTile.getIcon(RuntimeEnvironment.application).getResId())
+ .isEqualTo(R.drawable.ic_info);
}
@Test
public void getIcon_noIconMetadata_returnActivityIcon() {
mTile.metaData.putInt(META_DATA_PREFERENCE_ICON, 0);
- assertThat(mTile.getIcon().getResId()).isEqualTo(mActivityInfo.icon);
+ assertThat(mTile.getIcon(RuntimeEnvironment.application).getResId())
+ .isEqualTo(mActivityInfo.icon);
}
}
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 e6c63355acea..5f4be21771ca 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
@@ -314,7 +314,7 @@ public class TileUtilsTest {
false /* checkCategory */, true /* forceTintExternalIcon */);
assertThat(outTiles.size()).isEqualTo(1);
- assertThat(outTiles.get(0).getIcon().getResId()).isEqualTo(314159);
+ assertThat(outTiles.get(0).getIcon(mContext).getResId()).isEqualTo(314159);
assertThat(outTiles.get(0).summary).isEqualTo("static-summary");
// Case 2: Empty bundle.
@@ -332,7 +332,7 @@ public class TileUtilsTest {
false /* checkCategory */, true /* forceTintExternalIcon */);
assertThat(outTiles.size()).isEqualTo(1);
- assertThat(outTiles.get(0).getIcon().getResId()).isEqualTo(314159);
+ assertThat(outTiles.get(0).getIcon(mContext).getResId()).isEqualTo(314159);
assertThat(outTiles.get(0).summary).isEqualTo("static-summary");
}