Merge "Prevent invisible PiP menu activity from having touch focus." into oc-dev

This commit is contained in:
Winson Chung
2017-03-29 18:18:08 +00:00
committed by Android (Google) Code Review

View File

@@ -45,14 +45,12 @@ import android.os.Message;
import android.os.Messenger; import android.os.Messenger;
import android.os.RemoteException; import android.os.RemoteException;
import android.util.Log; import android.util.Log;
import android.util.Pair;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.view.View; import android.view.View;
import android.view.ViewConfiguration; import android.view.ViewConfiguration;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.WindowManager.LayoutParams; import android.view.WindowManager.LayoutParams;
import android.view.accessibility.AccessibilityManager;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.LinearLayout; import android.widget.LinearLayout;
@@ -61,6 +59,7 @@ import com.android.systemui.Interpolators;
import com.android.systemui.R; import com.android.systemui.R;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
/** /**
@@ -128,8 +127,9 @@ public class PipMenuActivity extends Activity {
break; break;
case MESSAGE_UPDATE_ACTIONS: { case MESSAGE_UPDATE_ACTIONS: {
final Bundle data = (Bundle) msg.obj; final Bundle data = (Bundle) msg.obj;
setActions(data.getParcelable(EXTRA_STACK_BOUNDS), final ParceledListSlice actions = data.getParcelable(EXTRA_ACTIONS);
((ParceledListSlice) data.getParcelable(EXTRA_ACTIONS)).getList()); setActions(data.getParcelable(EXTRA_STACK_BOUNDS), actions != null
? actions.getList() : Collections.EMPTY_LIST);
break; break;
} }
case MESSAGE_UPDATE_DISMISS_FRACTION: { case MESSAGE_UPDATE_DISMISS_FRACTION: {
@@ -260,6 +260,7 @@ public class PipMenuActivity extends Activity {
} }
notifyMenuVisibility(true); notifyMenuVisibility(true);
updateExpandButtonFromBounds(stackBounds, movementBounds); updateExpandButtonFromBounds(stackBounds, movementBounds);
setDecorViewVisibility(true);
mMenuContainerAnimator = ObjectAnimator.ofFloat(mMenuContainer, View.ALPHA, mMenuContainerAnimator = ObjectAnimator.ofFloat(mMenuContainer, View.ALPHA,
mMenuContainer.getAlpha(), 1f); mMenuContainer.getAlpha(), 1f);
mMenuContainerAnimator.setInterpolator(Interpolators.ALPHA_IN); mMenuContainerAnimator.setInterpolator(Interpolators.ALPHA_IN);
@@ -300,9 +301,7 @@ public class PipMenuActivity extends Activity {
if (animationFinishedRunnable != null) { if (animationFinishedRunnable != null) {
animationFinishedRunnable.run(); animationFinishedRunnable.run();
} }
if (getSystemService(AccessibilityManager.class).isEnabled()) { setDecorViewVisibility(false);
finish();
}
} }
}); });
mMenuContainerAnimator.addUpdateListener(mMenuBgUpdateListener); mMenuContainerAnimator.addUpdateListener(mMenuBgUpdateListener);
@@ -411,6 +410,7 @@ public class PipMenuActivity extends Activity {
} }
private void updateDismissFraction(float fraction) { private void updateDismissFraction(float fraction) {
setDecorViewVisibility(true);
int alpha; int alpha;
if (mMenuVisible) { if (mMenuVisible) {
mMenuContainer.setAlpha(1-fraction); mMenuContainer.setAlpha(1-fraction);
@@ -497,4 +497,16 @@ public class PipMenuActivity extends Activity {
v.removeCallbacks(mFinishRunnable); v.removeCallbacks(mFinishRunnable);
v.postDelayed(mFinishRunnable, delay); v.postDelayed(mFinishRunnable, delay);
} }
/**
* Sets the visibility of the root view of the window to disable drawing and touches for the
* activity. This differs from {@link Activity#setVisible(boolean)} in that it does not set
* the internal mVisibleFromClient state.
*/
private void setDecorViewVisibility(boolean visible) {
final View decorView = getWindow().getDecorView();
if (decorView != null) {
decorView.setVisibility(visible ? View.VISIBLE : View.INVISIBLE);
}
}
} }