Use Executor instead of AsyncTask in UserFollowing.

This commit is contained in:
Docile-Alligator
2025-04-13 11:52:57 -04:00
parent c2ff41be22
commit 369e8faf3a
2 changed files with 12 additions and 40 deletions

View File

@ -4,6 +4,7 @@ import android.os.Handler;
import android.text.Html;
import androidx.annotation.Nullable;
import androidx.annotation.WorkerThread;
import org.json.JSONArray;
import org.json.JSONException;
@ -45,6 +46,7 @@ public class FetchUserFlairs {
});
}
@WorkerThread
private static ArrayList<UserFlair> parseUserFlairs(String response) {
try {
JSONArray jsonArray = new JSONArray(response);

View File

@ -1,6 +1,5 @@
package ml.docilealligator.infinityforreddit.user;
import android.os.AsyncTask;
import android.os.Handler;
import androidx.annotation.NonNull;
@ -89,7 +88,11 @@ public class UserFollowing {
FetchUserData.fetchUserData(executor, handler, retrofit, username, new FetchUserData.FetchUserDataListener() {
@Override
public void onFetchUserDataSuccess(UserData userData, int inboxCount) {
new UpdateSubscriptionAsyncTask(subscribedUserDao, userData, accountName, true).execute();
executor.execute(() -> {
SubscribedUserData subscribedUserData = new SubscribedUserData(userData.getName(), userData.getIconUrl(),
accountName, false);
subscribedUserDao.insert(subscribedUserData);
});
}
@Override
@ -97,10 +100,13 @@ public class UserFollowing {
}
});
userFollowingListener.onUserFollowingSuccess();
} else {
new UpdateSubscriptionAsyncTask(subscribedUserDao, username, accountName, false).execute();
executor.execute(() -> {
subscribedUserDao.deleteSubscribedUser(username, accountName);
handler.post(userFollowingListener::onUserFollowingSuccess);
});
}
userFollowingListener.onUserFollowingSuccess();
} else {
userFollowingListener.onUserFollowingFail();
}
@ -118,40 +124,4 @@ public class UserFollowing {
void onUserFollowingFail();
}
private static class UpdateSubscriptionAsyncTask extends AsyncTask<Void, Void, Void> {
private final SubscribedUserDao subscribedUserDao;
private String username;
private final String accountName;
private SubscribedUserData subscribedUserData;
private final boolean isSubscribing;
UpdateSubscriptionAsyncTask(SubscribedUserDao subscribedUserDao, String username,
@NonNull String accountName, boolean isSubscribing) {
this.subscribedUserDao = subscribedUserDao;
this.username = username;
this.accountName = accountName;
this.isSubscribing = isSubscribing;
}
UpdateSubscriptionAsyncTask(SubscribedUserDao subscribedUserDao, UserData userData,
@NonNull String accountName, boolean isSubscribing) {
this.subscribedUserDao = subscribedUserDao;
this.subscribedUserData = new SubscribedUserData(userData.getName(), userData.getIconUrl(),
accountName, false);
this.accountName = accountName;
this.isSubscribing = isSubscribing;
}
@Override
protected Void doInBackground(Void... voids) {
if (isSubscribing) {
subscribedUserDao.insert(subscribedUserData);
} else {
subscribedUserDao.deleteSubscribedUser(username, accountName);
}
return null;
}
}
}