aboutsummaryrefslogtreecommitdiff
path: root/app/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main')
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/activities/CommentActivity.java8
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/activities/EditCommentActivity.java53
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/comment/SendComment.java3
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/markdown/GiphyGifBlockParser.java25
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/markdown/GiphyGifPlugin.java7
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/markdown/RichTextJSONConverter.java12
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/thing/GiphyGif.java41
7 files changed, 133 insertions, 16 deletions
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CommentActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CommentActivity.java
index cb012642..67d5cf3a 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CommentActivity.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CommentActivity.java
@@ -81,7 +81,8 @@ import okhttp3.ConnectionPool;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
-public class CommentActivity extends BaseActivity implements UploadImageEnabledActivity, AccountChooserBottomSheetFragment.AccountChooserListener, GiphyDialogFragment.GifSelectionListener {
+public class CommentActivity extends BaseActivity implements UploadImageEnabledActivity,
+ AccountChooserBottomSheetFragment.AccountChooserListener, GiphyDialogFragment.GifSelectionListener {
public static final String EXTRA_COMMENT_PARENT_TITLE_KEY = "ECPTK";
public static final String EXTRA_COMMENT_PARENT_BODY_KEY = "ECPBK";
@@ -99,6 +100,7 @@ public class CommentActivity extends BaseActivity implements UploadImageEnabledA
private static final String SELECTED_ACCOUNT_STATE = "SAS";
private static final String UPLOADED_IMAGES_STATE = "UIS";
+ private static final String GIPHY_GIF_STATE = "GGS";
@Inject
@Named("no_oauth")
@@ -272,6 +274,7 @@ public class CommentActivity extends BaseActivity implements UploadImageEnabledA
if (savedInstanceState != null) {
selectedAccount = savedInstanceState.getParcelable(SELECTED_ACCOUNT_STATE);
uploadedImages = savedInstanceState.getParcelableArrayList(UPLOADED_IMAGES_STATE);
+ giphyGif = savedInstanceState.getParcelable(GIPHY_GIF_STATE);
if (selectedAccount != null) {
mGlide.load(selectedAccount.getProfileImageUrl())
@@ -353,6 +356,7 @@ public class CommentActivity extends BaseActivity implements UploadImageEnabledA
super.onSaveInstanceState(outState);
outState.putParcelable(SELECTED_ACCOUNT_STATE, selectedAccount);
outState.putParcelableArrayList(UPLOADED_IMAGES_STATE, uploadedImages);
+ outState.putParcelable(GIPHY_GIF_STATE, giphyGif);
}
@Override
@@ -621,7 +625,7 @@ public class CommentActivity extends BaseActivity implements UploadImageEnabledA
@Override
public void onGifSelected(@NonNull Media media, @Nullable String s, @NonNull GPHContentType gphContentType) {
- this.giphyGif = new GiphyGif(media.getId());
+ this.giphyGif = new GiphyGif(media.getId(), true);
int start = Math.max(binding.commentCommentEditText.getSelectionStart(), 0);
int end = Math.max(binding.commentCommentEditText.getSelectionEnd(), 0);
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/EditCommentActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/EditCommentActivity.java
index c5446771..1cb27b7c 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/EditCommentActivity.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/EditCommentActivity.java
@@ -18,6 +18,10 @@ import androidx.annotation.Nullable;
import androidx.core.content.FileProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
+import com.giphy.sdk.core.models.Media;
+import com.giphy.sdk.ui.GPHContentType;
+import com.giphy.sdk.ui.Giphy;
+import com.giphy.sdk.ui.views.GiphyDialogFragment;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.snackbar.Snackbar;
@@ -36,6 +40,7 @@ import javax.inject.Inject;
import javax.inject.Named;
import ml.docilealligator.infinityforreddit.Infinity;
+import ml.docilealligator.infinityforreddit.thing.GiphyGif;
import ml.docilealligator.infinityforreddit.thing.MediaMetadata;
import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.thing.UploadedImage;
@@ -55,7 +60,8 @@ import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
-public class EditCommentActivity extends BaseActivity implements UploadImageEnabledActivity {
+public class EditCommentActivity extends BaseActivity implements UploadImageEnabledActivity,
+ GiphyDialogFragment.GifSelectionListener {
public static final String EXTRA_CONTENT = "EC";
public static final String EXTRA_FULLNAME = "EF";
@@ -69,6 +75,7 @@ public class EditCommentActivity extends BaseActivity implements UploadImageEnab
private static final int MARKDOWN_PREVIEW_REQUEST_CODE = 300;
private static final String UPLOADED_IMAGES_STATE = "UIS";
+ private static final String GIPHY_GIF_STATE = "GGS";
@Inject
@Named("oauth")
@@ -92,6 +99,7 @@ public class EditCommentActivity extends BaseActivity implements UploadImageEnab
private boolean isSubmitting = false;
private Uri capturedImageUri;
private ArrayList<UploadedImage> uploadedImages = new ArrayList<>();
+ private GiphyGif giphyGif;
private ActivityEditCommentBinding binding;
@Override
@@ -141,10 +149,11 @@ public class EditCommentActivity extends BaseActivity implements UploadImageEnab
if (savedInstanceState != null) {
uploadedImages = savedInstanceState.getParcelableArrayList(UPLOADED_IMAGES_STATE);
+ giphyGif = savedInstanceState.getParcelable(GIPHY_GIF_STATE);
}
MarkdownBottomBarRecyclerViewAdapter adapter = new MarkdownBottomBarRecyclerViewAdapter(
- mCustomThemeWrapper, true, new MarkdownBottomBarRecyclerViewAdapter.ItemClickListener() {
+ mCustomThemeWrapper, true, true, new MarkdownBottomBarRecyclerViewAdapter.ItemClickListener() {
@Override
public void onClick(int item) {
MarkdownBottomBarRecyclerViewAdapter.bindEditTextWithItemClickListener(
@@ -161,6 +170,11 @@ public class EditCommentActivity extends BaseActivity implements UploadImageEnab
fragment.setArguments(arguments);
fragment.show(getSupportFragmentManager(), fragment.getTag());
}
+
+ @Override
+ public void onSelectGiphyGif() {
+ GiphyDialogFragment.Companion.newInstance().show(getSupportFragmentManager(), "giphy_dialog");
+ }
});
binding.markdownBottomBarRecyclerViewEditCommentActivity.setLayoutManager(new LinearLayoutManagerBugFixed(this,
@@ -169,6 +183,8 @@ public class EditCommentActivity extends BaseActivity implements UploadImageEnab
binding.commentEditTextEditCommentActivity.requestFocus();
Utils.showKeyboard(this, new Handler(), binding.commentEditTextEditCommentActivity);
+
+ Giphy.INSTANCE.configure(this, APIUtils.GIPHY_GIF_API_KEY);
}
@Override
@@ -237,9 +253,9 @@ public class EditCommentActivity extends BaseActivity implements UploadImageEnab
Map<String, String> params = new HashMap<>();
params.put(APIUtils.THING_ID_KEY, mFullName);
- if (!uploadedImages.isEmpty()) {
+ if (!uploadedImages.isEmpty() || giphyGif != null) {
try {
- params.put(APIUtils.RICHTEXT_JSON_KEY, new RichTextJSONConverter().constructRichTextJSON(this, content, uploadedImages));
+ params.put(APIUtils.RICHTEXT_JSON_KEY, new RichTextJSONConverter().constructRichTextJSON(this, content, uploadedImages, giphyGif));
params.put(APIUtils.TEXT_KEY, "");
} catch (JSONException e) {
isSubmitting = false;
@@ -314,6 +330,7 @@ public class EditCommentActivity extends BaseActivity implements UploadImageEnab
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelableArrayList(UPLOADED_IMAGES_STATE, uploadedImages);
+ outState.putParcelable(GIPHY_GIF_STATE, giphyGif);
}
@Override
@@ -379,4 +396,32 @@ public class EditCommentActivity extends BaseActivity implements UploadImageEnab
0, "![]()\n".length() + uploadedImage.imageUrlOrKey.length());
}
}
+
+ @Override
+ public void didSearchTerm(@NonNull String s) {
+
+ }
+
+ @Override
+ public void onGifSelected(@NonNull Media media, @Nullable String s, @NonNull GPHContentType gphContentType) {
+ this.giphyGif = new GiphyGif(media.getId(), true);
+
+ int start = Math.max(binding.commentEditTextEditCommentActivity.getSelectionStart(), 0);
+ int end = Math.max(binding.commentEditTextEditCommentActivity.getSelectionEnd(), 0);
+ int realStart = Math.min(start, end);
+ if (realStart > 0 && binding.commentEditTextEditCommentActivity.getText().toString().charAt(realStart - 1) != '\n') {
+ binding.commentEditTextEditCommentActivity.getText().replace(realStart, Math.max(start, end),
+ "\n![gif](" + giphyGif.id + ")\n",
+ 0, "\n![gif]()\n".length() + giphyGif.id.length());
+ } else {
+ binding.commentEditTextEditCommentActivity.getText().replace(realStart, Math.max(start, end),
+ "![gif](" + giphyGif.id + ")\n",
+ 0, "![gif]()\n".length() + giphyGif.id.length());
+ }
+ }
+
+ @Override
+ public void onDismissed(@NonNull GPHContentType gphContentType) {
+
+ }
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/comment/SendComment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/comment/SendComment.java
index 41f510af..0972801e 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/comment/SendComment.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/comment/SendComment.java
@@ -37,7 +37,8 @@ public class SendComment {
params.put(APIUtils.RETURN_RTJSON_KEY, "true");
if (!uploadedImages.isEmpty() || giphyGif != null) {
try {
- params.put(APIUtils.RICHTEXT_JSON_KEY, new RichTextJSONConverter().constructRichTextJSON(context, commentMarkdown, uploadedImages, giphyGif));
+ params.put(APIUtils.RICHTEXT_JSON_KEY, new RichTextJSONConverter().constructRichTextJSON(
+ context, commentMarkdown, uploadedImages, giphyGif));
params.put(APIUtils.TEXT_KEY, "");
} catch (JSONException e) {
sendCommentListener.sendCommentFailed(context.getString(R.string.convert_to_richtext_json_failed));
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/markdown/GiphyGifBlockParser.java b/app/src/main/java/ml/docilealligator/infinityforreddit/markdown/GiphyGifBlockParser.java
index 784a590a..e2cee762 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/markdown/GiphyGifBlockParser.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/markdown/GiphyGifBlockParser.java
@@ -10,10 +10,14 @@ import org.commonmark.parser.block.BlockStart;
import org.commonmark.parser.block.MatchedBlockParser;
import org.commonmark.parser.block.ParserState;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import ml.docilealligator.infinityforreddit.thing.GiphyGif;
+import ml.docilealligator.infinityforreddit.thing.UploadedImage;
public class GiphyGifBlockParser extends AbstractBlockParser {
private final GiphyGifBlock giphyGifBlock;
@@ -37,13 +41,26 @@ public class GiphyGifBlockParser extends AbstractBlockParser {
@Nullable
private GiphyGif giphyGif;
- public Factory(@Nullable GiphyGif giphyGif) {
+ // Only for editing comments with GiphyGif. No need to convert MediaMetadata to GiphyGif.
+ @Nullable
+ private Map<String, UploadedImage> uploadedImageMap;
+
+ public Factory(@Nullable GiphyGif giphyGif, @Nullable List<UploadedImage> uploadedImages) {
this.giphyGif = giphyGif;
+
+ if (uploadedImages == null) {
+ return;
+ }
+
+ uploadedImageMap = new HashMap<>();
+ for (UploadedImage u : uploadedImages) {
+ uploadedImageMap.put(u.imageName, u);
+ }
}
@Override
public BlockStart tryStart(ParserState state, MatchedBlockParser matchedBlockParser) {
- if (giphyGif == null) {
+ if (giphyGif == null && (uploadedImageMap == null || uploadedImageMap.isEmpty())) {
return BlockStart.none();
}
@@ -54,8 +71,10 @@ public class GiphyGifBlockParser extends AbstractBlockParser {
if (startIndex > 0) {
int endIndex = line.indexOf(')', startIndex);
String id = line.substring(startIndex + 1, endIndex);
- if (giphyGif.id.equals(id)) {
+ if (giphyGif != null && giphyGif.id.equals(id)) {
return BlockStart.of(new GiphyGifBlockParser(giphyGif));
+ } else if (uploadedImageMap != null && uploadedImageMap.containsKey(id)) {
+ return BlockStart.of(new GiphyGifBlockParser(new GiphyGif(id, false)));
}
}
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/markdown/GiphyGifPlugin.java b/app/src/main/java/ml/docilealligator/infinityforreddit/markdown/GiphyGifPlugin.java
index b76fff58..966d4a4d 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/markdown/GiphyGifPlugin.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/markdown/GiphyGifPlugin.java
@@ -5,14 +5,17 @@ import androidx.annotation.Nullable;
import org.commonmark.parser.Parser;
+import java.util.List;
+
import io.noties.markwon.AbstractMarkwonPlugin;
import ml.docilealligator.infinityforreddit.thing.GiphyGif;
+import ml.docilealligator.infinityforreddit.thing.UploadedImage;
public class GiphyGifPlugin extends AbstractMarkwonPlugin {
private final GiphyGifBlockParser.Factory factory;
- public GiphyGifPlugin(@Nullable GiphyGif giphyGif) {
- this.factory = new GiphyGifBlockParser.Factory(giphyGif);
+ public GiphyGifPlugin(@Nullable GiphyGif giphyGif, @Nullable List<UploadedImage> uploadedImages) {
+ this.factory = new GiphyGifBlockParser.Factory(giphyGif, uploadedImages);
}
@NonNull
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/markdown/RichTextJSONConverter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/markdown/RichTextJSONConverter.java
index 6e2826a6..25ba7166 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/markdown/RichTextJSONConverter.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/markdown/RichTextJSONConverter.java
@@ -128,12 +128,22 @@ public class RichTextJSONConverter implements Visitor {
return richText.toString();
}
+ /**
+ *
+ * @param context
+ * @param markdown
+ * @param uploadedImages
+ * @param giphyGif
+ * @param uploadedImagesMap this is for editing comment with giphy gifs. Too lazy to convert UploadedImage to GiphyGif.
+ * @return
+ * @throws JSONException
+ */
public String constructRichTextJSON(Context context, String markdown,
List<UploadedImage> uploadedImages, @Nullable GiphyGif giphyGif) throws JSONException {
UploadedImagePlugin uploadedImagePlugin = new UploadedImagePlugin();
uploadedImagePlugin.setUploadedImages(uploadedImages);
Markwon markwon = MarkdownUtils.createContentSubmissionRedditMarkwon(
- context, uploadedImagePlugin, new GiphyGifPlugin(giphyGif));
+ context, uploadedImagePlugin, new GiphyGifPlugin(giphyGif, uploadedImages));
List<Node> nodes = MarkwonReducer.directChildren().reduce(markwon.parse(markdown));
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/thing/GiphyGif.java b/app/src/main/java/ml/docilealligator/infinityforreddit/thing/GiphyGif.java
index ef0b7ff0..d8ad11cd 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/thing/GiphyGif.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/thing/GiphyGif.java
@@ -1,8 +1,43 @@
package ml.docilealligator.infinityforreddit.thing;
-public class GiphyGif {
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import androidx.annotation.NonNull;
+
+public class GiphyGif implements Parcelable {
public final String id;
- public GiphyGif(String id) {
- this.id = "giphy|" + id + "|downsized";
+ private GiphyGif(String id) {
+ this.id = id;
+ }
+
+ public GiphyGif(String id, boolean modifyId) {
+ this(modifyId ? "giphy|" + id + "|downsized" : id);
+ }
+
+ protected GiphyGif(Parcel in) {
+ id = in.readString();
+ }
+
+ public static final Creator<GiphyGif> CREATOR = new Creator<GiphyGif>() {
+ @Override
+ public GiphyGif createFromParcel(Parcel in) {
+ return new GiphyGif(in);
+ }
+
+ @Override
+ public GiphyGif[] newArray(int size) {
+ return new GiphyGif[size];
+ }
+ };
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(@NonNull Parcel dest, int flags) {
+ dest.writeString(id);
}
}