Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
bdaf85a
Added separate routines for requesting local/global related posts
nbradbury Oct 7, 2016
c29a20a
Separate container views for local/global
nbradbury Oct 7, 2016
c23f357
Separate label views for local/global
nbradbury Oct 7, 2016
3dcc500
Reduce font size
nbradbury Oct 7, 2016
bd55106
Show site name in local related posts
nbradbury Oct 7, 2016
6b0fa7b
No divider between related posts
nbradbury Oct 7, 2016
7f593df
Show excerpt rather than byline
nbradbury Oct 7, 2016
3b882be
Show byline only for global
nbradbury Oct 7, 2016
cc835d1
Simplify related posts by only requesting & parsing necessary fields
nbradbury Oct 7, 2016
d65c124
Flattened heirarchy or related post view
nbradbury Oct 7, 2016
9ceb179
First pass at site header for global related posts
nbradbury Oct 7, 2016
acd35fd
Removed featured image
nbradbury Oct 7, 2016
515b817
Moved related posts to a separate view object
nbradbury Oct 7, 2016
de88c29
Re-implemented click listener
nbradbury Oct 7, 2016
40943c8
Removed background & padding, added dividers
nbradbury Oct 7, 2016
20b661c
Margin cleanup, fixed gravatar bug
nbradbury Oct 7, 2016
a7770d8
Added back featured image
nbradbury Oct 7, 2016
0fefbfd
Reversed author name & site name in the header
nbradbury Oct 7, 2016
0ca61a5
Don't show featured image unless there's an excerpt
nbradbury Oct 7, 2016
6b84144
Added RELATED_POST_FIELDS constant
nbradbury Oct 7, 2016
d72b4cf
Moved featured image to the left
nbradbury Oct 7, 2016
b8e579c
Removed unused background drawable
nbradbury Oct 8, 2016
cab591f
Make featured image fit the height of the related post view
nbradbury Oct 8, 2016
7d5e08f
First pass at follow button
nbradbury Oct 8, 2016
1f7b6e9
2nd pass at follow button
nbradbury Oct 8, 2016
fabbe9d
Modify follow button to have no caption
nbradbury Oct 8, 2016
e018e61
Correct bug that caused site header on local related posts
nbradbury Oct 8, 2016
68454e7
Increased featured image width
nbradbury Oct 8, 2016
ed23a6b
Request local related posts first
nbradbury Oct 8, 2016
c6c065f
Use single call to get all related posts at once
nbradbury Oct 8, 2016
64973a5
Split related posts in the action
nbradbury Oct 8, 2016
8e6ac3c
Get featured image from featured_media
nbradbury Oct 8, 2016
7593c9d
Enlarge follow icon when there's no caption
nbradbury Oct 9, 2016
f7b71dc
Ellipsize site header text and limit to single line
nbradbury Oct 9, 2016
49a1032
Merge branch 'feature/reader-full-post-refresh-master' of https://git…
nbradbury Oct 11, 2016
c984492
Merge branch 'develop' of https://github.com/wordpress-mobile/WordPre…
nbradbury Oct 12, 2016
6ec376b
Merge branch 'feature/reader-full-post-refresh-master' of https://git…
nbradbury Oct 12, 2016
db19a10
Merge branch 'feature/reader-full-post-refresh-master' of https://git…
nbradbury Oct 12, 2016
e57687f
Pass JSON post array when creating `ReaderRelatedPostList`
nbradbury Oct 12, 2016
8521709
Always use passed context in `initView`
nbradbury Oct 12, 2016
eb101af
Added `@NonNull` annotation to showRelatedPosts
nbradbury Oct 12, 2016
185662b
Remove all views from the container before checking if passed list is…
nbradbury Oct 12, 2016
7a5a202
Merge branch 'feature/reader-full-post-refresh-master' of https://git…
nbradbury Oct 12, 2016
10be46e
Use context.getResources()
nbradbury Oct 13, 2016
69c0909
Null check ReaderRelatedPost.fromJSON
nbradbury Oct 13, 2016
419aa41
Use getLong
nbradbury Oct 13, 2016
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import android.support.annotation.NonNull;

import org.wordpress.android.models.ReaderPost;
import org.wordpress.android.models.ReaderPostList;
import org.wordpress.android.models.ReaderTag;
import org.wordpress.android.ui.reader.actions.ReaderActions;
import org.wordpress.android.ui.reader.models.ReaderRelatedPostList;
Expand Down Expand Up @@ -119,17 +118,35 @@ public ReaderActions.UpdateResult getResult() {
}

public static class RelatedPostsUpdated {
private final ReaderPost mSourcePost;
private final ReaderRelatedPostList mRelatedPosts;
public RelatedPostsUpdated(@NonNull ReaderPost sourcePost, @NonNull ReaderPostList relatedPosts) {
mSourcePost = sourcePost;
mRelatedPosts = new ReaderRelatedPostList(relatedPosts);
}
public ReaderPost getSourcePost() {
return mSourcePost;
}
public ReaderRelatedPostList getRelatedPosts() {
return mRelatedPosts;
private final long mSourcePostId;
private final long mSourceSiteId;
private final ReaderRelatedPostList mLocalRelatedPosts;
private final ReaderRelatedPostList mGlobalRelatedPosts;
public RelatedPostsUpdated(@NonNull ReaderPost sourcePost,
@NonNull ReaderRelatedPostList localRelatedPosts,
@NonNull ReaderRelatedPostList globalRelatedPosts) {
mSourcePostId = sourcePost.postId;
mSourceSiteId = sourcePost.blogId;
mLocalRelatedPosts = localRelatedPosts;
mGlobalRelatedPosts = globalRelatedPosts;
}
public long getSourcePostId() {
return mSourcePostId;
}
public long getSourceSiteId() {
return mSourceSiteId;
}
public ReaderRelatedPostList getLocalRelatedPosts() {
return mLocalRelatedPosts;
}
public ReaderRelatedPostList getGlobalRelatedPosts() {
return mGlobalRelatedPosts;
}
public boolean hasLocalRelatedPosts() {
return mLocalRelatedPosts.size() > 0;
}
public boolean hasGlobalRelatedPosts() {
return mGlobalRelatedPosts.size() > 0;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,13 @@
import org.wordpress.android.ui.reader.actions.ReaderActions;
import org.wordpress.android.ui.reader.actions.ReaderPostActions;
import org.wordpress.android.ui.reader.models.ReaderBlogIdPostId;
import org.wordpress.android.ui.reader.models.ReaderRelatedPost;
import org.wordpress.android.ui.reader.models.ReaderRelatedPostList;
import org.wordpress.android.ui.reader.utils.ReaderUtils;
import org.wordpress.android.ui.reader.utils.ReaderVideoUtils;
import org.wordpress.android.ui.reader.views.ReaderIconCountView;
import org.wordpress.android.ui.reader.views.ReaderLikingUsersView;
import org.wordpress.android.ui.reader.views.ReaderPostDetailHeaderView;
import org.wordpress.android.ui.reader.views.ReaderRelatedPostsView;
import org.wordpress.android.ui.reader.views.ReaderTagStrip;
import org.wordpress.android.ui.reader.views.ReaderWebView;
import org.wordpress.android.ui.reader.views.ReaderWebView.ReaderCustomViewListener;
Expand All @@ -51,14 +51,11 @@
import org.wordpress.android.util.AppLog;
import org.wordpress.android.util.AppLog.T;
import org.wordpress.android.util.DateTimeUtils;
import org.wordpress.android.util.DisplayUtils;
import org.wordpress.android.util.NetworkUtils;
import org.wordpress.android.util.PhotonUtils;
import org.wordpress.android.util.ToastUtils;
import org.wordpress.android.util.UrlUtils;
import org.wordpress.android.util.helpers.SwipeToRefreshHelper;
import org.wordpress.android.util.widgets.CustomSwipeRefreshLayout;
import org.wordpress.android.widgets.WPNetworkImageView;
import org.wordpress.android.widgets.WPScrollView;
import org.wordpress.android.widgets.WPScrollView.ScrollDirectionListener;

Expand Down Expand Up @@ -413,8 +410,8 @@ private void replacePost(long blogId, long postId) {

// hide views that would show info for the previous post - these will be re-displayed
// with the correct info once the new post loads
getView().findViewById(R.id.container_related_posts).setVisibility(View.GONE);
getView().findViewById(R.id.text_related_posts_label).setVisibility(View.GONE);
getView().findViewById(R.id.related_posts_view_local).setVisibility(View.GONE);
getView().findViewById(R.id.related_posts_view_global).setVisibility(View.GONE);

mLikingUsersView.setVisibility(View.GONE);
mLikingUsersDivider.setVisibility(View.GONE);
Expand All @@ -441,67 +438,43 @@ private void requestRelatedPosts() {
}

/*
* related posts were retrieved, so show them
* related posts were retrieved
*/
@SuppressWarnings("unused")
public void onEventMainThread(ReaderEvents.RelatedPostsUpdated event) {
if (!isAdded() || !hasPost()) return;

// make sure this is for the current post
if (event.getSourcePost().postId == mPost.postId && event.getSourcePost().blogId == mPost.blogId) {
showRelatedPosts(event.getRelatedPosts());
// make sure this event is for the current post
if (event.getSourcePostId() == mPost.postId && event.getSourceSiteId() == mPost.blogId) {
if (event.hasLocalRelatedPosts()) {
showRelatedPosts(event.getLocalRelatedPosts(), false);
}
if (event.hasGlobalRelatedPosts()) {
showRelatedPosts(event.getGlobalRelatedPosts(), true);
}
}
}

private void showRelatedPosts(@NonNull ReaderRelatedPostList relatedPosts) {
// locate the related posts container and remove any existing related post views
ViewGroup container = (ViewGroup) getView().findViewById(R.id.container_related_posts);
container.removeAllViews();

// add a separate view for each related post
LayoutInflater inflater = LayoutInflater.from(getActivity());
int imageSize = DisplayUtils.dpToPx(getActivity(), getResources().getDimensionPixelSize(R.dimen.reader_related_post_image_size));
for (int index = 0; index < relatedPosts.size(); index++) {
final ReaderRelatedPost relatedPost = relatedPosts.get(index);

View postView = inflater.inflate(R.layout.reader_related_post, container, false);
TextView txtTitle = (TextView) postView.findViewById(R.id.text_related_post_title);
TextView txtByline = (TextView) postView.findViewById(R.id.text_related_post_byline);
WPNetworkImageView imgFeatured = (WPNetworkImageView) postView.findViewById(R.id.image_related_post);

txtTitle.setText(relatedPost.getTitle());
txtByline.setText(relatedPost.getByline());

imgFeatured.setVisibility(relatedPost.hasFeaturedImage() ? View.VISIBLE : View.GONE);
if (relatedPost.hasFeaturedImage()) {
String imageUrl = PhotonUtils.getPhotonImageUrl(relatedPost.getFeaturedImage(), imageSize, imageSize);
imgFeatured.setImageUrl(imageUrl, WPNetworkImageView.ImageType.PHOTO_ROUNDED);
imgFeatured.setVisibility(View.VISIBLE);
}

// tapping this view should open the related post detail
postView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showRelatedPostDetail(relatedPost.getBlogId(), relatedPost.getPostId());
}
});

container.addView(postView);

// add a divider below all but the last related post
if (index < relatedPosts.size() - 1) {
View dividerView = inflater.inflate(R.layout.reader_related_post_divider, container, false);
container.addView(dividerView);
/*
* show the passed list of related posts - can be either global (related posts from
* across wp.com) or local (related posts from the same site as the current post)
*/
private void showRelatedPosts(@NonNull ReaderRelatedPostList relatedPosts, boolean isGlobal) {
// different container views for global/local related posts
int id = isGlobal ? R.id.related_posts_view_global : R.id.related_posts_view_local;
ReaderRelatedPostsView relatedPostsView = (ReaderRelatedPostsView) getView().findViewById(id);
relatedPostsView.showRelatedPosts(relatedPosts, mPost.getBlogName(), isGlobal);

// tapping a related posts should open the related post detail
relatedPostsView.setOnRelatedPostClickListener(new ReaderRelatedPostsView.OnRelatedPostClickListener() {
@Override
public void onRelatedPostClick(View v, long siteId, long postId) {
showRelatedPostDetail(siteId, postId);
}
}
});

View label = getView().findViewById(R.id.text_related_posts_label);
if (label.getVisibility() != View.VISIBLE) {
AniUtils.fadeIn(label, AniUtils.Duration.MEDIUM);
}
if (container.getVisibility() != View.VISIBLE) {
AniUtils.fadeIn(container, AniUtils.Duration.MEDIUM);
if (relatedPostsView.getVisibility() != View.VISIBLE) {
AniUtils.fadeIn(relatedPostsView, AniUtils.Duration.MEDIUM);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,18 +11,20 @@
import com.android.volley.toolbox.StringRequest;
import com.wordpress.rest.RestRequest;

import org.json.JSONArray;
import org.json.JSONObject;
import org.wordpress.android.WordPress;
import org.wordpress.android.datasets.ReaderLikeTable;
import org.wordpress.android.datasets.ReaderPostTable;
import org.wordpress.android.datasets.ReaderUserTable;
import org.wordpress.android.models.ReaderPost;
import org.wordpress.android.models.ReaderPostList;
import org.wordpress.android.models.ReaderUserIdList;
import org.wordpress.android.models.ReaderUserList;
import org.wordpress.android.ui.reader.ReaderEvents;
import org.wordpress.android.ui.reader.actions.ReaderActions.UpdateResult;
import org.wordpress.android.ui.reader.actions.ReaderActions.UpdateResultListener;
import org.wordpress.android.ui.reader.models.ReaderRelatedPost;
import org.wordpress.android.ui.reader.models.ReaderRelatedPostList;
import org.wordpress.android.util.AppLog;
import org.wordpress.android.util.AppLog.T;
import org.wordpress.android.util.JSONUtils;
Expand All @@ -40,6 +42,8 @@ public class ReaderPostActions {
private static final String TRACKING_REFERRER = "https://wordpress.com/";
private static final Random mRandom = new Random();

private static final int NUM_RELATED_POSTS_TO_REQUEST = 2;

private ReaderPostActions() {
throw new AssertionError();
}
Expand Down Expand Up @@ -340,7 +344,8 @@ public Map<String, String> getHeaders() throws AuthFailureError {
}

/*
* request posts related to the passed one
* request posts related to the passed one, endpoint returns a combined list of related posts
* posts from across wp.com and related posts from the same site as the passed post
*/
public static void requestRelatedPosts(final ReaderPost sourcePost) {
if (sourcePost == null) return;
Expand All @@ -360,20 +365,36 @@ public void onErrorResponse(VolleyError volleyError) {
}
};

String path = "/read/site/" + sourcePost.blogId + "/post/" + sourcePost.postId + "/related";
String path = "/read/site/" + sourcePost.blogId
+ "/post/" + sourcePost.postId
+ "/related"
+ "?size_local=" + NUM_RELATED_POSTS_TO_REQUEST
+ "&size_global=" + NUM_RELATED_POSTS_TO_REQUEST
+ "&fields=" + ReaderRelatedPost.RELATED_POST_FIELDS;
WordPress.getRestClientUtilsV1_2().get(path, null, null, listener, errorListener);
}

private static void handleRelatedPostsResponse(final ReaderPost sourcePost, final JSONObject jsonObject) {
private static void handleRelatedPostsResponse(final ReaderPost sourcePost,
final JSONObject jsonObject) {
if (jsonObject == null) return;

new Thread() {
@Override
public void run() {
ReaderPostList relatedPosts = ReaderPostList.fromJson(jsonObject);
if (relatedPosts != null && relatedPosts.size() > 0) {
ReaderPostTable.addOrUpdatePosts(null, relatedPosts);
EventBus.getDefault().post(new ReaderEvents.RelatedPostsUpdated(sourcePost, relatedPosts));
JSONArray jsonPosts = jsonObject.optJSONArray("posts");
if (jsonPosts != null) {
ReaderRelatedPostList allRelatedPosts = ReaderRelatedPostList.fromJsonPosts(jsonPosts);
// split into posts from the passed site (local) and from across wp.com (global)
ReaderRelatedPostList localRelatedPosts = new ReaderRelatedPostList();
ReaderRelatedPostList globalRelatedPosts = new ReaderRelatedPostList();
for (ReaderRelatedPost relatedPost : allRelatedPosts) {
if (relatedPost.getSiteId() == sourcePost.blogId) {
localRelatedPosts.add(relatedPost);
} else {
globalRelatedPosts.add(relatedPost);
}
}
EventBus.getDefault().post(new ReaderEvents.RelatedPostsUpdated(sourcePost, localRelatedPosts, globalRelatedPosts));
}
}
}.start();
Expand Down
Loading