Adding method for applications to query their own tasks. (Bug 14627210)
Change-Id: I33299bf59784849171b19af4a5be2ab7665581c5
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java
index 2f924d3..e704a1c 100644
--- a/core/java/android/app/ActivityManagerNative.java
+++ b/core/java/android/app/ActivityManagerNative.java
@@ -506,6 +506,20 @@
return true;
}
+ case GET_APP_TASKS_TRANSACTION: {
+ data.enforceInterface(IActivityManager.descriptor);
+ List<IAppTask> list = getAppTasks();
+ reply.writeNoException();
+ int N = list != null ? list.size() : -1;
+ reply.writeInt(N);
+ int i;
+ for (i=0; i<N; i++) {
+ IAppTask task = list.get(i);
+ reply.writeStrongBinder(task.asBinder());
+ }
+ return true;
+ }
+
case GET_TASKS_TRANSACTION: {
data.enforceInterface(IActivityManager.descriptor);
int maxNum = data.readInt();
@@ -2683,6 +2697,26 @@
reply.recycle();
return res;
}
+ public List<IAppTask> getAppTasks() throws RemoteException {
+ Parcel data = Parcel.obtain();
+ Parcel reply = Parcel.obtain();
+ data.writeInterfaceToken(IActivityManager.descriptor);
+ mRemote.transact(GET_APP_TASKS_TRANSACTION, data, reply, 0);
+ reply.readException();
+ ArrayList<IAppTask> list = null;
+ int N = reply.readInt();
+ if (N >= 0) {
+ list = new ArrayList<IAppTask>();
+ while (N > 0) {
+ IAppTask task = IAppTask.Stub.asInterface(reply.readStrongBinder());
+ list.add(task);
+ N--;
+ }
+ }
+ data.recycle();
+ reply.recycle();
+ return list;
+ }
public List getTasks(int maxNum, int flags) throws RemoteException {
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
@@ -2698,7 +2732,7 @@
while (N > 0) {
ActivityManager.RunningTaskInfo info =
ActivityManager.RunningTaskInfo.CREATOR
- .createFromParcel(reply);
+ .createFromParcel(reply);
list.add(info);
N--;
}