Loading packages/SettingsLib/src/com/android/settingslib/drawer/DashboardTile.java +7 −0 Original line number Original line Diff line number Diff line Loading @@ -74,6 +74,11 @@ public class DashboardTile implements Parcelable { */ */ public int priority; public int priority; /** * The metaData from the activity that defines this tile. */ public Bundle metaData; public DashboardTile() { public DashboardTile() { // Empty // Empty } } Loading Loading @@ -107,6 +112,7 @@ public class DashboardTile implements Parcelable { dest.writeBundle(extras); dest.writeBundle(extras); dest.writeString(category); dest.writeString(category); dest.writeInt(priority); dest.writeInt(priority); dest.writeBundle(metaData); } } public void readFromParcel(Parcel in) { public void readFromParcel(Parcel in) { Loading @@ -125,6 +131,7 @@ public class DashboardTile implements Parcelable { extras = in.readBundle(); extras = in.readBundle(); category = in.readString(); category = in.readString(); priority = in.readInt(); priority = in.readInt(); metaData = in.readBundle(); } } DashboardTile(Parcel in) { DashboardTile(Parcel in) { Loading packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java +80 −8 Original line number Original line Diff line number Diff line Loading @@ -18,9 +18,15 @@ package com.android.settingslib.drawer; import android.annotation.LayoutRes; import android.annotation.LayoutRes; import android.annotation.Nullable; import android.annotation.Nullable; import android.app.Activity; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.res.TypedArray; import android.content.res.TypedArray; import android.os.AsyncTask; import android.os.Bundle; import android.os.Bundle; import android.support.v4.widget.DrawerLayout; import android.support.v4.widget.DrawerLayout; import android.util.Log; import android.util.Pair; import android.util.Pair; import android.view.Gravity; import android.view.Gravity; import android.view.LayoutInflater; import android.view.LayoutInflater; Loading @@ -33,21 +39,30 @@ import android.widget.ListView; import android.widget.Toolbar; import android.widget.Toolbar; import com.android.settingslib.R; import com.android.settingslib.R; import java.util.ArrayList; import java.util.HashMap; import java.util.HashMap; import java.util.List; import java.util.List; public class SettingsDrawerActivity extends Activity { public class SettingsDrawerActivity extends Activity { protected static final boolean DEBUG_TIMING = false; private static final String TAG = "SettingsDrawerActivity"; private static List<DashboardCategory> sDashboardCategories; private static HashMap<Pair<String, String>, DashboardTile> sTileCache; private final PackageReceiver mPackageReceiver = new PackageReceiver(); private final List<CategoryListener> mCategoryListeners = new ArrayList<>(); private SettingsDrawerAdapter mDrawerAdapter; private SettingsDrawerAdapter mDrawerAdapter; // Hold on to a cache of tiles to avoid loading the info multiple times. private final HashMap<Pair<String, String>, DashboardTile> mTileCache = new HashMap<>(); private List<DashboardCategory> mDashboardCategories; private DrawerLayout mDrawerLayout; private DrawerLayout mDrawerLayout; @Override @Override protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.onCreate(savedInstanceState); long startTime = System.currentTimeMillis(); requestWindowFeature(Window.FEATURE_NO_TITLE); requestWindowFeature(Window.FEATURE_NO_TITLE); super.setContentView(R.layout.settings_with_drawer); super.setContentView(R.layout.settings_with_drawer); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); Loading @@ -62,6 +77,10 @@ public class SettingsDrawerActivity extends Activity { mDrawerLayout = null; mDrawerLayout = null; return; return; } } if (sDashboardCategories == null) { sTileCache = new HashMap<>(); sDashboardCategories = TileUtils.getCategories(this, sTileCache); } setActionBar(toolbar); setActionBar(toolbar); mDrawerAdapter = new SettingsDrawerAdapter(this); mDrawerAdapter = new SettingsDrawerAdapter(this); ListView listView = (ListView) findViewById(R.id.left_drawer); ListView listView = (ListView) findViewById(R.id.left_drawer); Loading @@ -72,6 +91,8 @@ public class SettingsDrawerActivity extends Activity { onTileClicked(mDrawerAdapter.getTile(position)); onTileClicked(mDrawerAdapter.getTile(position)); }; }; }); }); if (DEBUG_TIMING) Log.d(TAG, "onCreate took " + (System.currentTimeMillis() - startTime) + " ms"); } } @Override @Override Loading @@ -88,7 +109,29 @@ public class SettingsDrawerActivity extends Activity { protected void onResume() { protected void onResume() { super.onResume(); super.onResume(); updateDrawer(); final IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED); filter.addAction(Intent.ACTION_PACKAGE_REMOVED); filter.addAction(Intent.ACTION_PACKAGE_CHANGED); filter.addAction(Intent.ACTION_PACKAGE_REPLACED); filter.addDataScheme("package"); registerReceiver(mPackageReceiver, filter); new CategoriesUpdater().execute(); } @Override protected void onPause() { unregisterReceiver(mPackageReceiver); super.onPause(); } public void addCategoryListener(CategoryListener listener) { mCategoryListeners.add(listener); } public void remCategoryListener(CategoryListener listener) { mCategoryListeners.remove(listener); } } public void openDrawer() { public void openDrawer() { Loading Loading @@ -134,11 +177,16 @@ public class SettingsDrawerActivity extends Activity { } } } } public List<DashboardCategory> getDashboardCategories(boolean force) { public List<DashboardCategory> getDashboardCategories() { if (force) { return sDashboardCategories; mDashboardCategories = TileUtils.getCategories(this, mTileCache); } protected void onCategoriesChanged() { updateDrawer(); final int N = mCategoryListeners.size(); for (int i = 0; i < N; i++) { mCategoryListeners.get(i).onCategoriesChanged(); } } return mDashboardCategories; } } public boolean openTile(DashboardTile tile) { public boolean openTile(DashboardTile tile) { Loading Loading @@ -167,4 +215,28 @@ public class SettingsDrawerActivity extends Activity { public void onProfileTileOpen() { public void onProfileTileOpen() { finish(); finish(); } } public interface CategoryListener { void onCategoriesChanged(); } private class CategoriesUpdater extends AsyncTask<Void, Void, List<DashboardCategory>> { @Override protected List<DashboardCategory> doInBackground(Void... params) { return TileUtils.getCategories(SettingsDrawerActivity.this, sTileCache); } @Override protected void onPostExecute(List<DashboardCategory> dashboardCategories) { sDashboardCategories = dashboardCategories; onCategoriesChanged(); } } private class PackageReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { new CategoriesUpdater().execute(); } } } } packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerAdapter.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -38,7 +38,7 @@ public class SettingsDrawerAdapter extends BaseAdapter { } } void updateCategories() { void updateCategories() { List<DashboardCategory> categories = mActivity.getDashboardCategories(true); List<DashboardCategory> categories = mActivity.getDashboardCategories(); mItems.clear(); mItems.clear(); for (int i = 0; i < categories.size(); i++) { for (int i = 0; i < categories.size(); i++) { Item category = new Item(); Item category = new Item(); Loading packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java +49 −58 Original line number Original line Diff line number Diff line Loading @@ -14,6 +14,7 @@ import android.app.ActivityManager; import android.content.Context; import android.content.Context; import android.content.Intent; import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.pm.ResolveInfo; import android.content.res.Resources; import android.content.res.Resources; Loading @@ -35,6 +36,7 @@ import java.util.Map; public class TileUtils { public class TileUtils { private static final boolean DEBUG = false; private static final boolean DEBUG = false; private static final boolean DEBUG_TIMING = true; private static final String LOG_TAG = "TileUtils"; private static final String LOG_TAG = "TileUtils"; Loading Loading @@ -105,12 +107,9 @@ public class TileUtils { private static final String SETTING_PKG = "com.android.settings"; private static final String SETTING_PKG = "com.android.settings"; public static List<DashboardCategory> getCategories(Context context) { return getCategories(context, new HashMap<Pair<String, String>, DashboardTile>()); } public static List<DashboardCategory> getCategories(Context context, public static List<DashboardCategory> getCategories(Context context, HashMap<Pair<String, String>, DashboardTile> cache) { HashMap<Pair<String, String>, DashboardTile> cache) { final long startTime = System.currentTimeMillis(); ArrayList<DashboardTile> tiles = new ArrayList<>(); ArrayList<DashboardTile> tiles = new ArrayList<>(); UserManager userManager = UserManager.get(context); UserManager userManager = UserManager.get(context); for (UserHandle user : userManager.getUserProfiles()) { for (UserHandle user : userManager.getUserProfiles()) { Loading Loading @@ -143,6 +142,8 @@ public class TileUtils { Collections.sort(category.tiles, TILE_COMPARATOR); Collections.sort(category.tiles, TILE_COMPARATOR); } } Collections.sort(categories, CATEGORY_COMPARATOR); Collections.sort(categories, CATEGORY_COMPARATOR); if (DEBUG_TIMING) Log.d(LOG_TAG, "getCategories took " + (System.currentTimeMillis() - startTime) + " ms"); return categories; return categories; } } Loading Loading @@ -207,7 +208,9 @@ public class TileUtils { activityInfo.packageName, activityInfo.name); activityInfo.packageName, activityInfo.name); tile.category = categoryKey; tile.category = categoryKey; tile.priority = requireSettings ? resolved.priority : 0; tile.priority = requireSettings ? resolved.priority : 0; updateTileData(context, tile); tile.metaData = activityInfo.metaData; updateTileData(context, tile, activityInfo, activityInfo.applicationInfo, pm); if (DEBUG) Log.d(LOG_TAG, "Adding tile " + tile.title); if (DEBUG) Log.d(LOG_TAG, "Adding tile " + tile.title); addedCache.put(key, tile); addedCache.put(key, tile); Loading @@ -231,19 +234,9 @@ public class TileUtils { return null; return null; } } private static boolean updateTileData(Context context, DashboardTile tile) { private static boolean updateTileData(Context context, DashboardTile tile, Intent intent = tile.intent; ActivityInfo activityInfo, ApplicationInfo applicationInfo, PackageManager pm) { if (intent != null) { if (applicationInfo.isSystemApp()) { // Find the activity that is in the system image PackageManager pm = context.getPackageManager(); List<ResolveInfo> list = tile.userHandle.size() != 0 ? pm.queryIntentActivitiesAsUser(intent, PackageManager.GET_META_DATA, tile.userHandle.get(0).getIdentifier()) : pm.queryIntentActivities(intent, PackageManager.GET_META_DATA); int listSize = list.size(); for (int i = 0; i < listSize; i++) { ResolveInfo resolveInfo = list.get(i); if (resolveInfo.activityInfo.applicationInfo.isSystemApp()) { int icon = 0; int icon = 0; CharSequence title = null; CharSequence title = null; String summary = null; String summary = null; Loading @@ -251,8 +244,8 @@ public class TileUtils { // Get the activity's meta-data // Get the activity's meta-data try { try { Resources res = pm.getResourcesForApplication( Resources res = pm.getResourcesForApplication( resolveInfo.activityInfo.packageName); applicationInfo.packageName); Bundle metaData = resolveInfo.activityInfo.metaData; Bundle metaData = activityInfo.metaData; if (res != null && metaData != null) { if (res != null && metaData != null) { if (metaData.containsKey(META_DATA_PREFERENCE_ICON)) { if (metaData.containsKey(META_DATA_PREFERENCE_ICON)) { Loading @@ -272,24 +265,22 @@ public class TileUtils { // Set the preference title to the activity's label if no // Set the preference title to the activity's label if no // meta-data is found // meta-data is found if (TextUtils.isEmpty(title)) { if (TextUtils.isEmpty(title)) { title = resolveInfo.loadLabel(pm).toString(); title = activityInfo.loadLabel(pm).toString(); } } if (icon == 0) { if (icon == 0) { icon = resolveInfo.activityInfo.icon; icon = activityInfo.icon; } } // Set icon, title and summary for the preference // Set icon, title and summary for the preference tile.icon = Icon.createWithResource(resolveInfo.activityInfo.packageName, icon); tile.icon = Icon.createWithResource(activityInfo.packageName, icon); tile.title = title; tile.title = title; tile.summary = summary; tile.summary = summary; // Replace the intent with this specific activity // Replace the intent with this specific activity tile.intent = new Intent().setClassName(resolveInfo.activityInfo.packageName, tile.intent = new Intent().setClassName(activityInfo.packageName, resolveInfo.activityInfo.name); activityInfo.name); return true; return true; } } } } return false; return false; } } Loading Loading
packages/SettingsLib/src/com/android/settingslib/drawer/DashboardTile.java +7 −0 Original line number Original line Diff line number Diff line Loading @@ -74,6 +74,11 @@ public class DashboardTile implements Parcelable { */ */ public int priority; public int priority; /** * The metaData from the activity that defines this tile. */ public Bundle metaData; public DashboardTile() { public DashboardTile() { // Empty // Empty } } Loading Loading @@ -107,6 +112,7 @@ public class DashboardTile implements Parcelable { dest.writeBundle(extras); dest.writeBundle(extras); dest.writeString(category); dest.writeString(category); dest.writeInt(priority); dest.writeInt(priority); dest.writeBundle(metaData); } } public void readFromParcel(Parcel in) { public void readFromParcel(Parcel in) { Loading @@ -125,6 +131,7 @@ public class DashboardTile implements Parcelable { extras = in.readBundle(); extras = in.readBundle(); category = in.readString(); category = in.readString(); priority = in.readInt(); priority = in.readInt(); metaData = in.readBundle(); } } DashboardTile(Parcel in) { DashboardTile(Parcel in) { Loading
packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java +80 −8 Original line number Original line Diff line number Diff line Loading @@ -18,9 +18,15 @@ package com.android.settingslib.drawer; import android.annotation.LayoutRes; import android.annotation.LayoutRes; import android.annotation.Nullable; import android.annotation.Nullable; import android.app.Activity; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.res.TypedArray; import android.content.res.TypedArray; import android.os.AsyncTask; import android.os.Bundle; import android.os.Bundle; import android.support.v4.widget.DrawerLayout; import android.support.v4.widget.DrawerLayout; import android.util.Log; import android.util.Pair; import android.util.Pair; import android.view.Gravity; import android.view.Gravity; import android.view.LayoutInflater; import android.view.LayoutInflater; Loading @@ -33,21 +39,30 @@ import android.widget.ListView; import android.widget.Toolbar; import android.widget.Toolbar; import com.android.settingslib.R; import com.android.settingslib.R; import java.util.ArrayList; import java.util.HashMap; import java.util.HashMap; import java.util.List; import java.util.List; public class SettingsDrawerActivity extends Activity { public class SettingsDrawerActivity extends Activity { protected static final boolean DEBUG_TIMING = false; private static final String TAG = "SettingsDrawerActivity"; private static List<DashboardCategory> sDashboardCategories; private static HashMap<Pair<String, String>, DashboardTile> sTileCache; private final PackageReceiver mPackageReceiver = new PackageReceiver(); private final List<CategoryListener> mCategoryListeners = new ArrayList<>(); private SettingsDrawerAdapter mDrawerAdapter; private SettingsDrawerAdapter mDrawerAdapter; // Hold on to a cache of tiles to avoid loading the info multiple times. private final HashMap<Pair<String, String>, DashboardTile> mTileCache = new HashMap<>(); private List<DashboardCategory> mDashboardCategories; private DrawerLayout mDrawerLayout; private DrawerLayout mDrawerLayout; @Override @Override protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.onCreate(savedInstanceState); long startTime = System.currentTimeMillis(); requestWindowFeature(Window.FEATURE_NO_TITLE); requestWindowFeature(Window.FEATURE_NO_TITLE); super.setContentView(R.layout.settings_with_drawer); super.setContentView(R.layout.settings_with_drawer); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); Loading @@ -62,6 +77,10 @@ public class SettingsDrawerActivity extends Activity { mDrawerLayout = null; mDrawerLayout = null; return; return; } } if (sDashboardCategories == null) { sTileCache = new HashMap<>(); sDashboardCategories = TileUtils.getCategories(this, sTileCache); } setActionBar(toolbar); setActionBar(toolbar); mDrawerAdapter = new SettingsDrawerAdapter(this); mDrawerAdapter = new SettingsDrawerAdapter(this); ListView listView = (ListView) findViewById(R.id.left_drawer); ListView listView = (ListView) findViewById(R.id.left_drawer); Loading @@ -72,6 +91,8 @@ public class SettingsDrawerActivity extends Activity { onTileClicked(mDrawerAdapter.getTile(position)); onTileClicked(mDrawerAdapter.getTile(position)); }; }; }); }); if (DEBUG_TIMING) Log.d(TAG, "onCreate took " + (System.currentTimeMillis() - startTime) + " ms"); } } @Override @Override Loading @@ -88,7 +109,29 @@ public class SettingsDrawerActivity extends Activity { protected void onResume() { protected void onResume() { super.onResume(); super.onResume(); updateDrawer(); final IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED); filter.addAction(Intent.ACTION_PACKAGE_REMOVED); filter.addAction(Intent.ACTION_PACKAGE_CHANGED); filter.addAction(Intent.ACTION_PACKAGE_REPLACED); filter.addDataScheme("package"); registerReceiver(mPackageReceiver, filter); new CategoriesUpdater().execute(); } @Override protected void onPause() { unregisterReceiver(mPackageReceiver); super.onPause(); } public void addCategoryListener(CategoryListener listener) { mCategoryListeners.add(listener); } public void remCategoryListener(CategoryListener listener) { mCategoryListeners.remove(listener); } } public void openDrawer() { public void openDrawer() { Loading Loading @@ -134,11 +177,16 @@ public class SettingsDrawerActivity extends Activity { } } } } public List<DashboardCategory> getDashboardCategories(boolean force) { public List<DashboardCategory> getDashboardCategories() { if (force) { return sDashboardCategories; mDashboardCategories = TileUtils.getCategories(this, mTileCache); } protected void onCategoriesChanged() { updateDrawer(); final int N = mCategoryListeners.size(); for (int i = 0; i < N; i++) { mCategoryListeners.get(i).onCategoriesChanged(); } } return mDashboardCategories; } } public boolean openTile(DashboardTile tile) { public boolean openTile(DashboardTile tile) { Loading Loading @@ -167,4 +215,28 @@ public class SettingsDrawerActivity extends Activity { public void onProfileTileOpen() { public void onProfileTileOpen() { finish(); finish(); } } public interface CategoryListener { void onCategoriesChanged(); } private class CategoriesUpdater extends AsyncTask<Void, Void, List<DashboardCategory>> { @Override protected List<DashboardCategory> doInBackground(Void... params) { return TileUtils.getCategories(SettingsDrawerActivity.this, sTileCache); } @Override protected void onPostExecute(List<DashboardCategory> dashboardCategories) { sDashboardCategories = dashboardCategories; onCategoriesChanged(); } } private class PackageReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { new CategoriesUpdater().execute(); } } } }
packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerAdapter.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -38,7 +38,7 @@ public class SettingsDrawerAdapter extends BaseAdapter { } } void updateCategories() { void updateCategories() { List<DashboardCategory> categories = mActivity.getDashboardCategories(true); List<DashboardCategory> categories = mActivity.getDashboardCategories(); mItems.clear(); mItems.clear(); for (int i = 0; i < categories.size(); i++) { for (int i = 0; i < categories.size(); i++) { Item category = new Item(); Item category = new Item(); Loading
packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java +49 −58 Original line number Original line Diff line number Diff line Loading @@ -14,6 +14,7 @@ import android.app.ActivityManager; import android.content.Context; import android.content.Context; import android.content.Intent; import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.pm.ResolveInfo; import android.content.res.Resources; import android.content.res.Resources; Loading @@ -35,6 +36,7 @@ import java.util.Map; public class TileUtils { public class TileUtils { private static final boolean DEBUG = false; private static final boolean DEBUG = false; private static final boolean DEBUG_TIMING = true; private static final String LOG_TAG = "TileUtils"; private static final String LOG_TAG = "TileUtils"; Loading Loading @@ -105,12 +107,9 @@ public class TileUtils { private static final String SETTING_PKG = "com.android.settings"; private static final String SETTING_PKG = "com.android.settings"; public static List<DashboardCategory> getCategories(Context context) { return getCategories(context, new HashMap<Pair<String, String>, DashboardTile>()); } public static List<DashboardCategory> getCategories(Context context, public static List<DashboardCategory> getCategories(Context context, HashMap<Pair<String, String>, DashboardTile> cache) { HashMap<Pair<String, String>, DashboardTile> cache) { final long startTime = System.currentTimeMillis(); ArrayList<DashboardTile> tiles = new ArrayList<>(); ArrayList<DashboardTile> tiles = new ArrayList<>(); UserManager userManager = UserManager.get(context); UserManager userManager = UserManager.get(context); for (UserHandle user : userManager.getUserProfiles()) { for (UserHandle user : userManager.getUserProfiles()) { Loading Loading @@ -143,6 +142,8 @@ public class TileUtils { Collections.sort(category.tiles, TILE_COMPARATOR); Collections.sort(category.tiles, TILE_COMPARATOR); } } Collections.sort(categories, CATEGORY_COMPARATOR); Collections.sort(categories, CATEGORY_COMPARATOR); if (DEBUG_TIMING) Log.d(LOG_TAG, "getCategories took " + (System.currentTimeMillis() - startTime) + " ms"); return categories; return categories; } } Loading Loading @@ -207,7 +208,9 @@ public class TileUtils { activityInfo.packageName, activityInfo.name); activityInfo.packageName, activityInfo.name); tile.category = categoryKey; tile.category = categoryKey; tile.priority = requireSettings ? resolved.priority : 0; tile.priority = requireSettings ? resolved.priority : 0; updateTileData(context, tile); tile.metaData = activityInfo.metaData; updateTileData(context, tile, activityInfo, activityInfo.applicationInfo, pm); if (DEBUG) Log.d(LOG_TAG, "Adding tile " + tile.title); if (DEBUG) Log.d(LOG_TAG, "Adding tile " + tile.title); addedCache.put(key, tile); addedCache.put(key, tile); Loading @@ -231,19 +234,9 @@ public class TileUtils { return null; return null; } } private static boolean updateTileData(Context context, DashboardTile tile) { private static boolean updateTileData(Context context, DashboardTile tile, Intent intent = tile.intent; ActivityInfo activityInfo, ApplicationInfo applicationInfo, PackageManager pm) { if (intent != null) { if (applicationInfo.isSystemApp()) { // Find the activity that is in the system image PackageManager pm = context.getPackageManager(); List<ResolveInfo> list = tile.userHandle.size() != 0 ? pm.queryIntentActivitiesAsUser(intent, PackageManager.GET_META_DATA, tile.userHandle.get(0).getIdentifier()) : pm.queryIntentActivities(intent, PackageManager.GET_META_DATA); int listSize = list.size(); for (int i = 0; i < listSize; i++) { ResolveInfo resolveInfo = list.get(i); if (resolveInfo.activityInfo.applicationInfo.isSystemApp()) { int icon = 0; int icon = 0; CharSequence title = null; CharSequence title = null; String summary = null; String summary = null; Loading @@ -251,8 +244,8 @@ public class TileUtils { // Get the activity's meta-data // Get the activity's meta-data try { try { Resources res = pm.getResourcesForApplication( Resources res = pm.getResourcesForApplication( resolveInfo.activityInfo.packageName); applicationInfo.packageName); Bundle metaData = resolveInfo.activityInfo.metaData; Bundle metaData = activityInfo.metaData; if (res != null && metaData != null) { if (res != null && metaData != null) { if (metaData.containsKey(META_DATA_PREFERENCE_ICON)) { if (metaData.containsKey(META_DATA_PREFERENCE_ICON)) { Loading @@ -272,24 +265,22 @@ public class TileUtils { // Set the preference title to the activity's label if no // Set the preference title to the activity's label if no // meta-data is found // meta-data is found if (TextUtils.isEmpty(title)) { if (TextUtils.isEmpty(title)) { title = resolveInfo.loadLabel(pm).toString(); title = activityInfo.loadLabel(pm).toString(); } } if (icon == 0) { if (icon == 0) { icon = resolveInfo.activityInfo.icon; icon = activityInfo.icon; } } // Set icon, title and summary for the preference // Set icon, title and summary for the preference tile.icon = Icon.createWithResource(resolveInfo.activityInfo.packageName, icon); tile.icon = Icon.createWithResource(activityInfo.packageName, icon); tile.title = title; tile.title = title; tile.summary = summary; tile.summary = summary; // Replace the intent with this specific activity // Replace the intent with this specific activity tile.intent = new Intent().setClassName(resolveInfo.activityInfo.packageName, tile.intent = new Intent().setClassName(activityInfo.packageName, resolveInfo.activityInfo.name); activityInfo.name); return true; return true; } } } } return false; return false; } } Loading