mirror of
https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
synced 2024-12-26 02:48:23 +01:00
Click a comment to view the corresponding post.
This commit is contained in:
parent
2f15543f91
commit
fcff7784c9
@ -15,6 +15,8 @@ class CommentData implements Parcelable {
|
|||||||
private String author;
|
private String author;
|
||||||
private String commentTime;
|
private String commentTime;
|
||||||
private String commentContent;
|
private String commentContent;
|
||||||
|
private String linkId;
|
||||||
|
private String subredditName;
|
||||||
private String parentId;
|
private String parentId;
|
||||||
private int score;
|
private int score;
|
||||||
private int voteType;
|
private int voteType;
|
||||||
@ -34,13 +36,15 @@ class CommentData implements Parcelable {
|
|||||||
private boolean loadMoreChildrenFailed;
|
private boolean loadMoreChildrenFailed;
|
||||||
|
|
||||||
CommentData(String id, String fullName, String author, String commentTime, String commentContent,
|
CommentData(String id, String fullName, String author, String commentTime, String commentContent,
|
||||||
String parentId, int score, boolean isSubmitter, String permalink, int depth,
|
String linkId, String subredditName, String parentId, int score, boolean isSubmitter, String permalink,
|
||||||
boolean collapsed, boolean hasReply, boolean scoreHidden) {
|
int depth, boolean collapsed, boolean hasReply, boolean scoreHidden) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.fullName = fullName;
|
this.fullName = fullName;
|
||||||
this.author = author;
|
this.author = author;
|
||||||
this.commentTime = commentTime;
|
this.commentTime = commentTime;
|
||||||
this.commentContent = commentContent;
|
this.commentContent = commentContent;
|
||||||
|
this.linkId = linkId;
|
||||||
|
this.subredditName = subredditName;
|
||||||
this.parentId = parentId;
|
this.parentId = parentId;
|
||||||
this.score = score;
|
this.score = score;
|
||||||
this.isSubmitter = isSubmitter;
|
this.isSubmitter = isSubmitter;
|
||||||
@ -68,6 +72,8 @@ class CommentData implements Parcelable {
|
|||||||
author = in.readString();
|
author = in.readString();
|
||||||
commentTime = in.readString();
|
commentTime = in.readString();
|
||||||
commentContent = in.readString();
|
commentContent = in.readString();
|
||||||
|
linkId = in.readString();
|
||||||
|
subredditName = in.readString();
|
||||||
parentId = in.readString();
|
parentId = in.readString();
|
||||||
score = in.readInt();
|
score = in.readInt();
|
||||||
voteType = in.readInt();
|
voteType = in.readInt();
|
||||||
@ -118,6 +124,14 @@ class CommentData implements Parcelable {
|
|||||||
return commentContent;
|
return commentContent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getLinkId() {
|
||||||
|
return linkId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSubredditName() {
|
||||||
|
return subredditName;
|
||||||
|
}
|
||||||
|
|
||||||
public String getParentId() {
|
public String getParentId() {
|
||||||
return parentId;
|
return parentId;
|
||||||
}
|
}
|
||||||
@ -265,6 +279,8 @@ class CommentData implements Parcelable {
|
|||||||
parcel.writeString(author);
|
parcel.writeString(author);
|
||||||
parcel.writeString(commentTime);
|
parcel.writeString(commentTime);
|
||||||
parcel.writeString(commentContent);
|
parcel.writeString(commentContent);
|
||||||
|
parcel.writeString(linkId);
|
||||||
|
parcel.writeString(subredditName);
|
||||||
parcel.writeString(parentId);
|
parcel.writeString(parentId);
|
||||||
parcel.writeInt(score);
|
parcel.writeInt(score);
|
||||||
parcel.writeInt(voteType);
|
parcel.writeInt(voteType);
|
||||||
|
@ -18,6 +18,8 @@ import androidx.paging.PagedListAdapter;
|
|||||||
import androidx.recyclerview.widget.DiffUtil;
|
import androidx.recyclerview.widget.DiffUtil;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
|
import com.google.android.material.card.MaterialCardView;
|
||||||
|
|
||||||
import CustomView.CustomMarkwonView;
|
import CustomView.CustomMarkwonView;
|
||||||
import butterknife.BindView;
|
import butterknife.BindView;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
@ -27,6 +29,8 @@ class CommentsListingRecyclerViewAdapter extends PagedListAdapter<CommentData, R
|
|||||||
private Context mContext;
|
private Context mContext;
|
||||||
private Retrofit mOauthRetrofit;
|
private Retrofit mOauthRetrofit;
|
||||||
private SharedPreferences mSharedPreferences;
|
private SharedPreferences mSharedPreferences;
|
||||||
|
private int textColorPrimaryDark;
|
||||||
|
private int colorAccent;
|
||||||
|
|
||||||
private static final int VIEW_TYPE_DATA = 0;
|
private static final int VIEW_TYPE_DATA = 0;
|
||||||
private static final int VIEW_TYPE_ERROR = 1;
|
private static final int VIEW_TYPE_ERROR = 1;
|
||||||
@ -46,6 +50,8 @@ class CommentsListingRecyclerViewAdapter extends PagedListAdapter<CommentData, R
|
|||||||
mOauthRetrofit = oauthRetrofit;
|
mOauthRetrofit = oauthRetrofit;
|
||||||
mSharedPreferences = sharedPreferences;
|
mSharedPreferences = sharedPreferences;
|
||||||
mRetryLoadingMoreCallback = retryLoadingMoreCallback;
|
mRetryLoadingMoreCallback = retryLoadingMoreCallback;
|
||||||
|
textColorPrimaryDark = mContext.getResources().getColor(R.color.textColorPrimaryDark);
|
||||||
|
colorAccent = mContext.getResources().getColor(R.color.colorAccent);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final DiffUtil.ItemCallback<CommentData> DIFF_CALLBACK = new DiffUtil.ItemCallback<CommentData>() {
|
private static final DiffUtil.ItemCallback<CommentData> DIFF_CALLBACK = new DiffUtil.ItemCallback<CommentData>() {
|
||||||
@ -80,8 +86,23 @@ class CommentsListingRecyclerViewAdapter extends PagedListAdapter<CommentData, R
|
|||||||
if(holder instanceof DataViewHolder) {
|
if(holder instanceof DataViewHolder) {
|
||||||
CommentData comment = getItem(holder.getAdapterPosition());
|
CommentData comment = getItem(holder.getAdapterPosition());
|
||||||
|
|
||||||
String authorPrefixed = "u/" + comment.getAuthor();
|
if(comment.getAuthor().equals(comment.getSubredditName().substring(2))) {
|
||||||
((DataViewHolder) holder).authorTextView.setText(authorPrefixed);
|
((DataViewHolder) holder).authorTextView.setText("u/" + comment.getAuthor());
|
||||||
|
((DataViewHolder) holder).authorTextView.setTextColor(textColorPrimaryDark);
|
||||||
|
((DataViewHolder) holder).authorTextView.setOnClickListener(view -> {
|
||||||
|
Intent intent = new Intent(mContext, ViewUserDetailActivity.class);
|
||||||
|
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, comment.getAuthor());
|
||||||
|
mContext.startActivity(intent);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
((DataViewHolder) holder).authorTextView.setText("r/" + comment.getSubredditName());
|
||||||
|
((DataViewHolder) holder).authorTextView.setTextColor(colorAccent);
|
||||||
|
((DataViewHolder) holder).authorTextView.setOnClickListener(view -> {
|
||||||
|
Intent intent = new Intent(mContext, ViewSubredditDetailActivity.class);
|
||||||
|
intent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME_KEY, comment.getSubredditName());
|
||||||
|
mContext.startActivity(intent);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
((DataViewHolder) holder).commentTimeTextView.setText(comment.getCommentTime());
|
((DataViewHolder) holder).commentTimeTextView.setText(comment.getCommentTime());
|
||||||
|
|
||||||
@ -144,6 +165,7 @@ class CommentsListingRecyclerViewAdapter extends PagedListAdapter<CommentData, R
|
|||||||
}
|
}
|
||||||
|
|
||||||
class DataViewHolder extends RecyclerView.ViewHolder {
|
class DataViewHolder extends RecyclerView.ViewHolder {
|
||||||
|
@BindView(R.id.card_view_item_comment) MaterialCardView cardView;
|
||||||
@BindView(R.id.vertical_block_item_post_comment) View verticalBlock;
|
@BindView(R.id.vertical_block_item_post_comment) View verticalBlock;
|
||||||
@BindView(R.id.author_text_view_item_post_comment) TextView authorTextView;
|
@BindView(R.id.author_text_view_item_post_comment) TextView authorTextView;
|
||||||
@BindView(R.id.comment_time_text_view_item_post_comment) TextView commentTimeTextView;
|
@BindView(R.id.comment_time_text_view_item_post_comment) TextView commentTimeTextView;
|
||||||
@ -158,14 +180,16 @@ class CommentsListingRecyclerViewAdapter extends PagedListAdapter<CommentData, R
|
|||||||
super(itemView);
|
super(itemView);
|
||||||
ButterKnife.bind(this, itemView);
|
ButterKnife.bind(this, itemView);
|
||||||
|
|
||||||
verticalBlock.setVisibility(View.GONE);
|
cardView.setOnClickListener(view -> {
|
||||||
|
Intent intent = new Intent(mContext, ViewPostDetailActivity.class);
|
||||||
authorTextView.setOnClickListener(view -> {
|
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_ID, getItem(getAdapterPosition()).getLinkId());
|
||||||
Intent intent = new Intent(mContext, ViewUserDetailActivity.class);
|
|
||||||
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, getItem(getAdapterPosition()).getAuthor());
|
|
||||||
mContext.startActivity(intent);
|
mContext.startActivity(intent);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
verticalBlock.setVisibility(View.GONE);
|
||||||
|
|
||||||
|
commentMarkdownView.setOnClickListener(view -> cardView.callOnClick());
|
||||||
|
|
||||||
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) shareButton.getLayoutParams();
|
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) shareButton.getLayoutParams();
|
||||||
lp.addRule(RelativeLayout.ALIGN_PARENT_END);
|
lp.addRule(RelativeLayout.ALIGN_PARENT_END);
|
||||||
lp.setMarginEnd(0);
|
lp.setMarginEnd(0);
|
||||||
|
@ -61,6 +61,7 @@ public class JSONUtils {
|
|||||||
static final String IS_FRIEND_KEY = "is_friend";
|
static final String IS_FRIEND_KEY = "is_friend";
|
||||||
static final String JSON_KEY = "json";
|
static final String JSON_KEY = "json";
|
||||||
static final String PARENT_ID_KEY = "parent_id";
|
static final String PARENT_ID_KEY = "parent_id";
|
||||||
|
static final String LINK_ID_KEY = "link_id";
|
||||||
static final String ERRORS_KEY = "errors";
|
static final String ERRORS_KEY = "errors";
|
||||||
static final String ARGS_KEY = "args";
|
static final String ARGS_KEY = "args";
|
||||||
static final String FIELDS_KEY = "fields";
|
static final String FIELDS_KEY = "fields";
|
||||||
|
@ -215,6 +215,8 @@ class ParseComment {
|
|||||||
String id = singleCommentData.getString(JSONUtils.ID_KEY);
|
String id = singleCommentData.getString(JSONUtils.ID_KEY);
|
||||||
String fullName = singleCommentData.getString(JSONUtils.NAME_KEY);
|
String fullName = singleCommentData.getString(JSONUtils.NAME_KEY);
|
||||||
String author = singleCommentData.getString(JSONUtils.AUTHOR_KEY);
|
String author = singleCommentData.getString(JSONUtils.AUTHOR_KEY);
|
||||||
|
String linkId = singleCommentData.getString(JSONUtils.LINK_ID_KEY).substring(3);
|
||||||
|
String subredditName = singleCommentData.getString(JSONUtils.SUBREDDIT_KEY);
|
||||||
String parentId = singleCommentData.getString(JSONUtils.PARENT_ID_KEY);
|
String parentId = singleCommentData.getString(JSONUtils.PARENT_ID_KEY);
|
||||||
boolean isSubmitter = singleCommentData.getBoolean(JSONUtils.IS_SUBMITTER_KEY);
|
boolean isSubmitter = singleCommentData.getBoolean(JSONUtils.IS_SUBMITTER_KEY);
|
||||||
String commentContent = "";
|
String commentContent = "";
|
||||||
@ -238,7 +240,7 @@ class ParseComment {
|
|||||||
boolean collapsed = singleCommentData.getBoolean(JSONUtils.COLLAPSED_KEY);
|
boolean collapsed = singleCommentData.getBoolean(JSONUtils.COLLAPSED_KEY);
|
||||||
boolean hasReply = !(singleCommentData.get(JSONUtils.REPLIES_KEY) instanceof String);
|
boolean hasReply = !(singleCommentData.get(JSONUtils.REPLIES_KEY) instanceof String);
|
||||||
|
|
||||||
return new CommentData(id, fullName, author, formattedSubmitTime, commentContent, parentId, score,
|
return new CommentData(id, fullName, author, formattedSubmitTime, commentContent, linkId,
|
||||||
isSubmitter, permalink, depth, collapsed, hasReply, scoreHidden);
|
subredditName, parentId, score, isSubmitter, permalink, depth, collapsed, hasReply, scoreHidden);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -155,7 +155,11 @@ class PostDataSource extends PageKeyedDataSource<String, Post> {
|
|||||||
onPostFetchedCallback.hasPost();
|
onPostFetchedCallback.hasPost();
|
||||||
}
|
}
|
||||||
|
|
||||||
callback.onResult(newPosts, null, lastItem);
|
if(lastItem == null || lastItem.equals("") || lastItem.equals("null")) {
|
||||||
|
callback.onResult(newPosts, null, null);
|
||||||
|
} else {
|
||||||
|
callback.onResult(newPosts, null, lastItem);
|
||||||
|
}
|
||||||
initialLoadStateLiveData.postValue(NetworkState.LOADED);
|
initialLoadStateLiveData.postValue(NetworkState.LOADED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -235,7 +239,11 @@ class PostDataSource extends PageKeyedDataSource<String, Post> {
|
|||||||
onPostFetchedCallback.hasPost();
|
onPostFetchedCallback.hasPost();
|
||||||
}
|
}
|
||||||
|
|
||||||
callback.onResult(newPosts, null, lastItem);
|
if(lastItem == null || lastItem.equals("") || lastItem.equals("null")) {
|
||||||
|
callback.onResult(newPosts, null, null);
|
||||||
|
} else {
|
||||||
|
callback.onResult(newPosts, null, lastItem);
|
||||||
|
}
|
||||||
initialLoadStateLiveData.postValue(NetworkState.LOADED);
|
initialLoadStateLiveData.postValue(NetworkState.LOADED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -308,17 +316,18 @@ class PostDataSource extends PageKeyedDataSource<String, Post> {
|
|||||||
new ParsePost.ParsePostsListingListener() {
|
new ParsePost.ParsePostsListingListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onParsePostsListingSuccess(ArrayList<Post> newPosts, String lastItem) {
|
public void onParsePostsListingSuccess(ArrayList<Post> newPosts, String lastItem) {
|
||||||
if(newPosts.size() == 0 && lastItem.equals("null")) {
|
if(newPosts.size() == 0) {
|
||||||
callback.onResult(newPosts, null, lastItem);
|
|
||||||
initialLoadStateLiveData.postValue(NetworkState.LOADED);
|
|
||||||
onPostFetchedCallback.noPost();
|
onPostFetchedCallback.noPost();
|
||||||
} else if(newPosts.size() == 0) {
|
|
||||||
loadUserPostsInitial(callback, lastItem);
|
|
||||||
} else {
|
} else {
|
||||||
callback.onResult(newPosts, null, lastItem);
|
|
||||||
initialLoadStateLiveData.postValue(NetworkState.LOADED);
|
|
||||||
onPostFetchedCallback.hasPost();
|
onPostFetchedCallback.hasPost();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(lastItem == null || lastItem.equals("") || lastItem.equals("null")) {
|
||||||
|
callback.onResult(newPosts, null, null);
|
||||||
|
} else {
|
||||||
|
callback.onResult(newPosts, null, lastItem);
|
||||||
|
}
|
||||||
|
initialLoadStateLiveData.postValue(NetworkState.LOADED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -101,6 +101,9 @@ public interface RedditAPI {
|
|||||||
@GET("/r/{subredditName}/about/rules.json?raw_json=1")
|
@GET("/r/{subredditName}/about/rules.json?raw_json=1")
|
||||||
Call<String> getRules(@Path("subredditName") String subredditName);
|
Call<String> getRules(@Path("subredditName") String subredditName);
|
||||||
|
|
||||||
|
@GET("/comments/{id}.json?raw_json=1")
|
||||||
|
Call<String> getPostAndCommentsById(@Path("id") String id, @HeaderMap Map<String, String> headers);
|
||||||
|
|
||||||
@Multipart
|
@Multipart
|
||||||
@POST(".")
|
@POST(".")
|
||||||
Call<String> uploadMediaToAWS(@PartMap()Map<String, RequestBody> params, @Part() MultipartBody.Part file);
|
Call<String> uploadMediaToAWS(@PartMap()Map<String, RequestBody> params, @Part() MultipartBody.Part file);
|
||||||
|
@ -6,6 +6,11 @@ import android.content.SharedPreferences;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.ImageView;
|
||||||
|
import android.widget.LinearLayout;
|
||||||
|
import android.widget.ProgressBar;
|
||||||
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
@ -31,6 +36,9 @@ import javax.inject.Named;
|
|||||||
|
|
||||||
import butterknife.BindView;
|
import butterknife.BindView;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
|
import retrofit2.Call;
|
||||||
|
import retrofit2.Callback;
|
||||||
|
import retrofit2.Response;
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
|
|
||||||
import static ml.docilealligator.infinityforreddit.CommentActivity.EXTRA_COMMENT_DATA_KEY;
|
import static ml.docilealligator.infinityforreddit.CommentActivity.EXTRA_COMMENT_DATA_KEY;
|
||||||
@ -40,6 +48,7 @@ public class ViewPostDetailActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
static final String EXTRA_POST_DATA = "EPD";
|
static final String EXTRA_POST_DATA = "EPD";
|
||||||
static final String EXTRA_POST_LIST_POSITION = "EPLI";
|
static final String EXTRA_POST_LIST_POSITION = "EPLI";
|
||||||
|
static final String EXTRA_POST_ID = "EPI";
|
||||||
|
|
||||||
private RequestManager mGlide;
|
private RequestManager mGlide;
|
||||||
private Locale mLocale;
|
private Locale mLocale;
|
||||||
@ -70,7 +79,11 @@ public class ViewPostDetailActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
@BindView(R.id.coordinator_layout_view_post_detail) CoordinatorLayout mCoordinatorLayout;
|
@BindView(R.id.coordinator_layout_view_post_detail) CoordinatorLayout mCoordinatorLayout;
|
||||||
@BindView(R.id.toolbar_view_post_detail_activity) Toolbar toolbar;
|
@BindView(R.id.toolbar_view_post_detail_activity) Toolbar toolbar;
|
||||||
|
@BindView(R.id.progress_bar_view_post_detail_activity) ProgressBar mProgressBar;
|
||||||
@BindView(R.id.recycler_view_view_post_detail) RecyclerView mRecyclerView;
|
@BindView(R.id.recycler_view_view_post_detail) RecyclerView mRecyclerView;
|
||||||
|
@BindView(R.id.fetch_post_info_linear_layout_view_post_detail_activity) LinearLayout mFetchPostInfoLinearLayout;
|
||||||
|
@BindView(R.id.fetch_post_info_image_view_view_post_detail_activity) ImageView mFetchPostInfoImageView;
|
||||||
|
@BindView(R.id.fetch_post_info_text_view_view_post_detail_activity) TextView mFetchPostInfoTextView;
|
||||||
|
|
||||||
@Inject @Named("no_oauth")
|
@Inject @Named("no_oauth")
|
||||||
Retrofit mRetrofit;
|
Retrofit mRetrofit;
|
||||||
@ -109,43 +122,48 @@ public class ViewPostDetailActivity extends AppCompatActivity {
|
|||||||
mPost = savedInstanceState.getParcelable(POST_STATE);
|
mPost = savedInstanceState.getParcelable(POST_STATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
mAdapter = new CommentAndPostRecyclerViewAdapter(ViewPostDetailActivity.this, mRetrofit,
|
if(mPost == null) {
|
||||||
mOauthRetrofit, mGlide, mSharedPreferences, mPost,
|
mProgressBar.setVisibility(View.VISIBLE);
|
||||||
mPost.getSubredditNamePrefixed(), mLocale, mLoadSubredditIconAsyncTask,
|
fetchPostAndCommentsById(getIntent().getExtras().getString(EXTRA_POST_ID));
|
||||||
new CommentAndPostRecyclerViewAdapter.CommentRecyclerViewAdapterCallback() {
|
} else {
|
||||||
@Override
|
mAdapter = new CommentAndPostRecyclerViewAdapter(ViewPostDetailActivity.this, mRetrofit,
|
||||||
public void updatePost(Post post) {
|
mOauthRetrofit, mGlide, mSharedPreferences, mPost,
|
||||||
EventBus.getDefault().post(new PostUpdateEventToPostList(mPost, postListPosition));
|
mPost.getSubredditNamePrefixed(), mLocale, mLoadSubredditIconAsyncTask,
|
||||||
}
|
new CommentAndPostRecyclerViewAdapter.CommentRecyclerViewAdapterCallback() {
|
||||||
|
@Override
|
||||||
|
public void updatePost(Post post) {
|
||||||
|
EventBus.getDefault().post(new PostUpdateEventToPostList(mPost, postListPosition));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void retryFetchingMoreComments() {
|
public void retryFetchingMoreComments() {
|
||||||
|
isLoadingMoreChildren = false;
|
||||||
|
loadMoreChildrenSuccess = true;
|
||||||
|
|
||||||
|
fetchMoreComments();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
mRecyclerView.setAdapter(mAdapter);
|
||||||
|
|
||||||
|
if(savedInstanceState != null) {
|
||||||
|
isRefreshing = savedInstanceState.getBoolean(IS_REFRESHING_STATE);
|
||||||
|
if(isRefreshing) {
|
||||||
|
isRefreshing = false;
|
||||||
|
refresh();
|
||||||
|
} else {
|
||||||
|
mAdapter.addComments(savedInstanceState.getParcelableArrayList(COMMENTS_STATE),
|
||||||
|
savedInstanceState.getBoolean(HAS_MORE_CHILDREN_STATE));
|
||||||
|
isLoadingMoreChildren = savedInstanceState.getBoolean(IS_LOADING_MORE_CHILDREN_STATE);
|
||||||
|
children = savedInstanceState.getStringArrayList(MORE_CHILDREN_LIST_STATE);
|
||||||
|
mChildrenStartingIndex = savedInstanceState.getInt(MORE_CHILDREN_STARTING_INDEX_STATE);
|
||||||
|
if(isLoadingMoreChildren) {
|
||||||
isLoadingMoreChildren = false;
|
isLoadingMoreChildren = false;
|
||||||
loadMoreChildrenSuccess = true;
|
|
||||||
|
|
||||||
fetchMoreComments();
|
fetchMoreComments();
|
||||||
}
|
}
|
||||||
});
|
|
||||||
mRecyclerView.setAdapter(mAdapter);
|
|
||||||
|
|
||||||
if(savedInstanceState != null) {
|
|
||||||
isRefreshing = savedInstanceState.getBoolean(IS_REFRESHING_STATE);
|
|
||||||
if(isRefreshing) {
|
|
||||||
isRefreshing = false;
|
|
||||||
refresh();
|
|
||||||
} else {
|
|
||||||
mAdapter.addComments(savedInstanceState.getParcelableArrayList(COMMENTS_STATE),
|
|
||||||
savedInstanceState.getBoolean(HAS_MORE_CHILDREN_STATE));
|
|
||||||
isLoadingMoreChildren = savedInstanceState.getBoolean(IS_LOADING_MORE_CHILDREN_STATE);
|
|
||||||
children = savedInstanceState.getStringArrayList(MORE_CHILDREN_LIST_STATE);
|
|
||||||
mChildrenStartingIndex = savedInstanceState.getInt(MORE_CHILDREN_STARTING_INDEX_STATE);
|
|
||||||
if(isLoadingMoreChildren) {
|
|
||||||
isLoadingMoreChildren = false;
|
|
||||||
fetchMoreComments();
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
fetchComment();
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
fetchComment();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(getIntent().hasExtra(EXTRA_POST_LIST_POSITION)) {
|
if(getIntent().hasExtra(EXTRA_POST_LIST_POSITION)) {
|
||||||
@ -153,6 +171,98 @@ public class ViewPostDetailActivity extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void fetchPostAndCommentsById(String subredditId) {
|
||||||
|
mFetchPostInfoLinearLayout.setVisibility(View.GONE);
|
||||||
|
mGlide.clear(mFetchPostInfoImageView);
|
||||||
|
|
||||||
|
String accessToken = getSharedPreferences(SharedPreferencesUtils.AUTH_CODE_FILE_KEY, Context.MODE_PRIVATE)
|
||||||
|
.getString(SharedPreferencesUtils.ACCESS_TOKEN_KEY, "");
|
||||||
|
|
||||||
|
RedditAPI api = mOauthRetrofit.create(RedditAPI.class);
|
||||||
|
Call<String> postAndComments = api.getPostAndCommentsById(subredditId, RedditUtils.getOAuthHeader(accessToken));
|
||||||
|
postAndComments.enqueue(new Callback<String>() {
|
||||||
|
@Override
|
||||||
|
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
||||||
|
mProgressBar.setVisibility(View.GONE);
|
||||||
|
|
||||||
|
if(response.isSuccessful()) {
|
||||||
|
ParsePost.parsePost(response.body(), mLocale, new ParsePost.ParsePostListener() {
|
||||||
|
@Override
|
||||||
|
public void onParsePostSuccess(Post post) {
|
||||||
|
mPost = post;
|
||||||
|
|
||||||
|
mAdapter = new CommentAndPostRecyclerViewAdapter(ViewPostDetailActivity.this, mRetrofit,
|
||||||
|
mOauthRetrofit, mGlide, mSharedPreferences, mPost,
|
||||||
|
mPost.getSubredditNamePrefixed(), mLocale, mLoadSubredditIconAsyncTask,
|
||||||
|
new CommentAndPostRecyclerViewAdapter.CommentRecyclerViewAdapterCallback() {
|
||||||
|
@Override
|
||||||
|
public void updatePost(Post post) {
|
||||||
|
EventBus.getDefault().post(new PostUpdateEventToPostList(mPost, postListPosition));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void retryFetchingMoreComments() {
|
||||||
|
isLoadingMoreChildren = false;
|
||||||
|
loadMoreChildrenSuccess = true;
|
||||||
|
|
||||||
|
fetchMoreComments();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
mRecyclerView.setAdapter(mAdapter);
|
||||||
|
|
||||||
|
ParseComment.parseComment(response.body(), new ArrayList<>(), mLocale,
|
||||||
|
new ParseComment.ParseCommentListener() {
|
||||||
|
@Override
|
||||||
|
public void onParseCommentSuccess(ArrayList<CommentData> expandedComments, String parentId, ArrayList<String> moreChildrenFullnames) {
|
||||||
|
ViewPostDetailActivity.this.children = moreChildrenFullnames;
|
||||||
|
|
||||||
|
hasMoreChildren = children.size() != 0;
|
||||||
|
mAdapter.addComments(expandedComments, hasMoreChildren);
|
||||||
|
|
||||||
|
if(children.size() > 0) {
|
||||||
|
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
||||||
|
@Override
|
||||||
|
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
|
||||||
|
super.onScrolled(recyclerView, dx, dy);
|
||||||
|
|
||||||
|
if(!isLoadingMoreChildren && loadMoreChildrenSuccess) {
|
||||||
|
int visibleItemCount = mLinearLayoutManager.getChildCount();
|
||||||
|
int totalItemCount = mLinearLayoutManager.getItemCount();
|
||||||
|
int firstVisibleItemPosition = mLinearLayoutManager.findFirstVisibleItemPosition();
|
||||||
|
|
||||||
|
if ((visibleItemCount + firstVisibleItemPosition >= totalItemCount) && firstVisibleItemPosition >= 0) {
|
||||||
|
fetchMoreComments();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onParseCommentFailed() {
|
||||||
|
mAdapter.initiallyLoadCommentsFailed();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onParsePostFail() {
|
||||||
|
showErrorView(subredditId);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
showErrorView(subredditId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
|
||||||
|
showErrorView(subredditId);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private void fetchComment() {
|
private void fetchComment() {
|
||||||
mAdapter.initiallyLoading();
|
mAdapter.initiallyLoading();
|
||||||
|
|
||||||
@ -224,6 +334,9 @@ public class ViewPostDetailActivity extends AppCompatActivity {
|
|||||||
isRefreshing = true;
|
isRefreshing = true;
|
||||||
mChildrenStartingIndex = 0;
|
mChildrenStartingIndex = 0;
|
||||||
|
|
||||||
|
mFetchPostInfoLinearLayout.setVisibility(View.GONE);
|
||||||
|
mGlide.clear(mFetchPostInfoImageView);
|
||||||
|
|
||||||
fetchComment();
|
fetchComment();
|
||||||
|
|
||||||
String accessToken = getSharedPreferences(SharedPreferencesUtils.AUTH_CODE_FILE_KEY, Context.MODE_PRIVATE)
|
String accessToken = getSharedPreferences(SharedPreferencesUtils.AUTH_CODE_FILE_KEY, Context.MODE_PRIVATE)
|
||||||
@ -247,6 +360,14 @@ public class ViewPostDetailActivity extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void showErrorView(String subredditId) {
|
||||||
|
mProgressBar.setVisibility(View.GONE);
|
||||||
|
mFetchPostInfoLinearLayout.setVisibility(View.VISIBLE);
|
||||||
|
mFetchPostInfoLinearLayout.setOnClickListener(view -> fetchPostAndCommentsById(subredditId));
|
||||||
|
mFetchPostInfoTextView.setText(R.string.error_loading_post);
|
||||||
|
mGlide.load(R.drawable.load_post_error_indicator).into(mFetchPostInfoImageView);
|
||||||
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void onPostUpdateEvent(PostUpdateEventToDetailActivity event) {
|
public void onPostUpdateEvent(PostUpdateEventToDetailActivity event) {
|
||||||
if(mPost.getId().equals(event.postId)) {
|
if(mPost.getId().equals(event.postId)) {
|
||||||
|
@ -21,10 +21,38 @@
|
|||||||
|
|
||||||
</com.google.android.material.appbar.AppBarLayout>
|
</com.google.android.material.appbar.AppBarLayout>
|
||||||
|
|
||||||
|
<ProgressBar
|
||||||
|
android:id="@+id/progress_bar_view_post_detail_activity"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center" />
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
android:id="@+id/recycler_view_view_post_detail"
|
android:id="@+id/recycler_view_view_post_detail"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
|
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/fetch_post_info_linear_layout_view_post_detail_activity"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:gravity="center"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:visibility="gone">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/fetch_post_info_image_view_view_post_detail_activity"
|
||||||
|
android:layout_width="150dp"
|
||||||
|
android:layout_height="wrap_content" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/fetch_post_info_text_view_view_post_detail_activity"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:gravity="center" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
@ -10,7 +10,7 @@
|
|||||||
<androidx.viewpager.widget.ViewPager
|
<androidx.viewpager.widget.ViewPager
|
||||||
android:id="@+id/view_pager_view_user_detail_activity"
|
android:id="@+id/view_pager_view_user_detail_activity"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="wrap_content"
|
||||||
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
|
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
|
||||||
|
|
||||||
<com.google.android.material.appbar.AppBarLayout
|
<com.google.android.material.appbar.AppBarLayout
|
||||||
@ -114,6 +114,4 @@
|
|||||||
|
|
||||||
</com.google.android.material.appbar.AppBarLayout>
|
</com.google.android.material.appbar.AppBarLayout>
|
||||||
|
|
||||||
<!--<include layout="@layout/content_view_user_detail" />-->
|
|
||||||
|
|
||||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
@ -1,5 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android"
|
<com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:id="@+id/card_view_item_comment"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
@ -131,4 +131,6 @@
|
|||||||
|
|
||||||
<string name="search_in">Search in</string>
|
<string name="search_in">Search in</string>
|
||||||
<string name="all_subreddits">All subreddits</string>
|
<string name="all_subreddits">All subreddits</string>
|
||||||
|
|
||||||
|
<string name="error_loading_post">Error loading this post.\nTap to retry.</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
Loading…
Reference in New Issue
Block a user