kopia lustrzana https://github.com/ryukoposting/Signal-Android
Implement feedback for Material3 Gallery refresh.
rodzic
8767f775e9
commit
c5f4a9c89e
|
@ -16,6 +16,7 @@ import org.thoughtcrime.securesms.components.recyclerview.GridDividerDecoration
|
|||
import org.thoughtcrime.securesms.mediasend.Media
|
||||
import org.thoughtcrime.securesms.mediasend.MediaRepository
|
||||
import org.thoughtcrime.securesms.mediasend.v2.MediaCountIndicatorButton
|
||||
import org.thoughtcrime.securesms.util.Material3OnScrollHelper
|
||||
import org.thoughtcrime.securesms.util.Stopwatch
|
||||
import org.thoughtcrime.securesms.util.ViewUtil
|
||||
import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter
|
||||
|
@ -75,6 +76,8 @@ class MediaGalleryFragment : Fragment(R.layout.v2_media_gallery_fragment) {
|
|||
onBack()
|
||||
}
|
||||
|
||||
Material3OnScrollHelper(requireActivity(), toolbar).attach(galleryRecycler)
|
||||
|
||||
if (callbacks.isCameraEnabled()) {
|
||||
toolbar.setOnMenuItemClickListener { item ->
|
||||
if (item.itemId == R.id.action_camera) {
|
||||
|
|
|
@ -24,6 +24,7 @@ import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter
|
|||
import org.thoughtcrime.securesms.util.adapter.mapping.MappingModel
|
||||
import org.thoughtcrime.securesms.util.adapter.mapping.MappingViewHolder
|
||||
import org.thoughtcrime.securesms.util.visible
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
typealias OnMediaFolderClicked = (MediaFolder) -> Unit
|
||||
typealias OnMediaClicked = (Media, Boolean) -> Unit
|
||||
|
@ -132,6 +133,7 @@ object MediaGallerySelectableItem {
|
|||
val end = if (isSelected) 1f else 0f
|
||||
|
||||
animator = ValueAnimator.ofFloat(start, end).apply {
|
||||
duration = TimeUnit.MILLISECONDS.toMillis(100L)
|
||||
addUpdateListener { animator ->
|
||||
val fraction = animator.animatedValue as Float
|
||||
updateImageView(fraction)
|
||||
|
|
|
@ -34,6 +34,7 @@ object MediaReviewSelectedItem {
|
|||
|
||||
private val imageView: ImageView = itemView.findViewById(R.id.media_review_selected_image)
|
||||
private val playOverlay: ImageView = itemView.findViewById(R.id.media_review_play_overlay)
|
||||
private val trashOverlay: ImageView = itemView.findViewById(R.id.media_review_trash_overlay)
|
||||
|
||||
override fun bind(model: Model) {
|
||||
Glide.with(imageView)
|
||||
|
@ -42,7 +43,7 @@ object MediaReviewSelectedItem {
|
|||
.into(imageView)
|
||||
|
||||
playOverlay.visible = MediaUtil.isNonGifVideo(model.media) && !model.isSelected
|
||||
imageView.isSelected = model.isSelected
|
||||
trashOverlay.visible = model.isSelected
|
||||
|
||||
itemView.contentDescription = if (model.isSelected) {
|
||||
context.getString(R.string.MediaReviewSelectedItem__tap_to_remove)
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:color="@color/signal_light_colorPrimary" android:state_selected="true" />
|
||||
<item android:color="@color/core_white" android:state_selected="false" />
|
||||
</selector>
|
|
@ -0,0 +1,12 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:state_pressed="true">
|
||||
<layer-list>
|
||||
<item android:drawable="@color/signal_dark_colorSurfaceVariant" />
|
||||
<item>
|
||||
<ripple android:color="@color/transparent_white_10" />
|
||||
</item>
|
||||
</layer-list>
|
||||
</item>
|
||||
<item android:drawable="@color/signal_dark_colorSurfaceVariant" android:state_pressed="false" />
|
||||
</selector>
|
|
@ -1,12 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item>
|
||||
<shape android:shape="oval">
|
||||
<size android:width="40dp" android:height="40dp" />
|
||||
<corners android:radius="10dp" />
|
||||
<solid android:color="@color/signal_dark_colorSurfaceVariant_92" />
|
||||
<padding android:bottom="9dp" android:left="9dp" android:right="9dp" android:top="9dp" />
|
||||
</shape>
|
||||
</item>
|
||||
<item android:drawable="@drawable/ic_add_media_22" />
|
||||
</layer-list>
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:state_pressed="true">
|
||||
<layer-list>
|
||||
<item android:drawable="@color/signal_dark_colorSurfaceVariant" />
|
||||
<item android:drawable="@color/transparent_white_10" />
|
||||
</layer-list>
|
||||
</item>
|
||||
<item android:drawable="@color/signal_dark_colorSurfaceVariant" android:state_pressed="false" />
|
||||
</selector>
|
|
@ -48,4 +48,13 @@
|
|||
app:layout_constraintTop_toBottomOf="@id/media_gallery_image"
|
||||
tools:text="Lorem ipsum dolor sit amet" />
|
||||
|
||||
<View
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:background="?selectableItemBackground"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -20,7 +20,6 @@
|
|||
android:id="@+id/media_gallery_grid"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:paddingHorizontal="12dp"
|
||||
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
|
||||
app:layout_constraintBottom_toTopOf="@id/media_gallery_bottom_bar_barrier"
|
||||
app:layout_constraintTop_toBottomOf="@id/media_gallery_toolbar"
|
||||
|
|
|
@ -45,4 +45,13 @@
|
|||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:text="1" />
|
||||
|
||||
<View
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:background="?selectableItemBackground"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -31,5 +31,14 @@
|
|||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:srcCompat="@drawable/v2_media_gallery_item_video_overlay" />
|
||||
|
||||
<View
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:background="?selectableItemBackground"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</com.google.android.exoplayer2.ui.AspectRatioFrameLayout>
|
|
@ -1,13 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.appcompat.widget.AppCompatImageView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<com.google.android.material.imageview.ShapeableImageView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/add_media"
|
||||
android:layout_width="44dp"
|
||||
android:layout_height="44dp"
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="48dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:background="?selectableItemBackgroundBorderless"
|
||||
android:background="@drawable/media_gallery_button_background"
|
||||
android:padding="4dp"
|
||||
android:scaleType="fitCenter"
|
||||
android:scaleType="centerInside"
|
||||
app:layout_constraintBottom_toTopOf="@+id/controls_shade"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:srcCompat="@drawable/add_media" />
|
||||
app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.Signal.Circle"
|
||||
app:srcCompat="@drawable/ic_add_media_22" />
|
|
@ -68,19 +68,21 @@
|
|||
tools:listitem="@layout/v2_media_review_selected_item"
|
||||
tools:visibility="visible" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
<com.google.android.material.imageview.ShapeableImageView
|
||||
android:id="@+id/add_media"
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="48dp"
|
||||
android:layout_marginStart="10dp"
|
||||
android:layout_marginBottom="15dp"
|
||||
android:alpha="0"
|
||||
android:background="?selectableItemBackgroundBorderless"
|
||||
android:background="@drawable/media_gallery_button_background"
|
||||
android:padding="4dp"
|
||||
android:scaleType="centerInside"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintBottom_toTopOf="@+id/controls_shade"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:srcCompat="@drawable/add_media"
|
||||
app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.Signal.Circle"
|
||||
app:srcCompat="@drawable/ic_add_media_22"
|
||||
tools:alpha="1"
|
||||
tools:visibility="visible" />
|
||||
|
||||
|
@ -100,23 +102,23 @@
|
|||
tools:alpha="1"
|
||||
tools:visibility="visible">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
<com.google.android.material.imageview.ShapeableImageView
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_gravity="center"
|
||||
android:background="@drawable/circle_tintable"
|
||||
android:background="@drawable/media_gallery_button_background"
|
||||
android:scaleType="centerInside"
|
||||
app:backgroundTint="@color/signal_dark_colorSurfaceVariant_92"
|
||||
app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.Signal.Circle"
|
||||
app:srcCompat="@drawable/ic_view_infinite_24"
|
||||
app:tint="@color/core_white" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
<com.google.android.material.imageview.ShapeableImageView
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_gravity="center"
|
||||
android:background="@drawable/circle_tintable"
|
||||
android:background="@drawable/media_gallery_button_background"
|
||||
android:scaleType="centerInside"
|
||||
app:backgroundTint="@color/signal_dark_colorSurfaceVariant_92"
|
||||
app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.Signal.Circle"
|
||||
app:srcCompat="@drawable/ic_view_once_24"
|
||||
app:tint="@color/core_white" />
|
||||
|
||||
|
@ -200,7 +202,7 @@
|
|||
android:layout_marginStart="10dp"
|
||||
android:layout_marginBottom="16dp"
|
||||
android:alpha="0"
|
||||
android:background="@color/signal_dark_colorSurfaceVariant"
|
||||
android:background="@drawable/media_gallery_button_background"
|
||||
android:padding="6dp"
|
||||
android:scaleType="centerInside"
|
||||
android:translationY="48dp"
|
||||
|
@ -221,7 +223,7 @@
|
|||
android:layout_marginStart="12dp"
|
||||
android:layout_marginBottom="16dp"
|
||||
android:alpha="0"
|
||||
android:background="@color/signal_dark_colorSurfaceVariant"
|
||||
android:background="@drawable/media_gallery_button_background"
|
||||
android:padding="4dp"
|
||||
android:scaleType="centerInside"
|
||||
android:translationY="48dp"
|
||||
|
@ -243,7 +245,7 @@
|
|||
android:layout_marginStart="12dp"
|
||||
android:layout_marginBottom="16dp"
|
||||
android:alpha="0"
|
||||
android:background="@color/signal_dark_colorSurfaceVariant"
|
||||
android:background="@drawable/media_gallery_button_background"
|
||||
android:padding="4dp"
|
||||
android:scaleType="centerInside"
|
||||
android:translationY="48dp"
|
||||
|
@ -264,7 +266,7 @@
|
|||
android:layout_height="48dp"
|
||||
android:layout_marginStart="12dp"
|
||||
android:layout_marginBottom="16dp"
|
||||
android:background="@color/signal_dark_colorSurfaceVariant"
|
||||
android:background="@drawable/media_gallery_button_background"
|
||||
android:padding="4dp"
|
||||
android:scaleType="centerInside"
|
||||
android:translationY="48dp"
|
||||
|
|
|
@ -12,11 +12,11 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:importantForAccessibility="no"
|
||||
android:padding="1dp"
|
||||
android:scaleType="centerCrop"
|
||||
app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.Signal.MediaSelection.Selected"
|
||||
app:strokeColor="@color/media_selection_stroke"
|
||||
app:strokeColor="@color/core_white"
|
||||
app:strokeWidth="2dp"
|
||||
android:padding="1dp"
|
||||
tools:background="@drawable/test_gradient" />
|
||||
|
||||
<ImageView
|
||||
|
@ -28,4 +28,20 @@
|
|||
android:importantForAccessibility="no"
|
||||
app:srcCompat="@drawable/exo_icon_play_ultramarine" />
|
||||
|
||||
<com.google.android.material.imageview.ShapeableImageView
|
||||
android:id="@+id/media_review_trash_overlay"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="center"
|
||||
android:background="@color/signal_dark_colorTransparentInverse4"
|
||||
android:padding="1dp"
|
||||
android:scaleType="centerInside"
|
||||
android:visibility="gone"
|
||||
app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.Signal.MediaSelection.Selected"
|
||||
app:srcCompat="@drawable/ic_trash_24"
|
||||
app:strokeColor="@color/signal_light_colorPrimary"
|
||||
app:strokeWidth="2dp"
|
||||
app:tint="@color/core_white"
|
||||
tools:visibility="visible" />
|
||||
|
||||
</FrameLayout>
|
Ładowanie…
Reference in New Issue