aboutsummaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorAlex Ning <chineseperson5@gmail.com>2019-08-14 02:57:41 +0000
committerAlex Ning <chineseperson5@gmail.com>2019-08-14 02:57:41 +0000
commita62f47aacb443df4f680ffb1321e84b7f54966f3 (patch)
treefa2a878b56c972280d72e8e946bb117be37a219b /app
parent6872faa93dabeb37d5899dea7126c85976383388 (diff)
downloadinfinity-for-reddit-a62f47aacb443df4f680ffb1321e84b7f54966f3.tar
infinity-for-reddit-a62f47aacb443df4f680ffb1321e84b7f54966f3.tar.gz
infinity-for-reddit-a62f47aacb443df4f680ffb1321e84b7f54966f3.tar.bz2
infinity-for-reddit-a62f47aacb443df4f680ffb1321e84b7f54966f3.tar.lz
infinity-for-reddit-a62f47aacb443df4f680ffb1321e84b7f54966f3.tar.xz
infinity-for-reddit-a62f47aacb443df4f680ffb1321e84b7f54966f3.tar.zst
infinity-for-reddit-a62f47aacb443df4f680ffb1321e84b7f54966f3.zip
Edit flair for posts is now available.
Diffstat (limited to 'app')
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/FetchFlairs.java (renamed from app/src/main/java/ml/docilealligator/infinityforreddit/FetchFlairsInSubreddit.java)24
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/Flair.java70
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/FlairBottomSheetFragment.java22
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/FlairBottomSheetRecyclerViewAdapter.java8
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/JSONUtils.java1
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/ParsePost.java35
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/Post.java30
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/PostImageActivity.java13
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/PostLinkActivity.java13
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/PostTextActivity.java13
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/PostVideoActivity.java13
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/RedditAPI.java4
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/RedditUtils.java3
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/ViewPostDetailActivity.java41
-rw-r--r--app/src/main/res/menu/view_post_detail_activity.xml7
-rw-r--r--app/src/main/res/values/strings.xml3
16 files changed, 223 insertions, 77 deletions
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchFlairsInSubreddit.java b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchFlairs.java
index 4a04ee2c..073067d2 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/FetchFlairsInSubreddit.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/FetchFlairs.java
@@ -14,13 +14,13 @@ import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
-class FetchFlairsInSubreddit {
+class FetchFlairs {
interface FetchFlairsInSubredditListener {
- void fetchSuccessful(ArrayList<String> flairs);
+ void fetchSuccessful(ArrayList<Flair> flairs);
void fetchFailed();
}
- static void fetchFlairs(Retrofit oauthRetrofit, String accessToken, String subredditName, FetchFlairsInSubredditListener fetchFlairsInSubredditListener) {
+ static void fetchFlairsInSubreddit(Retrofit oauthRetrofit, String accessToken, String subredditName, FetchFlairsInSubredditListener fetchFlairsInSubredditListener) {
RedditAPI api = oauthRetrofit.create(RedditAPI.class);
Call<String> flairsCall = api.getFlairs(RedditUtils.getOAuthHeader(accessToken), subredditName);
@@ -30,7 +30,7 @@ class FetchFlairsInSubreddit {
if (response.isSuccessful()) {
new ParseFlairsAsyncTask(response.body(), new ParseFlairsAsyncTask.ParseFlairsAsyncTaskListener() {
@Override
- public void parseSuccessful(ArrayList<String> flairs) {
+ public void parseSuccessful(ArrayList<Flair> flairs) {
fetchFlairsInSubredditListener.fetchSuccessful(flairs);
}
@@ -54,9 +54,9 @@ class FetchFlairsInSubreddit {
});
}
- private static class ParseFlairsAsyncTask extends AsyncTask<Void, ArrayList<String>, ArrayList<String>> {
+ private static class ParseFlairsAsyncTask extends AsyncTask<Void, ArrayList<Flair>, ArrayList<Flair>> {
interface ParseFlairsAsyncTaskListener {
- void parseSuccessful(ArrayList<String> flairs);
+ void parseSuccessful(ArrayList<Flair> flairs);
void parseFailed();
}
@@ -69,12 +69,16 @@ class FetchFlairsInSubreddit {
}
@Override
- protected ArrayList<String> doInBackground(Void... voids) {
+ protected ArrayList<Flair> doInBackground(Void... voids) {
try {
JSONArray jsonArray = new JSONArray(response);
- ArrayList<String> flairs = new ArrayList<>();
+ ArrayList<Flair> flairs = new ArrayList<>();
for(int i = 0; i < jsonArray.length(); i++) {
- flairs.add(jsonArray.getJSONObject(i).getString(JSONUtils.TEXT_KEY));
+ String id = jsonArray.getJSONObject(i).getString(JSONUtils.ID_KEY);
+ String text = jsonArray.getJSONObject(i).getString(JSONUtils.TEXT_KEY);
+ boolean editable = jsonArray.getJSONObject(i).getBoolean(JSONUtils.TEXT_EDITABLE_KEY);
+
+ flairs.add(new Flair(id, text, editable));
}
return flairs;
} catch (JSONException e) {
@@ -84,7 +88,7 @@ class FetchFlairsInSubreddit {
}
@Override
- protected void onPostExecute(ArrayList<String> strings) {
+ protected void onPostExecute(ArrayList<Flair> strings) {
if(strings != null) {
parseFlairsAsyncTaskListener.parseSuccessful(strings);
} else {
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Flair.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Flair.java
new file mode 100644
index 00000000..e60566ce
--- /dev/null
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Flair.java
@@ -0,0 +1,70 @@
+package ml.docilealligator.infinityforreddit;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+class Flair implements Parcelable {
+ private String id;
+ private String text;
+ private boolean editable;
+
+ Flair(String id, String text, boolean editable) {
+ this.id = id;
+ this.text = text;
+ this.editable = editable;
+ }
+
+ protected Flair(Parcel in) {
+ id = in.readString();
+ text = in.readString();
+ editable = in.readByte() != 0;
+ }
+
+ public static final Creator<Flair> CREATOR = new Creator<Flair>() {
+ @Override
+ public Flair createFromParcel(Parcel in) {
+ return new Flair(in);
+ }
+
+ @Override
+ public Flair[] newArray(int size) {
+ return new Flair[size];
+ }
+ };
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getText() {
+ return text;
+ }
+
+ public void setText(String text) {
+ this.text = text;
+ }
+
+ public boolean isEditable() {
+ return editable;
+ }
+
+ public void setEditable(boolean editable) {
+ this.editable = editable;
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel parcel, int i) {
+ parcel.writeString(id);
+ parcel.writeString(text);
+ parcel.writeByte((byte) (editable ? 1 : 0));
+ }
+}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/FlairBottomSheetFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/FlairBottomSheetFragment.java
index bd8af127..6a9987cf 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/FlairBottomSheetFragment.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/FlairBottomSheetFragment.java
@@ -11,6 +11,7 @@ import android.view.ViewGroup;
import android.widget.ProgressBar;
import android.widget.TextView;
+import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -33,7 +34,7 @@ import retrofit2.Retrofit;
public class FlairBottomSheetFragment extends BottomSheetDialogFragment {
interface FlairSelectionCallback {
- void flairSelected(String flair);
+ void flairSelected(Flair flair);
}
static final String EXTRA_ACCESS_TOKEN = "EAT";
@@ -53,13 +54,17 @@ public class FlairBottomSheetFragment extends BottomSheetDialogFragment {
@Named("oauth")
Retrofit mOauthRetrofit;
+ @Inject
+ @Named("no_oauth")
+ Retrofit mRetrofit;
+
public FlairBottomSheetFragment() {
// Required empty public constructor
}
@Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_flair_bottom_sheet, container, false);
@@ -74,7 +79,11 @@ public class FlairBottomSheetFragment extends BottomSheetDialogFragment {
rootView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
}
- mAdapter = new FlairBottomSheetRecyclerViewAdapter(flair -> ((FlairSelectionCallback) mAcitivity).flairSelected(flair));
+ mAdapter = new FlairBottomSheetRecyclerViewAdapter(flair -> {
+ ((FlairSelectionCallback) mAcitivity).flairSelected(flair);
+ dismiss();
+ });
+
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
recyclerView.setAdapter(mAdapter);
@@ -87,10 +96,10 @@ public class FlairBottomSheetFragment extends BottomSheetDialogFragment {
}
private void fetchFlairs() {
- FetchFlairsInSubreddit.fetchFlairs(mOauthRetrofit, mAccessToken,
- mSubredditName, new FetchFlairsInSubreddit.FetchFlairsInSubredditListener() {
+ FetchFlairs.fetchFlairsInSubreddit(mOauthRetrofit, mAccessToken,
+ mSubredditName, new FetchFlairs.FetchFlairsInSubredditListener() {
@Override
- public void fetchSuccessful(ArrayList<String> flairs) {
+ public void fetchSuccessful(ArrayList<Flair> flairs) {
progressBar.setVisibility(View.GONE);
if(flairs == null || flairs.size() == 0) {
errorTextView.setVisibility(View.VISIBLE);
@@ -110,5 +119,4 @@ public class FlairBottomSheetFragment extends BottomSheetDialogFragment {
}
});
}
-
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/FlairBottomSheetRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/FlairBottomSheetRecyclerViewAdapter.java
index 37e8d15b..f3cf3328 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/FlairBottomSheetRecyclerViewAdapter.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/FlairBottomSheetRecyclerViewAdapter.java
@@ -15,10 +15,10 @@ import butterknife.ButterKnife;
class FlairBottomSheetRecyclerViewAdapter extends RecyclerView.Adapter<FlairBottomSheetRecyclerViewAdapter.FlairViewHolder> {
interface ItemClickListener {
- void onClick(String flair);
+ void onClick(Flair flair);
}
- private ArrayList<String> flairs;
+ private ArrayList<Flair> flairs;
private ItemClickListener itemClickListener;
FlairBottomSheetRecyclerViewAdapter(ItemClickListener itemClickListener) {
@@ -33,7 +33,7 @@ class FlairBottomSheetRecyclerViewAdapter extends RecyclerView.Adapter<FlairBott
@Override
public void onBindViewHolder(@NonNull FlairViewHolder holder, int position) {
- holder.flairTextView.setText(flairs.get(holder.getAdapterPosition()));
+ holder.flairTextView.setText(flairs.get(holder.getAdapterPosition()).getText());
}
@Override
@@ -41,7 +41,7 @@ class FlairBottomSheetRecyclerViewAdapter extends RecyclerView.Adapter<FlairBott
return flairs == null ? 0 : flairs.size();
}
- void changeDataset(ArrayList<String> flairs) {
+ void changeDataset(ArrayList<Flair> flairs) {
this.flairs = flairs;
notifyDataSetChanged();
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/JSONUtils.java b/app/src/main/java/ml/docilealligator/infinityforreddit/JSONUtils.java
index d1a32d2d..78e3659c 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/JSONUtils.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/JSONUtils.java
@@ -72,4 +72,5 @@ public class JSONUtils {
static final String SHORT_NAME_KEY = "short_name";
static final String DESCRIPTION_HTML_KEY = "description_html";
static final String ARCHIVED_KEY = "archived";
+ static final String TEXT_EDITABLE_KEY = "text_editable";
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/ParsePost.java b/app/src/main/java/ml/docilealligator/infinityforreddit/ParsePost.java
index 7d71e152..cce48b19 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/ParsePost.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/ParsePost.java
@@ -148,6 +148,7 @@ class ParsePost {
private static Post parseBasicData(JSONObject data, Locale locale, int i) throws JSONException {
String id = data.getString(JSONUtils.ID_KEY);
String fullName = data.getString(JSONUtils.NAME_KEY);
+ String subredditName = data.getString(JSONUtils.SUBREDDIT_KEY);
String subredditNamePrefixed = data.getString(JSONUtils.SUBREDDIT_NAME_PREFIX_KEY);
String author = data.getString(JSONUtils.AUTHOR_KEY);
long postTime = data.getLong(JSONUtils.CREATED_UTC_KEY) * 1000;
@@ -191,22 +192,22 @@ class ParsePost {
if(data.has(JSONUtils.CROSSPOST_PARENT_LIST)) {
//Cross post
data = data.getJSONArray(JSONUtils.CROSSPOST_PARENT_LIST).getJSONObject(0);
- return parseData(data, permalink, id, fullName, subredditNamePrefixed,
+ return parseData(data, permalink, id, fullName, subredditName, subredditNamePrefixed,
author, formattedPostTime, title, previewUrl, previewWidth, previewHeight,
score, voteType, gilded, flair, spoiler, nsfw, stickied, archived, true, i);
} else {
- return parseData(data, permalink, id, fullName, subredditNamePrefixed,
+ return parseData(data, permalink, id, fullName, subredditName, subredditNamePrefixed,
author, formattedPostTime, title, previewUrl, previewWidth, previewHeight,
score, voteType, gilded, flair, spoiler, nsfw, stickied, archived, false, i);
}
}
private static Post parseData(JSONObject data, String permalink, String id, String fullName,
- String subredditNamePrefixed, String author, String formattedPostTime,
- String title, String previewUrl, int previewWidth, int previewHeight,
- int score, int voteType, int gilded, String flair, boolean spoiler,
- boolean nsfw, boolean stickied, boolean archived, boolean isCrosspost,
- int i) throws JSONException {
+ String subredditName, String subredditNamePrefixed, String author,
+ String formattedPostTime, String title, String previewUrl, int previewWidth,
+ int previewHeight, int score, int voteType, int gilded, String flair,
+ boolean spoiler, boolean nsfw, boolean stickied, boolean archived,
+ boolean isCrosspost, int i) throws JSONException {
Post post;
boolean isVideo = data.getBoolean(JSONUtils.IS_VIDEO_KEY);
@@ -217,7 +218,7 @@ class ParsePost {
//Text post
Log.i("text", Integer.toString(i));
int postType = Post.TEXT_TYPE;
- post = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime,
+ post = new Post(id, fullName, subredditName, subredditNamePrefixed, author, formattedPostTime,
title, permalink, score, postType, voteType, gilded, flair, spoiler, nsfw,
stickied, archived, isCrosspost);
if(data.isNull(JSONUtils.SELFTEXT_KEY)) {
@@ -229,7 +230,7 @@ class ParsePost {
//No preview link post
Log.i("no preview link", Integer.toString(i));
int postType = Post.NO_PREVIEW_LINK_TYPE;
- post = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime,
+ post = new Post(id, fullName, subredditName, subredditNamePrefixed, author, formattedPostTime,
title, previewUrl, url, permalink, score, postType,
voteType, gilded, flair, spoiler, nsfw, stickied, archived, isCrosspost);
if(data.isNull(JSONUtils.SELFTEXT_KEY)) {
@@ -251,7 +252,7 @@ class ParsePost {
int postType = Post.VIDEO_TYPE;
String videoUrl = Html.fromHtml(redditVideoObject.getString(JSONUtils.DASH_URL_KEY)).toString();
- post = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime,
+ post = new Post(id, fullName, subredditName, subredditNamePrefixed, author, formattedPostTime,
title, previewUrl, permalink, score, postType, voteType,
gilded, flair, spoiler, nsfw, stickied, archived, isCrosspost, true);
@@ -268,7 +269,7 @@ class ParsePost {
String videoUrl = Html.fromHtml(variations.getJSONObject(JSONUtils.VARIANTS_KEY).getJSONObject(JSONUtils.MP4_KEY).getJSONObject(JSONUtils.SOURCE_KEY).getString(JSONUtils.URL_KEY)).toString();
String gifDownloadUrl = Html.fromHtml(variations.getJSONObject(JSONUtils.VARIANTS_KEY).getJSONObject(JSONUtils.GIF_KEY).getJSONObject(JSONUtils.SOURCE_KEY).getString(JSONUtils.URL_KEY)).toString();
- post = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime, title,
+ post = new Post(id, fullName, subredditName, subredditNamePrefixed, author, formattedPostTime, title,
previewUrl, permalink, score, postType, voteType,
gilded, flair, spoiler, nsfw, stickied, archived, isCrosspost, false);
post.setPreviewWidth(previewWidth);
@@ -283,7 +284,7 @@ class ParsePost {
String videoUrl = Html.fromHtml(data.getJSONObject(JSONUtils.PREVIEW_KEY)
.getJSONObject(JSONUtils.REDDIT_VIDEO_PREVIEW_KEY).getString(JSONUtils.DASH_URL_KEY)).toString();
- post = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime, title,
+ post = new Post(id, fullName, subredditName, subredditNamePrefixed, author, formattedPostTime, title,
previewUrl, permalink, score, postType, voteType,
gilded, flair, spoiler, nsfw, stickied, archived, isCrosspost, true);
post.setPreviewWidth(previewWidth);
@@ -296,7 +297,7 @@ class ParsePost {
Log.i("image", Integer.toString(i));
int postType = Post.IMAGE_TYPE;
- post = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime,
+ post = new Post(id, fullName, subredditName, subredditNamePrefixed, author, formattedPostTime,
title, url, url, permalink, score, postType,
voteType, gilded, flair, spoiler, nsfw, stickied, archived, isCrosspost);
@@ -308,7 +309,7 @@ class ParsePost {
Log.i("text with image", Integer.toString(i));
int postType = Post.TEXT_TYPE;
- post = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime,
+ post = new Post(id, fullName, subredditName, subredditNamePrefixed, author, formattedPostTime,
title, permalink, score, postType, voteType, gilded, flair, spoiler,
nsfw, stickied, archived, isCrosspost);
@@ -325,7 +326,7 @@ class ParsePost {
Log.i("link", Integer.toString(i));
int postType = Post.LINK_TYPE;
- post = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime,
+ post = new Post(id, fullName, subredditName, subredditNamePrefixed, author, formattedPostTime,
title, previewUrl, url, permalink, score, postType, voteType, gilded,
flair, spoiler, nsfw, stickied, archived, isCrosspost);
if(data.isNull(JSONUtils.SELFTEXT_KEY)) {
@@ -345,7 +346,7 @@ class ParsePost {
Log.i("CP image", Integer.toString(i));
int postType = Post.IMAGE_TYPE;
- post = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime,
+ post = new Post(id, fullName, subredditName, subredditNamePrefixed, author, formattedPostTime,
title, previewUrl, url, permalink, score, postType,
voteType, gilded, flair, spoiler, nsfw, stickied, archived, isCrosspost);
post.setPreviewWidth(previewWidth);
@@ -355,7 +356,7 @@ class ParsePost {
Log.i("CP no preview link", Integer.toString(i));
int postType = Post.NO_PREVIEW_LINK_TYPE;
- post = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime, title,
+ post = new Post(id, fullName, subredditName, subredditNamePrefixed, author, formattedPostTime, title,
url, url, permalink, score, postType, voteType,
gilded, flair, spoiler, nsfw, stickied, archived, isCrosspost);
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/Post.java b/app/src/main/java/ml/docilealligator/infinityforreddit/Post.java
index 0e23d359..70413c41 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/Post.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/Post.java
@@ -17,6 +17,7 @@ class Post implements Parcelable {
private String id;
private String fullName;
+ private String subredditName;
private String subredditNamePrefixed;
private String subredditIconUrl;
private String author;
@@ -45,12 +46,13 @@ class Post implements Parcelable {
private boolean isDashVideo;
private boolean isDownloadableGifOrVideo;
- Post(String id, String fullName, String subredditNamePrefixed, String author, String postTime,
- String title, String previewUrl, String permalink, int score, int postType, int voteType,
- int gilded, String flair, boolean spoiler, boolean nsfw, boolean stickied, boolean archived,
- boolean isCrosspost, boolean isDashVideo) {
+ Post(String id, String fullName, String subredditName, String subredditNamePrefixed, String author,
+ String postTime, String title, String previewUrl, String permalink, int score, int postType,
+ int voteType, int gilded, String flair, boolean spoiler, boolean nsfw, boolean stickied,
+ boolean archived, boolean isCrosspost, boolean isDashVideo) {
this.id = id;
this.fullName = fullName;
+ this.subredditName = subredditName;
this.subredditNamePrefixed = subredditNamePrefixed;
this.author = author;
this.authorNamePrefixed = "u/" + author;
@@ -71,12 +73,13 @@ class Post implements Parcelable {
this.isDashVideo = isDashVideo;
}
- Post(String id, String fullName, String subredditNamePrefixed, String author, String postTime,
- String title, String previewUrl, String url, String permalink, int score, int postType,
- int voteType, int gilded, String flair, boolean spoiler, boolean nsfw, boolean stickied,
+ Post(String id, String fullName, String subredditName, String subredditNamePrefixed, String author,
+ String postTime, String title, String previewUrl, String url, String permalink, int score,
+ int postType, int voteType, int gilded, String flair, boolean spoiler, boolean nsfw, boolean stickied,
boolean archived, boolean isCrosspost) {
this.id = id;
this.fullName = fullName;
+ this.subredditName = subredditName;
this.subredditNamePrefixed = subredditNamePrefixed;
this.author = author;
this.authorNamePrefixed = "u/" + author;
@@ -97,11 +100,12 @@ class Post implements Parcelable {
this.isCrosspost = isCrosspost;
}
- Post(String id, String fullName, String subredditNamePrefixed, String author, String postTime,
- String title, String permalink, int score, int postType, int voteType, int gilded, String flair,
- boolean spoiler, boolean nsfw, boolean stickied, boolean archived, boolean isCrosspost) {
+ Post(String id, String fullName, String subredditName, String subredditNamePrefixed, String author,
+ String postTime, String title, String permalink, int score, int postType, int voteType, int gilded,
+ String flair, boolean spoiler, boolean nsfw, boolean stickied, boolean archived, boolean isCrosspost) {
this.id = id;
this.fullName = fullName;
+ this.subredditName = subredditName;
this.subredditNamePrefixed = subredditNamePrefixed;
this.author = author;
this.authorNamePrefixed = "u/" + author;
@@ -123,6 +127,7 @@ class Post implements Parcelable {
protected Post(Parcel in) {
id = in.readString();
fullName = in.readString();
+ subredditName = in.readString();
subredditNamePrefixed = in.readString();
subredditIconUrl = in.readString();
author = in.readString();
@@ -172,6 +177,10 @@ class Post implements Parcelable {
return fullName;
}
+ String getSubredditName() {
+ return subredditName;
+ }
+
String getSubredditNamePrefixed() {
return subredditNamePrefixed;
}
@@ -345,6 +354,7 @@ class Post implements Parcelable {
public void writeToParcel(Parcel parcel, int i) {
parcel.writeString(id);
parcel.writeString(fullName);
+ parcel.writeString(subredditName);
parcel.writeString(subredditNamePrefixed);
parcel.writeString(subredditIconUrl);
parcel.writeString(author);
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/PostImageActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/PostImageActivity.java
index 823fa1cd..7d2a999b 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/PostImageActivity.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/PostImageActivity.java
@@ -95,7 +95,7 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS
private boolean isPosting;
private Uri imageUri;
- private String flair = null;
+ private Flair flair;
private boolean isSpoiler = false;
private boolean isNSFW = false;
@@ -158,7 +158,7 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS
subredditIsUser = savedInstanceState.getBoolean(SUBREDDIT_IS_USER_STATE);
loadSubredditIconSuccessful = savedInstanceState.getBoolean(LOAD_SUBREDDIT_ICON_STATE);
isPosting = savedInstanceState.getBoolean(IS_POSTING_STATE);
- flair = savedInstanceState.getString(FLAIR_STATE);
+ flair = savedInstanceState.getParcelable(FLAIR_STATE);
isSpoiler = savedInstanceState.getBoolean(IS_SPOILER_STATE);
isNSFW = savedInstanceState.getBoolean(IS_NSFW_STATE);
@@ -182,7 +182,7 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS
}
if(flair != null) {
- flairTextView.setText(flair);
+ flairTextView.setText(flair.getText());
flairTextView.setBackgroundColor(getResources().getColor(R.color.backgroundColorPrimaryDark));
}
if(isSpoiler) {
@@ -415,7 +415,7 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS
}
outState.putBoolean(LOAD_SUBREDDIT_ICON_STATE, loadSubredditIconSuccessful);
outState.putBoolean(IS_POSTING_STATE, isPosting);
- outState.putString(FLAIR_STATE, flair);
+ outState.putParcelable(FLAIR_STATE, flair);
outState.putBoolean(IS_SPOILER_STATE, isSpoiler);
outState.putBoolean(IS_NSFW_STATE, isNSFW);
outState.putBoolean(NULL_ACCESS_TOKEN_STATE, mNullAccessToken);
@@ -466,11 +466,10 @@ public class PostImageActivity extends AppCompatActivity implements FlairBottomS
}
@Override
- public void flairSelected(String flair) {
+ public void flairSelected(Flair flair) {
this.flair = flair;
- flairTextView.setText(flair);
+ flairTextView.setText(flair.getText());
flairTextView.setBackgroundColor(getResources().getColor(R.color.backgroundColorPrimaryDark));
- flairSelectionBottomSheetFragment.dismiss();
}
@Subscribe
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/PostLinkActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/PostLinkActivity.java
index 4960b627..15b47cce 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/PostLinkActivity.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/PostLinkActivity.java
@@ -75,7 +75,7 @@ public class PostLinkActivity extends AppCompatActivity implements FlairBottomSh
private boolean loadSubredditIconSuccessful = true;
private boolean isPosting;
- private String flair = null;
+ private Flair flair;
private boolean isSpoiler = false;
private boolean isNSFW = false;
@@ -133,7 +133,7 @@ public class PostLinkActivity extends AppCompatActivity implements FlairBottomSh
subredditIsUser = savedInstanceState.getBoolean(SUBREDDIT_IS_USER_STATE);
loadSubredditIconSuccessful = savedInstanceState.getBoolean(LOAD_SUBREDDIT_ICON_STATE);
isPosting = savedInstanceState.getBoolean(IS_POSTING_STATE);
- flair = savedInstanceState.getString(FLAIR_STATE);
+ flair = savedInstanceState.getParcelable(FLAIR_STATE);
isSpoiler = savedInstanceState.getBoolean(IS_SPOILER_STATE);
isNSFW = savedInstanceState.getBoolean(IS_NSFW_STATE);
@@ -152,7 +152,7 @@ public class PostLinkActivity extends AppCompatActivity implements FlairBottomSh
}
if(flair != null) {
- flairTextView.setText(flair);
+ flairTextView.setText(flair.getText());
flairTextView.setBackgroundColor(getResources().getColor(R.color.backgroundColorPrimaryDark));
}
if(isSpoiler) {
@@ -335,7 +335,7 @@ public class PostLinkActivity extends AppCompatActivity implements FlairBottomSh
outState.putBoolean(SUBREDDIT_IS_USER_STATE, subredditIsUser);
outState.putBoolean(LOAD_SUBREDDIT_ICON_STATE, loadSubredditIconSuccessful);
outState.putBoolean(IS_POSTING_STATE, isPosting);
- outState.putString(FLAIR_STATE, flair);
+ outState.putParcelable(FLAIR_STATE, flair);
outState.putBoolean(IS_SPOILER_STATE, isSpoiler);
outState.putBoolean(IS_NSFW_STATE, isNSFW);
outState.putBoolean(NULL_ACCESS_TOKEN_STATE, mNullAccessToken);
@@ -371,11 +371,10 @@ public class PostLinkActivity extends AppCompatActivity implements FlairBottomSh
}
@Override
- public void flairSelected(String flair) {
+ public void flairSelected(Flair flair) {
this.flair = flair;
- flairTextView.setText(flair);
+ flairTextView.setText(flair.getText());
flairTextView.setBackgroundColor(getResources().getColor(R.color.backgroundColorPrimaryDark));
- flairSelectionBottomSheetFragment.dismiss();
}
@Subscribe
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/PostTextActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/PostTextActivity.java
index e4e94243..7d401c90 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/PostTextActivity.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/PostTextActivity.java
@@ -75,7 +75,7 @@ public class PostTextActivity extends AppCompatActivity implements FlairBottomSh
private boolean loadSubredditIconSuccessful = true;
private boolean isPosting;
- private String flair = null;
+ private Flair flair;
private boolean isSpoiler = false;
private boolean isNSFW = false;
@@ -126,7 +126,7 @@ public class PostTextActivity extends AppCompatActivity implements FlairBottomSh
subredditIsUser = savedInstanceState.getBoolean(SUBREDDIT_IS_USER_STATE);
loadSubredditIconSuccessful = savedInstanceState.getBoolean(LOAD_SUBREDDIT_ICON_STATE);
isPosting = savedInstanceState.getBoolean(IS_POSTING_STATE);
- flair = savedInstanceState.getString(FLAIR_STATE);
+ flair = savedInstanceState.getParcelable(FLAIR_STATE);
isSpoiler = savedInstanceState.getBoolean(IS_SPOILER_STATE);
isNSFW = savedInstanceState.getBoolean(IS_NSFW_STATE);
@@ -145,7 +145,7 @@ public class PostTextActivity extends AppCompatActivity implements FlairBottomSh
}
if(flair != null) {
- flairTextView.setText(flair);
+ flairTextView.setText(flair.getText());
flairTextView.setBackgroundColor(getResources().getColor(R.color.backgroundColorPrimaryDark));
}
if(isSpoiler) {
@@ -331,7 +331,7 @@ public class PostTextActivity extends AppCompatActivity implements FlairBottomSh
outState.putBoolean(SUBREDDIT_IS_USER_STATE, subredditIsUser);
outState.putBoolean(LOAD_SUBREDDIT_ICON_STATE, loadSubredditIconSuccessful);
outState.putBoolean(IS_POSTING_STATE, isPosting);
- outState.putString(FLAIR_STATE, flair);
+ outState.putParcelable(FLAIR_STATE, flair);
outState.putBoolean(IS_SPOILER_STATE, isSpoiler);
outState.putBoolean(IS_NSFW_STATE, isNSFW);
outState.putBoolean(NULL_ACCESS_TOKEN_STATE, mNullAccessToken);
@@ -367,11 +367,10 @@ public class PostTextActivity extends AppCompatActivity implements FlairBottomSh
}
@Override
- public void flairSelected(String flair) {
+ public void flairSelected(Flair flair) {
this.flair = flair;
- flairTextView.setText(flair);
+ flairTextView.setText(flair.getText());
flairTextView.setBackgroundColor(getResources().getColor(R.color.backgroundColorPrimaryDark));
- flairSelectionBottomSheetFragment.dismiss();
}
@Subscribe
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/PostVideoActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/PostVideoActivity.java
index 919502f1..b0ab91bb 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/PostVideoActivity.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/PostVideoActivity.java
@@ -90,7 +90,7 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS
private boolean loadSubredditIconSuccessful = true;
private boolean isPosting;
- private String flair = null;
+ private Flair flair;
private boolean isSpoiler = false;
private boolean isNSFW = false;
@@ -149,7 +149,7 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS
subredditIsUser = savedInstanceState.getBoolean(SUBREDDIT_IS_USER_STATE);
loadSubredditIconSuccessful = savedInstanceState.getBoolean(LOAD_SUBREDDIT_ICON_STATE);
isPosting = savedInstanceState.getBoolean(IS_POSTING_STATE);
- flair = savedInstanceState.getString(FLAIR_STATE);
+ flair = savedInstanceState.getParcelable(FLAIR_STATE);
isSpoiler = savedInstanceState.getBoolean(IS_SPOILER_STATE);
isNSFW = savedInstanceState.getBoolean(IS_NSFW_STATE);
mNullAccessToken = savedInstanceState.getBoolean(NULL_ACCESS_TOKEN_STATE);
@@ -180,7 +180,7 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS
}
if(flair != null) {
- flairTextView.setText(flair);
+ flairTextView.setText(flair.getText());
flairTextView.setBackgroundColor(getResources().getColor(R.color.backgroundColorPrimaryDark));
}
if(isSpoiler) {
@@ -416,7 +416,7 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS
}
outState.putBoolean(LOAD_SUBREDDIT_ICON_STATE, loadSubredditIconSuccessful);
outState.putBoolean(IS_POSTING_STATE, isPosting);
- outState.putString(FLAIR_STATE, flair);
+ outState.putParcelable(FLAIR_STATE, flair);
outState.putBoolean(IS_SPOILER_STATE, isSpoiler);
outState.putBoolean(IS_NSFW_STATE, isNSFW);
outState.putBoolean(NULL_ACCESS_TOKEN_STATE, mNullAccessToken);
@@ -466,11 +466,10 @@ public class PostVideoActivity extends AppCompatActivity implements FlairBottomS
}
@Override
- public void flairSelected(String flair) {
+ public void flairSelected(Flair flair) {
this.flair = flair;
- flairTextView.setText(flair);
+ flairTextView.setText(flair.getText());
flairTextView.setBackgroundColor(getResources().getColor(R.color.backgroundColorPrimaryDark));
- mFlairSelectionBottomSheetFragment.dismiss();
}
@Subscribe
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/RedditAPI.java b/app/src/main/java/ml/docilealligator/infinityforreddit/RedditAPI.java
index 4deb3abd..2f25001a 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/RedditAPI.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/RedditAPI.java
@@ -147,4 +147,8 @@ public interface RedditAPI {
@FormUrlEncoded
@POST("/api/unspoiler")
Call<String> unmarkSpoiler(@HeaderMap Map<String, String> headers, @FieldMap Map<String, String> params);
+
+ @FormUrlEncoded
+ @POST("{subredditNamePrefixed}/api/selectflair")
+ Call<String> selectFlair(@Path("subredditNamePrefixed") String subredditName, @HeaderMap Map<String, String> headers, @FieldMap Map<String, String> params);
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/RedditUtils.java b/app/src/main/java/ml/docilealligator/infinityforreddit/RedditUtils.java
index 670dd280..5279f97b 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/RedditUtils.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/RedditUtils.java
@@ -76,6 +76,9 @@ public class RedditUtils {
static final String FILEPATH_KEY = "filepath";
static final String MIMETYPE_KEY = "mimetype";
+ static final String LINK_KEY = "link";
+ static final String FLAIR_TEMPLATE_ID_KEY = "flair_template_id";
+
static Map<String, String> getHttpBasicAuthHeader() {
Map<String, String> params = new HashMap<>();
String credentials = String.format("%s:%s", RedditUtils.CLIENT_ID, "");
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/ViewPostDetailActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/ViewPostDetailActivity.java
index 964e1809..0ec34c57 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/ViewPostDetailActivity.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/ViewPostDetailActivity.java
@@ -54,7 +54,7 @@ import retrofit2.Retrofit;
import static ml.docilealligator.infinityforreddit.CommentActivity.EXTRA_COMMENT_DATA_KEY;
import static ml.docilealligator.infinityforreddit.CommentActivity.WRITE_COMMENT_REQUEST_CODE;
-public class ViewPostDetailActivity extends AppCompatActivity {
+public class ViewPostDetailActivity extends AppCompatActivity implements FlairBottomSheetFragment.FlairSelectionCallback {
static final String EXTRA_POST_DATA = "EPD";
static final String EXTRA_POST_LIST_POSITION = "EPLI";
@@ -241,6 +241,8 @@ public class ViewPostDetailActivity extends AppCompatActivity {
} else {
spoilerItem.setTitle(R.string.action_mark_spoiler);
}
+
+ mMenu.findItem(R.id.action_edit_flair_view_post_detail_activity).setVisible(true);
}
mAdapter = new CommentAndPostRecyclerViewAdapter(ViewPostDetailActivity.this, mRetrofit,
mOauthRetrofit, mRedditDataRoomDatabase, mGlide, mAccessToken, mAccountName, mPost,
@@ -642,6 +644,8 @@ public class ViewPostDetailActivity extends AppCompatActivity {
} else {
spoilerItem.setTitle(R.string.action_mark_spoiler);
}
+
+ menu.findItem(R.id.action_edit_flair_view_post_detail_activity).setVisible(true);
}
return true;
}
@@ -707,6 +711,14 @@ public class ViewPostDetailActivity extends AppCompatActivity {
markSpoiler();
}
return true;
+ case R.id.action_edit_flair_view_post_detail_activity:
+ FlairBottomSheetFragment flairBottomSheetFragment = new FlairBottomSheetFragment();
+ Bundle bundle = new Bundle();
+ bundle.putString(FlairBottomSheetFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
+ bundle.putString(FlairBottomSheetFragment.EXTRA_SUBREDDIT_NAME, mPost.getSubredditName());
+ flairBottomSheetFragment.setArguments(bundle);
+ flairBottomSheetFragment.show(getSupportFragmentManager(), flairBottomSheetFragment.getTag());
+ return true;
case android.R.id.home:
onBackPressed();
return true;
@@ -768,4 +780,31 @@ public class ViewPostDetailActivity extends AppCompatActivity {
mLoadSubredditIconAsyncTask.cancel(true);
}
}
+
+ @Override
+ public void flairSelected(Flair flair) {
+ Map<String, String> params = new HashMap<>();
+ params.put(RedditUtils.API_TYPE_KEY, RedditUtils.API_TYPE_JSON);
+ params.put(RedditUtils.FLAIR_TEMPLATE_ID_KEY, flair.getId());
+ params.put(RedditUtils.LINK_KEY, mPost.getFullName());
+ params.put(RedditUtils.TEXT_KEY, flair.getText());
+
+ mOauthRetrofit.create(RedditAPI.class).selectFlair(mPost.getSubredditNamePrefixed(),
+ RedditUtils.getOAuthHeader(mAccessToken), params).enqueue(new Callback<String>() {
+ @Override
+ public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
+ if(response.isSuccessful()) {
+ refresh(true);
+ showMessage(R.string.update_flair_success);
+ } else {
+ showMessage(R.string.update_flair_failed);
+ }
+ }
+
+ @Override
+ public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
+ showMessage(R.string.update_flair_failed);
+ }
+ });
+ }
}
diff --git a/app/src/main/res/menu/view_post_detail_activity.xml b/app/src/main/res/menu/view_post_detail_activity.xml
index 3df40201..f8c546f0 100644
--- a/app/src/main/res/menu/view_post_detail_activity.xml
+++ b/app/src/main/res/menu/view_post_detail_activity.xml
@@ -39,4 +39,11 @@
android:orderInCategory="6"
app:showAsAction="never"
android:visible="false" />
+
+ <item
+ android:id="@+id/action_edit_flair_view_post_detail_activity"
+ android:orderInCategory="7"
+ android:title="@string/action_edit_flair"
+ app:showAsAction="never"
+ android:visible="false" />
</menu> \ 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 77d23b4c..c7b64362 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -32,6 +32,7 @@
<string name="action_unmark_nsfw">Unmark NSFW</string>
<string name="action_mark_spoiler">Mark Spoiler</string>
<string name="action_unmark_spoiler">Unmark Spoiler</string>
+ <string name="action_edit_flair">Edit Flair</string>
<string name="parse_json_response_error">Error occurred when parsing the JSON response</string>
<string name="retrieve_token_error">Error Retrieving the token</string>
@@ -204,4 +205,6 @@
<string name="mark_spoiler_failed">Mark spoiler failed</string>
<string name="unmark_spoiler_success">Unmark spoiler successful</string>
<string name="unmark_spoiler_failed">Unmark spoiler failed</string>
+ <string name="update_flair_success">Update flair successful</string>
+ <string name="update_flair_failed">Update flair failed</string>
</resources>