From db6ca49dd000b7a23912391b38842762934fa3e2 Mon Sep 17 00:00:00 2001 From: Zak Cohen Date: Thu, 26 Jan 2017 14:09:00 -0800 Subject: [PATCH] Add a home intent category for VR headset UI mode. Bug: 30997244 Test: build only Change-Id: Ibed6d24f5655ae7280c7de42cd5258b25d5af9d8 --- api/current.txt | 1 + api/system-current.txt | 1 + api/test-current.txt | 1 + core/java/android/content/Intent.java | 8 ++++++++ .../android/server/policy/PhoneWindowManager.java | 12 ++++++++++++ 5 files changed, 23 insertions(+) diff --git a/api/current.txt b/api/current.txt index e2616a6f90362..9704fc5527419 100644 --- a/api/current.txt +++ b/api/current.txt @@ -9050,6 +9050,7 @@ package android.content { field public static final java.lang.String CATEGORY_TYPED_OPENABLE = "android.intent.category.TYPED_OPENABLE"; field public static final java.lang.String CATEGORY_UNIT_TEST = "android.intent.category.UNIT_TEST"; field public static final java.lang.String CATEGORY_VOICE = "android.intent.category.VOICE"; + field public static final java.lang.String CATEGORY_VR_HOME = "android.intent.category.VR_HOME"; field public static final android.os.Parcelable.Creator CREATOR; field public static final java.lang.String EXTRA_ALARM_COUNT = "android.intent.extra.ALARM_COUNT"; field public static final java.lang.String EXTRA_ALLOW_MULTIPLE = "android.intent.extra.ALLOW_MULTIPLE"; diff --git a/api/system-current.txt b/api/system-current.txt index 21f15f273b5bc..2894850f4b585 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -9461,6 +9461,7 @@ package android.content { field public static final java.lang.String CATEGORY_TYPED_OPENABLE = "android.intent.category.TYPED_OPENABLE"; field public static final java.lang.String CATEGORY_UNIT_TEST = "android.intent.category.UNIT_TEST"; field public static final java.lang.String CATEGORY_VOICE = "android.intent.category.VOICE"; + field public static final java.lang.String CATEGORY_VR_HOME = "android.intent.category.VR_HOME"; field public static final android.os.Parcelable.Creator CREATOR; field public static final java.lang.String EXTRA_ALARM_COUNT = "android.intent.extra.ALARM_COUNT"; field public static final java.lang.String EXTRA_ALLOW_MULTIPLE = "android.intent.extra.ALLOW_MULTIPLE"; diff --git a/api/test-current.txt b/api/test-current.txt index 940f68bc76607..633cc00a8f5f7 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -9076,6 +9076,7 @@ package android.content { field public static final java.lang.String CATEGORY_TYPED_OPENABLE = "android.intent.category.TYPED_OPENABLE"; field public static final java.lang.String CATEGORY_UNIT_TEST = "android.intent.category.UNIT_TEST"; field public static final java.lang.String CATEGORY_VOICE = "android.intent.category.VOICE"; + field public static final java.lang.String CATEGORY_VR_HOME = "android.intent.category.VR_HOME"; field public static final android.os.Parcelable.Creator CREATOR; field public static final java.lang.String EXTRA_ALARM_COUNT = "android.intent.extra.ALARM_COUNT"; field public static final java.lang.String EXTRA_ALLOW_MULTIPLE = "android.intent.extra.ALLOW_MULTIPLE"; diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java index 111b4d6efa6e9..6a0da33c04a73 100644 --- a/core/java/android/content/Intent.java +++ b/core/java/android/content/Intent.java @@ -569,6 +569,7 @@ import static android.content.ContentProvider.maybeAddUserId; *
  • {@link #CATEGORY_HE_DESK_DOCK} *
  • {@link #CATEGORY_CAR_MODE} *
  • {@link #CATEGORY_APP_MARKET} + *
  • {@link #CATEGORY_VR_HOME} * * *

    Standard Extra Data

    @@ -3643,6 +3644,13 @@ public class Intent implements Parcelable, Cloneable { @SdkConstant(SdkConstantType.INTENT_CATEGORY) public static final String CATEGORY_CAR_MODE = "android.intent.category.CAR_MODE"; + /** + * An activity to use for the launcher when the device is placed in a VR Headset viewer. + * Used with {@link #ACTION_MAIN} to launch an activity. For more + * information, see {@link android.app.UiModeManager}. + */ + @SdkConstant(SdkConstantType.INTENT_CATEGORY) + public static final String CATEGORY_VR_HOME = "android.intent.category.VR_HOME"; // --------------------------------------------------------------------- // --------------------------------------------------------------------- // Application launch intent categories (see addCategory()). diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index 4350ed97d529a..d6230519ceac4 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -261,6 +261,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { // No longer recommended for desk docks; static final boolean ENABLE_DESK_DOCK_HOME_CAPTURE = false; + // Whether to allow devices placed in vr headset viewers to have an alternative Home intent. + static final boolean ENABLE_VR_HEADSET_HOME_CAPTURE = true; + static final boolean ALTERNATE_CAR_MODE_NAV_SIZE = false; static final int SHORT_PRESS_POWER_NOTHING = 0; @@ -684,6 +687,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { Intent mHomeIntent; Intent mCarDockIntent; Intent mDeskDockIntent; + Intent mVrHeadsetHomeIntent; boolean mSearchKeyShortcutPending; boolean mConsumeSearchKeyUp; boolean mAssistKeyLongPressed; @@ -1791,6 +1795,10 @@ public class PhoneWindowManager implements WindowManagerPolicy { mDeskDockIntent.addCategory(Intent.CATEGORY_DESK_DOCK); mDeskDockIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); + mVrHeadsetHomeIntent = new Intent(Intent.ACTION_MAIN, null); + mVrHeadsetHomeIntent.addCategory(Intent.CATEGORY_VR_HOME); + mVrHeadsetHomeIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK + | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); mPowerManager = (PowerManager)context.getSystemService(Context.POWER_SERVICE); mBroadcastWakeLock = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, @@ -7392,6 +7400,10 @@ public class PhoneWindowManager implements WindowManagerPolicy { || mDockMode == Intent.EXTRA_DOCK_STATE_LE_DESK)) { // Always launch dock home from home when watch is docked, if it exists. intent = mDeskDockIntent; + } else if (mUiMode == Configuration.UI_MODE_TYPE_VR_HEADSET) { + if (ENABLE_VR_HEADSET_HOME_CAPTURE) { + intent = mVrHeadsetHomeIntent; + } } if (intent == null) {