Merge "Fixes issues where the PiP menu activity is out of sync."

This commit is contained in:
TreeHugger Robot
2017-02-18 02:25:35 +00:00
committed by Android (Google) Code Review
2 changed files with 38 additions and 14 deletions

View File

@@ -137,6 +137,24 @@ public class PipMenuActivity extends Activity {
showMenu();
}
@Override
protected void onUserLeaveHint() {
super.onUserLeaveHint();
// If another task is starting on top of the menu, then finish it so that it can be
// recreated on the top next time it starts
finish();
}
@Override
protected void onDestroy() {
super.onDestroy();
// Fallback, if we are destroyed for any other reason (like when the task is being reset),
// also reset the callback.
notifyActivityCallback(null);
}
@Override
public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {
if (!isInPictureInPictureMode) {

View File

@@ -631,14 +631,26 @@ final class InputMonitor implements InputManagerService.WindowManagerCallbacks {
return;
}
if (mAddPipInputConsumerHandle
&& w.getStackId() == PINNED_STACK_ID
&& inputWindowHandle.layer <= pipInputConsumer.mWindowHandle.layer) {
// Update the bounds of the Pip input consumer to match the Pinned stack
w.getStack().getBounds(pipTouchableBounds);
pipInputConsumer.mWindowHandle.touchableRegion.set(pipTouchableBounds);
addInputWindowHandle(pipInputConsumer.mWindowHandle);
mAddPipInputConsumerHandle = false;
final int flags = w.mAttrs.flags;
final int privateFlags = w.mAttrs.privateFlags;
final int type = w.mAttrs.type;
final boolean hasFocus = w == mInputFocus;
final boolean isVisible = w.isVisibleLw();
if (w.getStackId() == PINNED_STACK_ID) {
if (mAddPipInputConsumerHandle
&& (inputWindowHandle.layer <= pipInputConsumer.mWindowHandle.layer)) {
// Update the bounds of the Pip input consumer to match the Pinned stack
w.getStack().getBounds(pipTouchableBounds);
pipInputConsumer.mWindowHandle.touchableRegion.set(pipTouchableBounds);
addInputWindowHandle(pipInputConsumer.mWindowHandle);
mAddPipInputConsumerHandle = false;
}
// TODO: Fix w.canReceiveTouchInput() to handle this case
if (!hasFocus) {
// Skip this pinned stack window if it does not have focus
return;
}
}
if (mAddInputConsumerHandle
@@ -655,12 +667,6 @@ final class InputMonitor implements InputManagerService.WindowManagerCallbacks {
}
}
final int flags = w.mAttrs.flags;
final int privateFlags = w.mAttrs.privateFlags;
final int type = w.mAttrs.type;
final boolean hasFocus = w == mInputFocus;
final boolean isVisible = w.isVisibleLw();
if ((privateFlags & PRIVATE_FLAG_DISABLE_WALLPAPER_TOUCH_EVENTS) != 0) {
mDisableWallpaperTouchEvents = true;
}