OSDN Git Service

Show work challenge directly when there is no device lock
authorTony Mak <tonymak@google.com>
Mon, 21 Mar 2016 12:20:41 +0000 (12:20 +0000)
committerTony Mak <tonymak@google.com>
Mon, 21 Mar 2016 14:29:17 +0000 (14:29 +0000)
The trick is to switch to home stack first and then start the activity
of the targeted task again to trigger the intercepting code.
And back button in the lock screen page brings user to launcher
instead of the work app.

Change-Id: Ic0305dbcb63fec2a8287b12f3e76e70d4268d423

services/core/java/com/android/server/am/ActivityManagerService.java
services/core/java/com/android/server/am/UserController.java

index e653d51..5aac43d 100644 (file)
@@ -11420,7 +11420,20 @@ public final class ActivityManagerService extends ActivityManagerNative
                 final long ident = Binder.clearCallingIdentity();
                 try {
                     final int currentUserId = mUserController.getCurrentUserIdLocked();
-                    startHomeActivityLocked(currentUserId, "notifyProfileLocked");
+                    // Get the focused task before launching launcher.
+                    final int taskId = (mFocusedActivity == null)
+                            ? -1 : mFocusedActivity.task.taskId;
+                    startHomeActivityLocked(currentUserId, "notifyLockedProfile");
+                    if (mUserController.isLockScreenDisabled(currentUserId)) {
+                        // If there is no device lock, we first go to launcher and then resume the
+                        // original task. Work challenge will be shown because we intercepted
+                        // startActivityFromRecentsInner and the reason why we switch to home stack
+                        // first is to prevent pressing back button brings user back to the work
+                        // app.
+                        if (taskId != -1) {
+                            startActivityFromRecentsInner(taskId, null);
+                        }
+                    }
                 } finally {
                     Binder.restoreCallingIdentity(ident);
                 }
index 59c2682..5baba52 100644 (file)
@@ -39,6 +39,7 @@ import static com.android.server.am.ActivityManagerService.SYSTEM_USER_UNLOCK_MS
 import static com.android.server.am.ActivityManagerService.USER_SWITCH_TIMEOUT_MSG;
 
 import android.annotation.NonNull;
+import android.annotation.UserIdInt;
 import android.app.ActivityManager;
 import android.app.AppOpsManager;
 import android.app.Dialog;
@@ -1340,6 +1341,10 @@ final class UserController {
         return km.isDeviceLocked(userId);
     }
 
+    boolean isLockScreenDisabled(@UserIdInt int userId) {
+        return mLockPatternUtils.isLockScreenDisabled(userId);
+    }
+
     void dump(PrintWriter pw, boolean dumpAll) {
         pw.println("  mStartedUsers:");
         for (int i = 0; i < mStartedUsers.size(); i++) {