From 5020bf633fbfb0655e006da9dcf0028fe3370cbb Mon Sep 17 00:00:00 2001 From: Alex Ning Date: Thu, 9 Jul 2020 22:29:22 +0800 Subject: Fix username takes up too much space in comments. Add PostCompactRightLeftThumbnailViewHolder and PostCompactLeftThumbnailViewHolder in order to fix layout issues in ConstraintLayout v2.0.0-beta8. Rename 'Show Thumbnail on the Right in Compact Layout' to 'Show Thumbnail on the Left in Compact Layout'. --- app/build.gradle | 16 +- .../Adapter/CommentAndPostRecyclerViewAdapter.java | 27 +- .../CommentsListingRecyclerViewAdapter.java | 7 +- .../Adapter/PostRecyclerViewAdapter.java | 579 +++++++++++++-------- .../Settings/InterfacePreferenceFragment.java | 2 +- .../Utils/SharedPreferencesUtils.java | 2 +- app/src/main/res/layout/item_comment.xml | 30 +- .../layout/item_post_compact_right_thumbnail.xml | 386 ++++++++++++++ app/src/main/res/values/strings.xml | 2 +- app/src/main/res/xml/interface_preference.xml | 4 +- 10 files changed, 784 insertions(+), 271 deletions(-) create mode 100644 app/src/main/res/layout/item_post_compact_right_thumbnail.xml (limited to 'app') diff --git a/app/build.gradle b/app/build.gradle index edf08528..f91b8aad 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -31,7 +31,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.1.0' implementation 'androidx.browser:browser:1.2.0' implementation 'androidx.cardview:cardview:1.0.0' - implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta8' // Lifecycle components def lifecycleVersion = '2.2.0' implementation "androidx.lifecycle:lifecycle-extensions:$lifecycleVersion" @@ -52,15 +52,15 @@ dependencies { implementation 'com.google.android.exoplayer:exoplayer-dash:2.10.4' implementation 'com.google.android.exoplayer:exoplayer-ui:2.10.4' implementation 'com.alexvasilkov:gesture-views:2.6.0' - implementation 'com.github.bumptech.glide:glide:4.10.0' - annotationProcessor 'com.github.bumptech.glide:compiler:4.10.0' + implementation 'com.github.bumptech.glide:glide:4.11.0' + annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0' implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' implementation 'io.reactivex.rxjava2:rxjava:2.2.19' - implementation 'com.squareup.retrofit2:retrofit:2.7.2' - implementation 'com.squareup.retrofit2:converter-scalars:2.7.2' + implementation 'com.squareup.retrofit2:retrofit:2.9.0' + implementation 'com.squareup.retrofit2:converter-scalars:2.9.0' implementation 'jp.wasabeef:glide-transformations:4.1.0' - implementation 'com.google.dagger:dagger:2.27' - annotationProcessor 'com.google.dagger:dagger-compiler:2.27' + implementation 'com.google.dagger:dagger:2.28.1' + annotationProcessor 'com.google.dagger:dagger-compiler:2.28.1' implementation 'com.jakewharton:butterknife:10.2.1' annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.1' implementation 'com.github.santalu:aspect-ratio-imageview:1.0.9' @@ -70,7 +70,7 @@ dependencies { implementation 'io.noties.markwon:ext-strikethrough:4.3.1' implementation 'io.noties.markwon:simple-ext:4.3.1' implementation 'io.noties.markwon:recycler-table:4.3.1' - implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.19' + implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.20' implementation 'com.github.Ferfalk:SimpleSearchView:0.1.4' def eventbusVersion = '3.2.0' diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Adapter/CommentAndPostRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Adapter/CommentAndPostRecyclerViewAdapter.java index 96901e29..18e3dff7 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/Adapter/CommentAndPostRecyclerViewAdapter.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Adapter/CommentAndPostRecyclerViewAdapter.java @@ -789,29 +789,29 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter ((CommentViewHolder) holder).linearLayout.callOnClick()); - ((CommentViewHolder) holder).replyButton.setVisibility(View.GONE); - ((CommentViewHolder) holder).upvoteButton.setOnClickListener(view -> { if (mAccessToken == null) { Toast.makeText(mContext, R.string.login_first, Toast.LENGTH_SHORT).show(); @@ -504,6 +502,8 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter { + ((PostCompactBaseViewHolder) holder).itemView.setOnClickListener(view -> { if (canStartActivity) { canStartActivity = false; @@ -625,13 +629,13 @@ public class PostRecyclerViewAdapter extends PagedListAdapter= 0) { @@ -644,11 +648,11 @@ public class PostRecyclerViewAdapter extends PagedListAdapter= 0) { @@ -677,18 +681,18 @@ public class PostRecyclerViewAdapter extends PagedListAdapter { + ((PostCompactBaseViewHolder) holder).nameTextView.setOnClickListener(view -> { if (canStartActivity) { canStartActivity = false; if (post.getSubredditNamePrefixed().startsWith("u/")) { @@ -705,8 +709,8 @@ public class PostRecyclerViewAdapter extends PagedListAdapter - ((PostCompactViewHolder) holder).nameTextView.performClick()); + ((PostCompactBaseViewHolder) holder).iconGifImageView.setOnClickListener(view -> + ((PostCompactBaseViewHolder) holder).nameTextView.performClick()); } else { if (post.getAuthorIconUrl() == null) { String authorName = post.getAuthor().equals("[deleted]") ? post.getSubredditNamePrefixed().substring(2) : post.getAuthor(); @@ -715,13 +719,13 @@ public class PostRecyclerViewAdapter extends PagedListAdapter= 0) { @@ -734,17 +738,17 @@ public class PostRecyclerViewAdapter extends PagedListAdapter { + ((PostCompactBaseViewHolder) holder).nameTextView.setOnClickListener(view -> { if (canStartActivity) { canStartActivity = false; Intent intent = new Intent(mActivity, ViewUserDetailActivity.class); @@ -753,33 +757,33 @@ public class PostRecyclerViewAdapter extends PagedListAdapter - ((PostCompactViewHolder) holder).nameTextView.performClick()); + ((PostCompactBaseViewHolder) holder).iconGifImageView.setOnClickListener(view -> + ((PostCompactBaseViewHolder) holder).nameTextView.performClick()); } if (mShowElapsedTime) { - ((PostCompactViewHolder) holder).postTimeTextView.setText( + ((PostCompactBaseViewHolder) holder).postTimeTextView.setText( Utils.getElapsedTime(mActivity, post.getPostTimeMillis())); } else { - ((PostCompactViewHolder) holder).postTimeTextView.setText(Utils.getFormattedTime(mLocale, post.getPostTimeMillis(), mTimeFormatPattern)); + ((PostCompactBaseViewHolder) holder).postTimeTextView.setText(Utils.getFormattedTime(mLocale, post.getPostTimeMillis(), mTimeFormatPattern)); } if (mShowDividerInCompactLayout) { - ((PostCompactViewHolder) holder).divider.setVisibility(View.VISIBLE); + ((PostCompactBaseViewHolder) holder).divider.setVisibility(View.VISIBLE); } else { - ((PostCompactViewHolder) holder).divider.setVisibility(View.GONE); + ((PostCompactBaseViewHolder) holder).divider.setVisibility(View.GONE); } - ((PostCompactViewHolder) holder).titleTextView.setText(title); - ((PostCompactViewHolder) holder).scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType())); + ((PostCompactBaseViewHolder) holder).titleTextView.setText(title); + ((PostCompactBaseViewHolder) holder).scoreTextView.setText(Utils.getNVotes(mShowAbsoluteNumberOfVotes, post.getScore() + post.getVoteType())); if (post.isLocked()) { - ((PostCompactViewHolder) holder).lockedImageView.setVisibility(View.VISIBLE); + ((PostCompactBaseViewHolder) holder).lockedImageView.setVisibility(View.VISIBLE); } if (nsfw) { if (!(mActivity instanceof FilteredThingActivity)) { - ((PostCompactViewHolder) holder).nsfwTextView.setOnClickListener(view -> { + ((PostCompactBaseViewHolder) holder).nsfwTextView.setOnClickListener(view -> { Intent intent = new Intent(mActivity, FilteredThingActivity.class); intent.putExtra(FilteredThingActivity.EXTRA_NAME, post.getSubredditNamePrefixed().substring(2)); intent.putExtra(FilteredThingActivity.EXTRA_POST_TYPE, PostDataSource.TYPE_SUBREDDIT); @@ -787,77 +791,77 @@ public class PostRecyclerViewAdapter extends PagedListAdapter 0) { - ((PostCompactViewHolder) holder).awardsTextView.setVisibility(View.VISIBLE); + ((PostCompactBaseViewHolder) holder).awardsTextView.setVisibility(View.VISIBLE); if (nAwards == 1) { - ((PostCompactViewHolder) holder).awardsTextView.setText(mActivity.getString(R.string.one_award)); + ((PostCompactBaseViewHolder) holder).awardsTextView.setText(mActivity.getString(R.string.one_award)); } else { - ((PostCompactViewHolder) holder).awardsTextView.setText(mActivity.getString(R.string.n_awards, nAwards)); + ((PostCompactBaseViewHolder) holder).awardsTextView.setText(mActivity.getString(R.string.n_awards, nAwards)); } } switch (voteType) { case 1: //Upvoted - ((PostCompactViewHolder) holder).upvoteButton.setColorFilter(mUpvotedColor, android.graphics.PorterDuff.Mode.SRC_IN); - ((PostCompactViewHolder) holder).scoreTextView.setTextColor(mUpvotedColor); + ((PostCompactBaseViewHolder) holder).upvoteButton.setColorFilter(mUpvotedColor, android.graphics.PorterDuff.Mode.SRC_IN); + ((PostCompactBaseViewHolder) holder).scoreTextView.setTextColor(mUpvotedColor); break; case -1: //Downvoted - ((PostCompactViewHolder) holder).downvoteButton.setColorFilter(mDownvotedColor, android.graphics.PorterDuff.Mode.SRC_IN); - ((PostCompactViewHolder) holder).scoreTextView.setTextColor(mDownvotedColor); + ((PostCompactBaseViewHolder) holder).downvoteButton.setColorFilter(mDownvotedColor, android.graphics.PorterDuff.Mode.SRC_IN); + ((PostCompactBaseViewHolder) holder).scoreTextView.setTextColor(mDownvotedColor); break; } if (post.getPostType() != Post.TEXT_TYPE && post.getPostType() != Post.NO_PREVIEW_LINK_TYPE) { - ((PostCompactViewHolder) holder).relativeLayout.setVisibility(View.VISIBLE); + ((PostCompactBaseViewHolder) holder).relativeLayout.setVisibility(View.VISIBLE); if (post.getPostType() != Post.GIF_TYPE && post.getPostType() != Post.VIDEO_TYPE) { - ((PostCompactViewHolder) holder).progressBar.setVisibility(View.VISIBLE); + ((PostCompactBaseViewHolder) holder).progressBar.setVisibility(View.VISIBLE); } - ((PostCompactViewHolder) holder).imageView.setVisibility(View.VISIBLE); + ((PostCompactBaseViewHolder) holder).imageView.setVisibility(View.VISIBLE); loadImage(holder, post); } if (mPostType == PostDataSource.TYPE_SUBREDDIT && !mDisplaySubredditName && post.isStickied()) { - ((PostCompactViewHolder) holder).stickiedPostImageView.setVisibility(View.VISIBLE); - mGlide.load(R.drawable.ic_thumbtack_24dp).into(((PostCompactViewHolder) holder).stickiedPostImageView); + ((PostCompactBaseViewHolder) holder).stickiedPostImageView.setVisibility(View.VISIBLE); + mGlide.load(R.drawable.ic_thumbtack_24dp).into(((PostCompactBaseViewHolder) holder).stickiedPostImageView); } if (isArchived) { - ((PostCompactViewHolder) holder).archivedImageView.setVisibility(View.VISIBLE); + ((PostCompactBaseViewHolder) holder).archivedImageView.setVisibility(View.VISIBLE); - ((PostCompactViewHolder) holder).upvoteButton + ((PostCompactBaseViewHolder) holder).upvoteButton .setColorFilter(mVoteAndReplyUnavailableVoteButtonColor, android.graphics.PorterDuff.Mode.SRC_IN); - ((PostCompactViewHolder) holder).downvoteButton + ((PostCompactBaseViewHolder) holder).downvoteButton .setColorFilter(mVoteAndReplyUnavailableVoteButtonColor, android.graphics.PorterDuff.Mode.SRC_IN); } if (post.isCrosspost()) { - ((PostCompactViewHolder) holder).crosspostImageView.setVisibility(View.VISIBLE); + ((PostCompactBaseViewHolder) holder).crosspostImageView.setVisibility(View.VISIBLE); } if (!(mActivity instanceof FilteredThingActivity)) { - ((PostCompactViewHolder) holder).typeTextView.setOnClickListener(view -> mCallback.typeChipClicked(post.getPostType())); + ((PostCompactBaseViewHolder) holder).typeTextView.setOnClickListener(view -> mCallback.typeChipClicked(post.getPostType())); } switch (post.getPostType()) { case Post.IMAGE_TYPE: - ((PostCompactViewHolder) holder).typeTextView.setText(R.string.image); + ((PostCompactBaseViewHolder) holder).typeTextView.setText(R.string.image); final String imageUrl = post.getUrl(); - ((PostCompactViewHolder) holder).imageView.setOnClickListener(view -> { + ((PostCompactBaseViewHolder) holder).imageView.setOnClickListener(view -> { Intent intent = new Intent(mActivity, ViewImageOrGifActivity.class); intent.putExtra(ViewImageOrGifActivity.IMAGE_URL_KEY, imageUrl); intent.putExtra(ViewImageOrGifActivity.FILE_NAME_KEY, subredditName @@ -866,13 +870,13 @@ public class PostRecyclerViewAdapter extends PagedListAdapter { + ((PostCompactBaseViewHolder) holder).imageView.setOnClickListener(view -> { Intent intent = new Intent(mActivity, LinkResolverActivity.class); Uri uri = Uri.parse(post.getUrl()); if (uri.getScheme() == null && uri.getHost() == null) { @@ -885,10 +889,10 @@ public class PostRecyclerViewAdapter extends PagedListAdapter { + ((PostCompactBaseViewHolder) holder).imageView.setOnClickListener(view -> { Intent intent = new Intent(mActivity, ViewImageOrGifActivity.class); intent.setData(gifVideoUri); intent.putExtra(ViewImageOrGifActivity.FILE_NAME_KEY, subredditName @@ -897,13 +901,13 @@ public class PostRecyclerViewAdapter extends PagedListAdapter { + ((PostCompactBaseViewHolder) holder).imageView.setOnClickListener(view -> { Intent intent = new Intent(mActivity, ViewVideoActivity.class); intent.setData(videoUri); intent.putExtra(ViewVideoActivity.EXTRA_VIDEO_DOWNLOAD_URL, post.getVideoDownloadUrl()); @@ -913,17 +917,17 @@ public class PostRecyclerViewAdapter extends PagedListAdapter { + ((PostCompactBaseViewHolder) holder).linkTextView.setText(noPreviewLinkDomain); + ((PostCompactBaseViewHolder) holder).noPreviewLinkImageFrameLayout.setVisibility(View.VISIBLE); + ((PostCompactBaseViewHolder) holder).noPreviewLinkImageFrameLayout.setOnClickListener(view -> { Intent intent = new Intent(mActivity, LinkResolverActivity.class); Uri uri = Uri.parse(post.getUrl()); if (uri.getScheme() == null && uri.getHost() == null) { @@ -936,11 +940,11 @@ public class PostRecyclerViewAdapter extends PagedListAdapter { + ((PostCompactBaseViewHolder) holder).upvoteButton.setOnClickListener(view -> { if (mAccessToken == null) { Toast.makeText(mActivity, R.string.login_first, Toast.LENGTH_SHORT).show(); return; @@ -951,48 +955,48 @@ public class PostRecyclerViewAdapter extends PagedListAdapter { + ((PostCompactBaseViewHolder) holder).downvoteButton.setOnClickListener(view -> { if (mAccessToken == null) { Toast.makeText(mActivity, R.string.login_first, Toast.LENGTH_SHORT).show(); return; @@ -1022,48 +1026,48 @@ public class PostRecyclerViewAdapter extends PagedListAdapter { + ((PostCompactBaseViewHolder) holder).saveButton.setOnClickListener(view -> { if (mAccessToken == null) { Toast.makeText(mActivity, R.string.login_first, Toast.LENGTH_SHORT).show(); return; } if (post.isSaved()) { - ((PostCompactViewHolder) holder).saveButton.setImageResource(R.drawable.ic_bookmark_border_grey_24dp); + ((PostCompactBaseViewHolder) holder).saveButton.setImageResource(R.drawable.ic_bookmark_border_grey_24dp); SaveThing.unsaveThing(mOauthRetrofit, mAccessToken, post.getFullName(), new SaveThing.SaveThingListener() { @Override public void success() { post.setSaved(false); - ((PostCompactViewHolder) holder).saveButton.setImageResource(R.drawable.ic_bookmark_border_grey_24dp); + ((PostCompactBaseViewHolder) holder).saveButton.setImageResource(R.drawable.ic_bookmark_border_grey_24dp); Toast.makeText(mActivity, R.string.post_unsaved_success, Toast.LENGTH_SHORT).show(); EventBus.getDefault().post(new PostUpdateEventToDetailActivity(post)); } @@ -1111,19 +1115,19 @@ public class PostRecyclerViewAdapter extends PagedListAdapter shareLink(post)); + ((PostCompactBaseViewHolder) holder).shareButton.setOnClickListener(view -> shareLink(post)); } } } @@ -1230,27 +1234,27 @@ public class PostRecyclerViewAdapter extends PagedListAdapter imageRequestBuilder = mGlide.load(previewUrl) .error(R.drawable.ic_error_outline_black_24dp).listener(new RequestListener() { @Override public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) { - ((PostCompactViewHolder) holder).progressBar.setVisibility(View.GONE); + ((PostCompactBaseViewHolder) holder).progressBar.setVisibility(View.GONE); return false; } @Override public boolean onResourceReady(Drawable resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) { - ((PostCompactViewHolder) holder).progressBar.setVisibility(View.GONE); + ((PostCompactBaseViewHolder) holder).progressBar.setVisibility(View.GONE); return false; } }); if ((post.isNSFW() && mNeedBlurNSFW) || post.isSpoiler() && mNeedBlurSpoiler) { imageRequestBuilder - .transform(new BlurTransformation(50, 2)).into(((PostCompactViewHolder) holder).imageView); + .transform(new BlurTransformation(50, 2)).into(((PostCompactBaseViewHolder) holder).imageView); } else { - imageRequestBuilder.into(((PostCompactViewHolder) holder).imageView); + imageRequestBuilder.into(((PostCompactBaseViewHolder) holder).imageView); } } } @@ -1409,28 +1413,28 @@ public class PostRecyclerViewAdapter extends PagedListAdapter { - //Do nothing in order to prevent clicking this to start ViewPostDetailActivity - }); + } + + 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, + CustomTextView awardsTextView, TextView linkTextView, + RelativeLayout relativeLayout, ProgressBar progressBar, + ImageView imageView, ImageView playButtonImageView, + FrameLayout noPreviewLinkImageFrameLayout, + ImageView noPreviewLinkImageView, Barrier imageBarrier, + ConstraintLayout bottomConstraintLayout, ImageView upvoteButton, + TextView scoreTextView, ImageView downvoteButton, + TextView commentsCountTextView, ImageView saveButton, + ImageView 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.awardsTextView = awardsTextView; + this.linkTextView = linkTextView; + this.relativeLayout = relativeLayout; + this.progressBar = progressBar; + this.imageView = imageView; + this.playButtonImageView = playButtonImageView; + this.noPreviewLinkImageFrameLayout = noPreviewLinkImageFrameLayout; + this.noPreviewLinkImageView = noPreviewLinkImageView; + this.imageBarrier = imageBarrier; + this.bottomConstraintLayout = bottomConstraintLayout; + this.upvoteButton = upvoteButton; + this.scoreTextView = scoreTextView; + this.downvoteButton = downvoteButton; + this.commentsCountTextView = commentsCountTextView; + this.saveButton = saveButton; + this.shareButton = shareButton; + this.divider = divider; + + scoreTextView.setOnClickListener(null); if (mVoteButtonsOnTheRight) { ConstraintSet constraintSet = new ConstraintSet(); @@ -2683,40 +2703,6 @@ public class PostRecyclerViewAdapter extends PagedListAdapter - - + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintWidth_default="wrap" + app:layout_constraintHorizontal_bias="0" /> + app:layout_constraintTop_toBottomOf="@id/author_text_view_item_post_comment" + app:layout_constraintWidth_default="wrap" + tools:visibility="visible" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index eed910f4..c0cee539 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -375,7 +375,7 @@ Time Format Default Post Layout Show Divider in Compact Layout - Show Thumbnail on the Right in Compact Layout + Show Thumbnail on the Left in Compact Layout Swap Tap and Long Press in Comments Swipe Right to Go Back From Comments Lock Jump to Next Top-level Comment Button diff --git a/app/src/main/res/xml/interface_preference.xml b/app/src/main/res/xml/interface_preference.xml index 84d60853..e391a21c 100644 --- a/app/src/main/res/xml/interface_preference.xml +++ b/app/src/main/res/xml/interface_preference.xml @@ -46,8 +46,8 @@ + app:key="show_thumbnail_on_the_left_in_compact_layout" + app:title="@string/settings_show_thumbnail_on_the_left_in_compact_layout" />