mirror of
https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
synced 2024-11-10 04:37:25 +01:00
Rename some classes and layout resources. Feature added: view posts in ViewSubredditDetailActivity.
This commit is contained in:
parent
07b32b3900
commit
0fa03cba21
Binary file not shown.
@ -28,7 +28,7 @@ class FetchComment {
|
|||||||
void queryComment(FetchCommentListener fetchCommentListener) {
|
void queryComment(FetchCommentListener fetchCommentListener) {
|
||||||
mFetchCommentListener = fetchCommentListener;
|
mFetchCommentListener = fetchCommentListener;
|
||||||
|
|
||||||
Uri uri = Uri.parse(RedditUtils.getQueryCommentUri(subredditName, article))
|
Uri uri = Uri.parse(RedditUtils.getQueryCommentUrl(subredditName, article))
|
||||||
.buildUpon().appendQueryParameter(RedditUtils.RAW_JSON_KEY, RedditUtils.RAW_JSON_VALUE)
|
.buildUpon().appendQueryParameter(RedditUtils.RAW_JSON_KEY, RedditUtils.RAW_JSON_VALUE)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ class FetchSubredditData {
|
|||||||
|
|
||||||
void querySubredditData(FetchSubredditDataListener fetchSubredditDataListener) {
|
void querySubredditData(FetchSubredditDataListener fetchSubredditDataListener) {
|
||||||
mFetchSubredditDataListener = fetchSubredditDataListener;
|
mFetchSubredditDataListener = fetchSubredditDataListener;
|
||||||
StringRequest commentRequest = new StringRequest(Request.Method.GET, RedditUtils.getQuerySubredditDataUri(subredditName), new Response.Listener<String>() {
|
StringRequest commentRequest = new StringRequest(Request.Method.GET, RedditUtils.getQuerySubredditDataUrl(subredditName), new Response.Listener<String>() {
|
||||||
@Override
|
@Override
|
||||||
public void onResponse(String response) {
|
public void onResponse(String response) {
|
||||||
mFetchSubredditDataListener.onFetchSubredditDataSuccess(response);
|
mFetchSubredditDataListener.onFetchSubredditDataSuccess(response);
|
||||||
|
@ -5,11 +5,11 @@ import android.arch.lifecycle.ViewModelProviders;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
|
import android.net.Uri;
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.support.v4.app.FragmentTransaction;
|
|
||||||
import android.support.v4.view.GravityCompat;
|
import android.support.v4.view.GravityCompat;
|
||||||
import android.support.v4.widget.DrawerLayout;
|
import android.support.v4.widget.DrawerLayout;
|
||||||
import android.support.v7.app.ActionBarDrawerToggle;
|
import android.support.v7.app.ActionBarDrawerToggle;
|
||||||
@ -79,9 +79,15 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
startActivity(loginIntent);
|
startActivity(loginIntent);
|
||||||
} else {
|
} else {
|
||||||
if(savedInstanceState == null) {
|
if(savedInstanceState == null) {
|
||||||
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
|
mFragment = new PostFragment();
|
||||||
mFragment = new BestPostFragment();
|
Uri uri = Uri.parse(RedditUtils.OAUTH_API_BASE_URI + RedditUtils.BEST_POST_SUFFIX)
|
||||||
fragmentTransaction.replace(R.id.frame_layout_content_main, mFragment).commit();
|
.buildUpon().appendQueryParameter(RedditUtils.RAW_JSON_KEY, RedditUtils.RAW_JSON_VALUE)
|
||||||
|
.build();
|
||||||
|
Bundle bundle = new Bundle();
|
||||||
|
bundle.putString(PostFragment.QUERY_POST_URL_KEY, uri.toString());
|
||||||
|
bundle.putBoolean(PostFragment.IS_BEST_POST_KEY, true);
|
||||||
|
mFragment.setArguments(bundle);
|
||||||
|
getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout_content_main, mFragment).commit();
|
||||||
} else {
|
} else {
|
||||||
mFragment = getSupportFragmentManager().getFragment(savedInstanceState, "outStateFragment");
|
mFragment = getSupportFragmentManager().getFragment(savedInstanceState, "outStateFragment");
|
||||||
getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout_content_main, mFragment).commit();
|
getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout_content_main, mFragment).commit();
|
||||||
|
@ -32,7 +32,7 @@ class ParsePost {
|
|||||||
mParseBetPostListener = parsePostListener;
|
mParseBetPostListener = parsePostListener;
|
||||||
}
|
}
|
||||||
|
|
||||||
void parseBestPost(String response, ArrayList<PostData> postData) {
|
void parsePost(String response, ArrayList<PostData> postData) {
|
||||||
new ParsePostDataAsyncTask(response, postData).execute();
|
new ParsePostDataAsyncTask(response, postData).execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,16 +1,16 @@
|
|||||||
package ml.docilealligator.infinityforreddit;
|
package ml.docilealligator.infinityforreddit;
|
||||||
|
|
||||||
|
|
||||||
import android.support.v4.app.Fragment;
|
|
||||||
import android.content.ClipData;
|
import android.content.ClipData;
|
||||||
import android.content.ClipboardManager;
|
import android.content.ClipboardManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
import android.support.design.widget.CoordinatorLayout;
|
import android.support.design.widget.CoordinatorLayout;
|
||||||
import android.support.design.widget.FloatingActionButton;
|
|
||||||
import android.support.design.widget.Snackbar;
|
import android.support.design.widget.Snackbar;
|
||||||
|
import android.support.v4.app.Fragment;
|
||||||
import android.support.v7.widget.LinearLayoutManager;
|
import android.support.v7.widget.LinearLayoutManager;
|
||||||
import android.support.v7.widget.RecyclerView;
|
import android.support.v7.widget.RecyclerView;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
@ -35,10 +35,13 @@ import java.util.Map;
|
|||||||
/**
|
/**
|
||||||
* A simple {@link Fragment} subclass.
|
* A simple {@link Fragment} subclass.
|
||||||
*/
|
*/
|
||||||
public class BestPostFragment extends Fragment {
|
public class PostFragment extends Fragment {
|
||||||
|
|
||||||
|
static final String QUERY_POST_URL_KEY = "QPUK";
|
||||||
|
static final String IS_BEST_POST_KEY = "IBPK";
|
||||||
|
|
||||||
private CoordinatorLayout mCoordinatorLayout;
|
private CoordinatorLayout mCoordinatorLayout;
|
||||||
private RecyclerView mBestPostRecyclerView;
|
private RecyclerView mPostRecyclerView;
|
||||||
private LinearLayoutManager mLinearLayoutManager;
|
private LinearLayoutManager mLinearLayoutManager;
|
||||||
private ProgressBar mProgressBar;
|
private ProgressBar mProgressBar;
|
||||||
private ArrayList<PostData> mPostData;
|
private ArrayList<PostData> mPostData;
|
||||||
@ -46,7 +49,9 @@ public class BestPostFragment extends Fragment {
|
|||||||
private PaginationSynchronizer mPaginationSynchronizer;
|
private PaginationSynchronizer mPaginationSynchronizer;
|
||||||
private PostRecyclerViewAdapter mAdapter;
|
private PostRecyclerViewAdapter mAdapter;
|
||||||
|
|
||||||
private String bestPostDataParcelableState = "BPDPS";
|
private boolean mIsBestPost;
|
||||||
|
private String mQueryPostUrl;
|
||||||
|
private String PostDataParcelableState = "BPDPS";
|
||||||
private String lastItemState = "LIS";
|
private String lastItemState = "LIS";
|
||||||
private String paginationSynchronizerState = "PSS";
|
private String paginationSynchronizerState = "PSS";
|
||||||
|
|
||||||
@ -55,7 +60,7 @@ public class BestPostFragment extends Fragment {
|
|||||||
private RequestQueue mAcquireAccessTokenRequestQueue;
|
private RequestQueue mAcquireAccessTokenRequestQueue;
|
||||||
private RequestQueue mVoteThingRequestQueue;
|
private RequestQueue mVoteThingRequestQueue;
|
||||||
|
|
||||||
public BestPostFragment() {
|
public PostFragment() {
|
||||||
// Required empty public constructor
|
// Required empty public constructor
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -63,22 +68,29 @@ public class BestPostFragment extends Fragment {
|
|||||||
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
|
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
|
||||||
super.onActivityCreated(savedInstanceState);
|
super.onActivityCreated(savedInstanceState);
|
||||||
if(savedInstanceState != null) {
|
if(savedInstanceState != null) {
|
||||||
if(savedInstanceState.containsKey(bestPostDataParcelableState)) {
|
if(savedInstanceState.containsKey(PostDataParcelableState)) {
|
||||||
mPostData = savedInstanceState.getParcelableArrayList(bestPostDataParcelableState);
|
mPostData = savedInstanceState.getParcelableArrayList(PostDataParcelableState);
|
||||||
mLastItem = savedInstanceState.getString(lastItemState);
|
mLastItem = savedInstanceState.getString(lastItemState);
|
||||||
mAdapter = new PostRecyclerViewAdapter(getActivity(), mPostData, mPaginationSynchronizer, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue);
|
mAdapter = new PostRecyclerViewAdapter(getActivity(), mPostData, mPaginationSynchronizer, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue);
|
||||||
mBestPostRecyclerView.setAdapter(mAdapter);
|
mPostRecyclerView.setAdapter(mAdapter);
|
||||||
mBestPostRecyclerView.addOnScrollListener(new PostPaginationScrollListener(getActivity(), mLinearLayoutManager, mAdapter, mLastItem, mPostData, mPaginationSynchronizer,
|
mPostRecyclerView.addOnScrollListener(new PostPaginationScrollListener(
|
||||||
mAcquireAccessTokenRequestQueue, mPaginationSynchronizer.isLoading(), mPaginationSynchronizer.isLoadSuccess()));
|
getActivity(), mLinearLayoutManager, mAdapter, mLastItem, mPostData,
|
||||||
|
mPaginationSynchronizer, mAcquireAccessTokenRequestQueue,
|
||||||
|
mQueryPostUrl, mIsBestPost,
|
||||||
|
mPaginationSynchronizer.isLoading(), mPaginationSynchronizer.isLoadSuccess()));
|
||||||
mProgressBar.setVisibility(View.GONE);
|
mProgressBar.setVisibility(View.GONE);
|
||||||
} else {
|
} else {
|
||||||
queryBestPost(1);
|
if(mIsBestPost) {
|
||||||
|
queryBestPost(mQueryPostUrl, 1);
|
||||||
|
} else {
|
||||||
|
queryPost(mQueryPostUrl, 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSaveInstanceState(Bundle outState) {
|
public void onSaveInstanceState(@NonNull Bundle outState) {
|
||||||
super.onSaveInstanceState(outState);
|
super.onSaveInstanceState(outState);
|
||||||
|
|
||||||
if(mRequestQueue != null) {
|
if(mRequestQueue != null) {
|
||||||
@ -98,7 +110,7 @@ public class BestPostFragment extends Fragment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(mPostData != null) {
|
if(mPostData != null) {
|
||||||
outState.putParcelableArrayList(bestPostDataParcelableState, mPostData);
|
outState.putParcelableArrayList(PostDataParcelableState, mPostData);
|
||||||
outState.putString(lastItemState, mLastItem);
|
outState.putString(lastItemState, mLastItem);
|
||||||
outState.putParcelable(paginationSynchronizerState, mPaginationSynchronizer);
|
outState.putParcelable(paginationSynchronizerState, mPaginationSynchronizer);
|
||||||
}
|
}
|
||||||
@ -116,30 +128,37 @@ public class BestPostFragment extends Fragment {
|
|||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||||
Bundle savedInstanceState) {
|
Bundle savedInstanceState) {
|
||||||
// Inflate the layout for this fragment
|
// Inflate the layout for this fragment
|
||||||
View rootView = inflater.inflate(R.layout.fragment_best_post, container, false);
|
View rootView = inflater.inflate(R.layout.fragment_post, container, false);
|
||||||
mCoordinatorLayout = rootView.findViewById(R.id.coordinator_layout_best_post_fragment);
|
mCoordinatorLayout = rootView.findViewById(R.id.coordinator_layout_post_fragment);
|
||||||
mBestPostRecyclerView = rootView.findViewById(R.id.recycler_view_best_post_fragment);
|
mPostRecyclerView = rootView.findViewById(R.id.recycler_view_post_fragment);
|
||||||
mLinearLayoutManager = new LinearLayoutManager(getActivity());
|
mLinearLayoutManager = new LinearLayoutManager(getActivity());
|
||||||
mBestPostRecyclerView.setLayoutManager(mLinearLayoutManager);
|
mPostRecyclerView.setLayoutManager(mLinearLayoutManager);
|
||||||
mProgressBar = rootView.findViewById(R.id.progress_bar_best_post_fragment);
|
mProgressBar = rootView.findViewById(R.id.progress_bar_post_fragment);
|
||||||
FloatingActionButton fab = rootView.findViewById(R.id.fab_best_post_fragment);
|
/*FloatingActionButton fab = rootView.findViewById(R.id.fab_post_fragment);
|
||||||
fab.setOnClickListener(new View.OnClickListener() {
|
fab.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
|
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
|
||||||
.setAction("Action", null).show();
|
.setAction("Action", null).show();
|
||||||
}
|
}
|
||||||
});
|
});*/
|
||||||
|
|
||||||
mRequestQueue = Volley.newRequestQueue(getActivity());
|
mRequestQueue = Volley.newRequestQueue(getActivity());
|
||||||
mAcquireAccessTokenRequestQueue = Volley.newRequestQueue(getActivity());
|
mAcquireAccessTokenRequestQueue = Volley.newRequestQueue(getActivity());
|
||||||
mVoteThingRequestQueue = Volley.newRequestQueue(getActivity());
|
mVoteThingRequestQueue = Volley.newRequestQueue(getActivity());
|
||||||
|
|
||||||
|
mIsBestPost = getArguments().getBoolean(IS_BEST_POST_KEY);
|
||||||
|
mQueryPostUrl = getArguments().getString(QUERY_POST_URL_KEY);
|
||||||
|
|
||||||
if(savedInstanceState != null && savedInstanceState.getParcelable(paginationSynchronizerState) != null) {
|
if(savedInstanceState != null && savedInstanceState.getParcelable(paginationSynchronizerState) != null) {
|
||||||
mPaginationSynchronizer = savedInstanceState.getParcelable(paginationSynchronizerState);
|
mPaginationSynchronizer = savedInstanceState.getParcelable(paginationSynchronizerState);
|
||||||
} else {
|
} else {
|
||||||
mPaginationSynchronizer = new PaginationSynchronizer();
|
mPaginationSynchronizer = new PaginationSynchronizer();
|
||||||
queryBestPost(1);
|
if(mIsBestPost) {
|
||||||
|
queryBestPost(mQueryPostUrl, 1);
|
||||||
|
} else {
|
||||||
|
queryPost(mQueryPostUrl, 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LastItemSynchronizer lastItemSynchronizer = new LastItemSynchronizer() {
|
LastItemSynchronizer lastItemSynchronizer = new LastItemSynchronizer() {
|
||||||
@ -161,7 +180,7 @@ public class BestPostFragment extends Fragment {
|
|||||||
return rootView;
|
return rootView;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void queryBestPost(final int refreshTime) {
|
private void queryBestPost(final String queryPostUrl, final int refreshTime) {
|
||||||
if(refreshTime < 0) {
|
if(refreshTime < 0) {
|
||||||
showErrorSnackbar();
|
showErrorSnackbar();
|
||||||
return;
|
return;
|
||||||
@ -169,11 +188,11 @@ public class BestPostFragment extends Fragment {
|
|||||||
|
|
||||||
mProgressBar.setVisibility(View.VISIBLE);
|
mProgressBar.setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
Uri uri = Uri.parse(RedditUtils.OAUTH_API_BASE_URI + RedditUtils.BEST_POST_SUFFIX)
|
/*Uri uri = Uri.parse(RedditUtils.OAUTH_API_BASE_URI + RedditUtils.BEST_POST_SUFFIX)
|
||||||
.buildUpon().appendQueryParameter(RedditUtils.RAW_JSON_KEY, RedditUtils.RAW_JSON_VALUE)
|
.buildUpon().appendQueryParameter(RedditUtils.RAW_JSON_KEY, RedditUtils.RAW_JSON_VALUE)
|
||||||
.build();
|
.build();*/
|
||||||
|
|
||||||
StringRequest bestPostRequest = new StringRequest(Request.Method.GET, uri.toString(), new Response.Listener<String>() {
|
StringRequest postRequest = new StringRequest(Request.Method.GET, mQueryPostUrl, new Response.Listener<String>() {
|
||||||
@Override
|
@Override
|
||||||
public void onResponse(String response) {
|
public void onResponse(String response) {
|
||||||
if(getActivity() != null) {
|
if(getActivity() != null) {
|
||||||
@ -183,24 +202,27 @@ public class BestPostFragment extends Fragment {
|
|||||||
//new ParsePostDataAsyncTask(response, accessToken).execute();
|
//new ParsePostDataAsyncTask(response, accessToken).execute();
|
||||||
new ParsePost(getActivity(), new ParsePost.ParsePostListener() {
|
new ParsePost(getActivity(), new ParsePost.ParsePostListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onParsePostSuccess(ArrayList<PostData> bestPostData, String lastItem) {
|
public void onParsePostSuccess(ArrayList<PostData> postData, String lastItem) {
|
||||||
mPostData = bestPostData;
|
mPostData = postData;
|
||||||
mLastItem = lastItem;
|
mLastItem = lastItem;
|
||||||
mAdapter = new PostRecyclerViewAdapter(getActivity(), bestPostData, mPaginationSynchronizer, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue);
|
mAdapter = new PostRecyclerViewAdapter(getActivity(), postData, mPaginationSynchronizer, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue);
|
||||||
|
|
||||||
mBestPostRecyclerView.setAdapter(mAdapter);
|
mPostRecyclerView.setAdapter(mAdapter);
|
||||||
mBestPostRecyclerView.addOnScrollListener(new PostPaginationScrollListener(getActivity(), mLinearLayoutManager, mAdapter, lastItem, bestPostData, mPaginationSynchronizer,
|
mPostRecyclerView.addOnScrollListener(new PostPaginationScrollListener(
|
||||||
mAcquireAccessTokenRequestQueue, mPaginationSynchronizer.isLoading(), mPaginationSynchronizer.isLoadSuccess()));
|
getActivity(), mLinearLayoutManager, mAdapter, lastItem, postData,
|
||||||
|
mPaginationSynchronizer, mAcquireAccessTokenRequestQueue,
|
||||||
|
mQueryPostUrl, mIsBestPost,
|
||||||
|
mPaginationSynchronizer.isLoading(), mPaginationSynchronizer.isLoadSuccess()));
|
||||||
mProgressBar.setVisibility(View.GONE);
|
mProgressBar.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onParsePostFail() {
|
public void onParsePostFail() {
|
||||||
Toast.makeText(getActivity(), "Error parsing data", Toast.LENGTH_SHORT).show();
|
Toast.makeText(getActivity(), "Error parsing data", Toast.LENGTH_SHORT).show();
|
||||||
Log.i("Best post fetch error", "Error parsing data");
|
Log.i("Post fetch error", "Error parsing data");
|
||||||
mProgressBar.setVisibility(View.GONE);
|
mProgressBar.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
}).parseBestPost(response, new ArrayList<PostData>());
|
}).parsePost(response, new ArrayList<PostData>());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, new Response.ErrorListener() {
|
}, new Response.ErrorListener() {
|
||||||
@ -213,14 +235,14 @@ public class BestPostFragment extends Fragment {
|
|||||||
new AcquireAccessToken.AcquireAccessTokenListener() {
|
new AcquireAccessToken.AcquireAccessTokenListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onAcquireAccessTokenSuccess() {
|
public void onAcquireAccessTokenSuccess() {
|
||||||
queryBestPost(refreshTime - 1);
|
queryBestPost(queryPostUrl, refreshTime - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onAcquireAccessTokenFail() {}
|
public void onAcquireAccessTokenFail() {}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
Log.i("best post fetch error", error.toString());
|
Log.i("Post fetch error", error.toString());
|
||||||
showErrorSnackbar();
|
showErrorSnackbar();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -231,17 +253,92 @@ public class BestPostFragment extends Fragment {
|
|||||||
return RedditUtils.getOAuthHeader(accessToken);
|
return RedditUtils.getOAuthHeader(accessToken);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
bestPostRequest.setTag(BestPostFragment.class);
|
postRequest.setTag(PostFragment.class);
|
||||||
mRequestQueue.add(bestPostRequest);
|
mRequestQueue.add(postRequest);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void queryPost(final String queryPostUrl, final int refreshTime) {
|
||||||
|
if(refreshTime < 0) {
|
||||||
|
showErrorSnackbar();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
mProgressBar.setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
|
Uri uri = Uri.parse(RedditUtils.OAUTH_API_BASE_URI + RedditUtils.BEST_POST_SUFFIX)
|
||||||
|
.buildUpon().appendQueryParameter(RedditUtils.RAW_JSON_KEY, RedditUtils.RAW_JSON_VALUE)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
StringRequest postRequest = new StringRequest(Request.Method.GET, queryPostUrl, new Response.Listener<String>() {
|
||||||
|
@Override
|
||||||
|
public void onResponse(String response) {
|
||||||
|
if(getActivity() != null) {
|
||||||
|
ClipboardManager clipboard = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE);
|
||||||
|
ClipData clip = ClipData.newPlainText("response", response);
|
||||||
|
clipboard.setPrimaryClip(clip);
|
||||||
|
//new ParsePostDataAsyncTask(response, accessToken).execute();
|
||||||
|
new ParsePost(getActivity(), new ParsePost.ParsePostListener() {
|
||||||
|
@Override
|
||||||
|
public void onParsePostSuccess(ArrayList<PostData> postData, String lastItem) {
|
||||||
|
mPostData = postData;
|
||||||
|
mLastItem = lastItem;
|
||||||
|
mAdapter = new PostRecyclerViewAdapter(getActivity(), postData, mPaginationSynchronizer, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue);
|
||||||
|
|
||||||
|
mPostRecyclerView.setAdapter(mAdapter);
|
||||||
|
mPostRecyclerView.addOnScrollListener(new PostPaginationScrollListener(
|
||||||
|
getActivity(), mLinearLayoutManager, mAdapter, lastItem, postData,
|
||||||
|
mPaginationSynchronizer, mAcquireAccessTokenRequestQueue,
|
||||||
|
mQueryPostUrl, mIsBestPost,
|
||||||
|
mPaginationSynchronizer.isLoading(), mPaginationSynchronizer.isLoadSuccess()));
|
||||||
|
mProgressBar.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@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);
|
||||||
|
}
|
||||||
|
}).parsePost(response, new ArrayList<PostData>());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, new Response.ErrorListener() {
|
||||||
|
@Override
|
||||||
|
public void onErrorResponse(VolleyError error) {
|
||||||
|
if (error instanceof AuthFailureError) {
|
||||||
|
// Error indicating that there was an Authentication Failure while performing the request
|
||||||
|
// Access token expired
|
||||||
|
new AcquireAccessToken(getActivity()).refreshAccessToken(mAcquireAccessTokenRequestQueue,
|
||||||
|
new AcquireAccessToken.AcquireAccessTokenListener() {
|
||||||
|
@Override
|
||||||
|
public void onAcquireAccessTokenSuccess() {
|
||||||
|
queryPost(queryPostUrl, refreshTime - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onAcquireAccessTokenFail() {}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
Log.i("Post fetch error", error.toString());
|
||||||
|
showErrorSnackbar();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
postRequest.setTag(PostFragment.class);
|
||||||
|
mRequestQueue.add(postRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void showErrorSnackbar() {
|
private void showErrorSnackbar() {
|
||||||
mProgressBar.setVisibility(View.GONE);
|
mProgressBar.setVisibility(View.GONE);
|
||||||
Snackbar snackbar = Snackbar.make(mCoordinatorLayout, "Error getting best post", Snackbar.LENGTH_INDEFINITE);
|
Snackbar snackbar = Snackbar.make(mCoordinatorLayout, "Error getting post", Snackbar.LENGTH_INDEFINITE);
|
||||||
snackbar.setAction(R.string.retry, new View.OnClickListener() {
|
snackbar.setAction(R.string.retry, new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
queryBestPost(1);
|
if(mIsBestPost) {
|
||||||
|
queryBestPost(mQueryPostUrl, 1);
|
||||||
|
} else {
|
||||||
|
queryPost(mQueryPostUrl, 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
snackbar.show();
|
snackbar.show();
|
@ -4,6 +4,7 @@ import android.content.ClipData;
|
|||||||
import android.content.ClipboardManager;
|
import android.content.ClipboardManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
import android.support.v7.widget.LinearLayoutManager;
|
import android.support.v7.widget.LinearLayoutManager;
|
||||||
import android.support.v7.widget.RecyclerView;
|
import android.support.v7.widget.RecyclerView;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
@ -34,14 +35,18 @@ class PostPaginationScrollListener extends RecyclerView.OnScrollListener {
|
|||||||
private LastItemSynchronizer mLastItemSynchronizer;
|
private LastItemSynchronizer mLastItemSynchronizer;
|
||||||
private PaginationRequestQueueSynchronizer mPaginationRequestQueueSynchronizer;
|
private PaginationRequestQueueSynchronizer mPaginationRequestQueueSynchronizer;
|
||||||
|
|
||||||
|
private String mQueryPostUrl;
|
||||||
|
private boolean isBestPost;
|
||||||
private boolean isLoading;
|
private boolean isLoading;
|
||||||
private boolean loadSuccess;
|
private boolean loadSuccess;
|
||||||
private String mLastItem;
|
private String mLastItem;
|
||||||
private RequestQueue mRequestQueue;
|
private RequestQueue mRequestQueue;
|
||||||
private RequestQueue mAcquireAccessTokenRequestQueue;
|
private RequestQueue mAcquireAccessTokenRequestQueue;
|
||||||
|
|
||||||
PostPaginationScrollListener(Context context, LinearLayoutManager layoutManager, PostRecyclerViewAdapter adapter, String lastItem, ArrayList<PostData> postData, PaginationSynchronizer paginationSynchronizer,
|
PostPaginationScrollListener(Context context, LinearLayoutManager layoutManager, PostRecyclerViewAdapter adapter,
|
||||||
RequestQueue acquireAccessTokenRequestQueue, boolean isLoading, boolean loadSuccess) {
|
String lastItem, ArrayList<PostData> postData, PaginationSynchronizer paginationSynchronizer,
|
||||||
|
RequestQueue acquireAccessTokenRequestQueue, final String queryPostUrl,
|
||||||
|
final boolean isBestPost, boolean isLoading, boolean loadSuccess) {
|
||||||
if(context != null) {
|
if(context != null) {
|
||||||
this.mContext = context;
|
this.mContext = context;
|
||||||
this.mLayoutManager = layoutManager;
|
this.mLayoutManager = layoutManager;
|
||||||
@ -50,6 +55,8 @@ class PostPaginationScrollListener extends RecyclerView.OnScrollListener {
|
|||||||
this.mPostData = postData;
|
this.mPostData = postData;
|
||||||
this.mPaginationSynchronizer = paginationSynchronizer;
|
this.mPaginationSynchronizer = paginationSynchronizer;
|
||||||
this.mAcquireAccessTokenRequestQueue = acquireAccessTokenRequestQueue;
|
this.mAcquireAccessTokenRequestQueue = acquireAccessTokenRequestQueue;
|
||||||
|
this.mQueryPostUrl = queryPostUrl;
|
||||||
|
this.isBestPost = isBestPost;
|
||||||
this.isLoading = isLoading;
|
this.isLoading = isLoading;
|
||||||
this.loadSuccess = loadSuccess;
|
this.loadSuccess = loadSuccess;
|
||||||
|
|
||||||
@ -58,7 +65,11 @@ class PostPaginationScrollListener extends RecyclerView.OnScrollListener {
|
|||||||
mPaginationRetryNotifier = new PaginationRetryNotifier() {
|
mPaginationRetryNotifier = new PaginationRetryNotifier() {
|
||||||
@Override
|
@Override
|
||||||
public void retry() {
|
public void retry() {
|
||||||
fetchBestPost(1);
|
if(isBestPost) {
|
||||||
|
fetchBestPost(queryPostUrl, 1);
|
||||||
|
} else {
|
||||||
|
fetchPost(queryPostUrl, 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
mPaginationSynchronizer.setPaginationRetryNotifier(mPaginationRetryNotifier);
|
mPaginationSynchronizer.setPaginationRetryNotifier(mPaginationRetryNotifier);
|
||||||
@ -69,7 +80,7 @@ class PostPaginationScrollListener extends RecyclerView.OnScrollListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
|
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
|
||||||
super.onScrolled(recyclerView, dx, dy);
|
super.onScrolled(recyclerView, dx, dy);
|
||||||
if(!isLoading && loadSuccess) {
|
if(!isLoading && loadSuccess) {
|
||||||
int visibleItemCount = mLayoutManager.getChildCount();
|
int visibleItemCount = mLayoutManager.getChildCount();
|
||||||
@ -77,13 +88,17 @@ class PostPaginationScrollListener extends RecyclerView.OnScrollListener {
|
|||||||
int firstVisibleItemPosition = mLayoutManager.findFirstVisibleItemPosition();
|
int firstVisibleItemPosition = mLayoutManager.findFirstVisibleItemPosition();
|
||||||
|
|
||||||
if((visibleItemCount + firstVisibleItemPosition >= totalItemCount) && firstVisibleItemPosition >= 0) {
|
if((visibleItemCount + firstVisibleItemPosition >= totalItemCount) && firstVisibleItemPosition >= 0) {
|
||||||
fetchBestPost(1);
|
if(isBestPost) {
|
||||||
|
fetchBestPost(mQueryPostUrl, 1);
|
||||||
|
} else {
|
||||||
|
fetchPost(mQueryPostUrl, 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void fetchBestPost(final int refreshTime) {
|
private void fetchBestPost(final String queryPostUrl, final int refreshTime) {
|
||||||
if(refreshTime < 0) {
|
if(refreshTime < 0) {
|
||||||
loadFailed();
|
loadFailed();
|
||||||
return;
|
return;
|
||||||
@ -93,9 +108,8 @@ class PostPaginationScrollListener extends RecyclerView.OnScrollListener {
|
|||||||
loadSuccess = false;
|
loadSuccess = false;
|
||||||
mPaginationSynchronizer.setLoading(true);
|
mPaginationSynchronizer.setLoading(true);
|
||||||
|
|
||||||
Uri uri = Uri.parse(RedditUtils.OAUTH_API_BASE_URI + RedditUtils.BEST_POST_SUFFIX)
|
Uri uri = Uri.parse(queryPostUrl)
|
||||||
.buildUpon().appendQueryParameter(RedditUtils.AFTER_KEY, mLastItem)
|
.buildUpon().appendQueryParameter(RedditUtils.AFTER_KEY, mLastItem).build();
|
||||||
.appendQueryParameter(RedditUtils.RAW_JSON_KEY, RedditUtils.RAW_JSON_VALUE).build();
|
|
||||||
|
|
||||||
StringRequest bestPostRequest = new StringRequest(Request.Method.GET, uri.toString(), new Response.Listener<String>() {
|
StringRequest bestPostRequest = new StringRequest(Request.Method.GET, uri.toString(), new Response.Listener<String>() {
|
||||||
@Override
|
@Override
|
||||||
@ -122,7 +136,7 @@ class PostPaginationScrollListener extends RecyclerView.OnScrollListener {
|
|||||||
Log.i("Best post", "Error parsing data");
|
Log.i("Best post", "Error parsing data");
|
||||||
loadFailed();
|
loadFailed();
|
||||||
}
|
}
|
||||||
}).parseBestPost(response, mPostData);
|
}).parsePost(response, mPostData);
|
||||||
}
|
}
|
||||||
}, new Response.ErrorListener() {
|
}, new Response.ErrorListener() {
|
||||||
@Override
|
@Override
|
||||||
@ -133,7 +147,7 @@ class PostPaginationScrollListener extends RecyclerView.OnScrollListener {
|
|||||||
new AcquireAccessToken.AcquireAccessTokenListener() {
|
new AcquireAccessToken.AcquireAccessTokenListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onAcquireAccessTokenSuccess() {
|
public void onAcquireAccessTokenSuccess() {
|
||||||
fetchBestPost(refreshTime - 1);
|
fetchBestPost(queryPostUrl, refreshTime - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -157,6 +171,73 @@ class PostPaginationScrollListener extends RecyclerView.OnScrollListener {
|
|||||||
mRequestQueue.add(bestPostRequest);
|
mRequestQueue.add(bestPostRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void fetchPost(final String queryPostUrl, final int refreshTime) {
|
||||||
|
if(refreshTime < 0) {
|
||||||
|
loadFailed();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
isLoading = true;
|
||||||
|
loadSuccess = false;
|
||||||
|
mPaginationSynchronizer.setLoading(true);
|
||||||
|
|
||||||
|
Uri uri = Uri.parse(queryPostUrl)
|
||||||
|
.buildUpon().appendQueryParameter(RedditUtils.AFTER_KEY, mLastItem).build();
|
||||||
|
|
||||||
|
StringRequest bestPostRequest = new StringRequest(Request.Method.GET, uri.toString(), new Response.Listener<String>() {
|
||||||
|
@Override
|
||||||
|
public void onResponse(String response) {
|
||||||
|
ClipboardManager clipboard = (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE);
|
||||||
|
ClipData clip = ClipData.newPlainText("response", response);
|
||||||
|
clipboard.setPrimaryClip(clip);
|
||||||
|
new ParsePost(mContext, new ParsePost.ParsePostListener() {
|
||||||
|
@Override
|
||||||
|
public void onParsePostSuccess(ArrayList<PostData> bestPostData, String lastItem) {
|
||||||
|
mAdapter.notifyDataSetChanged();
|
||||||
|
mLastItem = lastItem;
|
||||||
|
mLastItemSynchronizer.lastItemChanged(mLastItem);
|
||||||
|
|
||||||
|
isLoading = false;
|
||||||
|
loadSuccess = true;
|
||||||
|
mPaginationSynchronizer.setLoading(false);
|
||||||
|
mPaginationSynchronizer.setLoadingState(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onParsePostFail() {
|
||||||
|
Toast.makeText(mContext, "Error parsing data", Toast.LENGTH_SHORT).show();
|
||||||
|
Log.i("Best post", "Error parsing data");
|
||||||
|
loadFailed();
|
||||||
|
}
|
||||||
|
}).parsePost(response, mPostData);
|
||||||
|
}
|
||||||
|
}, new Response.ErrorListener() {
|
||||||
|
@Override
|
||||||
|
public void onErrorResponse(VolleyError error) {
|
||||||
|
if (error instanceof AuthFailureError) {
|
||||||
|
//Access token expired
|
||||||
|
new AcquireAccessToken(mContext).refreshAccessToken(mAcquireAccessTokenRequestQueue,
|
||||||
|
new AcquireAccessToken.AcquireAccessTokenListener() {
|
||||||
|
@Override
|
||||||
|
public void onAcquireAccessTokenSuccess() {
|
||||||
|
fetchPost(queryPostUrl, refreshTime - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onAcquireAccessTokenFail() {
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
Toast.makeText(mContext, "Error getting best post", Toast.LENGTH_SHORT).show();
|
||||||
|
Log.i("best post", error.toString());
|
||||||
|
loadFailed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
bestPostRequest.setTag(PostPaginationScrollListener.class);
|
||||||
|
mRequestQueue.add(bestPostRequest);
|
||||||
|
}
|
||||||
|
|
||||||
private void loadFailed() {
|
private void loadFailed() {
|
||||||
isLoading = false;
|
isLoading = false;
|
||||||
loadSuccess = false;
|
loadSuccess = false;
|
||||||
|
@ -77,7 +77,7 @@ class PostRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
|
|||||||
@Override
|
@Override
|
||||||
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
if(viewType == VIEW_TYPE_DATA) {
|
if(viewType == VIEW_TYPE_DATA) {
|
||||||
CardView cardView = (CardView) LayoutInflater.from(parent.getContext()).inflate(R.layout.item_best_post, parent, false);
|
CardView cardView = (CardView) LayoutInflater.from(parent.getContext()).inflate(R.layout.item_post, parent, false);
|
||||||
return new DataViewHolder(cardView);
|
return new DataViewHolder(cardView);
|
||||||
} else {
|
} else {
|
||||||
LinearLayout linearLayout = (LinearLayout) LayoutInflater.from(parent.getContext()).inflate(R.layout.item_footer_progress_bar, parent, false);
|
LinearLayout linearLayout = (LinearLayout) LayoutInflater.from(parent.getContext()).inflate(R.layout.item_footer_progress_bar, parent, false);
|
||||||
|
@ -70,11 +70,15 @@ class RedditUtils {
|
|||||||
return params;
|
return params;
|
||||||
}
|
}
|
||||||
|
|
||||||
static String getQueryCommentUri(String subredditName, String article) {
|
static String getQueryCommentUrl(String subredditName, String article) {
|
||||||
return API_BASE_URI + "/" + subredditName + "/comments/" + article + ".json";
|
return API_BASE_URI + "/" + subredditName + "/comments/" + article + ".json";
|
||||||
}
|
}
|
||||||
|
|
||||||
static String getQuerySubredditDataUri(String subredditName) {
|
static String getQuerySubredditDataUrl(String subredditName) {
|
||||||
return API_BASE_URI + "/r/" + subredditName + "/about.json";
|
return API_BASE_URI + "/r/" + subredditName + "/about.json";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static String getQuerySubredditPostUrl(String subredditName) {
|
||||||
|
return API_BASE_URI + "/r/" + subredditName + ".json";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,13 +2,13 @@ package ml.docilealligator.infinityforreddit;
|
|||||||
|
|
||||||
import android.arch.lifecycle.Observer;
|
import android.arch.lifecycle.Observer;
|
||||||
import android.arch.lifecycle.ViewModelProviders;
|
import android.arch.lifecycle.ViewModelProviders;
|
||||||
|
import android.net.Uri;
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
import android.support.design.widget.AppBarLayout;
|
import android.support.design.widget.AppBarLayout;
|
||||||
import android.support.design.widget.CollapsingToolbarLayout;
|
import android.support.design.widget.CollapsingToolbarLayout;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.support.v4.app.FragmentTransaction;
|
|
||||||
import android.support.v7.app.AppCompatActivity;
|
import android.support.v7.app.AppCompatActivity;
|
||||||
import android.support.v7.widget.Toolbar;
|
import android.support.v7.widget.Toolbar;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
@ -27,6 +27,8 @@ public class ViewSubredditDetailActivity extends AppCompatActivity {
|
|||||||
static final String EXTRA_SUBREDDIT_NAME = "ESN";
|
static final String EXTRA_SUBREDDIT_NAME = "ESN";
|
||||||
static final String EXTRA_SUBREDDIT_ID = "ESI";
|
static final String EXTRA_SUBREDDIT_ID = "ESI";
|
||||||
|
|
||||||
|
private Fragment mFragment;
|
||||||
|
|
||||||
private SubredditViewModel mSubredditViewModel;
|
private SubredditViewModel mSubredditViewModel;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -120,9 +122,20 @@ public class ViewSubredditDetailActivity extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
|
if(savedInstanceState == null) {
|
||||||
Fragment mFragment = new BestPostFragment();
|
mFragment = new PostFragment();
|
||||||
fragmentTransaction.replace(R.id.frame_layout_view_subreddit_detail_activity, mFragment).commit();
|
Uri uri = Uri.parse(RedditUtils.getQuerySubredditPostUrl(subredditName))
|
||||||
|
.buildUpon().appendQueryParameter(RedditUtils.RAW_JSON_KEY, RedditUtils.RAW_JSON_VALUE)
|
||||||
|
.build();
|
||||||
|
Bundle bundle = new Bundle();
|
||||||
|
bundle.putString(PostFragment.QUERY_POST_URL_KEY, uri.toString());
|
||||||
|
bundle.putBoolean(PostFragment.IS_BEST_POST_KEY, false);
|
||||||
|
mFragment.setArguments(bundle);
|
||||||
|
getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout_view_subreddit_detail_activity, mFragment).commit();
|
||||||
|
} else {
|
||||||
|
mFragment = getSupportFragmentManager().getFragment(savedInstanceState, "outStateFragment");
|
||||||
|
getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout_view_subreddit_detail_activity, mFragment).commit();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -135,6 +148,14 @@ public class ViewSubredditDetailActivity extends AppCompatActivity {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onSaveInstanceState(Bundle outState) {
|
||||||
|
super.onSaveInstanceState(outState);
|
||||||
|
if(mFragment != null) {
|
||||||
|
getSupportFragmentManager().putFragment(outState, "outStateFragment", mFragment);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static class InsertSubredditDataAsyncTask extends AsyncTask<Void, Void, Void> {
|
private static class InsertSubredditDataAsyncTask extends AsyncTask<Void, Void, Void> {
|
||||||
|
|
||||||
private final SubredditDao mSubredditDao;
|
private final SubredditDao mSubredditDao;
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
android:id="@+id/coordinator_layout_view_subreddit_detail_activity"
|
||||||
android:fitsSystemWindows="true"
|
android:fitsSystemWindows="true"
|
||||||
tools:context=".ViewSubredditDetailActivity">
|
tools:context=".ViewSubredditDetailActivity">
|
||||||
|
|
||||||
|
@ -3,26 +3,28 @@
|
|||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:id="@+id/coordinator_layout_best_post_fragment"
|
android:id="@+id/coordinator_layout_post_fragment"
|
||||||
tools:context="ml.docilealligator.infinityforreddit.BestPostFragment">
|
tools:context="ml.docilealligator.infinityforreddit.PostFragment">
|
||||||
|
|
||||||
<ProgressBar
|
<ProgressBar
|
||||||
android:id="@+id/progress_bar_best_post_fragment"
|
android:id="@+id/progress_bar_post_fragment"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:layout_marginBottom="16dp"
|
||||||
android:layout_gravity="center" />
|
android:layout_gravity="center" />
|
||||||
|
|
||||||
<android.support.v7.widget.RecyclerView
|
<android.support.v7.widget.RecyclerView
|
||||||
android:id="@+id/recycler_view_best_post_fragment"
|
android:id="@+id/recycler_view_post_fragment"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent" />
|
android:layout_height="match_parent" />
|
||||||
|
|
||||||
<android.support.design.widget.FloatingActionButton
|
<!--<android.support.design.widget.FloatingActionButton
|
||||||
android:id="@+id/fab_best_post_fragment"
|
android:id="@+id/fab_post_fragment"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="bottom|end"
|
android:layout_gravity="bottom|end"
|
||||||
android:layout_margin="@dimen/fab_margin"
|
android:layout_margin="@dimen/fab_margin"
|
||||||
app:srcCompat="@drawable/baseline_add_white_24" />
|
app:srcCompat="@drawable/baseline_add_white_24" />-->
|
||||||
|
|
||||||
</android.support.design.widget.CoordinatorLayout>
|
</android.support.design.widget.CoordinatorLayout>
|
@ -10,6 +10,7 @@
|
|||||||
android:id="@+id/progress_bar_footer_progress_bar_item"
|
android:id="@+id/progress_bar_footer_progress_bar_item"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
android:layout_marginBottom="16dp"
|
android:layout_marginBottom="16dp"
|
||||||
android:layout_gravity="center" />
|
android:layout_gravity="center" />
|
||||||
|
|
||||||
@ -17,6 +18,7 @@
|
|||||||
android:id="@+id/relative_layout_footer_progress_bar_item"
|
android:id="@+id/relative_layout_footer_progress_bar_item"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
android:layout_marginBottom="16dp"
|
android:layout_marginBottom="16dp"
|
||||||
android:layout_marginLeft="16dp"
|
android:layout_marginLeft="16dp"
|
||||||
android:layout_marginStart="16dp"
|
android:layout_marginStart="16dp"
|
||||||
|
Loading…
Reference in New Issue
Block a user