mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-22 09:49:30 +01:00
Move camera flip and improve movement of some ui elements.
This commit is contained in:
committed by
Cody Henthorne
parent
6362da7a50
commit
887c173d8f
@@ -0,0 +1,43 @@
|
||||
package org.thoughtcrime.securesms.util.views
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Rect
|
||||
import android.util.AttributeSet
|
||||
import android.view.View
|
||||
import androidx.annotation.Px
|
||||
import androidx.coordinatorlayout.widget.CoordinatorLayout
|
||||
import kotlin.math.min
|
||||
|
||||
/**
|
||||
* @param offsetY - Extra padding between the dependency and child.
|
||||
* @param maxTranslationY - The maximum offset to apply to child's translationY value. This should be a negative number.
|
||||
*/
|
||||
abstract class SlideUpWithDependencyBehavior(
|
||||
context: Context,
|
||||
attributeSet: AttributeSet?,
|
||||
@field:Px @param:Px private val offsetY: Float = 0f
|
||||
) : CoordinatorLayout.Behavior<View>(context, attributeSet) {
|
||||
|
||||
private val rect = Rect()
|
||||
|
||||
override fun onDependentViewChanged(parent: CoordinatorLayout, child: View, dependency: View): Boolean {
|
||||
dependency.getLocalVisibleRect(rect)
|
||||
|
||||
val height = if (rect.top < parent.bottom) {
|
||||
rect.height()
|
||||
} else {
|
||||
0
|
||||
}
|
||||
|
||||
val translationY = min(0.0, (dependency.translationY - (height + offsetY)).toDouble()).toFloat()
|
||||
child.translationY = translationY
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
override fun onDependentViewRemoved(parent: CoordinatorLayout, child: View, dependency: View) {
|
||||
child.translationY = 0f
|
||||
}
|
||||
|
||||
abstract override fun layoutDependsOn(parent: CoordinatorLayout, child: View, dependency: View): Boolean
|
||||
}
|
||||
@@ -1,57 +0,0 @@
|
||||
package org.thoughtcrime.securesms.util.views;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.annotation.Dimension;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.Px;
|
||||
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
||||
|
||||
import com.google.android.material.snackbar.Snackbar;
|
||||
|
||||
import org.signal.core.util.DimensionUnit;
|
||||
|
||||
public class SlideUpWithSnackbarBehavior extends CoordinatorLayout.Behavior<View> {
|
||||
|
||||
@Dimension(unit = Dimension.DP)
|
||||
private static final float PAD_TOP_OF_SNACKBAR_DP = 16f;
|
||||
|
||||
@Px
|
||||
private final float padTopOfSnackbar = DimensionUnit.DP.toPixels(PAD_TOP_OF_SNACKBAR_DP);
|
||||
|
||||
public SlideUpWithSnackbarBehavior(@NonNull Context context, @Nullable AttributeSet attributeSet) {
|
||||
super(context, attributeSet);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onDependentViewChanged(@NonNull CoordinatorLayout parent,
|
||||
@NonNull View child,
|
||||
@NonNull View dependency)
|
||||
{
|
||||
float translationY = Math.min(0, dependency.getTranslationY() - (dependency.getHeight() + padTopOfSnackbar));
|
||||
child.setTranslationY(translationY);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDependentViewRemoved(@NonNull CoordinatorLayout parent,
|
||||
@NonNull View child,
|
||||
@NonNull View dependency)
|
||||
{
|
||||
child.setTranslationY(0);
|
||||
}
|
||||
|
||||
@SuppressLint("RestrictedApi")
|
||||
@Override
|
||||
public boolean layoutDependsOn(@NonNull CoordinatorLayout parent,
|
||||
@NonNull View child,
|
||||
@NonNull View dependency)
|
||||
{
|
||||
return dependency instanceof Snackbar.SnackbarLayout;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package org.thoughtcrime.securesms.util.views
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.view.View
|
||||
import androidx.coordinatorlayout.widget.CoordinatorLayout
|
||||
import com.google.android.material.snackbar.Snackbar.SnackbarLayout
|
||||
import org.signal.core.util.dp
|
||||
|
||||
class SlideUpWithSnackbarBehavior(context: Context, attributeSet: AttributeSet?) : SlideUpWithDependencyBehavior(context, attributeSet, 16f.dp) {
|
||||
@SuppressLint("RestrictedApi")
|
||||
override fun layoutDependsOn(
|
||||
parent: CoordinatorLayout,
|
||||
child: View,
|
||||
dependency: View
|
||||
): Boolean {
|
||||
return dependency is SnackbarLayout
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user