diff options
author | Docile-Alligator <25734209+Docile-Alligator@users.noreply.github.com> | 2023-11-28 05:08:18 +0000 |
---|---|---|
committer | Docile-Alligator <25734209+Docile-Alligator@users.noreply.github.com> | 2023-11-28 05:08:18 +0000 |
commit | 776f0aa01f7387a6d7a03fb9d965af969800799f (patch) | |
tree | 653a3d229d74cbdf0218fe31f2d663f42db32b2e /app/src/main/java | |
parent | 966bac159702a1fc648d8448f58f5a2138ebb346 (diff) | |
download | infinity-for-reddit-776f0aa01f7387a6d7a03fb9d965af969800799f.tar infinity-for-reddit-776f0aa01f7387a6d7a03fb9d965af969800799f.tar.gz infinity-for-reddit-776f0aa01f7387a6d7a03fb9d965af969800799f.tar.bz2 infinity-for-reddit-776f0aa01f7387a6d7a03fb9d965af969800799f.tar.lz infinity-for-reddit-776f0aa01f7387a6d7a03fb9d965af969800799f.tar.xz infinity-for-reddit-776f0aa01f7387a6d7a03fb9d965af969800799f.tar.zst infinity-for-reddit-776f0aa01f7387a6d7a03fb9d965af969800799f.zip |
Hide images and gifs in ImageAndGifEntry and EmotePlugin if corresponding data saving settings are enabled.
Diffstat (limited to 'app/src/main/java')
13 files changed, 248 insertions, 67 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 a6af969e..df2d6faa 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CommentActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CommentActivity.java @@ -60,6 +60,7 @@ import ml.docilealligator.infinityforreddit.bottomsheetfragments.UploadedImagesB import ml.docilealligator.infinityforreddit.comment.Comment; import ml.docilealligator.infinityforreddit.comment.SendComment; import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper; +import ml.docilealligator.infinityforreddit.events.ChangeNetworkStatusEvent; import ml.docilealligator.infinityforreddit.markdown.CustomMarkwonAdapter; import ml.docilealligator.infinityforreddit.customviews.LinearLayoutManagerBugFixed; import ml.docilealligator.infinityforreddit.databinding.ActivityCommentBinding; @@ -135,6 +136,8 @@ public class CommentActivity extends BaseActivity implements UploadImageEnabledA @ColorInt private int parentSpoilerBackgroundColor; private ActivityCommentBinding binding; + private EmotePlugin emotePlugin; + private ImageAndGifEntry imageAndGifEntry; @Override protected void onCreate(Bundle savedInstanceState) { @@ -215,12 +218,9 @@ public class CommentActivity extends BaseActivity implements UploadImageEnabledA } }; EmoteCloseBracketInlineProcessor emoteCloseBracketInlineProcessor = new EmoteCloseBracketInlineProcessor(); - EmotePlugin emotePlugin = EmotePlugin.create(this); + emotePlugin = EmotePlugin.create(this); ImageAndGifPlugin imageAndGifPlugin = new ImageAndGifPlugin(); - Markwon postBodyMarkwon = MarkdownUtils.createFullRedditMarkwon(this, - miscPlugin, emoteCloseBracketInlineProcessor, emotePlugin, imageAndGifPlugin, parentTextColor, - parentSpoilerBackgroundColor, null); - CustomMarkwonAdapter markwonAdapter = MarkdownUtils.createCustomTablesAdapter(new ImageAndGifEntry(this, mGlide, mediaMetadata -> { + imageAndGifEntry = new ImageAndGifEntry(this, mGlide, mediaMetadata -> { Intent imageIntent = new Intent(this, ViewImageOrGifActivity.class); if (mediaMetadata.isGIF) { imageIntent.putExtra(ViewImageOrGifActivity.EXTRA_IMAGE_URL_KEY, mediaMetadata.original.url); @@ -229,7 +229,11 @@ public class CommentActivity extends BaseActivity implements UploadImageEnabledA } imageIntent.putExtra(ViewImageOrGifActivity.EXTRA_SUBREDDIT_OR_USERNAME_KEY, intent.getStringExtra(EXTRA_SUBREDDIT_NAME_KEY)); imageIntent.putExtra(ViewImageOrGifActivity.EXTRA_FILE_NAME_KEY, mediaMetadata.fileName); - })); + }); + Markwon postBodyMarkwon = MarkdownUtils.createFullRedditMarkwon(this, + miscPlugin, emoteCloseBracketInlineProcessor, emotePlugin, imageAndGifPlugin, parentTextColor, + parentSpoilerBackgroundColor, null); + CustomMarkwonAdapter markwonAdapter = MarkdownUtils.createCustomTablesAdapter(imageAndGifEntry); markwonAdapter.setOnLongClickListener(view -> { Utils.hideKeyboard(CommentActivity.this); CopyTextBottomSheetFragment.show(getSupportFragmentManager(), @@ -514,6 +518,20 @@ public class CommentActivity extends BaseActivity implements UploadImageEnabledA finish(); } + @Subscribe + public void onChangeNetworkStatusEvent(ChangeNetworkStatusEvent changeNetworkStatusEvent) { + String dataSavingMode = mSharedPreferences.getString(SharedPreferencesUtils.DATA_SAVING_MODE, SharedPreferencesUtils.DATA_SAVING_MODE_OFF); + if (dataSavingMode.equals(SharedPreferencesUtils.DATA_SAVING_MODE_ONLY_ON_CELLULAR_DATA)) { + if (emotePlugin != null) { + emotePlugin.setDataSavingMode(changeNetworkStatusEvent.connectedNetwork == Utils.NETWORK_TYPE_CELLULAR); + } + + if (imageAndGifEntry != null) { + imageAndGifEntry.setDataSavingMode(changeNetworkStatusEvent.connectedNetwork == Utils.NETWORK_TYPE_CELLULAR); + } + } + } + @Override public void uploadImage() { Intent intent = new Intent(); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/FullMarkdownActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/FullMarkdownActivity.java index 33363ec3..e3e5a263 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/FullMarkdownActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/FullMarkdownActivity.java @@ -38,6 +38,7 @@ import io.noties.markwon.core.MarkwonTheme; import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper; +import ml.docilealligator.infinityforreddit.events.ChangeNetworkStatusEvent; import ml.docilealligator.infinityforreddit.markdown.CustomMarkwonAdapter; import ml.docilealligator.infinityforreddit.customviews.LinearLayoutManagerBugFixed; import ml.docilealligator.infinityforreddit.customviews.SwipeLockInterface; @@ -50,6 +51,7 @@ import ml.docilealligator.infinityforreddit.markdown.ImageAndGifEntry; import ml.docilealligator.infinityforreddit.markdown.ImageAndGifPlugin; import ml.docilealligator.infinityforreddit.markdown.MarkdownUtils; import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils; +import ml.docilealligator.infinityforreddit.utils.Utils; public class FullMarkdownActivity extends BaseActivity { @@ -72,6 +74,8 @@ public class FullMarkdownActivity extends BaseActivity { SharedPreferences mSharedPreferences; @Inject CustomThemeWrapper mCustomThemeWrapper; + private EmotePlugin emotePlugin; + private ImageAndGifEntry imageAndGifEntry; @Override protected void onCreate(Bundle savedInstanceState) { @@ -144,13 +148,9 @@ public class FullMarkdownActivity extends BaseActivity { } }; EmoteCloseBracketInlineProcessor emoteCloseBracketInlineProcessor = new EmoteCloseBracketInlineProcessor(); - EmotePlugin emotePlugin = EmotePlugin.create(this); + emotePlugin = EmotePlugin.create(this); ImageAndGifPlugin imageAndGifPlugin = new ImageAndGifPlugin(); - Markwon markwon = MarkdownUtils.createFullRedditMarkwon(this, - miscPlugin, emoteCloseBracketInlineProcessor, emotePlugin, imageAndGifPlugin, markdownColor, - spoilerBackgroundColor, null); - - CustomMarkwonAdapter markwonAdapter = MarkdownUtils.createCustomTablesAdapter(new ImageAndGifEntry(this, + imageAndGifEntry = new ImageAndGifEntry(this, Glide.with(this), mediaMetadata -> { Intent intent = new Intent(this, ViewImageOrGifActivity.class); if (mediaMetadata.isGIF) { @@ -160,7 +160,12 @@ public class FullMarkdownActivity extends BaseActivity { } intent.putExtra(ViewImageOrGifActivity.EXTRA_IS_NSFW, isNsfw); intent.putExtra(ViewImageOrGifActivity.EXTRA_FILE_NAME_KEY, mediaMetadata.fileName); - })); + }); + Markwon markwon = MarkdownUtils.createFullRedditMarkwon(this, + miscPlugin, emoteCloseBracketInlineProcessor, emotePlugin, imageAndGifPlugin, markdownColor, + spoilerBackgroundColor, null); + + CustomMarkwonAdapter markwonAdapter = MarkdownUtils.createCustomTablesAdapter(imageAndGifEntry); LinearLayoutManagerBugFixed linearLayoutManager = new SwipeLockLinearLayoutManager(this, new SwipeLockInterface() { @Override public void lockSwipe() { @@ -235,4 +240,18 @@ public class FullMarkdownActivity extends BaseActivity { finish(); } } + + @Subscribe + public void onChangeNetworkStatusEvent(ChangeNetworkStatusEvent changeNetworkStatusEvent) { + String dataSavingMode = mSharedPreferences.getString(SharedPreferencesUtils.DATA_SAVING_MODE, SharedPreferencesUtils.DATA_SAVING_MODE_OFF); + if (dataSavingMode.equals(SharedPreferencesUtils.DATA_SAVING_MODE_ONLY_ON_CELLULAR_DATA)) { + if (emotePlugin != null) { + emotePlugin.setDataSavingMode(changeNetworkStatusEvent.connectedNetwork == Utils.NETWORK_TYPE_CELLULAR); + } + + if (imageAndGifEntry != null) { + imageAndGifEntry.setDataSavingMode(changeNetworkStatusEvent.connectedNetwork == Utils.NETWORK_TYPE_CELLULAR); + } + } + } }
\ No newline at end of file diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/RulesActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/RulesActivity.java index 8644704f..aa83aaa5 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/RulesActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/RulesActivity.java @@ -39,8 +39,10 @@ import ml.docilealligator.infinityforreddit.adapters.RulesRecyclerViewAdapter; import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper; import ml.docilealligator.infinityforreddit.customviews.slidr.Slidr; import ml.docilealligator.infinityforreddit.customviews.slidr.widget.SliderPanel; +import ml.docilealligator.infinityforreddit.events.ChangeNetworkStatusEvent; import ml.docilealligator.infinityforreddit.events.SwitchAccountEvent; import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils; +import ml.docilealligator.infinityforreddit.utils.Utils; import retrofit2.Retrofit; public class RulesActivity extends BaseActivity { @@ -224,4 +226,12 @@ public class RulesActivity extends BaseActivity { public void onAccountSwitchEvent(SwitchAccountEvent event) { finish(); } + + @Subscribe + public void onChangeNetworkStatusEvent(ChangeNetworkStatusEvent changeNetworkStatusEvent) { + String dataSavingMode = mSharedPreferences.getString(SharedPreferencesUtils.DATA_SAVING_MODE, SharedPreferencesUtils.DATA_SAVING_MODE_OFF); + if (mAdapter != null && dataSavingMode.equals(SharedPreferencesUtils.DATA_SAVING_MODE_ONLY_ON_CELLULAR_DATA)) { + mAdapter.setDataSavingMode(changeNetworkStatusEvent.connectedNetwork == Utils.NETWORK_TYPE_CELLULAR); + } + } } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/WikiActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/WikiActivity.java index cd2f9526..a65a49fc 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/WikiActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/WikiActivity.java @@ -51,6 +51,7 @@ import ml.docilealligator.infinityforreddit.customviews.LinearLayoutManagerBugFi import ml.docilealligator.infinityforreddit.customviews.SwipeLockInterface; import ml.docilealligator.infinityforreddit.customviews.SwipeLockLinearLayoutManager; import ml.docilealligator.infinityforreddit.customviews.slidr.Slidr; +import ml.docilealligator.infinityforreddit.events.ChangeNetworkStatusEvent; import ml.docilealligator.infinityforreddit.events.SwitchAccountEvent; import ml.docilealligator.infinityforreddit.markdown.EmoteCloseBracketInlineProcessor; import ml.docilealligator.infinityforreddit.markdown.EmotePlugin; @@ -103,6 +104,7 @@ public class WikiActivity extends BaseActivity { private EmoteCloseBracketInlineProcessor emoteCloseBracketInlineProcessor; private EmotePlugin emotePlugin; private ImageAndGifPlugin imageAndGifPlugin; + private ImageAndGifEntry imageAndGifEntry; private Markwon markwon; private MarkwonAdapter markwonAdapter; private boolean isRefreshing = false; @@ -188,10 +190,7 @@ public class WikiActivity extends BaseActivity { emoteCloseBracketInlineProcessor = new EmoteCloseBracketInlineProcessor(); emotePlugin = EmotePlugin.create(this); imageAndGifPlugin = new ImageAndGifPlugin(); - markwon = MarkdownUtils.createFullRedditMarkwon(this, - miscPlugin, emoteCloseBracketInlineProcessor, emotePlugin, imageAndGifPlugin, markdownColor, spoilerBackgroundColor, onLinkLongClickListener); - - markwonAdapter = MarkdownUtils.createCustomTablesAdapter(new ImageAndGifEntry(this, + imageAndGifEntry = new ImageAndGifEntry(this, mGlide, mediaMetadata -> { Intent intent = new Intent(this, ViewImageOrGifActivity.class); if (mediaMetadata.isGIF) { @@ -201,7 +200,11 @@ public class WikiActivity extends BaseActivity { } intent.putExtra(ViewImageOrGifActivity.EXTRA_SUBREDDIT_OR_USERNAME_KEY, mSubredditName); intent.putExtra(ViewImageOrGifActivity.EXTRA_FILE_NAME_KEY, mediaMetadata.fileName); - })); + }); + markwon = MarkdownUtils.createFullRedditMarkwon(this, + miscPlugin, emoteCloseBracketInlineProcessor, emotePlugin, imageAndGifPlugin, markdownColor, spoilerBackgroundColor, onLinkLongClickListener); + + markwonAdapter = MarkdownUtils.createCustomTablesAdapter(imageAndGifEntry); LinearLayoutManagerBugFixed linearLayoutManager = new SwipeLockLinearLayoutManager(this, new SwipeLockInterface() { @Override public void lockSwipe() { @@ -335,4 +338,18 @@ public class WikiActivity extends BaseActivity { finish(); } } + + @Subscribe + public void onChangeNetworkStatusEvent(ChangeNetworkStatusEvent changeNetworkStatusEvent) { + String dataSavingMode = mSharedPreferences.getString(SharedPreferencesUtils.DATA_SAVING_MODE, SharedPreferencesUtils.DATA_SAVING_MODE_OFF); + if (dataSavingMode.equals(SharedPreferencesUtils.DATA_SAVING_MODE_ONLY_ON_CELLULAR_DATA)) { + if (emotePlugin != null) { + emotePlugin.setDataSavingMode(changeNetworkStatusEvent.connectedNetwork == Utils.NETWORK_TYPE_CELLULAR); + } + + if (imageAndGifEntry != null) { + imageAndGifEntry.setDataSavingMode(changeNetworkStatusEvent.connectedNetwork == Utils.NETWORK_TYPE_CELLULAR); + } + } + } }
\ No newline at end of file diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/CommentsListingRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/CommentsListingRecyclerViewAdapter.java index ce979f78..5e52b063 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/CommentsListingRecyclerViewAdapter.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/CommentsListingRecyclerViewAdapter.java @@ -365,6 +365,11 @@ public class CommentsListingRecyclerViewAdapter extends PagedListAdapter<Comment this.canStartActivity = canStartActivity; } + public void setDataSavingMode(boolean dataSavingMode) { + mEmotePlugin.setDataSavingMode(dataSavingMode); + mImageAndGifEntry.setDataSavingMode(dataSavingMode); + } + public interface RetryLoadingMoreCallback { void retryLoadingMore(); } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/CommentsRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/CommentsRecyclerViewAdapter.java index 454d5398..672a2be0 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/CommentsRecyclerViewAdapter.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/CommentsRecyclerViewAdapter.java @@ -1187,6 +1187,11 @@ public class CommentsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerVi } } + public void setDataSavingMode(boolean dataSavingMode) { + mEmotePlugin.setDataSavingMode(dataSavingMode); + mImageAndGifEntry.setDataSavingMode(dataSavingMode); + } + public interface CommentRecyclerViewAdapterCallback { void retryFetchingComments(); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostDetailRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostDetailRecyclerViewAdapter.java index 5e5e8760..0f433688 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostDetailRecyclerViewAdapter.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostDetailRecyclerViewAdapter.java @@ -388,7 +388,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler return true; }; mEmoteCloseBracketInlineProcessor = new EmoteCloseBracketInlineProcessor(); - mEmotePlugin = EmotePlugin.create(activity); + mEmotePlugin = EmotePlugin.create(activity, mDataSavingMode, mDisableImagePreview); mImageAndGifPlugin = new ImageAndGifPlugin(); mPostDetailMarkwon = MarkdownUtils.createFullRedditMarkwon(mActivity, miscPlugin, mEmoteCloseBracketInlineProcessor, mEmotePlugin, mImageAndGifPlugin, markdownColor, @@ -980,6 +980,8 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler public void setDataSavingMode(boolean dataSavingMode) { mDataSavingMode = dataSavingMode; + mEmotePlugin.setDataSavingMode(dataSavingMode); + mImageAndGifEntry.setDataSavingMode(dataSavingMode); } public void onItemSwipe(RecyclerView.ViewHolder viewHolder, int direction, int swipeLeftAction, int swipeRightAction) { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/RulesRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/RulesRecyclerViewAdapter.java index 9c6457ec..8d7ce6dc 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/RulesRecyclerViewAdapter.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/RulesRecyclerViewAdapter.java @@ -46,6 +46,7 @@ public class RulesRecyclerViewAdapter extends RecyclerView.Adapter<RulesRecycler private EmoteCloseBracketInlineProcessor emoteCloseBracketInlineProcessor; private EmotePlugin emotePlugin; private ImageAndGifPlugin imageAndGifPlugin; + private ImageAndGifEntry imageAndGifEntry; private Markwon markwon; @Nullable private final SliderPanel sliderPanel; @@ -96,6 +97,18 @@ public class RulesRecyclerViewAdapter extends RecyclerView.Adapter<RulesRecycler emoteCloseBracketInlineProcessor = new EmoteCloseBracketInlineProcessor(); emotePlugin = EmotePlugin.create(activity); imageAndGifPlugin = new ImageAndGifPlugin(); + imageAndGifEntry = new ImageAndGifEntry(activity, + Glide.with(activity), + mediaMetadata -> { + Intent imageIntent = new Intent(activity, ViewImageOrGifActivity.class); + if (mediaMetadata.isGIF) { + imageIntent.putExtra(ViewImageOrGifActivity.EXTRA_IMAGE_URL_KEY, mediaMetadata.original.url); + } else { + imageIntent.putExtra(ViewImageOrGifActivity.EXTRA_GIF_URL_KEY, mediaMetadata.original.url); + } + imageIntent.putExtra(ViewImageOrGifActivity.EXTRA_SUBREDDIT_OR_USERNAME_KEY, subredditName); + imageIntent.putExtra(ViewImageOrGifActivity.EXTRA_FILE_NAME_KEY, mediaMetadata.fileName); + }); markwon = MarkdownUtils.createFullRedditMarkwon(activity, miscPlugin, emoteCloseBracketInlineProcessor, emotePlugin, imageAndGifPlugin, mPrimaryTextColor, spoilerBackgroundColor, onLinkLongClickListener); @@ -136,6 +149,11 @@ public class RulesRecyclerViewAdapter extends RecyclerView.Adapter<RulesRecycler notifyDataSetChanged(); } + public void setDataSavingMode(boolean dataSavingMode) { + emotePlugin.setDataSavingMode(dataSavingMode); + imageAndGifEntry.setDataSavingMode(dataSavingMode); + } + class RuleViewHolder extends RecyclerView.ViewHolder { @BindView(R.id.short_name_text_view_item_rule) TextView shortNameTextView; @@ -152,18 +170,7 @@ public class RulesRecyclerViewAdapter extends RecyclerView.Adapter<RulesRecycler if (activity.typeface != null) { shortNameTextView.setTypeface(activity.typeface); } - markwonAdapter = MarkdownUtils.createCustomTablesAdapter(new ImageAndGifEntry(activity, - Glide.with(activity), - mediaMetadata -> { - Intent imageIntent = new Intent(activity, ViewImageOrGifActivity.class); - if (mediaMetadata.isGIF) { - imageIntent.putExtra(ViewImageOrGifActivity.EXTRA_IMAGE_URL_KEY, mediaMetadata.original.url); - } else { - imageIntent.putExtra(ViewImageOrGifActivity.EXTRA_GIF_URL_KEY, mediaMetadata.original.url); - } - imageIntent.putExtra(ViewImageOrGifActivity.EXTRA_SUBREDDIT_OR_USERNAME_KEY, subredditName); - imageIntent.putExtra(ViewImageOrGifActivity.EXTRA_FILE_NAME_KEY, mediaMetadata.fileName); - })); + markwonAdapter = MarkdownUtils.createCustomTablesAdapter(imageAndGifEntry); SwipeLockLinearLayoutManager swipeLockLinearLayoutManager = new SwipeLockLinearLayoutManager(activity, new SwipeLockInterface() { @Override diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/CommentsListingFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/CommentsListingFragment.java index fe5f3b66..b41b2908 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/CommentsListingFragment.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/CommentsListingFragment.java @@ -30,6 +30,9 @@ import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import com.bumptech.glide.Glide; import com.bumptech.glide.RequestManager; +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; + import java.util.concurrent.Executor; import javax.inject.Inject; @@ -49,6 +52,9 @@ import ml.docilealligator.infinityforreddit.adapters.CommentsListingRecyclerView import ml.docilealligator.infinityforreddit.comment.CommentViewModel; import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper; import ml.docilealligator.infinityforreddit.customviews.LinearLayoutManagerBugFixed; +import ml.docilealligator.infinityforreddit.events.ChangeDataSavingModeEvent; +import ml.docilealligator.infinityforreddit.events.ChangeDisableImagePreviewEvent; +import ml.docilealligator.infinityforreddit.events.ChangeNetworkStatusEvent; import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils; import ml.docilealligator.infinityforreddit.utils.Utils; import retrofit2.Retrofit; @@ -130,6 +136,8 @@ public class CommentsListingFragment extends Fragment implements FragmentCommuni ButterKnife.bind(this, rootView); + EventBus.getDefault().register(this); + applyTheme(); mGlide = Glide.with(mActivity); @@ -342,6 +350,12 @@ public class CommentsListingFragment extends Fragment implements FragmentCommuni } } + @Override + public void onDestroy() { + super.onDestroy(); + EventBus.getDefault().unregister(this); + } + public void changeSortType(SortType sortType) { mCommentViewModel.changeSortType(sortType); this.sortType = sortType; @@ -412,4 +426,14 @@ public class CommentsListingFragment extends Fragment implements FragmentCommuni mAdapter.editComment(commentMarkdown, position); } } + + @Subscribe + public void onChangeNetworkStatusEvent(ChangeNetworkStatusEvent changeNetworkStatusEvent) { + if (mAdapter != null) { + String dataSavingMode = mSharedPreferences.getString(SharedPreferencesUtils.DATA_SAVING_MODE, SharedPreferencesUtils.DATA_SAVING_MODE_OFF); + if (dataSavingMode.equals(SharedPreferencesUtils.DATA_SAVING_MODE_ONLY_ON_CELLULAR_DATA)) { + mAdapter.setDataSavingMode(changeNetworkStatusEvent.connectedNetwork == Utils.NETWORK_TYPE_CELLULAR); + } + } + } } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/SidebarFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/SidebarFragment.java index 6d171a3a..d84617cf 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/SidebarFragment.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/SidebarFragment.java @@ -20,6 +20,9 @@ import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import com.bumptech.glide.Glide; +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; + import java.util.concurrent.Executor; import javax.inject.Inject; @@ -43,6 +46,7 @@ import ml.docilealligator.infinityforreddit.asynctasks.InsertSubredditData; import ml.docilealligator.infinityforreddit.bottomsheetfragments.CopyTextBottomSheetFragment; import ml.docilealligator.infinityforreddit.bottomsheetfragments.UrlMenuBottomSheetFragment; import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper; +import ml.docilealligator.infinityforreddit.events.ChangeNetworkStatusEvent; import ml.docilealligator.infinityforreddit.markdown.CustomMarkwonAdapter; import ml.docilealligator.infinityforreddit.customviews.LinearLayoutManagerBugFixed; import ml.docilealligator.infinityforreddit.markdown.EmoteCloseBracketInlineProcessor; @@ -53,6 +57,8 @@ import ml.docilealligator.infinityforreddit.markdown.MarkdownUtils; import ml.docilealligator.infinityforreddit.subreddit.FetchSubredditData; import ml.docilealligator.infinityforreddit.subreddit.SubredditData; import ml.docilealligator.infinityforreddit.subreddit.SubredditViewModel; +import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils; +import ml.docilealligator.infinityforreddit.utils.Utils; import retrofit2.Retrofit; public class SidebarFragment extends Fragment { @@ -82,6 +88,8 @@ public class SidebarFragment extends Fragment { private LinearLayoutManagerBugFixed linearLayoutManager; private int markdownColor; private String sidebarDescription; + private EmotePlugin emotePlugin; + private ImageAndGifEntry imageAndGifEntry; public SidebarFragment() { // Required empty public constructor @@ -97,6 +105,8 @@ public class SidebarFragment extends Fragment { ButterKnife.bind(this, rootView); + EventBus.getDefault().register(this); + mAccessToken = getArguments().getString(EXTRA_ACCESS_TOKEN); subredditName = getArguments().getString(EXTRA_SUBREDDIT_NAME); if (subredditName == null) { @@ -149,12 +159,9 @@ public class SidebarFragment extends Fragment { return true; }; EmoteCloseBracketInlineProcessor emoteCloseBracketInlineProcessor = new EmoteCloseBracketInlineProcessor(); - EmotePlugin emotePlugin = EmotePlugin.create(activity); + emotePlugin = EmotePlugin.create(activity); ImageAndGifPlugin imageAndGifPlugin = new ImageAndGifPlugin(); - Markwon markwon = MarkdownUtils.createFullRedditMarkwon(activity, - miscPlugin, emoteCloseBracketInlineProcessor, emotePlugin, imageAndGifPlugin, markdownColor, - spoilerBackgroundColor, onLinkLongClickListener); - CustomMarkwonAdapter markwonAdapter = MarkdownUtils.createCustomTablesAdapter(new ImageAndGifEntry(activity, + imageAndGifEntry = new ImageAndGifEntry(activity, Glide.with(this), mediaMetadata -> { Intent imageIntent = new Intent(activity, ViewImageOrGifActivity.class); @@ -165,7 +172,11 @@ public class SidebarFragment extends Fragment { } imageIntent.putExtra(ViewImageOrGifActivity.EXTRA_SUBREDDIT_OR_USERNAME_KEY, subredditName); imageIntent.putExtra(ViewImageOrGifActivity.EXTRA_FILE_NAME_KEY, mediaMetadata.fileName); - })); + }); + Markwon markwon = MarkdownUtils.createFullRedditMarkwon(activity, + miscPlugin, emoteCloseBracketInlineProcessor, emotePlugin, imageAndGifPlugin, markdownColor, + spoilerBackgroundColor, onLinkLongClickListener); + CustomMarkwonAdapter markwonAdapter = MarkdownUtils.createCustomTablesAdapter(imageAndGifEntry); markwonAdapter.setOnLongClickListener(view -> { if (sidebarDescription != null && !sidebarDescription.equals("")) { Bundle bundle = new Bundle(); @@ -218,6 +229,12 @@ public class SidebarFragment extends Fragment { activity = (ViewSubredditDetailActivity) context; } + @Override + public void onDestroy() { + super.onDestroy(); + EventBus.getDefault().unregister(this); + } + public void fetchSubredditData() { swipeRefreshLayout.setRefreshing(true); FetchSubredditData.fetchSubredditData(mOauthRetrofit, mRetrofit, subredditName, mAccessToken, new FetchSubredditData.FetchSubredditDataListener() { @@ -241,4 +258,23 @@ public class SidebarFragment extends Fragment { linearLayoutManager.scrollToPositionWithOffset(0, 0); } } + + public void setDataSavingMode(boolean dataSavingMode) { + emotePlugin.setDataSavingMode(dataSavingMode); + imageAndGifEntry.setDataSavingMode(dataSavingMode); + } + + @Subscribe + public void onChangeNetworkStatusEvent(ChangeNetworkStatusEvent changeNetworkStatusEvent) { + String dataSavingMode = activity.getDefaultSharedPreferences().getString(SharedPreferencesUtils.DATA_SAVING_MODE, SharedPreferencesUtils.DATA_SAVING_MODE_OFF); + if (dataSavingMode.equals(SharedPreferencesUtils.DATA_SAVING_MODE_ONLY_ON_CELLULAR_DATA)) { + if (emotePlugin != null) { + emotePlugin.setDataSavingMode(changeNetworkStatusEvent.connectedNetwork == Utils.NETWORK_TYPE_CELLULAR); + } + + if (imageAndGifEntry != null) { + imageAndGifEntry.setDataSavingMode(changeNetworkStatusEvent.connectedNetwork == Utils.NETWORK_TYPE_CELLULAR); + } + } + } } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/ViewPostDetailFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/ViewPostDetailFragment.java index 91113d84..e9618502 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/ViewPostDetailFragment.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/fragments/ViewPostDetailFragment.java @@ -2005,26 +2005,33 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic @Subscribe public void onChangeNetworkStatusEvent(ChangeNetworkStatusEvent changeNetworkStatusEvent) { - if (mPostAdapter != null) { - String autoplay = mSharedPreferences.getString(SharedPreferencesUtils.VIDEO_AUTOPLAY, SharedPreferencesUtils.VIDEO_AUTOPLAY_VALUE_NEVER); - String dataSavingMode = mSharedPreferences.getString(SharedPreferencesUtils.DATA_SAVING_MODE, SharedPreferencesUtils.DATA_SAVING_MODE_OFF); - boolean stateChanged = false; - if (autoplay.equals(SharedPreferencesUtils.VIDEO_AUTOPLAY_VALUE_ON_WIFI)) { + String autoplay = mSharedPreferences.getString(SharedPreferencesUtils.VIDEO_AUTOPLAY, SharedPreferencesUtils.VIDEO_AUTOPLAY_VALUE_NEVER); + String dataSavingMode = mSharedPreferences.getString(SharedPreferencesUtils.DATA_SAVING_MODE, SharedPreferencesUtils.DATA_SAVING_MODE_OFF); + boolean stateChanged = false; + if (autoplay.equals(SharedPreferencesUtils.VIDEO_AUTOPLAY_VALUE_ON_WIFI)) { + if (mPostAdapter != null) { mPostAdapter.setAutoplay(changeNetworkStatusEvent.connectedNetwork == Utils.NETWORK_TYPE_WIFI); - stateChanged = true; } - if (dataSavingMode.equals(SharedPreferencesUtils.DATA_SAVING_MODE_ONLY_ON_CELLULAR_DATA)) { + stateChanged = true; + } + if (dataSavingMode.equals(SharedPreferencesUtils.DATA_SAVING_MODE_ONLY_ON_CELLULAR_DATA)) { + if (mPostAdapter != null) { mPostAdapter.setDataSavingMode(changeNetworkStatusEvent.connectedNetwork == Utils.NETWORK_TYPE_CELLULAR); - stateChanged = true; } + if (mCommentsAdapter != null) { + mCommentsAdapter.setDataSavingMode(changeNetworkStatusEvent.connectedNetwork == Utils.NETWORK_TYPE_CELLULAR); + } + stateChanged = true; + } - if (stateChanged) { - if (mCommentsRecyclerView == null) { - refreshAdapter(mRecyclerView, mConcatAdapter); - } else { + if (stateChanged) { + if (mCommentsRecyclerView == null) { + refreshAdapter(mRecyclerView, mConcatAdapter); + } else { + if (mPostAdapter != null) { refreshAdapter(mRecyclerView, mPostAdapter); - refreshAdapter(mCommentsRecyclerView, mCommentsAdapter); } + refreshAdapter(mCommentsRecyclerView, mCommentsAdapter); } } } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/markdown/EmotePlugin.java b/app/src/main/java/ml/docilealligator/infinityforreddit/markdown/EmotePlugin.java index 05675498..2cdae1a4 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/markdown/EmotePlugin.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/markdown/EmotePlugin.java @@ -1,6 +1,5 @@ package ml.docilealligator.infinityforreddit.markdown; -import android.content.Context; import android.graphics.drawable.Animatable; import android.graphics.drawable.Drawable; import android.text.Spanned; @@ -34,9 +33,14 @@ import io.noties.markwon.image.AsyncDrawableLoader; import io.noties.markwon.image.AsyncDrawableScheduler; import io.noties.markwon.image.DrawableUtils; import io.noties.markwon.image.ImageProps; +import ml.docilealligator.infinityforreddit.activities.BaseActivity; +import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils; +import ml.docilealligator.infinityforreddit.utils.Utils; public class EmotePlugin extends AbstractMarkwonPlugin { - private boolean disableImagePreview = true; + private final GlideAsyncDrawableLoader glideAsyncDrawableLoader; + private boolean dataSavingMode; + private boolean disableImagePreview; public interface GlideStore { @@ -47,16 +51,12 @@ public class EmotePlugin extends AbstractMarkwonPlugin { } @NonNull - public static EmotePlugin create(@NonNull final Context context) { + public static EmotePlugin create(@NonNull final BaseActivity baseActivity) { // @since 4.5.0 cache RequestManager // sometimes `cancel` would be called after activity is destroyed, - // so `Glide.with(context)` will throw an exception - return create(Glide.with(context)); - } - - @NonNull - public static EmotePlugin create(@NonNull final RequestManager requestManager) { - return create(new GlideStore() { + // so `Glide.with(baseActivity)` will throw an exception + RequestManager requestManager = Glide.with(baseActivity); + return new EmotePlugin(baseActivity, new GlideStore() { @NonNull @Override public RequestBuilder<Drawable> load(@NonNull AsyncDrawable drawable) { @@ -71,15 +71,42 @@ public class EmotePlugin extends AbstractMarkwonPlugin { } @NonNull - public static EmotePlugin create(@NonNull GlideStore glideStore) { - return new EmotePlugin(glideStore); + public static EmotePlugin create(@NonNull final BaseActivity baseActivity, boolean dataSavingMode, boolean disableImagePreview) { + // @since 4.5.0 cache RequestManager + // sometimes `cancel` would be called after activity is destroyed, + // so `Glide.with(baseActivity)` will throw an exception + RequestManager requestManager = Glide.with(baseActivity); + return new EmotePlugin(baseActivity, new GlideStore() { + @NonNull + @Override + public RequestBuilder<Drawable> load(@NonNull AsyncDrawable drawable) { + return requestManager.load(drawable.getDestination()); + } + + @Override + public void cancel(@NonNull Target<?> target) { + requestManager.clear(target); + } + }, dataSavingMode, disableImagePreview); } - private final GlideAsyncDrawableLoader glideAsyncDrawableLoader; + @SuppressWarnings("WeakerAccess") + EmotePlugin(@NonNull final BaseActivity baseActivity, @NonNull GlideStore glideStore) { + this.glideAsyncDrawableLoader = new GlideAsyncDrawableLoader(glideStore); + String dataSavingModeString = baseActivity.getDefaultSharedPreferences().getString(SharedPreferencesUtils.DATA_SAVING_MODE, SharedPreferencesUtils.DATA_SAVING_MODE_OFF); + if (dataSavingModeString.equals(SharedPreferencesUtils.DATA_SAVING_MODE_ALWAYS)) { + dataSavingMode = true; + } else if (dataSavingModeString.equals(SharedPreferencesUtils.DATA_SAVING_MODE_ONLY_ON_CELLULAR_DATA)) { + dataSavingMode = Utils.getConnectedNetwork(baseActivity) == Utils.NETWORK_TYPE_CELLULAR; + } + disableImagePreview = baseActivity.getDefaultSharedPreferences().getBoolean(SharedPreferencesUtils.DISABLE_IMAGE_PREVIEW, false); + } @SuppressWarnings("WeakerAccess") - EmotePlugin(@NonNull GlideStore glideStore) { + EmotePlugin(@NonNull final BaseActivity baseActivity, @NonNull GlideStore glideStore, boolean dataSavingMode, boolean disableImagePreview) { this.glideAsyncDrawableLoader = new GlideAsyncDrawableLoader(glideStore); + this.dataSavingMode = dataSavingMode; + this.disableImagePreview = disableImagePreview; } @Override @@ -95,7 +122,7 @@ public class EmotePlugin extends AbstractMarkwonPlugin { @Override public void configureVisitor(@NonNull MarkwonVisitor.Builder builder) { builder.on(Emote.class, (visitor, emote) -> { - if (disableImagePreview) { + if (dataSavingMode && disableImagePreview) { Link link = new Link(emote.getMediaMetadata().original.url, emote.getTitle()); final int length = visitor.length(); @@ -155,8 +182,8 @@ public class EmotePlugin extends AbstractMarkwonPlugin { AsyncDrawableScheduler.schedule(textView); } - public void setDisableImagePreview(boolean disableImagePreview) { - this.disableImagePreview = disableImagePreview; + public void setDataSavingMode(boolean dataSavingMode) { + this.dataSavingMode = dataSavingMode; } private static class GlideAsyncDrawableLoader extends AsyncDrawableLoader { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/markdown/ImageAndGifEntry.java b/app/src/main/java/ml/docilealligator/infinityforreddit/markdown/ImageAndGifEntry.java index 12e62632..68611cb0 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/markdown/ImageAndGifEntry.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/markdown/ImageAndGifEntry.java @@ -185,6 +185,10 @@ public class ImageAndGifEntry extends MarkwonAdapter.Entry<ImageAndGifBlock, Ima holder.binding.captionTextViewMarkdownImageAndGifBlock.setGravity(Gravity.CENTER_HORIZONTAL); } + public void setDataSavingMode(boolean dataSavingMode) { + this.dataSavingMode = dataSavingMode; + } + public class Holder extends MarkwonAdapter.Holder { MarkdownImageAndGifBlockBinding binding; RequestListener<Drawable> requestListener; |