aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Ning <chineseperson5@gmail.com>2018-08-30 06:08:02 +0000
committerAlex Ning <chineseperson5@gmail.com>2018-08-30 06:08:02 +0000
commit4364e20e36aba6de96d25b237cac7c178a5e1980 (patch)
tree1738f18c8dcafcc3aff1a5b302eaa6febdb298b1
parent3fa625742862f55e50799ec346fa35e81aedcd20 (diff)
downloadinfinity-for-reddit-4364e20e36aba6de96d25b237cac7c178a5e1980.tar
infinity-for-reddit-4364e20e36aba6de96d25b237cac7c178a5e1980.tar.gz
infinity-for-reddit-4364e20e36aba6de96d25b237cac7c178a5e1980.tar.bz2
infinity-for-reddit-4364e20e36aba6de96d25b237cac7c178a5e1980.tar.lz
infinity-for-reddit-4364e20e36aba6de96d25b237cac7c178a5e1980.tar.xz
infinity-for-reddit-4364e20e36aba6de96d25b237cac7c178a5e1980.tar.zst
infinity-for-reddit-4364e20e36aba6de96d25b237cac7c178a5e1980.zip
Display a custom error view when there is something wrong when loading best posts. Probably fix a bug that holder.getAdapterPosition() returns -1 when loading subreddit icons in the RecyclerView of PostFragment. Subreddit banners are parsed correctly in ParseSubscribedThing. Check if the api call is successful in onResponse. Rewrite some methods.
Diffstat (limited to '')
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/FetchComment.java7
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/FetchSubredditData.java7
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/FetchSubscribedThing.java69
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/FetchUserInfo.java27
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/ParseSubscribedThing.java2
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/PostFragment.java80
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/PostRecyclerViewAdapter.java61
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/RedditUtils.java4
-rw-r--r--app/src/main/res/drawable/load_post_error_indicator.pngbin0 -> 60464 bytes
-rw-r--r--app/src/main/res/layout/activity_view_subreddit_detail.xml3
-rw-r--r--app/src/main/res/layout/fragment_post.xml22
-rw-r--r--app/src/main/res/values/strings.xml2
12 files changed, 173 insertions, 111 deletions
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchComment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchComment.java
index 20a0d444..eb98a605 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchComment.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchComment.java
@@ -27,7 +27,12 @@ class FetchComment {
comments.enqueue(new Callback<String>() {
@Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
- fetchCommentListener.onFetchCommentSuccess(response.body());
+ if(response.isSuccessful()) {
+ fetchCommentListener.onFetchCommentSuccess(response.body());
+ } else {
+ Log.i("call failed", response.message());
+ fetchCommentListener.onFetchCommentFail();
+ }
}
@Override
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchSubredditData.java b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchSubredditData.java
index 5baaede9..105a7679 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchSubredditData.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchSubredditData.java
@@ -27,7 +27,12 @@ class FetchSubredditData {
subredditData.enqueue(new Callback<String>() {
@Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
- fetchSubredditDataListener.onFetchSubredditDataSuccess(response.body());
+ if(response.isSuccessful()) {
+ fetchSubredditDataListener.onFetchSubredditDataSuccess(response.body());
+ } else {
+ Log.i("call failed", response.message());
+ fetchSubredditDataListener.onFetchSubredditDataFail();
+ }
}
@Override
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchSubscribedThing.java b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchSubscribedThing.java
index 03e30f5e..c5b6b6f5 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchSubscribedThing.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchSubscribedThing.java
@@ -44,45 +44,52 @@ class FetchSubscribedThing {
subredditDataCall.enqueue(new Callback<String>() {
@Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
- ParseSubscribedThing.parseSubscribedSubreddits(response.body(), subscribedSubredditData,
- subscribedUserData, subredditData,
- new ParseSubscribedThing.ParseSubscribedSubredditsListener() {
+ if(response.isSuccessful()) {
+ ParseSubscribedThing.parseSubscribedSubreddits(response.body(), subscribedSubredditData,
+ subscribedUserData, subredditData,
+ new ParseSubscribedThing.ParseSubscribedSubredditsListener() {
- @Override
- public void onParseSubscribedSubredditsSuccess(ArrayList<SubscribedSubredditData> subscribedSubredditData,
- ArrayList<SubscribedUserData> subscribedUserData,
- ArrayList<SubredditData> subredditData,
- String lastItem) {
- if(lastItem.equals("null")) {
- fetchSubscribedThingListener.onFetchSubscribedThingSuccess(
- subscribedSubredditData, subscribedUserData, subredditData);
- } else {
- fetchSubscribedThing(context, lastItem, subscribedSubredditData,
- subscribedUserData, subredditData,
- fetchSubscribedThingListener, refreshTime);
+ @Override
+ public void onParseSubscribedSubredditsSuccess(ArrayList<SubscribedSubredditData> subscribedSubredditData,
+ ArrayList<SubscribedUserData> subscribedUserData,
+ ArrayList<SubredditData> subredditData,
+ String lastItem) {
+ if(lastItem.equals("null")) {
+ fetchSubscribedThingListener.onFetchSubscribedThingSuccess(
+ subscribedSubredditData, subscribedUserData, subredditData);
+ } else {
+ fetchSubscribedThing(context, lastItem, subscribedSubredditData,
+ subscribedUserData, subredditData,
+ fetchSubscribedThingListener, refreshTime);
+ }
}
- }
- @Override
- public void onParseSubscribedSubredditsFail() {
- fetchSubscribedThingListener.onFetchSubscribedThingFail();
- }
- });
+ @Override
+ public void onParseSubscribedSubredditsFail() {
+ fetchSubscribedThingListener.onFetchSubscribedThingFail();
+ }
+ });
+ } else if(response.code() == 401) {
+ RefreshAccessToken.refreshAccessToken(context, new RefreshAccessToken.RefreshAccessTokenListener() {
+ @Override
+ public void onRefreshAccessTokenSuccess() {
+ fetchSubscribedThing(context, lastItem, subscribedSubredditData,
+ subscribedUserData, subredditData, fetchSubscribedThingListener, refreshTime - 1);
+ }
+
+ @Override
+ public void onRefreshAccessTokenFail() {}
+ });
+ } else {
+ Log.i("call failed", response.message());
+ fetchSubscribedThingListener.onFetchSubscribedThingFail();
+ }
}
@Override
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
Log.i("call failed", t.getMessage());
- RefreshAccessToken.refreshAccessToken(context, new RefreshAccessToken.RefreshAccessTokenListener() {
- @Override
- public void onRefreshAccessTokenSuccess() {
- fetchSubscribedThing(context, lastItem, subscribedSubredditData,
- subscribedUserData, subredditData, fetchSubscribedThingListener, refreshTime);
- }
-
- @Override
- public void onRefreshAccessTokenFail() {}
- });
+ fetchSubscribedThingListener.onFetchSubscribedThingFail();
}
});
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchUserInfo.java b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchUserInfo.java
index 45957308..9a1a8b4d 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchUserInfo.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchUserInfo.java
@@ -34,21 +34,28 @@ class FetchUserInfo {
userInfo.enqueue(new Callback<String>() {
@Override
public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
- fetchUserInfoListener.onFetchUserInfoSuccess(response.body());
+ if(response.isSuccessful()) {
+ fetchUserInfoListener.onFetchUserInfoSuccess(response.body());
+ } else if(response.code() == 401){
+ RefreshAccessToken.refreshAccessToken(context, new RefreshAccessToken.RefreshAccessTokenListener() {
+ @Override
+ public void onRefreshAccessTokenSuccess() {
+ fetchUserInfo(context, fetchUserInfoListener, refreshTime - 1);
+ }
+
+ @Override
+ public void onRefreshAccessTokenFail() {}
+ });
+ } else {
+ Log.i("call failed", response.message());
+ fetchUserInfoListener.onFetchUserInfoFail();
+ }
}
@Override
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
Log.i("call failed", t.getMessage());
- RefreshAccessToken.refreshAccessToken(context, new RefreshAccessToken.RefreshAccessTokenListener() {
- @Override
- public void onRefreshAccessTokenSuccess() {
- fetchUserInfo(context, fetchUserInfoListener, refreshTime - 1);
- }
-
- @Override
- public void onRefreshAccessTokenFail() {}
- });
+ fetchUserInfoListener.onFetchUserInfoFail();
}
});
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/ParseSubscribedThing.java b/app/src/main/java/ml/docilealligator/infinityforreddit/ParseSubscribedThing.java
index d4cc4030..2cddfc2f 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/ParseSubscribedThing.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/ParseSubscribedThing.java
@@ -65,7 +65,7 @@ class ParseSubscribedThing {
for(int i = 0; i < children.length(); i++) {
JSONObject data = children.getJSONObject(i).getJSONObject(JSONUtils.DATA_KEY);
String name = data.getString(JSONUtils.DISPLAY_NAME);
- String bannerImageUrl = data.getString(JSONUtils.BANNER_IMG_KEY);
+ String bannerImageUrl = data.getString(JSONUtils.BANNER_BACKGROUND_IMAGE_KEY);
if(bannerImageUrl.equals("") || bannerImageUrl.equals("null")) {
bannerImageUrl= data.getString(JSONUtils.BANNER_IMG_KEY);
if(bannerImageUrl.equals("null")) {
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/PostFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/PostFragment.java
index dc262abe..7d44eb31 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/PostFragment.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/PostFragment.java
@@ -16,8 +16,11 @@ import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
import android.widget.ProgressBar;
-import android.widget.Toast;
+
+import com.bumptech.glide.Glide;
import java.util.ArrayList;
@@ -43,6 +46,8 @@ public class PostFragment extends Fragment {
private String mLastItem;
private PaginationSynchronizer mPaginationSynchronizer;
private PostRecyclerViewAdapter mAdapter;
+ private LinearLayout mFetchPostErrorLinearLayout;
+ private ImageView mFetchPostErrorImageView;
private boolean mIsBestPost;
private String mSubredditName;
@@ -73,7 +78,7 @@ public class PostFragment extends Fragment {
if(mIsBestPost) {
fetchBestPost(1);
} else {
- fetchPost(mSubredditName, 1);
+ fetchPost();
}
}
}
@@ -108,6 +113,8 @@ public class PostFragment extends Fragment {
mLinearLayoutManager = new LinearLayoutManager(getActivity());
mPostRecyclerView.setLayoutManager(mLinearLayoutManager);
mProgressBar = rootView.findViewById(R.id.progress_bar_post_fragment);
+ mFetchPostErrorLinearLayout = rootView.findViewById(R.id.fetch_post_error_linear_layout_post_fragment);
+ mFetchPostErrorImageView = rootView.findViewById(R.id.fetch_post_error_image_view_post_fragment);
/*FloatingActionButton fab = rootView.findViewById(R.id.fab_post_fragment);
fab.setOnClickListener(new View.OnClickListener() {
@Override
@@ -120,6 +127,17 @@ public class PostFragment extends Fragment {
mIsBestPost = getArguments().getBoolean(IS_BEST_POST_KEY);
if(!mIsBestPost) {
mSubredditName = getArguments().getString(SUBREDDIT_NAME_KEY);
+ } else {
+ mFetchPostErrorLinearLayout.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ if(mIsBestPost) {
+ fetchBestPost(1);
+ } else {
+ fetchPost();
+ }
+ }
+ });
}
if(savedInstanceState != null && savedInstanceState.getParcelable(paginationSynchronizerState) != null) {
@@ -129,7 +147,7 @@ public class PostFragment extends Fragment {
if(mIsBestPost) {
fetchBestPost(1);
} else {
- fetchPost(mSubredditName, 1);
+ fetchPost();
}
}
@@ -146,10 +164,11 @@ public class PostFragment extends Fragment {
private void fetchBestPost(final int refreshTime) {
if(refreshTime < 0) {
- showErrorSnackbar();
+ showErrorView();
return;
}
+ mFetchPostErrorLinearLayout.setVisibility(View.GONE);
mProgressBar.setVisibility(View.VISIBLE);
Retrofit retrofit = new Retrofit.Builder()
@@ -166,7 +185,6 @@ public class PostFragment extends Fragment {
@Override
public void onResponse(Call<String> call, retrofit2.Response<String> response) {
if(getActivity() != null) {
-
if(response.isSuccessful()) {
ClipboardManager clipboard = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("response", response.body());
@@ -191,9 +209,8 @@ public class PostFragment extends Fragment {
@Override
public void onParsePostFail() {
- Toast.makeText(getActivity(), "Error parsing data", Toast.LENGTH_SHORT).show();
Log.i("Post fetch error", "Error parsing data");
- mProgressBar.setVisibility(View.GONE);
+ showErrorView();
}
});
} else if(response.code() == 401) {
@@ -211,24 +228,20 @@ public class PostFragment extends Fragment {
});
} else {
Log.i("Post fetch error", response.message());
- showErrorSnackbar();
+ showErrorView();
}
}
}
@Override
public void onFailure(Call<String> call, Throwable t) {
- showErrorSnackbar();
+ showErrorView();
}
});
}
- private void fetchPost(final String queryPostUrl, final int refreshTime) {
- if(refreshTime < 0) {
- showErrorSnackbar();
- return;
- }
-
+ private void fetchPost() {
+ mFetchPostErrorLinearLayout.setVisibility(View.GONE);
mProgressBar.setVisibility(View.VISIBLE);
Retrofit retrofit = new Retrofit.Builder()
@@ -242,7 +255,6 @@ public class PostFragment extends Fragment {
@Override
public void onResponse(Call<String> call, retrofit2.Response<String> response) {
if(getActivity() != null) {
- Log.i("response_code", Integer.toString(response.code()));
if(response.isSuccessful()) {
ClipboardManager clipboard = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("response", response.body());
@@ -267,38 +279,42 @@ public class PostFragment extends Fragment {
@Override
public void onParsePostFail() {
- Toast.makeText(getActivity(), "Error parsing data", Toast.LENGTH_SHORT).show();
Log.i("Post fetch error", "Error parsing data");
- mProgressBar.setVisibility(View.GONE);
+ showErrorView();
}
});
} else {
Log.i("Post fetch error", response.message());
- showErrorSnackbar();
+ showErrorView();
}
}
}
@Override
public void onFailure(Call<String> call, Throwable t) {
- showErrorSnackbar();
+ showErrorView();
}
});
}
- private void showErrorSnackbar() {
+ private void showErrorView() {
mProgressBar.setVisibility(View.GONE);
- Snackbar snackbar = Snackbar.make(mCoordinatorLayout, "Error getting post", Snackbar.LENGTH_INDEFINITE);
- snackbar.setAction(R.string.retry, new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- if(mIsBestPost) {
- fetchBestPost(1);
- } else {
- fetchPost(mSubredditName, 1);
+ if(mIsBestPost) {
+ mFetchPostErrorLinearLayout.setVisibility(View.VISIBLE);
+ Glide.with(this).load(R.drawable.load_post_error_indicator).into(mFetchPostErrorImageView);
+ } else {
+ Snackbar snackbar = Snackbar.make(mCoordinatorLayout, "Error getting post", Snackbar.LENGTH_INDEFINITE);
+ snackbar.setAction(R.string.retry, new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ if (mIsBestPost) {
+ fetchBestPost(1);
+ } else {
+ fetchPost();
+ }
}
- }
- });
- snackbar.show();
+ });
+ snackbar.show();
+ }
}
} \ No newline at end of file
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/PostRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/PostRecyclerViewAdapter.java
index f0021f33..ac7a09b4 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/PostRecyclerViewAdapter.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/PostRecyclerViewAdapter.java
@@ -80,21 +80,22 @@ class PostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
}
@Override
- public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, int position) {
+ public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, final int position) {
if(holder instanceof DataViewHolder) {
if(mPostData.get(position) == null) {
Log.i("is null", Integer.toString(position));
} else {
- final String id = mPostData.get(holder.getAdapterPosition()).getFullName();
- final String subredditName = mPostData.get(holder.getAdapterPosition()).getSubredditNamePrefixed();
- final String postTime = mPostData.get(holder.getAdapterPosition()).getPostTime();
- final String title = mPostData.get(holder.getAdapterPosition()).getTitle();
- final String permalink = mPostData.get(holder.getAdapterPosition()).getPermalink();
- int voteType = mPostData.get(holder.getAdapterPosition()).getVoteType();
- int gilded = mPostData.get(holder.getAdapterPosition()).getGilded();
- boolean nsfw = mPostData.get(holder.getAdapterPosition()).isNSFW();
-
- if(mPostData.get(holder.getAdapterPosition()).getSubredditIconUrl() == null) {
+ final int adapterPosition = holder.getAdapterPosition();
+ final String id = mPostData.get(adapterPosition).getFullName();
+ final String subredditName = mPostData.get(adapterPosition).getSubredditNamePrefixed();
+ final String postTime = mPostData.get(adapterPosition).getPostTime();
+ final String title = mPostData.get(adapterPosition).getTitle();
+ final String permalink = mPostData.get(adapterPosition).getPermalink();
+ int voteType = mPostData.get(adapterPosition).getVoteType();
+ int gilded = mPostData.get(adapterPosition).getGilded();
+ boolean nsfw = mPostData.get(adapterPosition).isNSFW();
+
+ if(mPostData.get(adapterPosition).getSubredditIconUrl() == null) {
new LoadSubredditIconAsyncTask(subredditDao, subredditName,
new LoadSubredditIconAsyncTask.LoadSubredditIconAsyncTaskListener() {
@Override
@@ -107,7 +108,7 @@ class PostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
.into(((DataViewHolder) holder).subredditIconCircleImageView);
}
- mPostData.get(holder.getAdapterPosition()).setSubredditIconUrl(iconImageUrl);
+ mPostData.get(adapterPosition).setSubredditIconUrl(iconImageUrl);
}
}).execute();
} else if(!mPostData.get(position).getSubredditIconUrl().equals("")) {
@@ -123,7 +124,7 @@ class PostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
canStartActivity = false;
Intent intent = new Intent(mContext, ViewPostDetailActivity.class);
intent.putExtra(ViewPostDetailActivity.EXTRA_TITLE, title);
- intent.putExtra(ViewPostDetailActivity.EXTRA_POST_DATA, mPostData.get(holder.getAdapterPosition()));
+ intent.putExtra(ViewPostDetailActivity.EXTRA_POST_DATA, mPostData.get(adapterPosition));
mContext.startActivity(intent);
}
}
@@ -134,7 +135,7 @@ class PostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
public void onClick(View view) {
Intent intent = new Intent(mContext, ViewSubredditDetailActivity.class);
intent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME_KEY,
- mPostData.get(holder.getAdapterPosition()).getSubredditNamePrefixed().substring(2));
+ mPostData.get(adapterPosition).getSubredditNamePrefixed().substring(2));
}
});
@@ -259,10 +260,10 @@ class PostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
Intent intent = new Intent(mContext, ViewVideoActivity.class);
intent.setData(gifVideoUri);
intent.putExtra(ViewVideoActivity.TITLE_KEY, title);
- intent.putExtra(ViewVideoActivity.IS_DASH_VIDEO_KEY, mPostData.get(holder.getAdapterPosition()).isDashVideo());
- intent.putExtra(ViewVideoActivity.IS_DOWNLOADABLE_KEY, mPostData.get(holder.getAdapterPosition()).isDownloadableGifOrVideo());
- if(mPostData.get(holder.getAdapterPosition()).isDownloadableGifOrVideo()) {
- intent.putExtra(ViewVideoActivity.DOWNLOAD_URL_KEY, mPostData.get(holder.getAdapterPosition()).getGifOrVideoDownloadUrl());
+ intent.putExtra(ViewVideoActivity.IS_DASH_VIDEO_KEY, mPostData.get(adapterPosition).isDashVideo());
+ intent.putExtra(ViewVideoActivity.IS_DOWNLOADABLE_KEY, mPostData.get(adapterPosition).isDownloadableGifOrVideo());
+ if(mPostData.get(adapterPosition).isDownloadableGifOrVideo()) {
+ intent.putExtra(ViewVideoActivity.DOWNLOAD_URL_KEY, mPostData.get(adapterPosition).getGifOrVideoDownloadUrl());
intent.putExtra(ViewVideoActivity.SUBREDDIT_KEY, subredditName);
intent.putExtra(ViewVideoActivity.ID_KEY, id);
}
@@ -295,10 +296,10 @@ class PostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
Intent intent = new Intent(mContext, ViewVideoActivity.class);
intent.setData(videoUri);
intent.putExtra(ViewVideoActivity.TITLE_KEY, title);
- intent.putExtra(ViewVideoActivity.IS_DASH_VIDEO_KEY, mPostData.get(holder.getAdapterPosition()).isDashVideo());
- intent.putExtra(ViewVideoActivity.IS_DOWNLOADABLE_KEY, mPostData.get(holder.getAdapterPosition()).isDownloadableGifOrVideo());
- if(mPostData.get(holder.getAdapterPosition()).isDownloadableGifOrVideo()) {
- intent.putExtra(ViewVideoActivity.DOWNLOAD_URL_KEY, mPostData.get(holder.getAdapterPosition()).getGifOrVideoDownloadUrl());
+ intent.putExtra(ViewVideoActivity.IS_DASH_VIDEO_KEY, mPostData.get(adapterPosition).isDashVideo());
+ intent.putExtra(ViewVideoActivity.IS_DOWNLOADABLE_KEY, mPostData.get(adapterPosition).isDownloadableGifOrVideo());
+ if(mPostData.get(adapterPosition).isDownloadableGifOrVideo()) {
+ intent.putExtra(ViewVideoActivity.DOWNLOAD_URL_KEY, mPostData.get(adapterPosition).getGifOrVideoDownloadUrl());
intent.putExtra(ViewVideoActivity.SUBREDDIT_KEY, subredditName);
intent.putExtra(ViewVideoActivity.ID_KEY, id);
}
@@ -337,9 +338,9 @@ class PostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
if (((DataViewHolder) holder).upvoteButton.getColorFilter() == null) {
((DataViewHolder) holder).upvoteButton.setColorFilter(ContextCompat.getColor(mContext, R.color.colorPrimary), android.graphics.PorterDuff.Mode.SRC_IN);
if(isDownvotedBefore) {
- ((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mPostData.get(holder.getAdapterPosition()).getScore() + 2));
+ ((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mPostData.get(adapterPosition).getScore() + 2));
} else {
- ((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mPostData.get(holder.getAdapterPosition()).getScore() + 1));
+ ((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mPostData.get(adapterPosition).getScore() + 1));
}
VoteThing.voteThing(mContext, new VoteThing.VoteThingListener() {
@@ -364,7 +365,7 @@ class PostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
} else {
//Upvoted before
((DataViewHolder) holder).upvoteButton.clearColorFilter();
- ((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mPostData.get(holder.getAdapterPosition()).getScore() - 1));
+ ((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mPostData.get(adapterPosition).getScore() - 1));
VoteThing.voteThing(mContext, new VoteThing.VoteThingListener() {
@Override
@@ -395,9 +396,9 @@ class PostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
if (((DataViewHolder) holder).downvoteButton.getColorFilter() == null) {
((DataViewHolder) holder).downvoteButton.setColorFilter(ContextCompat.getColor(mContext, R.color.minusButtonColor), android.graphics.PorterDuff.Mode.SRC_IN);
if (isUpvotedBefore) {
- ((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mPostData.get(holder.getAdapterPosition()).getScore() - 2));
+ ((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mPostData.get(adapterPosition).getScore() - 2));
} else {
- ((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mPostData.get(holder.getAdapterPosition()).getScore() - 1));
+ ((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mPostData.get(adapterPosition).getScore() - 1));
}
VoteThing.voteThing(mContext, new VoteThing.VoteThingListener() {
@@ -418,11 +419,11 @@ class PostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mPostData.get(position).getScore()));
((DataViewHolder) holder).upvoteButton.setColorFilter(upvoteButtonColorFilter);
}
- }, id, RedditUtils.DIR_DOWNVOTE, holder.getAdapterPosition(), 1);
+ }, id, RedditUtils.DIR_DOWNVOTE, adapterPosition, 1);
} else {
//Down voted before
((DataViewHolder) holder).downvoteButton.clearColorFilter();
- ((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mPostData.get(holder.getAdapterPosition()).getScore() + 1));
+ ((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mPostData.get(adapterPosition).getScore() + 1));
VoteThing.voteThing(mContext, new VoteThing.VoteThingListener() {
@Override
@@ -438,7 +439,7 @@ class PostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
((DataViewHolder) holder).scoreTextView.setText(Integer.toString(mPostData.get(position).getScore()));
mPostData.get(position).setScore(mPostData.get(position).getScore());
}
- }, id, RedditUtils.DIR_UNVOTE, holder.getAdapterPosition(), 1);
+ }, id, RedditUtils.DIR_UNVOTE, adapterPosition, 1);
}
}
});
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/RedditUtils.java b/app/src/main/java/ml/docilealligator/infinityforreddit/RedditUtils.java
index 8cb98c4c..bfffa195 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/RedditUtils.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/RedditUtils.java
@@ -60,8 +60,4 @@ class RedditUtils {
params.put(RedditUtils.USER_AGENT_KEY, RedditUtils.USER_AGENT);
return params;
}
-
- static String getQuerySubredditPostUrl(String subredditName) {
- return API_BASE_URI + "/r/" + subredditName + ".json";
- }
}
diff --git a/app/src/main/res/drawable/load_post_error_indicator.png b/app/src/main/res/drawable/load_post_error_indicator.png
new file mode 100644
index 00000000..a067fb1e
--- /dev/null
+++ b/app/src/main/res/drawable/load_post_error_indicator.png
Binary files differ
diff --git a/app/src/main/res/layout/activity_view_subreddit_detail.xml b/app/src/main/res/layout/activity_view_subreddit_detail.xml
index d5f6ec57..ed05ebf1 100644
--- a/app/src/main/res/layout/activity_view_subreddit_detail.xml
+++ b/app/src/main/res/layout/activity_view_subreddit_detail.xml
@@ -21,7 +21,7 @@
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
- app:layout_scrollFlags="scroll|exitUntilCollapsed"
+ app:layout_scrollFlags="scroll|enterAlways|enterAlwaysCollapsed"
app:toolbarId="@+id/toolbar">
<RelativeLayout
@@ -109,6 +109,7 @@
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin"
+ app:layout_scrollFlags="scroll|enterAlways|enterAlwaysCollapsed"
app:popupTheme="@style/AppTheme.PopupOverlay"
app:navigationIcon="?attr/homeAsUpIndicator" />
diff --git a/app/src/main/res/layout/fragment_post.xml b/app/src/main/res/layout/fragment_post.xml
index e18a4a62..431a2292 100644
--- a/app/src/main/res/layout/fragment_post.xml
+++ b/app/src/main/res/layout/fragment_post.xml
@@ -19,6 +19,28 @@
android:layout_width="match_parent"
android:layout_height="match_parent" />
+ <LinearLayout
+ android:id="@+id/fetch_post_error_linear_layout_post_fragment"
+ 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_error_image_view_post_fragment"
+ android:layout_width="150dp"
+ android:layout_height="wrap_content" />
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="16dp"
+ android:gravity="center"
+ android:text="@string/load_posts_error"/>
+
+ </LinearLayout>
+
<!--<android.support.design.widget.FloatingActionButton
android:id="@+id/fab_post_fragment"
android:layout_width="wrap_content"
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 2014e3bb..2b98acbb 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -8,6 +8,8 @@
<string name="action_settings">Settings</string>
<string name="action_download">Download</string>
+ <string name="load_posts_error">Error loading posts.\nTap to retry.</string>
+
<string name="load_data_failed">Cannot load posts</string>
<string name="load_comment_failed">Error loading comments</string>
<string name="retry">Retry</string>