diff options
Diffstat (limited to 'app/src')
5 files changed, 644 insertions, 7414 deletions
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/HistoryPostRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/HistoryPostRecyclerViewAdapter.java deleted file mode 100644 index 615dd7d0..00000000 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/HistoryPostRecyclerViewAdapter.java +++ /dev/null @@ -1,6398 +0,0 @@ -package ml.docilealligator.infinityforreddit.adapters; - -import android.content.Intent; -import android.content.SharedPreferences; -import android.content.res.ColorStateList; -import android.content.res.Configuration; -import android.content.res.Resources; -import android.graphics.PorterDuff; -import android.graphics.drawable.Drawable; -import android.net.Uri; -import android.os.Bundle; -import android.os.Handler; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.view.ViewConfiguration; -import android.view.ViewGroup; -import android.widget.FrameLayout; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.ProgressBar; -import android.widget.RelativeLayout; -import android.widget.TextView; -import android.widget.Toast; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.annotation.OptIn; -import androidx.appcompat.content.res.AppCompatResources; -import androidx.constraintlayout.widget.Barrier; -import androidx.constraintlayout.widget.ConstraintLayout; -import androidx.constraintlayout.widget.ConstraintSet; -import androidx.core.content.ContextCompat; -import androidx.media3.common.PlaybackException; -import androidx.media3.common.Player; -import androidx.media3.common.Tracks; -import androidx.media3.common.util.UnstableApi; -import androidx.media3.common.util.Util; -import androidx.media3.ui.AspectRatioFrameLayout; -import androidx.media3.ui.DefaultTimeBar; -import androidx.media3.ui.PlayerView; -import androidx.media3.ui.TimeBar; -import androidx.paging.PagingDataAdapter; -import androidx.recyclerview.widget.DiffUtil; -import androidx.recyclerview.widget.ItemTouchHelper; -import androidx.recyclerview.widget.PagerSnapHelper; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.RequestBuilder; -import com.bumptech.glide.RequestManager; -import com.bumptech.glide.load.DataSource; -import com.bumptech.glide.load.engine.GlideException; -import com.bumptech.glide.request.RequestListener; -import com.bumptech.glide.request.RequestOptions; -import com.bumptech.glide.request.target.Target; -import com.google.android.material.button.MaterialButton; -import com.google.common.collect.ImmutableList; -import com.libRG.CustomTextView; - -import org.greenrobot.eventbus.EventBus; - -import java.util.ArrayList; -import java.util.Locale; -import java.util.concurrent.Executor; - -import javax.inject.Provider; - -import jp.wasabeef.glide.transformations.BlurTransformation; -import jp.wasabeef.glide.transformations.RoundedCornersTransformation; -import ml.docilealligator.infinityforreddit.FetchVideoLinkListener; -import ml.docilealligator.infinityforreddit.thing.FetchRedgifsVideoLinks; -import ml.docilealligator.infinityforreddit.post.FetchStreamableVideo; -import ml.docilealligator.infinityforreddit.R; -import ml.docilealligator.infinityforreddit.SaveMemoryCenterInisdeDownsampleStrategy; -import ml.docilealligator.infinityforreddit.thing.SaveThing; -import ml.docilealligator.infinityforreddit.thing.StreamableVideo; -import ml.docilealligator.infinityforreddit.thing.VoteThing; -import ml.docilealligator.infinityforreddit.account.Account; -import ml.docilealligator.infinityforreddit.activities.BaseActivity; -import ml.docilealligator.infinityforreddit.activities.FilteredPostsActivity; -import ml.docilealligator.infinityforreddit.activities.LinkResolverActivity; -import ml.docilealligator.infinityforreddit.activities.ViewImageOrGifActivity; -import ml.docilealligator.infinityforreddit.activities.ViewPostDetailActivity; -import ml.docilealligator.infinityforreddit.activities.ViewRedditGalleryActivity; -import ml.docilealligator.infinityforreddit.activities.ViewSubredditDetailActivity; -import ml.docilealligator.infinityforreddit.activities.ViewUserDetailActivity; -import ml.docilealligator.infinityforreddit.activities.ViewVideoActivity; -import ml.docilealligator.infinityforreddit.apis.RedgifsAPI; -import ml.docilealligator.infinityforreddit.apis.StreamableAPI; -import ml.docilealligator.infinityforreddit.bottomsheetfragments.ShareLinkBottomSheetFragment; -import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper; -import ml.docilealligator.infinityforreddit.customviews.AspectRatioGifImageView; -import ml.docilealligator.infinityforreddit.customviews.LinearLayoutManagerBugFixed; -import ml.docilealligator.infinityforreddit.databinding.ItemPostCard2GalleryTypeBinding; -import ml.docilealligator.infinityforreddit.databinding.ItemPostCard2TextBinding; -import ml.docilealligator.infinityforreddit.databinding.ItemPostCard2VideoAutoplayBinding; -import ml.docilealligator.infinityforreddit.databinding.ItemPostCard2VideoAutoplayLegacyControllerBinding; -import ml.docilealligator.infinityforreddit.databinding.ItemPostCard2WithPreviewBinding; -import ml.docilealligator.infinityforreddit.databinding.ItemPostCard3GalleryTypeBinding; -import ml.docilealligator.infinityforreddit.databinding.ItemPostCard3TextBinding; -import ml.docilealligator.infinityforreddit.databinding.ItemPostCard3VideoTypeAutoplayBinding; -import ml.docilealligator.infinityforreddit.databinding.ItemPostCard3VideoTypeAutoplayLegacyControllerBinding; -import ml.docilealligator.infinityforreddit.databinding.ItemPostCard3WithPreviewBinding; -import ml.docilealligator.infinityforreddit.databinding.ItemPostCompactBinding; -import ml.docilealligator.infinityforreddit.databinding.ItemPostCompactRightThumbnailBinding; -import ml.docilealligator.infinityforreddit.databinding.ItemPostGalleryBinding; -import ml.docilealligator.infinityforreddit.databinding.ItemPostGalleryGalleryTypeBinding; -import ml.docilealligator.infinityforreddit.databinding.ItemPostGalleryTypeBinding; -import ml.docilealligator.infinityforreddit.databinding.ItemPostTextBinding; -import ml.docilealligator.infinityforreddit.databinding.ItemPostVideoTypeAutoplayBinding; -import ml.docilealligator.infinityforreddit.databinding.ItemPostVideoTypeAutoplayLegacyControllerBinding; -import ml.docilealligator.infinityforreddit.databinding.ItemPostWithPreviewBinding; -import ml.docilealligator.infinityforreddit.events.PostUpdateEventToPostDetailFragment; -import ml.docilealligator.infinityforreddit.fragments.HistoryPostFragment; -import ml.docilealligator.infinityforreddit.post.Post; -import ml.docilealligator.infinityforreddit.post.PostPagingSource; -import ml.docilealligator.infinityforreddit.utils.APIUtils; -import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils; -import ml.docilealligator.infinityforreddit.utils.Utils; -import ml.docilealligator.infinityforreddit.videoautoplay.CacheManager; -import ml.docilealligator.infinityforreddit.videoautoplay.ExoCreator; -import ml.docilealligator.infinityforreddit.videoautoplay.ExoPlayerViewHelper; -import ml.docilealligator.infinityforreddit.videoautoplay.Playable; -import ml.docilealligator.infinityforreddit.videoautoplay.ToroPlayer; -import ml.docilealligator.infinityforreddit.videoautoplay.ToroUtil; -import ml.docilealligator.infinityforreddit.videoautoplay.media.PlaybackInfo; -import ml.docilealligator.infinityforreddit.videoautoplay.widget.Container; -import pl.droidsonroids.gif.GifImageView; -import retrofit2.Call; -import retrofit2.Retrofit; - -public class HistoryPostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerView.ViewHolder> implements CacheManager { - private static final int VIEW_TYPE_POST_CARD_VIDEO_AUTOPLAY_TYPE = 1; - private static final int VIEW_TYPE_POST_CARD_WITH_PREVIEW_TYPE = 2; - private static final int VIEW_TYPE_POST_CARD_GALLERY_TYPE = 3; - private static final int VIEW_TYPE_POST_CARD_TEXT_TYPE = 4; - private static final int VIEW_TYPE_POST_COMPACT = 5; - private static final int VIEW_TYPE_POST_GALLERY = 6; - private static final int VIEW_TYPE_POST_GALLERY_GALLERY_TYPE = 7; - private static final int VIEW_TYPE_POST_CARD_2_VIDEO_AUTOPLAY_TYPE = 8; - private static final int VIEW_TYPE_POST_CARD_2_WITH_PREVIEW_TYPE = 9; - private static final int VIEW_TYPE_POST_CARD_2_GALLERY_TYPE = 10; - private static final int VIEW_TYPE_POST_CARD_2_TEXT_TYPE = 11; - private static final int VIEW_TYPE_POST_CARD_3_VIDEO_AUTOPLAY_TYPE = 12; - private static final int VIEW_TYPE_POST_CARD_3_WITH_PREVIEW_TYPE = 13; - private static final int VIEW_TYPE_POST_CARD_3_GALLERY_TYPE = 14; - private static final int VIEW_TYPE_POST_CARD_3_TEXT_TYPE = 15; - - private static final DiffUtil.ItemCallback<Post> DIFF_CALLBACK = new DiffUtil.ItemCallback<Post>() { - @Override - public boolean areItemsTheSame(@NonNull Post post, @NonNull Post t1) { - return post.getId().equals(t1.getId()); - } - - @Override - public boolean areContentsTheSame(@NonNull Post post, @NonNull Post t1) { - return false; - } - }; - - private BaseActivity mActivity; - private HistoryPostFragment mFragment; - private SharedPreferences mSharedPreferences; - private SharedPreferences mCurrentAccountSharedPreferences; - private Executor mExecutor; - private Retrofit mOauthRetrofit; - private Retrofit mRedgifsRetrofit; - private Provider<StreamableAPI> mStreamableApiProvider; - private String mAccessToken; - private String mAccountName; - private RequestManager mGlide; - private int mMaxResolution; - private SaveMemoryCenterInisdeDownsampleStrategy mSaveMemoryCenterInsideDownsampleStrategy; - private Locale mLocale; - private boolean canStartActivity = true; - private int mPostType; - private int mPostLayout; - private int mDefaultLinkPostLayout; - private int mColorAccent; - private int mCardViewBackgroundColor; - private int mFilledCardViewBackgroundColor; - private int mPrimaryTextColor; - private int mSecondaryTextColor; - private int mPostTitleColor; - private int mPostContentColor; - private int mStickiedPostIconTint; - private int mPostTypeBackgroundColor; - private int mPostTypeTextColor; - private int mSubredditColor; - private int mUsernameColor; - private int mModeratorColor; - private int mSpoilerBackgroundColor; - private int mSpoilerTextColor; - private int mFlairBackgroundColor; - private int mFlairTextColor; - private int mNSFWBackgroundColor; - private int mNSFWTextColor; - private int mArchivedIconTint; - private int mLockedIconTint; - private int mCrosspostIconTint; - private int mMediaIndicatorIconTint; - private int mMediaIndicatorBackgroundColor; - private int mNoPreviewPostTypeBackgroundColor; - private int mNoPreviewPostTypeIconTint; - private int mUpvotedColor; - private int mDownvotedColor; - private int mVoteAndReplyUnavailableVoteButtonColor; - private int mPostIconAndInfoColor; - private int mDividerColor; - private float mScale; - private boolean mDisplaySubredditName; - private boolean mVoteButtonsOnTheRight; - private boolean mNeedBlurNsfw; - private boolean mNeedBlurSpoiler; - private boolean mShowElapsedTime; - private String mTimeFormatPattern; - private boolean mShowDividerInCompactLayout; - private boolean mShowAbsoluteNumberOfVotes; - private boolean mAutoplay = false; - private boolean mAutoplayNsfwVideos; - private boolean mMuteAutoplayingVideos; - private boolean mShowThumbnailOnTheRightInCompactLayout; - private double mStartAutoplayVisibleAreaOffset; - private boolean mMuteNSFWVideo; - private boolean mLongPressToHideToolbarInCompactLayout; - private boolean mCompactLayoutToolbarHiddenByDefault; - private boolean mDataSavingMode = false; - private boolean mDisableImagePreview; - private boolean mOnlyDisablePreviewInVideoAndGifPosts; - private boolean mHidePostType; - private boolean mHidePostFlair; - private boolean mHideSubredditAndUserPrefix; - private boolean mHideTheNumberOfVotes; - private boolean mHideTheNumberOfComments; - private boolean mLegacyAutoplayVideoControllerUI; - private boolean mFixedHeightPreviewInCard; - private boolean mHideTextPostContent; - private boolean mEasierToWatchInFullScreen; - private ExoCreator mExoCreator; - private Callback mCallback; - private boolean canPlayVideo = true; - private RecyclerView.RecycledViewPool mGalleryRecycledViewPool; - - public HistoryPostRecyclerViewAdapter(BaseActivity activity, HistoryPostFragment fragment, Executor executor, Retrofit oauthRetrofit, - Retrofit redgifsRetrofit, Provider<StreamableAPI> streambleApiProvider, - CustomThemeWrapper customThemeWrapper, Locale locale, - @Nullable String accessToken, @NonNull String accountName, int postType, int postLayout, boolean displaySubredditName, - SharedPreferences sharedPreferences, SharedPreferences currentAccountSharedPreferences, - SharedPreferences nsfwAndSpoilerSharedPreferences, - ExoCreator exoCreator, Callback callback) { - super(DIFF_CALLBACK); - if (activity != null) { - mActivity = activity; - mFragment = fragment; - mSharedPreferences = sharedPreferences; - mCurrentAccountSharedPreferences = currentAccountSharedPreferences; - mExecutor = executor; - mOauthRetrofit = oauthRetrofit; - mRedgifsRetrofit = redgifsRetrofit; - mStreamableApiProvider = streambleApiProvider; - mAccessToken = accessToken; - mAccountName = accountName; - mPostType = postType; - mDisplaySubredditName = displaySubredditName; - mNeedBlurNsfw = nsfwAndSpoilerSharedPreferences.getBoolean((accountName.equals(Account.ANONYMOUS_ACCOUNT) ? "" : accountName) + SharedPreferencesUtils.BLUR_NSFW_BASE, true); - mNeedBlurSpoiler = nsfwAndSpoilerSharedPreferences.getBoolean((accountName.equals(Account.ANONYMOUS_ACCOUNT) ? "" : accountName) + SharedPreferencesUtils.BLUR_SPOILER_BASE, false); - mVoteButtonsOnTheRight = sharedPreferences.getBoolean(SharedPreferencesUtils.VOTE_BUTTONS_ON_THE_RIGHT_KEY, false); - mShowElapsedTime = sharedPreferences.getBoolean(SharedPreferencesUtils.SHOW_ELAPSED_TIME_KEY, false); - mTimeFormatPattern = sharedPreferences.getString(SharedPreferencesUtils.TIME_FORMAT_KEY, SharedPreferencesUtils.TIME_FORMAT_DEFAULT_VALUE); - mShowDividerInCompactLayout = sharedPreferences.getBoolean(SharedPreferencesUtils.SHOW_DIVIDER_IN_COMPACT_LAYOUT, true); - mShowAbsoluteNumberOfVotes = sharedPreferences.getBoolean(SharedPreferencesUtils.SHOW_ABSOLUTE_NUMBER_OF_VOTES, true); - String autoplayString = sharedPreferences.getString(SharedPreferencesUtils.VIDEO_AUTOPLAY, SharedPreferencesUtils.VIDEO_AUTOPLAY_VALUE_NEVER); - int networkType = Utils.getConnectedNetwork(activity); - if (autoplayString.equals(SharedPreferencesUtils.VIDEO_AUTOPLAY_VALUE_ALWAYS_ON)) { - mAutoplay = true; - } else if (autoplayString.equals(SharedPreferencesUtils.VIDEO_AUTOPLAY_VALUE_ON_WIFI)) { - mAutoplay = networkType == Utils.NETWORK_TYPE_WIFI; - } - mAutoplayNsfwVideos = sharedPreferences.getBoolean(SharedPreferencesUtils.AUTOPLAY_NSFW_VIDEOS, true); - mMuteAutoplayingVideos = sharedPreferences.getBoolean(SharedPreferencesUtils.MUTE_AUTOPLAYING_VIDEOS, true); - mShowThumbnailOnTheRightInCompactLayout = sharedPreferences.getBoolean( - SharedPreferencesUtils.SHOW_THUMBNAIL_ON_THE_LEFT_IN_COMPACT_LAYOUT, false); - - Resources resources = activity.getResources(); - mStartAutoplayVisibleAreaOffset = resources.getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT ? - sharedPreferences.getInt(SharedPreferencesUtils.START_AUTOPLAY_VISIBLE_AREA_OFFSET_PORTRAIT, 75) / 100.0 : - sharedPreferences.getInt(SharedPreferencesUtils.START_AUTOPLAY_VISIBLE_AREA_OFFSET_LANDSCAPE, 50) / 100.0; - - mMuteNSFWVideo = sharedPreferences.getBoolean(SharedPreferencesUtils.MUTE_NSFW_VIDEO, false); - - mLongPressToHideToolbarInCompactLayout = sharedPreferences.getBoolean(SharedPreferencesUtils.LONG_PRESS_TO_HIDE_TOOLBAR_IN_COMPACT_LAYOUT, false); - mCompactLayoutToolbarHiddenByDefault = sharedPreferences.getBoolean(SharedPreferencesUtils.POST_COMPACT_LAYOUT_TOOLBAR_HIDDEN_BY_DEFAULT, false); - - String dataSavingModeString = sharedPreferences.getString(SharedPreferencesUtils.DATA_SAVING_MODE, SharedPreferencesUtils.DATA_SAVING_MODE_OFF); - if (dataSavingModeString.equals(SharedPreferencesUtils.DATA_SAVING_MODE_ALWAYS)) { - mDataSavingMode = true; - } else if (dataSavingModeString.equals(SharedPreferencesUtils.DATA_SAVING_MODE_ONLY_ON_CELLULAR_DATA)) { - mDataSavingMode = networkType == Utils.NETWORK_TYPE_CELLULAR; - } - mDisableImagePreview = sharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_IMAGE_PREVIEW, false); - mOnlyDisablePreviewInVideoAndGifPosts = sharedPreferences.getBoolean(SharedPreferencesUtils.ONLY_DISABLE_PREVIEW_IN_VIDEO_AND_GIF_POSTS, false); - - mHidePostType = sharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_POST_TYPE, false); - mHidePostFlair = sharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_POST_FLAIR, false); - mHideSubredditAndUserPrefix = sharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_SUBREDDIT_AND_USER_PREFIX, false); - mHideTheNumberOfVotes = sharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_THE_NUMBER_OF_VOTES, false); - mHideTheNumberOfComments = sharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_THE_NUMBER_OF_COMMENTS, false); - mLegacyAutoplayVideoControllerUI = sharedPreferences.getBoolean(SharedPreferencesUtils.LEGACY_AUTOPLAY_VIDEO_CONTROLLER_UI, false); - mFixedHeightPreviewInCard = sharedPreferences.getBoolean(SharedPreferencesUtils.FIXED_HEIGHT_PREVIEW_IN_CARD, false); - mHideTextPostContent = sharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_TEXT_POST_CONTENT, false); - mEasierToWatchInFullScreen = sharedPreferences.getBoolean(SharedPreferencesUtils.EASIER_TO_WATCH_IN_FULL_SCREEN, false); - - mPostLayout = postLayout; - mDefaultLinkPostLayout = Integer.parseInt(sharedPreferences.getString(SharedPreferencesUtils.DEFAULT_LINK_POST_LAYOUT_KEY, "-1")); - - mColorAccent = customThemeWrapper.getColorAccent(); - mCardViewBackgroundColor = customThemeWrapper.getCardViewBackgroundColor(); - mFilledCardViewBackgroundColor = customThemeWrapper.getFilledCardViewBackgroundColor(); - mPrimaryTextColor = customThemeWrapper.getPrimaryTextColor(); - mSecondaryTextColor = customThemeWrapper.getSecondaryTextColor(); - mPostTitleColor = customThemeWrapper.getPostTitleColor(); - mPostContentColor = customThemeWrapper.getPostContentColor(); - mStickiedPostIconTint = customThemeWrapper.getStickiedPostIconTint(); - mPostTypeBackgroundColor = customThemeWrapper.getPostTypeBackgroundColor(); - mPostTypeTextColor = customThemeWrapper.getPostTypeTextColor(); - mSubredditColor = customThemeWrapper.getSubreddit(); - mUsernameColor = customThemeWrapper.getUsername(); - mModeratorColor = customThemeWrapper.getModerator(); - mSpoilerBackgroundColor = customThemeWrapper.getSpoilerBackgroundColor(); - mSpoilerTextColor = customThemeWrapper.getSpoilerTextColor(); - mFlairBackgroundColor = customThemeWrapper.getFlairBackgroundColor(); - mFlairTextColor = customThemeWrapper.getFlairTextColor(); - mNSFWBackgroundColor = customThemeWrapper.getNsfwBackgroundColor(); - mNSFWTextColor = customThemeWrapper.getNsfwTextColor(); - mArchivedIconTint = customThemeWrapper.getArchivedIconTint(); - mLockedIconTint = customThemeWrapper.getLockedIconTint(); - mCrosspostIconTint = customThemeWrapper.getCrosspostIconTint(); - mMediaIndicatorIconTint = customThemeWrapper.getMediaIndicatorIconColor(); - mMediaIndicatorBackgroundColor = customThemeWrapper.getMediaIndicatorBackgroundColor(); - mNoPreviewPostTypeBackgroundColor = customThemeWrapper.getNoPreviewPostTypeBackgroundColor(); - mNoPreviewPostTypeIconTint = customThemeWrapper.getNoPreviewPostTypeIconTint(); - mUpvotedColor = customThemeWrapper.getUpvoted(); - mDownvotedColor = customThemeWrapper.getDownvoted(); - mVoteAndReplyUnavailableVoteButtonColor = customThemeWrapper.getVoteAndReplyUnavailableButtonColor(); - mPostIconAndInfoColor = customThemeWrapper.getPostIconAndInfoColor(); - mDividerColor = customThemeWrapper.getDividerColor(); - - mScale = resources.getDisplayMetrics().density; - mGlide = Glide.with(mActivity); - mMaxResolution = Integer.parseInt(mSharedPreferences.getString(SharedPreferencesUtils.POST_FEED_MAX_RESOLUTION, "5000000")); - mSaveMemoryCenterInsideDownsampleStrategy = new SaveMemoryCenterInisdeDownsampleStrategy(mMaxResolution); - mLocale = locale; - mExoCreator = exoCreator; - mCallback = callback; - mGalleryRecycledViewPool = new RecyclerView.RecycledViewPool(); - } - } - - public void setCanStartActivity(boolean canStartActivity) { - this.canStartActivity = canStartActivity; - } - - @Override - public int getItemViewType(int position) { - if (mPostLayout == SharedPreferencesUtils.POST_LAYOUT_CARD) { - Post post = getItem(position); - if (post != null) { - switch (post.getPostType()) { - case Post.VIDEO_TYPE: - if (mAutoplay) { - if ((!mAutoplayNsfwVideos && post.isNSFW()) || post.isSpoiler()) { - return VIEW_TYPE_POST_CARD_WITH_PREVIEW_TYPE; - } - return VIEW_TYPE_POST_CARD_VIDEO_AUTOPLAY_TYPE; - } - return VIEW_TYPE_POST_CARD_WITH_PREVIEW_TYPE; - case Post.GIF_TYPE: - case Post.IMAGE_TYPE: - return VIEW_TYPE_POST_CARD_WITH_PREVIEW_TYPE; - case Post.GALLERY_TYPE: - return VIEW_TYPE_POST_CARD_GALLERY_TYPE; - case Post.LINK_TYPE: - case Post.NO_PREVIEW_LINK_TYPE: - switch (mDefaultLinkPostLayout) { - case SharedPreferencesUtils.POST_LAYOUT_CARD_2: - return VIEW_TYPE_POST_CARD_2_WITH_PREVIEW_TYPE; - case SharedPreferencesUtils.POST_LAYOUT_GALLERY: - return VIEW_TYPE_POST_GALLERY; - case SharedPreferencesUtils.POST_LAYOUT_COMPACT: - return VIEW_TYPE_POST_COMPACT; - } - return VIEW_TYPE_POST_CARD_WITH_PREVIEW_TYPE; - default: - return VIEW_TYPE_POST_CARD_TEXT_TYPE; - } - } - return VIEW_TYPE_POST_CARD_TEXT_TYPE; - } else if (mPostLayout == SharedPreferencesUtils.POST_LAYOUT_COMPACT) { - Post post = getItem(position); - if (post != null) { - if (post.getPostType() == Post.LINK_TYPE || post.getPostType() == Post.NO_PREVIEW_LINK_TYPE) { - switch (mDefaultLinkPostLayout) { - case SharedPreferencesUtils.POST_LAYOUT_CARD: - return VIEW_TYPE_POST_CARD_WITH_PREVIEW_TYPE; - case SharedPreferencesUtils.POST_LAYOUT_GALLERY: - return VIEW_TYPE_POST_GALLERY; - case SharedPreferencesUtils.POST_LAYOUT_CARD_2: - return VIEW_TYPE_POST_CARD_2_WITH_PREVIEW_TYPE; - } - } - } - return VIEW_TYPE_POST_COMPACT; - } else if (mPostLayout == SharedPreferencesUtils.POST_LAYOUT_GALLERY) { - Post post = getItem(position); - if (post != null) { - if (post.getPostType() == Post.GALLERY_TYPE) { - return VIEW_TYPE_POST_GALLERY_GALLERY_TYPE; - } else { - return VIEW_TYPE_POST_GALLERY; - } - } else { - return VIEW_TYPE_POST_GALLERY; - } - } else if (mPostLayout == SharedPreferencesUtils.POST_LAYOUT_CARD_2) { - Post post = getItem(position); - if (post != null) { - switch (post.getPostType()) { - case Post.VIDEO_TYPE: - if (mAutoplay) { - if ((!mAutoplayNsfwVideos && post.isNSFW()) || post.isSpoiler()) { - return VIEW_TYPE_POST_CARD_2_WITH_PREVIEW_TYPE; - } - return VIEW_TYPE_POST_CARD_2_VIDEO_AUTOPLAY_TYPE; - } - return VIEW_TYPE_POST_CARD_2_WITH_PREVIEW_TYPE; - case Post.GIF_TYPE: - case Post.IMAGE_TYPE: - return VIEW_TYPE_POST_CARD_2_WITH_PREVIEW_TYPE; - case Post.GALLERY_TYPE: - return VIEW_TYPE_POST_CARD_2_GALLERY_TYPE; - case Post.LINK_TYPE: - case Post.NO_PREVIEW_LINK_TYPE: - switch (mDefaultLinkPostLayout) { - case SharedPreferencesUtils.POST_LAYOUT_CARD: - return VIEW_TYPE_POST_CARD_WITH_PREVIEW_TYPE; - case SharedPreferencesUtils.POST_LAYOUT_GALLERY: - return VIEW_TYPE_POST_GALLERY; - case SharedPreferencesUtils.POST_LAYOUT_COMPACT: - return VIEW_TYPE_POST_COMPACT; - } - return VIEW_TYPE_POST_CARD_2_WITH_PREVIEW_TYPE; - default: - return VIEW_TYPE_POST_CARD_2_TEXT_TYPE; - } - } - return VIEW_TYPE_POST_CARD_2_TEXT_TYPE; - } else { - Post post = getItem(position); - if (post != null) { - switch (post.getPostType()) { - case Post.VIDEO_TYPE: - if (mAutoplay) { - if ((!mAutoplayNsfwVideos && post.isNSFW()) || post.isSpoiler()) { - return VIEW_TYPE_POST_CARD_3_WITH_PREVIEW_TYPE; - } - return VIEW_TYPE_POST_CARD_3_VIDEO_AUTOPLAY_TYPE; - } - return VIEW_TYPE_POST_CARD_3_WITH_PREVIEW_TYPE; - case Post.GIF_TYPE: - case Post.IMAGE_TYPE: - return VIEW_TYPE_POST_CARD_3_WITH_PREVIEW_TYPE; - case Post.GALLERY_TYPE: - return VIEW_TYPE_POST_CARD_3_GALLERY_TYPE; - case Post.LINK_TYPE: - case Post.NO_PREVIEW_LINK_TYPE: - switch (mDefaultLinkPostLayout) { - case SharedPreferencesUtils.POST_LAYOUT_CARD: - return VIEW_TYPE_POST_CARD_WITH_PREVIEW_TYPE; - case SharedPreferencesUtils.POST_LAYOUT_CARD_2: - return VIEW_TYPE_POST_CARD_2_WITH_PREVIEW_TYPE; - case SharedPreferencesUtils.POST_LAYOUT_GALLERY: - return VIEW_TYPE_POST_GALLERY; - case SharedPreferencesUtils.POST_LAYOUT_COMPACT: - return VIEW_TYPE_POST_COMPACT; - } - return VIEW_TYPE_POST_CARD_3_WITH_PREVIEW_TYPE; - default: - return VIEW_TYPE_POST_CARD_3_TEXT_TYPE; - } - } - return VIEW_TYPE_POST_CARD_3_TEXT_TYPE; - } - } - - @OptIn(markerClass = UnstableApi.class) - @NonNull - @Override - public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - if (viewType == VIEW_TYPE_POST_CARD_VIDEO_AUTOPLAY_TYPE) { - if (mDataSavingMode) { - return new PostWithPreviewTypeViewHolder(ItemPostWithPreviewBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); - } - if (mLegacyAutoplayVideoControllerUI) { - return new PostVideoAutoplayLegacyControllerViewHolder(ItemPostVideoTypeAutoplayLegacyControllerBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); - } else { - return new PostVideoAutoplayViewHolder(ItemPostVideoTypeAutoplayBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); - } - } else if (viewType == VIEW_TYPE_POST_CARD_WITH_PREVIEW_TYPE) { - return new PostWithPreviewTypeViewHolder(ItemPostWithPreviewBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); - } else if (viewType == VIEW_TYPE_POST_CARD_GALLERY_TYPE) { - return new PostGalleryTypeViewHolder(ItemPostGalleryTypeBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); - } else if (viewType == VIEW_TYPE_POST_CARD_TEXT_TYPE) { - return new PostTextTypeViewHolder(ItemPostTextBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); - } else if (viewType == VIEW_TYPE_POST_COMPACT) { - if (mShowThumbnailOnTheRightInCompactLayout) { - return new PostCompactRightThumbnailViewHolder(ItemPostCompactRightThumbnailBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); - } else { - return new PostCompactLeftThumbnailViewHolder(ItemPostCompactBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); - } - } else if (viewType == VIEW_TYPE_POST_GALLERY) { - return new PostGalleryViewHolder(ItemPostGalleryBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); - } else if (viewType == VIEW_TYPE_POST_GALLERY_GALLERY_TYPE) { - return new PostGalleryGalleryTypeViewHolder(ItemPostGalleryGalleryTypeBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); - } else if (viewType == VIEW_TYPE_POST_CARD_2_VIDEO_AUTOPLAY_TYPE) { - if (mDataSavingMode) { - return new PostCard2WithPreviewViewHolder(ItemPostCard2WithPreviewBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); - } - - if (mLegacyAutoplayVideoControllerUI) { - return new PostCard2VideoAutoplayLegacyControllerViewHolder(ItemPostCard2VideoAutoplayLegacyControllerBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); - } else { - return new PostCard2VideoAutoplayViewHolder(ItemPostCard2VideoAutoplayBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); - } - } else if (viewType == VIEW_TYPE_POST_CARD_2_WITH_PREVIEW_TYPE) { - return new PostCard2WithPreviewViewHolder(ItemPostCard2WithPreviewBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); - } else if (viewType == VIEW_TYPE_POST_CARD_2_GALLERY_TYPE) { - return new PostCard2GalleryTypeViewHolder(ItemPostCard2GalleryTypeBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); - } else if (viewType == VIEW_TYPE_POST_CARD_2_TEXT_TYPE) { - return new PostCard2TextTypeViewHolder(ItemPostCard2TextBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); - } else if (viewType == VIEW_TYPE_POST_CARD_3_VIDEO_AUTOPLAY_TYPE) { - if (mDataSavingMode) { - return new PostMaterial3CardWithPreviewViewHolder(ItemPostCard3WithPreviewBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); - } - if (mLegacyAutoplayVideoControllerUI) { - return new PostMaterial3CardVideoAutoplayLegacyControllerViewHolder(ItemPostCard3VideoTypeAutoplayLegacyControllerBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); - } else { - return new PostMaterial3CardVideoAutoplayViewHolder(ItemPostCard3VideoTypeAutoplayBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); - } - } else if (viewType == VIEW_TYPE_POST_CARD_3_WITH_PREVIEW_TYPE) { - return new PostMaterial3CardWithPreviewViewHolder(ItemPostCard3WithPreviewBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); - } else if (viewType == VIEW_TYPE_POST_CARD_3_GALLERY_TYPE) { - return new PostMaterial3CardGalleryTypeViewHolder(ItemPostCard3GalleryTypeBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); - } else { - //VIEW_TYPE_POST_CARD_3_TEXT_TYPE - return new PostMaterial3CardTextTypeViewHolder(ItemPostCard3TextBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); - } - } - - @OptIn(markerClass = UnstableApi.class) - @Override - public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, int position) { - if (holder instanceof PostBaseViewHolder) { - Post post = getItem(position); - if (post != null) { - ((PostBaseViewHolder) holder).post = post; - String authorPrefixed = "u/" + post.getAuthor(); - - if (mHideSubredditAndUserPrefix) { - ((PostBaseViewHolder) holder).subredditTextView.setText(post.getSubredditName()); - ((PostBaseViewHolder) holder).userTextView.setText(post.getAuthor()); - } else { - ((PostBaseViewHolder) holder).subredditTextView.setText("r/" + post.getSubredditName()); - ((PostBaseViewHolder) holder).userTextView.setText(authorPrefixed); - } - - ((PostBaseViewHolder) holder).userTextView.setTextColor( - post.isModerator() ? mModeratorColor : mUsernameColor); - - if (mDisplaySubredditName) { - if (authorPrefixed.equals(post.getSubredditNamePrefixed())) { - if (post.getAuthorIconUrl() == null) { - mFragment.loadIcon(post.getAuthor(), false, (subredditOrUserName, iconUrl) -> { - if (mActivity != null && getItemCount() > 0 && post.getAuthor().equals(subredditOrUserName)) { - if (iconUrl == null || iconUrl.equals("")) { - mGlide.load(R.drawable.subreddit_default_icon) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) - .into(((PostBaseViewHolder) holder).iconGifImageView); - } else { - mGlide.load(iconUrl) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) - .error(mGlide.load(R.drawable.subreddit_default_icon) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))) - .into(((PostBaseViewHolder) holder).iconGifImageView); - } - - if (holder.getBindingAdapterPosition() >= 0) { - post.setAuthorIconUrl(iconUrl); - } - } - }); - } else if (!post.getAuthorIconUrl().equals("")) { - mGlide.load(post.getAuthorIconUrl()) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) - .error(mGlide.load(R.drawable.subreddit_default_icon) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))) - .into(((PostBaseViewHolder) holder).iconGifImageView); - } else { - mGlide.load(R.drawable.subreddit_default_icon) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) - .into(((PostBaseViewHolder) holder).iconGifImageView); - } - } else { - if (post.getSubredditIconUrl() == null) { - mFragment.loadIcon(post.getSubredditName(), true, (subredditOrUserName, iconUrl) -> { - if (mActivity != null && getItemCount() > 0 && post.getSubredditName().equals(subredditOrUserName)) { - if (iconUrl == null || iconUrl.equals("")) { - mGlide.load(R.drawable.subreddit_default_icon) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) - .into(((PostBaseViewHolder) holder).iconGifImageView); - } else { - mGlide.load(iconUrl) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) - .error(mGlide.load(R.drawable.subreddit_default_icon) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))) - .into(((PostBaseViewHolder) holder).iconGifImageView); - } - - if (holder.getBindingAdapterPosition() >= 0) { - post.setSubredditIconUrl(iconUrl); - } - } - }); - } else if (!post.getSubredditIconUrl().equals("")) { - mGlide.load(post.getSubredditIconUrl()) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) - .error(mGlide.load(R.drawable.subreddit_default_icon) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))) - .into(((PostBaseViewHolder) holder).iconGifImageView); - } else { - mGlide.load(R.drawable.subreddit_default_icon) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) - .into(((PostBaseViewHolder) holder).iconGifImageView); - } - } - } else { - if (post.getAuthorIconUrl() == null) { - String authorName = post.isAuthorDeleted() ? post.getSubredditName() : post.getAuthor(); - mFragment.loadIcon(authorName, post.isAuthorDeleted(), (subredditOrUserName, iconUrl) -> { - if (mActivity != null && getItemCount() > 0) { - if (iconUrl == null || iconUrl.equals("") && authorName.equals(subredditOrUserName)) { - mGlide.load(R.drawable.subreddit_default_icon) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) - .into(((PostBaseViewHolder) holder).iconGifImageView); - } else { - mGlide.load(iconUrl) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) - .error(mGlide.load(R.drawable.subreddit_default_icon) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))) - .into(((PostBaseViewHolder) holder).iconGifImageView); - } - - if (holder.getBindingAdapterPosition() >= 0) { - post.setAuthorIconUrl(iconUrl); - } - } - }); - } else if (!post.getAuthorIconUrl().equals("")) { - mGlide.load(post.getAuthorIconUrl()) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) - .error(mGlide.load(R.drawable.subreddit_default_icon) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))) - .into(((PostBaseViewHolder) holder).iconGifImageView); - } else { - mGlide.load(R.drawable.subreddit_default_icon) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) - .into(((PostBaseViewHolder) holder).iconGifImageView); - } - } - - if (mShowElapsedTime) { - ((PostBaseViewHolder) holder).postTimeTextView.setText( - Utils.getElapsedTime(mActivity, post.getPostTimeMillis())); - } else { - ((PostBaseViewHolder) holder).postTimeTextView.setText(Utils.getFormattedTime(mLocale, post.getPostTimeMillis(), mTimeFormatPattern)); - } - - ((PostBaseViewHolder) holder).titleTextView.setText(post.getTitle()); - if (!mHideTheNumberOfVotes) { - ((PostBaseViewHolder) holder).scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType())); - } else { - ((PostBaseViewHolder) holder).scoreTextView.setText(mActivity.getString(R.string.vote)); - } - - if (post.isLocked()) { - ((PostBaseViewHolder) holder).lockedImageView.setVisibility(View.VISIBLE); - } - - if (post.isNSFW()) { - ((PostBaseViewHolder) holder).nsfwTextView.setVisibility(View.VISIBLE); - } - - if (post.isSpoiler()) { - ((PostBaseViewHolder) holder).spoilerTextView.setVisibility(View.VISIBLE); - } - - if (post.getFlair() != null && !post.getFlair().equals("")) { - if (mHidePostFlair) { - ((PostBaseViewHolder) holder).flairTextView.setVisibility(View.GONE); - } else { - ((PostBaseViewHolder) holder).flairTextView.setVisibility(View.VISIBLE); - Utils.setHTMLWithImageToTextView(((PostBaseViewHolder) holder).flairTextView, post.getFlair(), false); - } - } - - switch (post.getVoteType()) { - case 1: - //Upvoted - ((PostBaseViewHolder) holder).upvoteButton.setIconResource(R.drawable.ic_upvote_filled_24dp); - ((PostBaseViewHolder) holder).upvoteButton.setIconTint(ColorStateList.valueOf(mUpvotedColor)); - ((PostBaseViewHolder) holder).scoreTextView.setTextColor(mUpvotedColor); - break; - case -1: - //Downvoted - ((PostBaseViewHolder) holder).downvoteButton.setIconResource(R.drawable.ic_downvote_filled_24dp); - ((PostBaseViewHolder) holder).downvoteButton.setIconTint(ColorStateList.valueOf(mDownvotedColor)); - ((PostBaseViewHolder) holder).scoreTextView.setTextColor(mDownvotedColor); - break; - } - - if (mPostType == PostPagingSource.TYPE_SUBREDDIT && !mDisplaySubredditName && post.isStickied()) { - ((PostBaseViewHolder) holder).stickiedPostImageView.setVisibility(View.VISIBLE); - mGlide.load(R.drawable.ic_thumbtack_24dp).into(((PostBaseViewHolder) holder).stickiedPostImageView); - } - - if (post.isArchived()) { - ((PostBaseViewHolder) holder).archivedImageView.setVisibility(View.VISIBLE); - - ((PostBaseViewHolder) holder).upvoteButton.setIconTint(ColorStateList.valueOf(mVoteAndReplyUnavailableVoteButtonColor)); - ((PostBaseViewHolder) holder).scoreTextView.setTextColor(mVoteAndReplyUnavailableVoteButtonColor); - ((PostBaseViewHolder) holder).downvoteButton.setIconTint(ColorStateList.valueOf(mVoteAndReplyUnavailableVoteButtonColor)); - } - - if (post.isCrosspost()) { - ((PostBaseViewHolder) holder).crosspostImageView.setVisibility(View.VISIBLE); - } - - if (!mHideTheNumberOfComments) { - ((PostBaseViewHolder) holder).commentsCountButton.setVisibility(View.VISIBLE); - ((PostBaseViewHolder) holder).commentsCountButton.setText(Integer.toString(post.getNComments())); - } else { - ((PostBaseViewHolder) holder).commentsCountButton.setVisibility(View.GONE); - } - - if (post.isSaved()) { - ((PostBaseViewHolder) holder).saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp); - } else { - ((PostBaseViewHolder) holder).saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp); - } - - if (mHidePostType) { - ((PostBaseViewHolder) holder).typeTextView.setVisibility(View.GONE); - } else { - ((PostBaseViewHolder) holder).typeTextView.setVisibility(View.VISIBLE); - } - - if (holder instanceof PostBaseVideoAutoplayViewHolder) { - ((PostBaseVideoAutoplayViewHolder) holder).previewImageView.setVisibility(View.VISIBLE); - Post.Preview preview = getSuitablePreview(post.getPreviews()); - if (!mFixedHeightPreviewInCard && preview != null) { - ((PostBaseVideoAutoplayViewHolder) holder).aspectRatioFrameLayout.setAspectRatio((float) preview.getPreviewWidth() / preview.getPreviewHeight()); - mGlide.load(preview.getPreviewUrl()).centerInside().downsample(mSaveMemoryCenterInsideDownsampleStrategy).into(((PostBaseVideoAutoplayViewHolder) holder).previewImageView); - } else { - ((PostBaseVideoAutoplayViewHolder) holder).aspectRatioFrameLayout.setAspectRatio(1); - } - if (!((PostBaseVideoAutoplayViewHolder) holder).isManuallyPaused) { - if (mFragment.getMasterMutingOption() == null) { - ((PostBaseVideoAutoplayViewHolder) holder).setVolume(mMuteAutoplayingVideos || (post.isNSFW() && mMuteNSFWVideo) ? 0f : 1f); - } else { - ((PostBaseVideoAutoplayViewHolder) holder).setVolume(mFragment.getMasterMutingOption() ? 0f : 1f); - } - } - - if (post.isRedgifs() && !post.isLoadRedgifsOrStreamableVideoSuccess()) { - ((PostBaseVideoAutoplayViewHolder) holder).fetchRedgifsOrStreamableVideoCall = - mRedgifsRetrofit.create(RedgifsAPI.class).getRedgifsData(APIUtils.getRedgifsOAuthHeader(mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.REDGIFS_ACCESS_TOKEN, "")), post.getRedgifsId(), APIUtils.USER_AGENT); - FetchRedgifsVideoLinks.fetchRedgifsVideoLinksInRecyclerViewAdapter(mExecutor, new Handler(), - ((PostBaseVideoAutoplayViewHolder) holder).fetchRedgifsOrStreamableVideoCall, - new FetchVideoLinkListener() { - @Override - public void onFetchRedgifsVideoLinkSuccess(String webm, String mp4) { - post.setVideoDownloadUrl(mp4); - post.setVideoUrl(mp4); - post.setLoadRedgifsOrStreamableVideoSuccess(true); - if (position == holder.getBindingAdapterPosition()) { - ((PostBaseVideoAutoplayViewHolder) holder).bindVideoUri(Uri.parse(post.getVideoUrl())); - } - } - - @Override - public void failed(@Nullable Integer messageRes) { - if (position == holder.getBindingAdapterPosition()) { - ((PostBaseVideoAutoplayViewHolder) holder).loadFallbackDirectVideo(); - } - } - }); - } else if(post.isStreamable() && !post.isLoadRedgifsOrStreamableVideoSuccess()) { - ((PostBaseVideoAutoplayViewHolder) holder).fetchRedgifsOrStreamableVideoCall = - mStreamableApiProvider.get().getStreamableData(post.getStreamableShortCode()); - FetchStreamableVideo.fetchStreamableVideoInRecyclerViewAdapter(mExecutor, new Handler(), - ((PostBaseVideoAutoplayViewHolder) holder).fetchRedgifsOrStreamableVideoCall, - new FetchVideoLinkListener() { - @Override - public void onFetchStreamableVideoLinkSuccess(StreamableVideo streamableVideo) { - StreamableVideo.Media media = streamableVideo.mp4 == null ? streamableVideo.mp4Mobile : streamableVideo.mp4; - post.setVideoDownloadUrl(media.url); - post.setVideoUrl(media.url); - post.setLoadRedgifsOrStreamableVideoSuccess(true); - if (position == holder.getBindingAdapterPosition()) { - ((PostBaseVideoAutoplayViewHolder) holder).bindVideoUri(Uri.parse(post.getVideoUrl())); - } - } - - @Override - public void failed(@Nullable Integer messageRes) { - if (position == holder.getBindingAdapterPosition()) { - ((PostBaseVideoAutoplayViewHolder) holder).loadFallbackDirectVideo(); - } - } - }); - } else { - ((PostBaseVideoAutoplayViewHolder) holder).bindVideoUri(Uri.parse(post.getVideoUrl())); - } - } else if (holder instanceof PostWithPreviewTypeViewHolder) { - if (post.getPostType() == Post.VIDEO_TYPE) { - ((PostWithPreviewTypeViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostWithPreview.setVisibility(View.VISIBLE); - ((PostWithPreviewTypeViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostWithPreview.setImageDrawable(ContextCompat.getDrawable(mActivity, R.drawable.ic_play_circle_36dp)); - ((PostWithPreviewTypeViewHolder) holder).typeTextView.setText(mActivity.getString(R.string.video)); - } else if (post.getPostType() == Post.GIF_TYPE) { - if (!mAutoplay) { - ((PostWithPreviewTypeViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostWithPreview.setVisibility(View.VISIBLE); - ((PostWithPreviewTypeViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostWithPreview.setImageDrawable(ContextCompat.getDrawable(mActivity, R.drawable.ic_play_circle_36dp)); - } - ((PostWithPreviewTypeViewHolder) holder).typeTextView.setText(mActivity.getString(R.string.gif)); - } else if (post.getPostType() == Post.IMAGE_TYPE) { - ((PostWithPreviewTypeViewHolder) holder).typeTextView.setText(mActivity.getString(R.string.image)); - } else if (post.getPostType() == Post.LINK_TYPE || post.getPostType() == Post.NO_PREVIEW_LINK_TYPE) { - ((PostWithPreviewTypeViewHolder) holder).typeTextView.setText(mActivity.getString(R.string.link)); - ((PostWithPreviewTypeViewHolder) holder).binding.linkTextViewItemPostWithPreview.setVisibility(View.VISIBLE); - String domain = Uri.parse(post.getUrl()).getHost(); - ((PostWithPreviewTypeViewHolder) holder).binding.linkTextViewItemPostWithPreview.setText(domain); - if (post.getPostType() == Post.NO_PREVIEW_LINK_TYPE) { - ((PostWithPreviewTypeViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostWithPreview.setVisibility(View.VISIBLE); - ((PostWithPreviewTypeViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostWithPreview.setImageResource(R.drawable.ic_link_day_night_24dp); - } - } - - if (mDataSavingMode && mDisableImagePreview) { - ((PostWithPreviewTypeViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostWithPreview.setVisibility(View.VISIBLE); - if (post.getPostType() == Post.VIDEO_TYPE) { - ((PostWithPreviewTypeViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostWithPreview.setImageResource(R.drawable.ic_video_day_night_24dp); - ((PostWithPreviewTypeViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostWithPreview.setVisibility(View.GONE); - } else if (post.getPostType() == Post.IMAGE_TYPE || post.getPostType() == Post.GIF_TYPE) { - ((PostWithPreviewTypeViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostWithPreview.setImageResource(R.drawable.ic_image_day_night_24dp); - ((PostWithPreviewTypeViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostWithPreview.setVisibility(View.GONE); - } else if (post.getPostType() == Post.LINK_TYPE) { - ((PostWithPreviewTypeViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostWithPreview.setImageResource(R.drawable.ic_link_day_night_24dp); - } - } else if (mDataSavingMode && mOnlyDisablePreviewInVideoAndGifPosts && (post.getPostType() == Post.VIDEO_TYPE || post.getPostType() == Post.GIF_TYPE)) { - ((PostWithPreviewTypeViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostWithPreview.setVisibility(View.VISIBLE); - ((PostWithPreviewTypeViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostWithPreview.setImageResource(R.drawable.ic_video_day_night_24dp); - ((PostWithPreviewTypeViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostWithPreview.setVisibility(View.GONE); - } else { - if (post.getPostType() == Post.GIF_TYPE && ((post.isNSFW() && mNeedBlurNsfw && !(mAutoplay && mAutoplayNsfwVideos)) || (post.isSpoiler() && mNeedBlurSpoiler))) { - ((PostWithPreviewTypeViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostWithPreview.setVisibility(View.VISIBLE); - ((PostWithPreviewTypeViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostWithPreview.setImageResource(R.drawable.ic_image_day_night_24dp); - ((PostWithPreviewTypeViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostWithPreview.setVisibility(View.GONE); - } else { - Post.Preview preview = getSuitablePreview(post.getPreviews()); - ((PostWithPreviewTypeViewHolder) holder).preview = preview; - if (preview != null) { - ((PostWithPreviewTypeViewHolder) holder).binding.imageViewItemPostWithPreview.setVisibility(View.VISIBLE); - ((PostWithPreviewTypeViewHolder) holder).binding.imageWrapperRelativeLayoutItemPostWithPreview.setVisibility(View.VISIBLE); - if (mFixedHeightPreviewInCard || (preview.getPreviewWidth() <= 0 || preview.getPreviewHeight() <= 0)) { - int height = (int) (400 * mScale); - ((PostWithPreviewTypeViewHolder) holder).binding.imageViewItemPostWithPreview.setScaleType(ImageView.ScaleType.CENTER_CROP); - ((PostWithPreviewTypeViewHolder) holder).binding.imageViewItemPostWithPreview.getLayoutParams().height = height; - } else { - ((PostWithPreviewTypeViewHolder) holder).binding.imageViewItemPostWithPreview - .setRatio((float) preview.getPreviewHeight() / preview.getPreviewWidth()); - } - ((PostWithPreviewTypeViewHolder) holder).binding.imageViewItemPostWithPreview.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { - @Override - public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { - ((PostWithPreviewTypeViewHolder) holder).binding.imageViewItemPostWithPreview.removeOnLayoutChangeListener(this); - loadImage(holder); - } - }); - } else { - ((PostWithPreviewTypeViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostWithPreview.setVisibility(View.VISIBLE); - if (post.getPostType() == Post.VIDEO_TYPE) { - ((PostWithPreviewTypeViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostWithPreview.setImageResource(R.drawable.ic_video_day_night_24dp); - ((PostWithPreviewTypeViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostWithPreview.setVisibility(View.GONE); - } else if (post.getPostType() == Post.IMAGE_TYPE || post.getPostType() == Post.GIF_TYPE) { - ((PostWithPreviewTypeViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostWithPreview.setImageResource(R.drawable.ic_image_day_night_24dp); - ((PostWithPreviewTypeViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostWithPreview.setVisibility(View.GONE); - } else if (post.getPostType() == Post.LINK_TYPE) { - ((PostWithPreviewTypeViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostWithPreview.setImageResource(R.drawable.ic_link_day_night_24dp); - } else if (post.getPostType() == Post.GALLERY_TYPE) { - ((PostWithPreviewTypeViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostWithPreview.setImageResource(R.drawable.ic_gallery_day_night_24dp); - } - } - } - } - } else if (holder instanceof PostBaseGalleryTypeViewHolder) { - if (mDataSavingMode && mDisableImagePreview) { - ((PostBaseGalleryTypeViewHolder) holder).noPreviewImageView.setVisibility(View.VISIBLE); - ((PostBaseGalleryTypeViewHolder) holder).noPreviewImageView.setImageResource(R.drawable.ic_gallery_day_night_24dp); - } else { - ((PostBaseGalleryTypeViewHolder) holder).frameLayout.setVisibility(View.VISIBLE); - ((PostBaseGalleryTypeViewHolder) holder).imageIndexTextView.setText(mActivity.getString(R.string.image_index_in_gallery, 1, post.getGallery().size())); - Post.Preview preview = getSuitablePreview(post.getPreviews()); - if (preview != null) { - if (mFixedHeightPreviewInCard || (preview.getPreviewWidth() <= 0 || preview.getPreviewHeight() <= 0)) { - ((PostBaseGalleryTypeViewHolder) holder).adapter.setRatio(-1); - } else { - ((PostBaseGalleryTypeViewHolder) holder).adapter.setRatio((float) preview.getPreviewHeight() / preview.getPreviewWidth()); - } - } else { - ((PostBaseGalleryTypeViewHolder) holder).adapter.setRatio(-1); - } - ((PostBaseGalleryTypeViewHolder) holder).adapter.setGalleryImages(post.getGallery()); - ((PostBaseGalleryTypeViewHolder) holder).adapter.setBlurImage( - (post.isNSFW() && mNeedBlurNsfw) || (post.isSpoiler() && mNeedBlurSpoiler)); - } - } else if (holder instanceof PostTextTypeViewHolder) { - if (!mHideTextPostContent && !post.isSpoiler() && post.getSelfTextPlainTrimmed() != null && !post.getSelfTextPlainTrimmed().equals("")) { - ((PostTextTypeViewHolder) holder).binding.contentTextViewItemPostTextType.setVisibility(View.VISIBLE); - ((PostTextTypeViewHolder) holder).binding.contentTextViewItemPostTextType.setText(post.getSelfTextPlainTrimmed()); - } - } else if (holder instanceof PostCard2BaseVideoAutoplayViewHolder) { - ((PostCard2BaseVideoAutoplayViewHolder) holder).previewImageView.setVisibility(View.VISIBLE); - Post.Preview preview = getSuitablePreview(post.getPreviews()); - if (!mFixedHeightPreviewInCard && preview != null) { - ((PostCard2BaseVideoAutoplayViewHolder) holder).aspectRatioFrameLayout.setAspectRatio((float) preview.getPreviewWidth() / preview.getPreviewHeight()); - mGlide.load(preview.getPreviewUrl()).centerInside().downsample(mSaveMemoryCenterInsideDownsampleStrategy).into(((PostCard2BaseVideoAutoplayViewHolder) holder).previewImageView); - } else { - ((PostCard2BaseVideoAutoplayViewHolder) holder).aspectRatioFrameLayout.setAspectRatio(1); - } - if (!((PostCard2BaseVideoAutoplayViewHolder) holder).isManuallyPaused) { - if (mFragment.getMasterMutingOption() == null) { - ((PostCard2BaseVideoAutoplayViewHolder) holder).setVolume(mMuteAutoplayingVideos || (post.isNSFW() && mMuteNSFWVideo) ? 0f : 1f); - } else { - ((PostCard2BaseVideoAutoplayViewHolder) holder).setVolume(mFragment.getMasterMutingOption() ? 0f : 1f); - } - } - - if (post.isRedgifs() && !post.isLoadRedgifsOrStreamableVideoSuccess()) { - ((PostCard2BaseVideoAutoplayViewHolder) holder).fetchRedgifsOrStreamableVideoCall = - mRedgifsRetrofit.create(RedgifsAPI.class).getRedgifsData( - APIUtils.getRedgifsOAuthHeader( - mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.REDGIFS_ACCESS_TOKEN, "")), - post.getRedgifsId(), APIUtils.USER_AGENT); - FetchRedgifsVideoLinks.fetchRedgifsVideoLinksInRecyclerViewAdapter(mExecutor, new Handler(), - ((PostCard2BaseVideoAutoplayViewHolder) holder).fetchRedgifsOrStreamableVideoCall, - new FetchVideoLinkListener() { - @Override - public void onFetchRedgifsVideoLinkSuccess(String webm, String mp4) { - post.setVideoDownloadUrl(mp4); - post.setVideoUrl(mp4); - post.setLoadRedgifsOrStreamableVideoSuccess(true); - if (position == holder.getBindingAdapterPosition()) { - ((PostCard2BaseVideoAutoplayViewHolder) holder).bindVideoUri(Uri.parse(post.getVideoUrl())); - } - } - - @Override - public void failed(@Nullable Integer messageRes) { - if (position == holder.getBindingAdapterPosition()) { - ((PostCard2BaseVideoAutoplayViewHolder) holder).loadFallbackDirectVideo(); - } - } - }); - } else if(post.isStreamable() && !post.isLoadRedgifsOrStreamableVideoSuccess()) { - ((PostCard2BaseVideoAutoplayViewHolder) holder).fetchRedgifsOrStreamableVideoCall = - mStreamableApiProvider.get().getStreamableData(post.getStreamableShortCode()); - FetchStreamableVideo.fetchStreamableVideoInRecyclerViewAdapter(mExecutor, new Handler(), - ((PostCard2BaseVideoAutoplayViewHolder) holder).fetchRedgifsOrStreamableVideoCall, - new FetchVideoLinkListener() { - @Override - public void onFetchStreamableVideoLinkSuccess(StreamableVideo streamableVideo) { - StreamableVideo.Media media = streamableVideo.mp4 == null ? streamableVideo.mp4Mobile : streamableVideo.mp4; - post.setVideoDownloadUrl(media.url); - post.setVideoUrl(media.url); - post.setLoadRedgifsOrStreamableVideoSuccess(true); - if (position == holder.getBindingAdapterPosition()) { - ((PostCard2BaseVideoAutoplayViewHolder) holder).bindVideoUri(Uri.parse(post.getVideoUrl())); - } - } - - @Override - public void failed(@Nullable Integer messageRes) { - if (position == holder.getBindingAdapterPosition()) { - ((PostCard2BaseVideoAutoplayViewHolder) holder).loadFallbackDirectVideo(); - } - } - }); - } else { - ((PostCard2BaseVideoAutoplayViewHolder) holder).bindVideoUri(Uri.parse(post.getVideoUrl())); - } - } else if (holder instanceof PostCard2WithPreviewViewHolder) { - if (post.getPostType() == Post.VIDEO_TYPE) { - ((PostCard2WithPreviewViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostCard2WithPreview.setVisibility(View.VISIBLE); - ((PostCard2WithPreviewViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostCard2WithPreview.setImageDrawable(ContextCompat.getDrawable(mActivity, R.drawable.ic_play_circle_36dp)); - ((PostCard2WithPreviewViewHolder) holder).typeTextView.setText(mActivity.getString(R.string.video)); - } else if (post.getPostType() == Post.GIF_TYPE) { - if (!mAutoplay) { - ((PostCard2WithPreviewViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostCard2WithPreview.setVisibility(View.VISIBLE); - ((PostCard2WithPreviewViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostCard2WithPreview.setImageDrawable(ContextCompat.getDrawable(mActivity, R.drawable.ic_play_circle_36dp)); - } - ((PostCard2WithPreviewViewHolder) holder).typeTextView.setText(mActivity.getString(R.string.gif)); - } else if (post.getPostType() == Post.IMAGE_TYPE) { - ((PostCard2WithPreviewViewHolder) holder).typeTextView.setText(mActivity.getString(R.string.image)); - } else if (post.getPostType() == Post.LINK_TYPE || post.getPostType() == Post.NO_PREVIEW_LINK_TYPE) { - ((PostCard2WithPreviewViewHolder) holder).typeTextView.setText(mActivity.getString(R.string.link)); - ((PostCard2WithPreviewViewHolder) holder).binding.linkTextViewItemPostCard2WithPreview.setVisibility(View.VISIBLE); - String domain = Uri.parse(post.getUrl()).getHost(); - ((PostCard2WithPreviewViewHolder) holder).binding.linkTextViewItemPostCard2WithPreview.setText(domain); - if (post.getPostType() == Post.NO_PREVIEW_LINK_TYPE) { - ((PostCard2WithPreviewViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostCard2WithPreview.setVisibility(View.VISIBLE); - ((PostCard2WithPreviewViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostCard2WithPreview.setImageResource(R.drawable.ic_link_day_night_24dp); - } - } - - if (mDataSavingMode && mDisableImagePreview) { - ((PostCard2WithPreviewViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostCard2WithPreview.setVisibility(View.VISIBLE); - if (post.getPostType() == Post.VIDEO_TYPE) { - ((PostCard2WithPreviewViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostCard2WithPreview.setImageResource(R.drawable.ic_video_day_night_24dp); - ((PostCard2WithPreviewViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostCard2WithPreview.setVisibility(View.GONE); - } else if (post.getPostType() == Post.IMAGE_TYPE || post.getPostType() == Post.GIF_TYPE) { - ((PostCard2WithPreviewViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostCard2WithPreview.setImageResource(R.drawable.ic_image_day_night_24dp); - ((PostCard2WithPreviewViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostCard2WithPreview.setVisibility(View.GONE); - } else if (post.getPostType() == Post.LINK_TYPE) { - ((PostCard2WithPreviewViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostCard2WithPreview.setImageResource(R.drawable.ic_link_day_night_24dp); - } - } else if (mDataSavingMode && mOnlyDisablePreviewInVideoAndGifPosts && (post.getPostType() == Post.VIDEO_TYPE || post.getPostType() == Post.GIF_TYPE)) { - ((PostCard2WithPreviewViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostCard2WithPreview.setVisibility(View.VISIBLE); - ((PostCard2WithPreviewViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostCard2WithPreview.setImageResource(R.drawable.ic_video_day_night_24dp); - ((PostCard2WithPreviewViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostCard2WithPreview.setVisibility(View.GONE); - } else { - if (post.getPostType() == Post.GIF_TYPE && ((post.isNSFW() && mNeedBlurNsfw && !(mAutoplay && mAutoplayNsfwVideos)) || (post.isSpoiler() && mNeedBlurSpoiler))) { - ((PostCard2WithPreviewViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostCard2WithPreview.setVisibility(View.VISIBLE); - ((PostCard2WithPreviewViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostCard2WithPreview.setImageResource(R.drawable.ic_image_day_night_24dp); - ((PostCard2WithPreviewViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostCard2WithPreview.setVisibility(View.GONE); - } else { - Post.Preview preview = getSuitablePreview(post.getPreviews()); - ((PostCard2WithPreviewViewHolder) holder).preview = preview; - if (preview != null) { - ((PostCard2WithPreviewViewHolder) holder).binding.imageViewItemPostCard2WithPreview.setVisibility(View.VISIBLE); - if (mFixedHeightPreviewInCard || (preview.getPreviewWidth() <= 0 || preview.getPreviewHeight() <= 0)) { - int height = (int) (400 * mScale); - ((PostCard2WithPreviewViewHolder) holder).binding.imageViewItemPostCard2WithPreview.setScaleType(ImageView.ScaleType.CENTER_CROP); - ((PostCard2WithPreviewViewHolder) holder).binding.imageViewItemPostCard2WithPreview.getLayoutParams().height = height; - } else { - ((PostCard2WithPreviewViewHolder) holder).binding.imageViewItemPostCard2WithPreview - .setRatio((float) preview.getPreviewHeight() / preview.getPreviewWidth()); - } - ((PostCard2WithPreviewViewHolder) holder).binding.imageViewItemPostCard2WithPreview.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { - @Override - public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { - ((PostCard2WithPreviewViewHolder) holder).binding.imageViewItemPostCard2WithPreview.removeOnLayoutChangeListener(this); - loadImage(holder); - } - }); - } else { - ((PostCard2WithPreviewViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostCard2WithPreview.setVisibility(View.VISIBLE); - if (post.getPostType() == Post.VIDEO_TYPE) { - ((PostCard2WithPreviewViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostCard2WithPreview.setImageResource(R.drawable.ic_video_day_night_24dp); - ((PostCard2WithPreviewViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostCard2WithPreview.setVisibility(View.GONE); - } else if (post.getPostType() == Post.IMAGE_TYPE || post.getPostType() == Post.GIF_TYPE) { - ((PostCard2WithPreviewViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostCard2WithPreview.setImageResource(R.drawable.ic_image_day_night_24dp); - ((PostCard2WithPreviewViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostCard2WithPreview.setVisibility(View.GONE); - } else if (post.getPostType() == Post.LINK_TYPE) { - ((PostCard2WithPreviewViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostCard2WithPreview.setImageResource(R.drawable.ic_link_day_night_24dp); - } - } - } - } - } else if (holder instanceof PostCard2TextTypeViewHolder) { - if (!mHideTextPostContent && !post.isSpoiler() && post.getSelfTextPlainTrimmed() != null && !post.getSelfTextPlainTrimmed().equals("")) { - ((PostCard2TextTypeViewHolder) holder).binding.contentTextViewItemPostCard2Text.setVisibility(View.VISIBLE); - ((PostCard2TextTypeViewHolder) holder).binding.contentTextViewItemPostCard2Text.setText(post.getSelfTextPlainTrimmed()); - } - } - mCallback.currentlyBindItem(holder.getBindingAdapterPosition()); - } - } else if (holder instanceof PostCompactBaseViewHolder) { - Post post = getItem(position); - if (post != null) { - ((PostCompactBaseViewHolder) holder).post = post; - final String subredditNamePrefixed = post.getSubredditNamePrefixed(); - String subredditName = subredditNamePrefixed.substring(2); - String authorPrefixed = "u/" + post.getAuthor(); - final String title = post.getTitle(); - int voteType = post.getVoteType(); - boolean nsfw = post.isNSFW(); - boolean spoiler = post.isSpoiler(); - String flair = post.getFlair(); - boolean isArchived = post.isArchived(); - - if (mDisplaySubredditName) { - if (authorPrefixed.equals(subredditNamePrefixed)) { - if (post.getAuthorIconUrl() == null) { - mFragment.loadIcon(post.getAuthor(), false, (subredditOrUserName, iconUrl) -> { - if (mActivity != null && getItemCount() > 0 && post.getAuthor().equals(subredditOrUserName)) { - if (iconUrl == null || iconUrl.equals("")) { - mGlide.load(R.drawable.subreddit_default_icon) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) - .into(((PostCompactBaseViewHolder) holder).iconGifImageView); - } else { - mGlide.load(iconUrl) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) - .error(mGlide.load(R.drawable.subreddit_default_icon) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))) - .into(((PostCompactBaseViewHolder) holder).iconGifImageView); - } - - if (holder.getBindingAdapterPosition() >= 0) { - post.setAuthorIconUrl(iconUrl); - } - } - }); - } else if (!post.getAuthorIconUrl().equals("")) { - mGlide.load(post.getAuthorIconUrl()) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) - .error(mGlide.load(R.drawable.subreddit_default_icon) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))) - .into(((PostCompactBaseViewHolder) holder).iconGifImageView); - } else { - mGlide.load(R.drawable.subreddit_default_icon) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) - .into(((PostCompactBaseViewHolder) holder).iconGifImageView); - } - } else { - if (post.getSubredditIconUrl() == null) { - mFragment.loadIcon(subredditName, true, (subredditOrUserName, iconUrl) -> { - if (mActivity != null && getItemCount() > 0 && subredditName.equals(subredditOrUserName)) { - if (iconUrl == null || iconUrl.equals("")) { - mGlide.load(R.drawable.subreddit_default_icon) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) - .into(((PostCompactBaseViewHolder) holder).iconGifImageView); - } else { - mGlide.load(iconUrl) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) - .error(mGlide.load(R.drawable.subreddit_default_icon) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))) - .into(((PostCompactBaseViewHolder) holder).iconGifImageView); - } - - if (holder.getBindingAdapterPosition() >= 0) { - post.setSubredditIconUrl(iconUrl); - } - } - }); - } else if (!post.getSubredditIconUrl().equals("")) { - mGlide.load(post.getSubredditIconUrl()) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) - .error(mGlide.load(R.drawable.subreddit_default_icon) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))) - .into(((PostCompactBaseViewHolder) holder).iconGifImageView); - } else { - mGlide.load(R.drawable.subreddit_default_icon) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) - .into(((PostCompactBaseViewHolder) holder).iconGifImageView); - } - } - - ((PostCompactBaseViewHolder) holder).nameTextView.setTextColor(mSubredditColor); - if (mHideSubredditAndUserPrefix) { - ((PostCompactBaseViewHolder) holder).nameTextView.setText(post.getSubredditName()); - } else { - ((PostCompactBaseViewHolder) holder).nameTextView.setText("r/" + post.getSubredditName()); - } - } else { - if (post.getAuthorIconUrl() == null) { - String authorName = post.isAuthorDeleted() ? post.getSubredditName() : post.getAuthor(); - mFragment.loadIcon(authorName, post.isAuthorDeleted(), (subredditOrUserName, iconUrl) -> { - if (mActivity != null && getItemCount() > 0 && authorName.equals(subredditOrUserName)) { - if (iconUrl == null || iconUrl.equals("")) { - mGlide.load(R.drawable.subreddit_default_icon) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) - .into(((PostCompactBaseViewHolder) holder).iconGifImageView); - } else { - mGlide.load(iconUrl) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) - .error(mGlide.load(R.drawable.subreddit_default_icon) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))) - .into(((PostCompactBaseViewHolder) holder).iconGifImageView); - } - - if (holder.getBindingAdapterPosition() >= 0) { - post.setAuthorIconUrl(iconUrl); - } - } - }); - } else if (!post.getAuthorIconUrl().equals("")) { - mGlide.load(post.getAuthorIconUrl()) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) - .error(mGlide.load(R.drawable.subreddit_default_icon) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))) - .into(((PostCompactBaseViewHolder) holder).iconGifImageView); - } else { - mGlide.load(R.drawable.subreddit_default_icon) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) - .into(((PostCompactBaseViewHolder) holder).iconGifImageView); - } - - ((PostCompactBaseViewHolder) holder).nameTextView.setTextColor( - post.isModerator() ? mModeratorColor : mUsernameColor); - if (mHideSubredditAndUserPrefix) { - ((PostCompactBaseViewHolder) holder).nameTextView.setText(post.getAuthor()); - } else { - ((PostCompactBaseViewHolder) holder).nameTextView.setText(authorPrefixed); - } - } - - if (mShowElapsedTime) { - ((PostCompactBaseViewHolder) holder).postTimeTextView.setText( - Utils.getElapsedTime(mActivity, post.getPostTimeMillis())); - } else { - ((PostCompactBaseViewHolder) holder).postTimeTextView.setText(Utils.getFormattedTime(mLocale, post.getPostTimeMillis(), mTimeFormatPattern)); - } - - if (mCompactLayoutToolbarHiddenByDefault) { - ViewGroup.LayoutParams params = ((PostCompactBaseViewHolder) holder).bottomConstraintLayout.getLayoutParams(); - params.height = 0; - ((PostCompactBaseViewHolder) holder).bottomConstraintLayout.setLayoutParams(params); - } else { - ViewGroup.LayoutParams params = ((PostCompactBaseViewHolder) holder).bottomConstraintLayout.getLayoutParams(); - params.height = LinearLayout.LayoutParams.WRAP_CONTENT; - ((PostCompactBaseViewHolder) holder).bottomConstraintLayout.setLayoutParams(params); - } - - if (mShowDividerInCompactLayout) { - ((PostCompactBaseViewHolder) holder).divider.setVisibility(View.VISIBLE); - } else { - ((PostCompactBaseViewHolder) holder).divider.setVisibility(View.GONE); - } - - ((PostCompactBaseViewHolder) holder).titleTextView.setText(title); - if (!mHideTheNumberOfVotes) { - ((PostCompactBaseViewHolder) holder).scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType())); - } else { - ((PostCompactBaseViewHolder) holder).scoreTextView.setText(mActivity.getString(R.string.vote)); - } - - if (post.isLocked()) { - ((PostCompactBaseViewHolder) holder).lockedImageView.setVisibility(View.VISIBLE); - } - - if (nsfw) { - ((PostCompactBaseViewHolder) holder).nsfwTextView.setVisibility(View.VISIBLE); - } - - if (spoiler) { - ((PostCompactBaseViewHolder) holder).spoilerTextView.setVisibility(View.VISIBLE); - } - - if (flair != null && !flair.equals("")) { - if (mHidePostFlair) { - ((PostCompactBaseViewHolder) holder).flairTextView.setVisibility(View.GONE); - } else { - ((PostCompactBaseViewHolder) holder).flairTextView.setVisibility(View.VISIBLE); - Utils.setHTMLWithImageToTextView(((PostCompactBaseViewHolder) holder).flairTextView, flair, false); - } - } - - switch (post.getVoteType()) { - case 1: - //Upvoted - ((PostCompactBaseViewHolder) holder).upvoteButton.setIconResource(R.drawable.ic_upvote_filled_24dp); - ((PostCompactBaseViewHolder) holder).upvoteButton.setIconTint(ColorStateList.valueOf(mUpvotedColor)); - ((PostCompactBaseViewHolder) holder).scoreTextView.setTextColor(mUpvotedColor); - break; - case -1: - //Downvoted - ((PostCompactBaseViewHolder) holder).downvoteButton.setIconResource(R.drawable.ic_downvote_filled_24dp); - ((PostCompactBaseViewHolder) holder).downvoteButton.setIconTint(ColorStateList.valueOf(mDownvotedColor)); - ((PostCompactBaseViewHolder) holder).scoreTextView.setTextColor(mDownvotedColor); - break; - } - - if (post.getPostType() != Post.TEXT_TYPE && post.getPostType() != Post.NO_PREVIEW_LINK_TYPE && !(mDataSavingMode && mDisableImagePreview)) { - ((PostCompactBaseViewHolder) holder).relativeLayout.setVisibility(View.VISIBLE); - if (post.getPostType() == Post.GALLERY_TYPE && post.getPreviews() != null && post.getPreviews().isEmpty()) { - ((PostCompactBaseViewHolder) holder).noPreviewPostImageFrameLayout.setVisibility(View.VISIBLE); - ((PostCompactBaseViewHolder) holder).noPreviewPostImageView.setImageResource(R.drawable.ic_gallery_day_night_24dp); - } - if (post.getPreviews() != null && !post.getPreviews().isEmpty()) { - ((PostCompactBaseViewHolder) holder).imageView.setVisibility(View.VISIBLE); - ((PostCompactBaseViewHolder) holder).progressBar.setVisibility(View.VISIBLE); - loadImage(holder); - } - } - - if (mPostType == PostPagingSource.TYPE_SUBREDDIT && !mDisplaySubredditName && post.isStickied()) { - ((PostCompactBaseViewHolder) holder).stickiedPostImageView.setVisibility(View.VISIBLE); - mGlide.load(R.drawable.ic_thumbtack_24dp).into(((PostCompactBaseViewHolder) holder).stickiedPostImageView); - } - - if (isArchived) { - ((PostCompactBaseViewHolder) holder).archivedImageView.setVisibility(View.VISIBLE); - - ((PostCompactBaseViewHolder) holder).upvoteButton.setIconTint(ColorStateList.valueOf(mVoteAndReplyUnavailableVoteButtonColor)); - ((PostCompactBaseViewHolder) holder).scoreTextView.setTextColor(mVoteAndReplyUnavailableVoteButtonColor); - ((PostCompactBaseViewHolder) holder).downvoteButton.setIconTint(ColorStateList.valueOf(mVoteAndReplyUnavailableVoteButtonColor)); - } - - if (post.isCrosspost()) { - ((PostCompactBaseViewHolder) holder).crosspostImageView.setVisibility(View.VISIBLE); - } - - if (mHidePostType) { - ((PostCompactBaseViewHolder) holder).typeTextView.setVisibility(View.GONE); - } else { - ((PostCompactBaseViewHolder) holder).typeTextView.setVisibility(View.VISIBLE); - } - - switch (post.getPostType()) { - case Post.IMAGE_TYPE: - ((PostCompactBaseViewHolder) holder).typeTextView.setText(R.string.image); - if (mDataSavingMode && mDisableImagePreview) { - ((PostCompactBaseViewHolder) holder).noPreviewPostImageFrameLayout.setVisibility(View.VISIBLE); - ((PostCompactBaseViewHolder) holder).noPreviewPostImageView.setImageResource(R.drawable.ic_image_day_night_24dp); - } - break; - case Post.LINK_TYPE: - ((PostCompactBaseViewHolder) holder).typeTextView.setText(R.string.link); - if (mDataSavingMode && mDisableImagePreview) { - ((PostCompactBaseViewHolder) holder).noPreviewPostImageFrameLayout.setVisibility(View.VISIBLE); - ((PostCompactBaseViewHolder) holder).noPreviewPostImageView.setImageResource(R.drawable.ic_link_day_night_24dp); - } - - ((PostCompactBaseViewHolder) holder).linkTextView.setVisibility(View.VISIBLE); - String domain = Uri.parse(post.getUrl()).getHost(); - ((PostCompactBaseViewHolder) holder).linkTextView.setText(domain); - break; - case Post.GIF_TYPE: - ((PostCompactBaseViewHolder) holder).typeTextView.setText(R.string.gif); - if (mDataSavingMode && (mDisableImagePreview || mOnlyDisablePreviewInVideoAndGifPosts)) { - ((PostCompactBaseViewHolder) holder).noPreviewPostImageFrameLayout.setVisibility(View.VISIBLE); - ((PostCompactBaseViewHolder) holder).noPreviewPostImageView.setImageResource(R.drawable.ic_image_day_night_24dp); - } else { - ((PostCompactBaseViewHolder) holder).playButtonImageView.setVisibility(View.VISIBLE); - ((PostCompactBaseViewHolder) holder).playButtonImageView.setImageDrawable(ContextCompat.getDrawable(mActivity, R.drawable.ic_play_circle_24dp)); - } - break; - case Post.VIDEO_TYPE: - ((PostCompactBaseViewHolder) holder).typeTextView.setText(R.string.video); - if (mDataSavingMode && (mDisableImagePreview || mOnlyDisablePreviewInVideoAndGifPosts)) { - ((PostCompactBaseViewHolder) holder).noPreviewPostImageFrameLayout.setVisibility(View.VISIBLE); - ((PostCompactBaseViewHolder) holder).noPreviewPostImageView.setImageResource(R.drawable.ic_video_day_night_24dp); - } else { - ((PostCompactBaseViewHolder) holder).playButtonImageView.setVisibility(View.VISIBLE); - ((PostCompactBaseViewHolder) holder).playButtonImageView.setImageDrawable(ContextCompat.getDrawable(mActivity, R.drawable.ic_play_circle_24dp)); - } - break; - case Post.NO_PREVIEW_LINK_TYPE: - ((PostCompactBaseViewHolder) holder).typeTextView.setText(R.string.link); - - String noPreviewLinkUrl = post.getUrl(); - ((PostCompactBaseViewHolder) holder).linkTextView.setVisibility(View.VISIBLE); - String noPreviewLinkDomain = Uri.parse(noPreviewLinkUrl).getHost(); - ((PostCompactBaseViewHolder) holder).linkTextView.setText(noPreviewLinkDomain); - ((PostCompactBaseViewHolder) holder).noPreviewPostImageFrameLayout.setVisibility(View.VISIBLE); - ((PostCompactBaseViewHolder) holder).noPreviewPostImageView.setImageResource(R.drawable.ic_link_day_night_24dp); - break; - case Post.GALLERY_TYPE: - ((PostCompactBaseViewHolder) holder).typeTextView.setText(R.string.gallery); - if (mDataSavingMode && mDisableImagePreview) { - ((PostCompactBaseViewHolder) holder).noPreviewPostImageFrameLayout.setVisibility(View.VISIBLE); - ((PostCompactBaseViewHolder) holder).noPreviewPostImageView.setImageResource(R.drawable.ic_gallery_day_night_24dp); - } else { - ((PostCompactBaseViewHolder) holder).playButtonImageView.setVisibility(View.VISIBLE); - ((PostCompactBaseViewHolder) holder).playButtonImageView.setImageDrawable(ContextCompat.getDrawable(mActivity, R.drawable.ic_gallery_day_night_24dp)); - } - break; - case Post.TEXT_TYPE: - ((PostCompactBaseViewHolder) holder).typeTextView.setText(R.string.text); - break; - } - - if (!mHideTheNumberOfComments) { - ((PostCompactBaseViewHolder) holder).commentsCountButton.setVisibility(View.VISIBLE); - ((PostCompactBaseViewHolder) holder).commentsCountButton.setText(Integer.toString(post.getNComments())); - } else { - ((PostCompactBaseViewHolder) holder).commentsCountButton.setVisibility(View.GONE); - } - - if (post.isSaved()) { - ((PostCompactBaseViewHolder) holder).saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp); - } else { - ((PostCompactBaseViewHolder) holder).saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp); - } - - mCallback.currentlyBindItem(holder.getBindingAdapterPosition()); - } - } else if (holder instanceof PostGalleryViewHolder) { - Post post = getItem(position); - if (post != null) { - ((PostGalleryViewHolder) holder).post = post; - - switch (post.getPostType()) { - case Post.IMAGE_TYPE: { - Post.Preview preview = getSuitablePreview(post.getPreviews()); - ((PostGalleryViewHolder) holder).preview = preview; - if (preview != null) { - ((PostGalleryViewHolder) holder).binding.imageViewItemPostGallery.setVisibility(View.VISIBLE); - - if (mFixedHeightPreviewInCard || (preview.getPreviewWidth() <= 0 || preview.getPreviewHeight() <= 0)) { - int height = (int) (400 * mScale); - ((PostGalleryViewHolder) holder).binding.imageViewItemPostGallery.setScaleType(ImageView.ScaleType.CENTER_CROP); - ((PostGalleryViewHolder) holder).binding.imageViewItemPostGallery.getLayoutParams().height = height; - } else { - ((PostGalleryViewHolder) holder).binding.imageViewItemPostGallery - .setRatio((float) preview.getPreviewHeight() / preview.getPreviewWidth()); - } - ((PostGalleryViewHolder) holder).binding.imageViewItemPostGallery.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { - @Override - public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { - ((PostGalleryViewHolder) holder).binding.imageViewItemPostGallery.removeOnLayoutChangeListener(this); - loadImage(holder); - } - }); - } else { - ((PostGalleryViewHolder) holder).binding.imageViewNoPreviewItemPostGallery.setVisibility(View.VISIBLE); - if (post.getPostType() == Post.VIDEO_TYPE) { - ((PostGalleryViewHolder) holder).binding.imageViewNoPreviewItemPostGallery.setImageResource(R.drawable.ic_video_day_night_24dp); - ((PostGalleryViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostGallery.setVisibility(View.GONE); - } else if (post.getPostType() == Post.IMAGE_TYPE || post.getPostType() == Post.GIF_TYPE) { - ((PostGalleryViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostGallery.setVisibility(View.GONE); - } else if (post.getPostType() == Post.LINK_TYPE) { - ((PostGalleryViewHolder) holder).binding.imageViewNoPreviewItemPostGallery.setImageResource(R.drawable.ic_link_day_night_24dp); - } - ((PostGalleryViewHolder) holder).binding.imageViewNoPreviewItemPostGallery.setImageResource(R.drawable.ic_image_day_night_24dp); - } - break; - } - case Post.GIF_TYPE: { - if (post.getPostType() == Post.GIF_TYPE && ((post.isNSFW() && mNeedBlurNsfw && !(mAutoplay && mAutoplayNsfwVideos)) || (post.isSpoiler() && mNeedBlurSpoiler))) { - ((PostGalleryViewHolder) holder).binding.imageViewNoPreviewItemPostGallery.setVisibility(View.VISIBLE); - ((PostGalleryViewHolder) holder).binding.imageViewNoPreviewItemPostGallery.setImageResource(R.drawable.ic_image_day_night_24dp); - } else { - Post.Preview preview = getSuitablePreview(post.getPreviews()); - ((PostGalleryViewHolder) holder).preview = preview; - if (preview != null) { - ((PostGalleryViewHolder) holder).binding.imageViewItemPostGallery.setVisibility(View.VISIBLE); - ((PostGalleryViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostGallery.setVisibility(View.VISIBLE); - ((PostGalleryViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostGallery.setImageDrawable(ContextCompat.getDrawable(mActivity, R.drawable.ic_play_circle_36dp)); - - if (mFixedHeightPreviewInCard || (preview.getPreviewWidth() <= 0 || preview.getPreviewHeight() <= 0)) { - int height = (int) (400 * mScale); - ((PostGalleryViewHolder) holder).binding.imageViewItemPostGallery.setScaleType(ImageView.ScaleType.CENTER_CROP); - ((PostGalleryViewHolder) holder).binding.imageViewItemPostGallery.getLayoutParams().height = height; - } else { - ((PostGalleryViewHolder) holder).binding.imageViewItemPostGallery - .setRatio((float) preview.getPreviewHeight() / preview.getPreviewWidth()); - } - ((PostGalleryViewHolder) holder).binding.imageViewItemPostGallery.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { - @Override - public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { - ((PostGalleryViewHolder) holder).binding.imageViewItemPostGallery.removeOnLayoutChangeListener(this); - loadImage(holder); - } - }); - } else { - ((PostGalleryViewHolder) holder).binding.imageViewNoPreviewItemPostGallery.setVisibility(View.VISIBLE); - ((PostGalleryViewHolder) holder).binding.imageViewNoPreviewItemPostGallery.setImageResource(R.drawable.ic_image_day_night_24dp); - } - } - break; - } - case Post.VIDEO_TYPE: { - Post.Preview preview = getSuitablePreview(post.getPreviews()); - ((PostGalleryViewHolder) holder).preview = preview; - if (preview != null) { - ((PostGalleryViewHolder) holder).binding.imageViewItemPostGallery.setVisibility(View.VISIBLE); - ((PostGalleryViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostGallery.setVisibility(View.VISIBLE); - ((PostGalleryViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostGallery.setImageDrawable(ContextCompat.getDrawable(mActivity, R.drawable.ic_play_circle_36dp)); - - if (mFixedHeightPreviewInCard || (preview.getPreviewWidth() <= 0 || preview.getPreviewHeight() <= 0)) { - int height = (int) (400 * mScale); - ((PostGalleryViewHolder) holder).binding.imageViewItemPostGallery.setScaleType(ImageView.ScaleType.CENTER_CROP); - ((PostGalleryViewHolder) holder).binding.imageViewItemPostGallery.getLayoutParams().height = height; - } else { - ((PostGalleryViewHolder) holder).binding.imageViewItemPostGallery - .setRatio((float) preview.getPreviewHeight() / preview.getPreviewWidth()); - } - ((PostGalleryViewHolder) holder).binding.imageViewItemPostGallery.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { - @Override - public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { - ((PostGalleryViewHolder) holder).binding.imageViewItemPostGallery.removeOnLayoutChangeListener(this); - loadImage(holder); - } - }); - } else { - ((PostGalleryViewHolder) holder).binding.imageViewNoPreviewItemPostGallery.setVisibility(View.VISIBLE); - ((PostGalleryViewHolder) holder).binding.imageViewNoPreviewItemPostGallery.setImageResource(R.drawable.ic_video_day_night_24dp); - } - break; - } - case Post.LINK_TYPE: { - Post.Preview preview = getSuitablePreview(post.getPreviews()); - ((PostGalleryViewHolder) holder).preview = preview; - if (preview != null) { - ((PostGalleryViewHolder) holder).binding.imageViewItemPostGallery.setVisibility(View.VISIBLE); - ((PostGalleryViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostGallery.setVisibility(View.VISIBLE); - ((PostGalleryViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostGallery.setImageDrawable(ContextCompat.getDrawable(mActivity, R.drawable.ic_link_post_type_indicator_day_night_24dp)); - - if (mFixedHeightPreviewInCard || (preview.getPreviewWidth() <= 0 || preview.getPreviewHeight() <= 0)) { - int height = (int) (400 * mScale); - ((PostGalleryViewHolder) holder).binding.imageViewItemPostGallery.setScaleType(ImageView.ScaleType.CENTER_CROP); - ((PostGalleryViewHolder) holder).binding.imageViewItemPostGallery.getLayoutParams().height = height; - } else { - ((PostGalleryViewHolder) holder).binding.imageViewItemPostGallery - .setRatio((float) preview.getPreviewHeight() / preview.getPreviewWidth()); - } - ((PostGalleryViewHolder) holder).binding.imageViewItemPostGallery.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { - @Override - public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { - ((PostGalleryViewHolder) holder).binding.imageViewItemPostGallery.removeOnLayoutChangeListener(this); - loadImage(holder); - } - }); - } else { - ((PostGalleryViewHolder) holder).binding.imageViewNoPreviewItemPostGallery.setVisibility(View.VISIBLE); - ((PostGalleryViewHolder) holder).binding.imageViewNoPreviewItemPostGallery.setImageResource(R.drawable.ic_link_day_night_24dp); - } - break; - } - case Post.NO_PREVIEW_LINK_TYPE: { - ((PostGalleryViewHolder) holder).binding.imageViewNoPreviewItemPostGallery.setVisibility(View.VISIBLE); - ((PostGalleryViewHolder) holder).binding.imageViewNoPreviewItemPostGallery.setImageResource(R.drawable.ic_link_day_night_24dp); - break; - } - case Post.TEXT_TYPE: { - ((PostGalleryViewHolder) holder).binding.titleTextViewItemPostGallery.setVisibility(View.VISIBLE); - ((PostGalleryViewHolder) holder).binding.titleTextViewItemPostGallery.setText(post.getTitle()); - break; - } - } - } - } else if (holder instanceof PostGalleryBaseGalleryTypeViewHolder) { - Post post = getItem(position); - if (post != null) { - ((PostGalleryBaseGalleryTypeViewHolder) holder).post = post; - ((PostGalleryBaseGalleryTypeViewHolder) holder).currentPosition = position; - - if (mDataSavingMode && mDisableImagePreview) { - ((PostGalleryBaseGalleryTypeViewHolder) holder).noPreviewImageView.setVisibility(View.VISIBLE); - ((PostGalleryBaseGalleryTypeViewHolder) holder).noPreviewImageView.setImageResource(R.drawable.ic_gallery_day_night_24dp); - } else { - Post.Preview preview = getSuitablePreview(post.getPreviews()); - ((PostGalleryBaseGalleryTypeViewHolder) holder).preview = preview; - - ((PostGalleryBaseGalleryTypeViewHolder) holder).frameLayout.setVisibility(View.VISIBLE); - ((PostGalleryBaseGalleryTypeViewHolder) holder).imageIndexTextView.setText(mActivity.getString(R.string.image_index_in_gallery, 1, post.getGallery().size())); - if (preview != null) { - if (mFixedHeightPreviewInCard || (preview.getPreviewWidth() <= 0 || preview.getPreviewHeight() <= 0)) { - ((PostGalleryBaseGalleryTypeViewHolder) holder).adapter.setRatio(-1); - } else { - ((PostGalleryBaseGalleryTypeViewHolder) holder).adapter.setRatio((float) preview.getPreviewHeight() / preview.getPreviewWidth()); - } - } else { - ((PostGalleryBaseGalleryTypeViewHolder) holder).adapter.setRatio(-1); - } - ((PostGalleryBaseGalleryTypeViewHolder) holder).adapter.setGalleryImages(post.getGallery()); - ((PostGalleryBaseGalleryTypeViewHolder) holder).adapter.setBlurImage( - (post.isNSFW() && mNeedBlurNsfw) || (post.isSpoiler() && mNeedBlurSpoiler)); - } - } - } else if (holder instanceof PostMaterial3CardBaseViewHolder) { - Post post = getItem(position); - if (post != null) { - ((PostMaterial3CardBaseViewHolder) holder).post = post; - String authorPrefixed = "u/" + post.getAuthor(); - - if (mHideSubredditAndUserPrefix) { - ((PostMaterial3CardBaseViewHolder) holder).subredditTextView.setText(post.getSubredditName()); - ((PostMaterial3CardBaseViewHolder) holder).userTextView.setText(post.getAuthor()); - } else { - ((PostMaterial3CardBaseViewHolder) holder).subredditTextView.setText("r/" + post.getSubredditName()); - ((PostMaterial3CardBaseViewHolder) holder).userTextView.setText(authorPrefixed); - } - - ((PostMaterial3CardBaseViewHolder) holder).userTextView.setTextColor( - post.isModerator() ? mModeratorColor : mUsernameColor); - - if (mDisplaySubredditName) { - if (authorPrefixed.equals(post.getSubredditNamePrefixed())) { - if (post.getAuthorIconUrl() == null) { - mFragment.loadIcon(post.getAuthor(), false, (subredditOrUserName, iconUrl) -> { - if (mActivity != null && getItemCount() > 0 && post.getAuthor().equals(subredditOrUserName)) { - if (iconUrl == null || iconUrl.equals("")) { - mGlide.load(R.drawable.subreddit_default_icon) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) - .into(((PostMaterial3CardBaseViewHolder) holder).iconGifImageView); - } else { - mGlide.load(iconUrl) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) - .error(mGlide.load(R.drawable.subreddit_default_icon) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))) - .into(((PostMaterial3CardBaseViewHolder) holder).iconGifImageView); - } - - if (holder.getBindingAdapterPosition() >= 0) { - post.setAuthorIconUrl(iconUrl); - } - } - }); - } else if (!post.getAuthorIconUrl().equals("")) { - mGlide.load(post.getAuthorIconUrl()) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) - .error(mGlide.load(R.drawable.subreddit_default_icon) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))) - .into(((PostMaterial3CardBaseViewHolder) holder).iconGifImageView); - } else { - mGlide.load(R.drawable.subreddit_default_icon) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) - .into(((PostMaterial3CardBaseViewHolder) holder).iconGifImageView); - } - } else { - if (post.getSubredditIconUrl() == null) { - mFragment.loadIcon(post.getSubredditName(), true, (subredditOrUserName, iconUrl) -> { - if (mActivity != null && getItemCount() > 0 && post.getSubredditName().equals(subredditOrUserName)) { - if (iconUrl == null || iconUrl.equals("")) { - mGlide.load(R.drawable.subreddit_default_icon) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) - .into(((PostMaterial3CardBaseViewHolder) holder).iconGifImageView); - } else { - mGlide.load(iconUrl) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) - .error(mGlide.load(R.drawable.subreddit_default_icon) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))) - .into(((PostMaterial3CardBaseViewHolder) holder).iconGifImageView); - } - - if (holder.getBindingAdapterPosition() >= 0) { - post.setSubredditIconUrl(iconUrl); - } - } - }); - } else if (!post.getSubredditIconUrl().equals("")) { - mGlide.load(post.getSubredditIconUrl()) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) - .error(mGlide.load(R.drawable.subreddit_default_icon) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))) - .into(((PostMaterial3CardBaseViewHolder) holder).iconGifImageView); - } else { - mGlide.load(R.drawable.subreddit_default_icon) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) - .into(((PostMaterial3CardBaseViewHolder) holder).iconGifImageView); - } - } - } else { - if (post.getAuthorIconUrl() == null) { - String authorName = post.isAuthorDeleted() ? post.getSubredditName() : post.getAuthor(); - mFragment.loadIcon(authorName, post.isAuthorDeleted(), (subredditOrUserName, iconUrl) -> { - if (mActivity != null && getItemCount() > 0) { - if (iconUrl == null || iconUrl.equals("") && authorName.equals(subredditOrUserName)) { - mGlide.load(R.drawable.subreddit_default_icon) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) - .into(((PostMaterial3CardBaseViewHolder) holder).iconGifImageView); - } else { - mGlide.load(iconUrl) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) - .error(mGlide.load(R.drawable.subreddit_default_icon) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))) - .into(((PostMaterial3CardBaseViewHolder) holder).iconGifImageView); - } - - if (holder.getBindingAdapterPosition() >= 0) { - post.setAuthorIconUrl(iconUrl); - } - } - }); - } else if (!post.getAuthorIconUrl().equals("")) { - mGlide.load(post.getAuthorIconUrl()) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) - .error(mGlide.load(R.drawable.subreddit_default_icon) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))) - .into(((PostMaterial3CardBaseViewHolder) holder).iconGifImageView); - } else { - mGlide.load(R.drawable.subreddit_default_icon) - .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))) - .into(((PostMaterial3CardBaseViewHolder) holder).iconGifImageView); - } - } - - if (mShowElapsedTime) { - ((PostMaterial3CardBaseViewHolder) holder).postTimeTextView.setText( - Utils.getElapsedTime(mActivity, post.getPostTimeMillis())); - } else { - ((PostMaterial3CardBaseViewHolder) holder).postTimeTextView.setText(Utils.getFormattedTime(mLocale, post.getPostTimeMillis(), mTimeFormatPattern)); - } - - ((PostMaterial3CardBaseViewHolder) holder).titleTextView.setText(post.getTitle()); - if (!mHideTheNumberOfVotes) { - ((PostMaterial3CardBaseViewHolder) holder).scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType())); - } else { - ((PostMaterial3CardBaseViewHolder) holder).scoreTextView.setText(mActivity.getString(R.string.vote)); - } - - switch (post.getVoteType()) { - case 1: - //Upvoted - ((PostMaterial3CardBaseViewHolder) holder).upvoteButton.setIconResource(R.drawable.ic_upvote_filled_24dp); - ((PostMaterial3CardBaseViewHolder) holder).upvoteButton.setIconTint(ColorStateList.valueOf(mUpvotedColor)); - ((PostMaterial3CardBaseViewHolder) holder).scoreTextView.setTextColor(mUpvotedColor); - break; - case -1: - //Downvoted - ((PostMaterial3CardBaseViewHolder) holder).downvoteButton.setIconResource(R.drawable.ic_downvote_filled_24dp); - ((PostMaterial3CardBaseViewHolder) holder).downvoteButton.setIconTint(ColorStateList.valueOf(mDownvotedColor)); - ((PostMaterial3CardBaseViewHolder) holder).scoreTextView.setTextColor(mDownvotedColor); - break; - } - - if (mPostType == PostPagingSource.TYPE_SUBREDDIT && !mDisplaySubredditName && post.isStickied()) { - ((PostMaterial3CardBaseViewHolder) holder).stickiedPostImageView.setVisibility(View.VISIBLE); - mGlide.load(R.drawable.ic_thumbtack_24dp).into(((PostMaterial3CardBaseViewHolder) holder).stickiedPostImageView); - } - - if (post.isArchived()) { - ((PostMaterial3CardBaseViewHolder) holder).upvoteButton.setIconTint(ColorStateList.valueOf(mVoteAndReplyUnavailableVoteButtonColor)); - ((PostMaterial3CardBaseViewHolder) holder).scoreTextView.setTextColor(mVoteAndReplyUnavailableVoteButtonColor); - ((PostMaterial3CardBaseViewHolder) holder).downvoteButton.setIconTint(ColorStateList.valueOf(mVoteAndReplyUnavailableVoteButtonColor)); - } - - if (!mHideTheNumberOfComments) { - ((PostMaterial3CardBaseViewHolder) holder).commentsCountButton.setVisibility(View.VISIBLE); - ((PostMaterial3CardBaseViewHolder) holder).commentsCountButton.setText(Integer.toString(post.getNComments())); - } else { - ((PostMaterial3CardBaseViewHolder) holder).commentsCountButton.setVisibility(View.GONE); - } - - if (post.isSaved()) { - ((PostMaterial3CardBaseViewHolder) holder).saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp); - } else { - ((PostMaterial3CardBaseViewHolder) holder).saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp); - } - - if (holder instanceof PostMaterial3CardBaseVideoAutoplayViewHolder) { - ((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).previewImageView.setVisibility(View.VISIBLE); - Post.Preview preview = getSuitablePreview(post.getPreviews()); - if (!mFixedHeightPreviewInCard && preview != null) { - ((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).aspectRatioFrameLayout.setAspectRatio((float) preview.getPreviewWidth() / preview.getPreviewHeight()); - mGlide.load(preview.getPreviewUrl()).centerInside().downsample(mSaveMemoryCenterInsideDownsampleStrategy).into(((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).previewImageView); - } else { - ((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).aspectRatioFrameLayout.setAspectRatio(1); - } - if (!((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).isManuallyPaused) { - if (mFragment.getMasterMutingOption() == null) { - ((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).setVolume(mMuteAutoplayingVideos || (post.isNSFW() && mMuteNSFWVideo) ? 0f : 1f); - } else { - ((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).setVolume(mFragment.getMasterMutingOption() ? 0f : 1f); - } - } - - if (post.isRedgifs() && !post.isLoadRedgifsOrStreamableVideoSuccess()) { - ((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).fetchRedgifsOrStreamableVideoCall = - mRedgifsRetrofit.create(RedgifsAPI.class).getRedgifsData( - APIUtils.getRedgifsOAuthHeader(mCurrentAccountSharedPreferences - .getString(SharedPreferencesUtils.REDGIFS_ACCESS_TOKEN, "")), - post.getRedgifsId(), APIUtils.USER_AGENT); - FetchRedgifsVideoLinks.fetchRedgifsVideoLinksInRecyclerViewAdapter(mExecutor, new Handler(), - ((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).fetchRedgifsOrStreamableVideoCall, - new FetchVideoLinkListener() { - @Override - public void onFetchRedgifsVideoLinkSuccess(String webm, String mp4) { - post.setVideoDownloadUrl(mp4); - post.setVideoUrl(mp4); - post.setLoadRedgifsOrStreamableVideoSuccess(true); - if (position == holder.getBindingAdapterPosition()) { - ((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).bindVideoUri(Uri.parse(post.getVideoUrl())); - } - } - - @Override - public void failed(@Nullable Integer messageRes) { - if (position == holder.getBindingAdapterPosition()) { - ((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).loadFallbackDirectVideo(); - } - } - }); - } else if(post.isStreamable() && !post.isLoadRedgifsOrStreamableVideoSuccess()) { - ((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).fetchRedgifsOrStreamableVideoCall = - mStreamableApiProvider.get().getStreamableData(post.getStreamableShortCode()); - FetchStreamableVideo.fetchStreamableVideoInRecyclerViewAdapter(mExecutor, new Handler(), - ((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).fetchRedgifsOrStreamableVideoCall, - new FetchVideoLinkListener() { - @Override - public void onFetchStreamableVideoLinkSuccess(StreamableVideo streamableVideo) { - StreamableVideo.Media media = streamableVideo.mp4 == null ? streamableVideo.mp4Mobile : streamableVideo.mp4; - post.setVideoDownloadUrl(media.url); - post.setVideoUrl(media.url); - post.setLoadRedgifsOrStreamableVideoSuccess(true); - if (position == holder.getBindingAdapterPosition()) { - ((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).bindVideoUri(Uri.parse(post.getVideoUrl())); - } - } - - @Override - public void failed(@Nullable Integer messageRes) { - if (position == holder.getBindingAdapterPosition()) { - ((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).loadFallbackDirectVideo(); - } - } - }); - } else { - ((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).bindVideoUri(Uri.parse(post.getVideoUrl())); - } - } else if (holder instanceof PostMaterial3CardWithPreviewViewHolder) { - if (post.getPostType() == Post.VIDEO_TYPE) { - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostCard3WithPreview.setVisibility(View.VISIBLE); - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostCard3WithPreview.setImageDrawable(ContextCompat.getDrawable(mActivity, R.drawable.ic_play_circle_36dp)); - } else if (post.getPostType() == Post.GIF_TYPE) { - if (!mAutoplay) { - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostCard3WithPreview.setVisibility(View.VISIBLE); - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostCard3WithPreview.setImageDrawable(ContextCompat.getDrawable(mActivity, R.drawable.ic_play_circle_36dp)); - } - }else if (post.getPostType() == Post.LINK_TYPE || post.getPostType() == Post.NO_PREVIEW_LINK_TYPE) { - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.linkTextViewItemPostCard3WithPreview.setVisibility(View.VISIBLE); - String domain = Uri.parse(post.getUrl()).getHost(); - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.linkTextViewItemPostCard3WithPreview.setText(domain); - if (post.getPostType() == Post.NO_PREVIEW_LINK_TYPE) { - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostCard3WithPreview.setVisibility(View.VISIBLE); - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostCard3WithPreview.setImageResource(R.drawable.ic_link_day_night_24dp); - } - } - - if (mDataSavingMode && mDisableImagePreview) { - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostCard3WithPreview.setVisibility(View.VISIBLE); - if (post.getPostType() == Post.VIDEO_TYPE) { - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostCard3WithPreview.setImageResource(R.drawable.ic_video_day_night_24dp); - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostCard3WithPreview.setVisibility(View.GONE); - } else if (post.getPostType() == Post.IMAGE_TYPE || post.getPostType() == Post.GIF_TYPE) { - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostCard3WithPreview.setImageResource(R.drawable.ic_image_day_night_24dp); - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostCard3WithPreview.setVisibility(View.GONE); - } else if (post.getPostType() == Post.LINK_TYPE) { - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostCard3WithPreview.setImageResource(R.drawable.ic_link_day_night_24dp); - } - } else if (mDataSavingMode && mOnlyDisablePreviewInVideoAndGifPosts && (post.getPostType() == Post.VIDEO_TYPE || post.getPostType() == Post.GIF_TYPE)) { - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostCard3WithPreview.setVisibility(View.VISIBLE); - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostCard3WithPreview.setImageResource(R.drawable.ic_video_day_night_24dp); - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostCard3WithPreview.setVisibility(View.GONE); - } else { - if (post.getPostType() == Post.GIF_TYPE && ((post.isNSFW() && mNeedBlurNsfw && !(mAutoplay && mAutoplayNsfwVideos)) || (post.isSpoiler() && mNeedBlurSpoiler))) { - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostCard3WithPreview.setVisibility(View.VISIBLE); - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostCard3WithPreview.setImageResource(R.drawable.ic_image_day_night_24dp); - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostCard3WithPreview.setVisibility(View.GONE); - } else { - Post.Preview preview = getSuitablePreview(post.getPreviews()); - ((PostMaterial3CardWithPreviewViewHolder) holder).preview = preview; - if (preview != null) { - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.imageViewItemPostCard3WithPreview.setVisibility(View.VISIBLE); - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.imageWrapperRelativeLayoutItemPostCard3WithPreview.setVisibility(View.VISIBLE); - if (mFixedHeightPreviewInCard || (preview.getPreviewWidth() <= 0 || preview.getPreviewHeight() <= 0)) { - int height = (int) (400 * mScale); - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.imageViewItemPostCard3WithPreview.setScaleType(ImageView.ScaleType.CENTER_CROP); - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.imageViewItemPostCard3WithPreview.getLayoutParams().height = height; - } else { - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.imageViewItemPostCard3WithPreview - .setRatio((float) preview.getPreviewHeight() / preview.getPreviewWidth()); - } - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.imageViewItemPostCard3WithPreview.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { - @Override - public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.imageViewItemPostCard3WithPreview.removeOnLayoutChangeListener(this); - loadImage(holder); - } - }); - } else { - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostCard3WithPreview.setVisibility(View.VISIBLE); - if (post.getPostType() == Post.VIDEO_TYPE) { - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostCard3WithPreview.setImageResource(R.drawable.ic_video_day_night_24dp); - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostCard3WithPreview.setVisibility(View.GONE); - } else if (post.getPostType() == Post.IMAGE_TYPE || post.getPostType() == Post.GIF_TYPE) { - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostCard3WithPreview.setImageResource(R.drawable.ic_image_day_night_24dp); - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostCard3WithPreview.setVisibility(View.GONE); - } else if (post.getPostType() == Post.LINK_TYPE) { - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostCard3WithPreview.setImageResource(R.drawable.ic_link_day_night_24dp); - } else if (post.getPostType() == Post.GALLERY_TYPE) { - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostCard3WithPreview.setImageResource(R.drawable.ic_gallery_day_night_24dp); - } - } - } - } - } else if (holder instanceof PostMaterial3CardBaseGalleryTypeViewHolder) { - if (mDataSavingMode && mDisableImagePreview) { - ((PostMaterial3CardBaseGalleryTypeViewHolder) holder).noPreviewImageView.setVisibility(View.VISIBLE); - ((PostMaterial3CardBaseGalleryTypeViewHolder) holder).noPreviewImageView.setImageResource(R.drawable.ic_gallery_day_night_24dp); - } else { - ((PostMaterial3CardBaseGalleryTypeViewHolder) holder).frameLayout.setVisibility(View.VISIBLE); - ((PostMaterial3CardBaseGalleryTypeViewHolder) holder).imageIndexTextView.setText(mActivity.getString(R.string.image_index_in_gallery, 1, post.getGallery().size())); - Post.Preview preview = getSuitablePreview(post.getPreviews()); - if (preview != null) { - if (mFixedHeightPreviewInCard || (preview.getPreviewWidth() <= 0 || preview.getPreviewHeight() <= 0)) { - ((PostMaterial3CardBaseGalleryTypeViewHolder) holder).adapter.setRatio(-1); - } else { - ((PostMaterial3CardBaseGalleryTypeViewHolder) holder).adapter.setRatio((float) preview.getPreviewHeight() / preview.getPreviewWidth()); - } - } else { - ((PostMaterial3CardBaseGalleryTypeViewHolder) holder).adapter.setRatio(-1); - } - ((PostMaterial3CardBaseGalleryTypeViewHolder) holder).adapter.setGalleryImages(post.getGallery()); - ((PostMaterial3CardBaseGalleryTypeViewHolder) holder).adapter.setBlurImage( - (post.isNSFW() && mNeedBlurNsfw) || (post.isSpoiler() && mNeedBlurSpoiler)); - } - } else if (holder instanceof PostMaterial3CardTextTypeViewHolder) { - if (!mHideTextPostContent && !post.isSpoiler() && post.getSelfTextPlainTrimmed() != null && !post.getSelfTextPlainTrimmed().equals("")) { - ((PostMaterial3CardTextTypeViewHolder) holder).binding.contentTextViewItemPostCard3TextType.setVisibility(View.VISIBLE); - ((PostMaterial3CardTextTypeViewHolder) holder).binding.contentTextViewItemPostCard3TextType.setText(post.getSelfTextPlainTrimmed()); - } - } - mCallback.currentlyBindItem(holder.getBindingAdapterPosition()); - } - } - } - - @Nullable - private Post.Preview getSuitablePreview(ArrayList<Post.Preview> previews) { - Post.Preview preview; - if (!previews.isEmpty()) { - int previewIndex; - if (mDataSavingMode && previews.size() > 2) { - previewIndex = previews.size() / 2; - } else { - previewIndex = 0; - } - preview = previews.get(previewIndex); - if (preview.getPreviewWidth() * preview.getPreviewHeight() > mMaxResolution) { - for (int i = previews.size() - 1; i >= 1; i--) { - preview = previews.get(i); - if (preview.getPreviewWidth() * preview.getPreviewHeight() <= mMaxResolution) { - return preview; - } - } - } - return preview; - } - - return null; - } - - private void loadImage(final RecyclerView.ViewHolder holder) { - if (holder instanceof PostWithPreviewTypeViewHolder) { - ((PostWithPreviewTypeViewHolder) holder).binding.progressBarItemPostWithPreview.setVisibility(View.VISIBLE); - Post post = ((PostWithPreviewTypeViewHolder) holder).post; - Post.Preview preview = ((PostWithPreviewTypeViewHolder) holder).preview; - if (preview != null) { - String url; - boolean blurImage = (post.isNSFW() && mNeedBlurNsfw && !(post.getPostType() == Post.GIF_TYPE && mAutoplay && mAutoplayNsfwVideos)) || (post.isSpoiler() && mNeedBlurSpoiler); - if (post.getPostType() == Post.GIF_TYPE && mAutoplay && !blurImage) { - url = post.getUrl(); - } else { - url = preview.getPreviewUrl(); - } - RequestBuilder<Drawable> imageRequestBuilder = mGlide.load(url).listener(((PostWithPreviewTypeViewHolder) holder).glideRequestListener); - if (blurImage) { - imageRequestBuilder.apply(RequestOptions.bitmapTransform(new BlurTransformation(50, 10))) - .into(((PostWithPreviewTypeViewHolder) holder).binding.imageViewItemPostWithPreview); - } else { - imageRequestBuilder.centerInside().downsample(mSaveMemoryCenterInsideDownsampleStrategy).into(((PostWithPreviewTypeViewHolder) holder).binding.imageViewItemPostWithPreview); - } - } - } else if (holder instanceof PostCompactBaseViewHolder) { - Post post = ((PostCompactBaseViewHolder) holder).post; - String postCompactThumbnailPreviewUrl; - ArrayList<Post.Preview> previews = post.getPreviews(); - if (previews != null && !previews.isEmpty()) { - if (previews.size() >= 2) { - postCompactThumbnailPreviewUrl = previews.get(1).getPreviewUrl(); - } else { - postCompactThumbnailPreviewUrl = previews.get(0).getPreviewUrl(); - } - - RequestBuilder<Drawable> imageRequestBuilder = mGlide.load(postCompactThumbnailPreviewUrl) - .error(R.drawable.ic_error_outline_black_day_night_24dp).listener(((PostCompactBaseViewHolder) holder).requestListener); - if ((post.isNSFW() && mNeedBlurNsfw) || (post.isSpoiler() && mNeedBlurSpoiler)) { - imageRequestBuilder - .transform(new BlurTransformation(50, 2)).into(((PostCompactBaseViewHolder) holder).imageView); - } else { - imageRequestBuilder.into(((PostCompactBaseViewHolder) holder).imageView); - } - } - } else if (holder instanceof PostGalleryViewHolder) { - ((PostGalleryViewHolder) holder).binding.progressBarItemPostGallery.setVisibility(View.VISIBLE); - Post post = ((PostGalleryViewHolder) holder).post; - Post.Preview preview = ((PostGalleryViewHolder) holder).preview; - if (preview != null) { - String url; - boolean blurImage = (post.isNSFW() && mNeedBlurNsfw && !(post.getPostType() == Post.GIF_TYPE && mAutoplay && mAutoplayNsfwVideos)) || post.isSpoiler() && mNeedBlurSpoiler; - if (post.getPostType() == Post.GIF_TYPE && mAutoplay && !blurImage) { - url = post.getUrl(); - } else { - url = preview.getPreviewUrl(); - } - RequestBuilder<Drawable> imageRequestBuilder = mGlide.load(url).listener(((PostGalleryViewHolder) holder).requestListener); - - if (blurImage) { - imageRequestBuilder.apply(RequestOptions.bitmapTransform(new BlurTransformation(50, 10))) - .into(((PostGalleryViewHolder) holder).binding.imageViewItemPostGallery); - } else { - imageRequestBuilder.centerInside().downsample(mSaveMemoryCenterInsideDownsampleStrategy).into(((PostGalleryViewHolder) holder).binding.imageViewItemPostGallery); - } - } - } else if (holder instanceof PostCard2WithPreviewViewHolder) { - ((PostCard2WithPreviewViewHolder) holder).binding.progressBarItemPostCard2WithPreview.setVisibility(View.VISIBLE); - Post post = ((PostCard2WithPreviewViewHolder) holder).post; - Post.Preview preview = ((PostCard2WithPreviewViewHolder) holder).preview; - if (preview != null) { - String url; - boolean blurImage = (post.isNSFW() && mNeedBlurNsfw && !(post.getPostType() == Post.GIF_TYPE && mAutoplay && mAutoplayNsfwVideos)) || (post.isSpoiler() && mNeedBlurSpoiler); - if (post.getPostType() == Post.GIF_TYPE && mAutoplay && !blurImage) { - url = post.getUrl(); - } else { - url = preview.getPreviewUrl(); - } - RequestBuilder<Drawable> imageRequestBuilder = mGlide.load(url).listener(((PostCard2WithPreviewViewHolder) holder).requestListener); - - if (blurImage) { - imageRequestBuilder.apply(RequestOptions.bitmapTransform(new BlurTransformation(50, 10))) - .into(((PostCard2WithPreviewViewHolder) holder).binding.imageViewItemPostCard2WithPreview); - } else { - imageRequestBuilder.centerInside().downsample(mSaveMemoryCenterInsideDownsampleStrategy).into(((PostCard2WithPreviewViewHolder) holder).binding.imageViewItemPostCard2WithPreview); - } - } - } else if (holder instanceof PostMaterial3CardWithPreviewViewHolder) { - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.progressBarItemPostCard3WithPreview.setVisibility(View.VISIBLE); - Post post = ((PostMaterial3CardWithPreviewViewHolder) holder).post; - Post.Preview preview = ((PostMaterial3CardWithPreviewViewHolder) holder).preview; - if (preview != null) { - String url; - boolean blurImage = (post.isNSFW() && mNeedBlurNsfw && !(post.getPostType() == Post.GIF_TYPE && mAutoplay && mAutoplayNsfwVideos)) || (post.isSpoiler() && mNeedBlurSpoiler); - if (post.getPostType() == Post.GIF_TYPE && mAutoplay && !blurImage) { - url = post.getUrl(); - } else { - url = preview.getPreviewUrl(); - } - RequestBuilder<Drawable> imageRequestBuilder = mGlide.load(url).listener(((PostMaterial3CardWithPreviewViewHolder) holder).glideRequestListener); - - if (blurImage) { - imageRequestBuilder.apply(RequestOptions.bitmapTransform(new BlurTransformation(50, 10))) - .into(((PostMaterial3CardWithPreviewViewHolder) holder).binding.imageViewItemPostCard3WithPreview); - } else { - imageRequestBuilder.centerInside().downsample(mSaveMemoryCenterInsideDownsampleStrategy).into(((PostMaterial3CardWithPreviewViewHolder) holder).binding.imageViewItemPostCard3WithPreview); - } - } - } - } - - private void shareLink(Post post) { - Bundle bundle = new Bundle(); - bundle.putString(ShareLinkBottomSheetFragment.EXTRA_POST_LINK, post.getPermalink()); - if (post.getPostType() != Post.TEXT_TYPE) { - bundle.putInt(ShareLinkBottomSheetFragment.EXTRA_MEDIA_TYPE, post.getPostType()); - switch (post.getPostType()) { - case Post.IMAGE_TYPE: - case Post.GIF_TYPE: - case Post.LINK_TYPE: - case Post.NO_PREVIEW_LINK_TYPE: - bundle.putString(ShareLinkBottomSheetFragment.EXTRA_MEDIA_LINK, post.getUrl()); - break; - case Post.VIDEO_TYPE: - bundle.putString(ShareLinkBottomSheetFragment.EXTRA_MEDIA_LINK, post.getVideoDownloadUrl()); - break; - } - } - ShareLinkBottomSheetFragment shareLinkBottomSheetFragment = new ShareLinkBottomSheetFragment(); - shareLinkBottomSheetFragment.setArguments(bundle); - shareLinkBottomSheetFragment.show(mActivity.getSupportFragmentManager(), shareLinkBottomSheetFragment.getTag()); - } - - @Nullable - public Post getItemByPosition(int position) { - if (position >= 0 && super.getItemCount() > position) { - return super.getItem(position); - } - - return null; - } - - public void setVoteButtonsPosition(boolean voteButtonsOnTheRight) { - mVoteButtonsOnTheRight = voteButtonsOnTheRight; - } - - public void setPostLayout(int postLayout) { - mPostLayout = postLayout; - } - - public void setBlurNsfwAndDoNotBlurNsfwInNsfwSubreddits(boolean needBlurNsfw) { - mNeedBlurNsfw = needBlurNsfw; - } - - public void setBlurSpoiler(boolean needBlurSpoiler) { - mNeedBlurSpoiler = needBlurSpoiler; - } - - public void setShowElapsedTime(boolean showElapsedTime) { - mShowElapsedTime = showElapsedTime; - } - - public void setTimeFormat(String timeFormat) { - mTimeFormatPattern = timeFormat; - } - - public void setShowDividerInCompactLayout(boolean showDividerInCompactLayout) { - mShowDividerInCompactLayout = showDividerInCompactLayout; - } - - public void setShowAbsoluteNumberOfVotes(boolean showAbsoluteNumberOfVotes) { - mShowAbsoluteNumberOfVotes = showAbsoluteNumberOfVotes; - } - - public void setAutoplay(boolean autoplay) { - mAutoplay = autoplay; - } - - public boolean isAutoplay() { - return mAutoplay; - } - - public void setAutoplayNsfwVideos(boolean autoplayNsfwVideos) { - mAutoplayNsfwVideos = autoplayNsfwVideos; - } - - public void setMuteAutoplayingVideos(boolean muteAutoplayingVideos) { - mMuteAutoplayingVideos = muteAutoplayingVideos; - } - - public void setShowThumbnailOnTheRightInCompactLayout(boolean showThumbnailOnTheRightInCompactLayout) { - mShowThumbnailOnTheRightInCompactLayout = showThumbnailOnTheRightInCompactLayout; - } - - public void setStartAutoplayVisibleAreaOffset(double startAutoplayVisibleAreaOffset) { - this.mStartAutoplayVisibleAreaOffset = startAutoplayVisibleAreaOffset / 100.0; - } - - public void setMuteNSFWVideo(boolean muteNSFWVideo) { - this.mMuteNSFWVideo = muteNSFWVideo; - } - - public void setLongPressToHideToolbarInCompactLayout(boolean longPressToHideToolbarInCompactLayout) { - mLongPressToHideToolbarInCompactLayout = longPressToHideToolbarInCompactLayout; - } - - public void setCompactLayoutToolbarHiddenByDefault(boolean compactLayoutToolbarHiddenByDefault) { - mCompactLayoutToolbarHiddenByDefault = compactLayoutToolbarHiddenByDefault; - } - - public void setDataSavingMode(boolean dataSavingMode) { - mDataSavingMode = dataSavingMode; - } - - public void setDisableImagePreview(boolean disableImagePreview) { - mDisableImagePreview = disableImagePreview; - } - - public void setOnlyDisablePreviewInVideoPosts(boolean onlyDisablePreviewInVideoAndGifPosts) { - mOnlyDisablePreviewInVideoAndGifPosts = onlyDisablePreviewInVideoAndGifPosts; - } - - public void setHidePostType(boolean hidePostType) { - mHidePostType = hidePostType; - } - - public void setHidePostFlair(boolean hidePostFlair) { - mHidePostFlair = hidePostFlair; - } - - public void setHideSubredditAndUserPrefix(boolean hideSubredditAndUserPrefix) { - mHideSubredditAndUserPrefix = hideSubredditAndUserPrefix; - } - - public void setHideTheNumberOfVotes(boolean hideTheNumberOfVotes) { - mHideTheNumberOfVotes = hideTheNumberOfVotes; - } - - public void setHideTheNumberOfComments(boolean hideTheNumberOfComments) { - mHideTheNumberOfComments = hideTheNumberOfComments; - } - - public void setDefaultLinkPostLayout(int defaultLinkPostLayout) { - mDefaultLinkPostLayout = defaultLinkPostLayout; - } - - public void setFixedHeightPreviewInCard(boolean fixedHeightPreviewInCard) { - mFixedHeightPreviewInCard = fixedHeightPreviewInCard; - } - - public void setHideTextPostContent(boolean hideTextPostContent) { - mHideTextPostContent = hideTextPostContent; - } - - public void setPostFeedMaxResolution(int postFeedMaxResolution) { - mMaxResolution = postFeedMaxResolution; - if (mSaveMemoryCenterInsideDownsampleStrategy != null) { - mSaveMemoryCenterInsideDownsampleStrategy.setThreshold(postFeedMaxResolution); - } - } - - public void setEasierToWatchInFullScreen(boolean easierToWatchInFullScreen) { - this.mEasierToWatchInFullScreen = easierToWatchInFullScreen; - } - - @OptIn(markerClass = UnstableApi.class) - @Override - public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) { - if (holder instanceof PostBaseViewHolder) { - if (((PostBaseViewHolder) holder).itemViewIsNotCardView) { - holder.itemView.setBackgroundColor(mCardViewBackgroundColor); - } else { - holder.itemView.setBackgroundTintList(ColorStateList.valueOf(mCardViewBackgroundColor)); - } - mGlide.clear(((PostBaseViewHolder) holder).iconGifImageView); - ((PostBaseViewHolder) holder).titleTextView.setTextColor(mPostTitleColor); - if (holder instanceof PostBaseVideoAutoplayViewHolder) { - ((PostBaseVideoAutoplayViewHolder) holder).mediaUri = null; - if (((PostBaseVideoAutoplayViewHolder) holder).fetchRedgifsOrStreamableVideoCall != null && !((PostBaseVideoAutoplayViewHolder) holder).fetchRedgifsOrStreamableVideoCall.isCanceled()) { - ((PostBaseVideoAutoplayViewHolder) holder).fetchRedgifsOrStreamableVideoCall.cancel(); - ((PostBaseVideoAutoplayViewHolder) holder).fetchRedgifsOrStreamableVideoCall = null; - } - ((PostBaseVideoAutoplayViewHolder) holder).errorLoadingVideoImageView.setVisibility(View.GONE); - ((PostBaseVideoAutoplayViewHolder) holder).muteButton.setVisibility(View.GONE); - if (!((PostBaseVideoAutoplayViewHolder) holder).isManuallyPaused) { - ((PostBaseVideoAutoplayViewHolder) holder).resetVolume(); - } - mGlide.clear(((PostBaseVideoAutoplayViewHolder) holder).previewImageView); - ((PostBaseVideoAutoplayViewHolder) holder).previewImageView.setVisibility(View.GONE); - } else if (holder instanceof PostWithPreviewTypeViewHolder) { - mGlide.clear(((PostWithPreviewTypeViewHolder) holder).binding.imageViewItemPostWithPreview); - ((PostWithPreviewTypeViewHolder) holder).binding.imageViewItemPostWithPreview.setVisibility(View.GONE); - ((PostWithPreviewTypeViewHolder) holder).binding.imageWrapperRelativeLayoutItemPostWithPreview.setVisibility(View.GONE); - ((PostWithPreviewTypeViewHolder) holder).binding.loadImageErrorTextViewItemPostWithPreview.setVisibility(View.GONE); - ((PostWithPreviewTypeViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostWithPreview.setVisibility(View.GONE); - ((PostWithPreviewTypeViewHolder) holder).binding.progressBarItemPostWithPreview.setVisibility(View.GONE); - ((PostWithPreviewTypeViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostWithPreview.setVisibility(View.GONE); - ((PostWithPreviewTypeViewHolder) holder).binding.linkTextViewItemPostWithPreview.setVisibility(View.GONE); - } else if (holder instanceof PostBaseGalleryTypeViewHolder) { - ((PostBaseGalleryTypeViewHolder) holder).frameLayout.setVisibility(View.GONE); - ((PostBaseGalleryTypeViewHolder) holder).noPreviewImageView.setVisibility(View.GONE); - ((PostBaseGalleryTypeViewHolder) holder).adapter.setGalleryImages(null); - } else if (holder instanceof PostTextTypeViewHolder) { - ((PostTextTypeViewHolder) holder).binding.contentTextViewItemPostTextType.setText(""); - ((PostTextTypeViewHolder) holder).binding.contentTextViewItemPostTextType.setTextColor(mPostContentColor); - ((PostTextTypeViewHolder) holder).binding.contentTextViewItemPostTextType.setVisibility(View.GONE); - } else if (holder instanceof PostCard2BaseVideoAutoplayViewHolder) { - ((PostCard2BaseVideoAutoplayViewHolder) holder).mediaUri = null; - if (((PostCard2BaseVideoAutoplayViewHolder) holder).fetchRedgifsOrStreamableVideoCall != null && !((PostCard2BaseVideoAutoplayViewHolder) holder).fetchRedgifsOrStreamableVideoCall.isCanceled()) { - ((PostCard2BaseVideoAutoplayViewHolder) holder).fetchRedgifsOrStreamableVideoCall.cancel(); - ((PostCard2BaseVideoAutoplayViewHolder) holder).fetchRedgifsOrStreamableVideoCall = null; - } - ((PostCard2BaseVideoAutoplayViewHolder) holder).errorLoadingRedgifsImageView.setVisibility(View.GONE); - ((PostCard2BaseVideoAutoplayViewHolder) holder).muteButton.setVisibility(View.GONE); - ((PostCard2BaseVideoAutoplayViewHolder) holder).resetVolume(); - mGlide.clear(((PostCard2BaseVideoAutoplayViewHolder) holder).previewImageView); - ((PostCard2BaseVideoAutoplayViewHolder) holder).previewImageView.setVisibility(View.GONE); - } else if (holder instanceof PostCard2WithPreviewViewHolder) { - mGlide.clear(((PostCard2WithPreviewViewHolder) holder).binding.imageViewItemPostCard2WithPreview); - ((PostCard2WithPreviewViewHolder) holder).binding.imageViewItemPostCard2WithPreview.setVisibility(View.GONE); - ((PostCard2WithPreviewViewHolder) holder).binding.loadImageErrorTextViewItemPostCard2WithPreview.setVisibility(View.GONE); - ((PostCard2WithPreviewViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostCard2WithPreview.setVisibility(View.GONE); - ((PostCard2WithPreviewViewHolder) holder).binding.progressBarItemPostCard2WithPreview.setVisibility(View.GONE); - ((PostCard2WithPreviewViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostCard2WithPreview.setVisibility(View.GONE); - ((PostCard2WithPreviewViewHolder) holder).binding.linkTextViewItemPostCard2WithPreview.setVisibility(View.GONE); - } else if (holder instanceof PostCard2TextTypeViewHolder) { - ((PostCard2TextTypeViewHolder) holder).binding.contentTextViewItemPostCard2Text.setText(""); - ((PostCard2TextTypeViewHolder) holder).binding.contentTextViewItemPostCard2Text.setTextColor(mPostContentColor); - ((PostCard2TextTypeViewHolder) holder).binding.contentTextViewItemPostCard2Text.setVisibility(View.GONE); - } - - mGlide.clear(((PostBaseViewHolder) holder).iconGifImageView); - ((PostBaseViewHolder) holder).stickiedPostImageView.setVisibility(View.GONE); - ((PostBaseViewHolder) holder).crosspostImageView.setVisibility(View.GONE); - ((PostBaseViewHolder) holder).archivedImageView.setVisibility(View.GONE); - ((PostBaseViewHolder) holder).lockedImageView.setVisibility(View.GONE); - ((PostBaseViewHolder) holder).nsfwTextView.setVisibility(View.GONE); - ((PostBaseViewHolder) holder).spoilerTextView.setVisibility(View.GONE); - ((PostBaseViewHolder) holder).flairTextView.setText(""); - ((PostBaseViewHolder) holder).flairTextView.setVisibility(View.GONE); - ((PostBaseViewHolder) holder).upvoteButton.setIconResource(R.drawable.ic_upvote_24dp); - ((PostBaseViewHolder) holder).upvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - ((PostBaseViewHolder) holder).scoreTextView.setTextColor(mPostIconAndInfoColor); - ((PostBaseViewHolder) holder).downvoteButton.setIconResource(R.drawable.ic_downvote_24dp); - ((PostBaseViewHolder) holder).downvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - } else if (holder instanceof PostCompactBaseViewHolder) { - holder.itemView.setBackgroundColor(mCardViewBackgroundColor); - ((PostCompactBaseViewHolder) holder).titleTextView.setTextColor(mPostTitleColor); - mGlide.clear(((PostCompactBaseViewHolder) holder).imageView); - mGlide.clear(((PostCompactBaseViewHolder) holder).iconGifImageView); - ((PostCompactBaseViewHolder) holder).stickiedPostImageView.setVisibility(View.GONE); - ((PostCompactBaseViewHolder) holder).relativeLayout.setVisibility(View.GONE); - ((PostCompactBaseViewHolder) holder).crosspostImageView.setVisibility(View.GONE); - ((PostCompactBaseViewHolder) holder).archivedImageView.setVisibility(View.GONE); - ((PostCompactBaseViewHolder) holder).lockedImageView.setVisibility(View.GONE); - ((PostCompactBaseViewHolder) holder).nsfwTextView.setVisibility(View.GONE); - ((PostCompactBaseViewHolder) holder).spoilerTextView.setVisibility(View.GONE); - ((PostCompactBaseViewHolder) holder).flairTextView.setVisibility(View.GONE); - ((PostCompactBaseViewHolder) holder).flairTextView.setText(""); - ((PostCompactBaseViewHolder) holder).linkTextView.setVisibility(View.GONE); - ((PostCompactBaseViewHolder) holder).progressBar.setVisibility(View.GONE); - ((PostCompactBaseViewHolder) holder).imageView.setVisibility(View.GONE); - ((PostCompactBaseViewHolder) holder).playButtonImageView.setVisibility(View.GONE); - ((PostCompactBaseViewHolder) holder).noPreviewPostImageFrameLayout.setVisibility(View.GONE); - ((PostCompactBaseViewHolder) holder).upvoteButton.setIconResource(R.drawable.ic_upvote_24dp); - ((PostCompactBaseViewHolder) holder).upvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - ((PostCompactBaseViewHolder) holder).scoreTextView.setTextColor(mPostIconAndInfoColor); - ((PostCompactBaseViewHolder) holder).downvoteButton.setIconResource(R.drawable.ic_downvote_24dp); - ((PostCompactBaseViewHolder) holder).downvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - } else if (holder instanceof PostGalleryViewHolder) { - holder.itemView.setBackgroundTintList(ColorStateList.valueOf(mCardViewBackgroundColor)); - - ((PostGalleryViewHolder) holder).binding.titleTextViewItemPostGallery.setText(""); - ((PostGalleryViewHolder) holder).binding.titleTextViewItemPostGallery.setVisibility(View.GONE); - mGlide.clear(((PostGalleryViewHolder) holder).binding.imageViewItemPostGallery); - ((PostGalleryViewHolder) holder).binding.imageViewItemPostGallery.setVisibility(View.GONE); - ((PostGalleryViewHolder) holder).binding.progressBarItemPostGallery.setVisibility(View.GONE); - ((PostGalleryViewHolder) holder).binding.loadImageErrorTextViewItemGallery.setVisibility(View.GONE); - ((PostGalleryViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostGallery.setVisibility(View.GONE); - ((PostGalleryViewHolder) holder).binding.imageViewNoPreviewItemPostGallery.setVisibility(View.GONE); - } else if (holder instanceof PostGalleryBaseGalleryTypeViewHolder) { - holder.itemView.setBackgroundTintList(ColorStateList.valueOf(mCardViewBackgroundColor)); - ((PostGalleryBaseGalleryTypeViewHolder) holder).frameLayout.setVisibility(View.GONE); - ((PostGalleryBaseGalleryTypeViewHolder) holder).noPreviewImageView.setVisibility(View.GONE); - } else if (holder instanceof PostMaterial3CardBaseViewHolder) { - holder.itemView.setBackgroundTintList(ColorStateList.valueOf(mFilledCardViewBackgroundColor)); - mGlide.clear(((PostMaterial3CardBaseViewHolder) holder).iconGifImageView); - ((PostMaterial3CardBaseViewHolder) holder).titleTextView.setTextColor(mPostTitleColor); - if (holder instanceof PostMaterial3CardBaseVideoAutoplayViewHolder) { - ((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).mediaUri = null; - if (((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).fetchRedgifsOrStreamableVideoCall != null && !((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).fetchRedgifsOrStreamableVideoCall.isCanceled()) { - ((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).fetchRedgifsOrStreamableVideoCall.cancel(); - ((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).fetchRedgifsOrStreamableVideoCall = null; - } - ((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).errorLoadingRedgifsImageView.setVisibility(View.GONE); - ((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).muteButton.setVisibility(View.GONE); - if (!((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).isManuallyPaused) { - ((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).resetVolume(); - } - mGlide.clear(((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).previewImageView); - ((PostMaterial3CardBaseVideoAutoplayViewHolder) holder).previewImageView.setVisibility(View.GONE); - } else if (holder instanceof PostMaterial3CardWithPreviewViewHolder) { - mGlide.clear(((PostMaterial3CardWithPreviewViewHolder) holder).binding.imageViewItemPostCard3WithPreview); - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.imageViewItemPostCard3WithPreview.setVisibility(View.GONE); - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.imageWrapperRelativeLayoutItemPostCard3WithPreview.setVisibility(View.GONE); - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.loadImageErrorTextViewItemPostCard3WithPreview.setVisibility(View.GONE); - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.imageViewNoPreviewGalleryItemPostCard3WithPreview.setVisibility(View.GONE); - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.progressBarItemPostCard3WithPreview.setVisibility(View.GONE); - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostCard3WithPreview.setVisibility(View.GONE); - ((PostMaterial3CardWithPreviewViewHolder) holder).binding.linkTextViewItemPostCard3WithPreview.setVisibility(View.GONE); - } else if (holder instanceof PostMaterial3CardBaseGalleryTypeViewHolder) { - ((PostMaterial3CardBaseGalleryTypeViewHolder) holder).frameLayout.setVisibility(View.GONE); - ((PostMaterial3CardBaseGalleryTypeViewHolder) holder).noPreviewImageView.setVisibility(View.GONE); - ((PostMaterial3CardBaseGalleryTypeViewHolder) holder).adapter.setGalleryImages(null); - } else if (holder instanceof PostMaterial3CardTextTypeViewHolder) { - ((PostMaterial3CardTextTypeViewHolder) holder).binding.contentTextViewItemPostCard3TextType.setText(""); - ((PostMaterial3CardTextTypeViewHolder) holder).binding.contentTextViewItemPostCard3TextType.setTextColor(mPostContentColor); - ((PostMaterial3CardTextTypeViewHolder) holder).binding.contentTextViewItemPostCard3TextType.setVisibility(View.GONE); - } - - mGlide.clear(((PostMaterial3CardBaseViewHolder) holder).iconGifImageView); - ((PostMaterial3CardBaseViewHolder) holder).stickiedPostImageView.setVisibility(View.GONE); - ((PostMaterial3CardBaseViewHolder) holder).upvoteButton.setIconResource(R.drawable.ic_upvote_24dp); - ((PostMaterial3CardBaseViewHolder) holder).upvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - ((PostMaterial3CardBaseViewHolder) holder).scoreTextView.setTextColor(mPostIconAndInfoColor); - ((PostMaterial3CardBaseViewHolder) holder).downvoteButton.setIconResource(R.drawable.ic_downvote_24dp); - ((PostMaterial3CardBaseViewHolder) holder).downvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - } - } - - @Nullable - @Override - public Object getKeyForOrder(int order) { - if (super.getItemCount() <= 0 || order >= super.getItemCount()) { - return null; - } - return order; - } - - @Nullable - @Override - public Integer getOrderForKey(@NonNull Object key) { - if (key instanceof Integer) { - return (Integer) key; - } - - return null; - } - - public void onItemSwipe(RecyclerView.ViewHolder viewHolder, int direction, int swipeLeftAction, int swipeRightAction) { - if (viewHolder instanceof PostBaseViewHolder) { - if (direction == ItemTouchHelper.LEFT || direction == ItemTouchHelper.START) { - if (swipeLeftAction == SharedPreferencesUtils.SWIPE_ACITON_UPVOTE) { - ((PostBaseViewHolder) viewHolder).upvoteButton.performClick(); - } else if (swipeLeftAction == SharedPreferencesUtils.SWIPE_ACITON_DOWNVOTE) { - ((PostBaseViewHolder) viewHolder).downvoteButton.performClick(); - } - } else { - if (swipeRightAction == SharedPreferencesUtils.SWIPE_ACITON_UPVOTE) { - ((PostBaseViewHolder) viewHolder).upvoteButton.performClick(); - } else if (swipeRightAction == SharedPreferencesUtils.SWIPE_ACITON_DOWNVOTE) { - ((PostBaseViewHolder) viewHolder).downvoteButton.performClick(); - } - } - } else if (viewHolder instanceof PostCompactBaseViewHolder) { - if (direction == ItemTouchHelper.LEFT || direction == ItemTouchHelper.START) { - if (swipeLeftAction == SharedPreferencesUtils.SWIPE_ACITON_UPVOTE) { - ((PostCompactBaseViewHolder) viewHolder).upvoteButton.performClick(); - } else if (swipeLeftAction == SharedPreferencesUtils.SWIPE_ACITON_DOWNVOTE) { - ((PostCompactBaseViewHolder) viewHolder).downvoteButton.performClick(); - } - } else { - if (swipeRightAction == SharedPreferencesUtils.SWIPE_ACITON_UPVOTE) { - ((PostCompactBaseViewHolder) viewHolder).upvoteButton.performClick(); - } else if (swipeRightAction == SharedPreferencesUtils.SWIPE_ACITON_DOWNVOTE) { - ((PostCompactBaseViewHolder) viewHolder).downvoteButton.performClick(); - } - } - } - } - - public interface Callback { - void typeChipClicked(int filter); - - void flairChipClicked(String flair); - - void nsfwChipClicked(); - - void currentlyBindItem(int position); - - void delayTransition(); - } - - private void openViewPostDetailActivity(Post post, int position) { - if (canStartActivity) { - canStartActivity = false; - Intent intent = new Intent(mActivity, ViewPostDetailActivity.class); - intent.putExtra(ViewPostDetailActivity.EXTRA_POST_DATA, post); - intent.putExtra(ViewPostDetailActivity.EXTRA_POST_LIST_POSITION, position); - intent.putExtra(ViewPostDetailActivity.EXTRA_POST_FRAGMENT_ID, mFragment.getPostFragmentId()); - mActivity.startActivity(intent); - } - } - - private void openMedia(Post post) { - openMedia(post, 0); - } - - private void openMedia(Post post, int galleryItemIndex) { - openMedia(post, galleryItemIndex, -1); - } - - private void openMedia(Post post, long videoProgress) { - openMedia(post, 0, videoProgress); - } - - private void openMedia(Post post, int galleryItemIndex, long videoProgress) { - if (canStartActivity) { - canStartActivity = false; - if (post.getPostType() == Post.VIDEO_TYPE) { - Intent intent = new Intent(mActivity, ViewVideoActivity.class); - if (post.isImgur()) { - intent.setData(Uri.parse(post.getVideoUrl())); - intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_IMGUR); - } else if (post.isRedgifs()) { - intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_REDGIFS); - intent.putExtra(ViewVideoActivity.EXTRA_REDGIFS_ID, post.getRedgifsId()); - if (post.isLoadRedgifsOrStreamableVideoSuccess()) { - intent.setData(Uri.parse(post.getVideoUrl())); - intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_DOWNLOAD_URL, post.getVideoDownloadUrl()); - } - } else if (post.isStreamable()) { - intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_STREAMABLE); - intent.putExtra(ViewVideoActivity.EXTRA_STREAMABLE_SHORT_CODE, post.getStreamableShortCode()); - if (post.isLoadRedgifsOrStreamableVideoSuccess()) { - intent.setData(Uri.parse(post.getVideoUrl())); - intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_DOWNLOAD_URL, post.getVideoDownloadUrl()); - } - } else { - intent.setData(Uri.parse(post.getVideoUrl())); - intent.putExtra(ViewVideoActivity.EXTRA_SUBREDDIT, post.getSubredditName()); - intent.putExtra(ViewVideoActivity.EXTRA_ID, post.getId()); - intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_DOWNLOAD_URL, post.getVideoDownloadUrl()); - } - intent.putExtra(ViewVideoActivity.EXTRA_POST, post); - if (videoProgress > 0) { - intent.putExtra(ViewVideoActivity.EXTRA_PROGRESS_SECONDS, videoProgress); - } - intent.putExtra(ViewVideoActivity.EXTRA_IS_NSFW, post.isNSFW()); - mActivity.startActivity(intent); - } else if (post.getPostType() == Post.IMAGE_TYPE) { - Intent intent = new Intent(mActivity, ViewImageOrGifActivity.class); - intent.putExtra(ViewImageOrGifActivity.EXTRA_IMAGE_URL_KEY, post.getUrl()); - intent.putExtra(ViewImageOrGifActivity.EXTRA_FILE_NAME_KEY, post.getSubredditName() - + "-" + post.getId() + ".jpg"); - intent.putExtra(ViewImageOrGifActivity.EXTRA_POST_TITLE_KEY, post.getTitle()); - intent.putExtra(ViewImageOrGifActivity.EXTRA_SUBREDDIT_OR_USERNAME_KEY, post.getSubredditName()); - intent.putExtra(ViewImageOrGifActivity.EXTRA_IS_NSFW, post.isNSFW()); - mActivity.startActivity(intent); - } else if (post.getPostType() == Post.GIF_TYPE) { - if (post.getMp4Variant() != null) { - Intent intent = new Intent(mActivity, ViewVideoActivity.class); - intent.setData(Uri.parse(post.getMp4Variant())); - intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_TYPE, ViewVideoActivity.VIDEO_TYPE_DIRECT); - intent.putExtra(ViewVideoActivity.EXTRA_SUBREDDIT, post.getSubredditName()); - intent.putExtra(ViewVideoActivity.EXTRA_ID, post.getId()); - intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_DOWNLOAD_URL, post.getMp4Variant()); - intent.putExtra(ViewVideoActivity.EXTRA_POST, post); - intent.putExtra(ViewVideoActivity.EXTRA_IS_NSFW, post.isNSFW()); - mActivity.startActivity(intent); - } else { - Intent intent = new Intent(mActivity, ViewImageOrGifActivity.class); - intent.putExtra(ViewImageOrGifActivity.EXTRA_FILE_NAME_KEY, post.getSubredditName() - + "-" + post.getId() + ".gif"); - intent.putExtra(ViewImageOrGifActivity.EXTRA_GIF_URL_KEY, post.getVideoUrl()); - intent.putExtra(ViewImageOrGifActivity.EXTRA_POST_TITLE_KEY, post.getTitle()); - intent.putExtra(ViewImageOrGifActivity.EXTRA_SUBREDDIT_OR_USERNAME_KEY, post.getSubredditName()); - intent.putExtra(ViewImageOrGifActivity.EXTRA_IS_NSFW, post.isNSFW()); - mActivity.startActivity(intent); - } - } else if (post.getPostType() == Post.LINK_TYPE || post.getPostType() == Post.NO_PREVIEW_LINK_TYPE) { - Intent intent = new Intent(mActivity, LinkResolverActivity.class); - Uri uri = Uri.parse(post.getUrl()); - intent.setData(uri); - intent.putExtra(LinkResolverActivity.EXTRA_IS_NSFW, post.isNSFW()); - mActivity.startActivity(intent); - } else if (post.getPostType() == Post.GALLERY_TYPE) { - Intent intent = new Intent(mActivity, ViewRedditGalleryActivity.class); - intent.putExtra(ViewRedditGalleryActivity.EXTRA_POST, post); - intent.putExtra(ViewRedditGalleryActivity.EXTRA_GALLERY_ITEM_INDEX, galleryItemIndex); - mActivity.startActivity(intent); - } - } - } - - public void setCanPlayVideo(boolean canPlayVideo) { - this.canPlayVideo = canPlayVideo; - } - - public class PostBaseViewHolder extends RecyclerView.ViewHolder { - AspectRatioGifImageView iconGifImageView; - TextView subredditTextView; - TextView userTextView; - ImageView stickiedPostImageView; - TextView postTimeTextView; - TextView titleTextView; - CustomTextView typeTextView; - ImageView archivedImageView; - ImageView lockedImageView; - ImageView crosspostImageView; - CustomTextView nsfwTextView; - CustomTextView spoilerTextView; - CustomTextView flairTextView; - ConstraintLayout bottomConstraintLayout; - MaterialButton upvoteButton; - TextView scoreTextView; - MaterialButton downvoteButton; - MaterialButton commentsCountButton; - MaterialButton saveButton; - MaterialButton shareButton; - Post post; - Post.Preview preview; - - boolean itemViewIsNotCardView = false; - - PostBaseViewHolder(@NonNull View itemView) { - super(itemView); - } - - void setBaseView(AspectRatioGifImageView iconGifImageView, - TextView subredditTextView, - TextView userTextView, - ImageView stickiedPostImageView, - TextView postTimeTextView, - TextView titleTextView, - CustomTextView typeTextView, - ImageView archivedImageView, - ImageView lockedImageView, - ImageView crosspostImageView, - CustomTextView nsfwTextView, - CustomTextView spoilerTextView, - CustomTextView flairTextView, - ConstraintLayout bottomConstraintLayout, - MaterialButton upvoteButton, - TextView scoreTextView, - MaterialButton downvoteButton, - MaterialButton commentsCountButton, - MaterialButton saveButton, - MaterialButton shareButton) { - this.iconGifImageView = iconGifImageView; - this.subredditTextView = subredditTextView; - this.userTextView = userTextView; - this.stickiedPostImageView = stickiedPostImageView; - this.postTimeTextView = postTimeTextView; - this.titleTextView = titleTextView; - this.typeTextView = typeTextView; - this.archivedImageView = archivedImageView; - this.lockedImageView = lockedImageView; - this.crosspostImageView = crosspostImageView; - this.nsfwTextView = nsfwTextView; - this.spoilerTextView = spoilerTextView; - this.flairTextView = flairTextView; - this.bottomConstraintLayout = bottomConstraintLayout; - this.upvoteButton = upvoteButton; - this.scoreTextView = scoreTextView; - this.downvoteButton = downvoteButton; - this.commentsCountButton = commentsCountButton; - this.saveButton = saveButton; - this.shareButton = shareButton; - - if (mVoteButtonsOnTheRight) { - ConstraintSet constraintSet = new ConstraintSet(); - constraintSet.clone(bottomConstraintLayout); - constraintSet.clear(upvoteButton.getId(), ConstraintSet.START); - constraintSet.clear(scoreTextView.getId(), ConstraintSet.START); - constraintSet.clear(downvoteButton.getId(), ConstraintSet.START); - constraintSet.clear(saveButton.getId(), ConstraintSet.END); - constraintSet.clear(shareButton.getId(), ConstraintSet.END); - constraintSet.connect(upvoteButton.getId(), ConstraintSet.END, scoreTextView.getId(), ConstraintSet.START); - constraintSet.connect(scoreTextView.getId(), ConstraintSet.END, downvoteButton.getId(), ConstraintSet.START); - constraintSet.connect(downvoteButton.getId(), ConstraintSet.END, ConstraintSet.PARENT_ID, ConstraintSet.END); - constraintSet.connect(commentsCountButton.getId(), ConstraintSet.START, saveButton.getId(), ConstraintSet.END); - constraintSet.connect(commentsCountButton.getId(), ConstraintSet.END, upvoteButton.getId(), ConstraintSet.START); - constraintSet.connect(saveButton.getId(), ConstraintSet.START, shareButton.getId(), ConstraintSet.END); - constraintSet.connect(shareButton.getId(), ConstraintSet.START, ConstraintSet.PARENT_ID, ConstraintSet.START); - constraintSet.setHorizontalBias(commentsCountButton.getId(), 0); - constraintSet.applyTo(bottomConstraintLayout); - } - - if (itemViewIsNotCardView) { - itemView.setBackgroundColor(mCardViewBackgroundColor); - } else { - itemView.setBackgroundTintList(ColorStateList.valueOf(mCardViewBackgroundColor)); - } - - if (mActivity.typeface != null) { - subredditTextView.setTypeface(mActivity.typeface); - userTextView.setTypeface(mActivity.typeface); - postTimeTextView.setTypeface(mActivity.typeface); - typeTextView.setTypeface(mActivity.typeface); - spoilerTextView.setTypeface(mActivity.typeface); - nsfwTextView.setTypeface(mActivity.typeface); - flairTextView.setTypeface(mActivity.typeface); - scoreTextView.setTypeface(mActivity.typeface); - commentsCountButton.setTypeface(mActivity.typeface); - } - if (mActivity.titleTypeface != null) { - titleTextView.setTypeface(mActivity.titleTypeface); - } - - subredditTextView.setTextColor(mSubredditColor); - userTextView.setTextColor(mUsernameColor); - postTimeTextView.setTextColor(mSecondaryTextColor); - titleTextView.setTextColor(mPostTitleColor); - stickiedPostImageView.setColorFilter(mStickiedPostIconTint, PorterDuff.Mode.SRC_IN); - typeTextView.setBackgroundColor(mPostTypeBackgroundColor); - typeTextView.setBorderColor(mPostTypeBackgroundColor); - typeTextView.setTextColor(mPostTypeTextColor); - spoilerTextView.setBackgroundColor(mSpoilerBackgroundColor); - spoilerTextView.setBorderColor(mSpoilerBackgroundColor); - spoilerTextView.setTextColor(mSpoilerTextColor); - nsfwTextView.setBackgroundColor(mNSFWBackgroundColor); - nsfwTextView.setBorderColor(mNSFWBackgroundColor); - nsfwTextView.setTextColor(mNSFWTextColor); - flairTextView.setBackgroundColor(mFlairBackgroundColor); - flairTextView.setBorderColor(mFlairBackgroundColor); - flairTextView.setTextColor(mFlairTextColor); - archivedImageView.setColorFilter(mArchivedIconTint, PorterDuff.Mode.SRC_IN); - lockedImageView.setColorFilter(mLockedIconTint, PorterDuff.Mode.SRC_IN); - crosspostImageView.setColorFilter(mCrosspostIconTint, PorterDuff.Mode.SRC_IN); - upvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - scoreTextView.setTextColor(mPostIconAndInfoColor); - downvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - commentsCountButton.setTextColor(mPostIconAndInfoColor); - commentsCountButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - saveButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - shareButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - - itemView.setOnClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position >= 0 && canStartActivity) { - Post post = getItem(position); - if (post != null) { - openViewPostDetailActivity(post, getBindingAdapterPosition()); - } - } - }); - - itemView.setOnTouchListener((v, event) -> { - if (event.getActionMasked() == MotionEvent.ACTION_UP || event.getActionMasked() == MotionEvent.ACTION_CANCEL) { - if (mFragment.isRecyclerViewItemSwipeable(PostBaseViewHolder.this)) { - mActivity.unlockSwipeRightToGoBack(); - } - } else { - if (mFragment.isRecyclerViewItemSwipeable(PostBaseViewHolder.this)) { - mActivity.lockSwipeRightToGoBack(); - } - } - return false; - }); - - userTextView.setOnClickListener(view -> { - if (canStartActivity) { - int position = getBindingAdapterPosition(); - if (position < 0) { - return; - } - Post post = getItem(position); - if (post == null || post.isAuthorDeleted()) { - return; - } - canStartActivity = false; - Intent intent = new Intent(mActivity, ViewUserDetailActivity.class); - intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, post.getAuthor()); - mActivity.startActivity(intent); - } - }); - - if (mDisplaySubredditName) { - subredditTextView.setOnClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position < 0) { - return; - } - Post post = getItem(position); - if (post != null) { - if (canStartActivity) { - canStartActivity = false; - Intent intent = new Intent(mActivity, ViewSubredditDetailActivity.class); - intent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME_KEY, - post.getSubredditName()); - mActivity.startActivity(intent); - } - } - }); - - iconGifImageView.setOnClickListener(view -> subredditTextView.performClick()); - } else { - subredditTextView.setOnClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position < 0) { - return; - } - Post post = getItem(position); - if (post != null) { - if (canStartActivity) { - canStartActivity = false; - Intent intent = new Intent(mActivity, ViewSubredditDetailActivity.class); - intent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME_KEY, - post.getSubredditName()); - mActivity.startActivity(intent); - } - } - }); - - iconGifImageView.setOnClickListener(view -> userTextView.performClick()); - } - - if (!(mActivity instanceof FilteredPostsActivity)) { - nsfwTextView.setOnClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position < 0) { - return; - } - Post post = getItem(position); - if (post != null) { - mCallback.nsfwChipClicked(); - } - }); - typeTextView.setOnClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position < 0) { - return; - } - Post post = getItem(position); - if (post != null) { - mCallback.typeChipClicked(post.getPostType()); - } - }); - - flairTextView.setOnClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position < 0) { - return; - } - Post post = getItem(position); - if (post != null) { - mCallback.flairChipClicked(post.getFlair()); - } - }); - } - - upvoteButton.setOnClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position < 0) { - return; - } - Post post = getItem(position); - if (post != null) { - if (mAccountName.equals(Account.ANONYMOUS_ACCOUNT)) { - Toast.makeText(mActivity, R.string.login_first, Toast.LENGTH_SHORT).show(); - return; - } - - if (post.isArchived()) { - Toast.makeText(mActivity, R.string.archived_post_vote_unavailable, Toast.LENGTH_SHORT).show(); - return; - } - - ColorStateList previousUpvoteButtonIconTint = upvoteButton.getIconTint(); - ColorStateList previousDownvoteButtonIconTint = downvoteButton.getIconTint(); - int previousScoreTextViewColor = scoreTextView.getCurrentTextColor(); - Drawable previousUpvoteButtonDrawable = upvoteButton.getIcon(); - Drawable previousDownvoteButtonDrawable = downvoteButton.getIcon(); - - int previousVoteType = post.getVoteType(); - String newVoteType; - - downvoteButton.setIconResource(R.drawable.ic_downvote_24dp); - downvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - - if (previousVoteType != 1) { - //Not upvoted before - post.setVoteType(1); - newVoteType = APIUtils.DIR_UPVOTE; - upvoteButton.setIconResource(R.drawable.ic_upvote_filled_24dp); - upvoteButton.setIconTint(ColorStateList.valueOf(mUpvotedColor)); - scoreTextView.setTextColor(mUpvotedColor); - } else { - //Upvoted before - post.setVoteType(0); - newVoteType = APIUtils.DIR_UNVOTE; - upvoteButton.setIconResource(R.drawable.ic_upvote_24dp); - upvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - scoreTextView.setTextColor(mPostIconAndInfoColor); - } - - if (!mHideTheNumberOfVotes) { - scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType())); - } - - VoteThing.voteThing(mActivity, mOauthRetrofit, mAccessToken, new VoteThing.VoteThingListener() { - @Override - public void onVoteThingSuccess(int position1) { - int currentPosition = getBindingAdapterPosition(); - if (newVoteType.equals(APIUtils.DIR_UPVOTE)) { - post.setVoteType(1); - if (currentPosition == position) { - upvoteButton.setIconResource(R.drawable.ic_upvote_filled_24dp); - upvoteButton.setIconTint(ColorStateList.valueOf(mUpvotedColor)); - scoreTextView.setTextColor(mUpvotedColor); - } - } else { - post.setVoteType(0); - if (currentPosition == position) { - upvoteButton.setIconResource(R.drawable.ic_upvote_24dp); - upvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - scoreTextView.setTextColor(mPostIconAndInfoColor); - } - } - - if (currentPosition == position) { - downvoteButton.setIconResource(R.drawable.ic_downvote_24dp); - downvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - if (!mHideTheNumberOfVotes) { - scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType())); - } - } - - EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post)); - } - - @Override - public void onVoteThingFail(int position1) { - Toast.makeText(mActivity, R.string.vote_failed, Toast.LENGTH_SHORT).show(); - post.setVoteType(previousVoteType); - if (getBindingAdapterPosition() == position) { - if (!mHideTheNumberOfVotes) { - scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + previousVoteType)); - } - upvoteButton.setIcon(previousUpvoteButtonDrawable); - upvoteButton.setIconTint(previousUpvoteButtonIconTint); - scoreTextView.setTextColor(previousScoreTextViewColor); - downvoteButton.setIcon(previousDownvoteButtonDrawable); - downvoteButton.setIconTint(previousDownvoteButtonIconTint); - } - - EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post)); - } - }, post.getFullName(), newVoteType, getBindingAdapterPosition()); - } - }); - - scoreTextView.setOnClickListener(view -> { - upvoteButton.performClick(); - }); - - downvoteButton.setOnClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position < 0) { - return; - } - Post post = getItem(position); - if (post != null) { - if (mAccountName.equals(Account.ANONYMOUS_ACCOUNT)) { - Toast.makeText(mActivity, R.string.login_first, Toast.LENGTH_SHORT).show(); - return; - } - - if (post.isArchived()) { - Toast.makeText(mActivity, R.string.archived_post_vote_unavailable, Toast.LENGTH_SHORT).show(); - return; - } - - ColorStateList previousUpvoteButtonIconTint = upvoteButton.getIconTint(); - ColorStateList previousDownvoteButtonIconTint = downvoteButton.getIconTint(); - int previousScoreTextViewColor = scoreTextView.getCurrentTextColor(); - Drawable previousUpvoteButtonDrawable = upvoteButton.getIcon(); - Drawable previousDownvoteButtonDrawable = downvoteButton.getIcon(); - - int previousVoteType = post.getVoteType(); - String newVoteType; - - upvoteButton.setIconResource(R.drawable.ic_upvote_24dp); - upvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - - if (previousVoteType != -1) { - //Not downvoted before - post.setVoteType(-1); - newVoteType = APIUtils.DIR_DOWNVOTE; - downvoteButton.setIconResource(R.drawable.ic_downvote_filled_24dp); - downvoteButton.setIconTint(ColorStateList.valueOf(mDownvotedColor)); - scoreTextView.setTextColor(mDownvotedColor); - } else { - //Downvoted before - post.setVoteType(0); - newVoteType = APIUtils.DIR_UNVOTE; - downvoteButton.setIconResource(R.drawable.ic_downvote_24dp); - downvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - scoreTextView.setTextColor(mPostIconAndInfoColor); - } - - if (!mHideTheNumberOfVotes) { - scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType())); - } - - VoteThing.voteThing(mActivity, mOauthRetrofit, mAccessToken, new VoteThing.VoteThingListener() { - @Override - public void onVoteThingSuccess(int position1) { - int currentPosition = getBindingAdapterPosition(); - if (newVoteType.equals(APIUtils.DIR_DOWNVOTE)) { - post.setVoteType(-1); - if (currentPosition == position) { - downvoteButton.setIconResource(R.drawable.ic_downvote_filled_24dp); - downvoteButton.setIconTint(ColorStateList.valueOf(mDownvotedColor)); - scoreTextView.setTextColor(mDownvotedColor); - } - } else { - post.setVoteType(0); - if (currentPosition == position) { - downvoteButton.setIconResource(R.drawable.ic_downvote_24dp); - downvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - scoreTextView.setTextColor(mPostIconAndInfoColor); - } - } - - if (currentPosition == position) { - upvoteButton.setIconResource(R.drawable.ic_upvote_24dp); - upvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - if (!mHideTheNumberOfVotes) { - scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType())); - } - } - - EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post)); - } - - @Override - public void onVoteThingFail(int position1) { - Toast.makeText(mActivity, R.string.vote_failed, Toast.LENGTH_SHORT).show(); - post.setVoteType(previousVoteType); - if (getBindingAdapterPosition() == position) { - if (!mHideTheNumberOfVotes) { - scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + previousVoteType)); - } - upvoteButton.setIcon(previousUpvoteButtonDrawable); - upvoteButton.setIconTint(previousUpvoteButtonIconTint); - scoreTextView.setTextColor(previousScoreTextViewColor); - downvoteButton.setIcon(previousDownvoteButtonDrawable); - downvoteButton.setIconTint(previousDownvoteButtonIconTint); - } - - EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post)); - } - }, post.getFullName(), newVoteType, getBindingAdapterPosition()); - } - }); - - saveButton.setOnClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position < 0) { - return; - } - Post post = getItem(position); - if (post != null) { - if (mAccountName.equals(Account.ANONYMOUS_ACCOUNT)) { - Toast.makeText(mActivity, R.string.login_first, Toast.LENGTH_SHORT).show(); - return; - } - - if (post.isSaved()) { - saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp); - SaveThing.unsaveThing(mOauthRetrofit, mAccessToken, post.getFullName(), - new SaveThing.SaveThingListener() { - @Override - public void success() { - post.setSaved(false); - if (getBindingAdapterPosition() == position) { - saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp); - } - Toast.makeText(mActivity, R.string.post_unsaved_success, Toast.LENGTH_SHORT).show(); - EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post)); - } - - @Override - public void failed() { - post.setSaved(true); - if (getBindingAdapterPosition() == position) { - saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp); - } - Toast.makeText(mActivity, R.string.post_unsaved_failed, Toast.LENGTH_SHORT).show(); - EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post)); - } - }); - } else { - saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp); - SaveThing.saveThing(mOauthRetrofit, mAccessToken, post.getFullName(), - new SaveThing.SaveThingListener() { - @Override - public void success() { - post.setSaved(true); - if (getBindingAdapterPosition() == position) { - saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp); - } - Toast.makeText(mActivity, R.string.post_saved_success, Toast.LENGTH_SHORT).show(); - EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post)); - } - - @Override - public void failed() { - post.setSaved(false); - if (getBindingAdapterPosition() == position) { - saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp); - } - Toast.makeText(mActivity, R.string.post_saved_failed, Toast.LENGTH_SHORT).show(); - EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post)); - } - }); - } - } - }); - - shareButton.setOnClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position < 0) { - return; - } - Post post = getItem(position); - if (post != null) { - shareLink(post); - } - }); - - shareButton.setOnLongClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position < 0) { - return false; - } - Post post = getItem(position); - if (post != null) { - mActivity.copyLink(post.getPermalink()); - return true; - } - return false; - }); - } - - void setBaseView(AspectRatioGifImageView iconGifImageView, - TextView subredditTextView, - TextView userTextView, - ImageView stickiedPostImageView, - TextView postTimeTextView, - TextView titleTextView, - CustomTextView typeTextView, - ImageView archivedImageView, - ImageView lockedImageView, - ImageView crosspostImageView, - CustomTextView nsfwTextView, - CustomTextView spoilerTextView, - CustomTextView flairTextView, - ConstraintLayout bottomConstraintLayout, - MaterialButton upvoteButton, - TextView scoreTextView, - MaterialButton downvoteButton, - MaterialButton commentsCountButton, - MaterialButton saveButton, - MaterialButton shareButton, boolean itemViewIsNotCardView) { - this.itemViewIsNotCardView = itemViewIsNotCardView; - - setBaseView(iconGifImageView, subredditTextView, userTextView, stickiedPostImageView, postTimeTextView, - titleTextView, typeTextView, archivedImageView, lockedImageView, crosspostImageView, - nsfwTextView, spoilerTextView, flairTextView, bottomConstraintLayout, - upvoteButton, scoreTextView, downvoteButton, commentsCountButton, saveButton, shareButton); - } - } - - @UnstableApi - class PostBaseVideoAutoplayViewHolder extends PostBaseViewHolder implements ToroPlayer { - AspectRatioFrameLayout aspectRatioFrameLayout; - GifImageView previewImageView; - ImageView errorLoadingVideoImageView; - PlayerView videoPlayer; - ImageView muteButton; - ImageView fullscreenButton; - ImageView playPauseButton; - DefaultTimeBar progressBar; - @Nullable - Container container; - @Nullable - ExoPlayerViewHelper helper; - private Uri mediaUri; - private float volume; - public Call<String> fetchRedgifsOrStreamableVideoCall; - private boolean isManuallyPaused; - private Drawable playDrawable; - private Drawable pauseDrawable; - - @OptIn(markerClass = UnstableApi.class) - PostBaseVideoAutoplayViewHolder(View rootView, - AspectRatioGifImageView iconGifImageView, - TextView subredditTextView, - TextView userTextView, - ImageView stickiedPostImageView, - TextView postTimeTextView, - TextView titleTextView, - CustomTextView typeTextView, - ImageView archivedImageView, - ImageView lockedImageView, - ImageView crosspostImageView, - CustomTextView nsfwTextView, - CustomTextView spoilerTextView, - CustomTextView flairTextView, - AspectRatioFrameLayout aspectRatioFrameLayout, - GifImageView previewImageView, - ImageView errorLoadingVideoImageView, - PlayerView videoPlayer, - ImageView muteButton, - ImageView fullscreenButton, - ImageView playPauseButton, - DefaultTimeBar progressBar, - ConstraintLayout bottomConstraintLayout, - MaterialButton upvoteButton, - TextView scoreTextView, - MaterialButton downvoteButton, - MaterialButton commentsCountButton, - MaterialButton saveButton, - MaterialButton shareButton) { - super(rootView); - setBaseView( - iconGifImageView, - subredditTextView, - userTextView, - stickiedPostImageView, - postTimeTextView, - titleTextView, - typeTextView, - archivedImageView, - lockedImageView, - crosspostImageView, - nsfwTextView, - spoilerTextView, - flairTextView, - bottomConstraintLayout, - upvoteButton, - scoreTextView, - downvoteButton, - commentsCountButton, - saveButton, - shareButton); - - this.aspectRatioFrameLayout = aspectRatioFrameLayout; - this.previewImageView = previewImageView; - this.errorLoadingVideoImageView = errorLoadingVideoImageView; - this.videoPlayer = videoPlayer; - this.muteButton = muteButton; - this.fullscreenButton = fullscreenButton; - this.playPauseButton = playPauseButton; - this.progressBar = progressBar; - playDrawable = AppCompatResources.getDrawable(mActivity, R.drawable.ic_play_arrow_24dp); - pauseDrawable = AppCompatResources.getDrawable(mActivity, R.drawable.ic_pause_24dp); - - aspectRatioFrameLayout.setOnClickListener(null); - - muteButton.setOnClickListener(view -> { - if (helper != null) { - if (helper.getVolume() != 0) { - muteButton.setImageDrawable(ContextCompat.getDrawable(mActivity, R.drawable.ic_mute_24dp)); - helper.setVolume(0f); - volume = 0f; - mFragment.videoAutoplayChangeMutingOption(true); - } else { - muteButton.setImageDrawable(ContextCompat.getDrawable(mActivity, R.drawable.ic_unmute_24dp)); - helper.setVolume(1f); - volume = 1f; - mFragment.videoAutoplayChangeMutingOption(false); - } - } - }); - - fullscreenButton.setOnClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position < 0) { - return; - } - Post post = getItem(position); - if (post != null) { - if (helper != null) { - openMedia(post, helper.getLatestPlaybackInfo().getResumePosition()); - } else { - openMedia(post, -1); - } - } - }); - - playPauseButton.setOnClickListener(view -> { - if (isPlaying()) { - pause(); - isManuallyPaused = true; - savePlaybackInfo(getPlayerOrder(), getCurrentPlaybackInfo()); - } else { - isManuallyPaused = false; - play(); - } - }); - - progressBar.addListener(new TimeBar.OnScrubListener() { - @Override - public void onScrubStart(TimeBar timeBar, long position) { - - } - - @Override - public void onScrubMove(TimeBar timeBar, long position) { - - } - - @Override - public void onScrubStop(TimeBar timeBar, long position, boolean canceled) { - if (!canceled) { - savePlaybackInfo(getPlayerOrder(), getCurrentPlaybackInfo()); - } - } - }); - - previewImageView.setOnClickListener(view -> fullscreenButton.performClick()); - - videoPlayer.setOnClickListener(view -> { - if (mEasierToWatchInFullScreen && videoPlayer.isControllerFullyVisible()) { - fullscreenButton.performClick(); - } - }); - } - - void bindVideoUri(Uri videoUri) { - mediaUri = videoUri; - } - - void setVolume(float volume) { - this.volume = volume; - } - - void resetVolume() { - volume = 0f; - } - - private void savePlaybackInfo(int order, @Nullable PlaybackInfo playbackInfo) { - if (container != null) container.savePlaybackInfo(order, playbackInfo); - } - - void loadFallbackDirectVideo() { - if (post.getVideoFallBackDirectUrl() != null) { - mediaUri = Uri.parse(post.getVideoFallBackDirectUrl()); - post.setVideoDownloadUrl(post.getVideoFallBackDirectUrl()); - post.setVideoUrl(post.getVideoFallBackDirectUrl()); - post.setLoadRedgifsOrStreamableVideoSuccess(true); - if (container != null) { - container.onScrollStateChanged(RecyclerView.SCROLL_STATE_IDLE); - } - } - } - - @NonNull - @Override - public View getPlayerView() { - return videoPlayer; - } - - @NonNull - @Override - public PlaybackInfo getCurrentPlaybackInfo() { - return helper != null && mediaUri != null ? helper.getLatestPlaybackInfo() : new PlaybackInfo(); - } - - @Override - public void initialize(@NonNull Container container, @NonNull PlaybackInfo playbackInfo) { - if (mediaUri == null) { - return; - } - if (this.container == null) { - this.container = container; - } - if (helper == null) { - helper = new ExoPlayerViewHelper(this, mediaUri, null, mExoCreator); - helper.addEventListener(new Playable.DefaultEventListener() { - @Override - public void onEvents(@NonNull Player player, @NonNull Player.Events events) { - if (events.containsAny( - Player.EVENT_PLAY_WHEN_READY_CHANGED, - Player.EVENT_PLAYBACK_STATE_CHANGED, - Player.EVENT_PLAYBACK_SUPPRESSION_REASON_CHANGED)) { - playPauseButton.setImageDrawable(Util.shouldShowPlayButton(player) ? playDrawable : pauseDrawable); - } - } - - @Override - public void onTracksChanged(@NonNull Tracks tracks) { - ImmutableList<Tracks.Group> trackGroups = tracks.getGroups(); - if (!trackGroups.isEmpty()) { - for (int i = 0; i < trackGroups.size(); i++) { - String mimeType = trackGroups.get(i).getTrackFormat(0).sampleMimeType; - if (mimeType != null && mimeType.contains("audio")) { - if (mFragment.getMasterMutingOption() != null) { - volume = mFragment.getMasterMutingOption() ? 0f : 1f; - } - helper.setVolume(volume); - muteButton.setVisibility(View.VISIBLE); - if (volume != 0f) { - muteButton.setImageDrawable(ContextCompat.getDrawable(mActivity, R.drawable.ic_unmute_24dp)); - } else { - muteButton.setImageDrawable(ContextCompat.getDrawable(mActivity, R.drawable.ic_mute_24dp)); - } - break; - } - } - } else { - muteButton.setVisibility(View.GONE); - } - } - - @Override - public void onRenderedFirstFrame() { - mGlide.clear(previewImageView); - previewImageView.setVisibility(View.GONE); - } - - @Override - public void onPlayerError(@NonNull PlaybackException error) { - if (post.getVideoFallBackDirectUrl() == null || post.getVideoFallBackDirectUrl().equals(mediaUri.toString())) { - errorLoadingVideoImageView.setVisibility(View.VISIBLE); - } else { - loadFallbackDirectVideo(); - } - } - }); - } - helper.initialize(container, playbackInfo); - } - - @Override - public void play() { - if (helper != null && mediaUri != null) { - if (!isPlaying() && isManuallyPaused) { - helper.play(); - pause(); - helper.setVolume(volume); - } else { - helper.play(); - } - } - } - - @Override - public void pause() { - if (helper != null) helper.pause(); - } - - @Override - public boolean isPlaying() { - return helper != null && helper.isPlaying(); - } - - @Override - public void release() { - if (helper != null) { - helper.release(); - helper = null; - } - isManuallyPaused = false; - container = null; - } - - @Override - public boolean wantsToPlay() { - return canPlayVideo && mediaUri != null && ToroUtil.visibleAreaOffset(this, itemView.getParent()) >= mStartAutoplayVisibleAreaOffset; - } - - @Override - public int getPlayerOrder() { - return getBindingAdapterPosition(); - } - } - - @UnstableApi - class PostVideoAutoplayViewHolder extends PostBaseVideoAutoplayViewHolder { - PostVideoAutoplayViewHolder(ItemPostVideoTypeAutoplayBinding binding) { - super(binding.getRoot(), - binding.iconGifImageViewItemPostVideoTypeAutoplay, - binding.subredditNameTextViewItemPostVideoTypeAutoplay, - binding.userTextViewItemPostVideoTypeAutoplay, - binding.stickiedPostImageViewItemPostVideoTypeAutoplay, - binding.postTimeTextViewItemPostVideoTypeAutoplay, - binding.titleTextViewItemPostVideoTypeAutoplay, - binding.typeTextViewItemPostVideoTypeAutoplay, - binding.archivedImageViewItemPostVideoTypeAutoplay, - binding.lockedImageViewItemPostVideoTypeAutoplay, - binding.crosspostImageViewItemPostVideoTypeAutoplay, - binding.nsfwTextViewItemPostVideoTypeAutoplay, - binding.spoilerCustomTextViewItemPostVideoTypeAutoplay, - binding.flairCustomTextViewItemPostVideoTypeAutoplay, - binding.aspectRatioFrameLayoutItemPostVideoTypeAutoplay, - binding.previewImageViewItemPostVideoTypeAutoplay, - binding.errorLoadingVideoImageViewItemPostVideoTypeAutoplay, - binding.playerViewItemPostVideoTypeAutoplay, - binding.getRoot().findViewById(R.id.mute_exo_playback_control_view), - binding.getRoot().findViewById(R.id.fullscreen_exo_playback_control_view), - binding.getRoot().findViewById(R.id.exo_play), - binding.getRoot().findViewById(R.id.exo_progress), - binding.bottomConstraintLayoutItemPostVideoTypeAutoplay, - binding.upvoteButtonItemPostVideoTypeAutoplay, - binding.scoreTextViewItemPostVideoTypeAutoplay, - binding.downvoteButtonItemPostVideoTypeAutoplay, - binding.commentsCountButtonItemPostVideoTypeAutoplay, - binding.saveButtonItemPostVideoTypeAutoplay, - binding.shareButtonItemPostVideoTypeAutoplay); - } - } - - @UnstableApi - class PostVideoAutoplayLegacyControllerViewHolder extends PostBaseVideoAutoplayViewHolder { - PostVideoAutoplayLegacyControllerViewHolder(ItemPostVideoTypeAutoplayLegacyControllerBinding binding) { - super(binding.getRoot(), - binding.iconGifImageViewItemPostVideoTypeAutoplay, - binding.subredditNameTextViewItemPostVideoTypeAutoplay, - binding.userTextViewItemPostVideoTypeAutoplay, - binding.stickiedPostImageViewItemPostVideoTypeAutoplay, - binding.postTimeTextViewItemPostVideoTypeAutoplay, - binding.titleTextViewItemPostVideoTypeAutoplay, - binding.typeTextViewItemPostVideoTypeAutoplay, - binding.archivedImageViewItemPostVideoTypeAutoplay, - binding.lockedImageViewItemPostVideoTypeAutoplay, - binding.crosspostImageViewItemPostVideoTypeAutoplay, - binding.nsfwTextViewItemPostVideoTypeAutoplay, - binding.spoilerCustomTextViewItemPostVideoTypeAutoplay, - binding.flairCustomTextViewItemPostVideoTypeAutoplay, - binding.aspectRatioFrameLayoutItemPostVideoTypeAutoplay, - binding.previewImageViewItemPostVideoTypeAutoplay, - binding.errorLoadingVideoImageViewItemPostVideoTypeAutoplay, - binding.playerViewItemPostVideoTypeAutoplay, - binding.getRoot().findViewById(R.id.mute_exo_playback_control_view), - binding.getRoot().findViewById(R.id.fullscreen_exo_playback_control_view), - binding.getRoot().findViewById(R.id.exo_play), - binding.getRoot().findViewById(R.id.exo_progress), - binding.bottomConstraintLayoutItemPostVideoTypeAutoplay, - binding.upvoteButtonItemPostVideoTypeAutoplay, - binding.scoreTextViewItemPostVideoTypeAutoplay, - binding.downvoteButtonItemPostVideoTypeAutoplay, - binding.commentsCountButtonItemPostVideoTypeAutoplay, - binding.saveButtonItemPostVideoTypeAutoplay, - binding.shareButtonItemPostVideoTypeAutoplay); - } - } - - class PostWithPreviewTypeViewHolder extends PostBaseViewHolder { - ItemPostWithPreviewBinding binding; - RequestListener<Drawable> glideRequestListener; - - PostWithPreviewTypeViewHolder(@NonNull ItemPostWithPreviewBinding binding) { - super(binding.getRoot()); - this.binding = binding; - setBaseView( - binding.iconGifImageViewItemPostWithPreview, - binding.subredditNameTextViewItemPostWithPreview, - binding.userTextViewItemPostWithPreview, - binding.stickiedPostImageViewItemPostWithPreview, - binding.postTimeTextViewItemPostWithPreview, - binding.titleTextViewItemPostWithPreview, - binding.typeTextViewItemPostWithPreview, - binding.archivedImageViewItemPostWithPreview, - binding.lockedImageViewItemPostWithPreview, - binding.crosspostImageViewItemPostWithPreview, - binding.nsfwTextViewItemPostWithPreview, - binding.spoilerCustomTextViewItemPostWithPreview, - binding.flairCustomTextViewItemPostWithPreview, - binding.bottomConstraintLayoutItemPostWithPreview, - binding.upvoteButtonItemPostWithPreview, - binding.scoreTextViewItemPostWithPreview, - binding.downvoteButtonItemPostWithPreview, - binding.commentsCountButtonItemPostWithPreview, - binding.saveButtonItemPostWithPreview, - binding.shareButtonItemPostWithPreview); - - if (mActivity.typeface != null) { - binding.linkTextViewItemPostWithPreview.setTypeface(mActivity.typeface); - binding.loadImageErrorTextViewItemPostWithPreview.setTypeface(mActivity.typeface); - } - binding.linkTextViewItemPostWithPreview.setTextColor(mSecondaryTextColor); - binding.imageViewNoPreviewGalleryItemPostWithPreview.setBackgroundColor(mNoPreviewPostTypeBackgroundColor); - binding.imageViewNoPreviewGalleryItemPostWithPreview.setColorFilter(mNoPreviewPostTypeIconTint, android.graphics.PorterDuff.Mode.SRC_IN); - binding.progressBarItemPostWithPreview.setIndeterminateTintList(ColorStateList.valueOf(mColorAccent)); - binding.videoOrGifIndicatorImageViewItemPostWithPreview.setColorFilter(mMediaIndicatorIconTint, PorterDuff.Mode.SRC_IN); - binding.videoOrGifIndicatorImageViewItemPostWithPreview.setBackgroundTintList(ColorStateList.valueOf(mMediaIndicatorBackgroundColor)); - binding.loadImageErrorTextViewItemPostWithPreview.setTextColor(mPrimaryTextColor); - - binding.imageViewItemPostWithPreview.setOnClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position < 0) { - return; - } - Post post = getItem(position); - if (post != null) { - openMedia(post); - } - }); - - binding.loadImageErrorTextViewItemPostWithPreview.setOnClickListener(view -> { - binding.progressBarItemPostWithPreview.setVisibility(View.VISIBLE); - binding.loadImageErrorTextViewItemPostWithPreview.setVisibility(View.GONE); - loadImage(this); - }); - - binding.imageViewNoPreviewGalleryItemPostWithPreview.setOnClickListener(view -> { - binding.imageViewItemPostWithPreview.performClick(); - }); - - glideRequestListener = new RequestListener<>() { - @Override - public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) { - binding.progressBarItemPostWithPreview.setVisibility(View.GONE); - binding.loadImageErrorTextViewItemPostWithPreview.setVisibility(View.VISIBLE); - return false; - } - - @Override - public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) { - binding.loadImageErrorTextViewItemPostWithPreview.setVisibility(View.GONE); - binding.progressBarItemPostWithPreview.setVisibility(View.GONE); - return false; - } - }; - } - } - - public class PostBaseGalleryTypeViewHolder extends PostBaseViewHolder { - FrameLayout frameLayout; - RecyclerView galleryRecyclerView; - CustomTextView imageIndexTextView; - ImageView noPreviewImageView; - - PostGalleryTypeImageRecyclerViewAdapter adapter; - private boolean swipeLocked; - - PostBaseGalleryTypeViewHolder(View rootView, - AspectRatioGifImageView iconGifImageView, - TextView subredditTextView, - TextView userTextView, - ImageView stickiedPostImageView, - TextView postTimeTextView, - TextView titleTextView, - CustomTextView typeTextView, - ImageView archivedImageView, - ImageView lockedImageView, - ImageView crosspostImageView, - CustomTextView nsfwTextView, - CustomTextView spoilerTextView, - CustomTextView flairTextView, - FrameLayout frameLayout, - RecyclerView galleryRecyclerView, - CustomTextView imageIndexTextView, - ImageView noPreviewImageView, - ConstraintLayout bottomConstraintLayout, - MaterialButton upvoteButton, - TextView scoreTextView, - MaterialButton downvoteButton, - MaterialButton commentsCountButton, - MaterialButton saveButton, - MaterialButton shareButton, - boolean itemViewIsNotCardView) { - super(rootView); - setBaseView( - iconGifImageView, - subredditTextView, - userTextView, - stickiedPostImageView, - postTimeTextView, - titleTextView, - typeTextView, - archivedImageView, - lockedImageView, - crosspostImageView, - nsfwTextView, - spoilerTextView, - flairTextView, - bottomConstraintLayout, - upvoteButton, - scoreTextView, - downvoteButton, - commentsCountButton, - saveButton, - shareButton, - itemViewIsNotCardView); - - this.frameLayout = frameLayout; - this.galleryRecyclerView = galleryRecyclerView; - this.imageIndexTextView = imageIndexTextView; - this.noPreviewImageView = noPreviewImageView; - - imageIndexTextView.setTextColor(mMediaIndicatorIconTint); - imageIndexTextView.setBackgroundColor(mMediaIndicatorBackgroundColor); - imageIndexTextView.setBorderColor(mMediaIndicatorBackgroundColor); - if (mActivity.typeface != null) { - imageIndexTextView.setTypeface(mActivity.typeface); - } - - noPreviewImageView.setBackgroundColor(mNoPreviewPostTypeBackgroundColor); - noPreviewImageView.setColorFilter(mNoPreviewPostTypeIconTint, android.graphics.PorterDuff.Mode.SRC_IN); - - adapter = new PostGalleryTypeImageRecyclerViewAdapter(mGlide, mActivity.typeface, - mSaveMemoryCenterInsideDownsampleStrategy, mColorAccent, mPrimaryTextColor, mScale, - galleryImage -> itemView.performLongClick()); - galleryRecyclerView.setOnTouchListener((v, motionEvent) -> { - if (motionEvent.getActionMasked() == MotionEvent.ACTION_UP || motionEvent.getActionMasked() == MotionEvent.ACTION_CANCEL) { - if (mActivity.mSliderPanel != null) { - mActivity.mSliderPanel.requestDisallowInterceptTouchEvent(false); - } - - if (mActivity.mViewPager2 != null) { - mActivity.mViewPager2.setUserInputEnabled(true); - } - mActivity.unlockSwipeRightToGoBack(); - swipeLocked = false; - } else { - if (mActivity.mSliderPanel != null) { - mActivity.mSliderPanel.requestDisallowInterceptTouchEvent(true); - } - if (mActivity.mViewPager2 != null) { - mActivity.mViewPager2.setUserInputEnabled(false); - } - mActivity.lockSwipeRightToGoBack(); - swipeLocked = true; - } - - return false; - }); - galleryRecyclerView.setAdapter(adapter); - new PagerSnapHelper().attachToRecyclerView(galleryRecyclerView); - galleryRecyclerView.setRecycledViewPool(mGalleryRecycledViewPool); - LinearLayoutManagerBugFixed layoutManager = new LinearLayoutManagerBugFixed(mActivity, RecyclerView.HORIZONTAL, false); - galleryRecyclerView.setLayoutManager(layoutManager); - galleryRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { - @Override - public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) { - super.onScrollStateChanged(recyclerView, newState); - } - - @Override - public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { - super.onScrolled(recyclerView, dx, dy); - imageIndexTextView.setText(mActivity.getString(R.string.image_index_in_gallery, layoutManager.findFirstVisibleItemPosition() + 1, post.getGallery().size())); - } - }); - galleryRecyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() { - private float downX; - private float downY; - private boolean dragged; - private final int minTouchSlop = ViewConfiguration.get(mActivity).getScaledTouchSlop(); - - @Override - public boolean onInterceptTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) { - int action = e.getAction(); - switch (action) { - case MotionEvent.ACTION_DOWN: - downX = e.getRawX(); - downY = e.getRawY(); - break; - case MotionEvent.ACTION_MOVE: - if(Math.abs(e.getRawX() - downX) > minTouchSlop || Math.abs(e.getRawY() - downY) > minTouchSlop) { - dragged = true; - } - break; - case MotionEvent.ACTION_UP: - if (!dragged) { - int position = getBindingAdapterPosition(); - if (position >= 0) { - if (post != null) { - openMedia(post, layoutManager.findFirstVisibleItemPosition()); - } - } - } - - downX = 0; - downY = 0; - dragged = false; - } - return false; - } - - @Override - public void onTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) { - - } - - @Override - public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { - - } - }); - - noPreviewImageView.setOnClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position < 0) { - return; - } - if (post != null) { - openMedia(post, 0); - } - }); - } - - public boolean isSwipeLocked() { - return swipeLocked; - } - } - - public class PostGalleryTypeViewHolder extends PostBaseGalleryTypeViewHolder { - - PostGalleryTypeViewHolder(ItemPostGalleryTypeBinding binding) { - super(binding.getRoot(), - binding.iconGifImageViewItemPostGalleryType, - binding.subredditNameTextViewItemPostGalleryType, - binding.userTextViewItemPostGalleryType, - binding.stickiedPostImageViewItemPostGalleryType, - binding.postTimeTextViewItemPostGalleryType, - binding.titleTextViewItemPostGalleryType, - binding.typeTextViewItemPostGalleryType, - binding.archivedImageViewItemPostGalleryType, - binding.lockedImageViewItemPostGalleryType, - binding.crosspostImageViewItemPostGalleryType, - binding.nsfwTextViewItemPostGalleryType, - binding.spoilerTextViewItemPostGalleryType, - binding.flairTextViewItemPostGalleryType, - binding.galleryFrameLayoutItemPostGalleryType, - binding.galleryRecyclerViewItemPostGalleryType, - binding.imageIndexTextViewItemPostGalleryType, - binding.noPreviewImageViewItemPostGalleryType, - binding.bottomConstraintLayoutItemPostGalleryType, - binding.upvoteButtonItemPostGalleryType, - binding.scoreTextViewItemPostGalleryType, - binding.downvoteButtonItemPostGalleryType, - binding.commentsCountButtonItemPostGalleryType, - binding.saveButtonItemPostGalleryType, - binding.shareButtonItemPostGalleryType, - false); - } - } - - class PostTextTypeViewHolder extends PostBaseViewHolder { - - ItemPostTextBinding binding; - - PostTextTypeViewHolder(@NonNull ItemPostTextBinding binding) { - super(binding.getRoot()); - this.binding = binding; - setBaseView( - binding.iconGifImageViewItemPostTextType, - binding.subredditNameTextViewItemPostTextType, - binding.userTextViewItemPostTextType, - binding.stickiedPostImageViewItemPostTextType, - binding.postTimeTextViewItemPostTextType, - binding.titleTextViewItemPostTextType, - binding.typeTextViewItemPostTextType, - binding.archivedImageViewItemPostTextType, - binding.lockedImageViewItemPostTextType, - binding.crosspostImageViewItemPostTextType, - binding.nsfwTextViewItemPostTextType, - binding.spoilerCustomTextViewItemPostTextType, - binding.flairCustomTextViewItemPostTextType, - binding.bottomConstraintLayoutItemPostTextType, - binding.upvoteButtonItemPostTextType, - binding.scoreTextViewItemPostTextType, - binding.downvoteButtonItemPostTextType, - binding.commentsCountButtonItemPostTextType, - binding.saveButtonItemPostTextType, - binding.shareButtonItemPostTextType); - - if (mActivity.contentTypeface != null) { - binding.contentTextViewItemPostTextType.setTypeface(mActivity.titleTypeface); - } - binding.contentTextViewItemPostTextType.setTextColor(mPostContentColor); - } - } - - public class PostCompactBaseViewHolder extends RecyclerView.ViewHolder { - AspectRatioGifImageView iconGifImageView; - TextView nameTextView; - ImageView stickiedPostImageView; - TextView postTimeTextView; - ConstraintLayout titleAndImageConstraintLayout; - TextView titleTextView; - CustomTextView typeTextView; - ImageView archivedImageView; - ImageView lockedImageView; - ImageView crosspostImageView; - CustomTextView nsfwTextView; - CustomTextView spoilerTextView; - CustomTextView flairTextView; - TextView linkTextView; - RelativeLayout relativeLayout; - ProgressBar progressBar; - ImageView imageView; - ImageView playButtonImageView; - FrameLayout noPreviewPostImageFrameLayout; - ImageView noPreviewPostImageView; - Barrier imageBarrier; - ConstraintLayout bottomConstraintLayout; - MaterialButton upvoteButton; - TextView scoreTextView; - MaterialButton downvoteButton; - MaterialButton commentsCountButton; - MaterialButton saveButton; - MaterialButton shareButton; - View divider; - RequestListener<Drawable> requestListener; - Post post; - - PostCompactBaseViewHolder(View itemView) { - super(itemView); - } - - void setBaseView(AspectRatioGifImageView iconGifImageView, - TextView nameTextView, - ImageView stickiedPostImageView, - TextView postTimeTextView, - ConstraintLayout titleAndImageConstraintLayout, - TextView titleTextView, - CustomTextView typeTextView, - ImageView archivedImageView, - ImageView lockedImageView, - ImageView crosspostImageView, - CustomTextView nsfwTextView, - CustomTextView spoilerTextView, - CustomTextView flairTextView, - TextView linkTextView, - RelativeLayout relativeLayout, - ProgressBar progressBar, - ImageView imageView, - ImageView playButtonImageView, - FrameLayout noPreviewLinkImageFrameLayout, - ImageView noPreviewLinkImageView, - Barrier imageBarrier, - ConstraintLayout bottomConstraintLayout, - MaterialButton upvoteButton, - TextView scoreTextView, - MaterialButton downvoteButton, - MaterialButton commentsCountButton, - MaterialButton saveButton, - MaterialButton shareButton, - View divider) { - this.iconGifImageView = iconGifImageView; - this.nameTextView = nameTextView; - this.stickiedPostImageView = stickiedPostImageView; - this.postTimeTextView = postTimeTextView; - this.titleAndImageConstraintLayout = titleAndImageConstraintLayout; - this.titleTextView = titleTextView; - this.typeTextView = typeTextView; - this.archivedImageView = archivedImageView; - this.lockedImageView = lockedImageView; - this.crosspostImageView = crosspostImageView; - this.nsfwTextView = nsfwTextView; - this.spoilerTextView = spoilerTextView; - this.flairTextView = flairTextView; - this.linkTextView = linkTextView; - this.relativeLayout = relativeLayout; - this.progressBar = progressBar; - this.imageView = imageView; - this.playButtonImageView = playButtonImageView; - this.noPreviewPostImageFrameLayout = noPreviewLinkImageFrameLayout; - this.noPreviewPostImageView = noPreviewLinkImageView; - this.imageBarrier = imageBarrier; - this.bottomConstraintLayout = bottomConstraintLayout; - this.upvoteButton = upvoteButton; - this.scoreTextView = scoreTextView; - this.downvoteButton = downvoteButton; - this.commentsCountButton = commentsCountButton; - this.saveButton = saveButton; - this.shareButton = shareButton; - this.divider = divider; - - if (mVoteButtonsOnTheRight) { - ConstraintSet constraintSet = new ConstraintSet(); - constraintSet.clone(bottomConstraintLayout); - constraintSet.clear(upvoteButton.getId(), ConstraintSet.START); - constraintSet.clear(scoreTextView.getId(), ConstraintSet.START); - constraintSet.clear(downvoteButton.getId(), ConstraintSet.START); - constraintSet.clear(saveButton.getId(), ConstraintSet.END); - constraintSet.clear(shareButton.getId(), ConstraintSet.END); - constraintSet.connect(upvoteButton.getId(), ConstraintSet.END, scoreTextView.getId(), ConstraintSet.START); - constraintSet.connect(scoreTextView.getId(), ConstraintSet.END, downvoteButton.getId(), ConstraintSet.START); - constraintSet.connect(downvoteButton.getId(), ConstraintSet.END, ConstraintSet.PARENT_ID, ConstraintSet.END); - constraintSet.connect(commentsCountButton.getId(), ConstraintSet.START, saveButton.getId(), ConstraintSet.END); - constraintSet.connect(commentsCountButton.getId(), ConstraintSet.END, upvoteButton.getId(), ConstraintSet.START); - constraintSet.connect(saveButton.getId(), ConstraintSet.START, shareButton.getId(), ConstraintSet.END); - constraintSet.connect(shareButton.getId(), ConstraintSet.START, ConstraintSet.PARENT_ID, ConstraintSet.START); - constraintSet.setHorizontalBias(commentsCountButton.getId(), 0); - constraintSet.applyTo(bottomConstraintLayout); - } - - if (((ViewGroup) itemView).getLayoutTransition() != null) { - ((ViewGroup) itemView).getLayoutTransition().setAnimateParentHierarchy(false); - } - - if (mActivity.typeface != null) { - nameTextView.setTypeface(mActivity.typeface); - postTimeTextView.setTypeface(mActivity.typeface); - typeTextView.setTypeface(mActivity.typeface); - spoilerTextView.setTypeface(mActivity.typeface); - nsfwTextView.setTypeface(mActivity.typeface); - flairTextView.setTypeface(mActivity.typeface); - linkTextView.setTypeface(mActivity.typeface); - upvoteButton.setTypeface(mActivity.typeface); - commentsCountButton.setTypeface(mActivity.typeface); - } - if (mActivity.titleTypeface != null) { - titleTextView.setTypeface(mActivity.titleTypeface); - } - - itemView.setBackgroundColor(mCardViewBackgroundColor); - postTimeTextView.setTextColor(mSecondaryTextColor); - titleTextView.setTextColor(mPostTitleColor); - stickiedPostImageView.setColorFilter(mStickiedPostIconTint, PorterDuff.Mode.SRC_IN); - typeTextView.setBackgroundColor(mPostTypeBackgroundColor); - typeTextView.setBorderColor(mPostTypeBackgroundColor); - typeTextView.setTextColor(mPostTypeTextColor); - spoilerTextView.setBackgroundColor(mSpoilerBackgroundColor); - spoilerTextView.setBorderColor(mSpoilerBackgroundColor); - spoilerTextView.setTextColor(mSpoilerTextColor); - nsfwTextView.setBackgroundColor(mNSFWBackgroundColor); - nsfwTextView.setBorderColor(mNSFWBackgroundColor); - nsfwTextView.setTextColor(mNSFWTextColor); - flairTextView.setBackgroundColor(mFlairBackgroundColor); - flairTextView.setBorderColor(mFlairBackgroundColor); - flairTextView.setTextColor(mFlairTextColor); - archivedImageView.setColorFilter(mArchivedIconTint, PorterDuff.Mode.SRC_IN); - lockedImageView.setColorFilter(mLockedIconTint, PorterDuff.Mode.SRC_IN); - crosspostImageView.setColorFilter(mCrosspostIconTint, PorterDuff.Mode.SRC_IN); - linkTextView.setTextColor(mSecondaryTextColor); - playButtonImageView.setColorFilter(mMediaIndicatorIconTint, PorterDuff.Mode.SRC_IN); - playButtonImageView.setBackgroundTintList(ColorStateList.valueOf(mMediaIndicatorBackgroundColor)); - progressBar.setIndeterminateTintList(ColorStateList.valueOf(mColorAccent)); - noPreviewLinkImageView.setBackgroundColor(mNoPreviewPostTypeBackgroundColor); - noPreviewLinkImageView.setColorFilter(mNoPreviewPostTypeIconTint, android.graphics.PorterDuff.Mode.SRC_IN); - upvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - scoreTextView.setTextColor(mPostIconAndInfoColor); - downvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - commentsCountButton.setTextColor(mPostIconAndInfoColor); - commentsCountButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - saveButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - shareButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - divider.setBackgroundColor(mDividerColor); - - imageView.setClipToOutline(true); - noPreviewLinkImageFrameLayout.setClipToOutline(true); - - itemView.setOnClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position < 0) { - return; - } - Post post = getItem(position); - if (post != null && canStartActivity) { - openViewPostDetailActivity(post, getBindingAdapterPosition()); - } - }); - - itemView.setOnLongClickListener(view -> { - if (mLongPressToHideToolbarInCompactLayout) { - if (bottomConstraintLayout.getLayoutParams().height == 0) { - ViewGroup.LayoutParams params = bottomConstraintLayout.getLayoutParams(); - params.height = LinearLayout.LayoutParams.WRAP_CONTENT; - bottomConstraintLayout.setLayoutParams(params); - mCallback.delayTransition(); - } else { - mCallback.delayTransition(); - ViewGroup.LayoutParams params = bottomConstraintLayout.getLayoutParams(); - params.height = 0; - bottomConstraintLayout.setLayoutParams(params); - } - } - return true; - }); - - itemView.setOnTouchListener((v, event) -> { - if (event.getActionMasked() == MotionEvent.ACTION_UP || event.getActionMasked() == MotionEvent.ACTION_CANCEL) { - if (mFragment.isRecyclerViewItemSwipeable(PostCompactBaseViewHolder.this)) { - mActivity.unlockSwipeRightToGoBack(); - } - } else { - if (mFragment.isRecyclerViewItemSwipeable(PostCompactBaseViewHolder.this)) { - mActivity.lockSwipeRightToGoBack(); - } - } - return false; - }); - - nameTextView.setOnClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position < 0) { - return; - } - Post post = getItem(position); - if (post != null && canStartActivity) { - canStartActivity = false; - if (mDisplaySubredditName) { - Intent intent = new Intent(mActivity, ViewSubredditDetailActivity.class); - intent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME_KEY, - post.getSubredditName()); - mActivity.startActivity(intent); - } else if (!post.isAuthorDeleted()) { - Intent intent = new Intent(mActivity, ViewUserDetailActivity.class); - intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, post.getAuthor()); - mActivity.startActivity(intent); - } - } - }); - - iconGifImageView.setOnClickListener(view -> nameTextView.performClick()); - - nsfwTextView.setOnClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position < 0) { - return; - } - Post post = getItem(position); - if (post != null && !(mActivity instanceof FilteredPostsActivity)) { - mCallback.nsfwChipClicked(); - } - }); - - typeTextView.setOnClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position < 0) { - return; - } - Post post = getItem(position); - if (post != null && !(mActivity instanceof FilteredPostsActivity)) { - mCallback.typeChipClicked(post.getPostType()); - } - }); - - flairTextView.setOnClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position < 0) { - return; - } - Post post = getItem(position); - if (post != null && !(mActivity instanceof FilteredPostsActivity)) { - mCallback.flairChipClicked(post.getFlair()); - } - }); - - imageView.setOnClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position < 0) { - return; - } - Post post = getItem(position); - if (post != null) { - openMedia(post); - } - }); - - noPreviewLinkImageFrameLayout.setOnClickListener(view -> { - imageView.performClick(); - }); - - upvoteButton.setOnClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position < 0) { - return; - } - Post post = getItem(position); - if (post != null) { - if (mAccountName.equals(Account.ANONYMOUS_ACCOUNT)) { - Toast.makeText(mActivity, R.string.login_first, Toast.LENGTH_SHORT).show(); - return; - } - - if (post.isArchived()) { - Toast.makeText(mActivity, R.string.archived_post_vote_unavailable, Toast.LENGTH_SHORT).show(); - return; - } - - ColorStateList previousUpvoteButtonIconTint = upvoteButton.getIconTint(); - ColorStateList previousDownvoteButtonIconTint = downvoteButton.getIconTint(); - int previousScoreTextViewColor = scoreTextView.getCurrentTextColor(); - Drawable previousUpvoteButtonDrawable = upvoteButton.getIcon(); - Drawable previousDownvoteButtonDrawable = downvoteButton.getIcon(); - - int previousVoteType = post.getVoteType(); - String newVoteType; - - downvoteButton.setIconResource(R.drawable.ic_downvote_24dp); - downvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - - if (previousVoteType != 1) { - //Not upvoted before - post.setVoteType(1); - newVoteType = APIUtils.DIR_UPVOTE; - upvoteButton.setIconResource(R.drawable.ic_upvote_filled_24dp); - upvoteButton.setIconTint(ColorStateList.valueOf(mUpvotedColor)); - scoreTextView.setTextColor(mUpvotedColor); - } else { - //Upvoted before - post.setVoteType(0); - newVoteType = APIUtils.DIR_UNVOTE; - upvoteButton.setIconResource(R.drawable.ic_upvote_24dp); - upvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - scoreTextView.setTextColor(mPostIconAndInfoColor); - } - - if (!mHideTheNumberOfVotes) { - scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType())); - } - - VoteThing.voteThing(mActivity, mOauthRetrofit, mAccessToken, new VoteThing.VoteThingListener() { - @Override - public void onVoteThingSuccess(int position1) { - int currentPosition = getBindingAdapterPosition(); - if (newVoteType.equals(APIUtils.DIR_UPVOTE)) { - post.setVoteType(1); - if (currentPosition == position) { - upvoteButton.setIconResource(R.drawable.ic_upvote_filled_24dp); - upvoteButton.setIconTint(ColorStateList.valueOf(mUpvotedColor)); - scoreTextView.setTextColor(mUpvotedColor); - } - } else { - post.setVoteType(0); - if (currentPosition == position) { - upvoteButton.setIconResource(R.drawable.ic_upvote_24dp); - upvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - scoreTextView.setTextColor(mPostIconAndInfoColor); - } - } - - if (currentPosition == position) { - downvoteButton.setIconResource(R.drawable.ic_downvote_24dp); - downvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - if (!mHideTheNumberOfVotes) { - scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType())); - } - } - - EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post)); - } - - @Override - public void onVoteThingFail(int position1) { - Toast.makeText(mActivity, R.string.vote_failed, Toast.LENGTH_SHORT).show(); - post.setVoteType(previousVoteType); - if (getBindingAdapterPosition() == position) { - if (!mHideTheNumberOfVotes) { - scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + previousVoteType)); - } - upvoteButton.setIcon(previousUpvoteButtonDrawable); - upvoteButton.setIconTint(previousUpvoteButtonIconTint); - scoreTextView.setTextColor(previousScoreTextViewColor); - downvoteButton.setIcon(previousDownvoteButtonDrawable); - downvoteButton.setIconTint(previousDownvoteButtonIconTint); - } - - EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post)); - } - }, post.getFullName(), newVoteType, getBindingAdapterPosition()); - } - }); - - downvoteButton.setOnClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position < 0) { - return; - } - Post post = getItem(position); - if (post != null) { - if (mAccountName.equals(Account.ANONYMOUS_ACCOUNT)) { - Toast.makeText(mActivity, R.string.login_first, Toast.LENGTH_SHORT).show(); - return; - } - - if (post.isArchived()) { - Toast.makeText(mActivity, R.string.archived_post_vote_unavailable, Toast.LENGTH_SHORT).show(); - return; - } - - ColorStateList previousUpvoteButtonIconTint = upvoteButton.getIconTint(); - ColorStateList previousDownvoteButtonIconTint = downvoteButton.getIconTint(); - int previousScoreTextViewColor = scoreTextView.getCurrentTextColor(); - Drawable previousUpvoteButtonDrawable = upvoteButton.getIcon(); - Drawable previousDownvoteButtonDrawable = downvoteButton.getIcon(); - - int previousVoteType = post.getVoteType(); - String newVoteType; - - upvoteButton.setIconResource(R.drawable.ic_upvote_24dp); - upvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - - if (previousVoteType != -1) { - //Not downvoted before - post.setVoteType(-1); - newVoteType = APIUtils.DIR_DOWNVOTE; - downvoteButton.setIconResource(R.drawable.ic_downvote_filled_24dp); - downvoteButton.setIconTint(ColorStateList.valueOf(mDownvotedColor)); - scoreTextView.setTextColor(mDownvotedColor); - } else { - //Downvoted before - post.setVoteType(0); - newVoteType = APIUtils.DIR_UNVOTE; - downvoteButton.setIconResource(R.drawable.ic_downvote_24dp); - downvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - scoreTextView.setTextColor(mPostIconAndInfoColor); - } - - if (!mHideTheNumberOfVotes) { - scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType())); - } - - VoteThing.voteThing(mActivity, mOauthRetrofit, mAccessToken, new VoteThing.VoteThingListener() { - @Override - public void onVoteThingSuccess(int position1) { - int currentPosition = getBindingAdapterPosition(); - if (newVoteType.equals(APIUtils.DIR_DOWNVOTE)) { - post.setVoteType(-1); - if (currentPosition == position) { - downvoteButton.setIconResource(R.drawable.ic_downvote_filled_24dp); - downvoteButton.setIconTint(ColorStateList.valueOf(mDownvotedColor)); - scoreTextView.setTextColor(mDownvotedColor); - } - } else { - post.setVoteType(0); - if (currentPosition == position) { - downvoteButton.setIconResource(R.drawable.ic_downvote_24dp); - downvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - scoreTextView.setTextColor(mPostIconAndInfoColor); - } - } - - if (currentPosition == position) { - upvoteButton.setIconResource(R.drawable.ic_upvote_24dp); - upvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - if (!mHideTheNumberOfVotes) { - scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType())); - } - } - - EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post)); - } - - @Override - public void onVoteThingFail(int position1) { - Toast.makeText(mActivity, R.string.vote_failed, Toast.LENGTH_SHORT).show(); - post.setVoteType(previousVoteType); - if (getBindingAdapterPosition() == position) { - if (!mHideTheNumberOfVotes) { - scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + previousVoteType)); - } - upvoteButton.setIcon(previousUpvoteButtonDrawable); - upvoteButton.setIconTint(previousUpvoteButtonIconTint); - scoreTextView.setTextColor(previousScoreTextViewColor); - downvoteButton.setIcon(previousDownvoteButtonDrawable); - downvoteButton.setIconTint(previousDownvoteButtonIconTint); - } - - EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post)); - } - }, post.getFullName(), newVoteType, getBindingAdapterPosition()); - } - }); - - saveButton.setOnClickListener(view -> { - if (mAccountName.equals(Account.ANONYMOUS_ACCOUNT)) { - Toast.makeText(mActivity, R.string.login_first, Toast.LENGTH_SHORT).show(); - return; - } - - int position = getBindingAdapterPosition(); - if (position < 0) { - return; - } - Post post = getItem(position); - if (post != null) { - if (post.isSaved()) { - saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp); - SaveThing.unsaveThing(mOauthRetrofit, mAccessToken, post.getFullName(), - new SaveThing.SaveThingListener() { - @Override - public void success() { - post.setSaved(false); - if (getBindingAdapterPosition() == position) { - saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp); - } - Toast.makeText(mActivity, R.string.post_unsaved_success, Toast.LENGTH_SHORT).show(); - EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post)); - } - - @Override - public void failed() { - post.setSaved(true); - if (getBindingAdapterPosition() == position) { - saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp); - } - Toast.makeText(mActivity, R.string.post_unsaved_failed, Toast.LENGTH_SHORT).show(); - EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post)); - } - }); - } else { - saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp); - SaveThing.saveThing(mOauthRetrofit, mAccessToken, post.getFullName(), - new SaveThing.SaveThingListener() { - @Override - public void success() { - post.setSaved(true); - if (getBindingAdapterPosition() == position) { - saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp); - } - Toast.makeText(mActivity, R.string.post_saved_success, Toast.LENGTH_SHORT).show(); - EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post)); - } - - @Override - public void failed() { - post.setSaved(false); - if (getBindingAdapterPosition() == position) { - saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp); - } - Toast.makeText(mActivity, R.string.post_saved_failed, Toast.LENGTH_SHORT).show(); - EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post)); - } - }); - } - } - }); - - shareButton.setOnClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position < 0) { - return; - } - Post post = getItem(position); - if (post != null) { - shareLink(post); - } - }); - - shareButton.setOnLongClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position < 0) { - return false; - } - Post post = getItem(position); - if (post != null) { - mActivity.copyLink(post.getPermalink()); - return true; - } - return false; - }); - - requestListener = new RequestListener<>() { - @Override - public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) { - progressBar.setVisibility(View.GONE); - return false; - } - - @Override - public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) { - progressBar.setVisibility(View.GONE); - return false; - } - }; - } - } - - class PostCompactLeftThumbnailViewHolder extends PostCompactBaseViewHolder { - PostCompactLeftThumbnailViewHolder(@NonNull ItemPostCompactBinding binding) { - super(binding.getRoot()); - - setBaseView(binding.iconGifImageViewItemPostCompact, - binding.nameTextViewItemPostCompact, - binding.stickiedPostImageViewItemPostCompact, - binding.postTimeTextViewItemPostCompact, - binding.titleAndImageConstraintLayout, - binding.titleTextViewItemPostCompact, - binding.typeTextViewItemPostCompact, - binding.archivedImageViewItemPostCompact, - binding.lockedImageViewItemPostCompact, - binding.crosspostImageViewItemPostCompact, - binding.nsfwTextViewItemPostCompact, - binding.spoilerCustomTextViewItemPostCompact, - binding.flairCustomTextViewItemPostCompact, - binding.linkTextViewItemPostCompact, - binding.imageViewWrapperItemPostCompact, - binding.progressBarItemPostCompact, - binding.imageViewItemPostCompact, - binding.playButtonImageViewItemPostCompact, - binding.frameLayoutImageViewNoPreviewLinkItemPostCompact, - binding.imageViewNoPreviewLinkItemPostCompact, - binding.barrier2, - binding.bottomConstraintLayoutItemPostCompact, - binding.upvoteButtonItemPostCompact, - binding.scoreTextViewItemPostCompact, - binding.downvoteButtonItemPostCompact, - binding.commentsCountButtonItemPostCompact, - binding.saveButtonItemPostCompact, - binding.shareButtonItemPostCompact, - binding.dividerItemPostCompact); - } - } - - class PostCompactRightThumbnailViewHolder extends PostCompactBaseViewHolder { - PostCompactRightThumbnailViewHolder(@NonNull ItemPostCompactRightThumbnailBinding binding) { - super(binding.getRoot()); - - setBaseView(binding.iconGifImageViewItemPostCompactRightThumbnail, - binding.nameTextViewItemPostCompactRightThumbnail, - binding.stickiedPostImageViewItemPostCompactRightThumbnail, - binding.postTimeTextViewItemPostCompactRightThumbnail, - binding.titleAndImageConstraintLayout, - binding.titleTextViewItemPostCompactRightThumbnail, - binding.typeTextViewItemPostCompactRightThumbnail, - binding.archivedImageViewItemPostCompactRightThumbnail, - binding.lockedImageViewItemPostCompactRightThumbnail, - binding.crosspostImageViewItemPostCompactRightThumbnail, - binding.nsfwTextViewItemPostCompactRightThumbnail, - binding.spoilerCustomTextViewItemPostCompactRightThumbnail, - binding.flairCustomTextViewItemPostCompactRightThumbnail, - binding.linkTextViewItemPostCompactRightThumbnail, - binding.imageViewWrapperItemPostCompactRightThumbnail, - binding.progressBarItemPostCompactRightThumbnail, - binding.imageViewItemPostCompactRightThumbnail, - binding.playButtonImageViewItemPostCompactRightThumbnail, - binding.frameLayoutImageViewNoPreviewLinkItemPostCompactRightThumbnail, - binding.imageViewNoPreviewLinkItemPostCompactRightThumbnail, - binding.barrier2, - binding.bottomConstraintLayoutItemPostCompactRightThumbnail, - binding.upvoteButtonItemPostCompactRightThumbnail, - binding.scoreTextViewItemPostCompactRightThumbnail, - binding.downvoteButtonItemPostCompactRightThumbnail, - binding.commentsCountButtonItemPostCompactRightThumbnail, - binding.saveButtonItemPostCompactRightThumbnail, - binding.shareButtonItemPostCompactRightThumbnail, - binding.dividerItemPostCompactRightThumbnail); - } - } - - class PostGalleryViewHolder extends RecyclerView.ViewHolder { - ItemPostGalleryBinding binding; - RequestListener<Drawable> requestListener; - Post post; - Post.Preview preview; - - public PostGalleryViewHolder(@NonNull ItemPostGalleryBinding binding) { - super(binding.getRoot()); - this.binding = binding; - - if (mActivity.typeface != null) { - binding.loadImageErrorTextViewItemGallery.setTypeface(mActivity.typeface); - } - if (mActivity.titleTypeface != null) { - binding.titleTextViewItemPostGallery.setTypeface(mActivity.titleTypeface); - } - itemView.setBackgroundTintList(ColorStateList.valueOf(mCardViewBackgroundColor)); - binding.titleTextViewItemPostGallery.setTextColor(mPostTitleColor); - binding.progressBarItemPostGallery.setIndeterminateTintList(ColorStateList.valueOf(mColorAccent)); - binding.imageViewNoPreviewItemPostGallery.setBackgroundColor(mNoPreviewPostTypeBackgroundColor); - binding.imageViewNoPreviewItemPostGallery.setColorFilter(mNoPreviewPostTypeIconTint, android.graphics.PorterDuff.Mode.SRC_IN); - binding.videoOrGifIndicatorImageViewItemPostGallery.setColorFilter(mMediaIndicatorIconTint, PorterDuff.Mode.SRC_IN); - binding.videoOrGifIndicatorImageViewItemPostGallery.setBackgroundTintList(ColorStateList.valueOf(mMediaIndicatorBackgroundColor)); - binding.loadImageErrorTextViewItemGallery.setTextColor(mPrimaryTextColor); - - itemView.setOnClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position >= 0 && canStartActivity) { - Post post = getItem(position); - if (post != null) { - if (post.getPostType() == Post.TEXT_TYPE || !mSharedPreferences.getBoolean(SharedPreferencesUtils.CLICK_TO_SHOW_MEDIA_IN_GALLERY_LAYOUT, false)) { - openViewPostDetailActivity(post, getBindingAdapterPosition()); - } else { - openMedia(post); - } - } - } - }); - - itemView.setOnLongClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position >= 0 && canStartActivity) { - Post post = getItem(position); - if (post != null) { - if (post.getPostType() == Post.TEXT_TYPE || mSharedPreferences.getBoolean(SharedPreferencesUtils.CLICK_TO_SHOW_MEDIA_IN_GALLERY_LAYOUT, false)) { - openViewPostDetailActivity(post, getBindingAdapterPosition()); - } else { - openMedia(post); - } - } - } - - return true; - }); - - binding.loadImageErrorTextViewItemGallery.setOnClickListener(view -> { - binding.progressBarItemPostGallery.setVisibility(View.VISIBLE); - binding.loadImageErrorTextViewItemGallery.setVisibility(View.GONE); - loadImage(this); - }); - - binding.imageViewNoPreviewItemPostGallery.setOnClickListener(view -> { - itemView.performClick(); - }); - - requestListener = new RequestListener<>() { - @Override - public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) { - binding.progressBarItemPostGallery.setVisibility(View.GONE); - binding.loadImageErrorTextViewItemGallery.setVisibility(View.VISIBLE); - return false; - } - - @Override - public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) { - binding.loadImageErrorTextViewItemGallery.setVisibility(View.GONE); - binding.progressBarItemPostGallery.setVisibility(View.GONE); - return false; - } - }; - } - } - - class PostGalleryBaseGalleryTypeViewHolder extends RecyclerView.ViewHolder { - - FrameLayout frameLayout; - RecyclerView recyclerView; - CustomTextView imageIndexTextView; - ImageView noPreviewImageView; - - PostGalleryTypeImageRecyclerViewAdapter adapter; - private final LinearLayoutManagerBugFixed layoutManager; - - Post post; - Post.Preview preview; - - int currentPosition; - - public PostGalleryBaseGalleryTypeViewHolder(@NonNull View itemView, - FrameLayout frameLayout, - RecyclerView recyclerView, - CustomTextView imageIndexTextView, - ImageView noPreviewImageView) { - super(itemView); - - this.frameLayout = frameLayout; - this.recyclerView = recyclerView; - this.imageIndexTextView = imageIndexTextView; - this.noPreviewImageView = noPreviewImageView; - - if (mActivity.typeface != null) { - imageIndexTextView.setTypeface(mActivity.typeface); - } - - itemView.setBackgroundTintList(ColorStateList.valueOf(mCardViewBackgroundColor)); - noPreviewImageView.setBackgroundColor(mNoPreviewPostTypeBackgroundColor); - noPreviewImageView.setColorFilter(mNoPreviewPostTypeIconTint, android.graphics.PorterDuff.Mode.SRC_IN); - - imageIndexTextView.setTextColor(mMediaIndicatorIconTint); - imageIndexTextView.setBackgroundColor(mMediaIndicatorBackgroundColor); - imageIndexTextView.setBorderColor(mMediaIndicatorBackgroundColor); - - adapter = new PostGalleryTypeImageRecyclerViewAdapter(mGlide, mActivity.typeface, - mSaveMemoryCenterInsideDownsampleStrategy, mColorAccent, mPrimaryTextColor, mScale, - galleryImage -> {}); - recyclerView.setOnTouchListener((v, motionEvent) -> { - if (motionEvent.getActionMasked() == MotionEvent.ACTION_UP || motionEvent.getActionMasked() == MotionEvent.ACTION_CANCEL) { - if (mActivity.mSliderPanel != null) { - mActivity.mSliderPanel.requestDisallowInterceptTouchEvent(false); - } - if (mActivity.mViewPager2 != null) { - mActivity.mViewPager2.setUserInputEnabled(true); - } - mActivity.unlockSwipeRightToGoBack(); - } else { - if (mActivity.mSliderPanel != null) { - mActivity.mSliderPanel.requestDisallowInterceptTouchEvent(true); - } - if (mActivity.mViewPager2 != null) { - mActivity.mViewPager2.setUserInputEnabled(false); - } - mActivity.lockSwipeRightToGoBack(); - } - - return false; - }); - recyclerView.setAdapter(adapter); - new PagerSnapHelper().attachToRecyclerView(recyclerView); - recyclerView.setRecycledViewPool(mGalleryRecycledViewPool); - layoutManager = new LinearLayoutManagerBugFixed(mActivity, RecyclerView.HORIZONTAL, false); - recyclerView.setLayoutManager(layoutManager); - recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { - @Override - public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) { - super.onScrollStateChanged(recyclerView, newState); - } - - @Override - public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { - super.onScrolled(recyclerView, dx, dy); - imageIndexTextView.setText(mActivity.getString(R.string.image_index_in_gallery, layoutManager.findFirstVisibleItemPosition() + 1, post.getGallery().size())); - } - }); - recyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() { - private float downX; - private float downY; - private boolean dragged; - private long downTime; - private final int minTouchSlop = ViewConfiguration.get(mActivity).getScaledTouchSlop(); - private final int longClickThreshold = ViewConfiguration.getLongPressTimeout(); - - @Override - public boolean onInterceptTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) { - int action = e.getAction(); - switch (action) { - case MotionEvent.ACTION_DOWN: - downX = e.getRawX(); - downY = e.getRawY(); - downTime = System.currentTimeMillis(); - break; - case MotionEvent.ACTION_MOVE: - if(Math.abs(e.getRawX() - downX) > minTouchSlop || Math.abs(e.getRawY() - downY) > minTouchSlop) { - dragged = true; - } - if (!dragged) { - if (System.currentTimeMillis() - downTime >= longClickThreshold) { - onLongClick(); - } - } - break; - case MotionEvent.ACTION_UP: - if (!dragged) { - if (System.currentTimeMillis() - downTime < longClickThreshold) { - onClick(); - } - } - case MotionEvent.ACTION_CANCEL: - downX = 0; - downY = 0; - dragged = false; - - } - return false; - } - - @Override - public void onTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) { - - } - - @Override - public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { - - } - }); - - noPreviewImageView.setOnClickListener(view -> { - onClick(); - }); - - noPreviewImageView.setOnLongClickListener(view -> onLongClick()); - } - - void onClick() { - int position = getBindingAdapterPosition(); - if (position >= 0 && canStartActivity) { - Post post = getItem(position); - if (post != null) { - if (post.getPostType() == Post.TEXT_TYPE || !mSharedPreferences.getBoolean(SharedPreferencesUtils.CLICK_TO_SHOW_MEDIA_IN_GALLERY_LAYOUT, false)) { - openViewPostDetailActivity(post, getBindingAdapterPosition()); - } else { - openMedia(post, layoutManager.findFirstVisibleItemPosition()); - } - } - } - } - - boolean onLongClick() { - int position = getBindingAdapterPosition(); - if (position >= 0 && canStartActivity) { - Post post = getItem(position); - if (post != null) { - if (post.getPostType() == Post.TEXT_TYPE || mSharedPreferences.getBoolean(SharedPreferencesUtils.CLICK_TO_SHOW_MEDIA_IN_GALLERY_LAYOUT, false)) { - openViewPostDetailActivity(post, getBindingAdapterPosition()); - } else { - openMedia(post, layoutManager.findFirstVisibleItemPosition()); - } - } - } - - return true; - } - } - - class PostGalleryGalleryTypeViewHolder extends PostGalleryBaseGalleryTypeViewHolder { - - public PostGalleryGalleryTypeViewHolder(@NonNull ItemPostGalleryGalleryTypeBinding binding) { - super(binding.getRoot(), binding.galleryFrameLayoutItemPostGalleryGalleryType, - binding.galleryRecyclerViewItemPostGalleryGalleryType, binding.imageIndexTextViewItemPostGalleryGalleryType, - binding.imageViewNoPreviewItemPostGalleryGalleryType); - } - } - - @UnstableApi - class PostCard2BaseVideoAutoplayViewHolder extends PostBaseViewHolder implements ToroPlayer { - AspectRatioFrameLayout aspectRatioFrameLayout; - GifImageView previewImageView; - ImageView errorLoadingRedgifsImageView; - PlayerView videoPlayer; - ImageView muteButton; - ImageView fullscreenButton; - ImageView playPauseButton; - DefaultTimeBar progressBar; - View divider; - - @Nullable - Container container; - @Nullable - ExoPlayerViewHelper helper; - private Uri mediaUri; - private float volume; - public Call<String> fetchRedgifsOrStreamableVideoCall; - private boolean isManuallyPaused; - private Drawable playDrawable; - private Drawable pauseDrawable; - - @OptIn(markerClass = UnstableApi.class) - PostCard2BaseVideoAutoplayViewHolder(View itemView, - AspectRatioGifImageView iconGifImageView, - TextView subredditTextView, - TextView userTextView, - ImageView stickiedPostImageView, - TextView postTimeTextView, - TextView titleTextView, - CustomTextView typeTextView, - ImageView archivedImageView, - ImageView lockedImageView, - ImageView crosspostImageView, - CustomTextView nsfwTextView, - CustomTextView spoilerTextView, - CustomTextView flairTextView, - AspectRatioFrameLayout aspectRatioFrameLayout, - GifImageView previewImageView, - ImageView errorLoadingRedgifsImageView, - PlayerView videoPlayer, - ImageView muteButton, - ImageView fullscreenButton, - ImageView playPauseButton, - DefaultTimeBar progressBar, - ConstraintLayout bottomConstraintLayout, - MaterialButton upvoteButton, - TextView scoreTextView, - MaterialButton downvoteButton, - MaterialButton commentsCountButton, - MaterialButton saveButton, - MaterialButton shareButton, - View divider) { - super(itemView); - setBaseView( - iconGifImageView, - subredditTextView, - userTextView, - stickiedPostImageView, - postTimeTextView, - titleTextView, - typeTextView, - archivedImageView, - lockedImageView, - crosspostImageView, - nsfwTextView, - spoilerTextView, - flairTextView, - bottomConstraintLayout, - upvoteButton, - scoreTextView, - downvoteButton, - commentsCountButton, - saveButton, - shareButton, - true); - - this.aspectRatioFrameLayout = aspectRatioFrameLayout; - this.previewImageView = previewImageView; - this.errorLoadingRedgifsImageView = errorLoadingRedgifsImageView; - this.videoPlayer = videoPlayer; - this.muteButton = muteButton; - this.fullscreenButton = fullscreenButton; - this.playPauseButton = playPauseButton; - this.progressBar = progressBar; - this.divider = divider; - playDrawable = AppCompatResources.getDrawable(mActivity, R.drawable.ic_play_arrow_24dp); - pauseDrawable = AppCompatResources.getDrawable(mActivity, R.drawable.ic_pause_24dp); - - divider.setBackgroundColor(mDividerColor); - - aspectRatioFrameLayout.setOnClickListener(null); - - muteButton.setOnClickListener(view -> { - if (helper != null) { - if (helper.getVolume() != 0) { - muteButton.setImageDrawable(ContextCompat.getDrawable(mActivity, R.drawable.ic_mute_24dp)); - helper.setVolume(0f); - volume = 0f; - mFragment.videoAutoplayChangeMutingOption(true); - } else { - muteButton.setImageDrawable(ContextCompat.getDrawable(mActivity, R.drawable.ic_unmute_24dp)); - helper.setVolume(1f); - volume = 1f; - mFragment.videoAutoplayChangeMutingOption(false); - } - } - }); - - playPauseButton.setOnClickListener(view -> { - if (isPlaying()) { - pause(); - isManuallyPaused = true; - savePlaybackInfo(getPlayerOrder(), getCurrentPlaybackInfo()); - } else { - isManuallyPaused = false; - play(); - } - }); - - progressBar.addListener(new TimeBar.OnScrubListener() { - @Override - public void onScrubStart(TimeBar timeBar, long position) { - - } - - @Override - public void onScrubMove(TimeBar timeBar, long position) { - - } - - @Override - public void onScrubStop(TimeBar timeBar, long position, boolean canceled) { - if (!canceled) { - savePlaybackInfo(getPlayerOrder(), getCurrentPlaybackInfo()); - } - } - }); - - fullscreenButton.setOnClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position < 0) { - return; - } - Post post = getItem(position); - if (post != null) { - if (helper != null) { - openMedia(post, helper.getLatestPlaybackInfo().getResumePosition()); - } else { - openMedia(post, -1); - } - } - }); - - previewImageView.setOnClickListener(view -> fullscreenButton.performClick()); - - videoPlayer.setOnClickListener(view -> { - if (mEasierToWatchInFullScreen && videoPlayer.isControllerFullyVisible()) { - fullscreenButton.performClick(); - } - }); - } - - void bindVideoUri(Uri videoUri) { - mediaUri = videoUri; - } - - void setVolume(float volume) { - this.volume = volume; - } - - void resetVolume() { - volume = 0f; - } - - private void savePlaybackInfo(int order, @Nullable PlaybackInfo playbackInfo) { - if (container != null) container.savePlaybackInfo(order, playbackInfo); - } - - void loadFallbackDirectVideo() { - if (post.getVideoFallBackDirectUrl() != null) { - mediaUri = Uri.parse(post.getVideoFallBackDirectUrl()); - post.setVideoDownloadUrl(post.getVideoFallBackDirectUrl()); - post.setVideoUrl(post.getVideoFallBackDirectUrl()); - post.setLoadRedgifsOrStreamableVideoSuccess(true); - if (container != null) { - container.onScrollStateChanged(RecyclerView.SCROLL_STATE_IDLE); - } - } - } - - @NonNull - @Override - public View getPlayerView() { - return videoPlayer; - } - - @NonNull - @Override - public PlaybackInfo getCurrentPlaybackInfo() { - return helper != null && mediaUri != null ? helper.getLatestPlaybackInfo() : new PlaybackInfo(); - } - - @Override - public void initialize(@NonNull Container container, @NonNull PlaybackInfo playbackInfo) { - if (mediaUri == null) { - return; - } - if (this.container == null) { - this.container = container; - } - if (helper == null) { - helper = new ExoPlayerViewHelper(this, mediaUri, null, mExoCreator); - helper.addEventListener(new Playable.DefaultEventListener() { - @Override - public void onEvents(@NonNull Player player, @NonNull Player.Events events) { - if (events.containsAny( - Player.EVENT_PLAY_WHEN_READY_CHANGED, - Player.EVENT_PLAYBACK_STATE_CHANGED, - Player.EVENT_PLAYBACK_SUPPRESSION_REASON_CHANGED)) { - playPauseButton.setImageDrawable(Util.shouldShowPlayButton(player) ? playDrawable : pauseDrawable); - } - } - - @Override - public void onTracksChanged(@NonNull Tracks tracks) { - ImmutableList<Tracks.Group> trackGroups = tracks.getGroups(); - if (!trackGroups.isEmpty()) { - for (int i = 0; i < trackGroups.size(); i++) { - String mimeType = trackGroups.get(i).getTrackFormat(0).sampleMimeType; - if (mimeType != null && mimeType.contains("audio")) { - if (mFragment.getMasterMutingOption() != null) { - volume = mFragment.getMasterMutingOption() ? 0f : 1f; - } - helper.setVolume(volume); - muteButton.setVisibility(View.VISIBLE); - if (volume != 0f) { - muteButton.setImageDrawable(ContextCompat.getDrawable(mActivity, R.drawable.ic_unmute_24dp)); - } else { - muteButton.setImageDrawable(ContextCompat.getDrawable(mActivity, R.drawable.ic_mute_24dp)); - } - break; - } - } - } else { - muteButton.setVisibility(View.GONE); - } - } - - @Override - public void onRenderedFirstFrame() { - mGlide.clear(previewImageView); - previewImageView.setVisibility(View.GONE); - } - - @Override - public void onPlayerError(@NonNull PlaybackException error) { - if (post.getVideoFallBackDirectUrl() == null || post.getVideoFallBackDirectUrl().equals(mediaUri.toString())) { - errorLoadingRedgifsImageView.setVisibility(View.VISIBLE); - } else { - loadFallbackDirectVideo(); - } - } - }); - } - helper.initialize(container, playbackInfo); - } - - @Override - public void play() { - if (helper != null && mediaUri != null) { - if (!isPlaying() && isManuallyPaused) { - helper.play(); - pause(); - helper.setVolume(volume); - } else { - helper.play(); - } - } - } - - @Override - public void pause() { - if (helper != null) helper.pause(); - } - - @Override - public boolean isPlaying() { - return helper != null && helper.isPlaying(); - } - - @Override - public void release() { - if (helper != null) { - helper.release(); - helper = null; - } - isManuallyPaused = false; - container = null; - } - - @Override - public boolean wantsToPlay() { - return canPlayVideo && mediaUri != null && ToroUtil.visibleAreaOffset(this, itemView.getParent()) >= mStartAutoplayVisibleAreaOffset; - } - - @Override - public int getPlayerOrder() { - return getBindingAdapterPosition(); - } - } - - @UnstableApi - class PostCard2VideoAutoplayViewHolder extends PostCard2BaseVideoAutoplayViewHolder { - PostCard2VideoAutoplayViewHolder(ItemPostCard2VideoAutoplayBinding binding) { - super(binding.getRoot(), - binding.iconGifImageViewItemPostCard2VideoAutoplay, - binding.subredditNameTextViewItemPostCard2VideoAutoplay, - binding.userTextViewItemPostCard2VideoAutoplay, - binding.stickiedPostImageViewItemPostCard2VideoAutoplay, - binding.postTimeTextViewItemPostCard2VideoAutoplay, - binding.titleTextViewItemPostCard2VideoAutoplay, - binding.typeTextViewItemPostCard2VideoAutoplay, - binding.archivedImageViewItemPostCard2VideoAutoplay, - binding.lockedImageViewItemPostCard2VideoAutoplay, - binding.crosspostImageViewItemPostCard2VideoAutoplay, - binding.nsfwTextViewItemPostCard2VideoAutoplay, - binding.spoilerCustomTextViewItemPostCard2VideoAutoplay, - binding.flairCustomTextViewItemPostCard2VideoAutoplay, - binding.aspectRatioFrameLayoutItemPostCard2VideoAutoplay, - binding.previewImageViewItemPostCard2VideoAutoplay, - binding.errorLoadingVideoImageViewItemPostCard2VideoAutoplay, - binding.playerViewItemPostCard2VideoAutoplay, - binding.getRoot().findViewById(R.id.mute_exo_playback_control_view), - binding.getRoot().findViewById(R.id.fullscreen_exo_playback_control_view), - binding.getRoot().findViewById(R.id.exo_play), - binding.getRoot().findViewById(R.id.exo_progress), - binding.bottomConstraintLayoutItemPostCard2VideoAutoplay, - binding.upvoteButtonItemPostCard2VideoAutoplay, - binding.scoreTextViewItemPostCard2VideoAutoplay, - binding.downvoteButtonItemPostCard2VideoAutoplay, - binding.commentsCountButtonItemPostCard2VideoAutoplay, - binding.saveButtonItemPostCard2VideoAutoplay, - binding.shareButtonItemPostCard2VideoAutoplay, - binding.dividerItemPostCard2VideoAutoplay); - } - } - - @UnstableApi - class PostCard2VideoAutoplayLegacyControllerViewHolder extends PostCard2BaseVideoAutoplayViewHolder { - PostCard2VideoAutoplayLegacyControllerViewHolder(ItemPostCard2VideoAutoplayLegacyControllerBinding binding) { - super(binding.getRoot(), - binding.iconGifImageViewItemPostCard2VideoAutoplay, - binding.subredditNameTextViewItemPostCard2VideoAutoplay, - binding.userTextViewItemPostCard2VideoAutoplay, - binding.stickiedPostImageViewItemPostCard2VideoAutoplay, - binding.postTimeTextViewItemPostCard2VideoAutoplay, - binding.titleTextViewItemPostCard2VideoAutoplay, - binding.typeTextViewItemPostCard2VideoAutoplay, - binding.archivedImageViewItemPostCard2VideoAutoplay, - binding.lockedImageViewItemPostCard2VideoAutoplay, - binding.crosspostImageViewItemPostCard2VideoAutoplay, - binding.nsfwTextViewItemPostCard2VideoAutoplay, - binding.spoilerCustomTextViewItemPostCard2VideoAutoplay, - binding.flairCustomTextViewItemPostCard2VideoAutoplay, - binding.aspectRatioFrameLayoutItemPostCard2VideoAutoplay, - binding.previewImageViewItemPostCard2VideoAutoplay, - binding.errorLoadingVideoImageViewItemPostCard2VideoAutoplay, - binding.playerViewItemPostCard2VideoAutoplay, - binding.getRoot().findViewById(R.id.mute_exo_playback_control_view), - binding.getRoot().findViewById(R.id.fullscreen_exo_playback_control_view), - binding.getRoot().findViewById(R.id.exo_play), - binding.getRoot().findViewById(R.id.exo_progress), - binding.bottomConstraintLayoutItemPostCard2VideoAutoplay, - binding.upvoteButtonItemPostCard2VideoAutoplay, - binding.scoreTextViewItemPostCard2VideoAutoplay, - binding.downvoteButtonItemPostCard2VideoAutoplay, - binding.commentsCountButtonItemPostCard2VideoAutoplay, - binding.saveButtonItemPostCard2VideoAutoplay, - binding.shareButtonItemPostCard2VideoAutoplay, - binding.dividerItemPostCard2VideoAutoplay); - } - } - - class PostCard2WithPreviewViewHolder extends PostBaseViewHolder { - ItemPostCard2WithPreviewBinding binding; - RequestListener<Drawable> requestListener; - - PostCard2WithPreviewViewHolder(@NonNull ItemPostCard2WithPreviewBinding binding) { - super(binding.getRoot()); - this.binding = binding; - setBaseView( - binding.iconGifImageViewItemPostCard2WithPreview, - binding.subredditNameTextViewItemPostCard2WithPreview, - binding.userTextViewItemPostCard2WithPreview, - binding.stickiedPostImageViewItemPostCard2WithPreview, - binding.postTimeTextViewItemPostCard2WithPreview, - binding.titleTextViewItemPostCard2WithPreview, - binding.typeTextViewItemPostCard2WithPreview, - binding.archivedImageViewItemPostCard2WithPreview, - binding.lockedImageViewItemPostCard2WithPreview, - binding.crosspostImageViewItemPostCard2WithPreview, - binding.nsfwTextViewItemPostCard2WithPreview, - binding.spoilerCustomTextViewItemPostCard2WithPreview, - binding.flairCustomTextViewItemPostCard2WithPreview, - binding.bottomConstraintLayoutItemPostCard2WithPreview, - binding.upvoteButtonItemPostCard2WithPreview, - binding.scoreTextViewItemPostCard2WithPreview, - binding.downvoteButtonItemPostCard2WithPreview, - binding.commentsCountButtonItemPostCard2WithPreview, - binding.saveButtonItemPostCard2WithPreview, - binding.shareButtonItemPostCard2WithPreview, - true); - - if (mActivity.typeface != null) { - binding.linkTextViewItemPostCard2WithPreview.setTypeface(mActivity.typeface); - binding.loadImageErrorTextViewItemPostCard2WithPreview.setTypeface(mActivity.typeface); - } - binding.linkTextViewItemPostCard2WithPreview.setTextColor(mSecondaryTextColor); - binding.imageViewNoPreviewGalleryItemPostCard2WithPreview.setBackgroundColor(mNoPreviewPostTypeBackgroundColor); - binding.imageViewNoPreviewGalleryItemPostCard2WithPreview.setColorFilter(mNoPreviewPostTypeIconTint, android.graphics.PorterDuff.Mode.SRC_IN); - binding.progressBarItemPostCard2WithPreview.setIndeterminateTintList(ColorStateList.valueOf(mColorAccent)); - binding.videoOrGifIndicatorImageViewItemPostCard2WithPreview.setColorFilter(mMediaIndicatorIconTint, PorterDuff.Mode.SRC_IN); - binding.videoOrGifIndicatorImageViewItemPostCard2WithPreview.setBackgroundTintList(ColorStateList.valueOf(mMediaIndicatorBackgroundColor)); - binding.loadImageErrorTextViewItemPostCard2WithPreview.setTextColor(mPrimaryTextColor); - binding.dividerItemPostCard2WithPreview.setBackgroundColor(mDividerColor); - - binding.imageViewItemPostCard2WithPreview.setOnClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position < 0) { - return; - } - Post post = getItem(position); - if (post != null) { - openMedia(post); - } - }); - - binding.loadImageErrorTextViewItemPostCard2WithPreview.setOnClickListener(view -> { - binding.progressBarItemPostCard2WithPreview.setVisibility(View.VISIBLE); - binding.loadImageErrorTextViewItemPostCard2WithPreview.setVisibility(View.GONE); - loadImage(this); - }); - - binding.imageViewNoPreviewGalleryItemPostCard2WithPreview.setOnClickListener(view -> { - binding.imageViewItemPostCard2WithPreview.performClick(); - }); - - requestListener = new RequestListener<>() { - @Override - public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) { - binding.progressBarItemPostCard2WithPreview.setVisibility(View.GONE); - binding.loadImageErrorTextViewItemPostCard2WithPreview.setVisibility(View.VISIBLE); - return false; - } - - @Override - public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) { - binding.loadImageErrorTextViewItemPostCard2WithPreview.setVisibility(View.GONE); - binding.progressBarItemPostCard2WithPreview.setVisibility(View.GONE); - return false; - } - }; - } - } - - public class PostCard2GalleryTypeViewHolder extends PostBaseGalleryTypeViewHolder { - - PostCard2GalleryTypeViewHolder(ItemPostCard2GalleryTypeBinding binding) { - super(binding.getRoot(), - binding.iconGifImageViewItemPostCard2GalleryType, - binding.subredditNameTextViewItemPostCard2GalleryType, - binding.userTextViewItemPostCard2GalleryType, - binding.stickiedPostImageViewItemPostCard2GalleryType, - binding.postTimeTextViewItemPostCard2GalleryType, - binding.titleTextViewItemPostCard2GalleryType, - binding.typeTextViewItemPostCard2GalleryType, - binding.archivedImageViewItemPostCard2GalleryType, - binding.lockedImageViewItemPostCard2GalleryType, - binding.crosspostImageViewItemPostCard2GalleryType, - binding.nsfwTextViewItemPostCard2GalleryType, - binding.spoilerCustomTextViewItemPostCard2GalleryType, - binding.flairCustomTextViewItemPostCard2GalleryType, - binding.galleryFrameLayoutItemPostCard2GalleryType, - binding.galleryRecyclerViewItemPostCard2GalleryType, - binding.imageIndexTextViewItemPostCard2GalleryType, - binding.noPreviewImageViewItemPostCard2GalleryType, - binding.bottomConstraintLayoutItemPostCard2GalleryType, - binding.upvoteButtonItemPostCard2GalleryType, - binding.scoreTextViewItemPostCard2GalleryType, - binding.downvoteButtonItemPostCard2GalleryType, - binding.commentsCountButtonItemPostCard2GalleryType, - binding.saveButtonItemPostCard2GalleryType, - binding.shareButtonItemPostCard2GalleryType, - true); - - binding.dividerItemPostCard2GalleryType.setBackgroundColor(mDividerColor); - } - } - - class PostCard2TextTypeViewHolder extends PostBaseViewHolder { - - ItemPostCard2TextBinding binding; - - PostCard2TextTypeViewHolder(@NonNull ItemPostCard2TextBinding binding) { - super(binding.getRoot()); - this.binding = binding; - setBaseView( - binding.iconGifImageViewItemPostCard2Text, - binding.subredditNameTextViewItemPostCard2Text, - binding.userTextViewItemPostCard2Text, - binding.stickiedPostImageViewItemPostCard2Text, - binding.postTimeTextViewItemPostCard2Text, - binding.titleTextViewItemPostCard2Text, - binding.typeTextViewItemPostCard2Text, - binding.archivedImageViewItemPostCard2Text, - binding.lockedImageViewItemPostCard2Text, - binding.crosspostImageViewItemPostCard2Text, - binding.nsfwTextViewItemPostCard2Text, - binding.spoilerCustomTextViewItemPostCard2Text, - binding.flairCustomTextViewItemPostCard2Text, - binding.bottomConstraintLayoutItemPostCard2Text, - binding.upvoteButtonItemPostCard2Text, - binding.scoreTextViewItemPostCard2Text, - binding.downvoteButtonItemPostCard2Text, - binding.commentsCountButtonItemPostCard2Text, - binding.saveButtonItemPostCard2Text, - binding.shareButtonItemPostCard2Text, - true); - - if (mActivity.contentTypeface != null) { - binding.contentTextViewItemPostCard2Text.setTypeface(mActivity.contentTypeface); - } - binding.contentTextViewItemPostCard2Text.setTextColor(mPostContentColor); - binding.dividerItemPostCard2Text.setBackgroundColor(mDividerColor); - } - } - - public class PostMaterial3CardBaseViewHolder extends RecyclerView.ViewHolder { - AspectRatioGifImageView iconGifImageView; - TextView subredditTextView; - TextView userTextView; - ImageView stickiedPostImageView; - TextView postTimeTextView; - TextView titleTextView; - ConstraintLayout bottomConstraintLayout; - MaterialButton upvoteButton; - TextView scoreTextView; - MaterialButton downvoteButton; - MaterialButton commentsCountButton; - MaterialButton saveButton; - MaterialButton shareButton; - Post post; - Post.Preview preview; - - PostMaterial3CardBaseViewHolder(@NonNull View itemView) { - super(itemView); - } - - void setBaseView(AspectRatioGifImageView iconGifImageView, - TextView subredditTextView, - TextView userTextView, - ImageView stickiedPostImageView, - TextView postTimeTextView, - TextView titleTextView, - ConstraintLayout bottomConstraintLayout, - MaterialButton upvoteButton, - TextView scoreTextView, - MaterialButton downvoteButton, - MaterialButton commentsCountButton, - MaterialButton saveButton, - MaterialButton shareButton) { - this.iconGifImageView = iconGifImageView; - this.subredditTextView = subredditTextView; - this.userTextView = userTextView; - this.stickiedPostImageView = stickiedPostImageView; - this.postTimeTextView = postTimeTextView; - this.titleTextView = titleTextView; - this.bottomConstraintLayout = bottomConstraintLayout; - this.upvoteButton = upvoteButton; - this.scoreTextView = scoreTextView; - this.downvoteButton = downvoteButton; - this.commentsCountButton = commentsCountButton; - this.saveButton = saveButton; - this.shareButton = shareButton; - - if (mVoteButtonsOnTheRight) { - ConstraintSet constraintSet = new ConstraintSet(); - constraintSet.clone(bottomConstraintLayout); - constraintSet.clear(upvoteButton.getId(), ConstraintSet.START); - constraintSet.clear(scoreTextView.getId(), ConstraintSet.START); - constraintSet.clear(downvoteButton.getId(), ConstraintSet.START); - constraintSet.clear(saveButton.getId(), ConstraintSet.END); - constraintSet.clear(shareButton.getId(), ConstraintSet.END); - constraintSet.connect(upvoteButton.getId(), ConstraintSet.END, scoreTextView.getId(), ConstraintSet.START); - constraintSet.connect(scoreTextView.getId(), ConstraintSet.END, downvoteButton.getId(), ConstraintSet.START); - constraintSet.connect(downvoteButton.getId(), ConstraintSet.END, ConstraintSet.PARENT_ID, ConstraintSet.END); - constraintSet.connect(commentsCountButton.getId(), ConstraintSet.START, saveButton.getId(), ConstraintSet.END); - constraintSet.connect(commentsCountButton.getId(), ConstraintSet.END, upvoteButton.getId(), ConstraintSet.START); - constraintSet.connect(saveButton.getId(), ConstraintSet.START, shareButton.getId(), ConstraintSet.END); - constraintSet.connect(shareButton.getId(), ConstraintSet.START, ConstraintSet.PARENT_ID, ConstraintSet.START); - constraintSet.setHorizontalBias(commentsCountButton.getId(), 0); - constraintSet.applyTo(bottomConstraintLayout); - } - - itemView.setBackgroundTintList(ColorStateList.valueOf(mFilledCardViewBackgroundColor)); - - if (mActivity.typeface != null) { - subredditTextView.setTypeface(mActivity.typeface); - userTextView.setTypeface(mActivity.typeface); - postTimeTextView.setTypeface(mActivity.typeface); - upvoteButton.setTypeface(mActivity.typeface); - commentsCountButton.setTypeface(mActivity.typeface); - } - if (mActivity.titleTypeface != null) { - titleTextView.setTypeface(mActivity.titleTypeface); - } - - subredditTextView.setTextColor(mSubredditColor); - userTextView.setTextColor(mUsernameColor); - postTimeTextView.setTextColor(mSecondaryTextColor); - titleTextView.setTextColor(mPostTitleColor); - stickiedPostImageView.setColorFilter(mStickiedPostIconTint, PorterDuff.Mode.SRC_IN); - upvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - downvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - commentsCountButton.setTextColor(mPostIconAndInfoColor); - commentsCountButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - saveButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - shareButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - - itemView.setOnClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position >= 0 && canStartActivity) { - Post post = getItem(position); - if (post != null) { - openViewPostDetailActivity(post, getBindingAdapterPosition()); - } - } - }); - - itemView.setOnTouchListener((v, event) -> { - if (event.getActionMasked() == MotionEvent.ACTION_UP || event.getActionMasked() == MotionEvent.ACTION_CANCEL) { - if (mFragment.isRecyclerViewItemSwipeable(this)) { - mActivity.unlockSwipeRightToGoBack(); - } - } else { - if (mFragment.isRecyclerViewItemSwipeable(this)) { - mActivity.lockSwipeRightToGoBack(); - } - } - return false; - }); - - userTextView.setOnClickListener(view -> { - if (canStartActivity) { - int position = getBindingAdapterPosition(); - if (position < 0) { - return; - } - Post post = getItem(position); - if (post == null || post.isAuthorDeleted()) { - return; - } - canStartActivity = false; - Intent intent = new Intent(mActivity, ViewUserDetailActivity.class); - intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, post.getAuthor()); - mActivity.startActivity(intent); - } - }); - - if (mDisplaySubredditName) { - subredditTextView.setOnClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position < 0) { - return; - } - Post post = getItem(position); - if (post != null) { - if (canStartActivity) { - canStartActivity = false; - Intent intent = new Intent(mActivity, ViewSubredditDetailActivity.class); - intent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME_KEY, - post.getSubredditName()); - mActivity.startActivity(intent); - } - } - }); - - iconGifImageView.setOnClickListener(view -> subredditTextView.performClick()); - } else { - subredditTextView.setOnClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position < 0) { - return; - } - Post post = getItem(position); - if (post != null) { - if (canStartActivity) { - canStartActivity = false; - Intent intent = new Intent(mActivity, ViewSubredditDetailActivity.class); - intent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME_KEY, - post.getSubredditName()); - mActivity.startActivity(intent); - } - } - }); - - iconGifImageView.setOnClickListener(view -> userTextView.performClick()); - } - - upvoteButton.setOnClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position < 0) { - return; - } - Post post = getItem(position); - if (post != null) { - if (mAccountName.equals(Account.ANONYMOUS_ACCOUNT)) { - Toast.makeText(mActivity, R.string.login_first, Toast.LENGTH_SHORT).show(); - return; - } - - if (post.isArchived()) { - Toast.makeText(mActivity, R.string.archived_post_vote_unavailable, Toast.LENGTH_SHORT).show(); - return; - } - - ColorStateList previousUpvoteButtonIconTint = upvoteButton.getIconTint(); - ColorStateList previousDownvoteButtonIconTint = downvoteButton.getIconTint(); - int previousScoreTextViewColor = scoreTextView.getCurrentTextColor(); - Drawable previousUpvoteButtonDrawable = upvoteButton.getIcon(); - Drawable previousDownvoteButtonDrawable = downvoteButton.getIcon(); - - int previousVoteType = post.getVoteType(); - String newVoteType; - - downvoteButton.setIconResource(R.drawable.ic_downvote_24dp); - downvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - - if (previousVoteType != 1) { - //Not upvoted before - post.setVoteType(1); - newVoteType = APIUtils.DIR_UPVOTE; - upvoteButton.setIconResource(R.drawable.ic_upvote_filled_24dp); - upvoteButton.setIconTint(ColorStateList.valueOf(mUpvotedColor)); - scoreTextView.setTextColor(mUpvotedColor); - } else { - //Upvoted before - post.setVoteType(0); - newVoteType = APIUtils.DIR_UNVOTE; - upvoteButton.setIconResource(R.drawable.ic_upvote_24dp); - upvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - scoreTextView.setTextColor(mPostIconAndInfoColor); - } - - if (!mHideTheNumberOfVotes) { - scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType())); - } - - VoteThing.voteThing(mActivity, mOauthRetrofit, mAccessToken, new VoteThing.VoteThingListener() { - @Override - public void onVoteThingSuccess(int position1) { - int currentPosition = getBindingAdapterPosition(); - if (newVoteType.equals(APIUtils.DIR_UPVOTE)) { - post.setVoteType(1); - if (currentPosition == position) { - upvoteButton.setIconResource(R.drawable.ic_upvote_filled_24dp); - upvoteButton.setIconTint(ColorStateList.valueOf(mUpvotedColor)); - scoreTextView.setTextColor(mUpvotedColor); - } - } else { - post.setVoteType(0); - if (currentPosition == position) { - upvoteButton.setIconResource(R.drawable.ic_upvote_24dp); - upvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - scoreTextView.setTextColor(mPostIconAndInfoColor); - } - } - - if (currentPosition == position) { - downvoteButton.setIconResource(R.drawable.ic_downvote_24dp); - downvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - if (!mHideTheNumberOfVotes) { - scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType())); - } - } - - EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post)); - } - - @Override - public void onVoteThingFail(int position1) { - Toast.makeText(mActivity, R.string.vote_failed, Toast.LENGTH_SHORT).show(); - post.setVoteType(previousVoteType); - if (getBindingAdapterPosition() == position) { - if (!mHideTheNumberOfVotes) { - scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + previousVoteType)); - } - upvoteButton.setIcon(previousUpvoteButtonDrawable); - upvoteButton.setIconTint(previousUpvoteButtonIconTint); - scoreTextView.setTextColor(previousScoreTextViewColor); - downvoteButton.setIcon(previousDownvoteButtonDrawable); - downvoteButton.setIconTint(previousDownvoteButtonIconTint); - } - - EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post)); - } - }, post.getFullName(), newVoteType, getBindingAdapterPosition()); - } - }); - - scoreTextView.setOnClickListener(view -> { - upvoteButton.performClick(); - }); - - downvoteButton.setOnClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position < 0) { - return; - } - Post post = getItem(position); - if (post != null) { - if (mAccountName.equals(Account.ANONYMOUS_ACCOUNT)) { - Toast.makeText(mActivity, R.string.login_first, Toast.LENGTH_SHORT).show(); - return; - } - - if (post.isArchived()) { - Toast.makeText(mActivity, R.string.archived_post_vote_unavailable, Toast.LENGTH_SHORT).show(); - return; - } - - ColorStateList previousUpvoteButtonIconTint = upvoteButton.getIconTint(); - ColorStateList previousDownvoteButtonIconTint = downvoteButton.getIconTint(); - int previousScoreTextViewColor = scoreTextView.getCurrentTextColor(); - Drawable previousUpvoteButtonDrawable = upvoteButton.getIcon(); - Drawable previousDownvoteButtonDrawable = downvoteButton.getIcon(); - - int previousVoteType = post.getVoteType(); - String newVoteType; - - upvoteButton.setIconResource(R.drawable.ic_upvote_24dp); - upvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - - if (previousVoteType != -1) { - //Not downvoted before - post.setVoteType(-1); - newVoteType = APIUtils.DIR_DOWNVOTE; - downvoteButton.setIconResource(R.drawable.ic_downvote_filled_24dp); - downvoteButton.setIconTint(ColorStateList.valueOf(mDownvotedColor)); - } else { - //Downvoted before - post.setVoteType(0); - newVoteType = APIUtils.DIR_UNVOTE; - downvoteButton.setIconResource(R.drawable.ic_downvote_24dp); - downvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - } - - if (!mHideTheNumberOfVotes) { - scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType())); - } - - VoteThing.voteThing(mActivity, mOauthRetrofit, mAccessToken, new VoteThing.VoteThingListener() { - @Override - public void onVoteThingSuccess(int position1) { - int currentPosition = getBindingAdapterPosition(); - if (newVoteType.equals(APIUtils.DIR_DOWNVOTE)) { - post.setVoteType(-1); - if (currentPosition == position) { - downvoteButton.setIconResource(R.drawable.ic_downvote_filled_24dp); - downvoteButton.setIconTint(ColorStateList.valueOf(mDownvotedColor)); - scoreTextView.setTextColor(mDownvotedColor); - } - } else { - post.setVoteType(0); - if (currentPosition == position) { - downvoteButton.setIconResource(R.drawable.ic_downvote_24dp); - downvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - scoreTextView.setTextColor(mPostIconAndInfoColor); - } - } - - if (currentPosition == position) { - upvoteButton.setIconResource(R.drawable.ic_upvote_24dp); - upvoteButton.setIconTint(ColorStateList.valueOf(mPostIconAndInfoColor)); - if (!mHideTheNumberOfVotes) { - scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType())); - } - } - - EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post)); - } - - @Override - public void onVoteThingFail(int position1) { - Toast.makeText(mActivity, R.string.vote_failed, Toast.LENGTH_SHORT).show(); - post.setVoteType(previousVoteType); - if (getBindingAdapterPosition() == position) { - if (!mHideTheNumberOfVotes) { - scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + previousVoteType)); - } - upvoteButton.setIcon(previousUpvoteButtonDrawable); - upvoteButton.setIconTint(previousUpvoteButtonIconTint); - scoreTextView.setTextColor(previousScoreTextViewColor); - downvoteButton.setIcon(previousDownvoteButtonDrawable); - downvoteButton.setIconTint(previousDownvoteButtonIconTint); - } - - EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post)); - } - }, post.getFullName(), newVoteType, getBindingAdapterPosition()); - } - }); - - saveButton.setOnClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position < 0) { - return; - } - Post post = getItem(position); - if (post != null) { - if (mAccountName.equals(Account.ANONYMOUS_ACCOUNT)) { - Toast.makeText(mActivity, R.string.login_first, Toast.LENGTH_SHORT).show(); - return; - } - - if (post.isSaved()) { - saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp); - SaveThing.unsaveThing(mOauthRetrofit, mAccessToken, post.getFullName(), - new SaveThing.SaveThingListener() { - @Override - public void success() { - post.setSaved(false); - if (getBindingAdapterPosition() == position) { - saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp); - } - Toast.makeText(mActivity, R.string.post_unsaved_success, Toast.LENGTH_SHORT).show(); - EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post)); - } - - @Override - public void failed() { - post.setSaved(true); - if (getBindingAdapterPosition() == position) { - saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp); - } - Toast.makeText(mActivity, R.string.post_unsaved_failed, Toast.LENGTH_SHORT).show(); - EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post)); - } - }); - } else { - saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp); - SaveThing.saveThing(mOauthRetrofit, mAccessToken, post.getFullName(), - new SaveThing.SaveThingListener() { - @Override - public void success() { - post.setSaved(true); - if (getBindingAdapterPosition() == position) { - saveButton.setIconResource(R.drawable.ic_bookmark_grey_24dp); - } - Toast.makeText(mActivity, R.string.post_saved_success, Toast.LENGTH_SHORT).show(); - EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post)); - } - - @Override - public void failed() { - post.setSaved(false); - if (getBindingAdapterPosition() == position) { - saveButton.setIconResource(R.drawable.ic_bookmark_border_grey_24dp); - } - Toast.makeText(mActivity, R.string.post_saved_failed, Toast.LENGTH_SHORT).show(); - EventBus.getDefault().post(new PostUpdateEventToPostDetailFragment(post)); - } - }); - } - } - }); - - shareButton.setOnClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position < 0) { - return; - } - Post post = getItem(position); - if (post != null) { - shareLink(post); - } - }); - - shareButton.setOnLongClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position < 0) { - return false; - } - Post post = getItem(position); - if (post != null) { - mActivity.copyLink(post.getPermalink()); - return true; - } - return false; - }); - } - } - - @UnstableApi - class PostMaterial3CardBaseVideoAutoplayViewHolder extends PostMaterial3CardBaseViewHolder implements ToroPlayer { - AspectRatioFrameLayout aspectRatioFrameLayout; - GifImageView previewImageView; - ImageView errorLoadingRedgifsImageView; - PlayerView videoPlayer; - ImageView muteButton; - ImageView fullscreenButton; - ImageView playPauseButton; - DefaultTimeBar progressBar; - @Nullable - Container container; - @Nullable - ExoPlayerViewHelper helper; - private Uri mediaUri; - private float volume; - public Call<String> fetchRedgifsOrStreamableVideoCall; - private boolean isManuallyPaused; - private Drawable playDrawable; - private Drawable pauseDrawable; - - PostMaterial3CardBaseVideoAutoplayViewHolder(View rootView, - AspectRatioGifImageView iconGifImageView, - TextView subredditTextView, - TextView userTextView, - ImageView stickiedPostImageView, - TextView postTimeTextView, - TextView titleTextView, - AspectRatioFrameLayout aspectRatioFrameLayout, - GifImageView previewImageView, - ImageView errorLoadingRedgifsImageView, - PlayerView videoPlayer, - ImageView muteButton, - ImageView fullscreenButton, - ImageView playPauseButton, - DefaultTimeBar progressBar, - ConstraintLayout bottomConstraintLayout, - MaterialButton upvoteButton, - TextView scoreTextView, - MaterialButton downvoteButton, - MaterialButton commentsCountButton, - MaterialButton saveButton, - MaterialButton shareButton) { - super(rootView); - setBaseView( - iconGifImageView, - subredditTextView, - userTextView, - stickiedPostImageView, - postTimeTextView, - titleTextView, - bottomConstraintLayout, - upvoteButton, - scoreTextView, - downvoteButton, - commentsCountButton, - saveButton, - shareButton); - - this.aspectRatioFrameLayout = aspectRatioFrameLayout; - this.previewImageView = previewImageView; - this.errorLoadingRedgifsImageView = errorLoadingRedgifsImageView; - this.videoPlayer = videoPlayer; - this.muteButton = muteButton; - this.fullscreenButton = fullscreenButton; - this.playPauseButton = playPauseButton; - this.progressBar = progressBar; - playDrawable = AppCompatResources.getDrawable(mActivity, R.drawable.ic_play_arrow_24dp); - pauseDrawable = AppCompatResources.getDrawable(mActivity, R.drawable.ic_pause_24dp); - - aspectRatioFrameLayout.setOnClickListener(null); - - muteButton.setOnClickListener(view -> { - if (helper != null) { - if (helper.getVolume() != 0) { - muteButton.setImageDrawable(ContextCompat.getDrawable(mActivity, R.drawable.ic_mute_24dp)); - helper.setVolume(0f); - volume = 0f; - mFragment.videoAutoplayChangeMutingOption(true); - } else { - muteButton.setImageDrawable(ContextCompat.getDrawable(mActivity, R.drawable.ic_unmute_24dp)); - helper.setVolume(1f); - volume = 1f; - mFragment.videoAutoplayChangeMutingOption(false); - } - } - }); - - playPauseButton.setOnClickListener(view -> { - if (isPlaying()) { - pause(); - isManuallyPaused = true; - savePlaybackInfo(getPlayerOrder(), getCurrentPlaybackInfo()); - } else { - isManuallyPaused = false; - play(); - } - }); - - progressBar.addListener(new TimeBar.OnScrubListener() { - @Override - public void onScrubStart(TimeBar timeBar, long position) { - - } - - @Override - public void onScrubMove(TimeBar timeBar, long position) { - - } - - @Override - public void onScrubStop(TimeBar timeBar, long position, boolean canceled) { - if (!canceled) { - savePlaybackInfo(getPlayerOrder(), getCurrentPlaybackInfo()); - } - } - }); - - fullscreenButton.setOnClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position < 0) { - return; - } - Post post = getItem(position); - if (post != null) { - if (helper != null) { - openMedia(post, helper.getLatestPlaybackInfo().getResumePosition()); - } else { - openMedia(post, -1); - } - } - }); - - previewImageView.setOnClickListener(view -> fullscreenButton.performClick()); - - videoPlayer.setOnClickListener(view -> { - if (mEasierToWatchInFullScreen && videoPlayer.isControllerFullyVisible()) { - fullscreenButton.performClick(); - } - }); - } - - void bindVideoUri(Uri videoUri) { - mediaUri = videoUri; - } - - void setVolume(float volume) { - this.volume = volume; - } - - void resetVolume() { - volume = 0f; - } - - private void savePlaybackInfo(int order, @Nullable PlaybackInfo playbackInfo) { - if (container != null) container.savePlaybackInfo(order, playbackInfo); - } - - void loadFallbackDirectVideo() { - if (post.getVideoFallBackDirectUrl() != null) { - mediaUri = Uri.parse(post.getVideoFallBackDirectUrl()); - post.setVideoDownloadUrl(post.getVideoFallBackDirectUrl()); - post.setVideoUrl(post.getVideoFallBackDirectUrl()); - post.setLoadRedgifsOrStreamableVideoSuccess(true); - if (container != null) { - container.onScrollStateChanged(RecyclerView.SCROLL_STATE_IDLE); - } - } - } - - @NonNull - @Override - public View getPlayerView() { - return videoPlayer; - } - - @NonNull - @Override - public PlaybackInfo getCurrentPlaybackInfo() { - return helper != null && mediaUri != null ? helper.getLatestPlaybackInfo() : new PlaybackInfo(); - } - - @Override - public void initialize(@NonNull Container container, @NonNull PlaybackInfo playbackInfo) { - if (mediaUri == null) { - return; - } - if (this.container == null) { - this.container = container; - } - if (helper == null) { - helper = new ExoPlayerViewHelper(this, mediaUri, null, mExoCreator); - helper.addEventListener(new Playable.DefaultEventListener() { - @Override - public void onEvents(@NonNull Player player, @NonNull Player.Events events) { - if (events.containsAny( - Player.EVENT_PLAY_WHEN_READY_CHANGED, - Player.EVENT_PLAYBACK_STATE_CHANGED, - Player.EVENT_PLAYBACK_SUPPRESSION_REASON_CHANGED)) { - playPauseButton.setImageDrawable(Util.shouldShowPlayButton(player) ? playDrawable : pauseDrawable); - } - } - - @Override - public void onTracksChanged(@NonNull Tracks tracks) { - ImmutableList<Tracks.Group> trackGroups = tracks.getGroups(); - if (!trackGroups.isEmpty()) { - for (int i = 0; i < trackGroups.size(); i++) { - String mimeType = trackGroups.get(i).getTrackFormat(0).sampleMimeType; - if (mimeType != null && mimeType.contains("audio")) { - if (mFragment.getMasterMutingOption() != null) { - volume = mFragment.getMasterMutingOption() ? 0f : 1f; - } - helper.setVolume(volume); - muteButton.setVisibility(View.VISIBLE); - if (volume != 0f) { - muteButton.setImageDrawable(ContextCompat.getDrawable(mActivity, R.drawable.ic_unmute_24dp)); - } else { - muteButton.setImageDrawable(ContextCompat.getDrawable(mActivity, R.drawable.ic_mute_24dp)); - } - break; - } - } - } else { - muteButton.setVisibility(View.GONE); - } - } - - @Override - public void onRenderedFirstFrame() { - mGlide.clear(previewImageView); - previewImageView.setVisibility(View.GONE); - } - - @Override - public void onPlayerError(@NonNull PlaybackException error) { - if (post.getVideoFallBackDirectUrl() == null || post.getVideoFallBackDirectUrl().equals(mediaUri.toString())) { - errorLoadingRedgifsImageView.setVisibility(View.VISIBLE); - } else { - loadFallbackDirectVideo(); - } - } - }); - } - helper.initialize(container, playbackInfo); - } - - @Override - public void play() { - if (helper != null && mediaUri != null) { - if (!isPlaying() && isManuallyPaused) { - helper.play(); - pause(); - helper.setVolume(volume); - } else { - helper.play(); - } - } - } - - @Override - public void pause() { - if (helper != null) helper.pause(); - } - - @Override - public boolean isPlaying() { - return helper != null && helper.isPlaying(); - } - - @Override - public void release() { - if (helper != null) { - helper.release(); - helper = null; - } - isManuallyPaused = false; - container = null; - } - - @Override - public boolean wantsToPlay() { - return canPlayVideo && mediaUri != null && ToroUtil.visibleAreaOffset(this, itemView.getParent()) >= mStartAutoplayVisibleAreaOffset; - } - - @Override - public int getPlayerOrder() { - return getBindingAdapterPosition(); - } - } - - @UnstableApi - class PostMaterial3CardVideoAutoplayViewHolder extends PostMaterial3CardBaseVideoAutoplayViewHolder { - PostMaterial3CardVideoAutoplayViewHolder(ItemPostCard3VideoTypeAutoplayBinding binding) { - super(binding.getRoot(), - binding.iconGifImageViewItemPostCard3VideoTypeAutoplay, - binding.subredditNameTextViewItemPostCard3VideoTypeAutoplay, - binding.userTextViewItemPostCard3VideoTypeAutoplay, - binding.stickiedPostImageViewItemPostCard3VideoTypeAutoplay, - binding.postTimeTextViewItemPostCard3VideoTypeAutoplay, - binding.titleTextViewItemPostCard3VideoTypeAutoplay, - binding.aspectRatioFrameLayoutItemPostCard3VideoTypeAutoplay, - binding.previewImageViewItemPostCard3VideoTypeAutoplay, - binding.errorLoadingVideoImageViewItemPostCard3VideoTypeAutoplay, - binding.playerViewItemPostCard3VideoTypeAutoplay, - binding.getRoot().findViewById(R.id.mute_exo_playback_control_view), - binding.getRoot().findViewById(R.id.fullscreen_exo_playback_control_view), - binding.getRoot().findViewById(R.id.exo_play), - binding.getRoot().findViewById(R.id.exo_progress), - binding.bottomConstraintLayoutItemPostCard3VideoTypeAutoplay, - binding.upvoteButtonItemPostCard3VideoTypeAutoplay, - binding.scoreTextViewItemPostCard3VideoTypeAutoplay, - binding.downvoteButtonItemPostCard3VideoTypeAutoplay, - binding.commentsCountButtonItemPostCard3VideoTypeAutoplay, - binding.saveButtonItemPostCard3VideoTypeAutoplay, - binding.shareButtonItemPostCard3VideoTypeAutoplay); - } - } - - @UnstableApi - class PostMaterial3CardVideoAutoplayLegacyControllerViewHolder extends PostMaterial3CardBaseVideoAutoplayViewHolder { - PostMaterial3CardVideoAutoplayLegacyControllerViewHolder(ItemPostCard3VideoTypeAutoplayLegacyControllerBinding binding) { - super(binding.getRoot(), - binding.iconGifImageViewItemPostCard3VideoTypeAutoplay, - binding.subredditNameTextViewItemPostCard3VideoTypeAutoplay, - binding.userTextViewItemPostCard3VideoTypeAutoplay, - binding.stickiedPostImageViewItemPostCard3VideoTypeAutoplay, - binding.postTimeTextViewItemPostCard3VideoTypeAutoplay, - binding.titleTextViewItemPostCard3VideoTypeAutoplay, - binding.aspectRatioFrameLayoutItemPostCard3VideoTypeAutoplay, - binding.previewImageViewItemPostCard3VideoTypeAutoplay, - binding.errorLoadingVideoImageViewItemPostCard3VideoTypeAutoplay, - binding.playerViewItemPostCard3VideoTypeAutoplay, - binding.getRoot().findViewById(R.id.mute_exo_playback_control_view), - binding.getRoot().findViewById(R.id.fullscreen_exo_playback_control_view), - binding.getRoot().findViewById(R.id.exo_play), - binding.getRoot().findViewById(R.id.exo_progress), - binding.bottomConstraintLayoutItemPostCard3VideoTypeAutoplay, - binding.upvoteButtonItemPostCard3VideoTypeAutoplay, - binding.scoreTextViewItemPostCard3VideoTypeAutoplay, - binding.downvoteButtonItemPostCard3VideoTypeAutoplay, - binding.commentsCountButtonItemPostCard3VideoTypeAutoplay, - binding.saveButtonItemPostCard3VideoTypeAutoplay, - binding.shareButtonItemPostCard3VideoTypeAutoplay); - } - } - - class PostMaterial3CardWithPreviewViewHolder extends PostMaterial3CardBaseViewHolder { - ItemPostCard3WithPreviewBinding binding; - RequestListener<Drawable> glideRequestListener; - - PostMaterial3CardWithPreviewViewHolder(@NonNull ItemPostCard3WithPreviewBinding binding) { - super(binding.getRoot()); - this.binding = binding; - setBaseView(binding.iconGifImageViewItemPostCard3WithPreview, - binding.subredditNameTextViewItemPostCard3WithPreview, - binding.userTextViewItemPostCard3WithPreview, - binding.stickiedPostImageViewItemPostCard3WithPreview, - binding.postTimeTextViewItemPostCard3WithPreview, - binding.titleTextViewItemPostCard3WithPreview, - binding.bottomConstraintLayoutItemPostCard3WithPreview, - binding.upvoteButtonItemPostCard3WithPreview, - binding.scoreTextViewItemPostCard3WithPreview, - binding.downvoteButtonItemPostCard3WithPreview, - binding.commentsCountButtonItemPostCard3WithPreview, - binding.saveButtonItemPostCard3WithPreview, - binding.shareButtonItemPostCard3WithPreview); - - if (mActivity.typeface != null) { - binding.linkTextViewItemPostCard3WithPreview.setTypeface(mActivity.typeface); - binding.loadImageErrorTextViewItemPostCard3WithPreview.setTypeface(mActivity.typeface); - } - binding.linkTextViewItemPostCard3WithPreview.setTextColor(mSecondaryTextColor); - binding.imageViewNoPreviewGalleryItemPostCard3WithPreview.setBackgroundColor(mNoPreviewPostTypeBackgroundColor); - binding.imageViewNoPreviewGalleryItemPostCard3WithPreview.setColorFilter(mNoPreviewPostTypeIconTint, android.graphics.PorterDuff.Mode.SRC_IN); - binding.progressBarItemPostCard3WithPreview.setIndeterminateTintList(ColorStateList.valueOf(mColorAccent)); - binding.videoOrGifIndicatorImageViewItemPostCard3WithPreview.setColorFilter(mMediaIndicatorIconTint, PorterDuff.Mode.SRC_IN); - binding.videoOrGifIndicatorImageViewItemPostCard3WithPreview.setBackgroundTintList(ColorStateList.valueOf(mMediaIndicatorBackgroundColor)); - binding.loadImageErrorTextViewItemPostCard3WithPreview.setTextColor(mPrimaryTextColor); - - binding.imageViewItemPostCard3WithPreview.setOnClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position < 0) { - return; - } - Post post = getItem(position); - if (post != null) { - openMedia(post); - } - }); - - binding.loadImageErrorTextViewItemPostCard3WithPreview.setOnClickListener(view -> { - binding.progressBarItemPostCard3WithPreview.setVisibility(View.VISIBLE); - binding.loadImageErrorTextViewItemPostCard3WithPreview.setVisibility(View.GONE); - loadImage(this); - }); - - binding.imageViewNoPreviewGalleryItemPostCard3WithPreview.setOnClickListener(view -> { - binding.imageViewItemPostCard3WithPreview.performClick(); - }); - - glideRequestListener = new RequestListener<>() { - @Override - public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) { - binding.progressBarItemPostCard3WithPreview.setVisibility(View.GONE); - binding.loadImageErrorTextViewItemPostCard3WithPreview.setVisibility(View.VISIBLE); - return false; - } - - @Override - public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) { - binding.loadImageErrorTextViewItemPostCard3WithPreview.setVisibility(View.GONE); - binding.progressBarItemPostCard3WithPreview.setVisibility(View.GONE); - return false; - } - }; - } - } - - public class PostMaterial3CardBaseGalleryTypeViewHolder extends PostMaterial3CardBaseViewHolder { - FrameLayout frameLayout; - RecyclerView galleryRecyclerView; - CustomTextView imageIndexTextView; - ImageView noPreviewImageView; - - PostGalleryTypeImageRecyclerViewAdapter adapter; - private boolean swipeLocked; - - PostMaterial3CardBaseGalleryTypeViewHolder(View rootView, - AspectRatioGifImageView iconGifImageView, - TextView subredditTextView, - TextView userTextView, - ImageView stickiedPostImageView, - TextView postTimeTextView, - TextView titleTextView, - FrameLayout frameLayout, - RecyclerView galleryRecyclerView, - CustomTextView imageIndexTextView, - ImageView noPreviewImageView, - ConstraintLayout bottomConstraintLayout, - MaterialButton upvoteButton, - TextView scoreTextView, - MaterialButton downvoteButton, - MaterialButton commentsCountButton, - MaterialButton saveButton, - MaterialButton shareButton) { - super(rootView); - setBaseView( - iconGifImageView, - subredditTextView, - userTextView, - stickiedPostImageView, - postTimeTextView, - titleTextView, - bottomConstraintLayout, - upvoteButton, - scoreTextView, - downvoteButton, - commentsCountButton, - saveButton, - shareButton); - - this.frameLayout = frameLayout; - this.galleryRecyclerView = galleryRecyclerView; - this.imageIndexTextView = imageIndexTextView; - this.noPreviewImageView = noPreviewImageView; - - imageIndexTextView.setTextColor(mMediaIndicatorIconTint); - imageIndexTextView.setBackgroundColor(mMediaIndicatorBackgroundColor); - imageIndexTextView.setBorderColor(mMediaIndicatorBackgroundColor); - if (mActivity.typeface != null) { - imageIndexTextView.setTypeface(mActivity.typeface); - } - - noPreviewImageView.setBackgroundColor(mNoPreviewPostTypeBackgroundColor); - noPreviewImageView.setColorFilter(mNoPreviewPostTypeIconTint, android.graphics.PorterDuff.Mode.SRC_IN); - - adapter = new PostGalleryTypeImageRecyclerViewAdapter(mGlide, mActivity.typeface, - mSaveMemoryCenterInsideDownsampleStrategy, mColorAccent, mPrimaryTextColor, mScale, - galleryImage -> itemView.performLongClick()); - galleryRecyclerView.setOnTouchListener((v, motionEvent) -> { - if (motionEvent.getActionMasked() == MotionEvent.ACTION_UP || motionEvent.getActionMasked() == MotionEvent.ACTION_CANCEL) { - if (mActivity.mSliderPanel != null) { - mActivity.mSliderPanel.requestDisallowInterceptTouchEvent(false); - } - - if (mActivity.mViewPager2 != null) { - mActivity.mViewPager2.setUserInputEnabled(true); - } - mActivity.unlockSwipeRightToGoBack(); - swipeLocked = false; - } else { - if (mActivity.mSliderPanel != null) { - mActivity.mSliderPanel.requestDisallowInterceptTouchEvent(true); - } - if (mActivity.mViewPager2 != null) { - mActivity.mViewPager2.setUserInputEnabled(false); - } - mActivity.lockSwipeRightToGoBack(); - swipeLocked = true; - } - - return false; - }); - galleryRecyclerView.setAdapter(adapter); - new PagerSnapHelper().attachToRecyclerView(galleryRecyclerView); - galleryRecyclerView.setRecycledViewPool(mGalleryRecycledViewPool); - LinearLayoutManagerBugFixed layoutManager = new LinearLayoutManagerBugFixed(mActivity, RecyclerView.HORIZONTAL, false); - galleryRecyclerView.setLayoutManager(layoutManager); - galleryRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { - @Override - public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) { - super.onScrollStateChanged(recyclerView, newState); - } - - @Override - public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { - super.onScrolled(recyclerView, dx, dy); - imageIndexTextView.setText(mActivity.getString(R.string.image_index_in_gallery, layoutManager.findFirstVisibleItemPosition() + 1, post.getGallery().size())); - } - }); - galleryRecyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() { - private float downX; - private float downY; - private boolean dragged; - private final int minTouchSlop = ViewConfiguration.get(mActivity).getScaledTouchSlop(); - - @Override - public boolean onInterceptTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) { - int action = e.getAction(); - switch (action) { - case MotionEvent.ACTION_DOWN: - downX = e.getRawX(); - downY = e.getRawY(); - break; - case MotionEvent.ACTION_MOVE: - if(Math.abs(e.getRawX() - downX) > minTouchSlop || Math.abs(e.getRawY() - downY) > minTouchSlop) { - dragged = true; - } - break; - case MotionEvent.ACTION_UP: - if (!dragged) { - int position = getBindingAdapterPosition(); - if (position >= 0) { - if (post != null) { - openMedia(post, layoutManager.findFirstVisibleItemPosition()); - } - } - } - - downX = 0; - downY = 0; - dragged = false; - } - return false; - } - - @Override - public void onTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) { - - } - - @Override - public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { - - } - }); - - noPreviewImageView.setOnClickListener(view -> { - int position = getBindingAdapterPosition(); - if (position < 0) { - return; - } - if (post != null) { - openMedia(post, 0); - } - }); - } - - public boolean isSwipeLocked() { - return swipeLocked; - } - } - - public class PostMaterial3CardGalleryTypeViewHolder extends PostMaterial3CardBaseGalleryTypeViewHolder { - - PostMaterial3CardGalleryTypeViewHolder(ItemPostCard3GalleryTypeBinding binding) { - super(binding.getRoot(), - binding.iconGifImageViewItemPostCard3GalleryType, - binding.subredditNameTextViewItemPostCard3GalleryType, - binding.userTextViewItemPostCard3GalleryType, - binding.stickiedPostImageViewItemPostCard3GalleryType, - binding.postTimeTextViewItemPostCard3GalleryType, - binding.titleTextViewItemPostCard3GalleryType, - binding.galleryFrameLayoutItemPostCard3GalleryType, - binding.galleryRecyclerViewItemPostCard3GalleryType, - binding.imageIndexTextViewItemPostCard3GalleryType, - binding.noPreviewImageViewItemPostCard3GalleryType, - binding.bottomConstraintLayoutItemPostCard3GalleryType, - binding.upvoteButtonItemPostCard3GalleryType, - binding.scoreTextViewItemPostCard3GalleryType, - binding.downvoteButtonItemPostCard3GalleryType, - binding.commentsCountButtonItemPostCard3GalleryType, - binding.saveButtonItemPostCard3GalleryType, - binding.shareButtonItemPostCard3GalleryType); - } - } - - class PostMaterial3CardTextTypeViewHolder extends PostMaterial3CardBaseViewHolder { - - ItemPostCard3TextBinding binding; - - PostMaterial3CardTextTypeViewHolder(@NonNull ItemPostCard3TextBinding binding) { - super(binding.getRoot()); - this.binding = binding; - setBaseView( - binding.iconGifImageViewItemPostCard3TextType, - binding.subredditNameTextViewItemPostCard3TextType, - binding.userTextViewItemPostCard3TextType, - binding.stickiedPostImageViewItemPostCard3TextType, - binding.postTimeTextViewItemPostCard3TextType, - binding.titleTextViewItemPostCard3TextType, - binding.bottomConstraintLayoutItemPostCard3TextType, - binding.upvoteButtonItemPostCard3TextType, - binding.scoreTextViewItemPostCard3TextType, - binding.downvoteButtonItemPostCard3TextType, - binding.commentsCountButtonItemPostCard3TextType, - binding.saveButtonItemPostCard3TextType, - binding.shareButtonItemPostCard3TextType); - - if (mActivity.contentTypeface != null) { - binding.contentTextViewItemPostCard3TextType.setTypeface(mActivity.contentTypeface); - } - binding.contentTextViewItemPostCard3TextType.setTextColor(mPostContentColor); - } - } -} 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 ad143edb..72022ea9 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostRecyclerViewAdapter.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostRecyclerViewAdapter.java @@ -253,18 +253,20 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie private boolean mFixedHeightPreviewInCard; private boolean mHideTextPostContent; private boolean mEasierToWatchInFullScreen; + private boolean mHandleReadPost; private ExoCreator mExoCreator; private Callback mCallback; private boolean canPlayVideo = true; private RecyclerView.RecycledViewPool mGalleryRecycledViewPool; - public PostRecyclerViewAdapter(BaseActivity activity, PostFragment fragment, Executor executor, Retrofit oauthRetrofit, + // postHistorySharedPreferences will be null when being used in HistoryPostFragment. + public PostRecyclerViewAdapter(BaseActivity activity, PostFragmentBase fragment, Executor executor, Retrofit oauthRetrofit, Retrofit redgifsRetrofit, Provider<StreamableAPI> streamableApiProvider, CustomThemeWrapper customThemeWrapper, Locale locale, @Nullable String accessToken, @NonNull String accountName, int postType, int postLayout, boolean displaySubredditName, SharedPreferences sharedPreferences, SharedPreferences currentAccountSharedPreferences, SharedPreferences nsfwAndSpoilerSharedPreferences, - SharedPreferences postHistorySharedPreferences, + @Nullable SharedPreferences postHistorySharedPreferences, ExoCreator exoCreator, Callback callback) { super(DIFF_CALLBACK); if (activity != null) { @@ -319,9 +321,12 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie mDisableImagePreview = sharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_IMAGE_PREVIEW, false); mOnlyDisablePreviewInVideoAndGifPosts = sharedPreferences.getBoolean(SharedPreferencesUtils.ONLY_DISABLE_PREVIEW_IN_VIDEO_AND_GIF_POSTS, false); - mMarkPostsAsRead = postHistorySharedPreferences.getBoolean((accountName.equals(Account.ANONYMOUS_ACCOUNT) ? "" : accountName) + SharedPreferencesUtils.MARK_POSTS_AS_READ_BASE, false); - mMarkPostsAsReadAfterVoting = postHistorySharedPreferences.getBoolean((accountName.equals(Account.ANONYMOUS_ACCOUNT) ? "" : accountName) + SharedPreferencesUtils.MARK_POSTS_AS_READ_AFTER_VOTING_BASE, false); - mMarkPostsAsReadOnScroll = postHistorySharedPreferences.getBoolean((accountName.equals(Account.ANONYMOUS_ACCOUNT) ? "" : accountName) + SharedPreferencesUtils.MARK_POSTS_AS_READ_ON_SCROLL_BASE, false); + if (postHistorySharedPreferences != null) { + mMarkPostsAsRead = postHistorySharedPreferences.getBoolean((accountName.equals(Account.ANONYMOUS_ACCOUNT) ? "" : accountName) + SharedPreferencesUtils.MARK_POSTS_AS_READ_BASE, false); + mMarkPostsAsReadAfterVoting = postHistorySharedPreferences.getBoolean((accountName.equals(Account.ANONYMOUS_ACCOUNT) ? "" : accountName) + SharedPreferencesUtils.MARK_POSTS_AS_READ_AFTER_VOTING_BASE, false); + mMarkPostsAsReadOnScroll = postHistorySharedPreferences.getBoolean((accountName.equals(Account.ANONYMOUS_ACCOUNT) ? "" : accountName) + SharedPreferencesUtils.MARK_POSTS_AS_READ_ON_SCROLL_BASE, false); + mHandleReadPost = true; + } mHidePostType = sharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_POST_TYPE, false); mHidePostFlair = sharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_POST_FLAIR, false); @@ -338,7 +343,6 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie mColorAccent = customThemeWrapper.getColorAccent(); mCardViewBackgroundColor = customThemeWrapper.getCardViewBackgroundColor(); - //mCardViewBackgroundColor = Color.parseColor("#FBEEFC"); mReadPostCardViewBackgroundColor = customThemeWrapper.getReadPostCardViewBackgroundColor(); mFilledCardViewBackgroundColor = customThemeWrapper.getFilledCardViewBackgroundColor(); mReadPostFilledCardViewBackgroundColor = customThemeWrapper.getReadPostFilledCardViewBackgroundColor(); @@ -604,7 +608,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie ((PostViewHolder) holder).post = post; ((PostViewHolder) holder).currentPosition = position; - if (post.isRead()) { + if (mHandleReadPost && post.isRead()) { ((PostViewHolder) holder).setItemViewBackgroundColor(true); ((PostBaseViewHolder) holder).titleTextView.setTextColor(mReadPostTitleColor); } @@ -945,7 +949,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie } else if (holder instanceof PostTextTypeViewHolder) { if (!mHideTextPostContent && !post.isSpoiler() && post.getSelfTextPlainTrimmed() != null && !post.getSelfTextPlainTrimmed().isEmpty()) { ((PostTextTypeViewHolder) holder).contentTextView.setVisibility(View.VISIBLE); - if (post.isRead()) { + if (mHandleReadPost && post.isRead()) { ((PostTextTypeViewHolder) holder).contentTextView.setTextColor(mReadPostContentColor); } ((PostTextTypeViewHolder) holder).contentTextView.setText(post.getSelfTextPlainTrimmed()); @@ -1071,7 +1075,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie if (post != null) { ((PostGalleryViewHolder) holder).post = post; ((PostGalleryViewHolder) holder).currentPosition = position; - if (post.isRead()) { + if (mHandleReadPost && post.isRead()) { holder.itemView.setBackgroundTintList(ColorStateList.valueOf(mReadPostCardViewBackgroundColor)); ((PostGalleryViewHolder) holder).binding.titleTextViewItemPostGallery.setTextColor(mReadPostTitleColor); } @@ -1229,7 +1233,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie if (post != null) { ((PostGalleryBaseGalleryTypeViewHolder) holder).post = post; ((PostGalleryBaseGalleryTypeViewHolder) holder).currentPosition = position; - if (post.isRead()) { + if (mHandleReadPost && post.isRead()) { holder.itemView.setBackgroundTintList(ColorStateList.valueOf(mReadPostCardViewBackgroundColor)); } @@ -1508,7 +1512,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie @Override public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) { if (holder instanceof PostViewHolder) { - if (mMarkPostsAsReadOnScroll) { + if (mHandleReadPost && mMarkPostsAsReadOnScroll) { int position = ((PostViewHolder) holder).currentPosition; if (position < getItemCount() && position >= 0) { Post post = getItem(position); @@ -1594,7 +1598,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie ((PostCompactBaseViewHolder) holder).noPreviewPostImageFrameLayout.setVisibility(View.GONE); } } else if (holder instanceof PostGalleryViewHolder) { - if (mMarkPostsAsReadOnScroll) { + if (mHandleReadPost && mMarkPostsAsReadOnScroll) { int position = ((PostGalleryViewHolder) holder).currentPosition; if (position < super.getItemCount() && position >= 0) { Post post = getItem(position); @@ -1612,7 +1616,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie ((PostGalleryViewHolder) holder).binding.videoOrGifIndicatorImageViewItemPostGallery.setVisibility(View.GONE); ((PostGalleryViewHolder) holder).binding.imageViewNoPreviewItemPostGallery.setVisibility(View.GONE); } else if (holder instanceof PostGalleryBaseGalleryTypeViewHolder) { - if (mMarkPostsAsReadOnScroll) { + if (mHandleReadPost && mMarkPostsAsReadOnScroll) { int position = ((PostGalleryBaseGalleryTypeViewHolder) holder).currentPosition; if (position < super.getItemCount() && position >= 0) { Post post = getItem(position); @@ -2891,6 +2895,10 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie @Override void markPostRead(Post post, boolean changePostItemColor) { + if (!mHandleReadPost) { + return; + } + if (!mAccountName.equals(Account.ANONYMOUS_ACCOUNT) && !post.isRead() && mMarkPostsAsRead) { post.markAsRead(); if (changePostItemColor) { @@ -3804,6 +3812,10 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie @Override void markPostRead(Post post, boolean changePostItemColor) { + if (!mHandleReadPost) { + return; + } + if (!mAccountName.equals(Account.ANONYMOUS_ACCOUNT) && !post.isRead() && mMarkPostsAsRead) { post.markAsRead(); if (changePostItemColor) { @@ -3979,6 +3991,10 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie } void markPostRead(Post post, boolean changePostItemColor) { + if (!mHandleReadPost) { + return; + } + if (!mAccountName.equals(Account.ANONYMOUS_ACCOUNT) && !post.isRead() && mMarkPostsAsRead) { post.markAsRead(); if (changePostItemColor) { @@ -4168,6 +4184,10 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie } void markPostRead(Post post, boolean changePostItemColor) { + if (!mHandleReadPost) { + return; + } + if (!mAccountName.equals(Account.ANONYMOUS_ACCOUNT) && !post.isRead() && mMarkPostsAsRead) { post.markAsRead(); if (changePostItemColor) { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/HistoryPostFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/HistoryPostFragment.java index 7822703c..369da42b 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/HistoryPostFragment.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/HistoryPostFragment.java @@ -5,25 +5,20 @@ import static ml.docilealligator.infinityforreddit.videoautoplay.media.PlaybackI import android.content.SharedPreferences; import android.content.res.Resources; -import android.graphics.Canvas; import android.os.Build; import android.os.Bundle; import android.os.Handler; -import android.view.HapticFeedbackConstants; import android.view.LayoutInflater; -import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; -import android.view.WindowManager; -import android.widget.Toast; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.lifecycle.ViewModelProvider; -import androidx.paging.ItemSnapshotList; import androidx.paging.LoadState; -import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.StaggeredGridLayoutManager; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import androidx.transition.AutoTransition; import androidx.transition.TransitionManager; @@ -46,54 +41,19 @@ import ml.docilealligator.infinityforreddit.RecyclerViewContentScrollingInterfac import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; import ml.docilealligator.infinityforreddit.account.Account; import ml.docilealligator.infinityforreddit.activities.BaseActivity; -import ml.docilealligator.infinityforreddit.adapters.HistoryPostRecyclerViewAdapter; import ml.docilealligator.infinityforreddit.adapters.Paging3LoadingStateAdapter; +import ml.docilealligator.infinityforreddit.adapters.PostRecyclerViewAdapter; import ml.docilealligator.infinityforreddit.apis.StreamableAPI; import ml.docilealligator.infinityforreddit.customviews.LinearLayoutManagerBugFixed; import ml.docilealligator.infinityforreddit.databinding.FragmentHistoryPostBinding; -import ml.docilealligator.infinityforreddit.events.ChangeAutoplayNsfwVideosEvent; -import ml.docilealligator.infinityforreddit.events.ChangeCompactLayoutToolbarHiddenByDefaultEvent; -import ml.docilealligator.infinityforreddit.events.ChangeDataSavingModeEvent; -import ml.docilealligator.infinityforreddit.events.ChangeDefaultLinkPostLayoutEvent; import ml.docilealligator.infinityforreddit.events.ChangeDefaultPostLayoutEvent; -import ml.docilealligator.infinityforreddit.events.ChangeDisableImagePreviewEvent; -import ml.docilealligator.infinityforreddit.events.ChangeEasierToWatchInFullScreenEvent; -import ml.docilealligator.infinityforreddit.events.ChangeEnableSwipeActionSwitchEvent; -import ml.docilealligator.infinityforreddit.events.ChangeFixedHeightPreviewInCardEvent; -import ml.docilealligator.infinityforreddit.events.ChangeHidePostFlairEvent; -import ml.docilealligator.infinityforreddit.events.ChangeHidePostTypeEvent; -import ml.docilealligator.infinityforreddit.events.ChangeHideSubredditAndUserPrefixEvent; -import ml.docilealligator.infinityforreddit.events.ChangeHideTextPostContent; -import ml.docilealligator.infinityforreddit.events.ChangeHideTheNumberOfCommentsEvent; -import ml.docilealligator.infinityforreddit.events.ChangeHideTheNumberOfVotesEvent; -import ml.docilealligator.infinityforreddit.events.ChangeLongPressToHideToolbarInCompactLayoutEvent; -import ml.docilealligator.infinityforreddit.events.ChangeMuteAutoplayingVideosEvent; -import ml.docilealligator.infinityforreddit.events.ChangeMuteNSFWVideoEvent; -import ml.docilealligator.infinityforreddit.events.ChangeNSFWBlurEvent; -import ml.docilealligator.infinityforreddit.events.ChangeNetworkStatusEvent; -import ml.docilealligator.infinityforreddit.events.ChangeOnlyDisablePreviewInVideoAndGifPostsEvent; -import ml.docilealligator.infinityforreddit.events.ChangePostFeedMaxResolutionEvent; -import ml.docilealligator.infinityforreddit.events.ChangePostLayoutEvent; -import ml.docilealligator.infinityforreddit.events.ChangePullToRefreshEvent; -import ml.docilealligator.infinityforreddit.events.ChangeShowAbsoluteNumberOfVotesEvent; -import ml.docilealligator.infinityforreddit.events.ChangeShowElapsedTimeEvent; -import ml.docilealligator.infinityforreddit.events.ChangeSpoilerBlurEvent; -import ml.docilealligator.infinityforreddit.events.ChangeStartAutoplayVisibleAreaOffsetEvent; -import ml.docilealligator.infinityforreddit.events.ChangeTimeFormatEvent; -import ml.docilealligator.infinityforreddit.events.ChangeVideoAutoplayEvent; -import ml.docilealligator.infinityforreddit.events.ChangeVoteButtonsPositionEvent; import ml.docilealligator.infinityforreddit.events.NeedForPostListFromPostFragmentEvent; -import ml.docilealligator.infinityforreddit.events.PostUpdateEventToPostList; import ml.docilealligator.infinityforreddit.events.ProvidePostListToViewPostDetailActivityEvent; -import ml.docilealligator.infinityforreddit.events.ShowDividerInCompactLayoutPreferenceEvent; -import ml.docilealligator.infinityforreddit.events.ShowThumbnailOnTheRightInCompactLayoutEvent; import ml.docilealligator.infinityforreddit.post.HistoryPostPagingSource; import ml.docilealligator.infinityforreddit.post.HistoryPostViewModel; -import ml.docilealligator.infinityforreddit.post.Post; import ml.docilealligator.infinityforreddit.postfilter.PostFilter; import ml.docilealligator.infinityforreddit.postfilter.PostFilterUsage; import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils; -import ml.docilealligator.infinityforreddit.utils.Utils; import ml.docilealligator.infinityforreddit.videoautoplay.ExoCreator; import ml.docilealligator.infinityforreddit.videoautoplay.media.PlaybackInfo; import ml.docilealligator.infinityforreddit.videoautoplay.media.VolumeInfo; @@ -144,10 +104,8 @@ public class HistoryPostFragment extends PostFragmentBase implements FragmentCom ExoCreator mExoCreator; @Inject Executor mExecutor; - private MenuItem lazyModeItem; private int postType; - private boolean hasPost = false; - private HistoryPostRecyclerViewAdapter mAdapter; + private PostRecyclerViewAdapter mAdapter; private int maxPosition = -1; private PostFilter postFilter; private ArrayList<String> readPosts; @@ -193,35 +151,6 @@ public class HistoryPostFragment extends PostFragmentBase implements FragmentCom } } - lazyModeRunnable = new LazyModeRunnable() { - - @Override - public void run() { - if (isInLazyMode && !isLazyModePaused && mAdapter != null) { - int nPosts = mAdapter.getItemCount(); - if (getCurrentPosition() == -1) { - if (mLinearLayoutManager != null) { - setCurrentPosition(mLinearLayoutManager.findFirstVisibleItemPosition()); - } else { - int[] into = new int[2]; - setCurrentPosition(mStaggeredGridLayoutManager.findFirstVisibleItemPositions(into)[1]); - } - } - - if (getCurrentPosition() != RecyclerView.NO_POSITION && nPosts > getCurrentPosition()) { - incrementCurrentPosition(); - smoothScroller.setTargetPosition(getCurrentPosition()); - if (mLinearLayoutManager != null) { - mLinearLayoutManager.startSmoothScroll(smoothScroller); - } else { - mStaggeredGridLayoutManager.startSmoothScroll(smoothScroller); - } - } - } - lazyModeHandler.postDelayed(this, (long) (lazyModeInterval * 1000)); - } - }; - binding.swipeRefreshLayoutHistoryPostFragment.setEnabled(mSharedPreferences.getBoolean(SharedPreferencesUtils.PULL_TO_REFRESH, true)); binding.swipeRefreshLayoutHistoryPostFragment.setOnRefreshListener(this::refresh); @@ -265,11 +194,11 @@ public class HistoryPostFragment extends PostFragmentBase implements FragmentCom if (historyType == HISTORY_TYPE_READ_POSTS) { postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.HISTORY_POST_LAYOUT_READ_POST, defaultPostLayout); - mAdapter = new HistoryPostRecyclerViewAdapter(activity, this, mExecutor, mOauthRetrofit, + mAdapter = new PostRecyclerViewAdapter(activity, this, mExecutor, mOauthRetrofit, mRedgifsRetrofit, mStreamableApiProvider, mCustomThemeWrapper, locale, activity.accessToken, activity.accountName, postType, postLayout, true, mSharedPreferences, mCurrentAccountSharedPreferences, mNsfwAndSpoilerSharedPreferences, - mExoCreator, new HistoryPostRecyclerViewAdapter.Callback() { + null, mExoCreator, new PostRecyclerViewAdapter.Callback() { @Override public void typeChipClicked(int filter) { /*Intent intent = new Intent(activity, FilteredPostsActivity.class); @@ -343,106 +272,6 @@ public class HistoryPostFragment extends PostFragmentBase implements FragmentCom initializeAndBindPostViewModel(); } - touchHelper = new ItemTouchHelper(new ItemTouchHelper.Callback() { - boolean exceedThreshold = false; - - @Override - public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { - if (!(viewHolder instanceof HistoryPostRecyclerViewAdapter.PostBaseViewHolder) && - !(viewHolder instanceof HistoryPostRecyclerViewAdapter.PostCompactBaseViewHolder) && - !(viewHolder instanceof HistoryPostRecyclerViewAdapter.PostMaterial3CardBaseViewHolder)) { - return makeMovementFlags(0, 0); - } else if (viewHolder instanceof HistoryPostRecyclerViewAdapter.PostBaseGalleryTypeViewHolder) { - if (((HistoryPostRecyclerViewAdapter.PostBaseGalleryTypeViewHolder) viewHolder).isSwipeLocked()) { - return makeMovementFlags(0, 0); - } - } - int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END; - return makeMovementFlags(0, swipeFlags); - } - - @Override - public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) { - return false; - } - - @Override - public boolean isItemViewSwipeEnabled() { - return true; - } - - @Override - public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { - if (touchHelper != null) { - exceedThreshold = false; - touchHelper.attachToRecyclerView(null); - touchHelper.attachToRecyclerView(binding.recyclerViewHistoryPostFragment); - } - } - - @Override - public void onChildDraw(@NonNull Canvas c, @NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) { - super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive); - - if (isCurrentlyActive) { - View itemView = viewHolder.itemView; - int horizontalOffset = (int) Utils.convertDpToPixel(16, activity); - if (dX > 0) { - if (dX > (itemView.getRight() - itemView.getLeft()) * swipeActionThreshold) { - if (!exceedThreshold) { - exceedThreshold = true; - if (vibrateWhenActionTriggered) { - viewHolder.itemView.setHapticFeedbackEnabled(true); - viewHolder.itemView.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING); - } - } - backgroundSwipeRight.setBounds(0, itemView.getTop(), itemView.getRight(), itemView.getBottom()); - } else { - exceedThreshold = false; - backgroundSwipeRight.setBounds(0, 0, 0, 0); - } - - drawableSwipeRight.setBounds(itemView.getLeft() + ((int) dX) - horizontalOffset - drawableSwipeRight.getIntrinsicWidth(), - (itemView.getBottom() + itemView.getTop() - drawableSwipeRight.getIntrinsicHeight()) / 2, - itemView.getLeft() + ((int) dX) - horizontalOffset, - (itemView.getBottom() + itemView.getTop() + drawableSwipeRight.getIntrinsicHeight()) / 2); - backgroundSwipeRight.draw(c); - drawableSwipeRight.draw(c); - } else if (dX < 0) { - if (-dX > (itemView.getRight() - itemView.getLeft()) * swipeActionThreshold) { - if (!exceedThreshold) { - exceedThreshold = true; - if (vibrateWhenActionTriggered) { - viewHolder.itemView.setHapticFeedbackEnabled(true); - viewHolder.itemView.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING); - } - } - backgroundSwipeLeft.setBounds(0, itemView.getTop(), itemView.getRight(), itemView.getBottom()); - } else { - exceedThreshold = false; - backgroundSwipeLeft.setBounds(0, 0, 0, 0); - } - drawableSwipeLeft.setBounds(itemView.getRight() + ((int) dX) + horizontalOffset, - (itemView.getBottom() + itemView.getTop() - drawableSwipeLeft.getIntrinsicHeight()) / 2, - itemView.getRight() + ((int) dX) + horizontalOffset + drawableSwipeLeft.getIntrinsicWidth(), - (itemView.getBottom() + itemView.getTop() + drawableSwipeLeft.getIntrinsicHeight()) / 2); - backgroundSwipeLeft.draw(c); - drawableSwipeLeft.draw(c); - } - } else { - if (exceedThreshold) { - mAdapter.onItemSwipe(viewHolder, dX > 0 ? ItemTouchHelper.END : ItemTouchHelper.START, swipeLeftAction, swipeRightAction); - exceedThreshold = false; - } - } - } - - @Override - public float getSwipeThreshold(@NonNull RecyclerView.ViewHolder viewHolder) { - return 1; - } - }); - if (nColumns == 1 && mSharedPreferences.getBoolean(SharedPreferencesUtils.ENABLE_SWIPE_ACTION, false)) { swipeActionEnabled = true; touchHelper.attachToRecyclerView(binding.recyclerViewHistoryPostFragment); @@ -564,7 +393,8 @@ public class HistoryPostFragment extends PostFragmentBase implements FragmentCom goBackToTop(); } - private void showErrorView(int stringResId) { + @Override + protected void showErrorView(int stringResId) { if (activity != null && isAdded()) { binding.swipeRefreshLayoutHistoryPostFragment.setRefreshing(false); binding.fetchPostInfoLinearLayoutHistoryPostFragment.setVisibility(View.VISIBLE); @@ -573,83 +403,22 @@ public class HistoryPostFragment extends PostFragmentBase implements FragmentCom } } + @NonNull @Override - public boolean startLazyMode() { - if (!hasPost) { - Toast.makeText(activity, R.string.no_posts_no_lazy_mode, Toast.LENGTH_SHORT).show(); - return false; - } - - Utils.setTitleWithCustomFontToMenuItem(activity.typeface, lazyModeItem, getString(R.string.action_stop_lazy_mode)); - - if (mAdapter != null && mAdapter.isAutoplay()) { - mAdapter.setAutoplay(false); - refreshAdapter(); - } - - isInLazyMode = true; - isLazyModePaused = false; - - lazyModeInterval = Float.parseFloat(mSharedPreferences.getString(SharedPreferencesUtils.LAZY_MODE_INTERVAL_KEY, "2.5")); - lazyModeHandler.postDelayed(lazyModeRunnable, (long) (lazyModeInterval * 1000)); - window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - Toast.makeText(activity, getString(R.string.lazy_mode_start, lazyModeInterval), - Toast.LENGTH_SHORT).show(); - - return true; + protected SwipeRefreshLayout getSwipeRefreshLayout() { + return binding.swipeRefreshLayoutHistoryPostFragment; } + @NonNull @Override - public void stopLazyMode() { - Utils.setTitleWithCustomFontToMenuItem(activity.typeface, lazyModeItem, getString(R.string.action_start_lazy_mode)); - if (mAdapter != null) { - String autoplayString = mSharedPreferences.getString(SharedPreferencesUtils.VIDEO_AUTOPLAY, SharedPreferencesUtils.VIDEO_AUTOPLAY_VALUE_NEVER); - if (autoplayString.equals(SharedPreferencesUtils.VIDEO_AUTOPLAY_VALUE_ALWAYS_ON) || - (autoplayString.equals(SharedPreferencesUtils.VIDEO_AUTOPLAY_VALUE_ON_WIFI) && Utils.isConnectedToWifi(activity))) { - mAdapter.setAutoplay(true); - refreshAdapter(); - } - } - isInLazyMode = false; - isLazyModePaused = false; - lazyModeRunnable.resetOldPosition(); - lazyModeHandler.removeCallbacks(lazyModeRunnable); - resumeLazyModeCountDownTimer.cancel(); - window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - Toast.makeText(activity, getString(R.string.lazy_mode_stop), Toast.LENGTH_SHORT).show(); - } - - @Override - public void resumeLazyMode(boolean resumeNow) { - if (isInLazyMode) { - if (mAdapter != null && mAdapter.isAutoplay()) { - mAdapter.setAutoplay(false); - refreshAdapter(); - } - isLazyModePaused = false; - window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - - lazyModeRunnable.resetOldPosition(); - - if (resumeNow) { - lazyModeHandler.post(lazyModeRunnable); - } else { - lazyModeHandler.postDelayed(lazyModeRunnable, (long) (lazyModeInterval * 1000)); - } - } + protected RecyclerView getPostRecyclerView() { + return binding.recyclerViewHistoryPostFragment; } + @Nullable @Override - public void pauseLazyMode(boolean startTimer) { - resumeLazyModeCountDownTimer.cancel(); - isInLazyMode = true; - isLazyModePaused = true; - lazyModeHandler.removeCallbacks(lazyModeRunnable); - window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - - if (startTimer) { - resumeLazyModeCountDownTimer.start(); - } + protected PostRecyclerViewAdapter getPostAdapter() { + return mAdapter; } @Override @@ -709,7 +478,8 @@ public class HistoryPostFragment extends PostFragmentBase implements FragmentCom } } - private void refreshAdapter() { + @Override + protected void refreshAdapter() { int previousPosition = -1; if (mLinearLayoutManager != null) { previousPosition = mLinearLayoutManager.findFirstVisibleItemPosition(); @@ -765,95 +535,6 @@ public class HistoryPostFragment extends PostFragmentBase implements FragmentCom } } - @Override - public boolean isRecyclerViewItemSwipeable(RecyclerView.ViewHolder viewHolder) { - if (swipeActionEnabled) { - if (viewHolder instanceof HistoryPostRecyclerViewAdapter.PostBaseGalleryTypeViewHolder) { - return !((HistoryPostRecyclerViewAdapter.PostBaseGalleryTypeViewHolder) viewHolder).isSwipeLocked(); - } - - return true; - } - - return false; - } - - @Subscribe - public void onPostUpdateEvent(PostUpdateEventToPostList event) { - ItemSnapshotList<Post> posts = mAdapter.snapshot(); - if (event.positionInList >= 0 && event.positionInList < posts.size()) { - Post post = posts.get(event.positionInList); - if (post != null && post.getFullName().equals(event.post.getFullName())) { - post.setTitle(event.post.getTitle()); - post.setVoteType(event.post.getVoteType()); - post.setScore(event.post.getScore()); - post.setNComments(event.post.getNComments()); - post.setNSFW(event.post.isNSFW()); - post.setHidden(event.post.isHidden()); - post.setSpoiler(event.post.isSpoiler()); - post.setFlair(event.post.getFlair()); - post.setSaved(event.post.isSaved()); - if (event.post.isRead()) { - post.markAsRead(); - } - mAdapter.notifyItemChanged(event.positionInList); - } - } - } - - @Subscribe - public void onChangeShowElapsedTimeEvent(ChangeShowElapsedTimeEvent event) { - if (mAdapter != null) { - mAdapter.setShowElapsedTime(event.showElapsedTime); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeTimeFormatEvent(ChangeTimeFormatEvent changeTimeFormatEvent) { - if (mAdapter != null) { - mAdapter.setTimeFormat(changeTimeFormatEvent.timeFormat); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeVoteButtonsPositionEvent(ChangeVoteButtonsPositionEvent event) { - if (mAdapter != null) { - mAdapter.setVoteButtonsPosition(event.voteButtonsOnTheRight); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeNSFWBlurEvent(ChangeNSFWBlurEvent event) { - if (mAdapter != null) { - mAdapter.setBlurNsfwAndDoNotBlurNsfwInNsfwSubreddits(event.needBlurNSFW); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeSpoilerBlurEvent(ChangeSpoilerBlurEvent event) { - if (mAdapter != null) { - mAdapter.setBlurSpoiler(event.needBlurSpoiler); - refreshAdapter(); - } - } - - @Subscribe - public void onChangePostLayoutEvent(ChangePostLayoutEvent event) { - changePostLayout(event.postLayout); - } - - @Subscribe - public void onShowDividerInCompactLayoutPreferenceEvent(ShowDividerInCompactLayoutPreferenceEvent event) { - if (mAdapter != null) { - mAdapter.setShowDividerInCompactLayout(event.showDividerInCompactLayout); - refreshAdapter(); - } - } - @Subscribe public void onChangeDefaultPostLayoutEvent(ChangeDefaultPostLayoutEvent changeDefaultPostLayoutEvent) { Bundle bundle = getArguments(); @@ -869,160 +550,6 @@ public class HistoryPostFragment extends PostFragmentBase implements FragmentCom } @Subscribe - public void onChangeDefaultLinkPostLayoutEvent(ChangeDefaultLinkPostLayoutEvent event) { - if (mAdapter != null) { - mAdapter.setDefaultLinkPostLayout(event.defaultLinkPostLayout); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeShowAbsoluteNumberOfVotesEvent(ChangeShowAbsoluteNumberOfVotesEvent changeShowAbsoluteNumberOfVotesEvent) { - if (mAdapter != null) { - mAdapter.setShowAbsoluteNumberOfVotes(changeShowAbsoluteNumberOfVotesEvent.showAbsoluteNumberOfVotes); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeVideoAutoplayEvent(ChangeVideoAutoplayEvent changeVideoAutoplayEvent) { - if (mAdapter != null) { - boolean autoplay = false; - if (changeVideoAutoplayEvent.autoplay.equals(SharedPreferencesUtils.VIDEO_AUTOPLAY_VALUE_ALWAYS_ON)) { - autoplay = true; - } else if (changeVideoAutoplayEvent.autoplay.equals(SharedPreferencesUtils.VIDEO_AUTOPLAY_VALUE_ON_WIFI)) { - autoplay = Utils.isConnectedToWifi(activity); - } - mAdapter.setAutoplay(autoplay); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeAutoplayNsfwVideosEvent(ChangeAutoplayNsfwVideosEvent changeAutoplayNsfwVideosEvent) { - if (mAdapter != null) { - mAdapter.setAutoplayNsfwVideos(changeAutoplayNsfwVideosEvent.autoplayNsfwVideos); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeMuteAutoplayingVideosEvent(ChangeMuteAutoplayingVideosEvent changeMuteAutoplayingVideosEvent) { - if (mAdapter != null) { - mAdapter.setMuteAutoplayingVideos(changeMuteAutoplayingVideosEvent.muteAutoplayingVideos); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeNetworkStatusEvent(ChangeNetworkStatusEvent changeNetworkStatusEvent) { - if (mAdapter != null) { - String autoplay = mSharedPreferences.getString(SharedPreferencesUtils.VIDEO_AUTOPLAY, SharedPreferencesUtils.VIDEO_AUTOPLAY_VALUE_NEVER); - String dataSavingMode = mSharedPreferences.getString(SharedPreferencesUtils.DATA_SAVING_MODE, SharedPreferencesUtils.DATA_SAVING_MODE_OFF); - boolean stateChanged = false; - if (autoplay.equals(SharedPreferencesUtils.VIDEO_AUTOPLAY_VALUE_ON_WIFI)) { - mAdapter.setAutoplay(changeNetworkStatusEvent.connectedNetwork == Utils.NETWORK_TYPE_WIFI); - stateChanged = true; - } - if (dataSavingMode.equals(SharedPreferencesUtils.DATA_SAVING_MODE_ONLY_ON_CELLULAR_DATA)) { - mAdapter.setDataSavingMode(changeNetworkStatusEvent.connectedNetwork == Utils.NETWORK_TYPE_CELLULAR); - stateChanged = true; - } - - if (stateChanged) { - refreshAdapter(); - } - } - } - - @Subscribe - public void onShowThumbnailOnTheRightInCompactLayoutEvent(ShowThumbnailOnTheRightInCompactLayoutEvent showThumbnailOnTheRightInCompactLayoutEvent) { - if (mAdapter != null) { - mAdapter.setShowThumbnailOnTheRightInCompactLayout(showThumbnailOnTheRightInCompactLayoutEvent.showThumbnailOnTheRightInCompactLayout); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeStartAutoplayVisibleAreaOffsetEvent(ChangeStartAutoplayVisibleAreaOffsetEvent changeStartAutoplayVisibleAreaOffsetEvent) { - if (mAdapter != null) { - mAdapter.setStartAutoplayVisibleAreaOffset(changeStartAutoplayVisibleAreaOffsetEvent.startAutoplayVisibleAreaOffset); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeMuteNSFWVideoEvent(ChangeMuteNSFWVideoEvent changeMuteNSFWVideoEvent) { - if (mAdapter != null) { - mAdapter.setMuteNSFWVideo(changeMuteNSFWVideoEvent.muteNSFWVideo); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeEnableSwipeActionSwitchEvent(ChangeEnableSwipeActionSwitchEvent changeEnableSwipeActionSwitchEvent) { - if (getNColumns(getResources()) == 1 && touchHelper != null) { - swipeActionEnabled = changeEnableSwipeActionSwitchEvent.enableSwipeAction; - if (changeEnableSwipeActionSwitchEvent.enableSwipeAction) { - touchHelper.attachToRecyclerView(binding.recyclerViewHistoryPostFragment); - } else { - touchHelper.attachToRecyclerView(null); - } - } - } - - @Subscribe - public void onChangePullToRefreshEvent(ChangePullToRefreshEvent changePullToRefreshEvent) { - binding.swipeRefreshLayoutHistoryPostFragment.setEnabled(changePullToRefreshEvent.pullToRefresh); - } - - @Subscribe - public void onChangeLongPressToHideToolbarInCompactLayoutEvent(ChangeLongPressToHideToolbarInCompactLayoutEvent changeLongPressToHideToolbarInCompactLayoutEvent) { - if (mAdapter != null) { - mAdapter.setLongPressToHideToolbarInCompactLayout(changeLongPressToHideToolbarInCompactLayoutEvent.longPressToHideToolbarInCompactLayout); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeCompactLayoutToolbarHiddenByDefaultEvent(ChangeCompactLayoutToolbarHiddenByDefaultEvent changeCompactLayoutToolbarHiddenByDefaultEvent) { - if (mAdapter != null) { - mAdapter.setCompactLayoutToolbarHiddenByDefault(changeCompactLayoutToolbarHiddenByDefaultEvent.compactLayoutToolbarHiddenByDefault); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeDataSavingModeEvent(ChangeDataSavingModeEvent changeDataSavingModeEvent) { - if (mAdapter != null) { - boolean dataSavingMode = false; - if (changeDataSavingModeEvent.dataSavingMode.equals(SharedPreferencesUtils.DATA_SAVING_MODE_ONLY_ON_CELLULAR_DATA)) { - dataSavingMode = Utils.isConnectedToCellularData(activity); - } else if (changeDataSavingModeEvent.dataSavingMode.equals(SharedPreferencesUtils.DATA_SAVING_MODE_ALWAYS)) { - dataSavingMode = true; - } - mAdapter.setDataSavingMode(dataSavingMode); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeDisableImagePreviewEvent(ChangeDisableImagePreviewEvent changeDisableImagePreviewEvent) { - if (mAdapter != null) { - mAdapter.setDisableImagePreview(changeDisableImagePreviewEvent.disableImagePreview); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeOnlyDisablePreviewInVideoAndGifPostsEvent(ChangeOnlyDisablePreviewInVideoAndGifPostsEvent changeOnlyDisablePreviewInVideoAndGifPostsEvent) { - if (mAdapter != null) { - mAdapter.setOnlyDisablePreviewInVideoPosts(changeOnlyDisablePreviewInVideoAndGifPostsEvent.onlyDisablePreviewInVideoAndGifPosts); - refreshAdapter(); - } - } - - @Subscribe public void onNeedForPostListFromPostRecyclerViewAdapterEvent(NeedForPostListFromPostFragmentEvent event) { if (postFragmentId == event.postFragmentTimeId && mAdapter != null) { EventBus.getDefault().post(new ProvidePostListToViewPostDetailActivityEvent(postFragmentId, @@ -1031,75 +558,4 @@ public class HistoryPostFragment extends PostFragmentBase implements FragmentCom null, null, null, postFilter, null, null)); } } - - @Subscribe - public void onChangeHidePostTypeEvent(ChangeHidePostTypeEvent event) { - if (mAdapter != null) { - mAdapter.setHidePostType(event.hidePostType); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeHidePostFlairEvent(ChangeHidePostFlairEvent event) { - if (mAdapter != null) { - mAdapter.setHidePostFlair(event.hidePostFlair); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeHideSubredditAndUserEvent(ChangeHideSubredditAndUserPrefixEvent event) { - if (mAdapter != null) { - mAdapter.setHideSubredditAndUserPrefix(event.hideSubredditAndUserPrefix); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeHideTheNumberOfVotesEvent(ChangeHideTheNumberOfVotesEvent event) { - if (mAdapter != null) { - mAdapter.setHideTheNumberOfVotes(event.hideTheNumberOfVotes); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeHideTheNumberOfCommentsEvent(ChangeHideTheNumberOfCommentsEvent event) { - if (mAdapter != null) { - mAdapter.setHideTheNumberOfComments(event.hideTheNumberOfComments); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeFixedHeightPreviewCardEvent(ChangeFixedHeightPreviewInCardEvent event) { - if (mAdapter != null) { - mAdapter.setFixedHeightPreviewInCard(event.fixedHeightPreviewInCard); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeHideTextPostContentEvent(ChangeHideTextPostContent event) { - if (mAdapter != null) { - mAdapter.setHideTextPostContent(event.hideTextPostContent); - refreshAdapter(); - } - } - - @Subscribe - public void onChangePostFeedMaxResolutionEvent(ChangePostFeedMaxResolutionEvent event) { - if (mAdapter != null) { - mAdapter.setPostFeedMaxResolution(event.postFeedMaxResolution); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeEasierToWatchInFullScreenEvent(ChangeEasierToWatchInFullScreenEvent event) { - if (mAdapter != null) { - mAdapter.setEasierToWatchInFullScreen(event.easierToWatchInFullScreen); - } - } }
\ No newline at end of file diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/PostFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/PostFragment.java index a544eb66..69ea35d0 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/PostFragment.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/PostFragment.java @@ -17,16 +17,15 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; -import android.view.WindowManager; -import android.widget.Toast; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.lifecycle.ViewModelProvider; -import androidx.paging.ItemSnapshotList; import androidx.paging.LoadState; import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.StaggeredGridLayoutManager; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import androidx.transition.AutoTransition; import androidx.transition.TransitionManager; @@ -59,43 +58,11 @@ import ml.docilealligator.infinityforreddit.apis.StreamableAPI; import ml.docilealligator.infinityforreddit.bottomsheetfragments.FABMoreOptionsBottomSheetFragment; import ml.docilealligator.infinityforreddit.customviews.LinearLayoutManagerBugFixed; import ml.docilealligator.infinityforreddit.databinding.FragmentPostBinding; -import ml.docilealligator.infinityforreddit.events.ChangeAutoplayNsfwVideosEvent; -import ml.docilealligator.infinityforreddit.events.ChangeCompactLayoutToolbarHiddenByDefaultEvent; -import ml.docilealligator.infinityforreddit.events.ChangeDataSavingModeEvent; -import ml.docilealligator.infinityforreddit.events.ChangeDefaultLinkPostLayoutEvent; import ml.docilealligator.infinityforreddit.events.ChangeDefaultPostLayoutEvent; -import ml.docilealligator.infinityforreddit.events.ChangeDisableImagePreviewEvent; -import ml.docilealligator.infinityforreddit.events.ChangeEasierToWatchInFullScreenEvent; -import ml.docilealligator.infinityforreddit.events.ChangeEnableSwipeActionSwitchEvent; -import ml.docilealligator.infinityforreddit.events.ChangeFixedHeightPreviewInCardEvent; -import ml.docilealligator.infinityforreddit.events.ChangeHidePostFlairEvent; -import ml.docilealligator.infinityforreddit.events.ChangeHidePostTypeEvent; -import ml.docilealligator.infinityforreddit.events.ChangeHideSubredditAndUserPrefixEvent; -import ml.docilealligator.infinityforreddit.events.ChangeHideTextPostContent; -import ml.docilealligator.infinityforreddit.events.ChangeHideTheNumberOfCommentsEvent; -import ml.docilealligator.infinityforreddit.events.ChangeHideTheNumberOfVotesEvent; -import ml.docilealligator.infinityforreddit.events.ChangeLongPressToHideToolbarInCompactLayoutEvent; -import ml.docilealligator.infinityforreddit.events.ChangeMuteAutoplayingVideosEvent; -import ml.docilealligator.infinityforreddit.events.ChangeMuteNSFWVideoEvent; -import ml.docilealligator.infinityforreddit.events.ChangeNSFWBlurEvent; import ml.docilealligator.infinityforreddit.events.ChangeNetworkStatusEvent; -import ml.docilealligator.infinityforreddit.events.ChangeOnlyDisablePreviewInVideoAndGifPostsEvent; -import ml.docilealligator.infinityforreddit.events.ChangePostFeedMaxResolutionEvent; -import ml.docilealligator.infinityforreddit.events.ChangePostLayoutEvent; -import ml.docilealligator.infinityforreddit.events.ChangePullToRefreshEvent; import ml.docilealligator.infinityforreddit.events.ChangeSavePostFeedScrolledPositionEvent; -import ml.docilealligator.infinityforreddit.events.ChangeShowAbsoluteNumberOfVotesEvent; -import ml.docilealligator.infinityforreddit.events.ChangeShowElapsedTimeEvent; -import ml.docilealligator.infinityforreddit.events.ChangeSpoilerBlurEvent; -import ml.docilealligator.infinityforreddit.events.ChangeStartAutoplayVisibleAreaOffsetEvent; -import ml.docilealligator.infinityforreddit.events.ChangeTimeFormatEvent; -import ml.docilealligator.infinityforreddit.events.ChangeVideoAutoplayEvent; -import ml.docilealligator.infinityforreddit.events.ChangeVoteButtonsPositionEvent; import ml.docilealligator.infinityforreddit.events.NeedForPostListFromPostFragmentEvent; -import ml.docilealligator.infinityforreddit.events.PostUpdateEventToPostList; import ml.docilealligator.infinityforreddit.events.ProvidePostListToViewPostDetailActivityEvent; -import ml.docilealligator.infinityforreddit.events.ShowDividerInCompactLayoutPreferenceEvent; -import ml.docilealligator.infinityforreddit.events.ShowThumbnailOnTheRightInCompactLayoutEvent; import ml.docilealligator.infinityforreddit.post.Post; import ml.docilealligator.infinityforreddit.post.PostPagingSource; import ml.docilealligator.infinityforreddit.post.PostViewModel; @@ -157,9 +124,7 @@ public class PostFragment extends PostFragmentBase implements FragmentCommunicat SharedPreferences mPostFeedScrolledPositionSharedPreferences; @Inject ExoCreator mExoCreator; - private MenuItem lazyModeItem; private int postType; - private boolean hasPost = false; private boolean savePostFeedScrolledPosition; private PostRecyclerViewAdapter mAdapter; private String subredditName; @@ -233,35 +198,6 @@ public class PostFragment extends PostFragmentBase implements FragmentCommunicat } } - lazyModeRunnable = new LazyModeRunnable() { - - @Override - public void run() { - if (isInLazyMode && !isLazyModePaused && mAdapter != null) { - int nPosts = mAdapter.getItemCount(); - if (getCurrentPosition() == -1) { - if (mLinearLayoutManager != null) { - setCurrentPosition(mLinearLayoutManager.findFirstVisibleItemPosition()); - } else { - int[] into = new int[2]; - setCurrentPosition(mStaggeredGridLayoutManager.findFirstVisibleItemPositions(into)[1]); - } - } - - if (getCurrentPosition() != RecyclerView.NO_POSITION && nPosts > getCurrentPosition()) { - incrementCurrentPosition(); - smoothScroller.setTargetPosition(getCurrentPosition()); - if (mLinearLayoutManager != null) { - mLinearLayoutManager.startSmoothScroll(smoothScroller); - } else { - mStaggeredGridLayoutManager.startSmoothScroll(smoothScroller); - } - } - } - lazyModeHandler.postDelayed(this, (long) (lazyModeInterval * 1000)); - } - }; - binding.swipeRefreshLayoutPostFragment.setEnabled(mSharedPreferences.getBoolean(SharedPreferencesUtils.PULL_TO_REFRESH, true)); binding.swipeRefreshLayoutPostFragment.setOnRefreshListener(this::refresh); @@ -1276,7 +1212,8 @@ public class PostFragment extends PostFragmentBase implements FragmentCommunicat goBackToTop(); } - private void showErrorView(int stringResId) { + @Override + protected void showErrorView(int stringResId) { if (activity != null && isAdded()) { binding.swipeRefreshLayoutPostFragment.setRefreshing(false); binding.fetchPostInfoLinearLayoutPostFragment.setVisibility(View.VISIBLE); @@ -1285,90 +1222,29 @@ public class PostFragment extends PostFragmentBase implements FragmentCommunicat } } + @NonNull @Override - public void changeNSFW(boolean nsfw) { - postFilter.allowNSFW = !mSharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_NSFW_FOREVER, false) && nsfw; - if (mPostViewModel != null) { - mPostViewModel.changePostFilter(postFilter); - } + protected SwipeRefreshLayout getSwipeRefreshLayout() { + return binding.swipeRefreshLayoutPostFragment; } + @NonNull @Override - public boolean startLazyMode() { - if (!hasPost) { - Toast.makeText(activity, R.string.no_posts_no_lazy_mode, Toast.LENGTH_SHORT).show(); - return false; - } - - Utils.setTitleWithCustomFontToMenuItem(activity.typeface, lazyModeItem, getString(R.string.action_stop_lazy_mode)); - - if (mAdapter != null && mAdapter.isAutoplay()) { - mAdapter.setAutoplay(false); - refreshAdapter(); - } - - isInLazyMode = true; - isLazyModePaused = false; - - lazyModeInterval = Float.parseFloat(mSharedPreferences.getString(SharedPreferencesUtils.LAZY_MODE_INTERVAL_KEY, "2.5")); - lazyModeHandler.postDelayed(lazyModeRunnable, (long) (lazyModeInterval * 1000)); - window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - Toast.makeText(activity, getString(R.string.lazy_mode_start, lazyModeInterval), - Toast.LENGTH_SHORT).show(); - - return true; + protected RecyclerView getPostRecyclerView() { + return binding.recyclerViewPostFragment; } + @Nullable @Override - public void stopLazyMode() { - Utils.setTitleWithCustomFontToMenuItem(activity.typeface, lazyModeItem, getString(R.string.action_start_lazy_mode)); - if (mAdapter != null) { - String autoplayString = mSharedPreferences.getString(SharedPreferencesUtils.VIDEO_AUTOPLAY, SharedPreferencesUtils.VIDEO_AUTOPLAY_VALUE_NEVER); - if (autoplayString.equals(SharedPreferencesUtils.VIDEO_AUTOPLAY_VALUE_ALWAYS_ON) || - (autoplayString.equals(SharedPreferencesUtils.VIDEO_AUTOPLAY_VALUE_ON_WIFI) && Utils.isConnectedToWifi(activity))) { - mAdapter.setAutoplay(true); - refreshAdapter(); - } - } - isInLazyMode = false; - isLazyModePaused = false; - lazyModeRunnable.resetOldPosition(); - lazyModeHandler.removeCallbacks(lazyModeRunnable); - resumeLazyModeCountDownTimer.cancel(); - window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - Toast.makeText(activity, getString(R.string.lazy_mode_stop), Toast.LENGTH_SHORT).show(); + protected PostRecyclerViewAdapter getPostAdapter() { + return mAdapter; } @Override - public void resumeLazyMode(boolean resumeNow) { - if (isInLazyMode) { - if (mAdapter != null && mAdapter.isAutoplay()) { - mAdapter.setAutoplay(false); - refreshAdapter(); - } - isLazyModePaused = false; - window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - - lazyModeRunnable.resetOldPosition(); - - if (resumeNow) { - lazyModeHandler.post(lazyModeRunnable); - } else { - lazyModeHandler.postDelayed(lazyModeRunnable, (long) (lazyModeInterval * 1000)); - } - } - } - - @Override - public void pauseLazyMode(boolean startTimer) { - resumeLazyModeCountDownTimer.cancel(); - isInLazyMode = true; - isLazyModePaused = true; - lazyModeHandler.removeCallbacks(lazyModeRunnable); - window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - - if (startTimer) { - resumeLazyModeCountDownTimer.start(); + public void changeNSFW(boolean nsfw) { + postFilter.allowNSFW = !mSharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_NSFW_FOREVER, false) && nsfw; + if (mPostViewModel != null) { + mPostViewModel.changePostFilter(postFilter); } } @@ -1521,82 +1397,6 @@ public class PostFragment extends PostFragmentBase implements FragmentCommunicat } @Subscribe - public void onPostUpdateEvent(PostUpdateEventToPostList event) { - ItemSnapshotList<Post> posts = mAdapter.snapshot(); - if (event.positionInList >= 0 && event.positionInList < posts.size()) { - Post post = posts.get(event.positionInList); - if (post != null && post.getFullName().equals(event.post.getFullName())) { - post.setTitle(event.post.getTitle()); - post.setVoteType(event.post.getVoteType()); - post.setScore(event.post.getScore()); - post.setNComments(event.post.getNComments()); - post.setNSFW(event.post.isNSFW()); - post.setHidden(event.post.isHidden()); - post.setSpoiler(event.post.isSpoiler()); - post.setFlair(event.post.getFlair()); - post.setSaved(event.post.isSaved()); - if (event.post.isRead()) { - post.markAsRead(); - } - mAdapter.notifyItemChanged(event.positionInList); - } - } - } - - @Subscribe - public void onChangeShowElapsedTimeEvent(ChangeShowElapsedTimeEvent event) { - if (mAdapter != null) { - mAdapter.setShowElapsedTime(event.showElapsedTime); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeTimeFormatEvent(ChangeTimeFormatEvent changeTimeFormatEvent) { - if (mAdapter != null) { - mAdapter.setTimeFormat(changeTimeFormatEvent.timeFormat); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeVoteButtonsPositionEvent(ChangeVoteButtonsPositionEvent event) { - if (mAdapter != null) { - mAdapter.setVoteButtonsPosition(event.voteButtonsOnTheRight); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeNSFWBlurEvent(ChangeNSFWBlurEvent event) { - if (mAdapter != null) { - mAdapter.setBlurNsfwAndDoNotBlurNsfwInNsfwSubreddits(event.needBlurNSFW, event.doNotBlurNsfwInNsfwSubreddits); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeSpoilerBlurEvent(ChangeSpoilerBlurEvent event) { - if (mAdapter != null) { - mAdapter.setBlurSpoiler(event.needBlurSpoiler); - refreshAdapter(); - } - } - - @Subscribe - public void onChangePostLayoutEvent(ChangePostLayoutEvent event) { - changePostLayout(event.postLayout); - } - - @Subscribe - public void onShowDividerInCompactLayoutPreferenceEvent(ShowDividerInCompactLayoutPreferenceEvent event) { - if (mAdapter != null) { - mAdapter.setShowDividerInCompactLayout(event.showDividerInCompactLayout); - refreshAdapter(); - } - } - - @Subscribe public void onChangeDefaultPostLayoutEvent(ChangeDefaultPostLayoutEvent changeDefaultPostLayoutEvent) { Bundle bundle = getArguments(); if (bundle != null) { @@ -1631,52 +1431,6 @@ public class PostFragment extends PostFragmentBase implements FragmentCommunicat } @Subscribe - public void onChangeDefaultLinkPostLayoutEvent(ChangeDefaultLinkPostLayoutEvent event) { - if (mAdapter != null) { - mAdapter.setDefaultLinkPostLayout(event.defaultLinkPostLayout); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeShowAbsoluteNumberOfVotesEvent(ChangeShowAbsoluteNumberOfVotesEvent changeShowAbsoluteNumberOfVotesEvent) { - if (mAdapter != null) { - mAdapter.setShowAbsoluteNumberOfVotes(changeShowAbsoluteNumberOfVotesEvent.showAbsoluteNumberOfVotes); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeVideoAutoplayEvent(ChangeVideoAutoplayEvent changeVideoAutoplayEvent) { - if (mAdapter != null) { - boolean autoplay = false; - if (changeVideoAutoplayEvent.autoplay.equals(SharedPreferencesUtils.VIDEO_AUTOPLAY_VALUE_ALWAYS_ON)) { - autoplay = true; - } else if (changeVideoAutoplayEvent.autoplay.equals(SharedPreferencesUtils.VIDEO_AUTOPLAY_VALUE_ON_WIFI)) { - autoplay = Utils.isConnectedToWifi(activity); - } - mAdapter.setAutoplay(autoplay); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeAutoplayNsfwVideosEvent(ChangeAutoplayNsfwVideosEvent changeAutoplayNsfwVideosEvent) { - if (mAdapter != null) { - mAdapter.setAutoplayNsfwVideos(changeAutoplayNsfwVideosEvent.autoplayNsfwVideos); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeMuteAutoplayingVideosEvent(ChangeMuteAutoplayingVideosEvent changeMuteAutoplayingVideosEvent) { - if (mAdapter != null) { - mAdapter.setMuteAutoplayingVideos(changeMuteAutoplayingVideosEvent.muteAutoplayingVideos); - refreshAdapter(); - } - } - - @Subscribe public void onChangeNetworkStatusEvent(ChangeNetworkStatusEvent changeNetworkStatusEvent) { if (mAdapter != null) { String autoplay = mSharedPreferences.getString(SharedPreferencesUtils.VIDEO_AUTOPLAY, SharedPreferencesUtils.VIDEO_AUTOPLAY_VALUE_NEVER); @@ -1698,98 +1452,11 @@ public class PostFragment extends PostFragmentBase implements FragmentCommunicat } @Subscribe - public void onShowThumbnailOnTheRightInCompactLayoutEvent(ShowThumbnailOnTheRightInCompactLayoutEvent showThumbnailOnTheRightInCompactLayoutEvent) { - if (mAdapter != null) { - mAdapter.setShowThumbnailOnTheRightInCompactLayout(showThumbnailOnTheRightInCompactLayoutEvent.showThumbnailOnTheRightInCompactLayout); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeStartAutoplayVisibleAreaOffsetEvent(ChangeStartAutoplayVisibleAreaOffsetEvent changeStartAutoplayVisibleAreaOffsetEvent) { - if (mAdapter != null) { - mAdapter.setStartAutoplayVisibleAreaOffset(changeStartAutoplayVisibleAreaOffsetEvent.startAutoplayVisibleAreaOffset); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeMuteNSFWVideoEvent(ChangeMuteNSFWVideoEvent changeMuteNSFWVideoEvent) { - if (mAdapter != null) { - mAdapter.setMuteNSFWVideo(changeMuteNSFWVideoEvent.muteNSFWVideo); - refreshAdapter(); - } - } - - @Subscribe public void onChangeSavePostFeedScrolledPositionEvent(ChangeSavePostFeedScrolledPositionEvent changeSavePostFeedScrolledPositionEvent) { savePostFeedScrolledPosition = changeSavePostFeedScrolledPositionEvent.savePostFeedScrolledPosition; } @Subscribe - public void onChangeEnableSwipeActionSwitchEvent(ChangeEnableSwipeActionSwitchEvent changeEnableSwipeActionSwitchEvent) { - if (getNColumns(getResources()) == 1 && touchHelper != null) { - swipeActionEnabled = changeEnableSwipeActionSwitchEvent.enableSwipeAction; - if (changeEnableSwipeActionSwitchEvent.enableSwipeAction) { - touchHelper.attachToRecyclerView(binding.recyclerViewPostFragment); - } else { - touchHelper.attachToRecyclerView(null); - } - } - } - - @Subscribe - public void onChangePullToRefreshEvent(ChangePullToRefreshEvent changePullToRefreshEvent) { - binding.swipeRefreshLayoutPostFragment.setEnabled(changePullToRefreshEvent.pullToRefresh); - } - - @Subscribe - public void onChangeLongPressToHideToolbarInCompactLayoutEvent(ChangeLongPressToHideToolbarInCompactLayoutEvent changeLongPressToHideToolbarInCompactLayoutEvent) { - if (mAdapter != null) { - mAdapter.setLongPressToHideToolbarInCompactLayout(changeLongPressToHideToolbarInCompactLayoutEvent.longPressToHideToolbarInCompactLayout); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeCompactLayoutToolbarHiddenByDefaultEvent(ChangeCompactLayoutToolbarHiddenByDefaultEvent changeCompactLayoutToolbarHiddenByDefaultEvent) { - if (mAdapter != null) { - mAdapter.setCompactLayoutToolbarHiddenByDefault(changeCompactLayoutToolbarHiddenByDefaultEvent.compactLayoutToolbarHiddenByDefault); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeDataSavingModeEvent(ChangeDataSavingModeEvent changeDataSavingModeEvent) { - if (mAdapter != null) { - boolean dataSavingMode = false; - if (changeDataSavingModeEvent.dataSavingMode.equals(SharedPreferencesUtils.DATA_SAVING_MODE_ONLY_ON_CELLULAR_DATA)) { - dataSavingMode = Utils.isConnectedToCellularData(activity); - } else if (changeDataSavingModeEvent.dataSavingMode.equals(SharedPreferencesUtils.DATA_SAVING_MODE_ALWAYS)) { - dataSavingMode = true; - } - mAdapter.setDataSavingMode(dataSavingMode); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeDisableImagePreviewEvent(ChangeDisableImagePreviewEvent changeDisableImagePreviewEvent) { - if (mAdapter != null) { - mAdapter.setDisableImagePreview(changeDisableImagePreviewEvent.disableImagePreview); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeOnlyDisablePreviewInVideoAndGifPostsEvent(ChangeOnlyDisablePreviewInVideoAndGifPostsEvent changeOnlyDisablePreviewInVideoAndGifPostsEvent) { - if (mAdapter != null) { - mAdapter.setOnlyDisablePreviewInVideoPosts(changeOnlyDisablePreviewInVideoAndGifPostsEvent.onlyDisablePreviewInVideoAndGifPosts); - refreshAdapter(); - } - } - - @Subscribe public void onNeedForPostListFromPostRecyclerViewAdapterEvent(NeedForPostListFromPostFragmentEvent event) { if (postFragmentId == event.postFragmentTimeId && mAdapter != null) { EventBus.getDefault().post(new ProvidePostListToViewPostDetailActivityEvent(postFragmentId, @@ -1799,78 +1466,8 @@ public class PostFragment extends PostFragmentBase implements FragmentCommunicat } } - @Subscribe - public void onChangeHidePostTypeEvent(ChangeHidePostTypeEvent event) { - if (mAdapter != null) { - mAdapter.setHidePostType(event.hidePostType); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeHidePostFlairEvent(ChangeHidePostFlairEvent event) { - if (mAdapter != null) { - mAdapter.setHidePostFlair(event.hidePostFlair); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeHideSubredditAndUserEvent(ChangeHideSubredditAndUserPrefixEvent event) { - if (mAdapter != null) { - mAdapter.setHideSubredditAndUserPrefix(event.hideSubredditAndUserPrefix); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeHideTheNumberOfVotesEvent(ChangeHideTheNumberOfVotesEvent event) { - if (mAdapter != null) { - mAdapter.setHideTheNumberOfVotes(event.hideTheNumberOfVotes); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeHideTheNumberOfCommentsEvent(ChangeHideTheNumberOfCommentsEvent event) { - if (mAdapter != null) { - mAdapter.setHideTheNumberOfComments(event.hideTheNumberOfComments); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeFixedHeightPreviewCardEvent(ChangeFixedHeightPreviewInCardEvent event) { - if (mAdapter != null) { - mAdapter.setFixedHeightPreviewInCard(event.fixedHeightPreviewInCard); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeHideTextPostContentEvent(ChangeHideTextPostContent event) { - if (mAdapter != null) { - mAdapter.setHideTextPostContent(event.hideTextPostContent); - refreshAdapter(); - } - } - - @Subscribe - public void onChangePostFeedMaxResolutionEvent(ChangePostFeedMaxResolutionEvent event) { - if (mAdapter != null) { - mAdapter.setPostFeedMaxResolution(event.postFeedMaxResolution); - refreshAdapter(); - } - } - - @Subscribe - public void onChangeEasierToWatchInFullScreenEvent(ChangeEasierToWatchInFullScreenEvent event) { - if (mAdapter != null) { - mAdapter.setEasierToWatchInFullScreen(event.easierToWatchInFullScreen); - } - } - - private void refreshAdapter() { + @Override + protected void refreshAdapter() { int previousPosition = -1; if (mLinearLayoutManager != null) { previousPosition = mLinearLayoutManager.findFirstVisibleItemPosition(); @@ -1933,17 +1530,4 @@ public class PostFragment extends PostFragmentBase implements FragmentCommunicat mAdapter.setCanPlayVideo(hasWindowsFocus); } } - - @Override - public boolean isRecyclerViewItemSwipeable(RecyclerView.ViewHolder viewHolder) { - if (swipeActionEnabled) { - if (viewHolder instanceof PostRecyclerViewAdapter.PostBaseGalleryTypeViewHolder) { - return !((PostRecyclerViewAdapter.PostBaseGalleryTypeViewHolder) viewHolder).isSwipeLocked(); - } - - return true; - } - - return false; - } } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/PostFragmentBase.java b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/PostFragmentBase.java index 33363b52..6d8a8e00 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/PostFragmentBase.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/PostFragmentBase.java @@ -4,27 +4,34 @@ import android.content.Context; import android.content.SharedPreferences; import android.content.res.Configuration; import android.content.res.Resources; +import android.graphics.Canvas; import android.graphics.Rect; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.CountDownTimer; import android.os.Handler; +import android.view.HapticFeedbackConstants; import android.view.KeyEvent; import android.view.LayoutInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.Window; +import android.view.WindowManager; +import android.widget.Toast; import androidx.annotation.DimenRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.content.res.ResourcesCompat; import androidx.fragment.app.Fragment; +import androidx.paging.ItemSnapshotList; import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.LinearSmoothScroller; import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.StaggeredGridLayoutManager; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import com.bumptech.glide.Glide; import com.bumptech.glide.RequestManager; @@ -42,16 +49,51 @@ import javax.inject.Named; import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; import ml.docilealligator.infinityforreddit.activities.BaseActivity; +import ml.docilealligator.infinityforreddit.adapters.PostRecyclerViewAdapter; import ml.docilealligator.infinityforreddit.asynctasks.LoadSubredditIcon; import ml.docilealligator.infinityforreddit.asynctasks.LoadUserData; import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper; import ml.docilealligator.infinityforreddit.customviews.LinearLayoutManagerBugFixed; +import ml.docilealligator.infinityforreddit.events.ChangeAutoplayNsfwVideosEvent; +import ml.docilealligator.infinityforreddit.events.ChangeCompactLayoutToolbarHiddenByDefaultEvent; +import ml.docilealligator.infinityforreddit.events.ChangeDataSavingModeEvent; +import ml.docilealligator.infinityforreddit.events.ChangeDefaultLinkPostLayoutEvent; +import ml.docilealligator.infinityforreddit.events.ChangeDisableImagePreviewEvent; +import ml.docilealligator.infinityforreddit.events.ChangeEasierToWatchInFullScreenEvent; +import ml.docilealligator.infinityforreddit.events.ChangeEnableSwipeActionSwitchEvent; +import ml.docilealligator.infinityforreddit.events.ChangeFixedHeightPreviewInCardEvent; +import ml.docilealligator.infinityforreddit.events.ChangeHidePostFlairEvent; +import ml.docilealligator.infinityforreddit.events.ChangeHidePostTypeEvent; +import ml.docilealligator.infinityforreddit.events.ChangeHideSubredditAndUserPrefixEvent; +import ml.docilealligator.infinityforreddit.events.ChangeHideTextPostContent; +import ml.docilealligator.infinityforreddit.events.ChangeHideTheNumberOfCommentsEvent; +import ml.docilealligator.infinityforreddit.events.ChangeHideTheNumberOfVotesEvent; +import ml.docilealligator.infinityforreddit.events.ChangeLongPressToHideToolbarInCompactLayoutEvent; +import ml.docilealligator.infinityforreddit.events.ChangeMuteAutoplayingVideosEvent; +import ml.docilealligator.infinityforreddit.events.ChangeMuteNSFWVideoEvent; +import ml.docilealligator.infinityforreddit.events.ChangeNSFWBlurEvent; +import ml.docilealligator.infinityforreddit.events.ChangeNetworkStatusEvent; +import ml.docilealligator.infinityforreddit.events.ChangeOnlyDisablePreviewInVideoAndGifPostsEvent; +import ml.docilealligator.infinityforreddit.events.ChangePostFeedMaxResolutionEvent; +import ml.docilealligator.infinityforreddit.events.ChangePostLayoutEvent; +import ml.docilealligator.infinityforreddit.events.ChangePullToRefreshEvent; import ml.docilealligator.infinityforreddit.events.ChangeRememberMutingOptionInPostFeedEvent; +import ml.docilealligator.infinityforreddit.events.ChangeShowAbsoluteNumberOfVotesEvent; +import ml.docilealligator.infinityforreddit.events.ChangeShowElapsedTimeEvent; +import ml.docilealligator.infinityforreddit.events.ChangeSpoilerBlurEvent; +import ml.docilealligator.infinityforreddit.events.ChangeStartAutoplayVisibleAreaOffsetEvent; import ml.docilealligator.infinityforreddit.events.ChangeSwipeActionEvent; import ml.docilealligator.infinityforreddit.events.ChangeSwipeActionThresholdEvent; +import ml.docilealligator.infinityforreddit.events.ChangeTimeFormatEvent; import ml.docilealligator.infinityforreddit.events.ChangeVibrateWhenActionTriggeredEvent; +import ml.docilealligator.infinityforreddit.events.ChangeVideoAutoplayEvent; +import ml.docilealligator.infinityforreddit.events.ChangeVoteButtonsPositionEvent; +import ml.docilealligator.infinityforreddit.events.PostUpdateEventToPostList; +import ml.docilealligator.infinityforreddit.events.ShowDividerInCompactLayoutPreferenceEvent; +import ml.docilealligator.infinityforreddit.events.ShowThumbnailOnTheRightInCompactLayoutEvent; import ml.docilealligator.infinityforreddit.post.Post; import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils; +import ml.docilealligator.infinityforreddit.utils.Utils; import retrofit2.Retrofit; public abstract class PostFragmentBase extends Fragment { @@ -74,8 +116,10 @@ public abstract class PostFragmentBase extends Fragment { protected BaseActivity activity; protected RequestManager mGlide; protected Window window; + protected MenuItem lazyModeItem; protected LinearLayoutManagerBugFixed mLinearLayoutManager; protected StaggeredGridLayoutManager mStaggeredGridLayoutManager; + protected boolean hasPost; protected long postFragmentId; protected boolean rememberMutingOptionInPostFeed; protected Boolean masterMutingOption; @@ -120,6 +164,33 @@ public abstract class PostFragmentBase extends Fragment { }; lazyModeHandler = new Handler(); + lazyModeRunnable = new LazyModeRunnable() { + @Override + public void run() { + if (isInLazyMode && !isLazyModePaused && getPostAdapter() != null) { + int nPosts = getPostAdapter().getItemCount(); + if (getCurrentPosition() == -1) { + if (mLinearLayoutManager != null) { + setCurrentPosition(mLinearLayoutManager.findFirstVisibleItemPosition()); + } else { + int[] into = new int[2]; + setCurrentPosition(mStaggeredGridLayoutManager.findFirstVisibleItemPositions(into)[1]); + } + } + + if (getCurrentPosition() != RecyclerView.NO_POSITION && nPosts > getCurrentPosition()) { + incrementCurrentPosition(); + smoothScroller.setTargetPosition(getCurrentPosition()); + if (mLinearLayoutManager != null) { + mLinearLayoutManager.startSmoothScroll(smoothScroller); + } else { + mStaggeredGridLayoutManager.startSmoothScroll(smoothScroller); + } + } + } + lazyModeHandler.postDelayed(this, (long) (lazyModeInterval * 1000)); + } + }; lazyModeInterval = Float.parseFloat(mSharedPreferences.getString(SharedPreferencesUtils.LAZY_MODE_INTERVAL_KEY, "2.5")); resumeLazyModeCountDownTimer = new CountDownTimer((long) (lazyModeInterval * 1000), (long) (lazyModeInterval * 1000)) { @Override @@ -141,6 +212,96 @@ public abstract class PostFragmentBase extends Fragment { swipeLeftAction = Integer.parseInt(mSharedPreferences.getString(SharedPreferencesUtils.SWIPE_LEFT_ACTION, "0")); initializeSwipeActionDrawable(); + touchHelper = new ItemTouchHelper(new ItemTouchHelper.Callback() { + boolean exceedThreshold = false; + + @Override + public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { + return makeMovementFlags(0, calculateMovementFlags(recyclerView, viewHolder)); + } + + @Override + public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) { + return false; + } + + @Override + public boolean isItemViewSwipeEnabled() { + return true; + } + + @Override + public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { + if (touchHelper != null) { + exceedThreshold = false; + touchHelper.attachToRecyclerView(null); + touchHelper.attachToRecyclerView(getPostRecyclerView()); + } + } + + @Override + public void onChildDraw(@NonNull Canvas c, @NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) { + super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive); + + if (isCurrentlyActive) { + View itemView = viewHolder.itemView; + int horizontalOffset = (int) Utils.convertDpToPixel(16, activity); + if (dX > 0) { + if (dX > (itemView.getRight() - itemView.getLeft()) * swipeActionThreshold) { + if (!exceedThreshold) { + exceedThreshold = true; + if (vibrateWhenActionTriggered) { + viewHolder.itemView.setHapticFeedbackEnabled(true); + viewHolder.itemView.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING); + } + } + backgroundSwipeRight.setBounds(0, itemView.getTop(), itemView.getRight(), itemView.getBottom()); + } else { + exceedThreshold = false; + backgroundSwipeRight.setBounds(0, 0, 0, 0); + } + + drawableSwipeRight.setBounds(itemView.getLeft() + ((int) dX) - horizontalOffset - drawableSwipeRight.getIntrinsicWidth(), + (itemView.getBottom() + itemView.getTop() - drawableSwipeRight.getIntrinsicHeight()) / 2, + itemView.getLeft() + ((int) dX) - horizontalOffset, + (itemView.getBottom() + itemView.getTop() + drawableSwipeRight.getIntrinsicHeight()) / 2); + backgroundSwipeRight.draw(c); + drawableSwipeRight.draw(c); + } else if (dX < 0) { + if (-dX > (itemView.getRight() - itemView.getLeft()) * swipeActionThreshold) { + if (!exceedThreshold) { + exceedThreshold = true; + if (vibrateWhenActionTriggered) { + viewHolder.itemView.setHapticFeedbackEnabled(true); + viewHolder.itemView.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING); + } + } + backgroundSwipeLeft.setBounds(0, itemView.getTop(), itemView.getRight(), itemView.getBottom()); + } else { + exceedThreshold = false; + backgroundSwipeLeft.setBounds(0, 0, 0, 0); + } + drawableSwipeLeft.setBounds(itemView.getRight() + ((int) dX) + horizontalOffset, + (itemView.getBottom() + itemView.getTop() - drawableSwipeLeft.getIntrinsicHeight()) / 2, + itemView.getRight() + ((int) dX) + horizontalOffset + drawableSwipeLeft.getIntrinsicWidth(), + (itemView.getBottom() + itemView.getTop() + drawableSwipeLeft.getIntrinsicHeight()) / 2); + backgroundSwipeLeft.draw(c); + drawableSwipeLeft.draw(c); + } + } else { + if (exceedThreshold && getPostAdapter() != null) { + getPostAdapter().onItemSwipe(viewHolder, dX > 0 ? ItemTouchHelper.END : ItemTouchHelper.START, swipeLeftAction, swipeRightAction); + exceedThreshold = false; + } + } + } + + @Override + public float getSwipeThreshold(@NonNull RecyclerView.ViewHolder viewHolder) { + return 1; + } + }); + return super.onCreateView(inflater, container, savedInstanceState); } @@ -173,18 +334,87 @@ public abstract class PostFragmentBase extends Fragment { return postFragmentId; } - public abstract boolean startLazyMode(); + public boolean startLazyMode() { + if (!hasPost) { + Toast.makeText(activity, R.string.no_posts_no_lazy_mode, Toast.LENGTH_SHORT).show(); + return false; + } + + Utils.setTitleWithCustomFontToMenuItem(activity.typeface, lazyModeItem, getString(R.string.action_stop_lazy_mode)); + + if (getPostAdapter() != null && getPostAdapter().isAutoplay()) { + getPostAdapter().setAutoplay(false); + refreshAdapter(); + } + + isInLazyMode = true; + isLazyModePaused = false; + + lazyModeInterval = Float.parseFloat(mSharedPreferences.getString(SharedPreferencesUtils.LAZY_MODE_INTERVAL_KEY, "2.5")); + lazyModeHandler.postDelayed(lazyModeRunnable, (long) (lazyModeInterval * 1000)); + window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + Toast.makeText(activity, getString(R.string.lazy_mode_start, lazyModeInterval), + Toast.LENGTH_SHORT).show(); + + return true; + } + + public void stopLazyMode() { + Utils.setTitleWithCustomFontToMenuItem(activity.typeface, lazyModeItem, getString(R.string.action_start_lazy_mode)); + if (getPostAdapter() != null) { + String autoplayString = mSharedPreferences.getString(SharedPreferencesUtils.VIDEO_AUTOPLAY, SharedPreferencesUtils.VIDEO_AUTOPLAY_VALUE_NEVER); + if (autoplayString.equals(SharedPreferencesUtils.VIDEO_AUTOPLAY_VALUE_ALWAYS_ON) || + (autoplayString.equals(SharedPreferencesUtils.VIDEO_AUTOPLAY_VALUE_ON_WIFI) && Utils.isConnectedToWifi(activity))) { + getPostAdapter().setAutoplay(true); + refreshAdapter(); + } + } + isInLazyMode = false; + isLazyModePaused = false; + lazyModeRunnable.resetOldPosition(); + lazyModeHandler.removeCallbacks(lazyModeRunnable); + resumeLazyModeCountDownTimer.cancel(); + window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + Toast.makeText(activity, getString(R.string.lazy_mode_stop), Toast.LENGTH_SHORT).show(); + } + + public void resumeLazyMode(boolean resumeNow) { + if (isInLazyMode) { + if (getPostAdapter() != null && getPostAdapter().isAutoplay()) { + getPostAdapter().setAutoplay(false); + refreshAdapter(); + } + isLazyModePaused = false; + window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + + lazyModeRunnable.resetOldPosition(); - public abstract void stopLazyMode(); + if (resumeNow) { + lazyModeHandler.post(lazyModeRunnable); + } else { + lazyModeHandler.postDelayed(lazyModeRunnable, (long) (lazyModeInterval * 1000)); + } + } + } - public abstract void resumeLazyMode(boolean resumeNow); + public void pauseLazyMode(boolean startTimer) { + resumeLazyModeCountDownTimer.cancel(); + isInLazyMode = true; + isLazyModePaused = true; + lazyModeHandler.removeCallbacks(lazyModeRunnable); + window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - public abstract void pauseLazyMode(boolean startTimer); + if (startTimer) { + resumeLazyModeCountDownTimer.start(); + } + } public final boolean isInLazyMode() { return isInLazyMode; } + protected abstract void refreshAdapter(); + protected final int getNColumns(Resources resources) { final boolean foldEnabled = mSharedPreferences.getBoolean(SharedPreferencesUtils.ENABLE_FOLD_SUPPORT, false); if (resources.getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { @@ -242,7 +472,17 @@ public abstract class PostFragmentBase extends Fragment { return false; } - public abstract boolean isRecyclerViewItemSwipeable(RecyclerView.ViewHolder viewHolder); + public boolean isRecyclerViewItemSwipeable(RecyclerView.ViewHolder viewHolder) { + if (swipeActionEnabled) { + if (viewHolder instanceof PostRecyclerViewAdapter.PostBaseGalleryTypeViewHolder) { + return !((PostRecyclerViewAdapter.PostBaseGalleryTypeViewHolder) viewHolder).isSwipeLocked(); + } + + return true; + } + + return false; + } public final void loadIcon(String subredditOrUserName, boolean isSubreddit, LoadIconListener loadIconListener) { if (subredditOrUserIcons.containsKey(subredditOrUserName)) { @@ -289,6 +529,155 @@ public abstract class PostFragmentBase extends Fragment { } } + protected int calculateMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) { + if (!(viewHolder instanceof PostRecyclerViewAdapter.PostBaseViewHolder) && + !(viewHolder instanceof PostRecyclerViewAdapter.PostCompactBaseViewHolder)) { + return 0; + } else if (viewHolder instanceof PostRecyclerViewAdapter.PostBaseGalleryTypeViewHolder) { + if (((PostRecyclerViewAdapter.PostBaseGalleryTypeViewHolder) viewHolder).isSwipeLocked()) { + return 0; + } + } + return ItemTouchHelper.START | ItemTouchHelper.END; + } + + protected abstract void showErrorView(int stringResId); + + @NonNull + protected abstract SwipeRefreshLayout getSwipeRefreshLayout(); + + @NonNull + protected abstract RecyclerView getPostRecyclerView(); + + @Nullable + protected abstract PostRecyclerViewAdapter getPostAdapter(); + + @Subscribe + public void onPostUpdateEvent(PostUpdateEventToPostList event) { + if (getPostAdapter() == null) { + return; + } + + ItemSnapshotList<Post> posts = getPostAdapter().snapshot(); + if (event.positionInList >= 0 && event.positionInList < posts.size()) { + Post post = posts.get(event.positionInList); + if (post != null && post.getFullName().equals(event.post.getFullName())) { + post.setTitle(event.post.getTitle()); + post.setVoteType(event.post.getVoteType()); + post.setScore(event.post.getScore()); + post.setNComments(event.post.getNComments()); + post.setNSFW(event.post.isNSFW()); + post.setHidden(event.post.isHidden()); + post.setSpoiler(event.post.isSpoiler()); + post.setFlair(event.post.getFlair()); + post.setSaved(event.post.isSaved()); + if (event.post.isRead()) { + post.markAsRead(); + } + getPostAdapter().notifyItemChanged(event.positionInList); + } + } + } + + @Subscribe + public void onChangeShowElapsedTimeEvent(ChangeShowElapsedTimeEvent event) { + if (getPostAdapter() != null) { + getPostAdapter().setShowElapsedTime(event.showElapsedTime); + refreshAdapter(); + } + } + + @Subscribe + public void onChangeTimeFormatEvent(ChangeTimeFormatEvent changeTimeFormatEvent) { + if (getPostAdapter() != null) { + getPostAdapter().setTimeFormat(changeTimeFormatEvent.timeFormat); + refreshAdapter(); + } + } + + @Subscribe + public void onChangeVoteButtonsPositionEvent(ChangeVoteButtonsPositionEvent event) { + if (getPostAdapter() != null) { + getPostAdapter().setVoteButtonsPosition(event.voteButtonsOnTheRight); + refreshAdapter(); + } + } + + @Subscribe + public void onChangeNSFWBlurEvent(ChangeNSFWBlurEvent event) { + if (getPostAdapter() != null) { + getPostAdapter().setBlurNsfwAndDoNotBlurNsfwInNsfwSubreddits(event.needBlurNSFW, event.doNotBlurNsfwInNsfwSubreddits); + refreshAdapter(); + } + } + + @Subscribe + public void onChangeSpoilerBlurEvent(ChangeSpoilerBlurEvent event) { + if (getPostAdapter() != null) { + getPostAdapter().setBlurSpoiler(event.needBlurSpoiler); + refreshAdapter(); + } + } + + @Subscribe + public void onChangePostLayoutEvent(ChangePostLayoutEvent event) { + changePostLayout(event.postLayout); + } + + @Subscribe + public void onShowDividerInCompactLayoutPreferenceEvent(ShowDividerInCompactLayoutPreferenceEvent event) { + if (getPostAdapter() != null) { + getPostAdapter().setShowDividerInCompactLayout(event.showDividerInCompactLayout); + refreshAdapter(); + } + } + + @Subscribe + public void onChangeDefaultLinkPostLayoutEvent(ChangeDefaultLinkPostLayoutEvent event) { + if (getPostAdapter() != null) { + getPostAdapter().setDefaultLinkPostLayout(event.defaultLinkPostLayout); + refreshAdapter(); + } + } + + @Subscribe + public void onChangeShowAbsoluteNumberOfVotesEvent(ChangeShowAbsoluteNumberOfVotesEvent changeShowAbsoluteNumberOfVotesEvent) { + if (getPostAdapter() != null) { + getPostAdapter().setShowAbsoluteNumberOfVotes(changeShowAbsoluteNumberOfVotesEvent.showAbsoluteNumberOfVotes); + refreshAdapter(); + } + } + + @Subscribe + public void onChangeVideoAutoplayEvent(ChangeVideoAutoplayEvent changeVideoAutoplayEvent) { + if (getPostAdapter() != null) { + boolean autoplay = false; + if (changeVideoAutoplayEvent.autoplay.equals(SharedPreferencesUtils.VIDEO_AUTOPLAY_VALUE_ALWAYS_ON)) { + autoplay = true; + } else if (changeVideoAutoplayEvent.autoplay.equals(SharedPreferencesUtils.VIDEO_AUTOPLAY_VALUE_ON_WIFI)) { + autoplay = Utils.isConnectedToWifi(activity); + } + getPostAdapter().setAutoplay(autoplay); + refreshAdapter(); + } + } + + @Subscribe + public void onChangeAutoplayNsfwVideosEvent(ChangeAutoplayNsfwVideosEvent changeAutoplayNsfwVideosEvent) { + if (getPostAdapter() != null) { + getPostAdapter().setAutoplayNsfwVideos(changeAutoplayNsfwVideosEvent.autoplayNsfwVideos); + refreshAdapter(); + } + } + + @Subscribe + public void onChangeMuteAutoplayingVideosEvent(ChangeMuteAutoplayingVideosEvent changeMuteAutoplayingVideosEvent) { + if (getPostAdapter() != null) { + getPostAdapter().setMuteAutoplayingVideos(changeMuteAutoplayingVideosEvent.muteAutoplayingVideos); + refreshAdapter(); + } + } + @Subscribe public void onChangeRememberMutingOptionInPostFeedEvent(ChangeRememberMutingOptionInPostFeedEvent event) { rememberMutingOptionInPostFeed = event.rememberMutingOptionInPostFeedEvent; @@ -314,6 +703,185 @@ public abstract class PostFragmentBase extends Fragment { vibrateWhenActionTriggered = changeVibrateWhenActionTriggeredEvent.vibrateWhenActionTriggered; } + @Subscribe + public void onChangeNetworkStatusEvent(ChangeNetworkStatusEvent changeNetworkStatusEvent) { + if (getPostAdapter() != null) { + String autoplay = mSharedPreferences.getString(SharedPreferencesUtils.VIDEO_AUTOPLAY, SharedPreferencesUtils.VIDEO_AUTOPLAY_VALUE_NEVER); + String dataSavingMode = mSharedPreferences.getString(SharedPreferencesUtils.DATA_SAVING_MODE, SharedPreferencesUtils.DATA_SAVING_MODE_OFF); + boolean stateChanged = false; + if (autoplay.equals(SharedPreferencesUtils.VIDEO_AUTOPLAY_VALUE_ON_WIFI)) { + getPostAdapter().setAutoplay(changeNetworkStatusEvent.connectedNetwork == Utils.NETWORK_TYPE_WIFI); + stateChanged = true; + } + if (dataSavingMode.equals(SharedPreferencesUtils.DATA_SAVING_MODE_ONLY_ON_CELLULAR_DATA)) { + getPostAdapter().setDataSavingMode(changeNetworkStatusEvent.connectedNetwork == Utils.NETWORK_TYPE_CELLULAR); + stateChanged = true; + } + + if (stateChanged) { + refreshAdapter(); + } + } + } + + @Subscribe + public void onShowThumbnailOnTheRightInCompactLayoutEvent(ShowThumbnailOnTheRightInCompactLayoutEvent showThumbnailOnTheRightInCompactLayoutEvent) { + if (getPostAdapter() != null) { + getPostAdapter().setShowThumbnailOnTheRightInCompactLayout(showThumbnailOnTheRightInCompactLayoutEvent.showThumbnailOnTheRightInCompactLayout); + refreshAdapter(); + } + } + + @Subscribe + public void onChangeStartAutoplayVisibleAreaOffsetEvent(ChangeStartAutoplayVisibleAreaOffsetEvent changeStartAutoplayVisibleAreaOffsetEvent) { + if (getPostAdapter() != null) { + getPostAdapter().setStartAutoplayVisibleAreaOffset(changeStartAutoplayVisibleAreaOffsetEvent.startAutoplayVisibleAreaOffset); + refreshAdapter(); + } + } + + @Subscribe + public void onChangeMuteNSFWVideoEvent(ChangeMuteNSFWVideoEvent changeMuteNSFWVideoEvent) { + if (getPostAdapter() != null) { + getPostAdapter().setMuteNSFWVideo(changeMuteNSFWVideoEvent.muteNSFWVideo); + refreshAdapter(); + } + } + + @Subscribe + public void onChangeEnableSwipeActionSwitchEvent(ChangeEnableSwipeActionSwitchEvent changeEnableSwipeActionSwitchEvent) { + if (getNColumns(getResources()) == 1 && touchHelper != null) { + swipeActionEnabled = changeEnableSwipeActionSwitchEvent.enableSwipeAction; + if (changeEnableSwipeActionSwitchEvent.enableSwipeAction) { + touchHelper.attachToRecyclerView(getPostRecyclerView()); + } else { + touchHelper.attachToRecyclerView(null); + } + } + } + + @Subscribe + public void onChangePullToRefreshEvent(ChangePullToRefreshEvent changePullToRefreshEvent) { + getSwipeRefreshLayout().setEnabled(changePullToRefreshEvent.pullToRefresh); + } + + @Subscribe + public void onChangeLongPressToHideToolbarInCompactLayoutEvent(ChangeLongPressToHideToolbarInCompactLayoutEvent changeLongPressToHideToolbarInCompactLayoutEvent) { + if (getPostAdapter() != null) { + getPostAdapter().setLongPressToHideToolbarInCompactLayout(changeLongPressToHideToolbarInCompactLayoutEvent.longPressToHideToolbarInCompactLayout); + refreshAdapter(); + } + } + + @Subscribe + public void onChangeCompactLayoutToolbarHiddenByDefaultEvent(ChangeCompactLayoutToolbarHiddenByDefaultEvent changeCompactLayoutToolbarHiddenByDefaultEvent) { + if (getPostAdapter() != null) { + getPostAdapter().setCompactLayoutToolbarHiddenByDefault(changeCompactLayoutToolbarHiddenByDefaultEvent.compactLayoutToolbarHiddenByDefault); + refreshAdapter(); + } + } + + @Subscribe + public void onChangeDataSavingModeEvent(ChangeDataSavingModeEvent changeDataSavingModeEvent) { + if (getPostAdapter() != null) { + boolean dataSavingMode = false; + if (changeDataSavingModeEvent.dataSavingMode.equals(SharedPreferencesUtils.DATA_SAVING_MODE_ONLY_ON_CELLULAR_DATA)) { + dataSavingMode = Utils.isConnectedToCellularData(activity); + } else if (changeDataSavingModeEvent.dataSavingMode.equals(SharedPreferencesUtils.DATA_SAVING_MODE_ALWAYS)) { + dataSavingMode = true; + } + getPostAdapter().setDataSavingMode(dataSavingMode); + refreshAdapter(); + } + } + + @Subscribe + public void onChangeDisableImagePreviewEvent(ChangeDisableImagePreviewEvent changeDisableImagePreviewEvent) { + if (getPostAdapter() != null) { + getPostAdapter().setDisableImagePreview(changeDisableImagePreviewEvent.disableImagePreview); + refreshAdapter(); + } + } + + @Subscribe + public void onChangeOnlyDisablePreviewInVideoAndGifPostsEvent(ChangeOnlyDisablePreviewInVideoAndGifPostsEvent changeOnlyDisablePreviewInVideoAndGifPostsEvent) { + if (getPostAdapter() != null) { + getPostAdapter().setOnlyDisablePreviewInVideoPosts(changeOnlyDisablePreviewInVideoAndGifPostsEvent.onlyDisablePreviewInVideoAndGifPosts); + refreshAdapter(); + } + } + + @Subscribe + public void onChangeHidePostTypeEvent(ChangeHidePostTypeEvent event) { + if (getPostAdapter() != null) { + getPostAdapter().setHidePostType(event.hidePostType); + refreshAdapter(); + } + } + + @Subscribe + public void onChangeHidePostFlairEvent(ChangeHidePostFlairEvent event) { + if (getPostAdapter() != null) { + getPostAdapter().setHidePostFlair(event.hidePostFlair); + refreshAdapter(); + } + } + + @Subscribe + public void onChangeHideSubredditAndUserEvent(ChangeHideSubredditAndUserPrefixEvent event) { + if (getPostAdapter() != null) { + getPostAdapter().setHideSubredditAndUserPrefix(event.hideSubredditAndUserPrefix); + refreshAdapter(); + } + } + + @Subscribe + public void onChangeHideTheNumberOfVotesEvent(ChangeHideTheNumberOfVotesEvent event) { + if (getPostAdapter() != null) { + getPostAdapter().setHideTheNumberOfVotes(event.hideTheNumberOfVotes); + refreshAdapter(); + } + } + + @Subscribe + public void onChangeHideTheNumberOfCommentsEvent(ChangeHideTheNumberOfCommentsEvent event) { + if (getPostAdapter() != null) { + getPostAdapter().setHideTheNumberOfComments(event.hideTheNumberOfComments); + refreshAdapter(); + } + } + + @Subscribe + public void onChangeFixedHeightPreviewCardEvent(ChangeFixedHeightPreviewInCardEvent event) { + if (getPostAdapter() != null) { + getPostAdapter().setFixedHeightPreviewInCard(event.fixedHeightPreviewInCard); + refreshAdapter(); + } + } + + @Subscribe + public void onChangeHideTextPostContentEvent(ChangeHideTextPostContent event) { + if (getPostAdapter() != null) { + getPostAdapter().setHideTextPostContent(event.hideTextPostContent); + refreshAdapter(); + } + } + + @Subscribe + public void onChangePostFeedMaxResolutionEvent(ChangePostFeedMaxResolutionEvent event) { + if (getPostAdapter() != null) { + getPostAdapter().setPostFeedMaxResolution(event.postFeedMaxResolution); + refreshAdapter(); + } + } + + @Subscribe + public void onChangeEasierToWatchInFullScreenEvent(ChangeEasierToWatchInFullScreenEvent event) { + if (getPostAdapter() != null) { + getPostAdapter().setEasierToWatchInFullScreen(event.easierToWatchInFullScreen); + } + } + protected static abstract class LazyModeRunnable implements Runnable { private int currentPosition = -1; |