From 416e62112f2bafd82bef57222c7e55c75a75961a Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Fri, 9 Jul 2021 10:34:36 -0300 Subject: [PATCH] Refresh shared media screens. --- .../securesms/components/AudioView.java | 50 +++++++++++-------- .../mediaoverview/MediaGalleryAllAdapter.java | 25 ++++++++-- app/src/main/res/drawable/ic_audio_24.xml | 9 ++++ .../res/layout/audio_view_circle_small.xml | 46 +++++++++++++++++ app/src/main/res/layout/audio_view_small.xml | 2 +- .../res/layout/media_overview_activity.xml | 4 +- .../media_overview_detail_item_audio.xml | 35 +++++++++---- .../media_overview_detail_item_document.xml | 21 +++++--- .../media_overview_detail_item_media.xml | 14 ++++-- .../res/layout/media_overview_detail_text.xml | 16 +++--- .../res/layout/media_overview_item_header.xml | 8 +-- app/src/main/res/values-sw360dp/dimens.xml | 1 + app/src/main/res/values/attrs.xml | 1 + app/src/main/res/values/dimens.xml | 2 + app/src/main/res/values/strings.xml | 1 + 15 files changed, 178 insertions(+), 57 deletions(-) create mode 100644 app/src/main/res/drawable/ic_audio_24.xml create mode 100644 app/src/main/res/layout/audio_view_circle_small.xml diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/AudioView.java b/app/src/main/java/org/thoughtcrime/securesms/components/AudioView.java index 2a3f9fc4d4..187f7a0704 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/AudioView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/AudioView.java @@ -52,14 +52,14 @@ public final class AudioView extends FrameLayout { private static final int FORWARDS = 1; private static final int REVERSE = -1; - @NonNull private final AnimatingToggle controlToggle; - @NonNull private final View progressAndPlay; - @NonNull private final LottieAnimationView playPauseButton; - @NonNull private final ImageView downloadButton; - @NonNull private final ProgressWheel circleProgress; - @NonNull private final SeekBar seekBar; - private final boolean smallView; - private final boolean autoRewind; + @NonNull private final AnimatingToggle controlToggle; + @NonNull private final View progressAndPlay; + @NonNull private final LottieAnimationView playPauseButton; + @NonNull private final ImageView downloadButton; + @Nullable private final ProgressWheel circleProgress; + @NonNull private final SeekBar seekBar; + private final boolean smallView; + private final boolean autoRewind; @Nullable private final TextView duration; @@ -179,16 +179,20 @@ public final class AudioView extends FrameLayout { controlToggle.displayQuick(downloadButton); seekBar.setEnabled(false); downloadButton.setOnClickListener(new DownloadClickedListener(audio)); - if (circleProgress.isSpinning()) circleProgress.stopSpinning(); - circleProgress.setVisibility(View.GONE); + if (circleProgress != null) { + if (circleProgress.isSpinning()) circleProgress.stopSpinning(); + circleProgress.setVisibility(View.GONE); + } } else if (showControls && audio.getTransferState() == AttachmentDatabase.TRANSFER_PROGRESS_STARTED) { controlToggle.displayQuick(progressAndPlay); seekBar.setEnabled(false); - circleProgress.setVisibility(View.VISIBLE); - circleProgress.spin(); + if (circleProgress != null) { + circleProgress.setVisibility(View.VISIBLE); + circleProgress.spin(); + } } else { seekBar.setEnabled(true); - if (circleProgress.isSpinning()) circleProgress.stopSpinning(); + if (circleProgress != null && circleProgress.isSpinning()) circleProgress.stopSpinning(); showPlayButton(); } @@ -346,7 +350,7 @@ public final class AudioView extends FrameLayout { duration.setText(getResources().getString(R.string.AudioView_duration, remainingSecs / 60, remainingSecs % 60)); } - if (smallView) { + if (smallView && circleProgress != null) { circleProgress.setInstantProgress(seekBar.getProgress() == 0 ? 1 : progress); } } @@ -357,7 +361,10 @@ public final class AudioView extends FrameLayout { new LottieValueCallback<>(new SimpleColorFilter(foregroundTint)))); this.downloadButton.setColorFilter(foregroundTint, PorterDuff.Mode.SRC_IN); - this.circleProgress.setBarColor(foregroundTint); + + if (circleProgress != null) { + this.circleProgress.setBarColor(foregroundTint); + } if (this.duration != null) { this.duration.setTextColor(foregroundTint); @@ -400,11 +407,14 @@ public final class AudioView extends FrameLayout { } private void showPlayButton() { - if (!smallView) { - circleProgress.setVisibility(GONE); - } else if (seekBar.getProgress() == 0) { - circleProgress.setInstantProgress(1); + if (circleProgress != null) { + if (!smallView) { + circleProgress.setVisibility(GONE); + } else if (seekBar.getProgress() == 0) { + circleProgress.setInstantProgress(1); + } } + playPauseButton.setVisibility(VISIBLE); controlToggle.displayQuick(progressAndPlay); } @@ -495,7 +505,7 @@ public final class AudioView extends FrameLayout { @Subscribe(sticky = true, threadMode = ThreadMode.MAIN) public void onEventAsync(final PartProgressEvent event) { - if (audioSlide != null && event.attachment.equals(audioSlide.asAttachment())) { + if (audioSlide != null && circleProgress != null && event.attachment.equals(audioSlide.asAttachment())) { circleProgress.setInstantProgress(((float) event.progress) / event.total); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaGalleryAllAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaGalleryAllAdapter.java index af25d26eed..c199e31f7a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaGalleryAllAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaGalleryAllAdapter.java @@ -26,6 +26,7 @@ import android.view.ViewGroup; import android.widget.TextView; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.lifecycle.Observer; import androidx.recyclerview.widget.RecyclerView; @@ -421,16 +422,21 @@ final class MediaGalleryAllAdapter extends StickyHeaderGridAdapter { line1.setText(describe(fromToPair.first(), fromToPair.second())); } - private String describe(@NonNull Recipient from, @NonNull Recipient thread) { + protected @Nullable String getMediaTitle() { + return fileName.orNull(); + } + + private @NonNull String describe(@NonNull Recipient from, @NonNull Recipient thread) { if (from == Recipient.UNKNOWN && thread == Recipient.UNKNOWN) { return fileName.or(fileTypeDescription); } String sentFromToString = getSentFromToString(from, thread); + String mediaTitle = getMediaTitle(); - if (fileName.isPresent()) { + if (mediaTitle != null) { return context.getString(R.string.MediaOverviewActivity_detail_line_2_part, - fileName.get(), + mediaTitle, sentFromToString); } else { return sentFromToString; @@ -479,6 +485,8 @@ final class MediaGalleryAllAdapter extends StickyHeaderGridAdapter { private final AudioView audioView; + private boolean isVoiceNote; + AudioDetailViewHolder(@NonNull View itemView) { super(itemView); this.audioView = itemView.findViewById(R.id.audio); @@ -486,12 +494,14 @@ final class MediaGalleryAllAdapter extends StickyHeaderGridAdapter { @Override public void bind(@NonNull Context context, @NonNull MediaDatabase.MediaRecord mediaRecord, @NonNull Slide slide) { - super.bind(context, mediaRecord, slide); - if (!slide.hasAudio()) { throw new AssertionError(); } + isVoiceNote = slide.asAttachment().isVoiceNote(); + + super.bind(context, mediaRecord, slide); + long mmsId = Objects.requireNonNull(mediaRecord.getAttachment()).getMmsId(); audioItemListener.unregisterPlaybackStateObserver(audioView.getPlaybackStateObserver()); @@ -502,6 +512,11 @@ final class MediaGalleryAllAdapter extends StickyHeaderGridAdapter { itemView.setOnClickListener(view -> itemClickListener.onMediaClicked(mediaRecord)); } + @Override + protected @NonNull String getMediaTitle() { + return context.getString(R.string.ThreadRecord_voice_message); + } + @Override void unbind() { super.unbind(); diff --git a/app/src/main/res/drawable/ic_audio_24.xml b/app/src/main/res/drawable/ic_audio_24.xml new file mode 100644 index 0000000000..26141f5630 --- /dev/null +++ b/app/src/main/res/drawable/ic_audio_24.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/audio_view_circle_small.xml b/app/src/main/res/layout/audio_view_circle_small.xml new file mode 100644 index 0000000000..748097eec3 --- /dev/null +++ b/app/src/main/res/layout/audio_view_circle_small.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/audio_view_small.xml b/app/src/main/res/layout/audio_view_small.xml index 44a07c74d7..00916e3400 100644 --- a/app/src/main/res/layout/audio_view_small.xml +++ b/app/src/main/res/layout/audio_view_small.xml @@ -9,7 +9,7 @@ android:orientation="vertical" tools:background="#ff00ff"> - + diff --git a/app/src/main/res/layout/media_overview_detail_item_audio.xml b/app/src/main/res/layout/media_overview_detail_item_audio.xml index 301c889376..f5a648cf65 100644 --- a/app/src/main/res/layout/media_overview_detail_item_audio.xml +++ b/app/src/main/res/layout/media_overview_detail_item_audio.xml @@ -3,24 +3,26 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" - android:minHeight="56dp"> + android:minHeight="@dimen/media_overview_detail_item_height"> - + @@ -28,4 +30,19 @@ + + diff --git a/app/src/main/res/layout/media_overview_detail_item_document.xml b/app/src/main/res/layout/media_overview_detail_item_document.xml index d06096fcf7..8bd5eafe27 100644 --- a/app/src/main/res/layout/media_overview_detail_item_document.xml +++ b/app/src/main/res/layout/media_overview_detail_item_document.xml @@ -2,15 +2,16 @@ + android:layout_height="wrap_content" + android:minHeight="@dimen/media_overview_detail_item_height"> @@ -29,13 +30,10 @@ android:layout_height="wrap_content" android:layout_gravity="center" android:clickable="false" - android:gravity="center" - android:scaleType="centerInside" - android:textAlignment="center" + android:textAppearance="@style/TextAppearance.Signal.Subtitle.Bold" android:textColor="@color/core_black" - android:textSize="10sp" android:visibility="visible" - tools:text="PDF" + tools:text="pdf" tools:visibility="visible" /> @@ -44,4 +42,13 @@ + + diff --git a/app/src/main/res/layout/media_overview_detail_item_media.xml b/app/src/main/res/layout/media_overview_detail_item_media.xml index 97d3f3b1f0..9f6fceea3a 100644 --- a/app/src/main/res/layout/media_overview_detail_item_media.xml +++ b/app/src/main/res/layout/media_overview_detail_item_media.xml @@ -3,13 +3,14 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" - android:minHeight="56dp"> + android:minHeight="@dimen/media_overview_detail_item_height"> @@ -22,12 +23,19 @@ app:thumbnail_radius="8dp" app:transparent_overlay_color="@color/transparent_black_08" /> - - + + diff --git a/app/src/main/res/layout/media_overview_detail_text.xml b/app/src/main/res/layout/media_overview_detail_text.xml index eff9c908ff..be08e25a06 100644 --- a/app/src/main/res/layout/media_overview_detail_text.xml +++ b/app/src/main/res/layout/media_overview_detail_text.xml @@ -2,12 +2,17 @@ @@ -28,10 +31,9 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:ellipsize="marquee" - android:paddingStart="6dp" - android:paddingEnd="6dp" android:singleLine="true" - android:textSize="14sp" + android:textAppearance="@style/TextAppearance.Signal.Body2" + android:textColor="@color/signal_text_secondary" app:layout_constraintStart_toEndOf="@+id/image_container" app:layout_constraintTop_toTopOf="parent" tools:text="2.7 MB, 11.06.19 at 5:25 AM" /> diff --git a/app/src/main/res/layout/media_overview_item_header.xml b/app/src/main/res/layout/media_overview_item_header.xml index 02daf110b7..a39c38573f 100644 --- a/app/src/main/res/layout/media_overview_item_header.xml +++ b/app/src/main/res/layout/media_overview_item_header.xml @@ -5,15 +5,15 @@ android:layout_height="wrap_content" android:background="@color/signal_background_primary" android:minHeight="48dp" - android:paddingStart="@dimen/dsl_settings_gutter" android:paddingTop="16dp" - android:paddingEnd="@dimen/dsl_settings_gutter" android:paddingBottom="12dp"> diff --git a/app/src/main/res/values-sw360dp/dimens.xml b/app/src/main/res/values-sw360dp/dimens.xml index b5295bb71a..7d4b4797db 100644 --- a/app/src/main/res/values-sw360dp/dimens.xml +++ b/app/src/main/res/values-sw360dp/dimens.xml @@ -17,6 +17,7 @@ 260dp 24dp + 10dp 16dp 260dp diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index e9920641f6..ee33d02a26 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -71,6 +71,7 @@ + diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 525704ac88..4ed3336859 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -84,6 +84,7 @@ 4dp 4 + 72dp 8dp 8dp @@ -181,6 +182,7 @@ 32dp 16dp + 2dp 8dp 240dp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d71718b2fd..d39427d32c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -942,6 +942,7 @@ Image %1$s · %2$s %1$s · %2$s · %3$s + Voice message Sent by %1$s Sent by you