aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/RedditGalleryPayload.java16
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/activities/CustomizePostFilterActivity.java2
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/activities/PostGalleryActivity.java21
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/adapters/RedditGallerySubmissionRecyclerViewAdapter.java32
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/asynctasks/InsertUserData.java3
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/bottomsheetfragments/SetRedditGalleryItemCaptionAndUrlBottomSheetFragment.java112
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/user/FetchUserData.java2
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/user/UserDao.java3
-rw-r--r--app/src/main/res/layout/fragment_set_reddit_gallery_item_caption_and_url_bottom_sheet.xml75
-rw-r--r--app/src/main/res/values/strings.xml3
10 files changed, 254 insertions, 15 deletions
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/RedditGalleryPayload.java b/app/src/main/java/ml/docilealligator/infinityforreddit/RedditGalleryPayload.java
index ef91d6d9..d8763ff0 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/RedditGalleryPayload.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/RedditGalleryPayload.java
@@ -92,5 +92,21 @@ public class RedditGalleryPayload {
parcel.writeString(outboundUrl);
parcel.writeString(mediaId);
}
+
+ public String getCaption() {
+ return caption;
+ }
+
+ public void setCaption(String caption) {
+ this.caption = caption == null ? "" : caption;
+ }
+
+ public String getOutboundUrl() {
+ return outboundUrl;
+ }
+
+ public void setOutboundUrl(String outboundUrl) {
+ this.outboundUrl = outboundUrl;
+ }
}
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CustomizePostFilterActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CustomizePostFilterActivity.java
index 5f7bbc6e..4e96ec0f 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CustomizePostFilterActivity.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CustomizePostFilterActivity.java
@@ -504,7 +504,7 @@ public class CustomizePostFilterActivity extends BaseActivity {
}
}
- public static void setCursorDrawableColor(EditText editText, int color) {
+ public void setCursorDrawableColor(EditText editText, int color) {
try {
Field fCursorDrawableRes = TextView.class.getDeclaredField("mCursorDrawableRes");
fCursorDrawableRes.setAccessible(true);
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/PostGalleryActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/PostGalleryActivity.java
index 1782776b..6e5dfd7f 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/PostGalleryActivity.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/PostGalleryActivity.java
@@ -210,15 +210,12 @@ public class PostGalleryActivity extends BaseActivity implements FlairBottomShee
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
- adapter = new RedditGallerySubmissionRecyclerViewAdapter(this, mCustomThemeWrapper, new RedditGallerySubmissionRecyclerViewAdapter.ItemClickListener() {
- @Override
- public void onAddImageClicked() {
- if (!isUploading) {
- SelectOrCaptureImageBottomSheetFragment fragment = new SelectOrCaptureImageBottomSheetFragment();
- fragment.show(getSupportFragmentManager(), fragment.getTag());
- } else {
- Snackbar.make(coordinatorLayout, R.string.please_wait_image_is_uploading, Snackbar.LENGTH_SHORT).show();
- }
+ adapter = new RedditGallerySubmissionRecyclerViewAdapter(this, mCustomThemeWrapper, () -> {
+ if (!isUploading) {
+ SelectOrCaptureImageBottomSheetFragment fragment = new SelectOrCaptureImageBottomSheetFragment();
+ fragment.show(getSupportFragmentManager(), fragment.getTag());
+ } else {
+ Snackbar.make(coordinatorLayout, R.string.please_wait_image_is_uploading, Snackbar.LENGTH_SHORT).show();
}
});
imagesRecyclerView.setAdapter(adapter);
@@ -685,6 +682,12 @@ public class PostGalleryActivity extends BaseActivity implements FlairBottomShee
flairTextView.setTextColor(flairTextColor);
}
+ public void setCaptionAndUrl(int position, String caption, String url) {
+ if (adapter != null) {
+ adapter.setCaptionAndUrl(position, caption, url);
+ }
+ }
+
@Subscribe
public void onAccountSwitchEvent(SwitchAccountEvent event) {
finish();
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/RedditGallerySubmissionRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/RedditGallerySubmissionRecyclerViewAdapter.java
index bec2d265..e585f2f7 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/RedditGallerySubmissionRecyclerViewAdapter.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/RedditGallerySubmissionRecyclerViewAdapter.java
@@ -1,8 +1,8 @@
package ml.docilealligator.infinityforreddit.adapters;
-import android.content.Context;
import android.content.res.ColorStateList;
import android.graphics.drawable.Drawable;
+import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import android.view.LayoutInflater;
@@ -33,6 +33,8 @@ import butterknife.BindView;
import butterknife.ButterKnife;
import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditGalleryPayload;
+import ml.docilealligator.infinityforreddit.activities.PostGalleryActivity;
+import ml.docilealligator.infinityforreddit.bottomsheetfragments.SetRedditGalleryItemCaptionAndUrlBottomSheetFragment;
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.customviews.AspectRatioGifImageView;
@@ -41,14 +43,16 @@ public class RedditGallerySubmissionRecyclerViewAdapter extends RecyclerView.Ada
private static final int VIEW_TYPE_IMAGE = 1;
private static final int VIEW_TYPE_ADD_IMAGE = 2;
+ private PostGalleryActivity activity;
private ArrayList<RedditGalleryImageInfo> redditGalleryImageInfoList;
private CustomThemeWrapper customThemeWrapper;
private ItemClickListener itemClickListener;
private RequestManager glide;
- public RedditGallerySubmissionRecyclerViewAdapter(Context context, CustomThemeWrapper customThemeWrapper,
+ public RedditGallerySubmissionRecyclerViewAdapter(PostGalleryActivity activity, CustomThemeWrapper customThemeWrapper,
ItemClickListener itemClickListener) {
- glide = Glide.with(context);
+ this.activity = activity;
+ glide = Glide.with(activity);
this.customThemeWrapper = customThemeWrapper;
this.itemClickListener = itemClickListener;
}
@@ -76,7 +80,7 @@ public class RedditGallerySubmissionRecyclerViewAdapter extends RecyclerView.Ada
if (holder instanceof ImageViewHolder) {
glide.load(redditGalleryImageInfoList.get(position).imageUrlString)
.apply(new RequestOptions().transform(new CenterCrop(), new RoundedCorners(48)))
- .listener(new RequestListener<Drawable>() {
+ .listener(new RequestListener<>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
@@ -141,6 +145,13 @@ public class RedditGallerySubmissionRecyclerViewAdapter extends RecyclerView.Ada
notifyItemRemoved(redditGalleryImageInfoList.size());
}
+ public void setCaptionAndUrl(int position, String caption, String url) {
+ if (redditGalleryImageInfoList.size() > position && position >= 0) {
+ redditGalleryImageInfoList.get(position).payload.setCaption(caption);
+ redditGalleryImageInfoList.get(position).payload.setOutboundUrl(url);
+ }
+ }
+
class ImageViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.aspect_ratio_gif_image_view_item_reddit_gallery_submission_image)
AspectRatioGifImageView imageView;
@@ -156,6 +167,19 @@ public class RedditGallerySubmissionRecyclerViewAdapter extends RecyclerView.Ada
imageView.setRatio(1);
+ imageView.setOnClickListener(view -> {
+ RedditGalleryPayload.Item payload = redditGalleryImageInfoList.get(getBindingAdapterPosition()).payload;
+ if (payload != null) {
+ SetRedditGalleryItemCaptionAndUrlBottomSheetFragment fragment = new SetRedditGalleryItemCaptionAndUrlBottomSheetFragment();
+ Bundle bundle = new Bundle();
+ bundle.putInt(SetRedditGalleryItemCaptionAndUrlBottomSheetFragment.EXTRA_POSITION, getBindingAdapterPosition());
+ bundle.putString(SetRedditGalleryItemCaptionAndUrlBottomSheetFragment.EXTRA_CAPTION, payload.getCaption());
+ bundle.putString(SetRedditGalleryItemCaptionAndUrlBottomSheetFragment.EXTRA_URL, payload.getOutboundUrl());
+ fragment.setArguments(bundle);
+ fragment.show(activity.getSupportFragmentManager(), fragment.getTag());
+ }
+ });
+
closeImageView.setOnClickListener(view -> {
redditGalleryImageInfoList.remove(getBindingAdapterPosition());
notifyItemRemoved(getBindingAdapterPosition());
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/asynctasks/InsertUserData.java b/app/src/main/java/ml/docilealligator/infinityforreddit/asynctasks/InsertUserData.java
index 0e480315..3c8541f4 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/asynctasks/InsertUserData.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/asynctasks/InsertUserData.java
@@ -12,6 +12,9 @@ public class InsertUserData {
public static void insertUserData(Executor executor, Handler handler, RedditDataRoomDatabase redditDataRoomDatabase,
UserData userData, InsertUserDataListener insertUserDataListener) {
executor.execute(() -> {
+ if (redditDataRoomDatabase.userDao().getNUsers() > 10000) {
+ redditDataRoomDatabase.userDao().deleteAllUsers();
+ }
redditDataRoomDatabase.userDao().insert(userData);
if (insertUserDataListener != null) {
handler.post(insertUserDataListener::insertSuccess);
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/bottomsheetfragments/SetRedditGalleryItemCaptionAndUrlBottomSheetFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/bottomsheetfragments/SetRedditGalleryItemCaptionAndUrlBottomSheetFragment.java
new file mode 100644
index 00000000..564bcb08
--- /dev/null
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/bottomsheetfragments/SetRedditGalleryItemCaptionAndUrlBottomSheetFragment.java
@@ -0,0 +1,112 @@
+package ml.docilealligator.infinityforreddit.bottomsheetfragments;
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.graphics.PorterDuff;
+import android.graphics.drawable.Drawable;
+import android.os.Build;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.EditText;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.google.android.material.button.MaterialButton;
+import com.google.android.material.textfield.TextInputEditText;
+import com.google.android.material.textfield.TextInputLayout;
+
+import java.lang.reflect.Field;
+
+import ml.docilealligator.infinityforreddit.R;
+import ml.docilealligator.infinityforreddit.activities.PostGalleryActivity;
+import ml.docilealligator.infinityforreddit.customviews.LandscapeExpandedRoundedBottomSheetDialogFragment;
+import ml.docilealligator.infinityforreddit.utils.Utils;
+
+public class SetRedditGalleryItemCaptionAndUrlBottomSheetFragment extends LandscapeExpandedRoundedBottomSheetDialogFragment {
+
+ public static final String EXTRA_POSITION = "EP";
+ public static final String EXTRA_CAPTION = "EC";
+ public static final String EXTRA_URL = "EU";
+
+ private PostGalleryActivity mActivity;
+ private TextInputLayout captionTextInputLayout;
+ private TextInputEditText captionTextInputEditText;
+ private TextInputLayout urlTextInputLayout;
+ private TextInputEditText urlTextInputEditText;
+ private MaterialButton okButton;
+
+ public SetRedditGalleryItemCaptionAndUrlBottomSheetFragment() {
+
+ }
+
+ @Nullable
+ @Override
+ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ View rootView = inflater.inflate(R.layout.fragment_set_reddit_gallery_item_caption_and_url_bottom_sheet, container, false);
+
+ captionTextInputLayout = rootView.findViewById(R.id.caption_text_input_layout_set_reddit_gallery_item_caption_and_url_bottom_sheet_fragment);
+ captionTextInputEditText = rootView.findViewById(R.id.caption_text_input_edit_text_set_reddit_gallery_item_caption_and_url_bottom_sheet_fragment);
+ urlTextInputLayout = rootView.findViewById(R.id.url_text_input_layout_set_reddit_gallery_item_caption_and_url_bottom_sheet_fragment);
+ urlTextInputEditText = rootView.findViewById(R.id.url_text_input_edit_text_set_reddit_gallery_item_caption_and_url_bottom_sheet_fragment);
+ okButton = rootView.findViewById(R.id.ok_button_set_reddit_gallery_item_caption_and_url_bottom_sheet_fragment);
+
+ int primaryTextColor = mActivity.getResources().getColor(R.color.primaryTextColor);
+ Drawable cursorDrawable = Utils.getTintedDrawable(mActivity, R.drawable.edit_text_cursor, primaryTextColor);
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
+ captionTextInputEditText.setTextCursorDrawable(cursorDrawable);
+ urlTextInputEditText.setTextCursorDrawable(cursorDrawable);
+ } else {
+ setCursorDrawableColor(captionTextInputEditText, primaryTextColor);
+ setCursorDrawableColor(urlTextInputEditText, primaryTextColor);
+ }
+
+ int position = getArguments().getInt(EXTRA_POSITION, -1);
+ String caption = getArguments().getString(EXTRA_CAPTION, "");
+ String url = getArguments().getString(EXTRA_URL, "");
+
+ captionTextInputEditText.setText(caption);
+ urlTextInputEditText.setText(url);
+
+ okButton.setOnClickListener(view -> {
+ mActivity.setCaptionAndUrl(position, captionTextInputEditText.getText().toString(), urlTextInputEditText.getText().toString());
+ dismiss();
+ });
+
+ if (mActivity.typeface != null) {
+ Utils.setFontToAllTextViews(rootView, mActivity.typeface);
+ }
+
+ return rootView;
+ }
+
+ private void setCursorDrawableColor(EditText editText, int color) {
+ try {
+ @SuppressLint("SoonBlockedPrivateApi") Field fCursorDrawableRes = TextView.class.getDeclaredField("mCursorDrawableRes");
+ fCursorDrawableRes.setAccessible(true);
+ int mCursorDrawableRes = fCursorDrawableRes.getInt(editText);
+ Field fEditor = TextView.class.getDeclaredField("mEditor");
+ fEditor.setAccessible(true);
+ Object editor = fEditor.get(editText);
+ Class<?> clazz = editor.getClass();
+ Field fCursorDrawable = clazz.getDeclaredField("mCursorDrawable");
+ fCursorDrawable.setAccessible(true);
+ Drawable[] drawables = new Drawable[2];
+ drawables[0] = editText.getContext().getResources().getDrawable(mCursorDrawableRes);
+ drawables[1] = editText.getContext().getResources().getDrawable(mCursorDrawableRes);
+ drawables[0].setColorFilter(color, PorterDuff.Mode.SRC_IN);
+ drawables[1].setColorFilter(color, PorterDuff.Mode.SRC_IN);
+ fCursorDrawable.set(editor, drawables);
+ } catch (Throwable ignored) { }
+ }
+
+ @Override
+ public void onAttach(@NonNull Context context) {
+ super.onAttach(context);
+ mActivity = (PostGalleryActivity) context;
+ }
+}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/user/FetchUserData.java b/app/src/main/java/ml/docilealligator/infinityforreddit/user/FetchUserData.java
index fc3da19d..f751ff5b 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/user/FetchUserData.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/user/FetchUserData.java
@@ -58,7 +58,7 @@ public class FetchUserData {
RedditAPI api = retrofit.create(RedditAPI.class);
Call<String> userInfo = api.searchUsers(query, after, sortType, nsfw ? 1 : 0);
- userInfo.enqueue(new Callback<String>() {
+ userInfo.enqueue(new Callback<>() {
@Override
public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
if (response.isSuccessful()) {
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/user/UserDao.java b/app/src/main/java/ml/docilealligator/infinityforreddit/user/UserDao.java
index 77b12821..70588fea 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/user/UserDao.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/user/UserDao.java
@@ -11,6 +11,9 @@ public interface UserDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insert(UserData userData);
+ @Query("SELECT COUNT(*) FROM users")
+ int getNUsers();
+
@Query("DELETE FROM users")
void deleteAllUsers();
diff --git a/app/src/main/res/layout/fragment_set_reddit_gallery_item_caption_and_url_bottom_sheet.xml b/app/src/main/res/layout/fragment_set_reddit_gallery_item_caption_and_url_bottom_sheet.xml
new file mode 100644
index 00000000..9c354bef
--- /dev/null
+++ b/app/src/main/res/layout/fragment_set_reddit_gallery_item_caption_and_url_bottom_sheet.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:paddingBottom="8dp"
+ android:overScrollMode="never">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <com.google.android.material.textfield.TextInputLayout
+ android:id="@+id/caption_text_input_layout_set_reddit_gallery_item_caption_and_url_bottom_sheet_fragment"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingTop="8dp"
+ android:paddingBottom="8dp"
+ android:paddingStart="16dp"
+ android:paddingEnd="16dp"
+ app:boxStrokeColor="?attr/primaryTextColor"
+ app:hintTextColor="?attr/primaryTextColor"
+ style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox">
+
+ <com.google.android.material.textfield.TextInputEditText
+ android:id="@+id/caption_text_input_edit_text_set_reddit_gallery_item_caption_and_url_bottom_sheet_fragment"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:fontFamily="?attr/font_family"
+ android:textSize="?attr/font_default"
+ android:textColor="?attr/primaryTextColor"
+ android:hint="@string/reddit_gallery_item_caption_hint"
+ android:maxLength="180" />
+
+ </com.google.android.material.textfield.TextInputLayout>
+
+ <com.google.android.material.textfield.TextInputLayout
+ android:id="@+id/url_text_input_layout_set_reddit_gallery_item_caption_and_url_bottom_sheet_fragment"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingTop="8dp"
+ android:paddingBottom="8dp"
+ android:paddingStart="16dp"
+ android:paddingEnd="16dp"
+ app:boxStrokeColor="?attr/primaryTextColor"
+ app:hintTextColor="?attr/primaryTextColor"
+ style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox">
+
+ <com.google.android.material.textfield.TextInputEditText
+ android:id="@+id/url_text_input_edit_text_set_reddit_gallery_item_caption_and_url_bottom_sheet_fragment"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:fontFamily="?attr/font_family"
+ android:textSize="?attr/font_default"
+ android:textColor="?attr/primaryTextColor"
+ android:hint="@string/reddit_gallery_item_url_hint" />
+
+ </com.google.android.material.textfield.TextInputLayout>
+
+ <com.google.android.material.button.MaterialButton
+ android:id="@+id/ok_button_set_reddit_gallery_item_caption_and_url_bottom_sheet_fragment"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="bottom|end"
+ android:layout_margin="16dp"
+ android:backgroundTint="?attr/colorPrimaryLightTheme"
+ android:text="@string/ok"
+ android:fontFamily="?attr/font_family"
+ android:textSize="?attr/font_default"
+ android:textColor="#FFFFFF" />
+
+ </LinearLayout>
+
+</androidx.core.widget.NestedScrollView> \ 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 148fedc6..c1a9b8c7 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1258,4 +1258,7 @@
<string name="unable_to_load_font">Unable to load custom font</string>
<string name="unable_to_copy_font_file">Unable to copy your font</string>
+ <string name="reddit_gallery_item_caption_hint">Caption (max 180 characters)</string>
+ <string name="reddit_gallery_item_url_hint">Url</string>
+
</resources>