aboutsummaryrefslogtreecommitdiff
path: root/app/src/main
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/AcquireAccessToken.java1
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/BestPostFragment.java9
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/BestPostPaginationScrollListener.java7
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/FetchSubscribedSubreddits.java92
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/FetchUserInfo.java9
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/JSONUtils.java1
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/MainActivity.java92
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/ParseBestPost.java105
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/ParseSubscribedSubreddits.java68
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/ParseUserInfo.java7
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/RedditUtils.java7
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/SubredditData.java48
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/SubscribedSubredditRecyclerViewAdapter.java63
-rw-r--r--app/src/main/res/layout/activity_main.xml56
-rw-r--r--app/src/main/res/layout/item_subscribed_subreddit.xml24
-rw-r--r--app/src/main/res/values/strings.xml3
16 files changed, 410 insertions, 182 deletions
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/AcquireAccessToken.java b/app/src/main/java/ml/docilealligator/infinityforreddit/AcquireAccessToken.java
index 969a9680..7895ce0d 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/AcquireAccessToken.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/AcquireAccessToken.java
@@ -50,6 +50,7 @@ class AcquireAccessToken {
editor.putString(SharedPreferencesUtils.ACCESS_TOKEN_KEY, newAccessToken);
editor.apply();
+ Log.i("access token", newAccessToken);
mAcquireAccessTokenListener.onAcquireAccessTokenSuccess();
} catch (JSONException e) {
e.printStackTrace();
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/BestPostFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/BestPostFragment.java
index d7b23a23..de4e6eb0 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/BestPostFragment.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/BestPostFragment.java
@@ -5,6 +5,7 @@ import android.app.Fragment;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
+import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.CoordinatorLayout;
@@ -169,7 +170,11 @@ public class BestPostFragment extends Fragment {
mProgressBar.setVisibility(View.VISIBLE);
- StringRequest bestPostRequest = new StringRequest(Request.Method.GET, RedditUtils.OAUTH_API_BASE_URI + RedditUtils.BEST_POST_SUFFIX, new Response.Listener<String>() {
+ 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 bestPostRequest = new StringRequest(Request.Method.GET, uri.toString(), new Response.Listener<String>() {
@Override
public void onResponse(String response) {
if(getActivity() != null) {
@@ -196,7 +201,7 @@ public class BestPostFragment extends Fragment {
Log.i("Best post fetch error", "Error parsing data");
mProgressBar.setVisibility(View.GONE);
}
- }).parseBestPost(response, null);
+ }).parseBestPost(response, new ArrayList<BestPostData>());
}
}
}, new Response.ErrorListener() {
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/BestPostPaginationScrollListener.java b/app/src/main/java/ml/docilealligator/infinityforreddit/BestPostPaginationScrollListener.java
index d96af7d3..41dbe0af 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/BestPostPaginationScrollListener.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/BestPostPaginationScrollListener.java
@@ -3,6 +3,7 @@ package ml.docilealligator.infinityforreddit;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
+import android.net.Uri;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
@@ -92,7 +93,11 @@ class BestPostPaginationScrollListener extends RecyclerView.OnScrollListener {
loadSuccess = false;
mPaginationSynchronizer.setLoading(true);
- StringRequest bestPostRequest = new StringRequest(Request.Method.GET, RedditUtils.OAUTH_API_BASE_URI + RedditUtils.BEST_POST_SUFFIX + "&" + RedditUtils.AFTER_KEY + "=" + mLastItem, new Response.Listener<String>() {
+ Uri uri = Uri.parse(RedditUtils.OAUTH_API_BASE_URI + RedditUtils.BEST_POST_SUFFIX)
+ .buildUpon().appendQueryParameter(RedditUtils.AFTER_KEY, mLastItem)
+ .appendQueryParameter(RedditUtils.RAW_JSON_KEY, RedditUtils.RAW_JSON_VALUE).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);
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchSubscribedSubreddits.java b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchSubscribedSubreddits.java
index 76869e0f..999a6dc1 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchSubscribedSubreddits.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchSubscribedSubreddits.java
@@ -1,5 +1,97 @@
package ml.docilealligator.infinityforreddit;
+import android.content.Context;
+import android.net.Uri;
+import android.util.Log;
+
+import com.android.volley.AuthFailureError;
+import com.android.volley.Request;
+import com.android.volley.RequestQueue;
+import com.android.volley.Response;
+import com.android.volley.VolleyError;
+import com.android.volley.toolbox.StringRequest;
+
+import java.util.ArrayList;
+import java.util.Map;
+
class FetchSubscribedSubreddits {
+ interface FetchSubscribedSubredditsListener {
+ void onFetchSubscribedSubredditsSuccess(ArrayList<SubredditData> subredditData);
+ void onFetchSubscribedSubredditsFail();
+ }
+
+ private Context context;
+ private RequestQueue requestQueue;
+ private FetchSubscribedSubredditsListener mFetchSubscribedSubredditsListener;
+ private ArrayList<SubredditData> mSubredditData;
+
+ private String mLastItem;
+
+ FetchSubscribedSubreddits(Context context, RequestQueue requestQueue, ArrayList<SubredditData> subredditData) {
+ this.context = context;
+ this.requestQueue = requestQueue;
+ mSubredditData = subredditData;
+ }
+
+ void fetchSubscribedSubreddits(FetchSubscribedSubredditsListener fetchUserInfoListener, final int refreshTime) {
+ if(refreshTime < 0) {
+ mFetchSubscribedSubredditsListener.onFetchSubscribedSubredditsFail();
+ return;
+ }
+
+ Uri uri = Uri.parse(RedditUtils.OAUTH_API_BASE_URI + RedditUtils.SUBSCRIBED_SUBREDDITS)
+ .buildUpon().appendQueryParameter(RedditUtils.AFTER_KEY, mLastItem)
+ .appendQueryParameter(RedditUtils.RAW_JSON_KEY, RedditUtils.RAW_JSON_VALUE).build();
+
+ mFetchSubscribedSubredditsListener = fetchUserInfoListener;
+ StringRequest commentRequest = new StringRequest(Request.Method.GET, uri.toString(), new Response.Listener<String>() {
+ @Override
+ public void onResponse(String response) {
+ new ParseSubscribedSubreddits().parseSubscribedSubreddits(response, mSubredditData,
+ new ParseSubscribedSubreddits.ParseSubscribedSubredditsListener() {
+ @Override
+ public void onParseSubscribedSubredditsSuccess(ArrayList<SubredditData> subredditData, String lastItem) {
+ mSubredditData = subredditData;
+ mLastItem = lastItem;
+ Log.i("last item", lastItem);
+ if(mLastItem.equals("null")) {
+ mFetchSubscribedSubredditsListener.onFetchSubscribedSubredditsSuccess(mSubredditData);
+ } else {
+ fetchSubscribedSubreddits(mFetchSubscribedSubredditsListener, refreshTime);
+ }
+ }
+
+ @Override
+ public void onParseSubscribedSubredditsFail() {
+
+ }
+ });
+ }
+ }, new Response.ErrorListener() {
+ @Override
+ public void onErrorResponse(VolleyError error) {
+ if(error instanceof AuthFailureError) {
+ new AcquireAccessToken(context).refreshAccessToken(requestQueue, new AcquireAccessToken.AcquireAccessTokenListener() {
+ @Override
+ public void onAcquireAccessTokenSuccess() {
+ fetchSubscribedSubreddits(mFetchSubscribedSubredditsListener, refreshTime - 1);
+ }
+ @Override
+ public void onAcquireAccessTokenFail() {}
+ });
+ } else {
+ mFetchSubscribedSubredditsListener.onFetchSubscribedSubredditsFail();
+ }
+ }
+ }) {
+ @Override
+ public Map<String, String> getHeaders() {
+ String accessToken = context.getSharedPreferences(SharedPreferencesUtils.AUTH_CODE_FILE_KEY, Context.MODE_PRIVATE).getString(SharedPreferencesUtils.ACCESS_TOKEN_KEY, "");
+ return RedditUtils.getOAuthHeader(accessToken);
+ }
+ };
+ commentRequest.setTag(FetchComment.class);
+ requestQueue.add(commentRequest);
+ }
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchUserInfo.java b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchUserInfo.java
index bd3e0b9d..274c667e 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchUserInfo.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchUserInfo.java
@@ -1,6 +1,7 @@
package ml.docilealligator.infinityforreddit;
import android.content.Context;
+import android.net.Uri;
import com.android.volley.AuthFailureError;
import com.android.volley.Request;
@@ -33,11 +34,15 @@ class FetchUserInfo {
}
mFetchUserInfoListener = fetchUserInfoListener;
- StringRequest commentRequest = new StringRequest(Request.Method.GET, RedditUtils.OAUTH_API_BASE_URI + RedditUtils.USER_INFO_SUFFIX, new Response.Listener<String>() {
+
+ Uri uri = Uri.parse(RedditUtils.OAUTH_API_BASE_URI + RedditUtils.USER_INFO_SUFFIX)
+ .buildUpon().appendQueryParameter(RedditUtils.RAW_JSON_KEY, RedditUtils.RAW_JSON_VALUE)
+ .build();
+
+ StringRequest commentRequest = new StringRequest(Request.Method.GET, uri.toString(), new Response.Listener<String>() {
@Override
public void onResponse(String response) {
mFetchUserInfoListener.onFetchUserInfoSuccess(response);
-
}
}, new Response.ErrorListener() {
@Override
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/JSONUtils.java b/app/src/main/java/ml/docilealligator/infinityforreddit/JSONUtils.java
index 3cdb7bd8..9f5ae9fc 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/JSONUtils.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/JSONUtils.java
@@ -56,4 +56,5 @@ class JSONUtils {
static final String ICON_IMG_KEY = "icon_img";
static final String LINK_KARMA_KEY = "link_karma";
static final String COMMENT_KARMA_KEY = "comment_karma";
+ static final String DISPLAY_NAME = "display_name";
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/MainActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/MainActivity.java
index ed792b2e..92b73aae 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/MainActivity.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/MainActivity.java
@@ -6,14 +6,13 @@ import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
-import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
-import android.view.Menu;
-import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
@@ -22,10 +21,13 @@ import com.android.volley.toolbox.Volley;
import com.bumptech.glide.Glide;
import com.bumptech.glide.RequestManager;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+
import de.hdodenhof.circleimageview.CircleImageView;
-public class MainActivity extends AppCompatActivity
- implements NavigationView.OnNavigationItemSelectedListener {
+public class MainActivity extends AppCompatActivity {
private String nameState = "NS";
private String profileImageUrlState = "PIUS";
@@ -36,6 +38,7 @@ public class MainActivity extends AppCompatActivity
private TextView mKarmaTextView;
private CircleImageView mProfileImageView;
private ImageView mBannerImageView;
+ private RecyclerView mSubscribedSubredditRecyclerView;
private Fragment mFragment;
private RequestManager glide;
@@ -46,6 +49,8 @@ public class MainActivity extends AppCompatActivity
private String mKarma;
private boolean mFetchUserInfoSuccess;
+ private ArrayList<SubredditData> mSubredditData;
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -59,15 +64,15 @@ public class MainActivity extends AppCompatActivity
drawer.addDrawerListener(toggle);
toggle.syncState();
- NavigationView navigationView = findViewById(R.id.nav_view);
- navigationView.setNavigationItemSelectedListener(this);
-
- View header = navigationView.getHeaderView(0);
+ View header = findViewById(R.id.nav_header_main_activity);
mNameTextView = header.findViewById(R.id.name_text_view_nav_header_main);
mKarmaTextView = header.findViewById(R.id.karma_text_view_nav_header_main);
mProfileImageView = header.findViewById(R.id.profile_image_view_nav_header_main);
mBannerImageView = header.findViewById(R.id.banner_image_view_nav_header_main);
+ mSubscribedSubredditRecyclerView = findViewById(R.id.subscribed_subreddit_recycler_view_main_activity);
+ mSubscribedSubredditRecyclerView.setLayoutManager(new LinearLayoutManager(this));
+
mName = getSharedPreferences(SharedPreferencesUtils.USER_INFO_FILE_KEY, Context.MODE_PRIVATE).getString(SharedPreferencesUtils.USER_KEY, "");
mProfileImageUrl = getSharedPreferences(SharedPreferencesUtils.USER_INFO_FILE_KEY, Context.MODE_PRIVATE).getString(SharedPreferencesUtils.PROFILE_IMAGE_URL_KEY, "");
mBannerImageUrl = getSharedPreferences(SharedPreferencesUtils.USER_INFO_FILE_KEY, Context.MODE_PRIVATE).getString(SharedPreferencesUtils.BANNER_IMAGE_URL_KEY, "");
@@ -102,7 +107,7 @@ public class MainActivity extends AppCompatActivity
new FetchUserInfo(this, Volley.newRequestQueue(this)).queryUserInfo(new FetchUserInfo.FetchUserInfoListener() {
@Override
public void onFetchUserInfoSuccess(String response) {
- new ParseUserInfo().parseUserInfo(MainActivity.this, response, new ParseUserInfo.ParseUserInfoListener() {
+ new ParseUserInfo().parseUserInfo(response, new ParseUserInfo.ParseUserInfoListener() {
@Override
public void onParseUserInfoSuccess(String name, String profileImageUrl, String bannerImageUrl, int karma) {
mNameTextView.setText(name);
@@ -142,6 +147,26 @@ public class MainActivity extends AppCompatActivity
}
}, 1);
}
+ new FetchSubscribedSubreddits(this, Volley.newRequestQueue(this), new ArrayList<SubredditData>())
+ .fetchSubscribedSubreddits(new FetchSubscribedSubreddits.FetchSubscribedSubredditsListener() {
+ @Override
+ public void onFetchSubscribedSubredditsSuccess(ArrayList<SubredditData> subredditData) {
+ Collections.sort(subredditData, new Comparator<SubredditData>() {
+ @Override
+ public int compare(SubredditData subredditData, SubredditData t1) {
+ return subredditData.getName().toLowerCase().compareTo(t1.getName().toLowerCase());
+ }
+ });
+ mSubredditData = subredditData;
+ mSubscribedSubredditRecyclerView.setAdapter(new SubscribedSubredditRecyclerViewAdapter(
+ MainActivity.this, mSubredditData));
+ }
+
+ @Override
+ public void onFetchSubscribedSubredditsFail() {
+
+ }
+ }, 1);
}
@Override
@@ -155,53 +180,6 @@ public class MainActivity extends AppCompatActivity
}
@Override
- public boolean onCreateOptionsMenu(Menu menu) {
- // Inflate the menu; this adds items to the action bar if it is present.
- getMenuInflater().inflate(R.menu.main, menu);
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- // Handle action bar item clicks here. The action bar will
- // automatically handle clicks on the Home/Up button, so long
- // as you specify a parent activity in AndroidManifest.xml.
- int id = item.getItemId();
-
- //noinspection SimplifiableIfStatement
- if (id == R.id.action_settings) {
- return true;
- }
-
- return super.onOptionsItemSelected(item);
- }
-
- @SuppressWarnings("StatementWithEmptyBody")
- @Override
- public boolean onNavigationItemSelected(MenuItem item) {
- // Handle navigation view item clicks here.
- int id = item.getItemId();
-
- if (id == R.id.nav_camera) {
- // Handle the camera action
- } else if (id == R.id.nav_gallery) {
-
- } else if (id == R.id.nav_slideshow) {
-
- } else if (id == R.id.nav_manage) {
-
- } else if (id == R.id.nav_share) {
-
- } else if (id == R.id.nav_send) {
-
- }
-
- DrawerLayout drawer = findViewById(R.id.drawer_layout);
- drawer.closeDrawer(GravityCompat.START);
- return true;
- }
-
- @Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if(mFragment != null) {
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/ParseBestPost.java b/app/src/main/java/ml/docilealligator/infinityforreddit/ParseBestPost.java
index 3c1121a6..a0e93404 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/ParseBestPost.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/ParseBestPost.java
@@ -59,9 +59,6 @@ class ParseBestPost {
protected Void doInBackground(Void... voids) {
try {
JSONArray allData = jsonResponse.getJSONObject(JSONUtils.DATA_KEY).getJSONArray(JSONUtils.CHILDREN_KEY);
- if(bestPostData == null) {
- bestPostData = new ArrayList<>();
- }
lastItem = jsonResponse.getJSONObject(JSONUtils.DATA_KEY).getString(JSONUtils.AFTER_KEY);
for(int i = 0; i < allData.length(); i++) {
@@ -199,106 +196,4 @@ class ParseBestPost {
}
}
}
-
- /*private void parseData(JSONObject data, String permalink, ArrayList<BestPostData> bestPostData,
- String id, String fullName, String subredditName, String formattedPostTime, String title,
- int score, int voteType, boolean nsfw, int i) throws JSONException {
- boolean isVideo = data.getBoolean(JSONUtils.IS_VIDEO_KEY);
- if(!data.has(JSONUtils.PREVIEW_KEY)) {
- String url = data.getString(JSONUtils.URL_KEY);
- if(url.contains(permalink)) {
- //Text post
- Log.i("text", Integer.toString(i));
- int postType = BestPostData.TEXT_TYPE;
- BestPostData postData = new BestPostData(id, fullName, subredditName, formattedPostTime, title, permalink, score, postType, voteType, nsfw);
- postData.setSelfText(data.getString(JSONUtils.SELF_TEXT_KEY).trim());
- bestPostData.add(postData);
- } else {
- //No preview link post
- Log.i("no preview link", Integer.toString(i));
- int postType = BestPostData.NO_PREVIEW_LINK_TYPE;
- BestPostData post = new BestPostData(id, fullName, subredditName, formattedPostTime, title, permalink, score, postType, voteType, nsfw);
- post.setLinkUrl(url);
- bestPostData.add(post);
- }
- } else if (!isVideo) {
- JSONObject variations = data.getJSONObject(JSONUtils.PREVIEW_KEY).getJSONArray(JSONUtils.IMAGES_KEY).getJSONObject(0);
- String previewUrl = variations.getJSONObject(JSONUtils.SOURCE_KEY).getString(JSONUtils.URL_KEY);
- if (variations.has(JSONUtils.VARIANTS_KEY)) {
- if (variations.getJSONObject(JSONUtils.VARIANTS_KEY).has(JSONUtils.MP4_KEY)) {
- //Gif video
- Log.i("gif video", Integer.toString(i));
- int postType = BestPostData.GIF_VIDEO_TYPE;
- String videoUrl = variations.getJSONObject(JSONUtils.VARIANTS_KEY).getJSONObject(JSONUtils.MP4_KEY).getJSONObject(JSONUtils.SOURCE_KEY).getString(JSONUtils.URL_KEY);
-
- BestPostData post = new BestPostData(id, fullName, subredditName, formattedPostTime, title, previewUrl, permalink, score, postType, voteType, nsfw);
- post.setVideoUrl(videoUrl);
- bestPostData.add(post);
- } else if (variations.getJSONObject(JSONUtils.VARIANTS_KEY).has(JSONUtils.GIF_KEY)) {
- //Gif post
- Log.i("gif", Integer.toString(i));
- int postType = BestPostData.GIF_TYPE;
- String gifUrl = variations.getJSONObject(JSONUtils.VARIANTS_KEY).getJSONObject(JSONUtils.GIF_KEY).getJSONObject(JSONUtils.SOURCE_KEY).getString(JSONUtils.URL_KEY);
-
- BestPostData post = new BestPostData(id, fullName, subredditName, formattedPostTime, title, previewUrl, permalink, score, postType, voteType, nsfw);
- post.setGifUrl(gifUrl);
- bestPostData.add(post);
- } else {
- if(data.getJSONObject(JSONUtils.PREVIEW_KEY).has(JSONUtils.REDDIT_VIDEO_PREVIEW_KEY)) {
- //Gif link post
- Log.i("gif link", Integer.toString(i));
- int postType = BestPostData.LINK_TYPE;
- String gifUrl = data.getString(JSONUtils.URL_KEY);
- BestPostData gifLinkPostData = new BestPostData(id, fullName, subredditName, formattedPostTime, title, previewUrl, permalink, score, postType, voteType, nsfw);
- gifLinkPostData.setLinkUrl(gifUrl);
- bestPostData.add(gifLinkPostData);
- } else {
- if(!data.isNull(JSONUtils.MEDIA_KEY)) {
- //Video link post
- Log.i("video link", Integer.toString(i));
- int postType = BestPostData.LINK_TYPE;
- String videoUrl = data.getString(JSONUtils.URL_KEY);
- BestPostData videoLinkPostData = new BestPostData(id, fullName, subredditName, formattedPostTime, title, previewUrl, permalink, score, postType, voteType, nsfw);
- videoLinkPostData.setLinkUrl(videoUrl);
- bestPostData.add(videoLinkPostData);
- } else {
- if(data.getBoolean(JSONUtils.IS_REDDIT_MEDIA_DOMAIN)) {
- //Image post
- Log.i("image", Integer.toString(i));
- int postType = BestPostData.IMAGE_TYPE;
- bestPostData.add(new BestPostData(id, fullName, subredditName, formattedPostTime, title, previewUrl, permalink, score, postType, voteType, nsfw));
- } else {
- //Link post
- Log.i("link", Integer.toString(i));
- int postType = BestPostData.LINK_TYPE;
- String linkUrl = data.getString(JSONUtils.URL_KEY);
- BestPostData linkPostData = new BestPostData(id, fullName, subredditName, formattedPostTime, title, previewUrl, permalink, score, postType, voteType, nsfw);
- linkPostData.setLinkUrl(linkUrl);
- bestPostData.add(linkPostData);
- }
- }
- }
- }
- } else {
- //Image post
- Toast.makeText(mContext, "Fixed post" + Integer.toString(i), Toast.LENGTH_SHORT).show();
- Log.i("fixed image", Integer.toString(i));
- int postType = BestPostData.IMAGE_TYPE;
- bestPostData.add(new BestPostData(id, fullName, subredditName, formattedPostTime, title, previewUrl, permalink, score, postType, voteType, nsfw));
- }
- } else {
- //Video post
- Log.i("video", Integer.toString(i));
- JSONObject redditVideoObject = data.getJSONObject(JSONUtils.MEDIA_KEY).getJSONObject(JSONUtils.REDDIT_VIDEO_KEY);
- int postType = BestPostData.VIDEO_TYPE;
- String videoUrl = redditVideoObject.getString(JSONUtils.DASH_URL_KEY);
-
- String videoPreviewUrl = data.getJSONObject(JSONUtils.PREVIEW_KEY).getJSONArray(JSONUtils.IMAGES_KEY).getJSONObject(0).getJSONObject(JSONUtils.SOURCE_KEY).getString(JSONUtils.URL_KEY);
-
- BestPostData videoPostData = new BestPostData(id, fullName, subredditName, formattedPostTime, title, videoPreviewUrl, permalink, score, postType, voteType, nsfw);
- videoPostData.setVideoUrl(videoUrl);
-
- bestPostData.add(videoPostData);
- }
- }*/
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/ParseSubscribedSubreddits.java b/app/src/main/java/ml/docilealligator/infinityforreddit/ParseSubscribedSubreddits.java
index 62b5eee9..24d83b40 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/ParseSubscribedSubreddits.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/ParseSubscribedSubreddits.java
@@ -1,4 +1,72 @@
package ml.docilealligator.infinityforreddit;
+import android.os.AsyncTask;
+import android.util.Log;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.util.ArrayList;
+
class ParseSubscribedSubreddits {
+ interface ParseSubscribedSubredditsListener {
+ void onParseSubscribedSubredditsSuccess(ArrayList<SubredditData> subredditData, String lastItem);
+ void onParseSubscribedSubredditsFail();
+ }
+
+ private ParseSubscribedSubredditsListener mParseSubscribedSubredditsListener;
+
+ void parseSubscribedSubreddits(String response, ArrayList<SubredditData> subredditData,
+ ParseSubscribedSubredditsListener parseSubscribedSubredditsListener) {
+ mParseSubscribedSubredditsListener = parseSubscribedSubredditsListener;
+ new ParseSubscribedSubredditsAsyncTask(response, subredditData).execute();
+ }
+
+ private class ParseSubscribedSubredditsAsyncTask extends AsyncTask<Void, Void, Void> {
+ private JSONObject jsonResponse;
+ private boolean parseFailed;
+ private String lastItem;
+ private ArrayList<SubredditData> subredditData;
+ private ArrayList<SubredditData> newSubredditData;
+
+ ParseSubscribedSubredditsAsyncTask(String response, ArrayList<SubredditData> subredditData){
+ try {
+ jsonResponse = new JSONObject(response);
+ parseFailed = false;
+ this.subredditData = subredditData;
+ newSubredditData = new ArrayList<>();
+ } catch (JSONException e) {
+ Log.i("user info json error", e.getMessage());
+ mParseSubscribedSubredditsListener.onParseSubscribedSubredditsFail();
+ }
+ }
+
+ @Override
+ protected Void doInBackground(Void... voids) {
+ try {
+ JSONArray children = jsonResponse.getJSONObject(JSONUtils.DATA_KEY).getJSONArray(JSONUtils.CHILDREN_KEY);
+ for(int i = 0; i < children.length(); i++) {
+ String name = children.getJSONObject(i).getJSONObject(JSONUtils.DATA_KEY).getString(JSONUtils.DISPLAY_NAME);
+ String iconUrl = children.getJSONObject(i).getJSONObject(JSONUtils.DATA_KEY).getString(JSONUtils.ICON_IMG_KEY);
+ newSubredditData.add(new SubredditData(name, iconUrl));
+ }
+ lastItem = jsonResponse.getJSONObject(JSONUtils.DATA_KEY).getString(JSONUtils.AFTER_KEY);
+ } catch (JSONException e) {
+ parseFailed = true;
+ Log.i("parse comment error", e.getMessage());
+ }
+ return null;
+ }
+
+ @Override
+ protected void onPostExecute(Void aVoid) {
+ if(!parseFailed) {
+ subredditData.addAll(newSubredditData);
+ mParseSubscribedSubredditsListener.onParseSubscribedSubredditsSuccess(subredditData, lastItem);
+ } else {
+ mParseSubscribedSubredditsListener.onParseSubscribedSubredditsFail();
+ }
+ }
+ }
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/ParseUserInfo.java b/app/src/main/java/ml/docilealligator/infinityforreddit/ParseUserInfo.java
index 49ff057b..2efb8ff8 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/ParseUserInfo.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/ParseUserInfo.java
@@ -1,6 +1,5 @@
package ml.docilealligator.infinityforreddit;
-import android.content.Context;
import android.os.AsyncTask;
import android.text.Html;
import android.util.Log;
@@ -14,13 +13,11 @@ class ParseUserInfo {
void onParseUserInfoFail();
}
- private Context mContext;
private ParseUserInfoListener mParseUserInfoListener;
- void parseUserInfo(Context context, String response, ParseUserInfoListener parseUserInfoListener) {
+ void parseUserInfo(String response, ParseUserInfoListener parseUserInfoListener) {
mParseUserInfoListener = parseUserInfoListener;
- mContext = context;
- new ParseUserInfo.ParseUserInfoAsyncTask(response).execute();
+ new ParseUserInfoAsyncTask(response).execute();
}
private class ParseUserInfoAsyncTask extends AsyncTask<Void, Void, Void> {
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/RedditUtils.java b/app/src/main/java/ml/docilealligator/infinityforreddit/RedditUtils.java
index 6d421c09..5fefa9e6 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/RedditUtils.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/RedditUtils.java
@@ -14,9 +14,12 @@ class RedditUtils {
static final String ACQUIRE_ACCESS_TOKEN_URL = "https://www.reddit.com/api/v1/access_token";
static final String OAUTH_API_BASE_URI = "https://oauth.reddit.com";
static final String API_BASE_URI = "https://www.reddit.com";
- static final String BEST_POST_SUFFIX = "/best?raw_json=1";
+ static final String RAW_JSON_KEY ="raw_json";
+ static final String RAW_JSON_VALUE = "1";
+ static final String BEST_POST_SUFFIX = "/best";
static final String VOTE_SUFFIX = "/api/vote";
- static final String USER_INFO_SUFFIX = "/api/v1/me?raw_json=1";
+ static final String USER_INFO_SUFFIX = "/api/v1/me";
+ static final String SUBSCRIBED_SUBREDDITS = "/subreddits/mine/subscriber";
static final String CLIENT_ID_KEY = "client_id";
static final String CLIENT_ID = "";
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditData.java b/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditData.java
index 418fa4de..dcf0cdaf 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditData.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/SubredditData.java
@@ -1,4 +1,50 @@
package ml.docilealligator.infinityforreddit;
-class SubredditData {
+import android.os.Parcel;
+import android.os.Parcelable;
+
+class SubredditData implements Parcelable {
+ private String name;
+ private String iconUrl;
+
+ SubredditData(String name, String iconUrl) {
+ this.name = name;
+ this.iconUrl = iconUrl;
+ }
+
+ protected SubredditData(Parcel in) {
+ name = in.readString();
+ iconUrl = in.readString();
+ }
+
+ public static final Creator<SubredditData> CREATOR = new Creator<SubredditData>() {
+ @Override
+ public SubredditData createFromParcel(Parcel in) {
+ return new SubredditData(in);
+ }
+
+ @Override
+ public SubredditData[] newArray(int size) {
+ return new SubredditData[size];
+ }
+ };
+
+ public String getName() {
+ return name;
+ }
+
+ public String getIconUrl() {
+ return iconUrl;
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel parcel, int i) {
+ parcel.writeString(name);
+ parcel.writeString(iconUrl);
+ }
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/SubscribedSubredditRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/SubscribedSubredditRecyclerViewAdapter.java
index 463e14d7..73f40a40 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/SubscribedSubredditRecyclerViewAdapter.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/SubscribedSubredditRecyclerViewAdapter.java
@@ -1,4 +1,65 @@
package ml.docilealligator.infinityforreddit;
-class SubscribedSubredditRecyclerViewAdapter {
+import android.content.Context;
+import android.support.annotation.NonNull;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.RequestManager;
+
+import java.util.ArrayList;
+
+import de.hdodenhof.circleimageview.CircleImageView;
+
+class SubscribedSubredditRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
+ Context mContext;
+ ArrayList<SubredditData> mSubredditData;
+ RequestManager glide;
+
+ SubscribedSubredditRecyclerViewAdapter(Context context, ArrayList<SubredditData> subredditData) {
+ mContext = context;
+ mSubredditData = subredditData;
+ glide = Glide.with(context);
+ }
+
+ @NonNull
+ @Override
+ public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
+ return new SubredditViewHolder(LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_subscribed_subreddit, viewGroup, false));
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
+ if(!mSubredditData.get(i).getIconUrl().equals("")) {
+ glide.load(mSubredditData.get(i).getIconUrl()).into(((SubredditViewHolder) viewHolder).iconCircleImageView);
+ } else {
+ glide.load(R.drawable.subreddit_default_icon).into(((SubredditViewHolder) viewHolder).iconCircleImageView);
+ }
+ ((SubredditViewHolder) viewHolder).subredditNameTextView.setText(mSubredditData.get(i).getName());
+ }
+
+ @Override
+ public int getItemCount() {
+ return mSubredditData.size();
+ }
+
+ @Override
+ public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) {
+ glide.clear(((SubredditViewHolder) holder).iconCircleImageView);
+ }
+
+ private class SubredditViewHolder extends RecyclerView.ViewHolder {
+ private CircleImageView iconCircleImageView;
+ private TextView subredditNameTextView;
+
+ public SubredditViewHolder(View itemView) {
+ super(itemView);
+ iconCircleImageView = itemView.findViewById(R.id.subreddit_icon_circle_image_view_item_subscribed_subreddit);
+ subredditNameTextView = itemView.findViewById(R.id.subreddit_name_text_view_item_subscribed_subreddit);
+ }
+ }
}
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index db65bf75..8d43bd79 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -18,9 +18,59 @@
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
- android:fitsSystemWindows="true"
- app:headerLayout="@layout/nav_header_main"
- app:menu="@menu/activity_main_drawer" />
+ android:fitsSystemWindows="true">
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <include
+ android:id="@+id/nav_header_main_activity"
+ layout="@layout/nav_header_main" />
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:padding="16dp"
+ android:clickable="true"
+ android:focusable="true"
+ android:background="?attr/selectableItemBackground">
+
+ <ImageView
+ android:layout_width="24dp"
+ android:layout_height="24dp"
+ android:layout_marginEnd="32dp"
+ android:layout_gravity="center_vertical"
+ android:src="@drawable/ic_account_circle_grey_24dp"/>
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/profile"
+ android:textColor="@android:color/black"
+ android:layout_gravity="center_vertical"/>
+
+ </LinearLayout>
+
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="1dp"
+ android:background="#E0E0E0"/>
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/subscriptions"
+ android:layout_margin="16dp"/>
+
+ <android.support.v7.widget.RecyclerView
+ android:id="@+id/subscribed_subreddit_recycler_view_main_activity"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" />
+
+ </LinearLayout>
+
+ </android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>
diff --git a/app/src/main/res/layout/item_subscribed_subreddit.xml b/app/src/main/res/layout/item_subscribed_subreddit.xml
index d8fb3247..3795aa62 100644
--- a/app/src/main/res/layout/item_subscribed_subreddit.xml
+++ b/app/src/main/res/layout/item_subscribed_subreddit.xml
@@ -1,6 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
-<android.support.constraint.ConstraintLayout
+<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
- android:layout_height="match_parent">
+ android:layout_height="wrap_content"
+ android:padding="16dp"
+ android:clickable="true"
+ android:focusable="true"
+ android:background="?attr/selectableItemBackground">
-</android.support.constraint.ConstraintLayout> \ No newline at end of file
+ <de.hdodenhof.circleimageview.CircleImageView
+ android:id="@+id/subreddit_icon_circle_image_view_item_subscribed_subreddit"
+ android:layout_width="24dp"
+ android:layout_height="24dp"
+ android:layout_gravity="center_vertical"
+ android:layout_marginEnd="32dp"/>
+
+ <TextView
+ android:id="@+id/subreddit_name_text_view_item_subscribed_subreddit"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textColor="@android:color/black"
+ android:layout_gravity="center_vertical"/>
+
+</LinearLayout> \ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 2f36e7c0..38b51769 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -15,4 +15,7 @@
<string name="nsfw">NSFW</string>
<string name="karma_info">Karma: %1$d</string>
+
+ <string name="profile">Profile</string>
+ <string name="subscriptions">Subscriptions</string>
</resources>