Merge "Ensure bubbles + pip dismiss view is above navbar" into sc-v2-dev am: b6eb3821b3
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15899613 Change-Id: I4b1c082344e773659d69200de540804037519b3b
This commit is contained in:
@@ -28,37 +28,40 @@ import androidx.dynamicanimation.animation.SpringForce.STIFFNESS_LOW
|
|||||||
import com.android.wm.shell.R
|
import com.android.wm.shell.R
|
||||||
import com.android.wm.shell.animation.PhysicsAnimator
|
import com.android.wm.shell.animation.PhysicsAnimator
|
||||||
import com.android.wm.shell.common.DismissCircleView
|
import com.android.wm.shell.common.DismissCircleView
|
||||||
|
import android.view.WindowInsets
|
||||||
|
import android.view.WindowManager
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* View that handles interactions between DismissCircleView and BubbleStackView.
|
* View that handles interactions between DismissCircleView and BubbleStackView.
|
||||||
*/
|
*/
|
||||||
class DismissView(context: Context) : FrameLayout(context) {
|
class DismissView(context: Context) : FrameLayout(context) {
|
||||||
|
|
||||||
var circle = DismissCircleView(context).apply {
|
var circle = DismissCircleView(context)
|
||||||
val targetSize: Int = context.resources.getDimensionPixelSize(R.dimen.dismiss_circle_size)
|
|
||||||
val newParams = LayoutParams(targetSize, targetSize)
|
|
||||||
newParams.gravity = Gravity.BOTTOM or Gravity.CENTER_HORIZONTAL
|
|
||||||
setLayoutParams(newParams)
|
|
||||||
setTranslationY(
|
|
||||||
resources.getDimensionPixelSize(R.dimen.floating_dismiss_gradient_height).toFloat())
|
|
||||||
}
|
|
||||||
|
|
||||||
var isShowing = false
|
var isShowing = false
|
||||||
|
|
||||||
private val animator = PhysicsAnimator.getInstance(circle)
|
private val animator = PhysicsAnimator.getInstance(circle)
|
||||||
private val spring = PhysicsAnimator.SpringConfig(STIFFNESS_LOW, DAMPING_RATIO_LOW_BOUNCY)
|
private val spring = PhysicsAnimator.SpringConfig(STIFFNESS_LOW, DAMPING_RATIO_LOW_BOUNCY)
|
||||||
private val DISMISS_SCRIM_FADE_MS = 200
|
private val DISMISS_SCRIM_FADE_MS = 200
|
||||||
|
private var wm: WindowManager =
|
||||||
|
context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
|
||||||
init {
|
init {
|
||||||
setLayoutParams(LayoutParams(
|
setLayoutParams(LayoutParams(
|
||||||
ViewGroup.LayoutParams.MATCH_PARENT,
|
ViewGroup.LayoutParams.MATCH_PARENT,
|
||||||
resources.getDimensionPixelSize(R.dimen.floating_dismiss_gradient_height),
|
resources.getDimensionPixelSize(R.dimen.floating_dismiss_gradient_height),
|
||||||
Gravity.BOTTOM))
|
Gravity.BOTTOM))
|
||||||
setPadding(0, 0, 0, resources.getDimensionPixelSize(R.dimen.floating_dismiss_bottom_margin))
|
updatePadding()
|
||||||
setClipToPadding(false)
|
setClipToPadding(false)
|
||||||
setClipChildren(false)
|
setClipChildren(false)
|
||||||
setVisibility(View.INVISIBLE)
|
setVisibility(View.INVISIBLE)
|
||||||
setBackgroundResource(
|
setBackgroundResource(
|
||||||
R.drawable.floating_dismiss_gradient_transition)
|
R.drawable.floating_dismiss_gradient_transition)
|
||||||
addView(circle)
|
|
||||||
|
val targetSize: Int = resources.getDimensionPixelSize(R.dimen.dismiss_circle_size)
|
||||||
|
addView(circle, LayoutParams(targetSize, targetSize,
|
||||||
|
Gravity.BOTTOM or Gravity.CENTER_HORIZONTAL))
|
||||||
|
// start with circle offscreen so it's animated up
|
||||||
|
circle.setTranslationY(resources.getDimensionPixelSize(
|
||||||
|
R.dimen.floating_dismiss_gradient_height).toFloat())
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -91,9 +94,21 @@ class DismissView(context: Context) : FrameLayout(context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun updateResources() {
|
fun updateResources() {
|
||||||
val targetSize: Int = context.resources.getDimensionPixelSize(R.dimen.dismiss_circle_size)
|
updatePadding()
|
||||||
|
layoutParams.height = resources.getDimensionPixelSize(
|
||||||
|
R.dimen.floating_dismiss_gradient_height)
|
||||||
|
|
||||||
|
val targetSize: Int = resources.getDimensionPixelSize(R.dimen.dismiss_circle_size)
|
||||||
circle.layoutParams.width = targetSize
|
circle.layoutParams.width = targetSize
|
||||||
circle.layoutParams.height = targetSize
|
circle.layoutParams.height = targetSize
|
||||||
circle.requestLayout()
|
circle.requestLayout()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun updatePadding() {
|
||||||
|
val insets: WindowInsets = wm.getCurrentWindowMetrics().getWindowInsets()
|
||||||
|
val navInset = insets.getInsetsIgnoringVisibility(
|
||||||
|
WindowInsets.Type.navigationBars())
|
||||||
|
setPadding(0, 0, 0, navInset.bottom +
|
||||||
|
resources.getDimensionPixelSize(R.dimen.floating_dismiss_bottom_margin))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -20,6 +20,7 @@ import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_M
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
|
import android.graphics.Insets;
|
||||||
import android.graphics.PixelFormat;
|
import android.graphics.PixelFormat;
|
||||||
import android.graphics.Point;
|
import android.graphics.Point;
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
@@ -30,6 +31,7 @@ import android.view.SurfaceControl;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.ViewTreeObserver;
|
import android.view.ViewTreeObserver;
|
||||||
|
import android.view.WindowInsets;
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
import android.widget.FrameLayout;
|
import android.widget.FrameLayout;
|
||||||
|
|
||||||
@@ -93,6 +95,7 @@ public class PipDismissTargetHandler implements ViewTreeObserver.OnPreDrawListen
|
|||||||
private int mTargetSize;
|
private int mTargetSize;
|
||||||
private int mDismissAreaHeight;
|
private int mDismissAreaHeight;
|
||||||
private float mMagneticFieldRadiusPercent = 1f;
|
private float mMagneticFieldRadiusPercent = 1f;
|
||||||
|
private WindowInsets mWindowInsets;
|
||||||
|
|
||||||
private SurfaceControl mTaskLeash;
|
private SurfaceControl mTaskLeash;
|
||||||
private boolean mHasDismissTargetSurface;
|
private boolean mHasDismissTargetSurface;
|
||||||
@@ -123,6 +126,13 @@ public class PipDismissTargetHandler implements ViewTreeObserver.OnPreDrawListen
|
|||||||
mContext.getDrawable(R.drawable.floating_dismiss_gradient_transition));
|
mContext.getDrawable(R.drawable.floating_dismiss_gradient_transition));
|
||||||
mTargetViewContainer.setClipChildren(false);
|
mTargetViewContainer.setClipChildren(false);
|
||||||
mTargetViewContainer.addView(mTargetView);
|
mTargetViewContainer.addView(mTargetView);
|
||||||
|
mTargetViewContainer.setOnApplyWindowInsetsListener((view, windowInsets) -> {
|
||||||
|
if (!windowInsets.equals(mWindowInsets)) {
|
||||||
|
mWindowInsets = windowInsets;
|
||||||
|
updateMagneticTargetSize();
|
||||||
|
}
|
||||||
|
return windowInsets;
|
||||||
|
});
|
||||||
|
|
||||||
mMagnetizedPip = mMotionHelper.getMagnetizedPip();
|
mMagnetizedPip = mMotionHelper.getMagnetizedPip();
|
||||||
mMagneticTarget = mMagnetizedPip.addTarget(mTargetView, 0);
|
mMagneticTarget = mMagnetizedPip.addTarget(mTargetView, 0);
|
||||||
@@ -201,10 +211,13 @@ public class PipDismissTargetHandler implements ViewTreeObserver.OnPreDrawListen
|
|||||||
final Resources res = mContext.getResources();
|
final Resources res = mContext.getResources();
|
||||||
mTargetSize = res.getDimensionPixelSize(R.dimen.dismiss_circle_size);
|
mTargetSize = res.getDimensionPixelSize(R.dimen.dismiss_circle_size);
|
||||||
mDismissAreaHeight = res.getDimensionPixelSize(R.dimen.floating_dismiss_gradient_height);
|
mDismissAreaHeight = res.getDimensionPixelSize(R.dimen.floating_dismiss_gradient_height);
|
||||||
|
final WindowInsets insets = mWindowManager.getCurrentWindowMetrics().getWindowInsets();
|
||||||
|
final Insets navInset = insets.getInsetsIgnoringVisibility(
|
||||||
|
WindowInsets.Type.navigationBars());
|
||||||
final FrameLayout.LayoutParams newParams =
|
final FrameLayout.LayoutParams newParams =
|
||||||
new FrameLayout.LayoutParams(mTargetSize, mTargetSize);
|
new FrameLayout.LayoutParams(mTargetSize, mTargetSize);
|
||||||
newParams.gravity = Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM;
|
newParams.gravity = Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM;
|
||||||
newParams.bottomMargin = mContext.getResources().getDimensionPixelSize(
|
newParams.bottomMargin = navInset.bottom + mContext.getResources().getDimensionPixelSize(
|
||||||
R.dimen.floating_dismiss_bottom_margin);
|
R.dimen.floating_dismiss_bottom_margin);
|
||||||
mTargetView.setLayoutParams(newParams);
|
mTargetView.setLayoutParams(newParams);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user