aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorscria1000 <91804886+scria1000@users.noreply.github.com>2021-11-09 14:11:02 +0000
committerscria1000 <91804886+scria1000@users.noreply.github.com>2021-11-09 14:11:02 +0000
commitb8e2d44638b0ecb213fb0fa74c17da0060f4fd31 (patch)
tree1b66035528a439be658242bb0990487a60489e5b
parent70cbadfb3bf1727f7cfaa89917d1c7577cc3b660 (diff)
downloadinfinity-for-reddit-b8e2d44638b0ecb213fb0fa74c17da0060f4fd31.tar
infinity-for-reddit-b8e2d44638b0ecb213fb0fa74c17da0060f4fd31.tar.gz
infinity-for-reddit-b8e2d44638b0ecb213fb0fa74c17da0060f4fd31.tar.bz2
infinity-for-reddit-b8e2d44638b0ecb213fb0fa74c17da0060f4fd31.tar.lz
infinity-for-reddit-b8e2d44638b0ecb213fb0fa74c17da0060f4fd31.tar.xz
infinity-for-reddit-b8e2d44638b0ecb213fb0fa74c17da0060f4fd31.tar.zst
infinity-for-reddit-b8e2d44638b0ecb213fb0fa74c17da0060f4fd31.zip
Initial support for gallery captions
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostDetailRecyclerViewAdapter.java24
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/fragments/ViewRedditGalleryImageOrGifFragment.java52
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/post/FetchRemovedPost.java2
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/post/ParsePost.java31
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/post/Post.java32
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/utils/JSONUtils.java2
-rw-r--r--app/src/main/res/layout/fragment_view_reddit_gallery_image_or_gif.xml113
-rw-r--r--app/src/main/res/layout/item_post_detail_gallery.xml54
8 files changed, 261 insertions, 49 deletions
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostDetailRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostDetailRecyclerViewAdapter.java
index 789ce798..3d481524 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostDetailRecyclerViewAdapter.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostDetailRecyclerViewAdapter.java
@@ -810,6 +810,24 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
((PostDetailGalleryViewHolder) holder).mImageView
.setRatio((float) preview.getPreviewHeight() / preview.getPreviewWidth());
+ String previewCaption = preview.getPreviewCaption();
+ String previewCaptionUrl = preview.getPreviewCaptionUrl();
+ boolean previewCaptionIsEmpty = android.text.TextUtils.isEmpty(previewCaption);
+ boolean previewCaptionUrlIsEmpty = android.text.TextUtils.isEmpty(previewCaptionUrl);
+ if(!previewCaptionIsEmpty || !previewCaptionUrlIsEmpty){
+ ((PostDetailGalleryViewHolder) holder).mCaptionConstraintLayout.setVisibility(View.VISIBLE);
+ }
+ if(!previewCaptionIsEmpty) {
+ ((PostDetailGalleryViewHolder) holder).mCaption.setText(previewCaption);
+ ((PostDetailGalleryViewHolder) holder).mCaption.setSelected(true);
+ }
+ if(!previewCaptionUrlIsEmpty)
+ {
+ String domain = Uri.parse(previewCaptionUrl).getHost();
+ domain = domain.startsWith("www.") ? domain.substring(4) : domain;
+ mPostDetailMarkwon.setMarkdown(((PostDetailGalleryViewHolder) holder).mCaptionUrl, String.format("[%s](%s)", domain, previewCaptionUrl));
+ }
+
loadImage((PostDetailGalleryViewHolder) holder, preview);
} else {
((PostDetailGalleryViewHolder) holder).mNoPreviewPostTypeImageView.setVisibility(View.VISIBLE);
@@ -2296,6 +2314,12 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
ImageView videoOrGifIndicatorImageView;
@BindView(R.id.image_view_item_post_detail_gallery)
AspectRatioGifImageView mImageView;
+ @BindView(R.id.caption_constraint_layout_item_post_detail_gallery)
+ ConstraintLayout mCaptionConstraintLayout;
+ @BindView(R.id.caption_text_view_item_post_detail_gallery)
+ TextView mCaption;
+ @BindView(R.id.caption_url_text_view_item_post_detail_gallery)
+ TextView mCaptionUrl;
@BindView(R.id.image_view_no_preview_link_item_post_detail_gallery)
ImageView mNoPreviewPostTypeImageView;
@BindView(R.id.bottom_constraint_layout_item_post_detail_gallery)
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/ViewRedditGalleryImageOrGifFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/ViewRedditGalleryImageOrGifFragment.java
index 05f0ab7a..97ae2a7c 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/ViewRedditGalleryImageOrGifFragment.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/ViewRedditGalleryImageOrGifFragment.java
@@ -60,6 +60,7 @@ import ml.docilealligator.infinityforreddit.activities.ViewRedditGalleryActivity
import ml.docilealligator.infinityforreddit.asynctasks.SaveBitmapImageToFile;
import ml.docilealligator.infinityforreddit.asynctasks.SaveGIFToFile;
import ml.docilealligator.infinityforreddit.bottomsheetfragments.SetAsWallpaperBottomSheetFragment;
+import ml.docilealligator.infinityforreddit.bottomsheetfragments.UrlMenuBottomSheetFragment;
import ml.docilealligator.infinityforreddit.post.Post;
import ml.docilealligator.infinityforreddit.services.DownloadMediaService;
@@ -79,6 +80,14 @@ public class ViewRedditGalleryImageOrGifFragment extends Fragment {
LinearLayout errorLinearLayout;
@BindView(R.id.bottom_navigation_view_reddit_gallery_image_or_gif_fragment)
BottomAppBar bottomAppBar;
+ @BindView(R.id.caption_layout_view_reddit_gallery_image_or_gif_fragment)
+ LinearLayout captionLayout;
+ @BindView(R.id.caption_text_view_view_reddit_gallery_image_or_gif_fragment)
+ TextView captionTextView;
+ @BindView(R.id.caption_url_text_view_view_reddit_gallery_image_or_gif_fragment)
+ TextView captionUrlTextView;
+ @BindView(R.id.bottom_app_bar_menu_view_reddit_gallery_image_or_gif_fragment)
+ LinearLayout bottomAppBarMenu;
@BindView(R.id.title_text_view_view_reddit_gallery_image_or_gif_fragment)
TextView titleTextView;
@BindView(R.id.download_image_view_view_reddit_gallery_image_or_gif_fragment)
@@ -96,6 +105,7 @@ public class ViewRedditGalleryImageOrGifFragment extends Fragment {
private String subredditName;
private boolean isDownloading = false;
private boolean isActionBarHidden = false;
+ private boolean isUseBottomCaption = false;
public ViewRedditGalleryImageOrGifFragment() {
// Required empty public constructor
@@ -182,7 +192,7 @@ public class ViewRedditGalleryImageOrGifFragment extends Fragment {
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
isActionBarHidden = false;
- if (activity.isUseBottomAppBar()) {
+ if (activity.isUseBottomAppBar() || isUseBottomCaption) {
bottomAppBar.setVisibility(View.VISIBLE);
}
} else {
@@ -194,7 +204,7 @@ public class ViewRedditGalleryImageOrGifFragment extends Fragment {
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE);
isActionBarHidden = true;
- if (activity.isUseBottomAppBar()) {
+ if (activity.isUseBottomAppBar() || isUseBottomCaption) {
bottomAppBar.setVisibility(View.GONE);
}
}
@@ -234,6 +244,44 @@ public class ViewRedditGalleryImageOrGifFragment extends Fragment {
});
}
+ String caption = media.caption;
+ String captionUrl = media.captionUrl;
+ boolean captionIsEmpty = android.text.TextUtils.isEmpty(caption);
+ boolean captionUrlIsEmpty = android.text.TextUtils.isEmpty(captionUrl);
+ if(!captionIsEmpty || !captionUrlIsEmpty){
+ isUseBottomCaption = true;
+
+ if (!activity.isUseBottomAppBar()) {
+ bottomAppBar.setVisibility(View.VISIBLE);
+ bottomAppBarMenu.setVisibility(View.GONE);
+ //Add bottom margin so that caption doesn't disappear to the bottom in some screens with rounded corners
+ //I couldn't get binding expressions to work so I did it here
+ LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams)captionLayout.getLayoutParams();
+ layoutParams.setMargins(0, 0, 0, (int) (16 * getResources().getDisplayMetrics().density));
+ }
+
+ captionLayout.setVisibility(View.VISIBLE);
+
+ if(!captionIsEmpty) {
+ captionTextView.setVisibility(View.VISIBLE);
+ captionTextView.setText(caption);
+ }
+ if(!captionUrlIsEmpty)
+ {
+ captionUrlTextView.setOnLongClickListener(view -> {
+ UrlMenuBottomSheetFragment urlMenuBottomSheetFragment = new UrlMenuBottomSheetFragment();
+ Bundle bundle = new Bundle();
+ bundle.putString(UrlMenuBottomSheetFragment.EXTRA_URL, captionUrl);
+ urlMenuBottomSheetFragment.setArguments(bundle);
+ urlMenuBottomSheetFragment.show(activity.getSupportFragmentManager(), urlMenuBottomSheetFragment.getTag());
+ return true;
+ });
+
+ captionUrlTextView.setVisibility(View.VISIBLE);
+ captionUrlTextView.setText(captionUrl);
+ }
+ }
+
return rootView;
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/post/FetchRemovedPost.java b/app/src/main/java/ml/docilealligator/infinityforreddit/post/FetchRemovedPost.java
index 8ae15029..e49ffa7e 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/post/FetchRemovedPost.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/post/FetchRemovedPost.java
@@ -98,7 +98,7 @@ public class FetchRemovedPost {
previews.set(0, preview);
}
} else {
- Post.Preview preview = new Post.Preview(result.getString("thumbnail"), 1, 1);
+ Post.Preview preview = new Post.Preview(result.getString("thumbnail"), 1, 1, "", "");
preview.setPreviewUrl(result.getString("thumbnail"));
ArrayList<Post.Preview> newPreviews = new ArrayList<>();
newPreviews.add(preview);
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/post/ParsePost.java b/app/src/main/java/ml/docilealligator/infinityforreddit/post/ParsePost.java
index ff341041..860feaf2 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/post/ParsePost.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/post/ParsePost.java
@@ -209,7 +209,7 @@ public class ParsePost {
String previewUrl = images.getJSONObject(JSONUtils.SOURCE_KEY).getString(JSONUtils.URL_KEY);
int previewWidth = images.getJSONObject(JSONUtils.SOURCE_KEY).getInt(JSONUtils.WIDTH_KEY);
int previewHeight = images.getJSONObject(JSONUtils.SOURCE_KEY).getInt(JSONUtils.HEIGHT_KEY);
- previews.add(new Post.Preview(previewUrl, previewWidth, previewHeight));
+ previews.add(new Post.Preview(previewUrl, previewWidth, previewHeight, "", ""));
JSONArray thumbnailPreviews = images.getJSONArray(JSONUtils.RESOLUTIONS_KEY);
for (int i = 0; i < thumbnailPreviews.length(); i++) {
@@ -218,7 +218,7 @@ public class ParsePost {
int thumbnailPreviewWidth = thumbnailPreview.getInt(JSONUtils.WIDTH_KEY);
int thumbnailPreviewHeight = thumbnailPreview.getInt(JSONUtils.HEIGHT_KEY);
- previews.add(new Post.Preview(thumbnailPreviewUrl, thumbnailPreviewWidth, thumbnailPreviewHeight));
+ previews.add(new Post.Preview(thumbnailPreviewUrl, thumbnailPreviewWidth, thumbnailPreviewHeight, "", ""));
}
}
if (data.has(JSONUtils.CROSSPOST_PARENT_LIST)) {
@@ -301,7 +301,7 @@ public class ParsePost {
spoiler, nsfw, stickied, archived, locked, saved, isCrosspost);
if (previews.isEmpty()) {
- previews.add(new Post.Preview(url, 0, 0));
+ previews.add(new Post.Preview(url, 0, 0, "", ""));
}
post.setPreviews(previews);
} else {
@@ -341,7 +341,7 @@ public class ParsePost {
String previewUrl = images.getJSONObject(JSONUtils.SOURCE_KEY).getString(JSONUtils.URL_KEY);
int previewWidth = images.getJSONObject(JSONUtils.SOURCE_KEY).getInt(JSONUtils.WIDTH_KEY);
int previewHeight = images.getJSONObject(JSONUtils.SOURCE_KEY).getInt(JSONUtils.HEIGHT_KEY);
- previews.add(new Post.Preview(previewUrl, previewWidth, previewHeight));
+ previews.add(new Post.Preview(previewUrl, previewWidth, previewHeight, "", ""));
JSONArray thumbnailPreviews = images.getJSONArray(JSONUtils.RESOLUTIONS_KEY);
for (int i = 0; i < thumbnailPreviews.length(); i++) {
@@ -350,7 +350,7 @@ public class ParsePost {
int thumbnailPreviewWidth = thumbnailPreview.getInt(JSONUtils.WIDTH_KEY);
int thumbnailPreviewHeight = thumbnailPreview.getInt(JSONUtils.HEIGHT_KEY);
- previews.add(new Post.Preview(thumbnailPreviewUrl, thumbnailPreviewWidth, thumbnailPreviewHeight));
+ previews.add(new Post.Preview(thumbnailPreviewUrl, thumbnailPreviewWidth, thumbnailPreviewHeight, "", ""));
}
}
}
@@ -397,7 +397,7 @@ public class ParsePost {
hidden, spoiler, nsfw, stickied, archived, locked, saved, isCrosspost);
if (previews.isEmpty()) {
- previews.add(new Post.Preview(url, 0, 0));
+ previews.add(new Post.Preview(url, 0, 0, "", ""));
}
post.setPreviews(previews);
} else if (url.endsWith("gif")){
@@ -490,7 +490,7 @@ public class ParsePost {
spoiler, nsfw, stickied, archived, locked, saved, isCrosspost);
if (previews.isEmpty()) {
- previews.add(new Post.Preview(url, 0, 0));
+ previews.add(new Post.Preview(url, 0, 0, "", ""));
}
post.setPreviews(previews);
} else if (url.endsWith("mp4")) {
@@ -559,11 +559,24 @@ public class ParsePost {
galleryItemUrl = sourceObject.getString(JSONUtils.MP4_KEY);
}
}
+
+ JSONObject galleryItem = galleryIdsArray.getJSONObject(i);
+ String galleryItemCaption = "";
+ String galleryItemCaptionUrl = "";
+ if(galleryItem.has(JSONUtils.CAPTION_KEY)){
+ galleryItemCaption = galleryItem.getString(JSONUtils.CAPTION_KEY).trim();
+ }
+
+ if(galleryItem.has(JSONUtils.CAPTION_URL_KEY)){
+ galleryItemCaptionUrl = galleryItem.getString(JSONUtils.CAPTION_URL_KEY).trim();
+ }
+
if ((previews.isEmpty()) && mimeType.contains("jpg") || mimeType.contains("png")) {
previews.add(new Post.Preview(galleryItemUrl, singleGalleryObject.getJSONObject(JSONUtils.S_KEY).getInt(JSONUtils.X_KEY),
- singleGalleryObject.getJSONObject(JSONUtils.S_KEY).getInt(JSONUtils.Y_KEY)));
+ singleGalleryObject.getJSONObject(JSONUtils.S_KEY).getInt(JSONUtils.Y_KEY), galleryItemCaption, galleryItemCaptionUrl));
}
- gallery.add(new Post.Gallery(mimeType, galleryItemUrl, subredditName + "-" + galleryId + "." + mimeType.substring(mimeType.lastIndexOf("/") + 1)));
+
+ gallery.add(new Post.Gallery(mimeType, galleryItemUrl, subredditName + "-" + galleryId + "." + mimeType.substring(mimeType.lastIndexOf("/") + 1), galleryItemCaption, galleryItemCaptionUrl));
}
if (!gallery.isEmpty()) {
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/post/Post.java b/app/src/main/java/ml/docilealligator/infinityforreddit/post/Post.java
index 6a0173c1..e19696a3 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/post/Post.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/post/Post.java
@@ -582,8 +582,10 @@ public class Post implements Parcelable {
public String url;
public String fileName;
public int mediaType;
+ public String caption;
+ public String captionUrl;
- public Gallery(String mimeType, String url, String fileName) {
+ public Gallery(String mimeType, String url, String fileName, String caption, String captionUrl) {
this.mimeType = mimeType;
this.url = url;
this.fileName = fileName;
@@ -594,6 +596,8 @@ public class Post implements Parcelable {
} else {
mediaType = TYPE_VIDEO;
}
+ this.caption = caption;
+ this.captionUrl = captionUrl;
}
protected Gallery(Parcel in) {
@@ -601,6 +605,8 @@ public class Post implements Parcelable {
url = in.readString();
fileName = in.readString();
mediaType = in.readInt();
+ caption = in.readString();
+ captionUrl = in.readString();
}
public static final Creator<Gallery> CREATOR = new Creator<Gallery>() {
@@ -626,6 +632,8 @@ public class Post implements Parcelable {
parcel.writeString(url);
parcel.writeString(fileName);
parcel.writeInt(mediaType);
+ parcel.writeString(caption);
+ parcel.writeString(captionUrl);
}
}
@@ -633,17 +641,23 @@ public class Post implements Parcelable {
private String previewUrl;
private int previewWidth;
private int previewHeight;
+ private String previewCaption;
+ private String previewCaptionUrl;
- public Preview(String previewUrl, int previewWidth, int previewHeight) {
+ public Preview(String previewUrl, int previewWidth, int previewHeight, String previewCaption, String previewCaptionUrl) {
this.previewUrl = previewUrl;
this.previewWidth = previewWidth;
this.previewHeight = previewHeight;
+ this.previewCaption = previewCaption;
+ this.previewCaptionUrl = previewCaptionUrl;
}
protected Preview(Parcel in) {
previewUrl = in.readString();
previewWidth = in.readInt();
previewHeight = in.readInt();
+ previewCaption = in.readString();
+ previewCaptionUrl = in.readString();
}
public static final Creator<Preview> CREATOR = new Creator<Preview>() {
@@ -682,6 +696,18 @@ public class Post implements Parcelable {
this.previewHeight = previewHeight;
}
+ public String getPreviewCaption() {
+ return previewCaption;
+ }
+
+ public void setPreviewCaption(String previewCaption) { this.previewCaption = previewCaption; }
+
+ public String getPreviewCaptionUrl() {
+ return previewCaptionUrl;
+ }
+
+ public void setPreviewCaptionUrl(String previewCaptionUrl) { this.previewCaptionUrl = previewCaptionUrl; }
+
@Override
public int describeContents() {
return 0;
@@ -692,6 +718,8 @@ public class Post implements Parcelable {
parcel.writeString(previewUrl);
parcel.writeInt(previewWidth);
parcel.writeInt(previewHeight);
+ parcel.writeString(previewCaption);
+ parcel.writeString(previewCaptionUrl);
}
}
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/utils/JSONUtils.java b/app/src/main/java/ml/docilealligator/infinityforreddit/utils/JSONUtils.java
index b76f198e..19ea43cb 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/utils/JSONUtils.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/utils/JSONUtils.java
@@ -171,4 +171,6 @@ public class JSONUtils {
public static final String DISPLAY_STRING_KEY = "display_string";
public static final String RESULTS_KEY = "results";
public static final String CONTENT_MD_KEY = "content_md";
+ public static final String CAPTION_KEY = "caption";
+ public static final String CAPTION_URL_KEY = "outbound_url";
}
diff --git a/app/src/main/res/layout/fragment_view_reddit_gallery_image_or_gif.xml b/app/src/main/res/layout/fragment_view_reddit_gallery_image_or_gif.xml
index b41c5600..986b86c6 100644
--- a/app/src/main/res/layout/fragment_view_reddit_gallery_image_or_gif.xml
+++ b/app/src/main/res/layout/fragment_view_reddit_gallery_image_or_gif.xml
@@ -50,47 +50,90 @@
<LinearLayout
android:layout_width="match_parent"
- android:layout_height="wrap_content">
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
- <TextView
- android:id="@+id/title_text_view_view_reddit_gallery_image_or_gif_fragment"
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:layout_gravity="center_vertical"
- android:gravity="center_vertical"
- android:paddingTop="8dp"
- android:paddingBottom="8dp"
- android:textColor="#FFFFFF"
- android:textSize="?attr/font_20"
- android:fontFamily="?attr/font_family"
- android:maxLines="1"
- android:ellipsize="end" />
-
- <ImageView
- android:id="@+id/download_image_view_view_reddit_gallery_image_or_gif_fragment"
+ <LinearLayout
+ android:id="@+id/caption_layout_view_reddit_gallery_image_or_gif_fragment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:padding="16dp"
- android:src="@drawable/ic_file_download_toolbar_white_24dp"
- android:background="?attr/selectableItemBackgroundBorderless" />
+ android:gravity="center_vertical"
+ android:orientation="vertical"
+ android:visibility="gone">
- <ImageView
- android:id="@+id/share_image_view_view_reddit_gallery_image_or_gif_fragment"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:padding="16dp"
- android:src="@drawable/ic_share_toolbar_white_24dp"
- android:background="?attr/selectableItemBackgroundBorderless" />
+ <TextView
+ android:id="@+id/caption_text_view_view_reddit_gallery_image_or_gif_fragment"
+ android:layout_width="wrap_content"
+ android:layout_height="0dp"
+ android:layout_weight="1"
+ android:fontFamily="?attr/content_font_family"
+ android:gravity="center_vertical"
+ android:textColor="#FFFFFF"
+ android:textSize="?attr/content_font_default"
+ android:visibility="gone" />
- <ImageView
- android:id="@+id/wallpaper_image_view_view_reddit_gallery_image_or_gif_fragment"
+ <TextView
+ android:id="@+id/caption_url_text_view_view_reddit_gallery_image_or_gif_fragment"
+ android:layout_width="wrap_content"
+ android:layout_height="0dp"
+ android:layout_weight="1"
+ android:autoLink="web"
+ android:ellipsize="end"
+ android:fontFamily="?attr/content_font_family"
+ android:gravity="center_vertical"
+ android:nestedScrollingEnabled="false"
+ android:textColor="#FFFFFF"
+ android:textColorLink="#FFFFFF"
+ android:textSize="?attr/content_font_default"
+ android:textStyle="bold"
+ android:visibility="gone" />
+ </LinearLayout>
+
+ <LinearLayout
+ android:id="@+id/bottom_app_bar_menu_view_reddit_gallery_image_or_gif_fragment"
android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginEnd="16dp"
- android:padding="16dp"
- android:src="@drawable/ic_wallpaper_white_24dp"
- android:background="?attr/selectableItemBackgroundBorderless" />
+ android:layout_height="wrap_content">
+
+ <TextView
+ android:id="@+id/title_text_view_view_reddit_gallery_image_or_gif_fragment"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:layout_gravity="center_vertical"
+ android:gravity="center_vertical"
+ android:paddingTop="8dp"
+ android:paddingBottom="8dp"
+ android:textColor="#FFFFFF"
+ android:textSize="?attr/font_20"
+ android:fontFamily="?attr/font_family"
+ android:maxLines="1"
+ android:ellipsize="end" />
+
+ <ImageView
+ android:id="@+id/download_image_view_view_reddit_gallery_image_or_gif_fragment"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:padding="16dp"
+ android:src="@drawable/ic_file_download_toolbar_white_24dp"
+ android:background="?attr/selectableItemBackgroundBorderless" />
+
+ <ImageView
+ android:id="@+id/share_image_view_view_reddit_gallery_image_or_gif_fragment"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:padding="16dp"
+ android:src="@drawable/ic_share_toolbar_white_24dp"
+ android:background="?attr/selectableItemBackgroundBorderless" />
+
+ <ImageView
+ android:id="@+id/wallpaper_image_view_view_reddit_gallery_image_or_gif_fragment"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginEnd="16dp"
+ android:padding="16dp"
+ android:src="@drawable/ic_wallpaper_white_24dp"
+ android:background="?attr/selectableItemBackgroundBorderless" />
+ </LinearLayout>
</LinearLayout>
diff --git a/app/src/main/res/layout/item_post_detail_gallery.xml b/app/src/main/res/layout/item_post_detail_gallery.xml
index 6a5d2a51..e9044418 100644
--- a/app/src/main/res/layout/item_post_detail_gallery.xml
+++ b/app/src/main/res/layout/item_post_detail_gallery.xml
@@ -268,6 +268,60 @@
android:visibility="gone" />
<androidx.constraintlayout.widget.ConstraintLayout
+ android:id="@+id/caption_constraint_layout_item_post_detail_gallery"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="?attr/colorBackgroundFloating"
+ android:visibility="gone">
+
+ <TextView
+ android:id="@+id/caption_text_view_item_post_detail_gallery"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:ellipsize="marquee"
+ android:fontFamily="?attr/content_font_family"
+ android:gravity="start"
+ android:marqueeRepeatLimit="marquee_forever"
+ android:paddingLeft="8dp"
+ android:paddingRight="8dp"
+ android:singleLine="true"
+ android:scrollHorizontally="true"
+ android:focusable="true"
+ android:focusableInTouchMode="true"
+ android:textColor="?attr/primaryTextColor"
+ android:textSize="?attr/content_font_default"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toStartOf="@id/guideline4"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <TextView
+ android:id="@+id/caption_url_text_view_item_post_detail_gallery"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:ellipsize="end"
+ android:fontFamily="?attr/content_font_family"
+ android:gravity="end"
+ android:maxLines="1"
+ android:paddingEnd="8dp"
+ android:scrollHorizontally="false"
+ android:textColor="?attr/primaryTextColor"
+ android:textSize="?attr/content_font_default"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toEndOf="@id/guideline4"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <androidx.constraintlayout.widget.Guideline
+ android:id="@+id/guideline4"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ app:layout_constraintGuide_percent="0.50" />
+
+ </androidx.constraintlayout.widget.ConstraintLayout>
+
+ <androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/bottom_constraint_layout_item_post_detail_gallery">