diff options
author | Docile-Alligator <25734209+Docile-Alligator@users.noreply.github.com> | 2024-09-26 21:00:20 +0000 |
---|---|---|
committer | Docile-Alligator <25734209+Docile-Alligator@users.noreply.github.com> | 2024-09-26 21:00:20 +0000 |
commit | 3f93ed03edcafceb94f17d89c54b032e0b112e24 (patch) | |
tree | 315028c80abc1b7ad52602bc6f177394d2a8ae9f /app/src | |
parent | 7e0fa498ea343d5fbbe3a9757a4ecc4f66389649 (diff) | |
download | infinity-for-reddit-3f93ed03edcafceb94f17d89c54b032e0b112e24.tar infinity-for-reddit-3f93ed03edcafceb94f17d89c54b032e0b112e24.tar.gz infinity-for-reddit-3f93ed03edcafceb94f17d89c54b032e0b112e24.tar.bz2 infinity-for-reddit-3f93ed03edcafceb94f17d89c54b032e0b112e24.tar.lz infinity-for-reddit-3f93ed03edcafceb94f17d89c54b032e0b112e24.tar.xz infinity-for-reddit-3f93ed03edcafceb94f17d89c54b032e0b112e24.tar.zst infinity-for-reddit-3f93ed03edcafceb94f17d89c54b032e0b112e24.zip |
Continue optimizing class structures in PostRecyclerViewAdapter.
Diffstat (limited to '')
-rw-r--r-- | app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostRecyclerViewAdapter.java | 566 |
1 files changed, 452 insertions, 114 deletions
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 7af77dd3..ad395005 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostRecyclerViewAdapter.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostRecyclerViewAdapter.java @@ -808,30 +808,30 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie } if (holder instanceof PostBaseVideoAutoplayViewHolder) { - ((PostBaseVideoAutoplayViewHolder) holder).previewImageView.setVisibility(View.VISIBLE); + ((PostBaseVideoAutoplayViewHolder) holder).toroPlayer.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); + ((PostBaseVideoAutoplayViewHolder) holder).toroPlayer.aspectRatioFrameLayout.setAspectRatio((float) preview.getPreviewWidth() / preview.getPreviewHeight()); + mGlide.load(preview.getPreviewUrl()).centerInside().downsample(mSaveMemoryCenterInsideDownsampleStrategy).into(((PostBaseVideoAutoplayViewHolder) holder).toroPlayer.previewImageView); } else { - ((PostBaseVideoAutoplayViewHolder) holder).aspectRatioFrameLayout.setAspectRatio(1); + ((PostBaseVideoAutoplayViewHolder) holder).toroPlayer.aspectRatioFrameLayout.setAspectRatio(1); } - if (!((PostBaseVideoAutoplayViewHolder) holder).isManuallyPaused) { + if (!((PostBaseVideoAutoplayViewHolder) holder).toroPlayer.isManuallyPaused) { if (mFragment.getMasterMutingOption() == null) { - ((PostBaseVideoAutoplayViewHolder) holder).setVolume(mMuteAutoplayingVideos || (post.isNSFW() && mMuteNSFWVideo) ? 0f : 1f); + ((PostBaseVideoAutoplayViewHolder) holder).toroPlayer.setVolume(mMuteAutoplayingVideos || (post.isNSFW() && mMuteNSFWVideo) ? 0f : 1f); } else { - ((PostBaseVideoAutoplayViewHolder) holder).setVolume(mFragment.getMasterMutingOption() ? 0f : 1f); + ((PostBaseVideoAutoplayViewHolder) holder).toroPlayer.setVolume(mFragment.getMasterMutingOption() ? 0f : 1f); } } if (post.isRedgifs() && !post.isLoadRedgifsOrStreamableVideoSuccess()) { - ((PostBaseVideoAutoplayViewHolder) holder).fetchRedgifsOrStreamableVideoCall = + ((PostBaseVideoAutoplayViewHolder) holder).toroPlayer.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, + ((PostBaseVideoAutoplayViewHolder) holder).toroPlayer.fetchRedgifsOrStreamableVideoCall, new FetchVideoLinkListener() { @Override public void onFetchRedgifsVideoLinkSuccess(String webm, String mp4) { @@ -839,22 +839,22 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie post.setVideoUrl(mp4); post.setLoadRedgifsOrStreamableVideoSuccess(true); if (position == holder.getBindingAdapterPosition()) { - ((PostBaseVideoAutoplayViewHolder) holder).bindVideoUri(Uri.parse(post.getVideoUrl())); + ((PostBaseVideoAutoplayViewHolder) holder).toroPlayer.bindVideoUri(Uri.parse(post.getVideoUrl())); } } @Override public void failed(@Nullable Integer messageRes) { if (position == holder.getBindingAdapterPosition()) { - ((PostBaseVideoAutoplayViewHolder) holder).loadFallbackDirectVideo(); + ((PostBaseVideoAutoplayViewHolder) holder).toroPlayer.loadFallbackDirectVideo(); } } }); } else if(post.isStreamable() && !post.isLoadRedgifsOrStreamableVideoSuccess()) { - ((PostBaseVideoAutoplayViewHolder) holder).fetchRedgifsOrStreamableVideoCall = + ((PostBaseVideoAutoplayViewHolder) holder).toroPlayer.fetchRedgifsOrStreamableVideoCall = mStreamableApiProvider.get().getStreamableData(post.getStreamableShortCode()); FetchStreamableVideo.fetchStreamableVideoInRecyclerViewAdapter(mExecutor, new Handler(), - ((PostBaseVideoAutoplayViewHolder) holder).fetchRedgifsOrStreamableVideoCall, + ((PostBaseVideoAutoplayViewHolder) holder).toroPlayer.fetchRedgifsOrStreamableVideoCall, new FetchVideoLinkListener() { @Override public void onFetchStreamableVideoLinkSuccess(StreamableVideo streamableVideo) { @@ -863,19 +863,19 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie post.setVideoUrl(media.url); post.setLoadRedgifsOrStreamableVideoSuccess(true); if (position == holder.getBindingAdapterPosition()) { - ((PostBaseVideoAutoplayViewHolder) holder).bindVideoUri(Uri.parse(post.getVideoUrl())); + ((PostBaseVideoAutoplayViewHolder) holder).toroPlayer.bindVideoUri(Uri.parse(post.getVideoUrl())); } } @Override public void failed(@Nullable Integer messageRes) { if (position == holder.getBindingAdapterPosition()) { - ((PostBaseVideoAutoplayViewHolder) holder).loadFallbackDirectVideo(); + ((PostBaseVideoAutoplayViewHolder) holder).toroPlayer.loadFallbackDirectVideo(); } } }); } else { - ((PostBaseVideoAutoplayViewHolder) holder).bindVideoUri(Uri.parse(post.getVideoUrl())); + ((PostBaseVideoAutoplayViewHolder) holder).toroPlayer.bindVideoUri(Uri.parse(post.getVideoUrl())); } } else if (holder instanceof PostWithPreviewTypeViewHolder) { if (post.getPostType() == Post.VIDEO_TYPE) { @@ -2255,18 +2255,19 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie 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).errorLoadingRedgifsImageView.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); + ((PostBaseVideoAutoplayViewHolder) holder).toroPlayer.mediaUri = null; + if (((PostBaseVideoAutoplayViewHolder) holder).toroPlayer.fetchRedgifsOrStreamableVideoCall != null + && !((PostBaseVideoAutoplayViewHolder) holder).toroPlayer.fetchRedgifsOrStreamableVideoCall.isCanceled()) { + ((PostBaseVideoAutoplayViewHolder) holder).toroPlayer.fetchRedgifsOrStreamableVideoCall.cancel(); + ((PostBaseVideoAutoplayViewHolder) holder).toroPlayer.fetchRedgifsOrStreamableVideoCall = null; + } + ((PostBaseVideoAutoplayViewHolder) holder).toroPlayer.errorLoadingRedgifsImageView.setVisibility(View.GONE); + ((PostBaseVideoAutoplayViewHolder) holder).toroPlayer.muteButton.setVisibility(View.GONE); + if (!((PostBaseVideoAutoplayViewHolder) holder).toroPlayer.isManuallyPaused) { + ((PostBaseVideoAutoplayViewHolder) holder).toroPlayer.resetVolume(); + } + mGlide.clear(((PostBaseVideoAutoplayViewHolder) holder).toroPlayer.previewImageView); + ((PostBaseVideoAutoplayViewHolder) holder).toroPlayer.previewImageView.setVisibility(View.GONE); } else if (holder instanceof PostWithPreviewTypeViewHolder) { mGlide.clear(((PostWithPreviewTypeViewHolder) holder).binding.imageViewItemPostWithPreview); ((PostWithPreviewTypeViewHolder) holder).binding.imageViewItemPostWithPreview.setVisibility(View.GONE); @@ -2692,7 +2693,100 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie } void setBaseView(AspectRatioGifImageView iconGifImageView, + TextView subredditTextView, + TextView userTextView, + CustomTextView typeTextView, + CustomTextView nsfwTextView, + CustomTextView flairTextView, + MaterialButton upvoteButton, + TextView scoreTextView, + MaterialButton downvoteButton, + MaterialButton commentsCountButton, + MaterialButton saveButton, + MaterialButton shareButton) { + this.iconGifImageView = iconGifImageView; + this.upvoteButton = upvoteButton; + this.scoreTextView = scoreTextView; + this.downvoteButton = downvoteButton; + this.commentsCountButton = commentsCountButton; + this.saveButton = saveButton; + this.shareButton = shareButton; + + 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()); + } + + userTextView.setOnClickListener(view -> { + if (!canStartActivity) { + return; + } + 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); + }); + + setOnClickListeners( + typeTextView, + nsfwTextView, + flairTextView, + upvoteButton, + scoreTextView, + downvoteButton, + commentsCountButton, + saveButton, + shareButton); + } + + void setBaseView(AspectRatioGifImageView iconGifImageView, TextView nameTextView, + CustomTextView typeTextView, + CustomTextView nsfwTextView, + CustomTextView flairTextView, MaterialButton upvoteButton, TextView scoreTextView, MaterialButton downvoteButton, @@ -2730,7 +2824,10 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie iconGifImageView.setOnClickListener(view -> nameTextView.performClick()); - setOnClickListeners(upvoteButton, + setOnClickListeners(typeTextView, + nsfwTextView, + flairTextView, + upvoteButton, scoreTextView, downvoteButton, commentsCountButton, @@ -3049,9 +3146,247 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie }); } + void setOnClickListeners(CustomTextView typeTextView, + CustomTextView nsfwTextView, + CustomTextView flairTextView, + MaterialButton upvoteButton, + TextView scoreTextView, + MaterialButton downvoteButton, + MaterialButton commentsCountButton, + MaterialButton saveButton, + MaterialButton shareButton) { + setOnClickListeners(upvoteButton, + scoreTextView, + downvoteButton, + commentsCountButton, + saveButton, + shareButton); + + 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()); + } + }); + } + } + abstract void markPostRead(Post post, boolean changePostItemColor); } + @UnstableApi + public abstract class VideoAutoplayImpl implements ToroPlayer { + View itemView; + AspectRatioFrameLayout aspectRatioFrameLayout; + GifImageView previewImageView; + ImageView errorLoadingRedgifsImageView; + PlayerView videoPlayer; + ImageView muteButton; + ImageView fullscreenButton; + ImageView playPauseButton; + @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; + + public VideoAutoplayImpl(View itemView, AspectRatioFrameLayout aspectRatioFrameLayout, + GifImageView previewImageView, ImageView errorLoadingRedgifsImageView, + PlayerView videoPlayer, ImageView muteButton, ImageView fullscreenButton, + ImageView playPauseButton, + Drawable playDrawable, Drawable pauseDrawable) { + this.itemView = itemView; + this.aspectRatioFrameLayout = aspectRatioFrameLayout; + this.previewImageView = previewImageView; + this.errorLoadingRedgifsImageView = errorLoadingRedgifsImageView; + this.videoPlayer = videoPlayer; + this.muteButton = muteButton; + this.fullscreenButton = fullscreenButton; + this.playPauseButton = playPauseButton; + this.playDrawable = playDrawable; + this.pauseDrawable = pauseDrawable; + } + + 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() { + Post post = getPost(); + 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(); + } + + @OptIn(markerClass = UnstableApi.class) + @Override + public void initialize(@NonNull Container container, @NonNull PlaybackInfo playbackInfo) { + if (this.container == null) { + this.container = container; + } + if (mediaUri == null) { + return; + } + 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) { + Post post = getPost(); + 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; + } + + abstract Post getPost(); + } + public class PostBaseViewHolder extends PostViewHolder { TextView subredditTextView; TextView userTextView; @@ -3099,6 +3434,9 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie super.setBaseView(iconGifImageView, subredditTextView, userTextView, + typeTextView, + nsfwTextView, + flairTextView, upvoteButton, scoreTextView, downvoteButton, @@ -3229,40 +3567,6 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie } return false; }); - - 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()); - } - }); - } } void setBaseView(AspectRatioGifImageView iconGifImageView, @@ -3318,7 +3622,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie @UnstableApi class PostBaseVideoAutoplayViewHolder extends PostBaseViewHolder implements ToroPlayer { - AspectRatioFrameLayout aspectRatioFrameLayout; + /*AspectRatioFrameLayout aspectRatioFrameLayout; GifImageView previewImageView; ImageView errorLoadingRedgifsImageView; PlayerView videoPlayer; @@ -3335,7 +3639,8 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie public Call<String> fetchRedgifsOrStreamableVideoCall; private boolean isManuallyPaused; private Drawable playDrawable; - private Drawable pauseDrawable; + private Drawable pauseDrawable;*/ + VideoAutoplayImpl toroPlayer; @OptIn(markerClass = UnstableApi.class) PostBaseVideoAutoplayViewHolder(View rootView, @@ -3390,7 +3695,22 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie saveButton, shareButton); - this.aspectRatioFrameLayout = aspectRatioFrameLayout; + toroPlayer = new VideoAutoplayImpl(rootView, aspectRatioFrameLayout, previewImageView, + errorLoadingRedgifsImageView, videoPlayer, muteButton, fullscreenButton, playPauseButton, + AppCompatResources.getDrawable(mActivity, R.drawable.ic_play_arrow_24dp), + AppCompatResources.getDrawable(mActivity, R.drawable.ic_pause_24dp)) { + @Override + public int getPlayerOrder() { + return getBindingAdapterPosition(); + } + + @Override + Post getPost() { + return post; + } + }; + + /*this.aspectRatioFrameLayout = aspectRatioFrameLayout; this.previewImageView = previewImageView; this.errorLoadingRedgifsImageView = errorLoadingRedgifsImageView; this.videoPlayer = videoPlayer; @@ -3399,21 +3719,21 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie 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); + pauseDrawable = AppCompatResources.getDrawable(mActivity, R.drawable.ic_pause_24dp);*/ aspectRatioFrameLayout.setOnClickListener(null); muteButton.setOnClickListener(view -> { - if (helper != null) { - if (helper.getVolume() != 0) { + if (toroPlayer.helper != null) { + if (toroPlayer.helper.getVolume() != 0) { muteButton.setImageDrawable(ContextCompat.getDrawable(mActivity, R.drawable.ic_mute_24dp)); - helper.setVolume(0f); - volume = 0f; + toroPlayer.helper.setVolume(0f); + toroPlayer.volume = 0f; mFragment.videoAutoplayChangeMutingOption(true); } else { muteButton.setImageDrawable(ContextCompat.getDrawable(mActivity, R.drawable.ic_unmute_24dp)); - helper.setVolume(1f); - volume = 1f; + toroPlayer.helper.setVolume(1f); + toroPlayer.volume = 1f; mFragment.videoAutoplayChangeMutingOption(false); } } @@ -3428,8 +3748,8 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie if (post != null) { markPostRead(post, true); - if (helper != null) { - openMedia(post, helper.getLatestPlaybackInfo().getResumePosition()); + if (toroPlayer.helper != null) { + openMedia(post, toroPlayer.helper.getLatestPlaybackInfo().getResumePosition()); } else { openMedia(post, -1); } @@ -3439,10 +3759,10 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie playPauseButton.setOnClickListener(view -> { if (isPlaying()) { pause(); - isManuallyPaused = true; - savePlaybackInfo(getPlayerOrder(), getCurrentPlaybackInfo()); + toroPlayer.isManuallyPaused = true; + toroPlayer.savePlaybackInfo(getPlayerOrder(), getCurrentPlaybackInfo()); } else { - isManuallyPaused = false; + toroPlayer.isManuallyPaused = false; play(); } }); @@ -3461,7 +3781,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie @Override public void onScrubStop(TimeBar timeBar, long position, boolean canceled) { if (!canceled) { - savePlaybackInfo(getPlayerOrder(), getCurrentPlaybackInfo()); + toroPlayer.savePlaybackInfo(getPlayerOrder(), getCurrentPlaybackInfo()); } } }); @@ -3475,7 +3795,54 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie }); } - void bindVideoUri(Uri videoUri) { + @NonNull + @Override + public View getPlayerView() { + return toroPlayer.getPlayerView(); + } + + @NonNull + @Override + public PlaybackInfo getCurrentPlaybackInfo() { + return toroPlayer.getCurrentPlaybackInfo(); + } + + @Override + public void initialize(@NonNull Container container, @NonNull PlaybackInfo playbackInfo) { + toroPlayer.initialize(container, playbackInfo); + } + + @Override + public void play() { + toroPlayer.play(); + } + + @Override + public void pause() { + toroPlayer.pause(); + } + + @Override + public boolean isPlaying() { + return toroPlayer.isPlaying(); + } + + @Override + public void release() { + toroPlayer.release(); + } + + @Override + public boolean wantsToPlay() { + return toroPlayer.wantsToPlay(); + } + + @Override + public int getPlayerOrder() { + return toroPlayer.getPlayerOrder(); + } + + /*void bindVideoUri(Uri videoUri) { mediaUri = videoUri; } @@ -3622,7 +3989,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie @Override public int getPlayerOrder() { return getBindingAdapterPosition(); - } + }*/ } @UnstableApi @@ -4089,6 +4456,9 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie View divider) { super.setBaseView(iconGifImageView, nameTextView, + typeTextView, + nsfwTextView, + flairTextView, upvoteButton, scoreTextView, downvoteButton, @@ -4236,39 +4606,6 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie return false; }); - 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) { @@ -4300,6 +4637,7 @@ public class PostRecyclerViewAdapter extends PagingDataAdapter<Post, RecyclerVie }; } + @Override void markPostRead(Post post, boolean changePostItemColor) { if (!mAccountName.equals(Account.ANONYMOUS_ACCOUNT) && !post.isRead() && mMarkPostsAsRead) { post.markAsRead(); |