From 012dca977aa226cc273457e3ba0d9c30821510b0 Mon Sep 17 00:00:00 2001 From: Alex Ning Date: Sat, 23 Jan 2021 23:07:54 +0800 Subject: Finally fixed java.lang.RuntimeException: Canvas: trying to draw too large bitmap. Rewrite some AsyncTasks using Executor. --- .../activities/AccountPostsActivity.java | 7 -- .../activities/CommentActivity.java | 4 - .../activities/CreateMultiRedditActivity.java | 3 - .../activities/CustomThemeListingActivity.java | 20 ++-- .../activities/CustomizeThemeActivity.java | 29 ++--- .../activities/EditCommentActivity.java | 7 +- .../activities/EditMultiRedditActivity.java | 4 - .../activities/EditPostActivity.java | 6 +- .../activities/GiveAwardActivity.java | 5 +- .../activities/ViewPostDetailActivity.java | 1 - .../CommentAndPostRecyclerViewAdapter.java | 12 +-- .../adapters/PostRecyclerViewAdapter.java | 7 +- .../asynctasks/GetCustomTheme.java | 45 ++++++++ .../asynctasks/GetCustomThemeAsyncTask.java | 60 ----------- .../asynctasks/InsertCustomTheme.java | 56 ++++++++++ .../asynctasks/InsertCustomThemeAsyncTask.java | 80 -------------- .../infinityforreddit/award/GiveAward.java | 118 ++++++++------------- .../CommentMoreBottomSheetFragment.java | 1 - 18 files changed, 200 insertions(+), 265 deletions(-) create mode 100644 app/src/main/java/ml/docilealligator/infinityforreddit/asynctasks/GetCustomTheme.java delete mode 100644 app/src/main/java/ml/docilealligator/infinityforreddit/asynctasks/GetCustomThemeAsyncTask.java create mode 100644 app/src/main/java/ml/docilealligator/infinityforreddit/asynctasks/InsertCustomTheme.java delete mode 100644 app/src/main/java/ml/docilealligator/infinityforreddit/asynctasks/InsertCustomThemeAsyncTask.java (limited to 'app/src') diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/AccountPostsActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/AccountPostsActivity.java index ac328bba..7f4642ef 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/AccountPostsActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/AccountPostsActivity.java @@ -22,8 +22,6 @@ import com.r0adkll.slidr.Slidr; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; -import java.util.concurrent.Executor; - import javax.inject.Inject; import javax.inject.Named; @@ -33,7 +31,6 @@ import ml.docilealligator.infinityforreddit.ActivityToolbarInterface; import ml.docilealligator.infinityforreddit.FragmentCommunicator; import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.R; -import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; import ml.docilealligator.infinityforreddit.SortType; import ml.docilealligator.infinityforreddit.SortTypeSelectionCallback; import ml.docilealligator.infinityforreddit.bottomsheetfragments.PostLayoutBottomSheetFragment; @@ -61,8 +58,6 @@ public class AccountPostsActivity extends BaseActivity implements SortTypeSelect @BindView(R.id.toolbar_account_posts_activity) Toolbar toolbar; @Inject - RedditDataRoomDatabase mRedditDataRoomDatabase; - @Inject @Named("default") SharedPreferences mSharedPreferences; @Inject @@ -73,8 +68,6 @@ public class AccountPostsActivity extends BaseActivity implements SortTypeSelect SharedPreferences mCurrentAccountSharedPreferences; @Inject CustomThemeWrapper mCustomThemeWrapper; - @Inject - Executor mExecutor; private boolean isInLazyMode = false; private String mAccessToken; private String mAccountName; 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 f8f4c4e0..44c393ff 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CommentActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CommentActivity.java @@ -32,8 +32,6 @@ import org.commonmark.ext.gfm.tables.TableBlock; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; -import java.util.concurrent.Executor; - import javax.inject.Inject; import javax.inject.Named; @@ -101,8 +99,6 @@ public class CommentActivity extends BaseActivity { SharedPreferences mCurrentAccountSharedPreferences; @Inject CustomThemeWrapper mCustomThemeWrapper; - @Inject - Executor mExecutor; private String mAccessToken; private String parentFullname; private int parentDepth; diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CreateMultiRedditActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CreateMultiRedditActivity.java index 8898c55b..c9928e5c 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CreateMultiRedditActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CreateMultiRedditActivity.java @@ -23,7 +23,6 @@ import com.google.android.material.snackbar.Snackbar; import com.r0adkll.slidr.Slidr; import java.util.ArrayList; -import java.util.concurrent.Executor; import javax.inject.Inject; import javax.inject.Named; @@ -78,8 +77,6 @@ public class CreateMultiRedditActivity extends BaseActivity { SharedPreferences mCurrentAccountSharedPreferences; @Inject CustomThemeWrapper mCustomThemeWrapper; - @Inject - Executor mExecutor; private String mAccessToken; private String mAccountName; private ArrayList mSubreddits; diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CustomThemeListingActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CustomThemeListingActivity.java index a42c3fa4..3a8ffae1 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CustomThemeListingActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CustomThemeListingActivity.java @@ -5,6 +5,7 @@ import android.content.ClipboardManager; import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; +import android.os.Handler; import android.view.MenuItem; import android.view.View; import android.view.inputmethod.InputMethodManager; @@ -29,6 +30,8 @@ import com.google.gson.JsonSyntaxException; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; +import java.util.concurrent.Executor; + import javax.inject.Inject; import javax.inject.Named; @@ -37,8 +40,8 @@ import butterknife.ButterKnife; import ml.docilealligator.infinityforreddit.adapters.CustomThemeListingRecyclerViewAdapter; import ml.docilealligator.infinityforreddit.asynctasks.ChangeThemeNameAsyncTask; import ml.docilealligator.infinityforreddit.asynctasks.DeleteThemeAsyncTask; -import ml.docilealligator.infinityforreddit.asynctasks.GetCustomThemeAsyncTask; -import ml.docilealligator.infinityforreddit.asynctasks.InsertCustomThemeAsyncTask; +import ml.docilealligator.infinityforreddit.asynctasks.GetCustomTheme; +import ml.docilealligator.infinityforreddit.asynctasks.InsertCustomTheme; import ml.docilealligator.infinityforreddit.bottomsheetfragments.CreateThemeBottomSheetFragment; import ml.docilealligator.infinityforreddit.bottomsheetfragments.CustomThemeOptionsBottomSheetFragment; import ml.docilealligator.infinityforreddit.customtheme.CustomTheme; @@ -82,6 +85,8 @@ public class CustomThemeListingActivity extends BaseActivity implements @Inject @Named("amoled_theme") SharedPreferences amoledThemeSharedPreferences; + @Inject + Executor executor; public CustomThemeViewModel customThemeViewModel; @Override @@ -183,7 +188,8 @@ public class CustomThemeListingActivity extends BaseActivity implements @Override public void shareTheme(String themeName) { - new GetCustomThemeAsyncTask(redditDataRoomDatabase, themeName, customTheme -> { + GetCustomTheme.getCustomTheme(executor, new Handler(), redditDataRoomDatabase, themeName, + customTheme -> { if (customTheme != null) { String jsonModel = customTheme.getJSONModel(); ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); @@ -197,7 +203,7 @@ public class CustomThemeListingActivity extends BaseActivity implements } else { Snackbar.make(coordinatorLayout, R.string.cannot_find_theme, Snackbar.LENGTH_SHORT).show(); } - }).execute(); + }); } @Override @@ -277,9 +283,9 @@ public class CustomThemeListingActivity extends BaseActivity implements } private void checkDuplicateAndImportTheme(CustomTheme customTheme, boolean checkDuplicate) { - new InsertCustomThemeAsyncTask(redditDataRoomDatabase, lightThemeSharedPreferences, + InsertCustomTheme.insertCustomTheme(executor, new Handler(), redditDataRoomDatabase, lightThemeSharedPreferences, darkThemeSharedPreferences, amoledThemeSharedPreferences, customTheme, checkDuplicate, - new InsertCustomThemeAsyncTask.InsertCustomThemeAsyncTaskListener() { + new InsertCustomTheme.InsertCustomThemeListener() { @Override public void success() { Toast.makeText(CustomThemeListingActivity.this, R.string.import_theme_success, Toast.LENGTH_SHORT).show(); @@ -327,6 +333,6 @@ public class CustomThemeListingActivity extends BaseActivity implements }) .show(); } - }).execute(); + }); } } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CustomizeThemeActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CustomizeThemeActivity.java index 6041d52f..fc238c34 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CustomizeThemeActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CustomizeThemeActivity.java @@ -4,6 +4,7 @@ import android.content.Intent; import android.content.SharedPreferences; import android.os.Build; import android.os.Bundle; +import android.os.Handler; import android.view.Menu; import android.view.MenuItem; import android.widget.Toast; @@ -20,6 +21,7 @@ import com.google.android.material.snackbar.Snackbar; import org.greenrobot.eventbus.EventBus; import java.util.ArrayList; +import java.util.concurrent.Executor; import javax.inject.Inject; import javax.inject.Named; @@ -27,8 +29,8 @@ import javax.inject.Named; import butterknife.BindView; import butterknife.ButterKnife; import ml.docilealligator.infinityforreddit.adapters.CustomizeThemeRecyclerViewAdapter; -import ml.docilealligator.infinityforreddit.asynctasks.GetCustomThemeAsyncTask; -import ml.docilealligator.infinityforreddit.asynctasks.InsertCustomThemeAsyncTask; +import ml.docilealligator.infinityforreddit.asynctasks.GetCustomTheme; +import ml.docilealligator.infinityforreddit.asynctasks.InsertCustomTheme; import ml.docilealligator.infinityforreddit.customtheme.CustomTheme; import ml.docilealligator.infinityforreddit.customtheme.CustomThemeSettingsItem; import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper; @@ -74,6 +76,8 @@ public class CustomizeThemeActivity extends BaseActivity { RedditDataRoomDatabase redditDataRoomDatabase; @Inject CustomThemeWrapper customThemeWrapper; + @Inject + Executor mExecutor; private String themeName; private boolean isPredefinedTheme; @@ -112,8 +116,7 @@ public class CustomizeThemeActivity extends BaseActivity { if (customThemeSettingsItems == null) { if (getIntent().hasExtra(EXTRA_THEME_TYPE)) { int themeType = getIntent().getIntExtra(EXTRA_THEME_TYPE, EXTRA_LIGHT_THEME); - - new GetCustomThemeAsyncTask(redditDataRoomDatabase, themeType, customTheme -> { + GetCustomTheme.getCustomTheme(mExecutor, new Handler(), redditDataRoomDatabase, themeType, customTheme -> { if (customTheme == null) { isPredefinedTheme = true; switch (themeType) { @@ -147,7 +150,7 @@ public class CustomizeThemeActivity extends BaseActivity { adapter = new CustomizeThemeRecyclerViewAdapter(this, themeName, isPredefinedTheme); recyclerView.setAdapter(adapter); adapter.setCustomThemeSettingsItem(customThemeSettingsItems); - }).execute(); + }); } else { isPredefinedTheme = getIntent().getBooleanExtra(EXTRA_IS_PREDEFIINED_THEME, false); themeName = getIntent().getStringExtra(EXTRA_THEME_NAME); @@ -163,13 +166,13 @@ public class CustomizeThemeActivity extends BaseActivity { recyclerView.setAdapter(adapter); adapter.setCustomThemeSettingsItem(customThemeSettingsItems); } else { - new GetCustomThemeAsyncTask(redditDataRoomDatabase, themeName, - customTheme -> { + GetCustomTheme.getCustomTheme(mExecutor, new Handler(), redditDataRoomDatabase, + themeName, customTheme -> { customThemeSettingsItems = CustomThemeSettingsItem.convertCustomThemeToSettingsItem( CustomizeThemeActivity.this, customTheme, androidVersion); adapter.setCustomThemeSettingsItem(customThemeSettingsItems); - }).execute(); + }); } } } else { @@ -206,13 +209,13 @@ public class CustomizeThemeActivity extends BaseActivity { return true; } CustomTheme customTheme = CustomTheme.convertSettingsItemsToCustomTheme(customThemeSettingsItems, themeName); - new InsertCustomThemeAsyncTask(redditDataRoomDatabase, lightThemeSharedPreferences, + InsertCustomTheme.insertCustomTheme(mExecutor, new Handler(), redditDataRoomDatabase, lightThemeSharedPreferences, darkThemeSharedPreferences, amoledThemeSharedPreferences, customTheme, false, () -> { - Toast.makeText(CustomizeThemeActivity.this, R.string.saved, Toast.LENGTH_SHORT).show(); - EventBus.getDefault().post(new RecreateActivityEvent()); - finish(); - }).execute(); + Toast.makeText(CustomizeThemeActivity.this, R.string.saved, Toast.LENGTH_SHORT).show(); + EventBus.getDefault().post(new RecreateActivityEvent()); + finish(); + }); } return true; 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 dd57f763..368d58cc 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/EditCommentActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/EditCommentActivity.java @@ -39,6 +39,7 @@ import ml.docilealligator.infinityforreddit.events.SwitchAccountEvent; import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.utils.APIUtils; +import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils; import ml.docilealligator.infinityforreddit.utils.Utils; import retrofit2.Call; import retrofit2.Callback; @@ -49,7 +50,6 @@ public class EditCommentActivity extends BaseActivity { public static final String EXTRA_CONTENT = "EC"; public static final String EXTRA_FULLNAME = "EF"; - public static final String EXTRA_ACCESS_TOKEN = "EAT"; public static final String EXTRA_POSITION = "EP"; static final String EXTRA_EDITED_COMMENT_CONTENT = "EECC"; @@ -72,6 +72,9 @@ public class EditCommentActivity extends BaseActivity { @Named("default") SharedPreferences mSharedPreferences; @Inject + @Named("current_account") + SharedPreferences mCurrentAccountSharedPreferences; + @Inject CustomThemeWrapper mCustomThemeWrapper; private String mFullName; private String mAccessToken; @@ -102,7 +105,7 @@ public class EditCommentActivity extends BaseActivity { getSupportActionBar().setDisplayHomeAsUpEnabled(true); mFullName = getIntent().getStringExtra(EXTRA_FULLNAME); - mAccessToken = getIntent().getStringExtra(EXTRA_ACCESS_TOKEN); + mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null); mCommentContent = getIntent().getStringExtra(EXTRA_CONTENT); contentEditText.setText(mCommentContent); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/EditMultiRedditActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/EditMultiRedditActivity.java index 2ffcbd20..87ae213b 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/EditMultiRedditActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/EditMultiRedditActivity.java @@ -24,8 +24,6 @@ import com.google.android.material.appbar.AppBarLayout; import com.google.android.material.snackbar.Snackbar; import com.r0adkll.slidr.Slidr; -import java.util.concurrent.Executor; - import javax.inject.Inject; import javax.inject.Named; @@ -86,8 +84,6 @@ public class EditMultiRedditActivity extends BaseActivity { SharedPreferences mCurrentAccountSharedPreferences; @Inject CustomThemeWrapper mCustomThemeWrapper; - @Inject - Executor mExecutor; private String mAccessToken; private String mAccountName; private MultiReddit multiReddit; diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/EditPostActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/EditPostActivity.java index 4be61c75..0f40fcc7 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/EditPostActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/EditPostActivity.java @@ -53,7 +53,6 @@ public class EditPostActivity extends BaseActivity { static final String EXTRA_TITLE = "ET"; static final String EXTRA_CONTENT = "EC"; static final String EXTRA_FULLNAME = "EF"; - static final String EXTRA_ACCESS_TOKEN = "EAT"; @BindView(R.id.coordinator_layout_edit_post_activity) CoordinatorLayout coordinatorLayout; @@ -76,6 +75,9 @@ public class EditPostActivity extends BaseActivity { @Named("default") SharedPreferences mSharedPreferences; @Inject + @Named("current_account") + SharedPreferences mCurrentAccountSharedPreferences; + @Inject CustomThemeWrapper mCustomThemeWrapper; private String mFullName; private String mAccessToken; @@ -110,7 +112,7 @@ public class EditPostActivity extends BaseActivity { getSupportActionBar().setDisplayHomeAsUpEnabled(true); mFullName = getIntent().getStringExtra(EXTRA_FULLNAME); - mAccessToken = getIntent().getStringExtra(EXTRA_ACCESS_TOKEN); + mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null); titleTextView.setText(getIntent().getStringExtra(EXTRA_TITLE)); mPostContent = getIntent().getStringExtra(EXTRA_CONTENT); contentEditText.setText(mPostContent); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/GiveAwardActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/GiveAwardActivity.java index a5b27c2d..a3cc4cdb 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/GiveAwardActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/GiveAwardActivity.java @@ -7,6 +7,7 @@ import android.content.Intent; import android.content.SharedPreferences; import android.os.Build; import android.os.Bundle; +import android.os.Handler; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; @@ -122,8 +123,8 @@ public class GiveAwardActivity extends BaseActivity { .setPositiveButton(R.string.yes, (dialogInterface, i) -> { boolean isAnonymous = switchMaterial.isChecked(); - GiveAward.giveAwardV2(mOauthRetrofit, mAccessToken, thingFullname, award.getId(), - isAnonymous, new GiveAward.GiveAwardListener() { + GiveAward.giveAwardV2(mExecutor, new Handler(), mOauthRetrofit, mAccessToken, + thingFullname, award.getId(), isAnonymous, new GiveAward.GiveAwardListener() { @Override public void success(String awardsHTML, int awardCount) { Intent data = new Intent(); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewPostDetailActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewPostDetailActivity.java index 670a2a1e..30100d86 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewPostDetailActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/ViewPostDetailActivity.java @@ -1612,7 +1612,6 @@ public class ViewPostDetailActivity extends BaseActivity implements FlairBottomS return true; case R.id.action_edit_view_post_detail_activity: Intent editPostIntent = new Intent(this, EditPostActivity.class); - editPostIntent.putExtra(EditPostActivity.EXTRA_ACCESS_TOKEN, mAccessToken); editPostIntent.putExtra(EditPostActivity.EXTRA_FULLNAME, mPost.getFullName()); editPostIntent.putExtra(EditPostActivity.EXTRA_TITLE, mPost.getTitle()); editPostIntent.putExtra(EditPostActivity.EXTRA_CONTENT, mPost.getSelfText()); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/CommentAndPostRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/CommentAndPostRecyclerViewAdapter.java index 19080f65..0722da59 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/CommentAndPostRecyclerViewAdapter.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/CommentAndPostRecyclerViewAdapter.java @@ -883,7 +883,7 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter preview.getPreviewWidth()) { - mGlide.load(preview.getPreviewUrl()).override(Target.SIZE_ORIGINAL).into(((PostDetailVideoAutoplayViewHolder) holder).previewImageView); + mGlide.load(preview.getPreviewUrl()).override(preview.getPreviewWidth(), preview.getPreviewHeight()).into(((PostDetailVideoAutoplayViewHolder) holder).previewImageView); } else { mGlide.load(preview.getPreviewUrl()).into(((PostDetailVideoAutoplayViewHolder) holder).previewImageView); } @@ -1500,7 +1500,7 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter 10_000_000); + } while (preview.getPreviewWidth() * preview.getPreviewHeight() > 10_000_000); } return preview; @@ -1537,7 +1537,7 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter preview.getPreviewWidth()) { - imageRequestBuilder.override(Target.SIZE_ORIGINAL).into(((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView); + imageRequestBuilder.override(preview.getPreviewWidth(), preview.getPreviewHeight()).into(((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView); } else { imageRequestBuilder.into(((PostDetailImageAndGifAutoplayViewHolder) holder).mImageView); } @@ -1569,7 +1569,7 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter preview.getPreviewWidth()) { - imageRequestBuilder.override(Target.SIZE_ORIGINAL).into(((PostDetailVideoAndGifPreviewHolder) holder).mImageView); + imageRequestBuilder.override(preview.getPreviewWidth(), preview.getPreviewHeight()).into(((PostDetailVideoAndGifPreviewHolder) holder).mImageView); } else { imageRequestBuilder.into(((PostDetailVideoAndGifPreviewHolder) holder).mImageView); } @@ -1601,7 +1601,7 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter preview.getPreviewWidth()) { - imageRequestBuilder.override(Target.SIZE_ORIGINAL).into(((PostDetailLinkViewHolder) holder).mImageView); + imageRequestBuilder.override(preview.getPreviewWidth(), preview.getPreviewHeight()).into(((PostDetailLinkViewHolder) holder).mImageView); } else { imageRequestBuilder.into(((PostDetailLinkViewHolder) holder).mImageView); } @@ -1632,7 +1632,7 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter preview.getPreviewWidth()) { - imageRequestBuilder.override(Target.SIZE_ORIGINAL).into(((PostDetailGalleryViewHolder) holder).mImageView); + imageRequestBuilder.override(preview.getPreviewWidth(), preview.getPreviewHeight()).into(((PostDetailGalleryViewHolder) holder).mImageView); } else { imageRequestBuilder.into(((PostDetailGalleryViewHolder) holder).mImageView); } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostRecyclerViewAdapter.java b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostRecyclerViewAdapter.java index a830dd53..cce3db99 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostRecyclerViewAdapter.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/adapters/PostRecyclerViewAdapter.java @@ -10,6 +10,7 @@ import android.graphics.PorterDuff; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -1067,14 +1068,16 @@ public class PostRecyclerViewAdapter extends PagedListAdapter 10_000_000) { + Log.i("afasfasdf", "ssss " + preview.getPreviewUrl()); int divisor = 2; do { preview.setPreviewWidth(preview.getPreviewWidth() / divisor); preview.setPreviewHeight(preview.getPreviewHeight() / divisor); divisor *= 2; - } while (preview.getPreviewWidth() * preview.getPreviewHeight() / divisor / divisor > 10_000_000); + } while (preview.getPreviewWidth() * preview.getPreviewHeight() > 10_000_000); } + Log.i("afasfasdf", "s " + preview.getPreviewWidth() * preview.getPreviewHeight() + " " + preview.getPreviewHeight() + " " + preview.getPreviewWidth() + " " + preview.getPreviewUrl()); return preview; } @@ -1116,7 +1119,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter preview.getPreviewWidth()) { - imageRequestBuilder.override(Target.SIZE_ORIGINAL).into(((PostWithPreviewTypeViewHolder) holder).imageView); + imageRequestBuilder.override(preview.getPreviewWidth(), preview.getPreviewHeight()).into(((PostWithPreviewTypeViewHolder) holder).imageView); } else { imageRequestBuilder.into(((PostWithPreviewTypeViewHolder) holder).imageView); } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/asynctasks/GetCustomTheme.java b/app/src/main/java/ml/docilealligator/infinityforreddit/asynctasks/GetCustomTheme.java new file mode 100644 index 00000000..9628d307 --- /dev/null +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/asynctasks/GetCustomTheme.java @@ -0,0 +1,45 @@ +package ml.docilealligator.infinityforreddit.asynctasks; + +import android.os.Handler; + +import java.util.concurrent.Executor; + +import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; +import ml.docilealligator.infinityforreddit.customtheme.CustomTheme; +import ml.docilealligator.infinityforreddit.utils.CustomThemeSharedPreferencesUtils; + +public class GetCustomTheme { + public static void getCustomTheme(Executor executor, Handler handler, + RedditDataRoomDatabase redditDataRoomDatabase, + String customThemeName, + GetCustomThemeListener getCustomThemeListener) { + executor.execute(() -> { + CustomTheme customTheme = redditDataRoomDatabase.customThemeDao().getCustomTheme(customThemeName); + handler.post(() -> getCustomThemeListener.success(customTheme)); + }); + } + + public static void getCustomTheme(Executor executor, Handler handler, + RedditDataRoomDatabase redditDataRoomDatabase, + int themeType, + GetCustomThemeListener getCustomThemeListener) { + executor.execute(() -> { + CustomTheme customTheme; + switch (themeType) { + case CustomThemeSharedPreferencesUtils.DARK: + customTheme = redditDataRoomDatabase.customThemeDao().getDarkCustomTheme(); + break; + case CustomThemeSharedPreferencesUtils.AMOLED: + customTheme = redditDataRoomDatabase.customThemeDao().getAmoledCustomTheme(); + break; + default: + customTheme = redditDataRoomDatabase.customThemeDao().getLightCustomTheme(); + } + handler.post(() -> getCustomThemeListener.success(customTheme)); + }); + } + + public interface GetCustomThemeListener { + void success(CustomTheme customTheme); + } +} diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/asynctasks/GetCustomThemeAsyncTask.java b/app/src/main/java/ml/docilealligator/infinityforreddit/asynctasks/GetCustomThemeAsyncTask.java deleted file mode 100644 index 62e18f87..00000000 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/asynctasks/GetCustomThemeAsyncTask.java +++ /dev/null @@ -1,60 +0,0 @@ -package ml.docilealligator.infinityforreddit.asynctasks; - -import android.os.AsyncTask; - -import ml.docilealligator.infinityforreddit.customtheme.CustomTheme; -import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; -import ml.docilealligator.infinityforreddit.utils.CustomThemeSharedPreferencesUtils; - -public class GetCustomThemeAsyncTask extends AsyncTask { - private RedditDataRoomDatabase redditDataRoomDatabase; - private String customThemeName; - private int themeType; - private GetCustomThemeAsyncTaskListener getCustomThemeAsyncTaskListener; - private CustomTheme customTheme; - - public interface GetCustomThemeAsyncTaskListener { - void success(CustomTheme customTheme); - } - - public GetCustomThemeAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase, - String customThemeName, - GetCustomThemeAsyncTaskListener getCustomThemeAsyncTaskListener) { - this.redditDataRoomDatabase = redditDataRoomDatabase; - this.customThemeName = customThemeName; - this.getCustomThemeAsyncTaskListener = getCustomThemeAsyncTaskListener; - } - - public GetCustomThemeAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase, - int themeType, - GetCustomThemeAsyncTaskListener getCustomThemeAsyncTaskListener) { - this.redditDataRoomDatabase = redditDataRoomDatabase; - this.themeType = themeType; - this.getCustomThemeAsyncTaskListener = getCustomThemeAsyncTaskListener; - } - - @Override - protected Void doInBackground(Void... voids) { - if (customThemeName != null) { - customTheme = redditDataRoomDatabase.customThemeDao().getCustomTheme(customThemeName); - } else { - switch (themeType) { - case CustomThemeSharedPreferencesUtils.DARK: - customTheme = redditDataRoomDatabase.customThemeDao().getDarkCustomTheme(); - break; - case CustomThemeSharedPreferencesUtils.AMOLED: - customTheme = redditDataRoomDatabase.customThemeDao().getAmoledCustomTheme(); - break; - default: - customTheme = redditDataRoomDatabase.customThemeDao().getLightCustomTheme(); - } - } - return null; - } - - @Override - protected void onPostExecute(Void aVoid) { - super.onPostExecute(aVoid); - getCustomThemeAsyncTaskListener.success(customTheme); - } -} diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/asynctasks/InsertCustomTheme.java b/app/src/main/java/ml/docilealligator/infinityforreddit/asynctasks/InsertCustomTheme.java new file mode 100644 index 00000000..7527e0d1 --- /dev/null +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/asynctasks/InsertCustomTheme.java @@ -0,0 +1,56 @@ +package ml.docilealligator.infinityforreddit.asynctasks; + +import android.content.SharedPreferences; +import android.os.Handler; + +import java.util.concurrent.Executor; + +import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; +import ml.docilealligator.infinityforreddit.customtheme.CustomTheme; +import ml.docilealligator.infinityforreddit.utils.CustomThemeSharedPreferencesUtils; + +public class InsertCustomTheme { + + public static void insertCustomTheme(Executor executor, Handler handler, + RedditDataRoomDatabase redditDataRoomDatabase, + SharedPreferences lightThemeSharedPreferences, + SharedPreferences darkThemeSharedPreferences, + SharedPreferences amoledThemeSharedPreferences, + CustomTheme customTheme, boolean checkDuplicate, + InsertCustomThemeListener insertCustomThemeListener) { + executor.execute(() -> { + if (checkDuplicate) { + if (redditDataRoomDatabase.customThemeDao().getCustomTheme(customTheme.name) != null) { + handler.post(insertCustomThemeListener::duplicate); + } + } + CustomTheme previousTheme = redditDataRoomDatabase.customThemeDao().getCustomTheme(customTheme.name); + if (customTheme.isLightTheme) { + redditDataRoomDatabase.customThemeDao().unsetLightTheme(); + CustomThemeSharedPreferencesUtils.insertThemeToSharedPreferences(customTheme, lightThemeSharedPreferences); + } else if (previousTheme != null && previousTheme.isLightTheme) { + lightThemeSharedPreferences.edit().clear().apply(); + } + if (customTheme.isDarkTheme) { + redditDataRoomDatabase.customThemeDao().unsetDarkTheme(); + CustomThemeSharedPreferencesUtils.insertThemeToSharedPreferences(customTheme, darkThemeSharedPreferences); + } else if (previousTheme != null && previousTheme.isDarkTheme) { + darkThemeSharedPreferences.edit().clear().apply(); + } + if (customTheme.isAmoledTheme) { + redditDataRoomDatabase.customThemeDao().unsetAmoledTheme(); + CustomThemeSharedPreferencesUtils.insertThemeToSharedPreferences(customTheme, amoledThemeSharedPreferences); + } else if (previousTheme != null && previousTheme.isAmoledTheme) { + amoledThemeSharedPreferences.edit().clear().apply(); + } + redditDataRoomDatabase.customThemeDao().insert(customTheme); + + handler.post(insertCustomThemeListener::success); + }); + } + + public interface InsertCustomThemeListener { + void success(); + default void duplicate() {} + } +} diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/asynctasks/InsertCustomThemeAsyncTask.java b/app/src/main/java/ml/docilealligator/infinityforreddit/asynctasks/InsertCustomThemeAsyncTask.java deleted file mode 100644 index 4e46eb47..00000000 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/asynctasks/InsertCustomThemeAsyncTask.java +++ /dev/null @@ -1,80 +0,0 @@ -package ml.docilealligator.infinityforreddit.asynctasks; - -import android.content.SharedPreferences; -import android.os.AsyncTask; - -import ml.docilealligator.infinityforreddit.customtheme.CustomTheme; -import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; -import ml.docilealligator.infinityforreddit.utils.CustomThemeSharedPreferencesUtils; - -public class InsertCustomThemeAsyncTask extends AsyncTask { - private RedditDataRoomDatabase redditDataRoomDatabase; - private SharedPreferences lightThemeSharedPreferences; - private SharedPreferences darkThemeSharedPreferences; - private SharedPreferences amoledThemeSharedPreferences; - private CustomTheme customTheme; - private boolean checkDuplicate; - private InsertCustomThemeAsyncTaskListener insertCustomThemeAsyncTaskListener; - private boolean isDuplicate = false; - - public interface InsertCustomThemeAsyncTaskListener { - void success(); - default void duplicate() {} - } - - public InsertCustomThemeAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase, - SharedPreferences lightThemeSharedPreferences, - SharedPreferences darkThemeSharedPreferences, - SharedPreferences amoledThemeSharedPreferences, - CustomTheme customTheme, boolean checkDuplicate, - InsertCustomThemeAsyncTaskListener insertCustomThemeAsyncTaskListener) { - this.redditDataRoomDatabase = redditDataRoomDatabase; - this.lightThemeSharedPreferences = lightThemeSharedPreferences; - this.darkThemeSharedPreferences = darkThemeSharedPreferences; - this.amoledThemeSharedPreferences = amoledThemeSharedPreferences; - this.customTheme = customTheme; - this.checkDuplicate = checkDuplicate; - this.insertCustomThemeAsyncTaskListener = insertCustomThemeAsyncTaskListener; - } - - @Override - protected Void doInBackground(Void... voids) { - if (checkDuplicate) { - if (redditDataRoomDatabase.customThemeDao().getCustomTheme(customTheme.name) != null) { - isDuplicate = true; - return null; - } - } - CustomTheme previousTheme = redditDataRoomDatabase.customThemeDao().getCustomTheme(customTheme.name); - if (customTheme.isLightTheme) { - redditDataRoomDatabase.customThemeDao().unsetLightTheme(); - CustomThemeSharedPreferencesUtils.insertThemeToSharedPreferences(customTheme, lightThemeSharedPreferences); - } else if (previousTheme != null && previousTheme.isLightTheme) { - lightThemeSharedPreferences.edit().clear().apply(); - } - if (customTheme.isDarkTheme) { - redditDataRoomDatabase.customThemeDao().unsetDarkTheme(); - CustomThemeSharedPreferencesUtils.insertThemeToSharedPreferences(customTheme, darkThemeSharedPreferences); - } else if (previousTheme != null && previousTheme.isDarkTheme) { - darkThemeSharedPreferences.edit().clear().apply(); - } - if (customTheme.isAmoledTheme) { - redditDataRoomDatabase.customThemeDao().unsetAmoledTheme(); - CustomThemeSharedPreferencesUtils.insertThemeToSharedPreferences(customTheme, amoledThemeSharedPreferences); - } else if (previousTheme != null && previousTheme.isAmoledTheme) { - amoledThemeSharedPreferences.edit().clear().apply(); - } - redditDataRoomDatabase.customThemeDao().insert(customTheme); - return null; - } - - @Override - protected void onPostExecute(Void aVoid) { - super.onPostExecute(aVoid); - if (isDuplicate) { - insertCustomThemeAsyncTaskListener.duplicate(); - } else { - insertCustomThemeAsyncTaskListener.success(); - } - } -} diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/award/GiveAward.java b/app/src/main/java/ml/docilealligator/infinityforreddit/award/GiveAward.java index a6d7724a..1b46bb08 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/award/GiveAward.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/award/GiveAward.java @@ -1,6 +1,6 @@ package ml.docilealligator.infinityforreddit.award; -import android.os.AsyncTask; +import android.os.Handler; import android.text.Html; import androidx.annotation.NonNull; @@ -11,6 +11,7 @@ import org.json.JSONObject; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.Executor; import ml.docilealligator.infinityforreddit.apis.RedditAPI; import ml.docilealligator.infinityforreddit.utils.APIUtils; @@ -26,8 +27,9 @@ public class GiveAward { void failed(int code, String message); } - public static void giveAwardV2(Retrofit oauthRetrofit, String accessToken, String thingFullName, String awardId, - boolean isAnonymous, GiveAwardListener giveAwardListener) { + public static void giveAwardV2(Executor executor, Handler handler, Retrofit oauthRetrofit, String accessToken, + String thingFullName, String awardId, boolean isAnonymous, + GiveAwardListener giveAwardListener) { Map params = new HashMap<>(); params.put(APIUtils.GILD_TYPE, awardId); params.put(APIUtils.IS_ANONYMOUS, Boolean.toString(isAnonymous)); @@ -36,7 +38,7 @@ public class GiveAward { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { if (response.isSuccessful()) { - new ParseResponseAsyncTask(response.body(), new ParseResponseAsyncTask.ParseResponseAsyncTaskListener() { + executor.execute(() -> parseResponse(handler, response.body(), new ParseResponseAsyncTaskListener() { @Override public void success(String awardsHTML, int awardCount) { giveAwardListener.success(awardsHTML, awardCount); @@ -46,7 +48,7 @@ public class GiveAward { public void failed(String errorMessage) { giveAwardListener.failed(response.code(), response.body()); } - }).execute(); + })); } else { giveAwardListener.failed(response.code(), response.body()); } @@ -59,76 +61,50 @@ public class GiveAward { }); } - private static class ParseResponseAsyncTask extends AsyncTask { - - private String response; - private boolean error = false; - private String awardsHTML; - private int awardCount; - private String errorMessage = null; - private ParseResponseAsyncTaskListener parseResponseAsyncTaskListener; - - public ParseResponseAsyncTask(String response, ParseResponseAsyncTaskListener parseResponseAsyncTaskListener) { - this.response = response; - this.parseResponseAsyncTaskListener = parseResponseAsyncTaskListener; - } - - interface ParseResponseAsyncTaskListener { - void success(String awardsHTML, int awardCount); - void failed(String errorMessage); - } - - @Override - protected Void doInBackground(Void... voids) { - try { - //Check for error - JSONObject responseObject = new JSONObject(response).getJSONObject(JSONUtils.JSON_KEY); - - if (responseObject.getJSONArray(JSONUtils.ERRORS_KEY).length() != 0) { - JSONArray errorArray = responseObject.getJSONArray(JSONUtils.ERRORS_KEY) - .getJSONArray(responseObject.getJSONArray(JSONUtils.ERRORS_KEY).length() - 1); - if (errorArray.length() != 0) { - String errorString; - if (errorArray.length() >= 2) { - errorString = errorArray.getString(1); - } else { - errorString = errorArray.getString(0); - } - errorMessage = errorString.substring(0, 1).toUpperCase() + errorString.substring(1); - error = true; - return null; + private static void parseResponse(Handler handler, String response, ParseResponseAsyncTaskListener parseResponseAsyncTaskListener) { + try { + //Check for error + JSONObject responseObject = new JSONObject(response).getJSONObject(JSONUtils.JSON_KEY); + + if (responseObject.getJSONArray(JSONUtils.ERRORS_KEY).length() != 0) { + JSONArray errorArray = responseObject.getJSONArray(JSONUtils.ERRORS_KEY) + .getJSONArray(responseObject.getJSONArray(JSONUtils.ERRORS_KEY).length() - 1); + if (errorArray.length() != 0) { + String errorString; + if (errorArray.length() >= 2) { + errorString = errorArray.getString(1); + } else { + errorString = errorArray.getString(0); } + String errorMessage = errorString.substring(0, 1).toUpperCase() + errorString.substring(1); + handler.post(() -> parseResponseAsyncTaskListener.failed(errorMessage)); } - } catch (JSONException ignore) {} - - try { - JSONArray awardingsArray = new JSONObject(response).getJSONArray(JSONUtils.ALL_AWARDINGS_KEY); - StringBuilder awardingsBuilder = new StringBuilder(); - awardCount = 0; - for (int i = 0; i < awardingsArray.length(); i++) { - JSONObject award = awardingsArray.getJSONObject(i); - int count = award.getInt(JSONUtils.COUNT_KEY); - awardCount += count; - String iconUrl = award.getString(JSONUtils.ICON_URL_KEY); - awardingsBuilder.append(" ").append("x").append(count).append(" "); - } - - awardsHTML = awardingsBuilder.toString(); - } catch (JSONException e) { - e.printStackTrace(); - error = true; } - return null; - } - - @Override - protected void onPostExecute(Void aVoid) { - super.onPostExecute(aVoid); - if (error) { - parseResponseAsyncTaskListener.failed(errorMessage); - } else { - parseResponseAsyncTaskListener.success(awardsHTML, awardCount); + } catch (JSONException ignore) {} + + try { + JSONArray awardingsArray = new JSONObject(response).getJSONArray(JSONUtils.ALL_AWARDINGS_KEY); + StringBuilder awardingsBuilder = new StringBuilder(); + int awardCount = 0; + for (int i = 0; i < awardingsArray.length(); i++) { + JSONObject award = awardingsArray.getJSONObject(i); + int count = award.getInt(JSONUtils.COUNT_KEY); + awardCount += count; + String iconUrl = award.getString(JSONUtils.ICON_URL_KEY); + awardingsBuilder.append(" ").append("x").append(count).append(" "); } + + String awardsHTML = awardingsBuilder.toString(); + int finalAwardCount = awardCount; + handler.post(() -> parseResponseAsyncTaskListener.success(awardsHTML, finalAwardCount)); + } catch (JSONException e) { + e.printStackTrace(); + handler.post(() -> parseResponseAsyncTaskListener.failed(null)); } } + + interface ParseResponseAsyncTaskListener { + void success(String awardsHTML, int awardCount); + void failed(String errorMessage); + } } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/bottomsheetfragments/CommentMoreBottomSheetFragment.java b/app/src/main/java/ml/docilealligator/infinityforreddit/bottomsheetfragments/CommentMoreBottomSheetFragment.java index 5f9b4aa6..d1826cf2 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/bottomsheetfragments/CommentMoreBottomSheetFragment.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/bottomsheetfragments/CommentMoreBottomSheetFragment.java @@ -108,7 +108,6 @@ public class CommentMoreBottomSheetFragment extends RoundedBottomSheetDialogFrag editTextView.setOnClickListener(view -> { Intent intent = new Intent(activity, EditCommentActivity.class); - intent.putExtra(EditCommentActivity.EXTRA_ACCESS_TOKEN, accessToken); intent.putExtra(EditCommentActivity.EXTRA_FULLNAME, comment.getFullName()); intent.putExtra(EditCommentActivity.EXTRA_CONTENT, comment.getCommentMarkdown()); intent.putExtra(EditCommentActivity.EXTRA_POSITION, bundle.getInt(EXTRA_POSITION)); -- cgit v1.2.3