Skip to content

Commit 059db6f

Browse files
committed
Add replies button to comments
1 parent 4c709b2 commit 059db6f

4 files changed

Lines changed: 74 additions & 29 deletions

File tree

app/src/main/java/org/schabi/newpipe/info_list/holder/CommentInfoItemHolder.java

Lines changed: 42 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import android.util.Log;
1010
import android.view.View;
1111
import android.view.ViewGroup;
12+
import android.widget.Button;
1213
import android.widget.ImageView;
1314
import android.widget.RelativeLayout;
1415
import android.widget.TextView;
@@ -57,15 +58,20 @@ public class CommentInfoItemHolder extends InfoItemHolder {
5758
private final RelativeLayout itemRoot;
5859
private final ImageView itemThumbnailView;
5960
private final TextView itemContentView;
61+
private final ImageView itemThumbsUpView;
6062
private final TextView itemLikesCountView;
6163
private final TextView itemTitleView;
6264
private final ImageView itemHeartView;
6365
private final ImageView itemPinnedView;
66+
private final Button repliesButton;
6467

6568
private final CompositeDisposable disposables = new CompositeDisposable();
66-
@Nullable private Description commentText;
67-
@Nullable private StreamingService streamService;
68-
@Nullable private String streamUrl;
69+
@Nullable
70+
private Description commentText;
71+
@Nullable
72+
private StreamingService streamService;
73+
@Nullable
74+
private String streamUrl;
6975

7076
public CommentInfoItemHolder(final InfoItemBuilder infoItemBuilder,
7177
final ViewGroup parent) {
@@ -74,10 +80,12 @@ public CommentInfoItemHolder(final InfoItemBuilder infoItemBuilder,
7480
itemRoot = itemView.findViewById(R.id.itemRoot);
7581
itemThumbnailView = itemView.findViewById(R.id.itemThumbnailView);
7682
itemContentView = itemView.findViewById(R.id.itemCommentContentView);
83+
itemThumbsUpView = itemView.findViewById(R.id.detail_thumbs_up_img_view);
7784
itemLikesCountView = itemView.findViewById(R.id.detail_thumbs_up_count_view);
7885
itemTitleView = itemView.findViewById(R.id.itemTitleView);
7986
itemHeartView = itemView.findViewById(R.id.detail_heart_image_view);
8087
itemPinnedView = itemView.findViewById(R.id.detail_pinned_view);
88+
repliesButton = itemView.findViewById(R.id.replies_button);
8189

8290
commentHorizontalPadding = (int) infoItemBuilder.getContext()
8391
.getResources().getDimension(R.dimen.comments_horizontal_padding);
@@ -97,6 +105,8 @@ public void updateFromItem(final InfoItem infoItem,
97105
}
98106
final CommentsInfoItem item = (CommentsInfoItem) infoItem;
99107

108+
109+
// load the author avatar
100110
PicassoHelper.loadAvatar(item.getUploaderAvatars()).into(itemThumbnailView);
101111
if (ImageStrategy.shouldLoadImages()) {
102112
itemThumbnailView.setVisibility(View.VISIBLE);
@@ -109,6 +119,10 @@ public void updateFromItem(final InfoItem infoItem,
109119
}
110120
itemThumbnailView.setOnClickListener(view -> openCommentAuthor(item));
111121

122+
123+
// setup the top row, with pinned icon, author name and comment date
124+
itemPinnedView.setVisibility(item.isPinned() ? View.VISIBLE : View.GONE);
125+
112126
final String uploadDate;
113127
if (item.getUploadDate() != null) {
114128
uploadDate = Localization.relativeTime(item.getUploadDate().offsetDateTime());
@@ -117,9 +131,29 @@ public void updateFromItem(final InfoItem infoItem,
117131
}
118132
itemTitleView.setText(Localization.concatenateStrings(item.getUploaderName(), uploadDate));
119133

120-
itemPinnedView.setVisibility(item.isPinned() ? View.VISIBLE : View.GONE);
134+
135+
// setup bottom row, with likes, heart and replies button
136+
if (item.getLikeCount() >= 0) {
137+
itemLikesCountView.setText(
138+
Localization.shortCount(
139+
itemBuilder.getContext(),
140+
item.getLikeCount()));
141+
} else {
142+
itemLikesCountView.setText("-");
143+
}
144+
121145
itemHeartView.setVisibility(item.isHeartedByUploader() ? View.VISIBLE : View.GONE);
122146

147+
final boolean hasReplies = item.getReplies() != null;
148+
repliesButton.setOnClickListener(hasReplies ? (v) -> openRepliesFragment() : null);
149+
repliesButton.setVisibility(hasReplies ? View.VISIBLE : View.GONE);
150+
repliesButton.setText(hasReplies
151+
? Localization.replyCount(itemBuilder.getContext(), item.getReplyCount()) : "");
152+
((RelativeLayout.LayoutParams) itemThumbsUpView.getLayoutParams()).topMargin =
153+
hasReplies ? 0 : DeviceUtils.dpToPx(6, itemBuilder.getContext());
154+
155+
156+
// setup comment content and click listeners to expand/ellipsize it
123157
try {
124158
streamService = NewPipe.getService(item.getServiceId());
125159
} catch (final ExtractionException e) {
@@ -135,16 +169,6 @@ public void updateFromItem(final InfoItem infoItem,
135169
//noinspection ClickableViewAccessibility
136170
itemContentView.setOnTouchListener(CommentTextOnTouchListener.INSTANCE);
137171

138-
if (item.getLikeCount() >= 0) {
139-
itemLikesCountView.setText(
140-
Localization.shortCount(
141-
itemBuilder.getContext(),
142-
item.getLikeCount()));
143-
} else {
144-
itemLikesCountView.setText("-");
145-
}
146-
147-
148172
itemView.setOnClickListener(view -> {
149173
toggleEllipsize();
150174
if (itemBuilder.getOnCommentsSelectedListener() != null) {
@@ -278,4 +302,8 @@ private void linkifyCommentContentView(@Nullable final Consumer<TextView> onComp
278302
onCompletion);
279303
}
280304
}
305+
306+
private void openRepliesFragment() {
307+
// TODO
308+
}
281309
}

app/src/main/java/org/schabi/newpipe/util/Localization.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,11 @@ public static String deletedDownloadCount(final Context context, final int delet
209209
deletedCount, shortCount(context, deletedCount));
210210
}
211211

212+
public static String replyCount(final Context context, final int replyCount) {
213+
return getQuantity(context, R.plurals.replies, 0, replyCount,
214+
String.valueOf(replyCount));
215+
}
216+
212217
public static String getDurationString(final long duration) {
213218
final String output;
214219

app/src/main/res/layout/list_comment_item.xml

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
android:layout_height="42dp"
1717
android:layout_alignParentStart="true"
1818
android:layout_alignParentTop="true"
19-
android:layout_marginStart="3dp"
2019
android:layout_marginEnd="@dimen/comment_item_avatar_right_margin"
2120
android:focusable="false"
2221
android:src="@drawable/placeholder_person"
@@ -31,66 +30,75 @@
3130
android:layout_marginEnd="@dimen/video_item_detail_pinned_right_margin"
3231
android:layout_toEndOf="@+id/itemThumbnailView"
3332
android:contentDescription="@string/detail_pinned_comment_view_description"
34-
android:src="@drawable/ic_pin"
35-
android:visibility="gone"
36-
tools:visibility="visible" />
33+
android:src="@drawable/ic_pin" />
3734

3835
<org.schabi.newpipe.views.NewPipeTextView
3936
android:id="@+id/itemTitleView"
4037
android:layout_width="match_parent"
4138
android:layout_height="wrap_content"
4239
android:layout_alignParentTop="true"
43-
android:layout_marginBottom="@dimen/video_item_search_image_right_margin"
4440
android:layout_toEndOf="@+id/detail_pinned_view"
4541
android:ellipsize="end"
4642
android:lines="1"
4743
android:textAppearance="?android:attr/textAppearanceSmall"
4844
android:textSize="@dimen/comment_item_title_text_size"
49-
tools:text="Author Name, Lorem ipsum · 5 months ago" />
45+
tools:text="Author Name, Lorem ipsum 5 months ago" />
5046

5147
<org.schabi.newpipe.views.NewPipeTextView
5248
android:id="@+id/itemCommentContentView"
5349
android:layout_width="match_parent"
5450
android:layout_height="wrap_content"
5551
android:layout_below="@id/itemTitleView"
56-
android:layout_marginBottom="@dimen/channel_item_description_to_details_margin"
52+
android:layout_marginTop="6dp"
5753
android:layout_toEndOf="@+id/itemThumbnailView"
5854
android:textAppearance="?android:attr/textAppearanceLarge"
5955
android:textSize="@dimen/comment_item_content_text_size"
60-
tools:text="Comment Content, Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc tristique vitae sem vitae blanditLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc tristique vitae sem vitae blanditLorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc tristique vitae sem vitae blandit" />
56+
tools:text="@tools:sample/lorem/random[1]" />
6157

6258
<ImageView
6359
android:id="@+id/detail_thumbs_up_img_view"
6460
android:layout_width="@dimen/video_item_detail_like_image_width"
6561
android:layout_height="@dimen/video_item_detail_like_image_height"
6662
android:layout_below="@id/itemCommentContentView"
63+
android:layout_alignBottom="@+id/replies_button"
6764
android:layout_toEndOf="@+id/itemThumbnailView"
6865
android:contentDescription="@string/detail_likes_img_view_description"
6966
android:src="@drawable/ic_thumb_up" />
7067

7168
<org.schabi.newpipe.views.NewPipeTextView
7269
android:id="@+id/detail_thumbs_up_count_view"
7370
android:layout_width="wrap_content"
74-
android:layout_height="@dimen/video_item_detail_like_image_height"
75-
android:layout_below="@id/itemCommentContentView"
71+
android:layout_height="wrap_content"
72+
android:layout_alignTop="@id/detail_thumbs_up_img_view"
73+
android:layout_alignBottom="@id/detail_thumbs_up_img_view"
7674
android:layout_marginStart="@dimen/video_item_detail_like_margin"
7775
android:layout_toEndOf="@id/detail_thumbs_up_img_view"
76+
android:gravity="center"
7877
android:lines="1"
7978
android:textAppearance="?android:attr/textAppearanceMedium"
8079
android:textSize="@dimen/video_item_detail_likes_text_size"
81-
tools:ignore="RtlHardcoded"
8280
tools:text="12M" />
8381

8482
<ImageView
8583
android:id="@+id/detail_heart_image_view"
8684
android:layout_width="@dimen/video_item_detail_heart_image_size"
8785
android:layout_height="@dimen/video_item_detail_heart_image_size"
88-
android:layout_below="@id/itemCommentContentView"
86+
android:layout_alignTop="@id/detail_thumbs_up_img_view"
87+
android:layout_alignBottom="@id/detail_thumbs_up_img_view"
8988
android:layout_marginStart="@dimen/video_item_detail_heart_margin"
9089
android:layout_toEndOf="@+id/detail_thumbs_up_count_view"
9190
android:contentDescription="@string/detail_heart_img_view_description"
92-
android:src="@drawable/ic_heart"
93-
android:visibility="gone"
94-
tools:visibility="visible" />
91+
android:src="@drawable/ic_heart" />
92+
93+
<Button
94+
android:id="@+id/replies_button"
95+
style="?android:attr/borderlessButtonStyle"
96+
android:layout_width="wrap_content"
97+
android:layout_height="wrap_content"
98+
android:layout_below="@id/itemCommentContentView"
99+
android:layout_alignParentEnd="true"
100+
android:layout_marginStart="@dimen/video_item_detail_heart_margin"
101+
android:minHeight="0dp"
102+
tools:text="543 replies" />
95103

96104
</RelativeLayout>

app/src/main/res/values/strings.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -838,4 +838,8 @@
838838
<string name="share_playlist_with_list">Share URL list</string>
839839
<string name="video_details_list_item">- %1$s: %2$s</string>
840840
<string name="share_playlist_content_details">%1$s\n%2$s</string>
841+
<plurals name="replies">
842+
<item quantity="one">%s reply</item>
843+
<item quantity="other">%s replies</item>
844+
</plurals>
841845
</resources>

0 commit comments

Comments
 (0)