Loading core/java/android/app/ActivityManager.java +30 −1 Original line number Diff line number Diff line Loading @@ -529,7 +529,36 @@ public class ActivityManager { throws SecurityException { try { return ActivityManagerNative.getDefault().getRecentTasks(maxNum, flags); flags, UserId.myUserId()); } catch (RemoteException e) { // System dead, we will be dead too soon! return null; } } /** * Same as {@link #getRecentTasks(int, int)} but returns the recent tasks for a * specific user. It requires holding * the {@link android.Manifest.permission#INTERACT_ACROSS_USERS_FULL} permission. * @param maxNum The maximum number of entries to return in the list. The * actual number returned may be smaller, depending on how many tasks the * user has started and the maximum number the system can remember. * @param flags Information about what to return. May be any combination * of {@link #RECENT_WITH_EXCLUDED} and {@link #RECENT_IGNORE_UNAVAILABLE}. * * @return Returns a list of RecentTaskInfo records describing each of * the recent tasks. * * @throws SecurityException Throws SecurityException if the caller does * not hold the {@link android.Manifest.permission#GET_TASKS} or the * {@link android.Manifest.permission#INTERACT_ACROSS_USERS_FULL} permissions. * @hide */ public List<RecentTaskInfo> getRecentTasksForUser(int maxNum, int flags, int userId) throws SecurityException { try { return ActivityManagerNative.getDefault().getRecentTasks(maxNum, flags, userId); } catch (RemoteException e) { // System dead, we will be dead too soon! return null; Loading core/java/android/app/ActivityManagerNative.java +66 −2 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ import android.os.Parcelable; import android.os.RemoteException; import android.os.ServiceManager; import android.os.StrictMode; import android.os.UserId; import android.text.TextUtils; import android.util.Log; import android.util.Singleton; Loading Loading @@ -135,6 +136,31 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM return true; } case START_ACTIVITY_AS_USER_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); IBinder b = data.readStrongBinder(); IApplicationThread app = ApplicationThreadNative.asInterface(b); Intent intent = Intent.CREATOR.createFromParcel(data); String resolvedType = data.readString(); IBinder resultTo = data.readStrongBinder(); String resultWho = data.readString(); int requestCode = data.readInt(); int startFlags = data.readInt(); String profileFile = data.readString(); ParcelFileDescriptor profileFd = data.readInt() != 0 ? data.readFileDescriptor() : null; Bundle options = data.readInt() != 0 ? Bundle.CREATOR.createFromParcel(data) : null; int userId = data.readInt(); int result = startActivityAsUser(app, intent, resolvedType, resultTo, resultWho, requestCode, startFlags, profileFile, profileFd, options, userId); reply.writeNoException(); reply.writeInt(result); return true; } case START_ACTIVITY_AND_WAIT_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); Loading Loading @@ -454,8 +480,9 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM data.enforceInterface(IActivityManager.descriptor); int maxNum = data.readInt(); int fl = data.readInt(); int userId = data.readInt(); List<ActivityManager.RecentTaskInfo> list = getRecentTasks(maxNum, fl); fl, userId); reply.writeNoException(); reply.writeTypedList(list); return true; Loading Loading @@ -1764,6 +1791,42 @@ class ActivityManagerProxy implements IActivityManager data.recycle(); return result; } public int startActivityAsUser(IApplicationThread caller, Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode, int startFlags, String profileFile, ParcelFileDescriptor profileFd, Bundle options, int userId) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeStrongBinder(caller != null ? caller.asBinder() : null); intent.writeToParcel(data, 0); data.writeString(resolvedType); data.writeStrongBinder(resultTo); data.writeString(resultWho); data.writeInt(requestCode); data.writeInt(startFlags); data.writeString(profileFile); if (profileFd != null) { data.writeInt(1); profileFd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE); } else { data.writeInt(0); } if (options != null) { data.writeInt(1); options.writeToParcel(data, 0); } else { data.writeInt(0); } data.writeInt(userId); mRemote.transact(START_ACTIVITY_AS_USER_TRANSACTION, data, reply, 0); reply.readException(); int result = reply.readInt(); reply.recycle(); data.recycle(); return result; } public WaitResult startActivityAndWait(IApplicationThread caller, Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode, int startFlags, String profileFile, Loading Loading @@ -2163,12 +2226,13 @@ class ActivityManagerProxy implements IActivityManager return list; } public List<ActivityManager.RecentTaskInfo> getRecentTasks(int maxNum, int flags) throws RemoteException { int flags, int userId) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeInt(maxNum); data.writeInt(flags); data.writeInt(userId); mRemote.transact(GET_RECENT_TASKS_TRANSACTION, data, reply, 0); reply.readException(); ArrayList<ActivityManager.RecentTaskInfo> list Loading core/java/android/app/ContextImpl.java +12 −0 Original line number Diff line number Diff line Loading @@ -893,6 +893,18 @@ class ContextImpl extends Context { startActivity(intent, null); } /** @hide */ @Override public void startActivityAsUser(Intent intent, int userId) { try { ActivityManagerNative.getDefault().startActivityAsUser( mMainThread.getApplicationThread(), intent, intent.resolveTypeIfNeeded(getContentResolver()), null, null, 0, Intent.FLAG_ACTIVITY_NEW_TASK, null, null, null, userId); } catch (RemoteException re) { } } @Override public void startActivity(Intent intent, Bundle options) { if ((intent.getFlags()&Intent.FLAG_ACTIVITY_NEW_TASK) == 0) { Loading core/java/android/app/IActivityManager.java +6 −1 Original line number Diff line number Diff line Loading @@ -55,6 +55,10 @@ public interface IActivityManager extends IInterface { Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode, int flags, String profileFile, ParcelFileDescriptor profileFd, Bundle options) throws RemoteException; public int startActivityAsUser(IApplicationThread caller, Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode, int flags, String profileFile, ParcelFileDescriptor profileFd, Bundle options, int userId) throws RemoteException; public WaitResult startActivityAndWait(IApplicationThread caller, Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode, int flags, String profileFile, Loading Loading @@ -102,7 +106,7 @@ public interface IActivityManager extends IInterface { public List getTasks(int maxNum, int flags, IThumbnailReceiver receiver) throws RemoteException; public List<ActivityManager.RecentTaskInfo> getRecentTasks(int maxNum, int flags) throws RemoteException; int flags, int userId) throws RemoteException; public ActivityManager.TaskThumbnails getTaskThumbnails(int taskId) throws RemoteException; public List getServices(int maxNum, int flags) throws RemoteException; public List<ActivityManager.ProcessErrorStateInfo> getProcessesInErrorState() Loading Loading @@ -606,4 +610,5 @@ public interface IActivityManager extends IInterface { int GET_LAUNCHED_FROM_UID_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+149; int UNSTABLE_PROVIDER_DIED_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+150; int IS_INTENT_SENDER_AN_ACTIVITY_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+151; int START_ACTIVITY_AS_USER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+152; } core/java/android/content/Context.java +12 −0 Original line number Diff line number Diff line Loading @@ -850,6 +850,18 @@ public abstract class Context { */ public abstract void startActivity(Intent intent); /** * Same as {@link #startActivity(Intent)}, but for a specific user. It requires holding * the {@link android.Manifest.permission#INTERACT_ACROSS_USERS_FULL} permission. * @param intent The description of the activity to start. * @param userId The user id of the user to start this activity for. * @throws ActivityNotFoundException * @hide */ public void startActivityAsUser(Intent intent, int userId) { throw new RuntimeException("Not implemented. Must override in a subclass."); } /** * Launch a new activity. You will not receive any information about when * the activity exits. Loading Loading
core/java/android/app/ActivityManager.java +30 −1 Original line number Diff line number Diff line Loading @@ -529,7 +529,36 @@ public class ActivityManager { throws SecurityException { try { return ActivityManagerNative.getDefault().getRecentTasks(maxNum, flags); flags, UserId.myUserId()); } catch (RemoteException e) { // System dead, we will be dead too soon! return null; } } /** * Same as {@link #getRecentTasks(int, int)} but returns the recent tasks for a * specific user. It requires holding * the {@link android.Manifest.permission#INTERACT_ACROSS_USERS_FULL} permission. * @param maxNum The maximum number of entries to return in the list. The * actual number returned may be smaller, depending on how many tasks the * user has started and the maximum number the system can remember. * @param flags Information about what to return. May be any combination * of {@link #RECENT_WITH_EXCLUDED} and {@link #RECENT_IGNORE_UNAVAILABLE}. * * @return Returns a list of RecentTaskInfo records describing each of * the recent tasks. * * @throws SecurityException Throws SecurityException if the caller does * not hold the {@link android.Manifest.permission#GET_TASKS} or the * {@link android.Manifest.permission#INTERACT_ACROSS_USERS_FULL} permissions. * @hide */ public List<RecentTaskInfo> getRecentTasksForUser(int maxNum, int flags, int userId) throws SecurityException { try { return ActivityManagerNative.getDefault().getRecentTasks(maxNum, flags, userId); } catch (RemoteException e) { // System dead, we will be dead too soon! return null; Loading
core/java/android/app/ActivityManagerNative.java +66 −2 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ import android.os.Parcelable; import android.os.RemoteException; import android.os.ServiceManager; import android.os.StrictMode; import android.os.UserId; import android.text.TextUtils; import android.util.Log; import android.util.Singleton; Loading Loading @@ -135,6 +136,31 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM return true; } case START_ACTIVITY_AS_USER_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); IBinder b = data.readStrongBinder(); IApplicationThread app = ApplicationThreadNative.asInterface(b); Intent intent = Intent.CREATOR.createFromParcel(data); String resolvedType = data.readString(); IBinder resultTo = data.readStrongBinder(); String resultWho = data.readString(); int requestCode = data.readInt(); int startFlags = data.readInt(); String profileFile = data.readString(); ParcelFileDescriptor profileFd = data.readInt() != 0 ? data.readFileDescriptor() : null; Bundle options = data.readInt() != 0 ? Bundle.CREATOR.createFromParcel(data) : null; int userId = data.readInt(); int result = startActivityAsUser(app, intent, resolvedType, resultTo, resultWho, requestCode, startFlags, profileFile, profileFd, options, userId); reply.writeNoException(); reply.writeInt(result); return true; } case START_ACTIVITY_AND_WAIT_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); Loading Loading @@ -454,8 +480,9 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM data.enforceInterface(IActivityManager.descriptor); int maxNum = data.readInt(); int fl = data.readInt(); int userId = data.readInt(); List<ActivityManager.RecentTaskInfo> list = getRecentTasks(maxNum, fl); fl, userId); reply.writeNoException(); reply.writeTypedList(list); return true; Loading Loading @@ -1764,6 +1791,42 @@ class ActivityManagerProxy implements IActivityManager data.recycle(); return result; } public int startActivityAsUser(IApplicationThread caller, Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode, int startFlags, String profileFile, ParcelFileDescriptor profileFd, Bundle options, int userId) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeStrongBinder(caller != null ? caller.asBinder() : null); intent.writeToParcel(data, 0); data.writeString(resolvedType); data.writeStrongBinder(resultTo); data.writeString(resultWho); data.writeInt(requestCode); data.writeInt(startFlags); data.writeString(profileFile); if (profileFd != null) { data.writeInt(1); profileFd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE); } else { data.writeInt(0); } if (options != null) { data.writeInt(1); options.writeToParcel(data, 0); } else { data.writeInt(0); } data.writeInt(userId); mRemote.transact(START_ACTIVITY_AS_USER_TRANSACTION, data, reply, 0); reply.readException(); int result = reply.readInt(); reply.recycle(); data.recycle(); return result; } public WaitResult startActivityAndWait(IApplicationThread caller, Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode, int startFlags, String profileFile, Loading Loading @@ -2163,12 +2226,13 @@ class ActivityManagerProxy implements IActivityManager return list; } public List<ActivityManager.RecentTaskInfo> getRecentTasks(int maxNum, int flags) throws RemoteException { int flags, int userId) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeInt(maxNum); data.writeInt(flags); data.writeInt(userId); mRemote.transact(GET_RECENT_TASKS_TRANSACTION, data, reply, 0); reply.readException(); ArrayList<ActivityManager.RecentTaskInfo> list Loading
core/java/android/app/ContextImpl.java +12 −0 Original line number Diff line number Diff line Loading @@ -893,6 +893,18 @@ class ContextImpl extends Context { startActivity(intent, null); } /** @hide */ @Override public void startActivityAsUser(Intent intent, int userId) { try { ActivityManagerNative.getDefault().startActivityAsUser( mMainThread.getApplicationThread(), intent, intent.resolveTypeIfNeeded(getContentResolver()), null, null, 0, Intent.FLAG_ACTIVITY_NEW_TASK, null, null, null, userId); } catch (RemoteException re) { } } @Override public void startActivity(Intent intent, Bundle options) { if ((intent.getFlags()&Intent.FLAG_ACTIVITY_NEW_TASK) == 0) { Loading
core/java/android/app/IActivityManager.java +6 −1 Original line number Diff line number Diff line Loading @@ -55,6 +55,10 @@ public interface IActivityManager extends IInterface { Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode, int flags, String profileFile, ParcelFileDescriptor profileFd, Bundle options) throws RemoteException; public int startActivityAsUser(IApplicationThread caller, Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode, int flags, String profileFile, ParcelFileDescriptor profileFd, Bundle options, int userId) throws RemoteException; public WaitResult startActivityAndWait(IApplicationThread caller, Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode, int flags, String profileFile, Loading Loading @@ -102,7 +106,7 @@ public interface IActivityManager extends IInterface { public List getTasks(int maxNum, int flags, IThumbnailReceiver receiver) throws RemoteException; public List<ActivityManager.RecentTaskInfo> getRecentTasks(int maxNum, int flags) throws RemoteException; int flags, int userId) throws RemoteException; public ActivityManager.TaskThumbnails getTaskThumbnails(int taskId) throws RemoteException; public List getServices(int maxNum, int flags) throws RemoteException; public List<ActivityManager.ProcessErrorStateInfo> getProcessesInErrorState() Loading Loading @@ -606,4 +610,5 @@ public interface IActivityManager extends IInterface { int GET_LAUNCHED_FROM_UID_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+149; int UNSTABLE_PROVIDER_DIED_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+150; int IS_INTENT_SENDER_AN_ACTIVITY_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+151; int START_ACTIVITY_AS_USER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+152; }
core/java/android/content/Context.java +12 −0 Original line number Diff line number Diff line Loading @@ -850,6 +850,18 @@ public abstract class Context { */ public abstract void startActivity(Intent intent); /** * Same as {@link #startActivity(Intent)}, but for a specific user. It requires holding * the {@link android.Manifest.permission#INTERACT_ACROSS_USERS_FULL} permission. * @param intent The description of the activity to start. * @param userId The user id of the user to start this activity for. * @throws ActivityNotFoundException * @hide */ public void startActivityAsUser(Intent intent, int userId) { throw new RuntimeException("Not implemented. Must override in a subclass."); } /** * Launch a new activity. You will not receive any information about when * the activity exits. Loading