Merge "Tweaking PiP for accessibility." into oc-dev

This commit is contained in:
TreeHugger Robot
2017-03-30 19:56:35 +00:00
committed by Android (Google) Code Review
3 changed files with 46 additions and 32 deletions

View File

@@ -17,6 +17,7 @@
package com.android.systemui.pip.phone; package com.android.systemui.pip.phone;
import static com.android.systemui.pip.phone.PipMenuActivityController.EXTRA_ACTIONS; import static com.android.systemui.pip.phone.PipMenuActivityController.EXTRA_ACTIONS;
import static com.android.systemui.pip.phone.PipMenuActivityController.EXTRA_ALLOW_TIMEOUT;
import static com.android.systemui.pip.phone.PipMenuActivityController.EXTRA_CONTROLLER_MESSENGER; import static com.android.systemui.pip.phone.PipMenuActivityController.EXTRA_CONTROLLER_MESSENGER;
import static com.android.systemui.pip.phone.PipMenuActivityController.EXTRA_DISMISS_FRACTION; import static com.android.systemui.pip.phone.PipMenuActivityController.EXTRA_DISMISS_FRACTION;
import static com.android.systemui.pip.phone.PipMenuActivityController.EXTRA_MOVEMENT_BOUNDS; import static com.android.systemui.pip.phone.PipMenuActivityController.EXTRA_MOVEMENT_BOUNDS;
@@ -75,8 +76,8 @@ public class PipMenuActivity extends Activity {
public static final int MESSAGE_UPDATE_ACTIONS = 4; public static final int MESSAGE_UPDATE_ACTIONS = 4;
public static final int MESSAGE_UPDATE_DISMISS_FRACTION = 5; public static final int MESSAGE_UPDATE_DISMISS_FRACTION = 5;
private static final long INITIAL_DISMISS_DELAY = 2000; private static final long INITIAL_DISMISS_DELAY = 3500;
private static final long POST_INTERACTION_DISMISS_DELAY = 1500; private static final long POST_INTERACTION_DISMISS_DELAY = 2000;
private static final long MENU_FADE_DURATION = 125; private static final long MENU_FADE_DURATION = 125;
private static final float MENU_BACKGROUND_ALPHA = 0.3f; private static final float MENU_BACKGROUND_ALPHA = 0.3f;
@@ -116,7 +117,8 @@ public class PipMenuActivity extends Activity {
case MESSAGE_SHOW_MENU: { case MESSAGE_SHOW_MENU: {
final Bundle data = (Bundle) msg.obj; final Bundle data = (Bundle) msg.obj;
showMenu(data.getParcelable(EXTRA_STACK_BOUNDS), showMenu(data.getParcelable(EXTRA_STACK_BOUNDS),
data.getParcelable(EXTRA_MOVEMENT_BOUNDS)); data.getParcelable(EXTRA_MOVEMENT_BOUNDS),
data.getBoolean(EXTRA_ALLOW_TIMEOUT));
break; break;
} }
case MESSAGE_POKE_MENU: case MESSAGE_POKE_MENU:
@@ -252,7 +254,7 @@ public class PipMenuActivity extends Activity {
// Do nothing // Do nothing
} }
private void showMenu(Rect stackBounds, Rect movementBounds) { private void showMenu(Rect stackBounds, Rect movementBounds, boolean allowMenuTimeout) {
if (!mMenuVisible) { if (!mMenuVisible) {
updateActionViews(stackBounds); updateActionViews(stackBounds);
if (mMenuContainerAnimator != null) { if (mMenuContainerAnimator != null) {
@@ -265,18 +267,22 @@ public class PipMenuActivity extends Activity {
mMenuContainer.getAlpha(), 1f); mMenuContainer.getAlpha(), 1f);
mMenuContainerAnimator.setInterpolator(Interpolators.ALPHA_IN); mMenuContainerAnimator.setInterpolator(Interpolators.ALPHA_IN);
mMenuContainerAnimator.setDuration(MENU_FADE_DURATION); mMenuContainerAnimator.setDuration(MENU_FADE_DURATION);
if (allowMenuTimeout) {
mMenuContainerAnimator.addListener(new AnimatorListenerAdapter() { mMenuContainerAnimator.addListener(new AnimatorListenerAdapter() {
@Override @Override
public void onAnimationEnd(Animator animation) { public void onAnimationEnd(Animator animation) {
repostDelayedFinish(INITIAL_DISMISS_DELAY); repostDelayedFinish(INITIAL_DISMISS_DELAY);
} }
}); });
}
mMenuContainerAnimator.addUpdateListener(mMenuBgUpdateListener); mMenuContainerAnimator.addUpdateListener(mMenuBgUpdateListener);
mMenuContainerAnimator.start(); mMenuContainerAnimator.start();
} else { } else {
// If we are already visible, then just start the delayed dismiss and unregister any // If we are already visible, then just start the delayed dismiss and unregister any
// existing input consumers from the previous drag // existing input consumers from the previous drag
if (allowMenuTimeout) {
repostDelayedFinish(POST_INTERACTION_DISMISS_DELAY); repostDelayedFinish(POST_INTERACTION_DISMISS_DELAY);
}
notifyUnregisterInputConsumer(); notifyUnregisterInputConsumer();
} }
} }
@@ -320,7 +326,8 @@ public class PipMenuActivity extends Activity {
if (intent.getBooleanExtra(EXTRA_SHOW_MENU, false)) { if (intent.getBooleanExtra(EXTRA_SHOW_MENU, false)) {
Rect stackBounds = intent.getParcelableExtra(EXTRA_STACK_BOUNDS); Rect stackBounds = intent.getParcelableExtra(EXTRA_STACK_BOUNDS);
Rect movementBounds = intent.getParcelableExtra(EXTRA_MOVEMENT_BOUNDS); Rect movementBounds = intent.getParcelableExtra(EXTRA_MOVEMENT_BOUNDS);
showMenu(stackBounds, movementBounds); boolean allowMenuTimeout = intent.getBooleanExtra(EXTRA_ALLOW_TIMEOUT, true);
showMenu(stackBounds, movementBounds, allowMenuTimeout);
} }
} }

View File

@@ -33,7 +33,6 @@ import android.os.Messenger;
import android.os.RemoteException; import android.os.RemoteException;
import android.os.UserHandle; import android.os.UserHandle;
import android.util.Log; import android.util.Log;
import android.util.Pair;
import android.view.IWindowManager; import android.view.IWindowManager;
import com.android.systemui.pip.phone.PipMediaController.ActionListener; import com.android.systemui.pip.phone.PipMediaController.ActionListener;
@@ -56,6 +55,7 @@ public class PipMenuActivityController {
public static final String EXTRA_ACTIONS = "actions"; public static final String EXTRA_ACTIONS = "actions";
public static final String EXTRA_STACK_BOUNDS = "stack_bounds"; public static final String EXTRA_STACK_BOUNDS = "stack_bounds";
public static final String EXTRA_MOVEMENT_BOUNDS = "movement_bounds"; public static final String EXTRA_MOVEMENT_BOUNDS = "movement_bounds";
public static final String EXTRA_ALLOW_TIMEOUT = "allow_timeout";
public static final String EXTRA_SHOW_MENU = "show_menu"; public static final String EXTRA_SHOW_MENU = "show_menu";
public static final String EXTRA_DISMISS_FRACTION = "dismiss_fraction"; public static final String EXTRA_DISMISS_FRACTION = "dismiss_fraction";
@@ -105,7 +105,8 @@ public class PipMenuActivityController {
private ParceledListSlice mMediaActions; private ParceledListSlice mMediaActions;
private boolean mMenuVisible; private boolean mMenuVisible;
private Bundle mTmpData = new Bundle(); // The dismiss fraction update is sent frequently, so use a temporary bundle for the message
private Bundle mTmpDismissFractionData = new Bundle();
private boolean mStartActivityRequested; private boolean mStartActivityRequested;
private Messenger mToActivityMessenger; private Messenger mToActivityMessenger;
@@ -195,11 +196,11 @@ public class PipMenuActivityController {
*/ */
public void setDismissFraction(float fraction) { public void setDismissFraction(float fraction) {
if (mToActivityMessenger != null) { if (mToActivityMessenger != null) {
mTmpData.clear(); mTmpDismissFractionData.clear();
mTmpData.putFloat(EXTRA_DISMISS_FRACTION, fraction); mTmpDismissFractionData.putFloat(EXTRA_DISMISS_FRACTION, fraction);
Message m = Message.obtain(); Message m = Message.obtain();
m.what = PipMenuActivity.MESSAGE_UPDATE_DISMISS_FRACTION; m.what = PipMenuActivity.MESSAGE_UPDATE_DISMISS_FRACTION;
m.obj = mTmpData; m.obj = mTmpDismissFractionData;
try { try {
mToActivityMessenger.send(m); mToActivityMessenger.send(m);
} catch (RemoteException e) { } catch (RemoteException e) {
@@ -207,28 +208,29 @@ public class PipMenuActivityController {
} }
} else if (!mStartActivityRequested) { } else if (!mStartActivityRequested) {
startMenuActivity(null /* stackBounds */, null /* movementBounds */, startMenuActivity(null /* stackBounds */, null /* movementBounds */,
false /* showMenu */); false /* showMenu */, false /* allowMenuTimeout */);
} }
} }
/** /**
* Shows the menu activity. * Shows the menu activity.
*/ */
public void showMenu(Rect stackBounds, Rect movementBounds) { public void showMenu(Rect stackBounds, Rect movementBounds, boolean allowMenuTimeout) {
if (mToActivityMessenger != null) { if (mToActivityMessenger != null) {
mTmpData.clear(); Bundle data = new Bundle();
mTmpData.putParcelable(EXTRA_STACK_BOUNDS, stackBounds); data.putParcelable(EXTRA_STACK_BOUNDS, stackBounds);
mTmpData.putParcelable(EXTRA_MOVEMENT_BOUNDS, movementBounds); data.putParcelable(EXTRA_MOVEMENT_BOUNDS, movementBounds);
data.putBoolean(EXTRA_ALLOW_TIMEOUT, allowMenuTimeout);
Message m = Message.obtain(); Message m = Message.obtain();
m.what = PipMenuActivity.MESSAGE_SHOW_MENU; m.what = PipMenuActivity.MESSAGE_SHOW_MENU;
m.obj = mTmpData; m.obj = data;
try { try {
mToActivityMessenger.send(m); mToActivityMessenger.send(m);
} catch (RemoteException e) { } catch (RemoteException e) {
Log.e(TAG, "Could not notify menu to show", e); Log.e(TAG, "Could not notify menu to show", e);
} }
} else if (!mStartActivityRequested) { } else if (!mStartActivityRequested) {
startMenuActivity(stackBounds, movementBounds, true /* showMenu */); startMenuActivity(stackBounds, movementBounds, true /* showMenu */, allowMenuTimeout);
} }
} }
@@ -290,7 +292,8 @@ public class PipMenuActivityController {
/** /**
* Starts the menu activity on the top task of the pinned stack. * Starts the menu activity on the top task of the pinned stack.
*/ */
private void startMenuActivity(Rect stackBounds, Rect movementBounds, boolean showMenu) { private void startMenuActivity(Rect stackBounds, Rect movementBounds, boolean showMenu,
boolean allowMenuTimeout) {
try { try {
StackInfo pinnedStackInfo = mActivityManager.getStackInfo(PINNED_STACK_ID); StackInfo pinnedStackInfo = mActivityManager.getStackInfo(PINNED_STACK_ID);
if (pinnedStackInfo != null && pinnedStackInfo.taskIds != null && if (pinnedStackInfo != null && pinnedStackInfo.taskIds != null &&
@@ -305,6 +308,7 @@ public class PipMenuActivityController {
intent.putExtra(EXTRA_MOVEMENT_BOUNDS, movementBounds); intent.putExtra(EXTRA_MOVEMENT_BOUNDS, movementBounds);
} }
intent.putExtra(EXTRA_SHOW_MENU, showMenu); intent.putExtra(EXTRA_SHOW_MENU, showMenu);
intent.putExtra(EXTRA_ALLOW_TIMEOUT, allowMenuTimeout);
ActivityOptions options = ActivityOptions.makeCustomAnimation(mContext, 0, 0); ActivityOptions options = ActivityOptions.makeCustomAnimation(mContext, 0, 0);
options.setLaunchTaskId( options.setLaunchTaskId(
pinnedStackInfo.taskIds[pinnedStackInfo.taskIds.length - 1]); pinnedStackInfo.taskIds[pinnedStackInfo.taskIds.length - 1]);
@@ -336,12 +340,12 @@ public class PipMenuActivityController {
Log.e(TAG, "Error showing PIP menu activity", e); Log.e(TAG, "Error showing PIP menu activity", e);
} }
mTmpData.clear(); Bundle data = new Bundle();
mTmpData.putParcelable(EXTRA_STACK_BOUNDS, stackBounds); data.putParcelable(EXTRA_STACK_BOUNDS, stackBounds);
mTmpData.putParcelable(EXTRA_ACTIONS, resolveMenuActions()); data.putParcelable(EXTRA_ACTIONS, resolveMenuActions());
Message m = Message.obtain(); Message m = Message.obtain();
m.what = PipMenuActivity.MESSAGE_UPDATE_ACTIONS; m.what = PipMenuActivity.MESSAGE_UPDATE_ACTIONS;
m.obj = mTmpData; m.obj = data;
try { try {
mToActivityMessenger.send(m); mToActivityMessenger.send(m);
} catch (RemoteException e) { } catch (RemoteException e) {

View File

@@ -288,7 +288,8 @@ public class PipTouchHandler implements TunerService.Tunable {
} }
private void onAccessibilityShowMenu() { private void onAccessibilityShowMenu() {
mMenuController.showMenu(mMotionHelper.getBounds(), mMovementBounds); mMenuController.showMenu(mMotionHelper.getBounds(), mMovementBounds,
false /* allowMenuTimeout */);
} }
private boolean handleTouchEvent(MotionEvent ev) { private boolean handleTouchEvent(MotionEvent ev) {
@@ -617,7 +618,8 @@ public class PipTouchHandler implements TunerService.Tunable {
// If the menu is still visible, and we aren't minimized, then just poke the menu // If the menu is still visible, and we aren't minimized, then just poke the menu
// so that it will timeout after the user stops touching it // so that it will timeout after the user stops touching it
if (mMenuController.isMenuVisible()) { if (mMenuController.isMenuVisible()) {
mMenuController.showMenu(mMotionHelper.getBounds(), mMovementBounds); mMenuController.showMenu(mMotionHelper.getBounds(), mMovementBounds,
true /* allowMenuTimeout */);
} }
if (isFling) { if (isFling) {
@@ -631,7 +633,8 @@ public class PipTouchHandler implements TunerService.Tunable {
mMotionHelper.animateToClosestSnapTarget(mMovementBounds, null /* listener */); mMotionHelper.animateToClosestSnapTarget(mMovementBounds, null /* listener */);
setMinimizedStateInternal(false); setMinimizedStateInternal(false);
} else if (!mIsMenuVisible) { } else if (!mIsMenuVisible) {
mMenuController.showMenu(mMotionHelper.getBounds(), mMovementBounds); mMenuController.showMenu(mMotionHelper.getBounds(), mMovementBounds,
true /* allowMenuTimeout */);
} else { } else {
mMotionHelper.expandPip(); mMotionHelper.expandPip();
} }