Add lock-to-app mode
Added a dialog that shows when app has not been authorized by
DevicePolicyManager.isLockTaskAuthorized. This allows any app
to trigger lock-to-app mode. This same dialog is used when
startLockTaskOnCurrent is triggered by the recents long-press.
Can exit the mode by long-pressing recents again.
Keyguard is disabled when lock-to-app is active.
This CL also prevents apps from finishing when they are the root
task in a lock task TaskRecord.
Change-Id: Ib54d858e570cccf6bfd986958868e15f49bcef75
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java
index 56462ae..572d389 100644
--- a/core/java/android/app/ActivityManagerNative.java
+++ b/core/java/android/app/ActivityManagerNative.java
@@ -2145,6 +2145,13 @@
return true;
}
+ case START_LOCK_TASK_BY_CURRENT: {
+ data.enforceInterface(IActivityManager.descriptor);
+ startLockTaskModeOnCurrent();
+ reply.writeNoException();
+ return true;
+ }
+
case STOP_LOCK_TASK_MODE_TRANSACTION: {
data.enforceInterface(IActivityManager.descriptor);
stopLockTaskMode();
@@ -2152,6 +2159,13 @@
return true;
}
+ case STOP_LOCK_TASK_BY_CURRENT: {
+ data.enforceInterface(IActivityManager.descriptor);
+ stopLockTaskModeOnCurrent();
+ reply.writeNoException();
+ return true;
+ }
+
case IS_IN_LOCK_TASK_MODE_TRANSACTION: {
data.enforceInterface(IActivityManager.descriptor);
final boolean isInLockTaskMode = isInLockTaskMode();
@@ -4947,6 +4961,17 @@
}
@Override
+ public void startLockTaskModeOnCurrent() throws RemoteException {
+ Parcel data = Parcel.obtain();
+ Parcel reply = Parcel.obtain();
+ data.writeInterfaceToken(IActivityManager.descriptor);
+ mRemote.transact(START_LOCK_TASK_BY_CURRENT, data, reply, 0);
+ reply.readException();
+ data.recycle();
+ reply.recycle();
+ }
+
+ @Override
public void stopLockTaskMode() throws RemoteException {
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
@@ -4958,6 +4983,17 @@
}
@Override
+ public void stopLockTaskModeOnCurrent() throws RemoteException {
+ Parcel data = Parcel.obtain();
+ Parcel reply = Parcel.obtain();
+ data.writeInterfaceToken(IActivityManager.descriptor);
+ mRemote.transact(STOP_LOCK_TASK_BY_CURRENT, data, reply, 0);
+ reply.readException();
+ data.recycle();
+ reply.recycle();
+ }
+
+ @Override
public boolean isInLockTaskMode() throws RemoteException {
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();