Move camera flip and improve movement of some ui elements.

This commit is contained in:
Alex Hart
2024-05-22 14:18:46 -03:00
committed by Cody Henthorne
parent 6362da7a50
commit 887c173d8f
9 changed files with 222 additions and 149 deletions

View File

@@ -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
}

View File

@@ -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;
}
}

View File

@@ -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
}
}