Edit flair for posts is now available.

This commit is contained in:
Alex Ning 2019-08-14 10:57:41 +08:00
parent 6872faa93d
commit a62f47aacb
16 changed files with 223 additions and 77 deletions

View File

@ -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 {

View File

@ -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));
}
}

View File

@ -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 {
}
});
}
}

View File

@ -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();
}

View File

@ -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";
}

View File

@ -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);
}

View File

@ -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);

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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);
}

View File

@ -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, "");

View File

@ -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);
}
});
}
}

View File

@ -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>

View File

@ -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>