Merge "PIP: Use long press HOME for PIP on Android TV (2/2)"
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index e7f886d..c627436 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -2537,6 +2537,16 @@
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_MEDIA_BUTTON = "android.intent.action.MEDIA_BUTTON";
+ /**
+ * Broadcast Action: The "Picture-in-picture (PIP) Button" was pressed.
+ * Includes a single extra field, {@link #EXTRA_KEY_EVENT}, containing the key event that
+ * caused the broadcast.
+ * @hide
+ */
+ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
+ public static final String ACTION_PICTURE_IN_PICTURE_BUTTON =
+ "android.intent.action.PICTURE_IN_PICTURE_BUTTON";
+
/**
* Broadcast Action: The "Camera Button" was pressed. Includes a single
* extra field, {@link #EXTRA_KEY_EVENT}, containing the key event that
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index b02de0e..665c417 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -220,6 +220,8 @@
<protected-broadcast android:name="android.intent.action.MEDIA_UNMOUNTABLE" />
<protected-broadcast android:name="android.intent.action.MEDIA_EJECT" />
+ <protected-broadcast android:name="android.intent.action.PICTURE_IN_PICTURE_BUTTON" />
+
<protected-broadcast android:name="android.net.conn.CAPTIVE_PORTAL" />
<protected-broadcast android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<!-- @deprecated. Only {@link android.net.ConnectivityManager.CONNECTIVITY_ACTION} is sent. -->
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 61da1e4..e4a7375 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -981,6 +981,7 @@
0 - Nothing
1 - Recent apps view in SystemUI
2 - Launch assist intent
+ 3 - Start picture-in-picture (PIP) or launch PIP UI
This needs to match the constants in
policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
-->
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index 9c629bd..806c4ca 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -183,6 +183,8 @@
static final int LONG_PRESS_HOME_NOTHING = 0;
static final int LONG_PRESS_HOME_RECENT_SYSTEM_UI = 1;
static final int LONG_PRESS_HOME_ASSIST = 2;
+ static final int LONG_PRESS_HOME_PICTURE_IN_PICTURE = 3;
+ static final int LAST_LONG_PRESS_HOME_BEHAVIOR = LONG_PRESS_HOME_PICTURE_IN_PICTURE;
static final int DOUBLE_TAP_HOME_NOTHING = 0;
static final int DOUBLE_TAP_HOME_RECENT_SYSTEM_UI = 1;
@@ -1313,16 +1315,26 @@
}
}
- private void handleLongPressOnHome(int deviceId) {
- if (mLongPressOnHomeBehavior != LONG_PRESS_HOME_NOTHING) {
- mHomeConsumed = true;
- performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false);
+ private void handleLongPressOnHome(int deviceId, KeyEvent event) {
+ if (mLongPressOnHomeBehavior == LONG_PRESS_HOME_NOTHING) {
+ return;
+ }
+ mHomeConsumed = true;
+ performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false);
- if (mLongPressOnHomeBehavior == LONG_PRESS_HOME_RECENT_SYSTEM_UI) {
+ switch (mLongPressOnHomeBehavior) {
+ case LONG_PRESS_HOME_RECENT_SYSTEM_UI:
toggleRecentApps();
- } else if (mLongPressOnHomeBehavior == LONG_PRESS_HOME_ASSIST) {
+ break;
+ case LONG_PRESS_HOME_ASSIST:
launchAssistAction(null, deviceId);
- }
+ break;
+ case LONG_PRESS_HOME_PICTURE_IN_PICTURE:
+ handlePipKey(event);
+ break;
+ default:
+ Log.w(TAG, "Not defined home long press behavior: " + mLongPressOnHomeBehavior);
+ break;
}
}
@@ -1333,6 +1345,13 @@
}
}
+ private void handlePipKey(KeyEvent event) {
+ if (DEBUG_INPUT) Log.d(TAG, "handlePipKey event=" + event);
+ Intent intent = new Intent(Intent.ACTION_PICTURE_IN_PICTURE_BUTTON);
+ intent.putExtra(Intent.EXTRA_KEY_EVENT, event);
+ mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
+ }
+
private final Runnable mHomeDoubleTapTimeoutRunnable = new Runnable() {
@Override
public void run() {
@@ -1625,7 +1644,7 @@
mLongPressOnHomeBehavior = mContext.getResources().getInteger(
com.android.internal.R.integer.config_longPressOnHomeBehavior);
if (mLongPressOnHomeBehavior < LONG_PRESS_HOME_NOTHING ||
- mLongPressOnHomeBehavior > LONG_PRESS_HOME_ASSIST) {
+ mLongPressOnHomeBehavior > LAST_LONG_PRESS_HOME_BEHAVIOR) {
mLongPressOnHomeBehavior = LONG_PRESS_HOME_NOTHING;
}
@@ -2851,7 +2870,7 @@
}
} else if ((event.getFlags() & KeyEvent.FLAG_LONG_PRESS) != 0) {
if (!keyguardOn) {
- handleLongPressOnHome(event.getDeviceId());
+ handleLongPressOnHome(event.getDeviceId(), event);
}
}
return -1;