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 fb9b1a47..0785fe60 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CreateMultiRedditActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/CreateMultiRedditActivity.java @@ -133,8 +133,8 @@ public class CreateMultiRedditActivity extends BaseActivity { if (!accountName.equals(Account.ANONYMOUS_ACCOUNT)) { String jsonModel = new MultiRedditJSONModel(binding.multiRedditNameEditTextCreateMultiRedditActivity.getText().toString(), binding.descriptionEditTextCreateMultiRedditActivity.getText().toString(), binding.visibilityChipCreateMultiRedditActivity.isChecked(), mSubreddits).createJSONModel(); - CreateMultiReddit.createMultiReddit(mOauthRetrofit, mRedditDataRoomDatabase, accessToken, - "/user/" + accountName + "/m/" + binding.multiRedditNameEditTextCreateMultiRedditActivity.getText().toString(), + CreateMultiReddit.createMultiReddit(mExecutor, mHandler, mOauthRetrofit, mRedditDataRoomDatabase, + accessToken, "/user/" + accountName + "/m/" + binding.multiRedditNameEditTextCreateMultiRedditActivity.getText().toString(), jsonModel, new CreateMultiReddit.CreateMultiRedditListener() { @Override public void success() { diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/SubscribedThingListingActivity.java b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/SubscribedThingListingActivity.java index afa9ba12..94766f4d 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/activities/SubscribedThingListingActivity.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/activities/SubscribedThingListingActivity.java @@ -436,22 +436,23 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti private void loadMultiReddits() { if (!accountName.equals(Account.ANONYMOUS_ACCOUNT)) { - FetchMyMultiReddits.fetchMyMultiReddits(mOauthRetrofit, accessToken, new FetchMyMultiReddits.FetchMyMultiRedditsListener() { - @Override - public void success(ArrayList multiReddits) { - InsertMultireddit.insertMultireddits(mExecutor, new Handler(), mRedditDataRoomDatabase, multiReddits, accountName, () -> { - mInsertMultiredditSuccess = true; - sectionsPagerAdapter.stopMultiRedditRefreshProgressbar(); - }); - } + FetchMyMultiReddits.fetchMyMultiReddits(mExecutor, mHandler, mOauthRetrofit, accessToken, + new FetchMyMultiReddits.FetchMyMultiRedditsListener() { + @Override + public void success(ArrayList multiReddits) { + InsertMultireddit.insertMultireddits(mExecutor, new Handler(), mRedditDataRoomDatabase, multiReddits, accountName, () -> { + mInsertMultiredditSuccess = true; + sectionsPagerAdapter.stopMultiRedditRefreshProgressbar(); + }); + } - @Override - public void failed() { - mInsertMultiredditSuccess = false; - sectionsPagerAdapter.stopMultiRedditRefreshProgressbar(); - Toast.makeText(SubscribedThingListingActivity.this, R.string.error_loading_multi_reddit_list, Toast.LENGTH_SHORT).show(); - } - }); + @Override + public void failed() { + mInsertMultiredditSuccess = false; + sectionsPagerAdapter.stopMultiRedditRefreshProgressbar(); + Toast.makeText(SubscribedThingListingActivity.this, R.string.error_loading_multi_reddit_list, Toast.LENGTH_SHORT).show(); + } + }); } } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/multireddit/CreateMultiReddit.java b/app/src/main/java/ml/docilealligator/infinityforreddit/multireddit/CreateMultiReddit.java index 1bef9993..1bbf9013 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/multireddit/CreateMultiReddit.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/multireddit/CreateMultiReddit.java @@ -25,7 +25,8 @@ public class CreateMultiReddit { void failed(int errorType); } - public static void createMultiReddit(Retrofit oauthRetrofit, RedditDataRoomDatabase redditDataRoomDatabase, + public static void createMultiReddit(Executor executor, Handler handler, Retrofit oauthRetrofit, + RedditDataRoomDatabase redditDataRoomDatabase, String accessToken, String multipath, String model, CreateMultiRedditListener createMultiRedditListener) { Map params = new HashMap<>(); @@ -36,18 +37,18 @@ public class CreateMultiReddit { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { if (response.isSuccessful()) { - ParseMultiReddit.parseAndSaveMultiReddit(response.body(), redditDataRoomDatabase, - new ParseMultiReddit.ParseMultiRedditListener() { - @Override - public void success() { - createMultiRedditListener.success(); - } + ParseMultiReddit.parseAndSaveMultiReddit(executor, handler, response.body(), + redditDataRoomDatabase, new ParseMultiReddit.ParseMultiRedditListener() { + @Override + public void success() { + createMultiRedditListener.success(); + } - @Override - public void failed() { - createMultiRedditListener.failed(1); - } - }); + @Override + public void failed() { + createMultiRedditListener.failed(1); + } + }); } else { createMultiRedditListener.failed(response.code()); } diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/multireddit/FetchMyMultiReddits.java b/app/src/main/java/ml/docilealligator/infinityforreddit/multireddit/FetchMyMultiReddits.java index 7954d0e2..09b9d4fe 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/multireddit/FetchMyMultiReddits.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/multireddit/FetchMyMultiReddits.java @@ -1,8 +1,11 @@ package ml.docilealligator.infinityforreddit.multireddit; +import android.os.Handler; + import androidx.annotation.NonNull; import java.util.ArrayList; +import java.util.concurrent.Executor; import ml.docilealligator.infinityforreddit.apis.RedditAPI; import ml.docilealligator.infinityforreddit.utils.APIUtils; @@ -17,13 +20,13 @@ public class FetchMyMultiReddits { void failed(); } - public static void fetchMyMultiReddits(Retrofit oauthRetrofit, String accessToken, FetchMyMultiRedditsListener fetchMyMultiRedditsListener) { + public static void fetchMyMultiReddits(Executor executor, Handler handler, Retrofit oauthRetrofit, String accessToken, FetchMyMultiRedditsListener fetchMyMultiRedditsListener) { oauthRetrofit.create(RedditAPI.class) .getMyMultiReddits(APIUtils.getOAuthHeader(accessToken)).enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { if (response.isSuccessful()) { - ParseMultiReddit.parseMultiRedditsList(response.body(), new ParseMultiReddit.ParseMultiRedditsListListener() { + ParseMultiReddit.parseMultiRedditsList(executor, handler, response.body(), new ParseMultiReddit.ParseMultiRedditsListListener() { @Override public void success(ArrayList multiReddits) { fetchMyMultiRedditsListener.success(multiReddits); diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/multireddit/ParseMultiReddit.java b/app/src/main/java/ml/docilealligator/infinityforreddit/multireddit/ParseMultiReddit.java index a737fd10..d2bbdc52 100644 --- a/app/src/main/java/ml/docilealligator/infinityforreddit/multireddit/ParseMultiReddit.java +++ b/app/src/main/java/ml/docilealligator/infinityforreddit/multireddit/ParseMultiReddit.java @@ -1,12 +1,13 @@ package ml.docilealligator.infinityforreddit.multireddit; -import android.os.AsyncTask; +import android.os.Handler; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; +import java.util.concurrent.Executor; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; import ml.docilealligator.infinityforreddit.utils.JSONUtils; @@ -22,13 +23,41 @@ public class ParseMultiReddit { void failed(); } - public static void parseMultiRedditsList(String response, ParseMultiRedditsListListener parseMultiRedditsListListener) { - new ParseMultiRedditsListAsyncTask(response, parseMultiRedditsListListener).execute(); + public static void parseMultiRedditsList(Executor executor, Handler handler, String response, + ParseMultiRedditsListListener parseMultiRedditsListListener) { + executor.execute(() -> { + try { + JSONArray arrayResponse = new JSONArray(response); + ArrayList multiReddits = new ArrayList<>(); + for (int i = 0; i < arrayResponse.length(); i++) { + try { + multiReddits.add(parseMultiReddit(arrayResponse.getJSONObject(i).getJSONObject(JSONUtils.DATA_KEY))); + } catch (JSONException e) { + e.printStackTrace(); + } + } + + handler.post(() -> parseMultiRedditsListListener.success(multiReddits)); + } catch (JSONException e) { + e.printStackTrace(); + handler.post(parseMultiRedditsListListener::failed); + } + }); } - public static void parseAndSaveMultiReddit(String response, RedditDataRoomDatabase redditDataRoomDatabase, + public static void parseAndSaveMultiReddit(Executor executor, Handler handler, String response, RedditDataRoomDatabase redditDataRoomDatabase, ParseMultiRedditListener parseMultiRedditListener) { - new ParseAndSaveMultiRedditAsyncTask(response, redditDataRoomDatabase, parseMultiRedditListener).execute(); + executor.execute(() -> { + try { + MultiReddit multiReddit = parseMultiReddit(new JSONObject(response).getJSONObject(JSONUtils.DATA_KEY)); + redditDataRoomDatabase.multiRedditDao().insert(multiReddit); + + handler.post(parseMultiRedditListener::success); + } catch (JSONException e) { + e.printStackTrace(); + handler.post(parseMultiRedditListener::failed); + } + }); } private static MultiReddit parseMultiReddit(JSONObject singleMultiRedditJSON) throws JSONException { @@ -56,83 +85,4 @@ public class ParseMultiReddit { iconUrl, visibility, owner, nSubscribers, createdUTC, over18, isSubscriber, isFavorited, subreddits); } - - private static class ParseMultiRedditsListAsyncTask extends AsyncTask { - private JSONArray arrayResponse; - private boolean parseFailed; - private ArrayList multiReddits; - private final ParseMultiRedditsListListener parseMultiRedditsListListener; - - ParseMultiRedditsListAsyncTask(String response, - ParseMultiRedditsListListener parseMultiRedditsListListener) { - this.parseMultiRedditsListListener = parseMultiRedditsListListener; - try { - arrayResponse = new JSONArray(response); - multiReddits = new ArrayList<>(); - parseFailed = false; - } catch (JSONException e) { - e.printStackTrace(); - parseFailed = true; - } - } - - @Override - protected Void doInBackground(Void... voids) { - if (!parseFailed) { - for (int i = 0; i < arrayResponse.length(); i++) { - try { - multiReddits.add(parseMultiReddit(arrayResponse.getJSONObject(i).getJSONObject(JSONUtils.DATA_KEY))); - } catch (JSONException e) { - e.printStackTrace(); - } - } - } - return null; - } - - @Override - protected void onPostExecute(Void aVoid) { - super.onPostExecute(aVoid); - if (!parseFailed) { - parseMultiRedditsListListener.success(multiReddits); - } else { - parseMultiRedditsListListener.failed(); - } - } - } - - private static class ParseAndSaveMultiRedditAsyncTask extends AsyncTask { - private final String response; - private final RedditDataRoomDatabase redditDataRoomDatabase; - private MultiReddit multiReddit; - private final ParseMultiRedditListener parseMultiRedditListener; - - ParseAndSaveMultiRedditAsyncTask(String response, RedditDataRoomDatabase redditDataRoomDatabase, - ParseMultiRedditListener parseMultiRedditListener) { - this.redditDataRoomDatabase = redditDataRoomDatabase; - this.parseMultiRedditListener = parseMultiRedditListener; - this.response = response; - } - - @Override - protected Void doInBackground(Void... voids) { - try { - multiReddit = parseMultiReddit(new JSONObject(response).getJSONObject(JSONUtils.DATA_KEY)); - redditDataRoomDatabase.multiRedditDao().insert(multiReddit); - } catch (JSONException e) { - e.printStackTrace(); - } - return null; - } - - @Override - protected void onPostExecute(Void aVoid) { - super.onPostExecute(aVoid); - if (multiReddit != null) { - parseMultiRedditListener.success(); - } else { - parseMultiRedditListener.failed(); - } - } - } }