Loading core/java/android/app/ActivityManagerNative.java +19 −0 Original line number Diff line number Diff line Loading @@ -319,6 +319,15 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM return true; } case FINISH_VOICE_TASK_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); IVoiceInteractionSession session = IVoiceInteractionSession.Stub.asInterface( data.readStrongBinder()); finishVoiceTask(session); reply.writeNoException(); return true; } case WILL_ACTIVITY_BE_VISIBLE_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); IBinder token = data.readStrongBinder(); Loading Loading @@ -2468,6 +2477,16 @@ class ActivityManagerProxy implements IActivityManager reply.recycle(); return res; } public void finishVoiceTask(IVoiceInteractionSession session) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeStrongBinder(session.asBinder()); mRemote.transact(FINISH_VOICE_TASK_TRANSACTION, data, reply, 0); reply.readException(); data.recycle(); reply.recycle(); } public boolean willActivityBeVisible(IBinder token) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); Loading core/java/android/app/IActivityManager.java +2 −0 Original line number Diff line number Diff line Loading @@ -90,6 +90,7 @@ public interface IActivityManager extends IInterface { throws RemoteException; public void finishSubActivity(IBinder token, String resultWho, int requestCode) throws RemoteException; public boolean finishActivityAffinity(IBinder token) throws RemoteException; public void finishVoiceTask(IVoiceInteractionSession session) throws RemoteException; public boolean willActivityBeVisible(IBinder token) throws RemoteException; public Intent registerReceiver(IApplicationThread caller, String callerPackage, IIntentReceiver receiver, IntentFilter filter, Loading Loading @@ -749,4 +750,5 @@ public interface IActivityManager extends IInterface { int GET_APP_TASKS_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+220; int START_LOCK_TASK_BY_CURRENT = IBinder.FIRST_CALL_TRANSACTION+221; int STOP_LOCK_TASK_BY_CURRENT = IBinder.FIRST_CALL_TRANSACTION+222; int FINISH_VOICE_TASK_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+223; } services/core/java/com/android/server/am/ActivityManagerService.java +13 −0 Original line number Diff line number Diff line Loading @@ -3891,6 +3891,19 @@ public final class ActivityManagerService extends ActivityManagerNative } } @Override public void finishVoiceTask(IVoiceInteractionSession session) { synchronized(this) { final long origId = Binder.clearCallingIdentity(); try { mStackSupervisor.finishVoiceTask(session); } finally { Binder.restoreCallingIdentity(origId); } } } @Override public boolean willActivityBeVisible(IBinder token) { synchronized(this) { Loading services/core/java/com/android/server/am/ActivityStack.java +21 −0 Original line number Diff line number Diff line Loading @@ -2497,6 +2497,27 @@ final class ActivityStack { } } final void finishVoiceTask(IVoiceInteractionSession session) { IBinder sessionBinder = session.asBinder(); boolean didOne = false; for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) { TaskRecord tr = mTaskHistory.get(taskNdx); if (tr.voiceSession != null && tr.voiceSession.asBinder() == sessionBinder) { for (int activityNdx = tr.mActivities.size() - 1; activityNdx >= 0; --activityNdx) { ActivityRecord r = tr.mActivities.get(activityNdx); if (!r.finishing) { finishActivityLocked(r, Activity.RESULT_CANCELED, null, "finish-voice", false); didOne = true; } } } } if (didOne) { mService.updateOomAdjLocked(); } } final boolean finishActivityAffinityLocked(ActivityRecord r) { ArrayList<ActivityRecord> activities = r.task.mActivities; for (int index = activities.indexOf(r); index >= 0; --index) { Loading services/core/java/com/android/server/am/ActivityStackSupervisor.java +11 −0 Original line number Diff line number Diff line Loading @@ -2256,6 +2256,17 @@ public final class ActivityStackSupervisor implements DisplayListener { } } void finishVoiceTask(IVoiceInteractionSession session) { for (int displayNdx = mActivityDisplays.size() - 1; displayNdx >= 0; --displayNdx) { final ArrayList<ActivityStack> stacks = mActivityDisplays.valueAt(displayNdx).mStacks; final int numStacks = stacks.size(); for (int stackNdx = 0; stackNdx < numStacks; ++stackNdx) { final ActivityStack stack = stacks.get(stackNdx); stack.finishVoiceTask(session); } } } void findTaskToMoveToFrontLocked(TaskRecord task, int flags, Bundle options) { if ((flags & ActivityManager.MOVE_TASK_NO_USER_ACTION) == 0) { mUserLeaving = true; Loading Loading
core/java/android/app/ActivityManagerNative.java +19 −0 Original line number Diff line number Diff line Loading @@ -319,6 +319,15 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM return true; } case FINISH_VOICE_TASK_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); IVoiceInteractionSession session = IVoiceInteractionSession.Stub.asInterface( data.readStrongBinder()); finishVoiceTask(session); reply.writeNoException(); return true; } case WILL_ACTIVITY_BE_VISIBLE_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); IBinder token = data.readStrongBinder(); Loading Loading @@ -2468,6 +2477,16 @@ class ActivityManagerProxy implements IActivityManager reply.recycle(); return res; } public void finishVoiceTask(IVoiceInteractionSession session) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeStrongBinder(session.asBinder()); mRemote.transact(FINISH_VOICE_TASK_TRANSACTION, data, reply, 0); reply.readException(); data.recycle(); reply.recycle(); } public boolean willActivityBeVisible(IBinder token) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); Loading
core/java/android/app/IActivityManager.java +2 −0 Original line number Diff line number Diff line Loading @@ -90,6 +90,7 @@ public interface IActivityManager extends IInterface { throws RemoteException; public void finishSubActivity(IBinder token, String resultWho, int requestCode) throws RemoteException; public boolean finishActivityAffinity(IBinder token) throws RemoteException; public void finishVoiceTask(IVoiceInteractionSession session) throws RemoteException; public boolean willActivityBeVisible(IBinder token) throws RemoteException; public Intent registerReceiver(IApplicationThread caller, String callerPackage, IIntentReceiver receiver, IntentFilter filter, Loading Loading @@ -749,4 +750,5 @@ public interface IActivityManager extends IInterface { int GET_APP_TASKS_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+220; int START_LOCK_TASK_BY_CURRENT = IBinder.FIRST_CALL_TRANSACTION+221; int STOP_LOCK_TASK_BY_CURRENT = IBinder.FIRST_CALL_TRANSACTION+222; int FINISH_VOICE_TASK_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+223; }
services/core/java/com/android/server/am/ActivityManagerService.java +13 −0 Original line number Diff line number Diff line Loading @@ -3891,6 +3891,19 @@ public final class ActivityManagerService extends ActivityManagerNative } } @Override public void finishVoiceTask(IVoiceInteractionSession session) { synchronized(this) { final long origId = Binder.clearCallingIdentity(); try { mStackSupervisor.finishVoiceTask(session); } finally { Binder.restoreCallingIdentity(origId); } } } @Override public boolean willActivityBeVisible(IBinder token) { synchronized(this) { Loading
services/core/java/com/android/server/am/ActivityStack.java +21 −0 Original line number Diff line number Diff line Loading @@ -2497,6 +2497,27 @@ final class ActivityStack { } } final void finishVoiceTask(IVoiceInteractionSession session) { IBinder sessionBinder = session.asBinder(); boolean didOne = false; for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) { TaskRecord tr = mTaskHistory.get(taskNdx); if (tr.voiceSession != null && tr.voiceSession.asBinder() == sessionBinder) { for (int activityNdx = tr.mActivities.size() - 1; activityNdx >= 0; --activityNdx) { ActivityRecord r = tr.mActivities.get(activityNdx); if (!r.finishing) { finishActivityLocked(r, Activity.RESULT_CANCELED, null, "finish-voice", false); didOne = true; } } } } if (didOne) { mService.updateOomAdjLocked(); } } final boolean finishActivityAffinityLocked(ActivityRecord r) { ArrayList<ActivityRecord> activities = r.task.mActivities; for (int index = activities.indexOf(r); index >= 0; --index) { Loading
services/core/java/com/android/server/am/ActivityStackSupervisor.java +11 −0 Original line number Diff line number Diff line Loading @@ -2256,6 +2256,17 @@ public final class ActivityStackSupervisor implements DisplayListener { } } void finishVoiceTask(IVoiceInteractionSession session) { for (int displayNdx = mActivityDisplays.size() - 1; displayNdx >= 0; --displayNdx) { final ArrayList<ActivityStack> stacks = mActivityDisplays.valueAt(displayNdx).mStacks; final int numStacks = stacks.size(); for (int stackNdx = 0; stackNdx < numStacks; ++stackNdx) { final ActivityStack stack = stacks.get(stackNdx); stack.finishVoiceTask(session); } } } void findTaskToMoveToFrontLocked(TaskRecord task, int flags, Bundle options) { if ((flags & ActivityManager.MOVE_TASK_NO_USER_ACTION) == 0) { mUserLeaving = true; Loading