mirror of
https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
synced 2024-11-10 04:37:25 +01:00
Edit flair for posts is now available.
This commit is contained in:
parent
6872faa93d
commit
a62f47aacb
@ -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 {
|
@ -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));
|
||||
}
|
||||
}
|
@ -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 {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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";
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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, "");
|
||||
|
@ -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);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -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>
|
@ -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>
|
||||
|
Loading…
Reference in New Issue
Block a user