OSDN Git Service

Only allow 1 Stack on Leanback-only devices
authorJose Lima <joselima@google.com>
Tue, 27 May 2014 21:59:31 +0000 (14:59 -0700)
committerJose Lima <joselima@google.com>
Tue, 27 May 2014 23:51:35 +0000 (16:51 -0700)
   - For Leanback only devices we will force all activities to
   live in the same app stack. This is a design decision for the
   shy/gregarious changes we are planning to implement for
   leanback devices.

Change-Id: I201f56541ba22356e9598f09419ad41e588c74dc

services/core/java/com/android/server/am/ActivityStackSupervisor.java

index ae7fab3..d52a396 100644 (file)
@@ -207,6 +207,8 @@ public final class ActivityStackSupervisor implements DisplayListener {
     /** Set when we have taken too long waiting to go to sleep. */
     boolean mSleepTimeout = false;
 
+    private final boolean mLeanbackOnlyDevice = isLeanbackOnlyDevice();
+
     /**
      * We don't want to allow the device to go to sleep while in the process
      * of launching an activity.  This is primarily to allow alarm intent
@@ -1387,7 +1389,10 @@ public final class ActivityStackSupervisor implements DisplayListener {
 
     ActivityStack adjustStackFocus(ActivityRecord r, boolean newTask) {
         final TaskRecord task = r.task;
-        if (r.isApplicationActivity() || (task != null && task.isApplicationTask())) {
+
+        // On leanback only devices we should keep all activities in the same stack.
+        if (!mLeanbackOnlyDevice &&
+                (r.isApplicationActivity() || (task != null && task.isApplicationTask()))) {
             if (task != null) {
                 final ActivityStack taskStack = task.stack;
                 if (taskStack.isOnHomeDisplay()) {
@@ -3440,4 +3445,16 @@ public final class ActivityStackSupervisor implements DisplayListener {
             return "VirtualActivityDisplay={" + mDisplayId + "}";
         }
     }
+
+    private boolean isLeanbackOnlyDevice() {
+        boolean onLeanbackOnly = false;
+        try {
+            onLeanbackOnly = AppGlobals.getPackageManager().hasSystemFeature(
+                    PackageManager.FEATURE_LEANBACK_ONLY);
+        } catch (RemoteException e) {
+            // noop
+        }
+
+        return onLeanbackOnly;
+    }
 }