Loading packages/SystemUI/src/com/android/systemui/recent/RecentTasksLoader.java +15 −2 Original line number Original line Diff line number Diff line Loading @@ -17,10 +17,12 @@ package com.android.systemui.recent; package com.android.systemui.recent; import android.app.ActivityManager; import android.app.ActivityManager; import android.app.AppGlobals; import android.content.ComponentName; import android.content.ComponentName; 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.IPackageManager; 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 @@ -30,7 +32,9 @@ import android.graphics.drawable.Drawable; import android.os.AsyncTask; import android.os.AsyncTask; import android.os.Handler; import android.os.Handler; import android.os.Process; import android.os.Process; import android.os.RemoteException; import android.os.UserHandle; import android.os.UserHandle; import android.os.UserManager; import android.util.Log; import android.util.Log; import android.view.MotionEvent; import android.view.MotionEvent; import android.view.View; import android.view.View; Loading Loading @@ -162,9 +166,14 @@ public class RecentTasksLoader implements View.OnTouchListener { intent.setComponent(origActivity); intent.setComponent(origActivity); } } final PackageManager pm = mContext.getPackageManager(); final PackageManager pm = mContext.getPackageManager(); final IPackageManager ipm = AppGlobals.getPackageManager(); intent.setFlags((intent.getFlags()&~Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED) intent.setFlags((intent.getFlags()&~Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED) | Intent.FLAG_ACTIVITY_NEW_TASK); | Intent.FLAG_ACTIVITY_NEW_TASK); final ResolveInfo resolveInfo = pm.resolveActivity(intent, 0); ResolveInfo resolveInfo = null; try { resolveInfo = ipm.resolveIntent(intent, null, 0, userId); } catch (RemoteException re) { } if (resolveInfo != null) { if (resolveInfo != null) { final ActivityInfo info = resolveInfo.activityInfo; final ActivityInfo info = resolveInfo.activityInfo; final String title = info.loadLabel(pm).toString(); final String title = info.loadLabel(pm).toString(); Loading Loading @@ -192,7 +201,11 @@ public class RecentTasksLoader implements View.OnTouchListener { final PackageManager pm = mContext.getPackageManager(); final PackageManager pm = mContext.getPackageManager(); Bitmap thumbnail = am.getTaskTopThumbnail(td.persistentTaskId); Bitmap thumbnail = am.getTaskTopThumbnail(td.persistentTaskId); Drawable icon = getFullResIcon(td.resolveInfo, pm); Drawable icon = getFullResIcon(td.resolveInfo, pm); if (td.userId != UserHandle.myUserId()) { // Need to badge the icon final UserManager um = (UserManager) mContext.getSystemService(Context.USER_SERVICE); icon = um.getBadgedDrawableForUser(icon, new UserHandle(td.userId)); } if (DEBUG) Log.v(TAG, "Loaded bitmap for task " if (DEBUG) Log.v(TAG, "Loaded bitmap for task " + td + ": " + thumbnail); + td + ": " + thumbnail); synchronized (td) { synchronized (td) { Loading packages/SystemUI/src/com/android/systemui/recents/RecentsTaskLoader.java +5 −4 Original line number Original line Diff line number Diff line Loading @@ -192,8 +192,9 @@ class TaskResourceLoader implements Runnable { " forceLoad: " + forceLoadTask); " forceLoad: " + forceLoadTask); // Load the application icon // Load the application icon if (loadIcon == null || forceLoadTask) { if (loadIcon == null || forceLoadTask) { ActivityInfo info = ssp.getActivityInfo(t.key.baseIntent.getComponent()); ActivityInfo info = ssp.getActivityInfo(t.key.baseIntent.getComponent(), Drawable icon = ssp.getActivityIcon(info); t.userId); Drawable icon = ssp.getActivityIcon(info, t.userId); if (!mCancelled) { if (!mCancelled) { if (icon != null) { if (icon != null) { Console.log(Constants.DebugFlags.App.TaskDataLoader, Console.log(Constants.DebugFlags.App.TaskDataLoader, Loading Loading @@ -411,7 +412,7 @@ public class RecentsTaskLoader { int taskCount = tasks.size(); int taskCount = tasks.size(); for (int i = 0; i < taskCount; i++) { for (int i = 0; i < taskCount; i++) { ActivityManager.RecentTaskInfo t = tasks.get(i); ActivityManager.RecentTaskInfo t = tasks.get(i); ActivityInfo info = ssp.getActivityInfo(t.baseIntent.getComponent()); ActivityInfo info = ssp.getActivityInfo(t.baseIntent.getComponent(), t.userId); String activityLabel = (t.activityLabel == null ? ssp.getActivityLabel(info) : String activityLabel = (t.activityLabel == null ? ssp.getActivityLabel(info) : t.activityLabel.toString()); t.activityLabel.toString()); Bitmap activityIcon = t.activityIcon; Bitmap activityIcon = t.activityIcon; Loading @@ -437,7 +438,7 @@ public class RecentsTaskLoader { } } } } if (task.applicationIcon == null) { if (task.applicationIcon == null) { task.applicationIcon = ssp.getActivityIcon(info); task.applicationIcon = ssp.getActivityIcon(info, task.userId); if (task.applicationIcon != null) { if (task.applicationIcon != null) { mApplicationIconCache.put(task.key, task.applicationIcon); mApplicationIconCache.put(task.key, task.applicationIcon); } else { } else { Loading packages/SystemUI/src/com/android/systemui/recents/SystemServicesProxy.java +30 −9 Original line number Original line Diff line number Diff line Loading @@ -18,14 +18,19 @@ package com.android.systemui.recents; import android.app.ActivityManager; import android.app.ActivityManager; import android.app.ActivityOptions; import android.app.ActivityOptions; import android.app.AppGlobals; import android.content.ComponentName; import android.content.ComponentName; 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.IPackageManager; import android.content.pm.PackageManager; import android.content.pm.PackageManager; import android.graphics.Bitmap; import android.graphics.Bitmap; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable; import android.os.RemoteException; import android.os.UserHandle; import android.os.UserManager; import java.util.ArrayList; import java.util.ArrayList; import java.util.List; import java.util.List; Loading @@ -38,6 +43,8 @@ import java.util.Random; public class SystemServicesProxy { public class SystemServicesProxy { ActivityManager mAm; ActivityManager mAm; PackageManager mPm; PackageManager mPm; IPackageManager mIpm; UserManager mUm; String mPackage; String mPackage; Bitmap mDummyIcon; Bitmap mDummyIcon; Loading @@ -46,6 +53,8 @@ public class SystemServicesProxy { public SystemServicesProxy(Context context) { public SystemServicesProxy(Context context) { mAm = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); mAm = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); mPm = context.getPackageManager(); mPm = context.getPackageManager(); mUm = (UserManager) context.getSystemService(Context.USER_SERVICE); mIpm = AppGlobals.getPackageManager(); mPackage = context.getPackageName(); mPackage = context.getPackageName(); if (Constants.DebugFlags.App.EnableSystemServicesProxy) { if (Constants.DebugFlags.App.EnableSystemServicesProxy) { Loading Loading @@ -142,14 +151,19 @@ public class SystemServicesProxy { mAm.removeTask(taskId, ActivityManager.REMOVE_TASK_KILL_PROCESS); mAm.removeTask(taskId, ActivityManager.REMOVE_TASK_KILL_PROCESS); } } /** Returns the activity info for a given component name */ /** public ActivityInfo getActivityInfo(ComponentName cn) { * Returns the activity info for a given component name. if (mPm == null) return null; * * @param ComponentName The component name of the activity. * @param userId The userId of the user that this is for. */ public ActivityInfo getActivityInfo(ComponentName cn, int userId) { if (mIpm == null) return null; if (Constants.DebugFlags.App.EnableSystemServicesProxy) return null; if (Constants.DebugFlags.App.EnableSystemServicesProxy) return null; try { try { return mPm.getActivityInfo(cn, PackageManager.GET_META_DATA); return mIpm.getActivityInfo(cn, PackageManager.GET_META_DATA, userId); } catch (PackageManager.NameNotFoundException e) { } catch (RemoteException e) { e.printStackTrace(); e.printStackTrace(); return null; return null; } } Loading @@ -167,15 +181,22 @@ public class SystemServicesProxy { return info.loadLabel(mPm).toString(); return info.loadLabel(mPm).toString(); } } /** Returns the activity icon */ /** public Drawable getActivityIcon(ActivityInfo info) { * Returns the activity icon for the ActivityInfo for a user, badging if if (mPm == null) return null; * necessary. */ public Drawable getActivityIcon(ActivityInfo info, int userId) { if (mPm == null || mUm == null) return null; // If we are mocking, then return a mock label // If we are mocking, then return a mock label if (Constants.DebugFlags.App.EnableSystemServicesProxy) { if (Constants.DebugFlags.App.EnableSystemServicesProxy) { return new ColorDrawable(0xFF666666); return new ColorDrawable(0xFF666666); } } return info.loadIcon(mPm); Drawable icon = info.loadIcon(mPm); if (userId != UserHandle.myUserId()) { icon = mUm.getBadgedDrawableForUser(icon, new UserHandle(userId)); } return icon; } } } } packages/SystemUI/src/com/android/systemui/recents/model/Task.java +13 −5 Original line number Original line Diff line number Diff line Loading @@ -37,25 +37,33 @@ public class Task { public static class TaskKey { public static class TaskKey { public final int id; public final int id; public final Intent baseIntent; public final Intent baseIntent; public final int userId; public TaskKey(int id, Intent intent) { public TaskKey(int id, Intent intent, int userId) { this.id = id; this.id = id; this.baseIntent = intent; this.baseIntent = intent; this.userId = userId; } } @Override @Override public boolean equals(Object o) { public boolean equals(Object o) { return hashCode() == o.hashCode(); if (!(o instanceof TaskKey)) { return false; } return id == ((TaskKey) o).id && userId == ((TaskKey) o).userId; } } @Override @Override public int hashCode() { public int hashCode() { return id; return (id << 5) + userId; } } @Override @Override public String toString() { public String toString() { return "Task.Key: " + id + ", " + baseIntent.getComponent().getPackageName(); return "Task.Key: " + id + ", " + "u" + userId + ", " + baseIntent.getComponent().getPackageName(); } } } } Loading @@ -75,7 +83,7 @@ public class Task { public Task(int id, boolean isActive, Intent intent, String activityTitle, public Task(int id, boolean isActive, Intent intent, String activityTitle, Bitmap activityIcon, int userId) { Bitmap activityIcon, int userId) { this.key = new TaskKey(id, intent); this.key = new TaskKey(id, intent, userId); this.activityLabel = activityTitle; this.activityLabel = activityTitle; this.activityIcon = activityIcon; this.activityIcon = activityIcon; this.isActive = isActive; this.isActive = isActive; Loading Loading
packages/SystemUI/src/com/android/systemui/recent/RecentTasksLoader.java +15 −2 Original line number Original line Diff line number Diff line Loading @@ -17,10 +17,12 @@ package com.android.systemui.recent; package com.android.systemui.recent; import android.app.ActivityManager; import android.app.ActivityManager; import android.app.AppGlobals; import android.content.ComponentName; import android.content.ComponentName; 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.IPackageManager; 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 @@ -30,7 +32,9 @@ import android.graphics.drawable.Drawable; import android.os.AsyncTask; import android.os.AsyncTask; import android.os.Handler; import android.os.Handler; import android.os.Process; import android.os.Process; import android.os.RemoteException; import android.os.UserHandle; import android.os.UserHandle; import android.os.UserManager; import android.util.Log; import android.util.Log; import android.view.MotionEvent; import android.view.MotionEvent; import android.view.View; import android.view.View; Loading Loading @@ -162,9 +166,14 @@ public class RecentTasksLoader implements View.OnTouchListener { intent.setComponent(origActivity); intent.setComponent(origActivity); } } final PackageManager pm = mContext.getPackageManager(); final PackageManager pm = mContext.getPackageManager(); final IPackageManager ipm = AppGlobals.getPackageManager(); intent.setFlags((intent.getFlags()&~Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED) intent.setFlags((intent.getFlags()&~Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED) | Intent.FLAG_ACTIVITY_NEW_TASK); | Intent.FLAG_ACTIVITY_NEW_TASK); final ResolveInfo resolveInfo = pm.resolveActivity(intent, 0); ResolveInfo resolveInfo = null; try { resolveInfo = ipm.resolveIntent(intent, null, 0, userId); } catch (RemoteException re) { } if (resolveInfo != null) { if (resolveInfo != null) { final ActivityInfo info = resolveInfo.activityInfo; final ActivityInfo info = resolveInfo.activityInfo; final String title = info.loadLabel(pm).toString(); final String title = info.loadLabel(pm).toString(); Loading Loading @@ -192,7 +201,11 @@ public class RecentTasksLoader implements View.OnTouchListener { final PackageManager pm = mContext.getPackageManager(); final PackageManager pm = mContext.getPackageManager(); Bitmap thumbnail = am.getTaskTopThumbnail(td.persistentTaskId); Bitmap thumbnail = am.getTaskTopThumbnail(td.persistentTaskId); Drawable icon = getFullResIcon(td.resolveInfo, pm); Drawable icon = getFullResIcon(td.resolveInfo, pm); if (td.userId != UserHandle.myUserId()) { // Need to badge the icon final UserManager um = (UserManager) mContext.getSystemService(Context.USER_SERVICE); icon = um.getBadgedDrawableForUser(icon, new UserHandle(td.userId)); } if (DEBUG) Log.v(TAG, "Loaded bitmap for task " if (DEBUG) Log.v(TAG, "Loaded bitmap for task " + td + ": " + thumbnail); + td + ": " + thumbnail); synchronized (td) { synchronized (td) { Loading
packages/SystemUI/src/com/android/systemui/recents/RecentsTaskLoader.java +5 −4 Original line number Original line Diff line number Diff line Loading @@ -192,8 +192,9 @@ class TaskResourceLoader implements Runnable { " forceLoad: " + forceLoadTask); " forceLoad: " + forceLoadTask); // Load the application icon // Load the application icon if (loadIcon == null || forceLoadTask) { if (loadIcon == null || forceLoadTask) { ActivityInfo info = ssp.getActivityInfo(t.key.baseIntent.getComponent()); ActivityInfo info = ssp.getActivityInfo(t.key.baseIntent.getComponent(), Drawable icon = ssp.getActivityIcon(info); t.userId); Drawable icon = ssp.getActivityIcon(info, t.userId); if (!mCancelled) { if (!mCancelled) { if (icon != null) { if (icon != null) { Console.log(Constants.DebugFlags.App.TaskDataLoader, Console.log(Constants.DebugFlags.App.TaskDataLoader, Loading Loading @@ -411,7 +412,7 @@ public class RecentsTaskLoader { int taskCount = tasks.size(); int taskCount = tasks.size(); for (int i = 0; i < taskCount; i++) { for (int i = 0; i < taskCount; i++) { ActivityManager.RecentTaskInfo t = tasks.get(i); ActivityManager.RecentTaskInfo t = tasks.get(i); ActivityInfo info = ssp.getActivityInfo(t.baseIntent.getComponent()); ActivityInfo info = ssp.getActivityInfo(t.baseIntent.getComponent(), t.userId); String activityLabel = (t.activityLabel == null ? ssp.getActivityLabel(info) : String activityLabel = (t.activityLabel == null ? ssp.getActivityLabel(info) : t.activityLabel.toString()); t.activityLabel.toString()); Bitmap activityIcon = t.activityIcon; Bitmap activityIcon = t.activityIcon; Loading @@ -437,7 +438,7 @@ public class RecentsTaskLoader { } } } } if (task.applicationIcon == null) { if (task.applicationIcon == null) { task.applicationIcon = ssp.getActivityIcon(info); task.applicationIcon = ssp.getActivityIcon(info, task.userId); if (task.applicationIcon != null) { if (task.applicationIcon != null) { mApplicationIconCache.put(task.key, task.applicationIcon); mApplicationIconCache.put(task.key, task.applicationIcon); } else { } else { Loading
packages/SystemUI/src/com/android/systemui/recents/SystemServicesProxy.java +30 −9 Original line number Original line Diff line number Diff line Loading @@ -18,14 +18,19 @@ package com.android.systemui.recents; import android.app.ActivityManager; import android.app.ActivityManager; import android.app.ActivityOptions; import android.app.ActivityOptions; import android.app.AppGlobals; import android.content.ComponentName; import android.content.ComponentName; 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.IPackageManager; import android.content.pm.PackageManager; import android.content.pm.PackageManager; import android.graphics.Bitmap; import android.graphics.Bitmap; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable; import android.os.RemoteException; import android.os.UserHandle; import android.os.UserManager; import java.util.ArrayList; import java.util.ArrayList; import java.util.List; import java.util.List; Loading @@ -38,6 +43,8 @@ import java.util.Random; public class SystemServicesProxy { public class SystemServicesProxy { ActivityManager mAm; ActivityManager mAm; PackageManager mPm; PackageManager mPm; IPackageManager mIpm; UserManager mUm; String mPackage; String mPackage; Bitmap mDummyIcon; Bitmap mDummyIcon; Loading @@ -46,6 +53,8 @@ public class SystemServicesProxy { public SystemServicesProxy(Context context) { public SystemServicesProxy(Context context) { mAm = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); mAm = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); mPm = context.getPackageManager(); mPm = context.getPackageManager(); mUm = (UserManager) context.getSystemService(Context.USER_SERVICE); mIpm = AppGlobals.getPackageManager(); mPackage = context.getPackageName(); mPackage = context.getPackageName(); if (Constants.DebugFlags.App.EnableSystemServicesProxy) { if (Constants.DebugFlags.App.EnableSystemServicesProxy) { Loading Loading @@ -142,14 +151,19 @@ public class SystemServicesProxy { mAm.removeTask(taskId, ActivityManager.REMOVE_TASK_KILL_PROCESS); mAm.removeTask(taskId, ActivityManager.REMOVE_TASK_KILL_PROCESS); } } /** Returns the activity info for a given component name */ /** public ActivityInfo getActivityInfo(ComponentName cn) { * Returns the activity info for a given component name. if (mPm == null) return null; * * @param ComponentName The component name of the activity. * @param userId The userId of the user that this is for. */ public ActivityInfo getActivityInfo(ComponentName cn, int userId) { if (mIpm == null) return null; if (Constants.DebugFlags.App.EnableSystemServicesProxy) return null; if (Constants.DebugFlags.App.EnableSystemServicesProxy) return null; try { try { return mPm.getActivityInfo(cn, PackageManager.GET_META_DATA); return mIpm.getActivityInfo(cn, PackageManager.GET_META_DATA, userId); } catch (PackageManager.NameNotFoundException e) { } catch (RemoteException e) { e.printStackTrace(); e.printStackTrace(); return null; return null; } } Loading @@ -167,15 +181,22 @@ public class SystemServicesProxy { return info.loadLabel(mPm).toString(); return info.loadLabel(mPm).toString(); } } /** Returns the activity icon */ /** public Drawable getActivityIcon(ActivityInfo info) { * Returns the activity icon for the ActivityInfo for a user, badging if if (mPm == null) return null; * necessary. */ public Drawable getActivityIcon(ActivityInfo info, int userId) { if (mPm == null || mUm == null) return null; // If we are mocking, then return a mock label // If we are mocking, then return a mock label if (Constants.DebugFlags.App.EnableSystemServicesProxy) { if (Constants.DebugFlags.App.EnableSystemServicesProxy) { return new ColorDrawable(0xFF666666); return new ColorDrawable(0xFF666666); } } return info.loadIcon(mPm); Drawable icon = info.loadIcon(mPm); if (userId != UserHandle.myUserId()) { icon = mUm.getBadgedDrawableForUser(icon, new UserHandle(userId)); } return icon; } } } }
packages/SystemUI/src/com/android/systemui/recents/model/Task.java +13 −5 Original line number Original line Diff line number Diff line Loading @@ -37,25 +37,33 @@ public class Task { public static class TaskKey { public static class TaskKey { public final int id; public final int id; public final Intent baseIntent; public final Intent baseIntent; public final int userId; public TaskKey(int id, Intent intent) { public TaskKey(int id, Intent intent, int userId) { this.id = id; this.id = id; this.baseIntent = intent; this.baseIntent = intent; this.userId = userId; } } @Override @Override public boolean equals(Object o) { public boolean equals(Object o) { return hashCode() == o.hashCode(); if (!(o instanceof TaskKey)) { return false; } return id == ((TaskKey) o).id && userId == ((TaskKey) o).userId; } } @Override @Override public int hashCode() { public int hashCode() { return id; return (id << 5) + userId; } } @Override @Override public String toString() { public String toString() { return "Task.Key: " + id + ", " + baseIntent.getComponent().getPackageName(); return "Task.Key: " + id + ", " + "u" + userId + ", " + baseIntent.getComponent().getPackageName(); } } } } Loading @@ -75,7 +83,7 @@ public class Task { public Task(int id, boolean isActive, Intent intent, String activityTitle, public Task(int id, boolean isActive, Intent intent, String activityTitle, Bitmap activityIcon, int userId) { Bitmap activityIcon, int userId) { this.key = new TaskKey(id, intent); this.key = new TaskKey(id, intent, userId); this.activityLabel = activityTitle; this.activityLabel = activityTitle; this.activityIcon = activityIcon; this.activityIcon = activityIcon; this.isActive = isActive; this.isActive = isActive; Loading