OSDN Git Service

base: instrumentation: fix protected apps intents
authorJoey Rizzoli <joey@lineageos.org>
Tue, 14 Feb 2017 19:01:52 +0000 (20:01 +0100)
committerJoey Rizzoli <joey@lineageos.it>
Sun, 19 Feb 2017 19:19:30 +0000 (19:19 +0000)
When an app launches a protected app, it crashes because the intent result is
START_NOT_CURRENT_USER_ACTIVITY instead of START_SUCCESS, add a new special case
for protected app intents

Ticket: LINN-18

Change-Id: I9736829117382e44dc42fb79c8e1902a55625a56
Signed-off-by: Joey Rizzoli <joey@lineageos.org>
core/java/android/app/ActivityManager.java
core/java/android/app/Instrumentation.java
services/core/java/com/android/server/am/ActivityStarter.java

index b0e6dad..fd962d9 100644 (file)
@@ -130,6 +130,12 @@ public class ActivityManager {
     public static final String META_HOME_ALTERNATE = "android.app.home.alternate";
 
     /**
+     * Result for IActivityManager.startActivity: trying to start a protected app.
+     * @hide
+     */
+    public static final int START_PROTECTED_APP = -11;
+
+    /**
      * Result for IActivityManager.startVoiceActivity: active session is currently hidden.
      * @hide
      */
index 5c2aa37..9c60cef 100644 (file)
@@ -1801,7 +1801,9 @@ public class Instrumentation {
 
     /** @hide */
     public static void checkStartActivityResult(int res, Object intent) {
-        if (res >= ActivityManager.START_SUCCESS) {
+        // Allow START_PROTECTED_APP for protected apps
+        if (res >= ActivityManager.START_SUCCESS ||
+                res == ActivityManager.START_PROTECTED_APP) {
             return;
         }
 
index bd1c530..229ec4c 100644 (file)
@@ -377,11 +377,11 @@ class ActivityStarter {
                     intent.putExtra("com.android.settings.PROTECTED_APPS_USER_ID", userId);
                     msg.obj = intent;
                     mService.mHandler.sendMessage(msg);
-                    err = ActivityManager.START_NOT_CURRENT_USER_ACTIVITY;
+                    err = ActivityManager.START_PROTECTED_APP;
                 }
             } catch (RemoteException e) {
                 Slog.w(TAG, "Failure checking protected apps status", e);
-                err = ActivityManager.START_NOT_CURRENT_USER_ACTIVITY;
+                err = ActivityManager.START_PROTECTED_APP;
             }
         }
 
@@ -808,7 +808,7 @@ class ActivityStarter {
                     intent.putExtra("com.android.settings.PROTECTED_APPS_USER_ID", userId);
                     msg.obj = intent;
                     mService.mHandler.sendMessage(msg);
-                    return ActivityManager.START_NOT_CURRENT_USER_ACTIVITY;
+                    return ActivityManager.START_PROTECTED_APP;
                 }
             } catch (RemoteException e) {
                 e.printStackTrace();