Loading core/java/android/app/ActivityManager.java +11 −1 Original line number Diff line number Diff line Loading @@ -865,6 +865,16 @@ public class ActivityManager { } } /** @hide */ public Bitmap getTaskTopThumbnail(int id) throws SecurityException { try { return ActivityManagerNative.getDefault().getTaskTopThumbnail(id); } catch (RemoteException e) { // System dead, we will be dead too soon! return null; } } /** * Flag for {@link #moveTaskToFront(int, int)}: also move the "home" * activity along with the task, so it is positioned immediately behind Loading core/java/android/app/ActivityManagerNative.java +31 −2 Original line number Diff line number Diff line Loading @@ -513,6 +513,20 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM return true; } case GET_TASK_TOP_THUMBNAIL_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); int id = data.readInt(); Bitmap bm = getTaskTopThumbnail(id); reply.writeNoException(); if (bm != null) { reply.writeInt(1); bm.writeToParcel(reply, 0); } else { reply.writeInt(0); } return true; } case GET_SERVICES_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); int maxNum = data.readInt(); Loading Loading @@ -2307,6 +2321,21 @@ class ActivityManagerProxy implements IActivityManager reply.recycle(); return bm; } public Bitmap getTaskTopThumbnail(int id) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeInt(id); mRemote.transact(GET_TASK_TOP_THUMBNAIL_TRANSACTION, data, reply, 0); reply.readException(); Bitmap bm = null; if (reply.readInt() != 0) { bm = Bitmap.CREATOR.createFromParcel(reply); } data.recycle(); reply.recycle(); return bm; } public List getServices(int maxNum, int flags) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); Loading core/java/android/app/IActivityManager.java +2 −1 Original line number Diff line number Diff line Loading @@ -104,6 +104,7 @@ public interface IActivityManager extends IInterface { public List<ActivityManager.RecentTaskInfo> getRecentTasks(int maxNum, int flags, int userId) throws RemoteException; public ActivityManager.TaskThumbnails getTaskThumbnails(int taskId) throws RemoteException; public Bitmap getTaskTopThumbnail(int taskId) throws RemoteException; public List getServices(int maxNum, int flags) throws RemoteException; public List<ActivityManager.ProcessErrorStateInfo> getProcessesInErrorState() throws RemoteException; Loading Loading @@ -548,7 +549,7 @@ public interface IActivityManager extends IInterface { int UNBIND_BACKUP_AGENT_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+91; int GET_UID_FOR_INTENT_SENDER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+92; int HANDLE_INCOMING_USER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+93; int GET_TASK_TOP_THUMBNAIL_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+94; int KILL_APPLICATION_WITH_APPID_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+95; int CLOSE_SYSTEM_DIALOGS_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+96; int GET_PROCESS_MEMORY_INFO_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+97; Loading packages/SystemUI/src/com/android/systemui/recent/RecentTasksLoader.java +4 −4 Original line number Diff line number Diff line Loading @@ -193,14 +193,14 @@ public class RecentTasksLoader implements View.OnTouchListener { final ActivityManager am = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE); final PackageManager pm = mContext.getPackageManager(); ActivityManager.TaskThumbnails thumbs = am.getTaskThumbnails(td.persistentTaskId); Bitmap thumbnail = am.getTaskTopThumbnail(td.persistentTaskId); Drawable icon = getFullResIcon(td.resolveInfo, pm); if (DEBUG) Log.v(TAG, "Loaded bitmap for task " + td + ": " + thumbs.mainThumbnail); + td + ": " + thumbnail); synchronized (td) { if (thumbs != null && thumbs.mainThumbnail != null) { td.setThumbnail(thumbs.mainThumbnail); if (thumbnail != null) { td.setThumbnail(thumbnail); } else { td.setThumbnail(mDefaultThumbnailBackground); } Loading services/java/com/android/server/am/ActivityManagerService.java +13 −0 Original line number Diff line number Diff line Loading @@ -168,6 +168,7 @@ public final class ActivityManagerService extends ActivityManagerNative static final boolean localLOGV = DEBUG; static final boolean DEBUG_SWITCH = localLOGV || false; static final boolean DEBUG_TASKS = localLOGV || false; static final boolean DEBUG_THUMBNAILS = localLOGV || false; static final boolean DEBUG_PAUSE = localLOGV || false; static final boolean DEBUG_OOM_ADJ = localLOGV || false; static final boolean DEBUG_TRANSITION = localLOGV || false; Loading Loading @@ -5849,6 +5850,18 @@ public final class ActivityManagerService extends ActivityManagerNative return null; } public Bitmap getTaskTopThumbnail(int id) { synchronized (this) { enforceCallingPermission(android.Manifest.permission.READ_FRAME_BUFFER, "getTaskTopThumbnail()"); TaskRecord tr = taskForIdLocked(id); if (tr != null) { return mMainStack.getTaskTopThumbnailLocked(tr); } } return null; } public boolean removeSubTask(int taskId, int subTaskIndex) { synchronized (this) { enforceCallingPermission(android.Manifest.permission.REMOVE_TASKS, Loading Loading
core/java/android/app/ActivityManager.java +11 −1 Original line number Diff line number Diff line Loading @@ -865,6 +865,16 @@ public class ActivityManager { } } /** @hide */ public Bitmap getTaskTopThumbnail(int id) throws SecurityException { try { return ActivityManagerNative.getDefault().getTaskTopThumbnail(id); } catch (RemoteException e) { // System dead, we will be dead too soon! return null; } } /** * Flag for {@link #moveTaskToFront(int, int)}: also move the "home" * activity along with the task, so it is positioned immediately behind Loading
core/java/android/app/ActivityManagerNative.java +31 −2 Original line number Diff line number Diff line Loading @@ -513,6 +513,20 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM return true; } case GET_TASK_TOP_THUMBNAIL_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); int id = data.readInt(); Bitmap bm = getTaskTopThumbnail(id); reply.writeNoException(); if (bm != null) { reply.writeInt(1); bm.writeToParcel(reply, 0); } else { reply.writeInt(0); } return true; } case GET_SERVICES_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); int maxNum = data.readInt(); Loading Loading @@ -2307,6 +2321,21 @@ class ActivityManagerProxy implements IActivityManager reply.recycle(); return bm; } public Bitmap getTaskTopThumbnail(int id) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeInt(id); mRemote.transact(GET_TASK_TOP_THUMBNAIL_TRANSACTION, data, reply, 0); reply.readException(); Bitmap bm = null; if (reply.readInt() != 0) { bm = Bitmap.CREATOR.createFromParcel(reply); } data.recycle(); reply.recycle(); return bm; } public List getServices(int maxNum, int flags) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); Loading
core/java/android/app/IActivityManager.java +2 −1 Original line number Diff line number Diff line Loading @@ -104,6 +104,7 @@ public interface IActivityManager extends IInterface { public List<ActivityManager.RecentTaskInfo> getRecentTasks(int maxNum, int flags, int userId) throws RemoteException; public ActivityManager.TaskThumbnails getTaskThumbnails(int taskId) throws RemoteException; public Bitmap getTaskTopThumbnail(int taskId) throws RemoteException; public List getServices(int maxNum, int flags) throws RemoteException; public List<ActivityManager.ProcessErrorStateInfo> getProcessesInErrorState() throws RemoteException; Loading Loading @@ -548,7 +549,7 @@ public interface IActivityManager extends IInterface { int UNBIND_BACKUP_AGENT_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+91; int GET_UID_FOR_INTENT_SENDER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+92; int HANDLE_INCOMING_USER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+93; int GET_TASK_TOP_THUMBNAIL_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+94; int KILL_APPLICATION_WITH_APPID_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+95; int CLOSE_SYSTEM_DIALOGS_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+96; int GET_PROCESS_MEMORY_INFO_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+97; Loading
packages/SystemUI/src/com/android/systemui/recent/RecentTasksLoader.java +4 −4 Original line number Diff line number Diff line Loading @@ -193,14 +193,14 @@ public class RecentTasksLoader implements View.OnTouchListener { final ActivityManager am = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE); final PackageManager pm = mContext.getPackageManager(); ActivityManager.TaskThumbnails thumbs = am.getTaskThumbnails(td.persistentTaskId); Bitmap thumbnail = am.getTaskTopThumbnail(td.persistentTaskId); Drawable icon = getFullResIcon(td.resolveInfo, pm); if (DEBUG) Log.v(TAG, "Loaded bitmap for task " + td + ": " + thumbs.mainThumbnail); + td + ": " + thumbnail); synchronized (td) { if (thumbs != null && thumbs.mainThumbnail != null) { td.setThumbnail(thumbs.mainThumbnail); if (thumbnail != null) { td.setThumbnail(thumbnail); } else { td.setThumbnail(mDefaultThumbnailBackground); } Loading
services/java/com/android/server/am/ActivityManagerService.java +13 −0 Original line number Diff line number Diff line Loading @@ -168,6 +168,7 @@ public final class ActivityManagerService extends ActivityManagerNative static final boolean localLOGV = DEBUG; static final boolean DEBUG_SWITCH = localLOGV || false; static final boolean DEBUG_TASKS = localLOGV || false; static final boolean DEBUG_THUMBNAILS = localLOGV || false; static final boolean DEBUG_PAUSE = localLOGV || false; static final boolean DEBUG_OOM_ADJ = localLOGV || false; static final boolean DEBUG_TRANSITION = localLOGV || false; Loading Loading @@ -5849,6 +5850,18 @@ public final class ActivityManagerService extends ActivityManagerNative return null; } public Bitmap getTaskTopThumbnail(int id) { synchronized (this) { enforceCallingPermission(android.Manifest.permission.READ_FRAME_BUFFER, "getTaskTopThumbnail()"); TaskRecord tr = taskForIdLocked(id); if (tr != null) { return mMainStack.getTaskTopThumbnailLocked(tr); } } return null; } public boolean removeSubTask(int taskId, int subTaskIndex) { synchronized (this) { enforceCallingPermission(android.Manifest.permission.REMOVE_TASKS, Loading