aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java/ml/docilealligator/infinityforreddit
diff options
context:
space:
mode:
authorDocile-Alligator <chineseperson5@gmail.com>2021-12-01 10:45:36 +0000
committerGitHub <noreply@github.com>2021-12-01 10:45:36 +0000
commite2964893da08196df2786def9677f68ece6a43d0 (patch)
treeef659bcad7d773d6d40615170d4af9d8efc4b17d /app/src/main/java/ml/docilealligator/infinityforreddit
parent3b365dfe5de4d129e2b3538d3b7c001544415b59 (diff)
parenta663359f9aedad2b8cbbbf31ecbd95137c241846 (diff)
downloadinfinity-for-reddit-e2964893da08196df2786def9677f68ece6a43d0.tar
infinity-for-reddit-e2964893da08196df2786def9677f68ece6a43d0.tar.gz
infinity-for-reddit-e2964893da08196df2786def9677f68ece6a43d0.tar.bz2
infinity-for-reddit-e2964893da08196df2786def9677f68ece6a43d0.tar.lz
infinity-for-reddit-e2964893da08196df2786def9677f68ece6a43d0.tar.xz
infinity-for-reddit-e2964893da08196df2786def9677f68ece6a43d0.tar.zst
infinity-for-reddit-e2964893da08196df2786def9677f68ece6a43d0.zip
Merge pull request #522 from scria1000/gallery-captions-feature
Initial support for gallery captions
Diffstat (limited to 'app/src/main/java/ml/docilealligator/infinityforreddit')
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewRedditGalleryActivity.java49
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostDetailRecyclerViewAdapter.java39
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostRecyclerViewAdapter.java2
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/fragments/ViewRedditGalleryImageOrGifFragment.java105
-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
8 files changed, 228 insertions, 34 deletions
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewRedditGalleryActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewRedditGalleryActivity.java
index 8b477c34..aadf344d 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewRedditGalleryActivity.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewRedditGalleryActivity.java
@@ -1,8 +1,15 @@
package ml.docilealligator.infinityforreddit.activities;
+import static androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY;
+import static androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM;
+import static androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_NO;
+import static androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_YES;
+
import android.content.SharedPreferences;
+import android.content.res.Configuration;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
+import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.text.Html;
@@ -13,6 +20,7 @@ import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
+import androidx.appcompat.app.AppCompatDelegate;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;
@@ -32,6 +40,7 @@ import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.SetAsWallpaperCallback;
import ml.docilealligator.infinityforreddit.WallpaperSetter;
+import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.customviews.ViewPagerBugFixed;
import ml.docilealligator.infinityforreddit.font.ContentFontFamily;
import ml.docilealligator.infinityforreddit.font.ContentFontStyle;
@@ -53,15 +62,15 @@ public class ViewRedditGalleryActivity extends AppCompatActivity implements SetA
HaulerView haulerView;
@BindView(R.id.view_pager_view_reddit_gallery_activity)
ViewPagerBugFixed viewPager;
- private SectionsPagerAdapter sectionsPagerAdapter;
- private ArrayList<Post.Gallery> gallery;
- private String subredditName;
- private boolean useBottomAppBar;
@Inject
@Named("default")
SharedPreferences sharedPreferences;
@Inject
Executor executor;
+ private SectionsPagerAdapter sectionsPagerAdapter;
+ private ArrayList<Post.Gallery> gallery;
+ private String subredditName;
+ private boolean useBottomAppBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -69,7 +78,37 @@ public class ViewRedditGalleryActivity extends AppCompatActivity implements SetA
((Infinity) getApplication()).getAppComponent().inject(this);
- getTheme().applyStyle(R.style.Theme_Normal, true);
+ boolean systemDefault = Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q;
+ int systemThemeType = Integer.parseInt(sharedPreferences.getString(SharedPreferencesUtils.THEME_KEY, "2"));
+ switch (systemThemeType) {
+ case 0:
+ AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_NO);
+ getTheme().applyStyle(R.style.Theme_Normal, true);
+ break;
+ case 1:
+ AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES);
+ if (sharedPreferences.getBoolean(SharedPreferencesUtils.AMOLED_DARK_KEY, false)) {
+ getTheme().applyStyle(R.style.Theme_Normal_AmoledDark, true);
+ } else {
+ getTheme().applyStyle(R.style.Theme_Normal_NormalDark, true);
+ }
+ break;
+ case 2:
+ if (systemDefault) {
+ AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM);
+ } else {
+ AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_AUTO_BATTERY);
+ }
+ if ((getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_NO) {
+ getTheme().applyStyle(R.style.Theme_Normal, true);
+ } else {
+ if (sharedPreferences.getBoolean(SharedPreferencesUtils.AMOLED_DARK_KEY, false)) {
+ getTheme().applyStyle(R.style.Theme_Normal_AmoledDark, true);
+ } else {
+ getTheme().applyStyle(R.style.Theme_Normal_NormalDark, true);
+ }
+ }
+ }
getTheme().applyStyle(FontStyle.valueOf(sharedPreferences
.getString(SharedPreferencesUtils.FONT_SIZE_KEY, FontStyle.Normal.name())).getResId(), true);
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 6aa50c65..97ea961d 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostDetailRecyclerViewAdapter.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostDetailRecyclerViewAdapter.java
@@ -131,7 +131,6 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
private static final int VIEW_TYPE_POST_DETAIL_NO_PREVIEW_LINK = 6;
private static final int VIEW_TYPE_POST_DETAIL_GALLERY = 7;
private static final int VIEW_TYPE_POST_DETAIL_TEXT_TYPE = 8;
-
private AppCompatActivity mActivity;
private ViewPostDetailFragment mFragment;
private Executor mExecutor;
@@ -202,6 +201,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
private int mDownvotedColor;
private int mVoteAndReplyUnavailableVoteButtonColor;
private int mPostIconAndInfoColor;
+ private int mCommentColor;
private Drawable mCommentIcon;
private float mScale;
@@ -380,6 +380,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
mDownvotedColor = customThemeWrapper.getDownvoted();
mVoteAndReplyUnavailableVoteButtonColor = customThemeWrapper.getVoteAndReplyUnavailableButtonColor();
mPostIconAndInfoColor = customThemeWrapper.getPostIconAndInfoColor();
+ mCommentColor = customThemeWrapper.getCommentColor();
mCommentIcon = activity.getDrawable(R.drawable.ic_comment_grey_24dp);
if (mCommentIcon != null) {
@@ -768,6 +769,8 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
.setRatio((float) preview.getPreviewHeight() / preview.getPreviewWidth());
loadImage((PostDetailGalleryViewHolder) holder, preview);
+
+ loadCaptionPreview((PostDetailGalleryViewHolder) holder, preview);
} else {
((PostDetailGalleryViewHolder) holder).mNoPreviewPostTypeImageView.setVisibility(View.VISIBLE);
}
@@ -794,6 +797,29 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
}
}
+ private void loadCaptionPreview(PostDetailBaseViewHolder holder, Post.Preview preview) {
+ if (holder instanceof PostDetailGalleryViewHolder) {
+ 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.setBackgroundColor(mCardViewColor & 0x0D000000); // Make 10% darker than CardViewColor
+ ((PostDetailGalleryViewHolder) holder).mCaptionConstraintLayout.setVisibility(View.VISIBLE);
+ }
+ if (!previewCaptionIsEmpty) {
+ ((PostDetailGalleryViewHolder) holder).mCaption.setTextColor(mCommentColor);
+ ((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));
+ }
+ }
+ }
+
@Nullable
private Post.Preview getSuitablePreview(ArrayList<Post.Preview> previews) {
Post.Preview preview;
@@ -1485,6 +1511,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
}
class PostDetailVideoAutoplayViewHolder extends PostDetailBaseViewHolder implements ToroPlayer {
+ public FetchGfycatOrRedgifsVideoLinks fetchGfycatOrRedgifsVideoLinks;
@BindView(R.id.icon_gif_image_view_item_post_detail_video_autoplay)
AspectRatioGifImageView mIconGifImageView;
@BindView(R.id.subreddit_text_view_item_post_detail_video_autoplay)
@@ -1541,12 +1568,10 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
ImageView mSaveButton;
@BindView(R.id.share_button_item_post_detail_video_autoplay)
ImageView mShareButton;
-
@Nullable
ExoPlayerViewHelper helper;
private Uri mediaUri;
private float volume;
- public FetchGfycatOrRedgifsVideoLinks fetchGfycatOrRedgifsVideoLinks;
public PostDetailVideoAutoplayViewHolder(@NonNull View itemView) {
super(itemView);
@@ -2153,7 +2178,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
intent.putExtra(ViewImageOrGifActivity.EXTRA_POST_TITLE_KEY, mPost.getTitle());
intent.putExtra(ViewImageOrGifActivity.EXTRA_SUBREDDIT_OR_USERNAME_KEY, mPost.getSubredditName());
mActivity.startActivity(intent);
- } else if (mPost.getPostType() == Post.GIF_TYPE){
+ } else if (mPost.getPostType() == Post.GIF_TYPE) {
Intent intent = new Intent(mActivity, ViewImageOrGifActivity.class);
intent.putExtra(ViewImageOrGifActivity.EXTRA_FILE_NAME_KEY, mPost.getSubredditName()
+ "-" + mPost.getId() + ".gif");
@@ -2221,6 +2246,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/adapters/PostRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostRecyclerViewAdapter.java
index a8cf40d2..b7d18ac8 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostRecyclerViewAdapter.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostRecyclerViewAdapter.java
@@ -73,8 +73,10 @@ import ml.docilealligator.infinityforreddit.SaveMemoryCenterInisdeDownsampleStra
import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.SaveThing;
import ml.docilealligator.infinityforreddit.VoteThing;
+import ml.docilealligator.infinityforreddit.activities.BaseActivity;
import ml.docilealligator.infinityforreddit.activities.FilteredPostsActivity;
import ml.docilealligator.infinityforreddit.activities.LinkResolverActivity;
+import ml.docilealligator.infinityforreddit.activities.SearchResultActivity;
import ml.docilealligator.infinityforreddit.activities.ViewImageOrGifActivity;
import ml.docilealligator.infinityforreddit.activities.ViewPostDetailActivity;
import ml.docilealligator.infinityforreddit.activities.ViewRedditGalleryActivity;
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 494d6b44..df3d88ae 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/ViewRedditGalleryImageOrGifFragment.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/ViewRedditGalleryImageOrGifFragment.java
@@ -10,6 +10,8 @@ import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
+import android.text.TextUtils;
+import android.text.util.Linkify;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
@@ -52,6 +54,7 @@ import javax.inject.Inject;
import butterknife.BindView;
import butterknife.ButterKnife;
+import me.saket.bettermovementmethod.BetterLinkMovementMethod;
import ml.docilealligator.infinityforreddit.BuildConfig;
import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.R;
@@ -59,9 +62,12 @@ import ml.docilealligator.infinityforreddit.SetAsWallpaperCallback;
import ml.docilealligator.infinityforreddit.activities.ViewRedditGalleryActivity;
import ml.docilealligator.infinityforreddit.asynctasks.SaveBitmapImageToFile;
import ml.docilealligator.infinityforreddit.asynctasks.SaveGIFToFile;
+import ml.docilealligator.infinityforreddit.bottomsheetfragments.CopyTextBottomSheetFragment;
import ml.docilealligator.infinityforreddit.bottomsheetfragments.SetAsWallpaperBottomSheetFragment;
+import ml.docilealligator.infinityforreddit.bottomsheetfragments.UrlMenuBottomSheetFragment;
import ml.docilealligator.infinityforreddit.post.Post;
import ml.docilealligator.infinityforreddit.services.DownloadMediaService;
+import ml.docilealligator.infinityforreddit.utils.Utils;
public class ViewRedditGalleryImageOrGifFragment extends Fragment {
@@ -79,6 +85,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 +110,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,24 +197,16 @@ 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 {
- activity.getWindow().getDecorView().setSystemUiVisibility(
- View.SYSTEM_UI_FLAG_LAYOUT_STABLE
- | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
- | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
- | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
- | View.SYSTEM_UI_FLAG_FULLSCREEN
- | View.SYSTEM_UI_FLAG_IMMERSIVE);
- isActionBarHidden = true;
- if (activity.isUseBottomAppBar()) {
- bottomAppBar.setVisibility(View.GONE);
- }
+ hideAppBar();
}
});
+ captionLayout.setOnClickListener(view -> hideAppBar());
+
errorLinearLayout.setOnClickListener(view -> {
progressBar.setVisibility(View.VISIBLE);
errorLinearLayout.setVisibility(View.GONE);
@@ -234,9 +241,81 @@ public class ViewRedditGalleryImageOrGifFragment extends Fragment {
});
}
+ String caption = media.caption;
+ String captionUrl = media.captionUrl;
+ boolean captionIsEmpty = TextUtils.isEmpty(caption);
+ boolean captionUrlIsEmpty = TextUtils.isEmpty(captionUrl);
+ if (!captionIsEmpty || !captionUrlIsEmpty) {
+ isUseBottomCaption = true;
+
+ if (!activity.isUseBottomAppBar()) {
+ bottomAppBar.setVisibility(View.VISIBLE);
+ bottomAppBarMenu.setVisibility(View.GONE);
+
+ captionLayout.setPadding(0, captionLayout.getPaddingTop(), 0, (int) Utils.convertDpToPixel(16, activity));
+ }
+
+ captionLayout.setVisibility(View.VISIBLE);
+
+ if (!captionIsEmpty) {
+ captionTextView.setVisibility(View.VISIBLE);
+ captionTextView.setText(caption);
+ captionTextView.setOnClickListener(view -> hideAppBar());
+ captionTextView.setOnLongClickListener(view -> {
+ if (activity != null
+ && !activity.isDestroyed()
+ && !activity.isFinishing()
+ && captionTextView.getSelectionStart() == -1
+ && captionTextView.getSelectionEnd() == -1) {
+ Bundle bundle = new Bundle();
+ bundle.putString(CopyTextBottomSheetFragment.EXTRA_RAW_TEXT, caption);
+ CopyTextBottomSheetFragment copyTextBottomSheetFragment = new CopyTextBottomSheetFragment();
+ copyTextBottomSheetFragment.setArguments(bundle);
+ copyTextBottomSheetFragment.show(activity.getSupportFragmentManager(), copyTextBottomSheetFragment.getTag());
+ }
+ return true;
+ });
+ }
+ if (!captionUrlIsEmpty) {
+ String scheme = Uri.parse(captionUrl).getScheme();
+ String urlWithoutScheme = "";
+ if(!TextUtils.isEmpty(scheme)){
+ urlWithoutScheme = captionUrl.substring(scheme.length() + 3);
+ }
+
+ captionUrlTextView.setText(TextUtils.isEmpty(urlWithoutScheme) ? captionUrl : urlWithoutScheme);
+
+ BetterLinkMovementMethod.linkify(Linkify.WEB_URLS, captionUrlTextView).setOnLinkLongClickListener((textView, url) -> {
+ if (activity != null && !activity.isDestroyed() && !activity.isFinishing()) {
+ 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);
+ }
+ }
+
return rootView;
}
+ private void hideAppBar() {
+ activity.getWindow().getDecorView().setSystemUiVisibility(
+ View.SYSTEM_UI_FLAG_LAYOUT_STABLE
+ | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
+ | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
+ | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
+ | View.SYSTEM_UI_FLAG_FULLSCREEN
+ | View.SYSTEM_UI_FLAG_IMMERSIVE);
+ isActionBarHidden = true;
+ if (activity.isUseBottomAppBar() || isUseBottomCaption) {
+ bottomAppBar.setVisibility(View.GONE);
+ }
+ }
+
private void loadImage() {
imageView.showImage(Uri.parse(media.url));
}
@@ -296,7 +375,7 @@ public class ViewRedditGalleryImageOrGifFragment extends Fragment {
Intent intent = new Intent(activity, DownloadMediaService.class);
intent.putExtra(DownloadMediaService.EXTRA_URL, media.url);
- intent.putExtra(DownloadMediaService.EXTRA_MEDIA_TYPE, media.mediaType == Post.Gallery.TYPE_GIF ? DownloadMediaService.EXTRA_MEDIA_TYPE_GIF: DownloadMediaService.EXTRA_MEDIA_TYPE_IMAGE);
+ intent.putExtra(DownloadMediaService.EXTRA_MEDIA_TYPE, media.mediaType == Post.Gallery.TYPE_GIF ? DownloadMediaService.EXTRA_MEDIA_TYPE_GIF : DownloadMediaService.EXTRA_MEDIA_TYPE_IMAGE);
intent.putExtra(DownloadMediaService.EXTRA_FILE_NAME, media.fileName);
intent.putExtra(DownloadMediaService.EXTRA_SUBREDDIT_NAME, subredditName);
ContextCompat.startForegroundService(activity, intent);
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";
}