Implement feedback for Material3 Gallery refresh.

fork-5.53.8
Alex Hart 2022-07-19 13:07:24 -03:00 zatwierdzone przez Cody Henthorne
rodzic 8767f775e9
commit c5f4a9c89e
14 zmienionych plików z 96 dodań i 40 usunięć

Wyświetl plik

@ -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) {

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

@ -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" />

Wyświetl plik

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

Wyświetl plik

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