Rewrite all the AsyncTasks in the asynctasks package using Executor and Handler.

This commit is contained in:
Alex Ning 2021-01-25 00:08:07 +08:00
parent 323af18c69
commit 7ca511d3f1
91 changed files with 1289 additions and 1477 deletions

View File

@ -62,7 +62,9 @@ import ml.docilealligator.infinityforreddit.fragments.SidebarFragment;
import ml.docilealligator.infinityforreddit.fragments.SubredditListingFragment;
import ml.docilealligator.infinityforreddit.fragments.SubscribedSubredditsListingFragment;
import ml.docilealligator.infinityforreddit.fragments.UserListingFragment;
import ml.docilealligator.infinityforreddit.fragments.ViewImgurImageFragment;
import ml.docilealligator.infinityforreddit.fragments.ViewImgurVideoFragment;
import ml.docilealligator.infinityforreddit.fragments.ViewRedditGalleryImageOrGifFragment;
import ml.docilealligator.infinityforreddit.fragments.ViewRedditGalleryVideoFragment;
import ml.docilealligator.infinityforreddit.services.DownloadMediaService;
import ml.docilealligator.infinityforreddit.services.DownloadRedditVideoService;
@ -242,4 +244,8 @@ public interface AppComponent {
void inject(SearchUsersResultActivity searchUsersResultActivity);
void inject(MultiredditSelectionActivity multiredditSelectionActivity);
void inject(ViewImgurImageFragment viewImgurImageFragment);
void inject(ViewRedditGalleryImageOrGifFragment viewRedditGalleryImageOrGifFragment);
}

View File

@ -1,12 +1,15 @@
package ml.docilealligator.infinityforreddit;
import android.os.Handler;
import androidx.annotation.NonNull;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Executor;
import ml.docilealligator.infinityforreddit.apis.RedditAPI;
import ml.docilealligator.infinityforreddit.asynctasks.InsertSubscribedThingsAsyncTask;
import ml.docilealligator.infinityforreddit.asynctasks.InsertSubscribedThings;
import ml.docilealligator.infinityforreddit.subscribedsubreddit.SubscribedSubredditData;
import ml.docilealligator.infinityforreddit.subscribeduser.SubscribedUserData;
import ml.docilealligator.infinityforreddit.utils.APIUtils;
@ -16,7 +19,8 @@ import retrofit2.Response;
import retrofit2.Retrofit;
public class FavoriteThing {
public static void favoriteSubreddit(Retrofit oauthRetrofit, RedditDataRoomDatabase redditDataRoomDatabase,
public static void favoriteSubreddit(Executor executor, Handler handler, Retrofit oauthRetrofit,
RedditDataRoomDatabase redditDataRoomDatabase,
String accessToken, SubscribedSubredditData subscribedSubredditData,
FavoriteThingListener favoriteThingListener) {
Map<String, String> params = new HashMap<>();
@ -26,8 +30,8 @@ public class FavoriteThing {
@Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
if (response.isSuccessful()) {
new InsertSubscribedThingsAsyncTask(redditDataRoomDatabase, subscribedSubredditData,
favoriteThingListener::success).execute();
InsertSubscribedThings.insertSubscribedThings(executor, handler, redditDataRoomDatabase, subscribedSubredditData,
favoriteThingListener::success);
} else {
favoriteThingListener.failed();
}
@ -40,7 +44,8 @@ public class FavoriteThing {
});
}
public static void unfavoriteSubreddit(Retrofit oauthRetrofit, RedditDataRoomDatabase redditDataRoomDatabase,
public static void unfavoriteSubreddit(Executor executor, Handler handler, Retrofit oauthRetrofit,
RedditDataRoomDatabase redditDataRoomDatabase,
String accessToken, SubscribedSubredditData subscribedSubredditData,
FavoriteThingListener favoriteThingListener) {
Map<String, String> params = new HashMap<>();
@ -50,8 +55,8 @@ public class FavoriteThing {
@Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
if (response.isSuccessful()) {
new InsertSubscribedThingsAsyncTask(redditDataRoomDatabase, subscribedSubredditData,
favoriteThingListener::success).execute();
InsertSubscribedThings.insertSubscribedThings(executor, handler, redditDataRoomDatabase,
subscribedSubredditData, favoriteThingListener::success);
} else {
favoriteThingListener.failed();
}
@ -64,9 +69,10 @@ public class FavoriteThing {
});
}
public static void favoriteUser(Retrofit oauthRetrofit, RedditDataRoomDatabase redditDataRoomDatabase,
String accessToken, SubscribedUserData subscribedUserData,
FavoriteThingListener favoriteThingListener) {
public static void favoriteUser(Executor executor, Handler handler, Retrofit oauthRetrofit,
RedditDataRoomDatabase redditDataRoomDatabase,
String accessToken, SubscribedUserData subscribedUserData,
FavoriteThingListener favoriteThingListener) {
Map<String, String> params = new HashMap<>();
params.put(APIUtils.SR_NAME_KEY, "u_" + subscribedUserData.getName());
params.put(APIUtils.MAKE_FAVORITE_KEY, "true");
@ -74,8 +80,8 @@ public class FavoriteThing {
@Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
if (response.isSuccessful()) {
new InsertSubscribedThingsAsyncTask(redditDataRoomDatabase, subscribedUserData,
favoriteThingListener::success).execute();
InsertSubscribedThings.insertSubscribedThings(executor, handler, redditDataRoomDatabase,
subscribedUserData, favoriteThingListener::success);
} else {
favoriteThingListener.failed();
}
@ -88,9 +94,10 @@ public class FavoriteThing {
});
}
public static void unfavoriteUser(Retrofit oauthRetrofit, RedditDataRoomDatabase redditDataRoomDatabase,
String accessToken, SubscribedUserData subscribedUserData,
FavoriteThingListener favoriteThingListener) {
public static void unfavoriteUser(Executor executor, Handler handler, Retrofit oauthRetrofit,
RedditDataRoomDatabase redditDataRoomDatabase,
String accessToken, SubscribedUserData subscribedUserData,
FavoriteThingListener favoriteThingListener) {
Map<String, String> params = new HashMap<>();
params.put(APIUtils.SR_NAME_KEY, "u_" + subscribedUserData.getName());
params.put(APIUtils.MAKE_FAVORITE_KEY, "false");
@ -98,8 +105,8 @@ public class FavoriteThing {
@Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
if (response.isSuccessful()) {
new InsertSubscribedThingsAsyncTask(redditDataRoomDatabase, subscribedUserData,
favoriteThingListener::success).execute();
InsertSubscribedThings.insertSubscribedThings(executor, handler, redditDataRoomDatabase,
subscribedUserData, favoriteThingListener::success);
} else {
favoriteThingListener.failed();
}

View File

@ -4,6 +4,7 @@ import android.app.WallpaperManager;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.view.WindowManager;
import android.widget.Toast;
@ -14,14 +15,16 @@ import com.bumptech.glide.Glide;
import com.bumptech.glide.request.target.CustomTarget;
import com.bumptech.glide.request.transition.Transition;
import ml.docilealligator.infinityforreddit.asynctasks.SetAsWallpaperAsyncTask;
import java.util.concurrent.Executor;
import ml.docilealligator.infinityforreddit.asynctasks.SetAsWallpaper;
public class WallpaperSetter {
public static final int HOME_SCREEN = 0;
public static final int LOCK_SCREEN = 1;
public static final int BOTH_SCREENS = 2;
public static void set(String url, int setTo, Context context, SetWallpaperListener setWallpaperListener) {
public static void set(Executor executor, Handler handler, String url, int setTo, Context context, SetWallpaperListener setWallpaperListener) {
Toast.makeText(context, R.string.save_image_first, Toast.LENGTH_SHORT).show();
WallpaperManager wallpaperManager = WallpaperManager.getInstance(context);
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
@ -29,7 +32,8 @@ public class WallpaperSetter {
Glide.with(context).asBitmap().load(url).into(new CustomTarget<Bitmap>() {
@Override
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
new SetAsWallpaperAsyncTask(resource, setTo, wallpaperManager, windowManager, setWallpaperListener).execute();
SetAsWallpaper.setAsWallpaper(executor, handler, resource, setTo, wallpaperManager,
windowManager, setWallpaperListener);
}
@Override

View File

@ -38,8 +38,8 @@ import javax.inject.Named;
import butterknife.BindView;
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.ChangeThemeName;
import ml.docilealligator.infinityforreddit.asynctasks.DeleteTheme;
import ml.docilealligator.infinityforreddit.asynctasks.GetCustomTheme;
import ml.docilealligator.infinityforreddit.asynctasks.InsertCustomTheme;
import ml.docilealligator.infinityforreddit.bottomsheetfragments.CreateThemeBottomSheetFragment;
@ -175,7 +175,8 @@ public class CustomThemeListingActivity extends BaseActivity implements
if (imm != null) {
imm.hideSoftInputFromWindow(themeNameEditText.getWindowToken(), 0);
}
new ChangeThemeNameAsyncTask(redditDataRoomDatabase, oldThemeName, themeNameEditText.getText().toString()).execute();
ChangeThemeName.changeThemeName(executor, redditDataRoomDatabase, oldThemeName,
themeNameEditText.getText().toString());
})
.setNegativeButton(R.string.cancel, null)
.setOnDismissListener(dialogInterface -> {
@ -212,7 +213,7 @@ public class CustomThemeListingActivity extends BaseActivity implements
.setTitle(R.string.delete_theme)
.setMessage(getString(R.string.delete_theme_dialog_message, themeName))
.setPositiveButton(R.string.yes, (dialogInterface, i)
-> new DeleteThemeAsyncTask(redditDataRoomDatabase, themeName, (isLightTheme, isDarkTheme, isAmoledTheme) -> {
-> DeleteTheme.deleteTheme(executor, new Handler(), redditDataRoomDatabase, themeName, (isLightTheme, isDarkTheme, isAmoledTheme) -> {
if (isLightTheme) {
CustomThemeSharedPreferencesUtils.insertThemeToSharedPreferences(
CustomThemeWrapper.getIndigo(CustomThemeListingActivity.this), lightThemeSharedPreferences);
@ -226,7 +227,7 @@ public class CustomThemeListingActivity extends BaseActivity implements
CustomThemeWrapper.getIndigoAmoled(CustomThemeListingActivity.this), amoledThemeSharedPreferences);
}
EventBus.getDefault().post(new RecreateActivityEvent());
}).execute())
}))
.setNegativeButton(R.string.no, null)
.show();
}

View File

@ -7,6 +7,7 @@ import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.InflateException;
import android.view.MenuItem;
@ -28,19 +29,20 @@ import org.json.JSONObject;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Executor;
import javax.inject.Inject;
import javax.inject.Named;
import butterknife.BindView;
import butterknife.ButterKnife;
import ml.docilealligator.infinityforreddit.apis.RedditAPI;
import ml.docilealligator.infinityforreddit.asynctasks.ParseAndInsertNewAccountAsyncTask;
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.FetchMyInfo;
import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.apis.RedditAPI;
import ml.docilealligator.infinityforreddit.asynctasks.ParseAndInsertNewAccount;
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.utils.APIUtils;
import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
import ml.docilealligator.infinityforreddit.utils.Utils;
@ -77,6 +79,8 @@ public class LoginActivity extends BaseActivity {
SharedPreferences mCurrentAccountSharedPreferences;
@Inject
CustomThemeWrapper mCustomThemeWrapper;
@Inject
Executor mExecutor;
private String authCode;
@Override
@ -163,13 +167,13 @@ public class LoginActivity extends BaseActivity {
mCurrentAccountSharedPreferences.edit().putString(SharedPreferencesUtils.ACCESS_TOKEN, accessToken)
.putString(SharedPreferencesUtils.ACCOUNT_NAME, name)
.putString(SharedPreferencesUtils.ACCOUNT_IMAGE_URL, profileImageUrl).apply();
new ParseAndInsertNewAccountAsyncTask(name, accessToken, refreshToken, profileImageUrl, bannerImageUrl,
ParseAndInsertNewAccount.parseAndInsertNewAccount(mExecutor, new Handler(), name, accessToken, refreshToken, profileImageUrl, bannerImageUrl,
karma, authCode, mRedditDataRoomDatabase.accountDao(),
() -> {
Intent resultIntent = new Intent();
setResult(Activity.RESULT_OK, resultIntent);
finish();
}).execute();
});
}
@Override

View File

@ -80,7 +80,7 @@ import ml.docilealligator.infinityforreddit.SortType;
import ml.docilealligator.infinityforreddit.SortTypeSelectionCallback;
import ml.docilealligator.infinityforreddit.account.AccountViewModel;
import ml.docilealligator.infinityforreddit.adapters.NavigationDrawerRecyclerViewAdapter;
import ml.docilealligator.infinityforreddit.asynctasks.InsertSubscribedThingsAsyncTask;
import ml.docilealligator.infinityforreddit.asynctasks.InsertSubscribedThings;
import ml.docilealligator.infinityforreddit.asynctasks.SwitchAccount;
import ml.docilealligator.infinityforreddit.asynctasks.SwitchToAnonymousMode;
import ml.docilealligator.infinityforreddit.bottomsheetfragments.FABMoreOptionsBottomSheetFragment;
@ -897,13 +897,15 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
public void onFetchSubscribedThingSuccess(ArrayList<SubscribedSubredditData> subscribedSubredditData,
ArrayList<SubscribedUserData> subscribedUserData,
ArrayList<SubredditData> subredditData) {
new InsertSubscribedThingsAsyncTask(
InsertSubscribedThings.insertSubscribedThings(
mExecutor,
new Handler(),
mRedditDataRoomDatabase,
mAccountName,
subscribedSubredditData,
subscribedUserData,
subredditData,
() -> mFetchSubscriptionsSuccess = true).execute();
() -> mFetchSubscriptionsSuccess = true);
}
@Override

View File

@ -5,6 +5,7 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
@ -34,7 +35,7 @@ import ml.docilealligator.infinityforreddit.ActivityToolbarInterface;
import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.asynctasks.InsertMultiRedditAsyncTask;
import ml.docilealligator.infinityforreddit.asynctasks.InsertMultireddit;
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.events.SwitchAccountEvent;
import ml.docilealligator.infinityforreddit.fragments.MultiRedditListingFragment;
@ -167,10 +168,11 @@ public class MultiredditSelectionActivity extends BaseActivity implements Activi
FetchMyMultiReddits.fetchMyMultiReddits(mOauthRetrofit, mAccessToken, new FetchMyMultiReddits.FetchMyMultiRedditsListener() {
@Override
public void success(ArrayList<MultiReddit> multiReddits) {
new InsertMultiRedditAsyncTask(mRedditDataRoomDatabase, multiReddits, mAccountName, () -> {
InsertMultireddit.insertMultireddit(mExecutor, new Handler(), mRedditDataRoomDatabase,
multiReddits, mAccountName, () -> {
mInsertSuccess = true;
((MultiRedditListingFragment) mFragment).stopRefreshProgressbar();
}).execute();
});
}
@Override

View File

@ -8,6 +8,7 @@ import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.provider.MediaStore;
import android.view.Menu;
import android.view.MenuItem;
@ -51,7 +52,7 @@ import ml.docilealligator.infinityforreddit.Flair;
import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.asynctasks.LoadSubredditIconAsyncTask;
import ml.docilealligator.infinityforreddit.asynctasks.LoadSubredditIcon;
import ml.docilealligator.infinityforreddit.bottomsheetfragments.FlairBottomSheetFragment;
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.events.SubmitImagePostEvent;
@ -423,11 +424,11 @@ public class PostImageActivity extends BaseActivity implements FlairBottomSheetF
}
private void loadSubredditIcon() {
new LoadSubredditIconAsyncTask(mRedditDataRoomDatabase, subredditName, mRetrofit, iconImageUrl -> {
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase, subredditName, mRetrofit, iconImageUrl -> {
iconUrl = iconImageUrl;
displaySubredditIcon();
loadSubredditIconSuccessful = true;
}).execute();
});
}
private void promptAlertDialog(int titleResId, int messageResId) {

View File

@ -6,6 +6,7 @@ import android.content.res.ColorStateList;
import android.content.res.Resources;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
@ -42,7 +43,7 @@ import ml.docilealligator.infinityforreddit.Flair;
import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.asynctasks.LoadSubredditIconAsyncTask;
import ml.docilealligator.infinityforreddit.asynctasks.LoadSubredditIcon;
import ml.docilealligator.infinityforreddit.bottomsheetfragments.FlairBottomSheetFragment;
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.events.SubmitTextOrLinkPostEvent;
@ -354,11 +355,12 @@ public class PostLinkActivity extends BaseActivity implements FlairBottomSheetFr
}
private void loadSubredditIcon() {
new LoadSubredditIconAsyncTask(mRedditDataRoomDatabase, subredditName, mRetrofit, iconImageUrl -> {
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase, subredditName,
mRetrofit, iconImageUrl -> {
iconUrl = iconImageUrl;
displaySubredditIcon();
loadSubredditIconSuccessful = true;
}).execute();
});
}
private void promptAlertDialog(int titleResId, int messageResId) {

View File

@ -6,6 +6,7 @@ import android.content.res.ColorStateList;
import android.content.res.Resources;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
@ -45,7 +46,7 @@ import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.adapters.MarkdownBottomBarRecyclerViewAdapter;
import ml.docilealligator.infinityforreddit.asynctasks.LoadSubredditIconAsyncTask;
import ml.docilealligator.infinityforreddit.asynctasks.LoadSubredditIcon;
import ml.docilealligator.infinityforreddit.bottomsheetfragments.FlairBottomSheetFragment;
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.events.SubmitTextOrLinkPostEvent;
@ -371,11 +372,12 @@ public class PostTextActivity extends BaseActivity implements FlairBottomSheetFr
}
private void loadSubredditIcon() {
new LoadSubredditIconAsyncTask(mRedditDataRoomDatabase, subredditName, mRetrofit, iconImageUrl -> {
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase, subredditName,
mRetrofit, iconImageUrl -> {
iconUrl = iconImageUrl;
displaySubredditIcon();
loadSubredditIconSuccessful = true;
}).execute();
});
}
private void promptAlertDialog(int titleResId, int messageResId) {

View File

@ -7,6 +7,7 @@ import android.content.res.Resources;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.provider.MediaStore;
import android.view.Menu;
import android.view.MenuItem;
@ -54,7 +55,7 @@ import ml.docilealligator.infinityforreddit.Flair;
import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.asynctasks.LoadSubredditIconAsyncTask;
import ml.docilealligator.infinityforreddit.asynctasks.LoadSubredditIcon;
import ml.docilealligator.infinityforreddit.bottomsheetfragments.FlairBottomSheetFragment;
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.events.SubmitVideoOrGifPostEvent;
@ -431,11 +432,12 @@ public class PostVideoActivity extends BaseActivity implements FlairBottomSheetF
}
private void loadSubredditIcon() {
new LoadSubredditIconAsyncTask(mRedditDataRoomDatabase, subredditName, mRetrofit, iconImageUrl -> {
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase, subredditName,
mRetrofit, iconImageUrl -> {
iconUrl = iconImageUrl;
displaySubredditIcon();
loadSubredditIconSuccessful = true;
}).execute();
});
}
private void promptAlertDialog(int titleResId, int messageResId) {

View File

@ -18,7 +18,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;
@ -68,8 +67,6 @@ public class ReportActivity extends BaseActivity {
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
CustomThemeWrapper mCustomThemeWrapper;
@Inject
Executor mExecutor;
private String mAccessToken;
private String mFullname;
private String mSubredditName;

View File

@ -35,8 +35,6 @@ import com.r0adkll.slidr.model.SlidrInterface;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import java.util.concurrent.Executor;
import javax.inject.Inject;
import javax.inject.Named;
@ -110,8 +108,6 @@ public class SearchResultActivity extends BaseActivity implements SortTypeSelect
SharedPreferences mCurrentAccountSharedPreferences;
@Inject
CustomThemeWrapper mCustomThemeWrapper;
@Inject
Executor mExecutor;
private String mAccessToken;
private String mAccountName;
private String mQuery;

View File

@ -21,8 +21,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;
@ -31,7 +29,6 @@ import butterknife.ButterKnife;
import ml.docilealligator.infinityforreddit.ActivityToolbarInterface;
import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.events.SwitchAccountEvent;
import ml.docilealligator.infinityforreddit.fragments.SubredditListingFragment;
@ -53,8 +50,6 @@ public class SearchSubredditsResultActivity extends BaseActivity implements Acti
Toolbar toolbar;
Fragment mFragment;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
@Named("default")
SharedPreferences mSharedPreferences;
@Inject
@ -62,8 +57,6 @@ public class SearchSubredditsResultActivity extends BaseActivity implements Acti
SharedPreferences mCurrentAccountSharedPreferences;
@Inject
CustomThemeWrapper mCustomThemeWrapper;
@Inject
Executor mExecutor;
private String mAccessToken;
private String mAccountName;

View File

@ -22,7 +22,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;
@ -33,7 +32,6 @@ import ml.docilealligator.infinityforreddit.ActivityToolbarInterface;
import ml.docilealligator.infinityforreddit.FetchUserFlairs;
import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.SelectUserFlair;
import ml.docilealligator.infinityforreddit.UserFlair;
import ml.docilealligator.infinityforreddit.adapters.UserFlairRecyclerViewAdapter;
@ -58,8 +56,6 @@ public class SelectUserFlairActivity extends BaseActivity implements ActivityToo
@Named("oauth")
Retrofit mOauthRetrofit;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
@Named("default")
SharedPreferences mSharedPreferences;
@Inject
@ -67,8 +63,6 @@ public class SelectUserFlairActivity extends BaseActivity implements ActivityToo
SharedPreferences mCurrentAccountSharedPreferences;
@Inject
CustomThemeWrapper mCustomThemeWrapper;
@Inject
Executor mExecutor;
private LinearLayoutManager mLinearLayoutManager;
private boolean mNullAccessToken = false;
private String mAccessToken;

View File

@ -16,8 +16,6 @@ import androidx.coordinatorlayout.widget.CoordinatorLayout;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.snackbar.Snackbar;
import java.util.concurrent.Executor;
import javax.inject.Inject;
import javax.inject.Named;
@ -25,7 +23,6 @@ import butterknife.BindView;
import butterknife.ButterKnife;
import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.message.ComposeMessage;
import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
@ -53,8 +50,6 @@ public class SendPrivateMessageActivity extends BaseActivity {
@Named("oauth")
Retrofit mOauthRetrofit;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
@Named("default")
SharedPreferences mSharedPreferences;
@Inject
@ -62,8 +57,6 @@ public class SendPrivateMessageActivity extends BaseActivity {
SharedPreferences mCurrentAccountSharedPreferences;
@Inject
CustomThemeWrapper mCustomThemeWrapper;
@Inject
Executor mExecutor;
private String mAccessToken;
private boolean isSubmitting = false;

View File

@ -17,8 +17,6 @@ import com.google.android.material.appbar.AppBarLayout;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import java.util.concurrent.Executor;
import javax.inject.Inject;
import javax.inject.Named;
@ -26,7 +24,6 @@ import butterknife.BindView;
import butterknife.ButterKnife;
import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.events.RecreateActivityEvent;
import ml.docilealligator.infinityforreddit.settings.AboutPreferenceFragment;
@ -58,11 +55,7 @@ public class SettingsActivity extends BaseActivity implements
@Named("current_account")
SharedPreferences mCurrentAccountSharedPreferences;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
CustomThemeWrapper mCustomThemeWrapper;
@Inject
Executor mExecutor;
@Override
protected void onCreate(Bundle savedInstanceState) {

View File

@ -8,6 +8,7 @@ import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
@ -51,7 +52,7 @@ import ml.docilealligator.infinityforreddit.Flair;
import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.asynctasks.LoadSubredditIconAsyncTask;
import ml.docilealligator.infinityforreddit.asynctasks.LoadSubredditIcon;
import ml.docilealligator.infinityforreddit.bottomsheetfragments.FlairBottomSheetFragment;
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.events.SubmitCrosspostEvent;
@ -424,11 +425,12 @@ public class SubmitCrosspostActivity extends BaseActivity implements FlairBottom
}
private void loadSubredditIcon() {
new LoadSubredditIconAsyncTask(mRedditDataRoomDatabase, subredditName, mRetrofit, iconImageUrl -> {
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase, subredditName,
mRetrofit, iconImageUrl -> {
iconUrl = iconImageUrl;
displaySubredditIcon();
loadSubredditIconSuccessful = true;
}).execute();
});
}
private void promptAlertDialog(int titleResId, int messageResId) {

View File

@ -29,7 +29,6 @@ import com.google.android.material.appbar.AppBarLayout;
import com.r0adkll.slidr.Slidr;
import java.util.ArrayList;
import java.util.concurrent.Executor;
import javax.inject.Inject;
import javax.inject.Named;
@ -81,8 +80,6 @@ public class SubredditMultiselectionActivity extends BaseActivity implements Act
SharedPreferences mCurrentAccountSharedPreferences;
@Inject
CustomThemeWrapper mCustomThemeWrapper;
@Inject
Executor mExecutor;
public SubscribedSubredditViewModel mSubscribedSubredditViewModel;
private String mAccessToken;
private String mAccountName;

View File

@ -5,6 +5,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.view.View;
@ -36,7 +37,7 @@ import ml.docilealligator.infinityforreddit.FetchSubscribedThing;
import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.asynctasks.InsertSubscribedThingsAsyncTask;
import ml.docilealligator.infinityforreddit.asynctasks.InsertSubscribedThings;
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.events.SwitchAccountEvent;
import ml.docilealligator.infinityforreddit.fragments.SubscribedSubredditsListingFragment;
@ -187,13 +188,15 @@ public class SubredditSelectionActivity extends BaseActivity implements Activity
public void onFetchSubscribedThingSuccess(ArrayList<SubscribedSubredditData> subscribedSubredditData,
ArrayList<SubscribedUserData> subscribedUserData,
ArrayList<SubredditData> subredditData) {
new InsertSubscribedThingsAsyncTask(
InsertSubscribedThings.insertSubscribedThings(
mExecutor,
new Handler(),
mRedditDataRoomDatabase,
mAccountName,
subscribedSubredditData,
subscribedUserData,
subredditData,
() -> mInsertSuccess = true).execute();
() -> mInsertSuccess = true);
}
@Override

View File

@ -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.MenuItem;
import android.view.View;
import android.view.ViewGroup;
@ -43,8 +44,8 @@ import ml.docilealligator.infinityforreddit.FragmentCommunicator;
import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.asynctasks.InsertMultiRedditAsyncTask;
import ml.docilealligator.infinityforreddit.asynctasks.InsertSubscribedThingsAsyncTask;
import ml.docilealligator.infinityforreddit.asynctasks.InsertMultireddit;
import ml.docilealligator.infinityforreddit.asynctasks.InsertSubscribedThings;
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.events.GoBackToMainPageEvent;
import ml.docilealligator.infinityforreddit.events.RefreshMultiRedditsEvent;
@ -246,7 +247,9 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
public void onFetchSubscribedThingSuccess(ArrayList<SubscribedSubredditData> subscribedSubredditData,
ArrayList<SubscribedUserData> subscribedUserData,
ArrayList<SubredditData> subredditData) {
new InsertSubscribedThingsAsyncTask(
InsertSubscribedThings.insertSubscribedThings(
mExecutor,
new Handler(),
mRedditDataRoomDatabase,
mAccountName,
subscribedSubredditData,
@ -255,7 +258,7 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
() -> {
mInsertSuccess = true;
sectionsPagerAdapter.stopRefreshProgressbar();
}).execute();
});
}
@Override
@ -277,10 +280,10 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
FetchMyMultiReddits.fetchMyMultiReddits(mOauthRetrofit, mAccessToken, new FetchMyMultiReddits.FetchMyMultiRedditsListener() {
@Override
public void success(ArrayList<MultiReddit> multiReddits) {
new InsertMultiRedditAsyncTask(mRedditDataRoomDatabase, multiReddits, mAccountName, () -> {
InsertMultireddit.insertMultireddit(mExecutor, new Handler(), mRedditDataRoomDatabase, multiReddits, mAccountName, () -> {
mInsertMultiredditSuccess = true;
sectionsPagerAdapter.stopMultiRedditRefreshProgressbar();
}).execute();
});
}
@Override
@ -297,7 +300,7 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
.setTitle(R.string.delete)
.setMessage(R.string.delete_multi_reddit_dialog_message)
.setPositiveButton(R.string.delete, (dialogInterface, i)
-> DeleteMultiReddit.deleteMultiReddit(mOauthRetrofit, mRedditDataRoomDatabase,
-> DeleteMultiReddit.deleteMultiReddit(mExecutor, new Handler(), mOauthRetrofit, mRedditDataRoomDatabase,
mAccessToken, mAccountName, multiReddit.getPath(), new DeleteMultiReddit.DeleteMultiRedditListener() {
@Override
public void success() {

View File

@ -10,6 +10,7 @@ import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.text.Html;
import android.view.Menu;
import android.view.MenuItem;
@ -46,6 +47,7 @@ import com.r0adkll.slidr.model.SlidrConfig;
import com.r0adkll.slidr.model.SlidrPosition;
import java.io.File;
import java.util.concurrent.Executor;
import javax.inject.Inject;
import javax.inject.Named;
@ -57,8 +59,8 @@ import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.SetAsWallpaperCallback;
import ml.docilealligator.infinityforreddit.WallpaperSetter;
import ml.docilealligator.infinityforreddit.asynctasks.SaveBitmapImageToFileAsyncTask;
import ml.docilealligator.infinityforreddit.asynctasks.SaveGIFToFileAsyncTask;
import ml.docilealligator.infinityforreddit.asynctasks.SaveBitmapImageToFile;
import ml.docilealligator.infinityforreddit.asynctasks.SaveGIFToFile;
import ml.docilealligator.infinityforreddit.bottomsheetfragments.SetAsWallpaperBottomSheetFragment;
import ml.docilealligator.infinityforreddit.font.ContentFontFamily;
import ml.docilealligator.infinityforreddit.font.ContentFontStyle;
@ -86,6 +88,8 @@ public class ViewImageOrGifActivity extends AppCompatActivity implements SetAsWa
@Inject
@Named("default")
SharedPreferences mSharedPreferences;
@Inject
Executor mExecutor;
private boolean isActionBarHidden = false;
private boolean isDownloading = false;
private RequestManager glide;
@ -273,62 +277,62 @@ public class ViewImageOrGifActivity extends AppCompatActivity implements SetAsWa
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
case R.id.action_download_view_image_or_gif_activity:
if (isDownloading) {
return false;
}
int itemId = item.getItemId();
if (itemId == android.R.id.home) {
finish();
return true;
} else if (itemId == R.id.action_download_view_image_or_gif_activity) {
if (isDownloading) {
return false;
}
isDownloading = true;
isDownloading = true;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
// Permission is not granted
// No explanation needed; request the permission
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE);
} else {
// Permission has already been granted
download();
}
// Permission is not granted
// No explanation needed; request the permission
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE);
} else {
// Permission has already been granted
download();
}
} else {
download();
}
return true;
case R.id.action_share_view_image_or_gif_activity:
if (isGif)
shareGif();
else
shareImage();
return true;
case R.id.action_set_wallpaper_view_image_or_gif_activity:
if (!isGif) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
SetAsWallpaperBottomSheetFragment setAsWallpaperBottomSheetFragment = new SetAsWallpaperBottomSheetFragment();
setAsWallpaperBottomSheetFragment.show(getSupportFragmentManager(), setAsWallpaperBottomSheetFragment.getTag());
} else {
WallpaperSetter.set(mImageUrl, WallpaperSetter.BOTH_SCREENS, this,
new WallpaperSetter.SetWallpaperListener() {
@Override
public void success() {
Toast.makeText(ViewImageOrGifActivity.this, R.string.wallpaper_set, Toast.LENGTH_SHORT).show();
}
return true;
} else if (itemId == R.id.action_share_view_image_or_gif_activity) {
if (isGif)
shareGif();
else
shareImage();
return true;
} else if (itemId == R.id.action_set_wallpaper_view_image_or_gif_activity) {
if (!isGif) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
SetAsWallpaperBottomSheetFragment setAsWallpaperBottomSheetFragment = new SetAsWallpaperBottomSheetFragment();
setAsWallpaperBottomSheetFragment.show(getSupportFragmentManager(), setAsWallpaperBottomSheetFragment.getTag());
} else {
WallpaperSetter.set(mExecutor, new Handler(), mImageUrl, WallpaperSetter.BOTH_SCREENS, this,
new WallpaperSetter.SetWallpaperListener() {
@Override
public void success() {
Toast.makeText(ViewImageOrGifActivity.this, R.string.wallpaper_set, Toast.LENGTH_SHORT).show();
}
@Override
public void failed() {
Toast.makeText(ViewImageOrGifActivity.this, R.string.error_set_wallpaper, Toast.LENGTH_SHORT).show();
}
});
}
@Override
public void failed() {
Toast.makeText(ViewImageOrGifActivity.this, R.string.error_set_wallpaper, Toast.LENGTH_SHORT).show();
}
});
}
return true;
}
return true;
}
return false;
@ -353,8 +357,9 @@ public class ViewImageOrGifActivity extends AppCompatActivity implements SetAsWa
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
if (getExternalCacheDir() != null) {
Toast.makeText(ViewImageOrGifActivity.this, R.string.save_image_first, Toast.LENGTH_SHORT).show();
new SaveBitmapImageToFileAsyncTask(resource, getExternalCacheDir().getPath(), mImageFileName,
new SaveBitmapImageToFileAsyncTask.SaveBitmapImageToFileAsyncTaskListener() {
SaveBitmapImageToFile.SaveBitmapImageToFile(mExecutor, new Handler(), resource,
getExternalCacheDir().getPath(), mImageFileName,
new SaveBitmapImageToFile.SaveBitmapImageToFileListener() {
@Override
public void saveSuccess(File imageFile) {
Uri uri = FileProvider.getUriForFile(ViewImageOrGifActivity.this,
@ -372,7 +377,7 @@ public class ViewImageOrGifActivity extends AppCompatActivity implements SetAsWa
Toast.makeText(ViewImageOrGifActivity.this,
R.string.cannot_save_image, Toast.LENGTH_SHORT).show();
}
}).execute();
});
} else {
Toast.makeText(ViewImageOrGifActivity.this,
R.string.cannot_get_storage, Toast.LENGTH_SHORT).show();
@ -397,8 +402,8 @@ public class ViewImageOrGifActivity extends AppCompatActivity implements SetAsWa
@Override
public boolean onResourceReady(GifDrawable resource, Object model, Target<GifDrawable> target, DataSource dataSource, boolean isFirstResource) {
if (getExternalCacheDir() != null) {
new SaveGIFToFileAsyncTask(resource, getExternalCacheDir().getPath(), mImageFileName,
new SaveGIFToFileAsyncTask.SaveGIFToFileAsyncTaskListener() {
SaveGIFToFile.saveGifToFile(mExecutor, new Handler(), resource, getExternalCacheDir().getPath(), mImageFileName,
new SaveGIFToFile.SaveGIFToFileAsyncTaskListener() {
@Override
public void saveSuccess(File imageFile) {
Uri uri = FileProvider.getUriForFile(ViewImageOrGifActivity.this,
@ -416,7 +421,7 @@ public class ViewImageOrGifActivity extends AppCompatActivity implements SetAsWa
Toast.makeText(ViewImageOrGifActivity.this,
R.string.cannot_save_gif, Toast.LENGTH_SHORT).show();
}
}).execute();
});
} else {
Toast.makeText(ViewImageOrGifActivity.this,
R.string.cannot_get_storage, Toast.LENGTH_SHORT).show();
@ -440,7 +445,7 @@ public class ViewImageOrGifActivity extends AppCompatActivity implements SetAsWa
@Override
public void setToHomeScreen(int viewPagerPosition) {
WallpaperSetter.set(mImageUrl, WallpaperSetter.HOME_SCREEN, this,
WallpaperSetter.set(mExecutor, new Handler(), mImageUrl, WallpaperSetter.HOME_SCREEN, this,
new WallpaperSetter.SetWallpaperListener() {
@Override
public void success() {
@ -456,7 +461,7 @@ public class ViewImageOrGifActivity extends AppCompatActivity implements SetAsWa
@Override
public void setToLockScreen(int viewPagerPosition) {
WallpaperSetter.set(mImageUrl, WallpaperSetter.LOCK_SCREEN, this,
WallpaperSetter.set(mExecutor, new Handler(), mImageUrl, WallpaperSetter.LOCK_SCREEN, this,
new WallpaperSetter.SetWallpaperListener() {
@Override
public void success() {
@ -472,7 +477,7 @@ public class ViewImageOrGifActivity extends AppCompatActivity implements SetAsWa
@Override
public void setToBoth(int viewPagerPosition) {
WallpaperSetter.set(mImageUrl, WallpaperSetter.BOTH_SCREENS, this,
WallpaperSetter.set(mExecutor, new Handler(), mImageUrl, WallpaperSetter.BOTH_SCREENS, this,
new WallpaperSetter.SetWallpaperListener() {
@Override
public void success() {

View File

@ -5,6 +5,7 @@ import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
@ -28,6 +29,7 @@ import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.concurrent.Executor;
import javax.inject.Inject;
import javax.inject.Named;
@ -81,6 +83,8 @@ public class ViewImgurMediaActivity extends AppCompatActivity implements SetAsWa
@Inject
@Named("default")
SharedPreferences sharedPreferences;
@Inject
Executor executor;
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -301,7 +305,7 @@ public class ViewImgurMediaActivity extends AppCompatActivity implements SetAsWa
@Override
public void setToHomeScreen(int viewPagerPosition) {
if (images != null && viewPagerPosition >= 0 && viewPagerPosition < images.size()) {
WallpaperSetter.set(images.get(viewPagerPosition).getLink(), WallpaperSetter.HOME_SCREEN, this,
WallpaperSetter.set(executor, new Handler(), images.get(viewPagerPosition).getLink(), WallpaperSetter.HOME_SCREEN, this,
new WallpaperSetter.SetWallpaperListener() {
@Override
public void success() {
@ -319,7 +323,7 @@ public class ViewImgurMediaActivity extends AppCompatActivity implements SetAsWa
@Override
public void setToLockScreen(int viewPagerPosition) {
if (images != null && viewPagerPosition >= 0 && viewPagerPosition < images.size()) {
WallpaperSetter.set(images.get(viewPagerPosition).getLink(), WallpaperSetter.LOCK_SCREEN, this,
WallpaperSetter.set(executor, new Handler(), images.get(viewPagerPosition).getLink(), WallpaperSetter.LOCK_SCREEN, this,
new WallpaperSetter.SetWallpaperListener() {
@Override
public void success() {
@ -337,7 +341,7 @@ public class ViewImgurMediaActivity extends AppCompatActivity implements SetAsWa
@Override
public void setToBoth(int viewPagerPosition) {
if (images != null && viewPagerPosition >= 0 && viewPagerPosition < images.size()) {
WallpaperSetter.set(images.get(viewPagerPosition).getLink(), WallpaperSetter.BOTH_SCREENS, this,
WallpaperSetter.set(executor, new Handler(), images.get(viewPagerPosition).getLink(), WallpaperSetter.BOTH_SCREENS, this,
new WallpaperSetter.SetWallpaperListener() {
@Override
public void success() {

View File

@ -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.view.View;
@ -264,7 +265,7 @@ public class ViewMultiRedditDetailActivity extends BaseActivity implements SortT
.setTitle(R.string.delete)
.setMessage(R.string.delete_multi_reddit_dialog_message)
.setPositiveButton(R.string.delete, (dialogInterface, i)
-> DeleteMultiReddit.deleteMultiReddit(mOauthRetrofit, mRedditDataRoomDatabase,
-> DeleteMultiReddit.deleteMultiReddit(mExecutor, new Handler(), mOauthRetrofit, mRedditDataRoomDatabase,
mAccessToken, mAccountName, multiPath, new DeleteMultiReddit.DeleteMultiRedditListener() {
@Override
public void success() {

View File

@ -639,7 +639,7 @@ public class ViewPostDetailActivity extends BaseActivity implements FlairBottomS
setupMenu();
mAdapter = new CommentAndPostRecyclerViewAdapter(ViewPostDetailActivity.this,
mCustomThemeWrapper, mRetrofit, mOauthRetrofit, mGfycatRetrofit,
mExecutor, mCustomThemeWrapper, mRetrofit, mOauthRetrofit, mGfycatRetrofit,
mRedgifsRetrofit, mRedditDataRoomDatabase, mGlide,
mWindowWidth, mAccessToken, mAccountName, mPost, mLocale, mSingleCommentId,
isSingleCommentThreadMode, mSharedPreferences, mNsfwAndSpoilerSharedPreferences, mExoCreator,
@ -802,7 +802,7 @@ public class ViewPostDetailActivity extends BaseActivity implements FlairBottomS
setupMenu();
mAdapter = new CommentAndPostRecyclerViewAdapter(ViewPostDetailActivity.this,
mCustomThemeWrapper, mRetrofit, mOauthRetrofit, mGfycatRetrofit,
mExecutor, mCustomThemeWrapper, mRetrofit, mOauthRetrofit, mGfycatRetrofit,
mRedgifsRetrofit, mRedditDataRoomDatabase, mGlide,
mWindowWidth, mAccessToken, mAccountName, mPost, mLocale,
mSingleCommentId, isSingleCommentThreadMode, mSharedPreferences,

View File

@ -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.MenuItem;
import android.view.View;
import android.widget.EditText;
@ -36,7 +37,7 @@ import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.adapters.PrivateMessagesDetailRecyclerViewAdapter;
import ml.docilealligator.infinityforreddit.asynctasks.LoadUserDataAsyncTask;
import ml.docilealligator.infinityforreddit.asynctasks.LoadUserData;
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.events.RepliedToPrivateMessageEvent;
import ml.docilealligator.infinityforreddit.message.Message;
@ -93,7 +94,7 @@ public class ViewPrivateMessagesActivity extends BaseActivity implements Activit
private String mAccountName;
private String mUserAvatar;
private ArrayList<ProvideUserAvatarCallback> mProvideUserAvatarCallbacks;
private LoadUserDataAsyncTask mLoadUserDataAsyncTask;
private boolean isLoadingUserAvatar = false;
private boolean isSendingMessage = false;
private int mSecondaryTextColor;
private int mSendMessageIconColor;
@ -234,15 +235,16 @@ public class ViewPrivateMessagesActivity extends BaseActivity implements Activit
public void fetchUserAvatar(String username, ProvideUserAvatarCallback provideUserAvatarCallback) {
if (mUserAvatar == null) {
mProvideUserAvatarCallbacks.add(provideUserAvatarCallback);
if (mLoadUserDataAsyncTask == null) {
mLoadUserDataAsyncTask = new LoadUserDataAsyncTask(mRedditDataRoomDatabase.userDao(), username, mRetrofit, iconImageUrl -> {
mUserAvatar = iconImageUrl;
if (!isLoadingUserAvatar) {
LoadUserData.loadUserData(mExecutor, new Handler(), mRedditDataRoomDatabase,
username, mRetrofit, iconImageUrl -> {
isLoadingUserAvatar = false;
mUserAvatar = iconImageUrl == null ? "" : iconImageUrl;
for (ProvideUserAvatarCallback provideUserAvatarCallbackInArrayList : mProvideUserAvatarCallbacks) {
provideUserAvatarCallbackInArrayList.fetchAvatarSuccess(iconImageUrl);
}
mProvideUserAvatarCallbacks.clear();
});
mLoadUserDataAsyncTask.execute();
}
} else {
provideUserAvatarCallback.fetchAvatarSuccess(mUserAvatar);

View File

@ -4,6 +4,7 @@ import android.content.SharedPreferences;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
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.thefuntasty.hauler.DragDirection;
import com.thefuntasty.hauler.HaulerView;
import java.util.ArrayList;
import java.util.concurrent.Executor;
import javax.inject.Inject;
import javax.inject.Named;
@ -56,6 +58,8 @@ public class ViewRedditGalleryActivity extends AppCompatActivity implements SetA
@Inject
@Named("default")
SharedPreferences sharedPreferences;
@Inject
Executor executor;
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -152,7 +156,7 @@ public class ViewRedditGalleryActivity extends AppCompatActivity implements SetA
@Override
public void setToHomeScreen(int viewPagerPosition) {
if (gallery != null && viewPagerPosition >= 0 && viewPagerPosition < gallery.size()) {
WallpaperSetter.set(gallery.get(viewPagerPosition).url, WallpaperSetter.HOME_SCREEN, this,
WallpaperSetter.set(executor, new Handler(), gallery.get(viewPagerPosition).url, WallpaperSetter.HOME_SCREEN, this,
new WallpaperSetter.SetWallpaperListener() {
@Override
public void success() {
@ -170,7 +174,7 @@ public class ViewRedditGalleryActivity extends AppCompatActivity implements SetA
@Override
public void setToLockScreen(int viewPagerPosition) {
if (gallery != null && viewPagerPosition >= 0 && viewPagerPosition < gallery.size()) {
WallpaperSetter.set(gallery.get(viewPagerPosition).url, WallpaperSetter.LOCK_SCREEN, this,
WallpaperSetter.set(executor, new Handler(), gallery.get(viewPagerPosition).url, WallpaperSetter.LOCK_SCREEN, this,
new WallpaperSetter.SetWallpaperListener() {
@Override
public void success() {
@ -188,7 +192,7 @@ public class ViewRedditGalleryActivity extends AppCompatActivity implements SetA
@Override
public void setToBoth(int viewPagerPosition) {
if (gallery != null && viewPagerPosition >= 0 && viewPagerPosition < gallery.size()) {
WallpaperSetter.set(gallery.get(viewPagerPosition).url, WallpaperSetter.BOTH_SCREENS, this,
WallpaperSetter.set(executor, new Handler(), gallery.get(viewPagerPosition).url, WallpaperSetter.BOTH_SCREENS, this,
new WallpaperSetter.SetWallpaperListener() {
@Override
public void success() {

View File

@ -71,8 +71,8 @@ import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.SortType;
import ml.docilealligator.infinityforreddit.SortTypeSelectionCallback;
import ml.docilealligator.infinityforreddit.asynctasks.AddSubredditOrUserToMultiReddit;
import ml.docilealligator.infinityforreddit.asynctasks.CheckIsSubscribedToSubredditAsyncTask;
import ml.docilealligator.infinityforreddit.asynctasks.InsertSubredditDataAsyncTask;
import ml.docilealligator.infinityforreddit.asynctasks.CheckIsSubscribedToSubreddit;
import ml.docilealligator.infinityforreddit.asynctasks.InsertSubredditData;
import ml.docilealligator.infinityforreddit.asynctasks.SwitchAccount;
import ml.docilealligator.infinityforreddit.bottomsheetfragments.FABMoreOptionsBottomSheetFragment;
import ml.docilealligator.infinityforreddit.bottomsheetfragments.PostLayoutBottomSheetFragment;
@ -515,7 +515,8 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
public void onFetchSubredditDataSuccess(SubredditData subredditData, int nCurrentOnlineSubscribers) {
mNCurrentOnlineSubscribers = nCurrentOnlineSubscribers;
nOnlineSubscribersTextView.setText(getString(R.string.online_subscribers_number_detail, nCurrentOnlineSubscribers));
new InsertSubredditDataAsyncTask(mRedditDataRoomDatabase, subredditData, () -> mFetchSubredditInfoSuccess = true).execute();
InsertSubredditData.insertSubredditData(mExecutor, new Handler(), mRedditDataRoomDatabase,
subredditData, () -> mFetchSubredditInfoSuccess = true);
}
@Override
@ -862,8 +863,9 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
}
});
new CheckIsSubscribedToSubredditAsyncTask(mRedditDataRoomDatabase, subredditName, mAccountName,
new CheckIsSubscribedToSubredditAsyncTask.CheckIsSubscribedToSubredditListener() {
CheckIsSubscribedToSubreddit.checkIsSubscribedToSubreddit(mExecutor, new Handler(),
mRedditDataRoomDatabase, subredditName, mAccountName,
new CheckIsSubscribedToSubreddit.CheckIsSubscribedToSubredditListener() {
@Override
public void isSubscribed() {
subscribeSubredditChip.setText(R.string.unsubscribe);
@ -877,7 +879,7 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
subscribeSubredditChip.setChipBackgroundColor(ColorStateList.valueOf(unsubscribedColor));
subscriptionReady = true;
}
}).execute();
});
sectionsPagerAdapter = new SectionsPagerAdapter(this);
viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {

View File

@ -75,7 +75,7 @@ import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.SortType;
import ml.docilealligator.infinityforreddit.SortTypeSelectionCallback;
import ml.docilealligator.infinityforreddit.asynctasks.AddSubredditOrUserToMultiReddit;
import ml.docilealligator.infinityforreddit.asynctasks.CheckIsFollowingUserAsyncTask;
import ml.docilealligator.infinityforreddit.asynctasks.CheckIsFollowingUser;
import ml.docilealligator.infinityforreddit.asynctasks.SwitchAccount;
import ml.docilealligator.infinityforreddit.bottomsheetfragments.FABMoreOptionsBottomSheetFragment;
import ml.docilealligator.infinityforreddit.bottomsheetfragments.PostLayoutBottomSheetFragment;
@ -94,7 +94,6 @@ import ml.docilealligator.infinityforreddit.multireddit.MultiReddit;
import ml.docilealligator.infinityforreddit.post.Post;
import ml.docilealligator.infinityforreddit.post.PostDataSource;
import ml.docilealligator.infinityforreddit.readpost.InsertReadPost;
import ml.docilealligator.infinityforreddit.subscribeduser.SubscribedUserDao;
import ml.docilealligator.infinityforreddit.user.BlockUser;
import ml.docilealligator.infinityforreddit.user.FetchUserData;
import ml.docilealligator.infinityforreddit.user.UserDao;
@ -198,7 +197,6 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
public UserViewModel userViewModel;
private FragmentManager fragmentManager;
private SectionsPagerAdapter sectionsPagerAdapter;
private SubscribedUserDao subscribedUserDao;
private RequestManager glide;
private Menu mMenu;
private AppBarLayout.LayoutParams params;
@ -358,7 +356,6 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
showBottomAppBar = mSharedPreferences.getBoolean(SharedPreferencesUtils.BOTTOM_APP_BAR_KEY, false);
lockBottomAppBar = mSharedPreferences.getBoolean(SharedPreferencesUtils.LOCK_BOTTOM_APP_BAR, false);
subscribedUserDao = mRedditDataRoomDatabase.subscribedUserDao();
glide = Glide.with(this);
Locale locale = getResources().getConfiguration().locale;
@ -412,7 +409,7 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
subscriptionReady = false;
if (resources.getString(R.string.follow).contentEquals(subscribeUserChip.getText())) {
UserFollowing.followUser(mOauthRetrofit, mRetrofit, mAccessToken,
username, mAccountName, subscribedUserDao, new UserFollowing.UserFollowingListener() {
username, mAccountName, mRedditDataRoomDatabase, new UserFollowing.UserFollowingListener() {
@Override
public void onUserFollowingSuccess() {
subscribeUserChip.setText(R.string.unfollow);
@ -429,7 +426,7 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
});
} else {
UserFollowing.unfollowUser(mOauthRetrofit, mRetrofit, mAccessToken,
username, mAccountName, subscribedUserDao, new UserFollowing.UserFollowingListener() {
username, mAccountName, mRedditDataRoomDatabase, new UserFollowing.UserFollowingListener() {
@Override
public void onUserFollowingSuccess() {
subscribeUserChip.setText(R.string.follow);
@ -448,7 +445,8 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
}
});
new CheckIsFollowingUserAsyncTask(subscribedUserDao, username, mAccountName, new CheckIsFollowingUserAsyncTask.CheckIsFollowingUserListener() {
CheckIsFollowingUser.checkIsFollowingUser(mExecutor, new Handler(), mRedditDataRoomDatabase,
username, mAccountName, new CheckIsFollowingUser.CheckIsFollowingUserListener() {
@Override
public void isSubscribed() {
subscribeUserChip.setText(R.string.unfollow);
@ -462,7 +460,7 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
subscribeUserChip.setChipBackgroundColor(ColorStateList.valueOf(unsubscribedColor));
subscriptionReady = true;
}
}).execute();
});
} else {
subscribeUserChip.setVisibility(View.GONE);
}

View File

@ -11,6 +11,7 @@ import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.TextPaint;
@ -59,6 +60,7 @@ import org.commonmark.ext.gfm.tables.TableBlock;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.concurrent.Executor;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@ -100,8 +102,8 @@ import ml.docilealligator.infinityforreddit.activities.ViewRedditGalleryActivity
import ml.docilealligator.infinityforreddit.activities.ViewSubredditDetailActivity;
import ml.docilealligator.infinityforreddit.activities.ViewUserDetailActivity;
import ml.docilealligator.infinityforreddit.activities.ViewVideoActivity;
import ml.docilealligator.infinityforreddit.asynctasks.LoadSubredditIconAsyncTask;
import ml.docilealligator.infinityforreddit.asynctasks.LoadUserDataAsyncTask;
import ml.docilealligator.infinityforreddit.asynctasks.LoadSubredditIcon;
import ml.docilealligator.infinityforreddit.asynctasks.LoadUserData;
import ml.docilealligator.infinityforreddit.bottomsheetfragments.CommentMoreBottomSheetFragment;
import ml.docilealligator.infinityforreddit.bottomsheetfragments.CopyTextBottomSheetFragment;
import ml.docilealligator.infinityforreddit.bottomsheetfragments.ShareLinkBottomSheetFragment;
@ -141,6 +143,7 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
private static final int VIEW_TYPE_VIEW_ALL_COMMENTS = 17;
private AppCompatActivity mActivity;
private Executor mExecutor;
private Retrofit mRetrofit;
private Retrofit mOauthRetrofit;
private Retrofit mGfycatRetrofit;
@ -235,7 +238,7 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
private float mScale;
private ExoCreator mExoCreator;
public CommentAndPostRecyclerViewAdapter(AppCompatActivity activity, CustomThemeWrapper customThemeWrapper,
public CommentAndPostRecyclerViewAdapter(AppCompatActivity activity, Executor executor, CustomThemeWrapper customThemeWrapper,
Retrofit retrofit, Retrofit oauthRetrofit, Retrofit gfycatRetrofit,
Retrofit redgifsRetrofit,
RedditDataRoomDatabase redditDataRoomDatabase, RequestManager glide,
@ -246,6 +249,7 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
SharedPreferences nsfwAndSpoilerSharedPreferences, ExoCreator exoCreator,
CommentRecyclerViewAdapterCallback commentRecyclerViewAdapterCallback) {
mActivity = activity;
mExecutor = executor;
mRetrofit = retrofit;
mOauthRetrofit = oauthRetrofit;
mGfycatRetrofit = gfycatRetrofit;
@ -731,7 +735,7 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
if (mPost.getSubredditNamePrefixed().startsWith("u/")) {
if (mPost.getAuthorIconUrl() == null) {
String authorName = mPost.getAuthor().equals("[deleted]") ? mPost.getSubredditNamePrefixed().substring(2) : mPost.getAuthor();
new LoadUserDataAsyncTask(mRedditDataRoomDatabase.userDao(), authorName, mOauthRetrofit, iconImageUrl -> {
LoadUserData.loadUserData(mExecutor, new Handler(), mRedditDataRoomDatabase, authorName, mOauthRetrofit, iconImageUrl -> {
if (mActivity != null && getItemCount() > 0) {
if (iconImageUrl == null || iconImageUrl.equals("")) {
mGlide.load(R.drawable.subreddit_default_icon)
@ -749,7 +753,7 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
mPost.setAuthorIconUrl(iconImageUrl);
}
}
}).execute();
});
} else if (!mPost.getAuthorIconUrl().equals("")) {
mGlide.load(mPost.getAuthorIconUrl())
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
@ -763,7 +767,7 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
}
} else {
if (mPost.getSubredditIconUrl() == null) {
new LoadSubredditIconAsyncTask(
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(),
mRedditDataRoomDatabase, mPost.getSubredditNamePrefixed().substring(2),
mRetrofit, iconImageUrl -> {
if (iconImageUrl == null || iconImageUrl.equals("")) {
@ -779,7 +783,7 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
}
mPost.setSubredditIconUrl(iconImageUrl);
}).execute();
});
} else if (!mPost.getSubredditIconUrl().equals("")) {
mGlide.load(mPost.getSubredditIconUrl())
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))

View File

@ -2,6 +2,7 @@ package ml.docilealligator.infinityforreddit.adapters;
import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -17,16 +18,17 @@ import com.bumptech.glide.RequestManager;
import com.bumptech.glide.request.RequestOptions;
import java.util.List;
import java.util.concurrent.Executor;
import butterknife.BindView;
import butterknife.ButterKnife;
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
import me.zhanghai.android.fastscroll.PopupTextProvider;
import ml.docilealligator.infinityforreddit.activities.ViewUserDetailActivity;
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.FavoriteThing;
import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.activities.ViewUserDetailActivity;
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.subscribeduser.SubscribedUserData;
import pl.droidsonroids.gif.GifImageView;
import retrofit2.Retrofit;
@ -40,6 +42,7 @@ public class FollowedUsersRecyclerViewAdapter extends RecyclerView.Adapter<Recyc
private List<SubscribedUserData> mSubscribedUserData;
private List<SubscribedUserData> mFavoriteSubscribedUserData;
private Context mContext;
private Executor mExecutor;
private Retrofit mOauthRetrofit;
private RedditDataRoomDatabase mRedditDataRoomDatabase;
private String mAccessToken;
@ -47,11 +50,12 @@ public class FollowedUsersRecyclerViewAdapter extends RecyclerView.Adapter<Recyc
private int mPrimaryTextColor;
private int mSecondaryTextColor;
public FollowedUsersRecyclerViewAdapter(Context context, Retrofit oauthRetrofit,
public FollowedUsersRecyclerViewAdapter(Context context, Executor executor, Retrofit oauthRetrofit,
RedditDataRoomDatabase redditDataRoomDatabase,
CustomThemeWrapper customThemeWrapper,
String accessToken) {
mContext = context;
mExecutor = executor;
mOauthRetrofit = oauthRetrofit;
mRedditDataRoomDatabase = redditDataRoomDatabase;
mAccessToken = accessToken;
@ -215,7 +219,8 @@ public class FollowedUsersRecyclerViewAdapter extends RecyclerView.Adapter<Recyc
if(mFavoriteSubscribedUserData.get(position).isFavorite()) {
favoriteImageView.setImageResource(R.drawable.ic_favorite_border_24dp);
mFavoriteSubscribedUserData.get(position).setFavorite(false);
FavoriteThing.unfavoriteUser(mOauthRetrofit, mRedditDataRoomDatabase, mAccessToken,
FavoriteThing.unfavoriteUser(mExecutor, new Handler(), mOauthRetrofit,
mRedditDataRoomDatabase, mAccessToken,
mFavoriteSubscribedUserData.get(position),
new FavoriteThing.FavoriteThingListener() {
@Override
@ -240,7 +245,8 @@ public class FollowedUsersRecyclerViewAdapter extends RecyclerView.Adapter<Recyc
} else {
favoriteImageView.setImageResource(R.drawable.ic_favorite_24dp);
mFavoriteSubscribedUserData.get(position).setFavorite(true);
FavoriteThing.favoriteUser(mOauthRetrofit, mRedditDataRoomDatabase, mAccessToken,
FavoriteThing.favoriteUser(mExecutor, new Handler(), mOauthRetrofit,
mRedditDataRoomDatabase, mAccessToken,
mFavoriteSubscribedUserData.get(position),
new FavoriteThing.FavoriteThingListener() {
@Override
@ -301,7 +307,8 @@ public class FollowedUsersRecyclerViewAdapter extends RecyclerView.Adapter<Recyc
if(mSubscribedUserData.get(position).isFavorite()) {
favoriteImageView.setImageResource(R.drawable.ic_favorite_border_24dp);
mSubscribedUserData.get(position).setFavorite(false);
FavoriteThing.unfavoriteUser(mOauthRetrofit, mRedditDataRoomDatabase, mAccessToken,
FavoriteThing.unfavoriteUser(mExecutor, new Handler(), mOauthRetrofit,
mRedditDataRoomDatabase, mAccessToken,
mSubscribedUserData.get(position),
new FavoriteThing.FavoriteThingListener() {
@Override
@ -326,7 +333,8 @@ public class FollowedUsersRecyclerViewAdapter extends RecyclerView.Adapter<Recyc
} else {
favoriteImageView.setImageResource(R.drawable.ic_favorite_24dp);
mSubscribedUserData.get(position).setFavorite(true);
FavoriteThing.favoriteUser(mOauthRetrofit, mRedditDataRoomDatabase, mAccessToken,
FavoriteThing.favoriteUser(mExecutor, new Handler(), mOauthRetrofit,
mRedditDataRoomDatabase, mAccessToken,
mSubscribedUserData.get(position),
new FavoriteThing.FavoriteThingListener() {
@Override

View File

@ -1,5 +1,6 @@
package ml.docilealligator.infinityforreddit.adapters;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -16,6 +17,7 @@ import com.bumptech.glide.RequestManager;
import com.bumptech.glide.request.RequestOptions;
import java.util.List;
import java.util.concurrent.Executor;
import butterknife.BindView;
import butterknife.ButterKnife;
@ -37,6 +39,7 @@ public class MultiRedditListingRecyclerViewAdapter extends RecyclerView.Adapter<
private static final int VIEW_TYPE_MULTI_REDDIT = 3;
private AppCompatActivity mActivity;
private Executor mExecutor;
private Retrofit mOauthRetrofit;
private RedditDataRoomDatabase mRedditDataRoomDatabase;
private RequestManager mGlide;
@ -53,11 +56,12 @@ public class MultiRedditListingRecyclerViewAdapter extends RecyclerView.Adapter<
void onLongClick(MultiReddit multiReddit);
}
public MultiRedditListingRecyclerViewAdapter(AppCompatActivity activity, Retrofit oauthRetrofit,
public MultiRedditListingRecyclerViewAdapter(AppCompatActivity activity, Executor executor, Retrofit oauthRetrofit,
RedditDataRoomDatabase redditDataRoomDatabase,
CustomThemeWrapper customThemeWrapper,
String accessToken, OnItemClickListener onItemClickListener) {
mActivity = activity;
mExecutor = executor;
mGlide = Glide.with(activity);
mOauthRetrofit = oauthRetrofit;
mRedditDataRoomDatabase = redditDataRoomDatabase;
@ -125,7 +129,7 @@ public class MultiRedditListingRecyclerViewAdapter extends RecyclerView.Adapter<
if(multiReddit.isFavorite()) {
((MultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_border_24dp);
multiReddit.setFavorite(false);
FavoriteMultiReddit.favoriteMultiReddit(mOauthRetrofit, mRedditDataRoomDatabase,
FavoriteMultiReddit.favoriteMultiReddit(mExecutor, new Handler(), mOauthRetrofit, mRedditDataRoomDatabase,
mAccessToken, false, multiReddit,
new FavoriteMultiReddit.FavoriteMultiRedditListener() {
@Override
@ -151,7 +155,7 @@ public class MultiRedditListingRecyclerViewAdapter extends RecyclerView.Adapter<
} else {
((MultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_24dp);
multiReddit.setFavorite(true);
FavoriteMultiReddit.favoriteMultiReddit(mOauthRetrofit, mRedditDataRoomDatabase,
FavoriteMultiReddit.favoriteMultiReddit(mExecutor, new Handler(), mOauthRetrofit, mRedditDataRoomDatabase,
mAccessToken, true, multiReddit,
new FavoriteMultiReddit.FavoriteMultiRedditListener() {
@Override
@ -211,7 +215,7 @@ public class MultiRedditListingRecyclerViewAdapter extends RecyclerView.Adapter<
if(multiReddit.isFavorite()) {
((FavoriteMultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_border_24dp);
multiReddit.setFavorite(false);
FavoriteMultiReddit.favoriteMultiReddit(mOauthRetrofit, mRedditDataRoomDatabase,
FavoriteMultiReddit.favoriteMultiReddit(mExecutor, new Handler(), mOauthRetrofit, mRedditDataRoomDatabase,
mAccessToken, false, multiReddit,
new FavoriteMultiReddit.FavoriteMultiRedditListener() {
@Override
@ -237,7 +241,7 @@ public class MultiRedditListingRecyclerViewAdapter extends RecyclerView.Adapter<
} else {
((FavoriteMultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_24dp);
multiReddit.setFavorite(true);
FavoriteMultiReddit.favoriteMultiReddit(mOauthRetrofit, mRedditDataRoomDatabase,
FavoriteMultiReddit.favoriteMultiReddit(mExecutor, new Handler(), mOauthRetrofit, mRedditDataRoomDatabase,
mAccessToken, true, multiReddit,
new FavoriteMultiReddit.FavoriteMultiRedditListener() {
@Override

View File

@ -10,7 +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.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -57,6 +57,7 @@ import org.greenrobot.eventbus.EventBus;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.concurrent.Executor;
import butterknife.BindView;
import butterknife.ButterKnife;
@ -85,8 +86,8 @@ import ml.docilealligator.infinityforreddit.activities.ViewRedditGalleryActivity
import ml.docilealligator.infinityforreddit.activities.ViewSubredditDetailActivity;
import ml.docilealligator.infinityforreddit.activities.ViewUserDetailActivity;
import ml.docilealligator.infinityforreddit.activities.ViewVideoActivity;
import ml.docilealligator.infinityforreddit.asynctasks.LoadSubredditIconAsyncTask;
import ml.docilealligator.infinityforreddit.asynctasks.LoadUserDataAsyncTask;
import ml.docilealligator.infinityforreddit.asynctasks.LoadSubredditIcon;
import ml.docilealligator.infinityforreddit.asynctasks.LoadUserData;
import ml.docilealligator.infinityforreddit.bottomsheetfragments.ShareLinkBottomSheetFragment;
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.customviews.AspectRatioGifImageView;
@ -127,6 +128,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
}
};
private AppCompatActivity mActivity;
private Executor mExecutor;
private Retrofit mOauthRetrofit;
private Retrofit mRetrofit;
private Retrofit mGfycatRetrofit;
@ -205,7 +207,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
private ExoCreator mExoCreator;
private Callback mCallback;
public PostRecyclerViewAdapter(AppCompatActivity activity, Retrofit oauthRetrofit, Retrofit retrofit,
public PostRecyclerViewAdapter(AppCompatActivity activity, Executor executor, Retrofit oauthRetrofit, Retrofit retrofit,
Retrofit gfycatRetrofit, Retrofit redgifsRetrofit,
RedditDataRoomDatabase redditDataRoomDatabase,
CustomThemeWrapper customThemeWrapper, Locale locale, int imageViewWidth,
@ -216,6 +218,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
super(DIFF_CALLBACK);
if (activity != null) {
mActivity = activity;
mExecutor = executor;
mOauthRetrofit = oauthRetrofit;
mRetrofit = retrofit;
mGfycatRetrofit = gfycatRetrofit;
@ -433,7 +436,8 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
if (mDisplaySubredditName) {
if (authorPrefixed.equals(subredditNamePrefixed)) {
if (post.getAuthorIconUrl() == null) {
new LoadUserDataAsyncTask(mUserDao, post.getAuthor(), mRetrofit, iconImageUrl -> {
LoadUserData.loadUserData(mExecutor, new Handler(), mRedditDataRoomDatabase, post.getAuthor(),
mRetrofit, iconImageUrl -> {
if (mActivity != null && getItemCount() > 0) {
if (iconImageUrl == null || iconImageUrl.equals("")) {
mGlide.load(R.drawable.subreddit_default_icon)
@ -451,7 +455,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
post.setAuthorIconUrl(iconImageUrl);
}
}
}).execute();
});
} else if (!post.getAuthorIconUrl().equals("")) {
mGlide.load(post.getAuthorIconUrl())
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
@ -465,7 +469,8 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
}
} else {
if (post.getSubredditIconUrl() == null) {
new LoadSubredditIconAsyncTask(mRedditDataRoomDatabase, subredditName, mRetrofit,
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase,
subredditName, mRetrofit,
iconImageUrl -> {
if (mActivity != null && getItemCount() > 0) {
if (iconImageUrl == null || iconImageUrl.equals("")) {
@ -484,7 +489,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
post.setSubredditIconUrl(iconImageUrl);
}
}
}).execute();
});
} else if (!post.getSubredditIconUrl().equals("")) {
mGlide.load(post.getSubredditIconUrl())
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
@ -500,7 +505,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
} else {
if (post.getAuthorIconUrl() == null) {
String authorName = post.getAuthor().equals("[deleted]") ? post.getSubredditNamePrefixed().substring(2) : post.getAuthor();
new LoadUserDataAsyncTask(mUserDao, authorName, mRetrofit, iconImageUrl -> {
LoadUserData.loadUserData(mExecutor, new Handler(), mRedditDataRoomDatabase, authorName, mRetrofit, iconImageUrl -> {
if (mActivity != null && getItemCount() > 0) {
if (iconImageUrl == null || iconImageUrl.equals("")) {
mGlide.load(R.drawable.subreddit_default_icon)
@ -518,7 +523,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
post.setAuthorIconUrl(iconImageUrl);
}
}
}).execute();
});
} else if (!post.getAuthorIconUrl().equals("")) {
mGlide.load(post.getAuthorIconUrl())
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
@ -762,7 +767,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
if (mDisplaySubredditName) {
if (authorPrefixed.equals(subredditNamePrefixed)) {
if (post.getAuthorIconUrl() == null) {
new LoadUserDataAsyncTask(mUserDao, post.getAuthor(), mRetrofit, iconImageUrl -> {
LoadUserData.loadUserData(mExecutor, new Handler(), mRedditDataRoomDatabase, post.getAuthor(), mRetrofit, iconImageUrl -> {
if (mActivity != null && getItemCount() > 0) {
if (iconImageUrl == null || iconImageUrl.equals("")) {
mGlide.load(R.drawable.subreddit_default_icon)
@ -780,7 +785,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
post.setAuthorIconUrl(iconImageUrl);
}
}
}).execute();
});
} else if (!post.getAuthorIconUrl().equals("")) {
mGlide.load(post.getAuthorIconUrl())
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
@ -794,7 +799,8 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
}
} else {
if (post.getSubredditIconUrl() == null) {
new LoadSubredditIconAsyncTask(mRedditDataRoomDatabase, subredditName, mRetrofit,
LoadSubredditIcon.loadSubredditIcon(mExecutor, new Handler(), mRedditDataRoomDatabase,
subredditName, mRetrofit,
iconImageUrl -> {
if (mActivity != null && getItemCount() > 0) {
if (iconImageUrl == null || iconImageUrl.equals("")) {
@ -813,7 +819,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
post.setSubredditIconUrl(iconImageUrl);
}
}
}).execute();
});
} else if (!post.getSubredditIconUrl().equals("")) {
mGlide.load(post.getSubredditIconUrl())
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
@ -832,7 +838,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
} else {
if (post.getAuthorIconUrl() == null) {
String authorName = post.getAuthor().equals("[deleted]") ? post.getSubredditNamePrefixed().substring(2) : post.getAuthor();
new LoadUserDataAsyncTask(mUserDao, authorName, mRetrofit, iconImageUrl -> {
LoadUserData.loadUserData(mExecutor, new Handler(), mRedditDataRoomDatabase, authorName, mRetrofit, iconImageUrl -> {
if (mActivity != null && getItemCount() > 0) {
if (iconImageUrl == null || iconImageUrl.equals("")) {
mGlide.load(R.drawable.subreddit_default_icon)
@ -850,7 +856,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
post.setAuthorIconUrl(iconImageUrl);
}
}
}).execute();
});
} else if (!post.getAuthorIconUrl().equals("")) {
mGlide.load(post.getAuthorIconUrl())
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
@ -1068,7 +1074,6 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
}
if (preview.getPreviewWidth() * preview.getPreviewHeight() > 10_000_000) {
Log.i("afasfasdf", "ssss " + preview.getPreviewUrl());
int divisor = 2;
do {
preview.setPreviewWidth(preview.getPreviewWidth() / divisor);
@ -1076,8 +1081,6 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
divisor *= 2;
} while (preview.getPreviewWidth() * preview.getPreviewHeight() > 10_000_000);
}
Log.i("afasfasdf", "s " + preview.getPreviewWidth() * preview.getPreviewHeight() + " " + preview.getPreviewHeight() + " " + preview.getPreviewWidth() + " " + preview.getPreviewUrl());
return preview;
}

View File

@ -2,6 +2,7 @@ package ml.docilealligator.infinityforreddit.adapters;
import android.content.Context;
import android.content.res.ColorStateList;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -22,10 +23,12 @@ import com.bumptech.glide.Glide;
import com.bumptech.glide.RequestManager;
import com.bumptech.glide.request.RequestOptions;
import java.util.concurrent.Executor;
import butterknife.BindView;
import butterknife.ButterKnife;
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
import ml.docilealligator.infinityforreddit.asynctasks.CheckIsSubscribedToSubredditAsyncTask;
import ml.docilealligator.infinityforreddit.asynctasks.CheckIsSubscribedToSubreddit;
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.NetworkState;
import ml.docilealligator.infinityforreddit.R;
@ -52,6 +55,7 @@ public class SubredditListingRecyclerViewAdapter extends PagedListAdapter<Subred
};
private RequestManager glide;
private Context context;
private Executor executor;
private Retrofit oauthRetrofit;
private Retrofit retrofit;
private String accessToken;
@ -67,13 +71,14 @@ public class SubredditListingRecyclerViewAdapter extends PagedListAdapter<Subred
private NetworkState networkState;
private Callback callback;
public SubredditListingRecyclerViewAdapter(Context context, Retrofit oauthRetrofit, Retrofit retrofit,
public SubredditListingRecyclerViewAdapter(Context context, Executor executor, Retrofit oauthRetrofit, Retrofit retrofit,
CustomThemeWrapper customThemeWrapper,
String accessToken, String accountName,
RedditDataRoomDatabase redditDataRoomDatabase,
Callback callback) {
super(DIFF_CALLBACK);
this.context = context;
this.executor = executor;
this.oauthRetrofit = oauthRetrofit;
this.retrofit = retrofit;
this.accessToken = accessToken;
@ -125,8 +130,9 @@ public class SubredditListingRecyclerViewAdapter extends PagedListAdapter<Subred
((DataViewHolder) holder).subredditNameTextView.setText(subredditData.getName());
new CheckIsSubscribedToSubredditAsyncTask(redditDataRoomDatabase, subredditData.getName(), accountName,
new CheckIsSubscribedToSubredditAsyncTask.CheckIsSubscribedToSubredditListener() {
CheckIsSubscribedToSubreddit.checkIsSubscribedToSubreddit(executor, new Handler(),
redditDataRoomDatabase, subredditData.getName(), accountName,
new CheckIsSubscribedToSubreddit.CheckIsSubscribedToSubredditListener() {
@Override
public void isSubscribed() {
((DataViewHolder) holder).subscribeButton.setVisibility(View.GONE);
@ -152,7 +158,7 @@ public class SubredditListingRecyclerViewAdapter extends PagedListAdapter<Subred
});
});
}
}).execute();
});
}
}

View File

@ -2,6 +2,7 @@ package ml.docilealligator.infinityforreddit.adapters;
import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -17,6 +18,7 @@ import com.bumptech.glide.RequestManager;
import com.bumptech.glide.request.RequestOptions;
import java.util.List;
import java.util.concurrent.Executor;
import butterknife.BindView;
import butterknife.ButterKnife;
@ -38,6 +40,7 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
private static final int VIEW_TYPE_SUBREDDIT = 3;
private Context mContext;
private Executor mExecutor;
private Retrofit mOauthRetrofit;
private RedditDataRoomDatabase mRedditDataRoomDatabase;
private List<SubscribedSubredditData> mSubscribedSubredditData;
@ -53,11 +56,12 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
private int primaryTextColor;
private int secondaryTextColor;
public SubscribedSubredditsRecyclerViewAdapter(Context context, Retrofit oauthRetrofit,
public SubscribedSubredditsRecyclerViewAdapter(Context context, Executor executor, Retrofit oauthRetrofit,
RedditDataRoomDatabase redditDataRoomDatabase,
CustomThemeWrapper customThemeWrapper,
String accessToken) {
mContext = context;
mExecutor = executor;
glide = Glide.with(context);
mOauthRetrofit = oauthRetrofit;
mRedditDataRoomDatabase = redditDataRoomDatabase;
@ -66,12 +70,12 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
secondaryTextColor = customThemeWrapper.getSecondaryTextColor();
}
public SubscribedSubredditsRecyclerViewAdapter(Context context, Retrofit oauthRetrofit,
public SubscribedSubredditsRecyclerViewAdapter(Context context, Executor executor, Retrofit oauthRetrofit,
RedditDataRoomDatabase redditDataRoomDatabase,
CustomThemeWrapper customThemeWrapper,
String accessToken, boolean hasClearSelectionRow,
ItemClickListener itemClickListener) {
this(context, oauthRetrofit, redditDataRoomDatabase, customThemeWrapper, accessToken);
this(context, executor, oauthRetrofit, redditDataRoomDatabase, customThemeWrapper, accessToken);
this.hasClearSelectionRow = hasClearSelectionRow;
this.itemClickListener = itemClickListener;
}
@ -190,7 +194,7 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
if(mSubscribedSubredditData.get(viewHolder.getAdapterPosition() - offset).isFavorite()) {
((SubredditViewHolder) viewHolder).favoriteImageView.setImageResource(R.drawable.ic_favorite_border_24dp);
mSubscribedSubredditData.get(viewHolder.getAdapterPosition() - offset).setFavorite(false);
FavoriteThing.unfavoriteSubreddit(mOauthRetrofit, mRedditDataRoomDatabase, accessToken,
FavoriteThing.unfavoriteSubreddit(mExecutor, new Handler(), mOauthRetrofit, mRedditDataRoomDatabase, accessToken,
mSubscribedSubredditData.get(viewHolder.getAdapterPosition() - offset),
new FavoriteThing.FavoriteThingListener() {
@Override
@ -215,7 +219,8 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
} else {
((SubredditViewHolder) viewHolder).favoriteImageView.setImageResource(R.drawable.ic_favorite_24dp);
mSubscribedSubredditData.get(viewHolder.getAdapterPosition() - offset).setFavorite(true);
FavoriteThing.favoriteSubreddit(mOauthRetrofit, mRedditDataRoomDatabase, accessToken,
FavoriteThing.favoriteSubreddit(mExecutor, new Handler(), mOauthRetrofit,
mRedditDataRoomDatabase, accessToken,
mSubscribedSubredditData.get(viewHolder.getAdapterPosition() - offset),
new FavoriteThing.FavoriteThingListener() {
@Override
@ -288,7 +293,7 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
if(mFavoriteSubscribedSubredditData.get(viewHolder.getAdapterPosition() - offset).isFavorite()) {
((FavoriteSubredditViewHolder) viewHolder).favoriteImageView.setImageResource(R.drawable.ic_favorite_border_24dp);
mFavoriteSubscribedSubredditData.get(viewHolder.getAdapterPosition() - offset).setFavorite(false);
FavoriteThing.unfavoriteSubreddit(mOauthRetrofit, mRedditDataRoomDatabase, accessToken,
FavoriteThing.unfavoriteSubreddit(mExecutor, new Handler(), mOauthRetrofit, mRedditDataRoomDatabase, accessToken,
mFavoriteSubscribedSubredditData.get(viewHolder.getAdapterPosition() - offset),
new FavoriteThing.FavoriteThingListener() {
@Override
@ -313,7 +318,7 @@ public class SubscribedSubredditsRecyclerViewAdapter extends RecyclerView.Adapte
} else {
((FavoriteSubredditViewHolder) viewHolder).favoriteImageView.setImageResource(R.drawable.ic_favorite_24dp);
mFavoriteSubscribedSubredditData.get(viewHolder.getAdapterPosition() - offset).setFavorite(true);
FavoriteThing.favoriteSubreddit(mOauthRetrofit, mRedditDataRoomDatabase, accessToken,
FavoriteThing.favoriteSubreddit(mExecutor, new Handler(), mOauthRetrofit, mRedditDataRoomDatabase, accessToken,
mFavoriteSubscribedSubredditData.get(viewHolder.getAdapterPosition() - offset),
new FavoriteThing.FavoriteThingListener() {
@Override

View File

@ -2,6 +2,7 @@ package ml.docilealligator.infinityforreddit.adapters;
import android.content.Context;
import android.content.res.ColorStateList;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -22,14 +23,16 @@ import com.bumptech.glide.Glide;
import com.bumptech.glide.RequestManager;
import com.bumptech.glide.request.RequestOptions;
import java.util.concurrent.Executor;
import butterknife.BindView;
import butterknife.ButterKnife;
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
import ml.docilealligator.infinityforreddit.NetworkState;
import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.asynctasks.CheckIsFollowingUserAsyncTask;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.asynctasks.CheckIsFollowingUser;
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.subscribeduser.SubscribedUserDao;
import ml.docilealligator.infinityforreddit.user.UserData;
import ml.docilealligator.infinityforreddit.user.UserFollowing;
import pl.droidsonroids.gif.GifImageView;
@ -52,11 +55,12 @@ public class UserListingRecyclerViewAdapter extends PagedListAdapter<UserData, R
};
private RequestManager glide;
private Context context;
private Executor executor;
private Retrofit oauthRetrofit;
private Retrofit retrofit;
private String accessToken;
private String accountName;
private SubscribedUserDao subscribedUserDao;
private RedditDataRoomDatabase redditDataRoomDatabase;
private int primaryTextColor;
private int buttonTextColor;
@ -67,17 +71,18 @@ public class UserListingRecyclerViewAdapter extends PagedListAdapter<UserData, R
private NetworkState networkState;
private final Callback callback;
public UserListingRecyclerViewAdapter(Context context, Retrofit oauthRetrofit, Retrofit retrofit,
public UserListingRecyclerViewAdapter(Context context, Executor executor, Retrofit oauthRetrofit, Retrofit retrofit,
CustomThemeWrapper customThemeWrapper, String accessToken,
String accountName, SubscribedUserDao subscribedUserDao,
String accountName, RedditDataRoomDatabase redditDataRoomDatabase,
Callback callback) {
super(DIFF_CALLBACK);
this.context = context;
this.executor = executor;
this.oauthRetrofit = oauthRetrofit;
this.retrofit = retrofit;
this.accessToken = accessToken;
this.accountName = accountName;
this.subscribedUserDao = subscribedUserDao;
this.redditDataRoomDatabase = redditDataRoomDatabase;
this.callback = callback;
glide = Glide.with(context);
primaryTextColor = customThemeWrapper.getPrimaryTextColor();
@ -125,8 +130,8 @@ public class UserListingRecyclerViewAdapter extends PagedListAdapter<UserData, R
((UserListingRecyclerViewAdapter.DataViewHolder) holder).userNameTextView.setText(userData.getName());
new CheckIsFollowingUserAsyncTask(subscribedUserDao, userData.getName(), accountName,
new CheckIsFollowingUserAsyncTask.CheckIsFollowingUserListener() {
CheckIsFollowingUser.checkIsFollowingUser(executor, new Handler(), redditDataRoomDatabase,
userData.getName(), accountName, new CheckIsFollowingUser.CheckIsFollowingUserListener() {
@Override
public void isSubscribed() {
((UserListingRecyclerViewAdapter.DataViewHolder) holder).subscribeButton.setVisibility(View.GONE);
@ -137,7 +142,7 @@ public class UserListingRecyclerViewAdapter extends PagedListAdapter<UserData, R
((UserListingRecyclerViewAdapter.DataViewHolder) holder).subscribeButton.setVisibility(View.VISIBLE);
((UserListingRecyclerViewAdapter.DataViewHolder) holder).subscribeButton.setOnClickListener(view -> {
UserFollowing.followUser(oauthRetrofit, retrofit,
accessToken, userData.getName(), accountName, subscribedUserDao,
accessToken, userData.getName(), accountName, redditDataRoomDatabase,
new UserFollowing.UserFollowingListener() {
@Override
public void onUserFollowingSuccess() {
@ -152,7 +157,7 @@ public class UserListingRecyclerViewAdapter extends PagedListAdapter<UserData, R
});
});
}
}).execute();
});
}
}
}

View File

@ -0,0 +1,14 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import java.util.concurrent.Executor;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
public class ChangeThemeName {
public static void changeThemeName(Executor executor, RedditDataRoomDatabase redditDataRoomDatabase,
String oldName, String newName) {
executor.execute(() -> {
redditDataRoomDatabase.customThemeDao().updateName(oldName, newName);
});
}
}

View File

@ -1,23 +0,0 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.os.AsyncTask;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
public class ChangeThemeNameAsyncTask extends AsyncTask<Void, Void, Void> {
private RedditDataRoomDatabase redditDataRoomDatabase;
private String oldName;
private String newName;
public ChangeThemeNameAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase, String oldName, String newName) {
this.redditDataRoomDatabase = redditDataRoomDatabase;
this.oldName = oldName;
this.newName = newName;
}
@Override
protected Void doInBackground(Void... voids) {
redditDataRoomDatabase.customThemeDao().updateName(oldName, newName);
return null;
}
}

View File

@ -0,0 +1,31 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.os.Handler;
import java.util.concurrent.Executor;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.subscribeduser.SubscribedUserData;
public class CheckIsFollowingUser {
public static void checkIsFollowingUser(Executor executor, Handler handler,
RedditDataRoomDatabase redditDataRoomDatabase, String username,
String accountName, CheckIsFollowingUserListener checkIsFollowingUserListener) {
executor.execute(() -> {
SubscribedUserData subscribedUserData = redditDataRoomDatabase.subscribedUserDao().getSubscribedUser(username, accountName);
handler.post(() -> {
if (subscribedUserData != null) {
checkIsFollowingUserListener.isSubscribed();
} else {
checkIsFollowingUserListener.isNotSubscribed();
}
});
});
}
public interface CheckIsFollowingUserListener {
void isSubscribed();
void isNotSubscribed();
}
}

View File

@ -1,44 +0,0 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.os.AsyncTask;
import ml.docilealligator.infinityforreddit.subscribeduser.SubscribedUserDao;
import ml.docilealligator.infinityforreddit.subscribeduser.SubscribedUserData;
public class CheckIsFollowingUserAsyncTask extends AsyncTask<Void, Void, Void> {
private SubscribedUserDao subscribedUserDao;
private String username;
private String accountName;
private SubscribedUserData subscribedUserData;
private CheckIsFollowingUserListener checkIsFollowingUserListener;
public CheckIsFollowingUserAsyncTask(SubscribedUserDao subscribedUserDao, String username, String accountName,
CheckIsFollowingUserListener checkIsFollowingUserListener) {
this.subscribedUserDao = subscribedUserDao;
this.username = username;
this.accountName = accountName;
this.checkIsFollowingUserListener = checkIsFollowingUserListener;
}
@Override
protected Void doInBackground(Void... voids) {
subscribedUserData = subscribedUserDao.getSubscribedUser(username, accountName);
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
if (subscribedUserData != null) {
checkIsFollowingUserListener.isSubscribed();
} else {
checkIsFollowingUserListener.isNotSubscribed();
}
}
public interface CheckIsFollowingUserListener {
void isSubscribed();
void isNotSubscribed();
}
}

View File

@ -0,0 +1,32 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.os.Handler;
import java.util.concurrent.Executor;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.subscribedsubreddit.SubscribedSubredditData;
public class CheckIsSubscribedToSubreddit {
public static void checkIsSubscribedToSubreddit(Executor executor, Handler handler, RedditDataRoomDatabase redditDataRoomDatabase,
String subredditName, String accountName,
CheckIsSubscribedToSubredditListener checkIsSubscribedToSubredditListener) {
executor.execute(() -> {
SubscribedSubredditData subscribedSubredditData = redditDataRoomDatabase.subscribedSubredditDao().getSubscribedSubreddit(subredditName, accountName);
handler.post(() -> {
if (subscribedSubredditData != null) {
checkIsSubscribedToSubredditListener.isSubscribed();
} else {
checkIsSubscribedToSubredditListener.isNotSubscribed();
}
});
});
}
public interface CheckIsSubscribedToSubredditListener {
void isSubscribed();
void isNotSubscribed();
}
}

View File

@ -1,46 +0,0 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.os.AsyncTask;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.subscribedsubreddit.SubscribedSubredditData;
public class CheckIsSubscribedToSubredditAsyncTask extends AsyncTask<Void, Void, Void> {
private RedditDataRoomDatabase redditDataRoomDatabase;
private String subredditName;
private String accountName;
private SubscribedSubredditData subscribedSubredditData;
private CheckIsSubscribedToSubredditListener checkIsSubscribedToSubredditListener;
public CheckIsSubscribedToSubredditAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase,
String subredditName, String accountName,
CheckIsSubscribedToSubredditListener checkIsSubscribedToSubredditListener) {
this.redditDataRoomDatabase = redditDataRoomDatabase;
this.subredditName = subredditName;
this.accountName = accountName;
this.checkIsSubscribedToSubredditListener = checkIsSubscribedToSubredditListener;
}
@Override
protected Void doInBackground(Void... voids) {
subscribedSubredditData = redditDataRoomDatabase.subscribedSubredditDao().getSubscribedSubreddit(subredditName, accountName);
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
if (subscribedSubredditData != null) {
checkIsSubscribedToSubredditListener.isSubscribed();
} else {
checkIsSubscribedToSubredditListener.isNotSubscribed();
}
}
public interface CheckIsSubscribedToSubredditListener {
void isSubscribed();
void isNotSubscribed();
}
}

View File

@ -0,0 +1,44 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.content.SharedPreferences;
import android.os.Handler;
import java.util.Map;
import java.util.concurrent.Executor;
import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
public class DeleteAllPostLayouts {
public static void deleteAllPostLayouts(Executor executor, Handler handler, SharedPreferences defaultSharedPreferences,
SharedPreferences postLayoutSharedPreferences,
DeleteAllPostLayoutsAsyncTaskListener deleteAllPostLayoutsAsyncTaskListener) {
executor.execute(() -> {
Map<String,?> keys = defaultSharedPreferences.getAll();
SharedPreferences.Editor editor = defaultSharedPreferences.edit();
for(Map.Entry<String,?> entry : keys.entrySet()){
String key = entry.getKey();
if (key.startsWith(SharedPreferencesUtils.POST_LAYOUT_SHARED_PREFERENCES_FILE)
|| key.startsWith(SharedPreferencesUtils.POST_LAYOUT_FRONT_PAGE_POST)
|| key.startsWith(SharedPreferencesUtils.POST_LAYOUT_POPULAR_POST_LEGACY)
|| key.startsWith(SharedPreferencesUtils.POST_LAYOUT_ALL_POST_LEGACY)
|| key.startsWith(SharedPreferencesUtils.POST_LAYOUT_SUBREDDIT_POST_BASE)
|| key.startsWith(SharedPreferencesUtils.POST_LAYOUT_MULTI_REDDIT_POST_BASE)
|| key.startsWith(SharedPreferencesUtils.POST_LAYOUT_USER_POST_BASE)
|| key.startsWith(SharedPreferencesUtils.POST_LAYOUT_SEARCH_POST)) {
editor.remove(key);
}
}
editor.apply();
postLayoutSharedPreferences.edit().clear().apply();
handler.post(deleteAllPostLayoutsAsyncTaskListener::success);
});
}
public interface DeleteAllPostLayoutsAsyncTaskListener {
void success();
}
}

View File

@ -1,57 +0,0 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import java.util.Map;
import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
public class DeleteAllPostLayoutsAsyncTask extends AsyncTask<Void, Void, Void> {
private SharedPreferences defaultSharedPreferences;
private SharedPreferences postLayoutSharedPreferences;
private DeleteAllPostLayoutsAsyncTaskListener deleteAllPostLayoutsAsyncTaskListener;
public interface DeleteAllPostLayoutsAsyncTaskListener {
void success();
}
public DeleteAllPostLayoutsAsyncTask(SharedPreferences defaultSharedPreferences,
SharedPreferences postLayoutSharedPreferences,
DeleteAllPostLayoutsAsyncTaskListener deleteAllPostLayoutsAsyncTaskListener) {
this.defaultSharedPreferences = defaultSharedPreferences;
this.postLayoutSharedPreferences = postLayoutSharedPreferences;
this.deleteAllPostLayoutsAsyncTaskListener = deleteAllPostLayoutsAsyncTaskListener;
}
@Override
protected Void doInBackground(Void... voids) {
Map<String,?> keys = defaultSharedPreferences.getAll();
SharedPreferences.Editor editor = defaultSharedPreferences.edit();
for(Map.Entry<String,?> entry : keys.entrySet()){
String key = entry.getKey();
if (key.startsWith(SharedPreferencesUtils.POST_LAYOUT_SHARED_PREFERENCES_FILE)
|| key.startsWith(SharedPreferencesUtils.POST_LAYOUT_FRONT_PAGE_POST)
|| key.startsWith(SharedPreferencesUtils.POST_LAYOUT_POPULAR_POST_LEGACY)
|| key.startsWith(SharedPreferencesUtils.POST_LAYOUT_ALL_POST_LEGACY)
|| key.startsWith(SharedPreferencesUtils.POST_LAYOUT_SUBREDDIT_POST_BASE)
|| key.startsWith(SharedPreferencesUtils.POST_LAYOUT_MULTI_REDDIT_POST_BASE)
|| key.startsWith(SharedPreferencesUtils.POST_LAYOUT_USER_POST_BASE)
|| key.startsWith(SharedPreferencesUtils.POST_LAYOUT_SEARCH_POST)) {
editor.remove(key);
}
}
editor.apply();
postLayoutSharedPreferences.edit().clear().apply();
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
deleteAllPostLayoutsAsyncTaskListener.success();
}
}

View File

@ -0,0 +1,23 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.os.Handler;
import java.util.concurrent.Executor;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
public class DeleteAllReadPosts {
public static void deleteAllReadPosts(Executor executor, Handler handler,
RedditDataRoomDatabase redditDataRoomDatabase,
DeleteAllReadPostsAsyncTaskListener deleteAllReadPostsAsyncTaskListener) {
executor.execute(() -> {
redditDataRoomDatabase.readPostDao().deleteAllReadPosts();
handler.post(deleteAllReadPostsAsyncTaskListener::success);
});
}
public interface DeleteAllReadPostsAsyncTaskListener {
void success();
}
}

View File

@ -1,33 +0,0 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.os.AsyncTask;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
public class DeleteAllReadPostsAsyncTask extends AsyncTask<Void, Void, Void> {
public interface DeleteAllReadPostsAsyncTaskListener {
void success();
}
private RedditDataRoomDatabase redditDataRoomDatabase;
private DeleteAllReadPostsAsyncTaskListener deleteAllReadPostsAsyncTaskListener;
public DeleteAllReadPostsAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase,
DeleteAllReadPostsAsyncTaskListener deleteAllReadPostsAsyncTaskListener) {
this.redditDataRoomDatabase = redditDataRoomDatabase;
this.deleteAllReadPostsAsyncTaskListener = deleteAllReadPostsAsyncTaskListener;
}
@Override
protected Void doInBackground(Void... voids) {
redditDataRoomDatabase.readPostDao().deleteAllReadPosts();
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
deleteAllReadPostsAsyncTaskListener.success();
}
}

View File

@ -0,0 +1,46 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.content.SharedPreferences;
import android.os.Handler;
import java.util.Map;
import java.util.concurrent.Executor;
import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
public class DeleteAllSortTypes {
public static void deleteAllSortTypes(Executor executor, Handler handler, SharedPreferences defaultSharedPreferences,
SharedPreferences sortTypeSharedPreferences,
DeleteAllSortTypesAsyncTaskListener deleteAllSortTypesAsyncTaskListener) {
executor.execute(() -> {
Map<String,?> keys = defaultSharedPreferences.getAll();
SharedPreferences.Editor editor = defaultSharedPreferences.edit();
for(Map.Entry<String,?> entry : keys.entrySet()){
String key = entry.getKey();
if (key.contains(SharedPreferencesUtils.SORT_TYPE_BEST_POST) || key.contains(SharedPreferencesUtils.SORT_TIME_BEST_POST)
|| key.contains(SharedPreferencesUtils.SORT_TYPE_ALL_POST_LEGACY) || key.contains(SharedPreferencesUtils.SORT_TIME_ALL_POST_LEGACY)
|| key.contains(SharedPreferencesUtils.SORT_TYPE_POPULAR_POST_LEGACY) || key.contains(SharedPreferencesUtils.SORT_TIME_POPULAR_POST_LEGACY)
|| key.contains(SharedPreferencesUtils.SORT_TYPE_SEARCH_POST) || key.contains(SharedPreferencesUtils.SORT_TIME_SEARCH_POST)
|| key.contains(SharedPreferencesUtils.SORT_TYPE_SUBREDDIT_POST_BASE) || key.contains(SharedPreferencesUtils.SORT_TIME_SUBREDDIT_POST_BASE)
|| key.contains(SharedPreferencesUtils.SORT_TYPE_MULTI_REDDIT_POST_BASE) || key.contains(SharedPreferencesUtils.SORT_TIME_MULTI_REDDIT_POST_BASE)
|| key.contains(SharedPreferencesUtils.SORT_TYPE_USER_POST_BASE) || key.contains(SharedPreferencesUtils.SORT_TIME_USER_POST_BASE)
|| key.contains(SharedPreferencesUtils.SORT_TYPE_USER_COMMENT) || key.contains(SharedPreferencesUtils.SORT_TIME_USER_COMMENT)
|| key.contains(SharedPreferencesUtils.SORT_TYPE_SEARCH_SUBREDDIT) || key.contains(SharedPreferencesUtils.SORT_TYPE_SEARCH_USER)
|| key.contains(SharedPreferencesUtils.SORT_TYPE_POST_COMMENT)) {
editor.remove(key);
}
}
editor.apply();
sortTypeSharedPreferences.edit().clear().apply();
handler.post(deleteAllSortTypesAsyncTaskListener::success);
});
}
public interface DeleteAllSortTypesAsyncTaskListener {
void success();
}
}

View File

@ -1,58 +0,0 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import java.util.Map;
import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
public class DeleteAllSortTypesAsyncTask extends AsyncTask<Void, Void, Void> {
private SharedPreferences defaultSharedPreferences;
private SharedPreferences sortTypeSharedPreferences;
private DeleteAllSortTypesAsyncTaskListener deleteAllSortTypesAsyncTaskListener;
public interface DeleteAllSortTypesAsyncTaskListener {
void success();
}
public DeleteAllSortTypesAsyncTask(SharedPreferences defaultSharedPreferences,
SharedPreferences sortTypeSharedPreferences,
DeleteAllSortTypesAsyncTaskListener deleteAllSortTypesAsyncTaskListener) {
this.defaultSharedPreferences = defaultSharedPreferences;
this.sortTypeSharedPreferences = sortTypeSharedPreferences;
this.deleteAllSortTypesAsyncTaskListener = deleteAllSortTypesAsyncTaskListener;
}
@Override
protected Void doInBackground(Void... voids) {
Map<String,?> keys = defaultSharedPreferences.getAll();
SharedPreferences.Editor editor = defaultSharedPreferences.edit();
for(Map.Entry<String,?> entry : keys.entrySet()){
String key = entry.getKey();
if (key.contains(SharedPreferencesUtils.SORT_TYPE_BEST_POST) || key.contains(SharedPreferencesUtils.SORT_TIME_BEST_POST)
|| key.contains(SharedPreferencesUtils.SORT_TYPE_ALL_POST_LEGACY) || key.contains(SharedPreferencesUtils.SORT_TIME_ALL_POST_LEGACY)
|| key.contains(SharedPreferencesUtils.SORT_TYPE_POPULAR_POST_LEGACY) || key.contains(SharedPreferencesUtils.SORT_TIME_POPULAR_POST_LEGACY)
|| key.contains(SharedPreferencesUtils.SORT_TYPE_SEARCH_POST) || key.contains(SharedPreferencesUtils.SORT_TIME_SEARCH_POST)
|| key.contains(SharedPreferencesUtils.SORT_TYPE_SUBREDDIT_POST_BASE) || key.contains(SharedPreferencesUtils.SORT_TIME_SUBREDDIT_POST_BASE)
|| key.contains(SharedPreferencesUtils.SORT_TYPE_MULTI_REDDIT_POST_BASE) || key.contains(SharedPreferencesUtils.SORT_TIME_MULTI_REDDIT_POST_BASE)
|| key.contains(SharedPreferencesUtils.SORT_TYPE_USER_POST_BASE) || key.contains(SharedPreferencesUtils.SORT_TIME_USER_POST_BASE)
|| key.contains(SharedPreferencesUtils.SORT_TYPE_USER_COMMENT) || key.contains(SharedPreferencesUtils.SORT_TIME_USER_COMMENT)
|| key.contains(SharedPreferencesUtils.SORT_TYPE_SEARCH_SUBREDDIT) || key.contains(SharedPreferencesUtils.SORT_TYPE_SEARCH_USER)
|| key.contains(SharedPreferencesUtils.SORT_TYPE_POST_COMMENT)) {
editor.remove(key);
}
}
editor.apply();
sortTypeSharedPreferences.edit().clear().apply();
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
deleteAllSortTypesAsyncTaskListener.success();
}
}

View File

@ -0,0 +1,22 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.os.Handler;
import java.util.concurrent.Executor;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
public class DeleteAllSubreddits {
public static void deleteAllSubreddits(Executor executor, Handler handler, RedditDataRoomDatabase redditDataRoomDatabase,
DeleteAllSubredditsAsyncTaskListener deleteAllSubredditsAsyncTaskListener) {
executor.execute(() -> {
redditDataRoomDatabase.subredditDao().deleteAllSubreddits();
handler.post(deleteAllSubredditsAsyncTaskListener::success);
});
}
public interface DeleteAllSubredditsAsyncTaskListener {
void success();
}
}

View File

@ -1,33 +0,0 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.os.AsyncTask;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
public class DeleteAllSubredditsAsyncTask extends AsyncTask<Void, Void, Void> {
private RedditDataRoomDatabase redditDataRoomDatabase;
private DeleteAllSubredditsAsyncTaskListener deleteAllSubredditsAsyncTaskListener;
public interface DeleteAllSubredditsAsyncTaskListener {
void success();
}
public DeleteAllSubredditsAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase,
DeleteAllSubredditsAsyncTaskListener deleteAllSubredditsAsyncTaskListener) {
this.redditDataRoomDatabase = redditDataRoomDatabase;
this.deleteAllSubredditsAsyncTaskListener = deleteAllSubredditsAsyncTaskListener;
}
@Override
protected Void doInBackground(Void... voids) {
redditDataRoomDatabase.subredditDao().deleteAllSubreddits();
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
deleteAllSubredditsAsyncTaskListener.success();
}
}

View File

@ -0,0 +1,30 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.content.SharedPreferences;
import android.os.Handler;
import java.util.concurrent.Executor;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
public class DeleteAllThemes {
public static void deleteAllThemes(Executor executor, Handler handler,
RedditDataRoomDatabase redditDataRoomDatabase,
SharedPreferences lightThemeSharedPreferences,
SharedPreferences darkThemeSharedPreferences,
SharedPreferences amoledThemeSharedPreferences,
DeleteAllThemesListener deleteAllThemesListener) {
executor.execute(() -> {
redditDataRoomDatabase.customThemeDao().deleteAllCustomThemes();
lightThemeSharedPreferences.edit().clear().apply();
darkThemeSharedPreferences.edit().clear().apply();
amoledThemeSharedPreferences.edit().clear().apply();
handler.post(deleteAllThemesListener::success);
});
}
public interface DeleteAllThemesListener {
void success();
}
}

View File

@ -1,45 +0,0 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
public class DeleteAllThemesAsyncTask extends AsyncTask<Void, Void, Void> {
private RedditDataRoomDatabase redditDataRoomDatabase;
private SharedPreferences lightThemeSharedPreferences;
private SharedPreferences darkThemeSharedPreferences;
private SharedPreferences amoledThemeSharedPreferences;
private DeleteAllThemesAsyncTaskListener deleteAllThemesAsyncTaskListener;
public interface DeleteAllThemesAsyncTaskListener {
void success();
}
public DeleteAllThemesAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase,
SharedPreferences lightThemeSharedPreferences,
SharedPreferences darkThemeSharedPreferences,
SharedPreferences amoledThemeSharedPreferences,
DeleteAllThemesAsyncTaskListener deleteAllThemesAsyncTaskListener) {
this.redditDataRoomDatabase = redditDataRoomDatabase;
this.lightThemeSharedPreferences = lightThemeSharedPreferences;
this.darkThemeSharedPreferences = darkThemeSharedPreferences;
this.amoledThemeSharedPreferences = amoledThemeSharedPreferences;
this.deleteAllThemesAsyncTaskListener = deleteAllThemesAsyncTaskListener;
}
@Override
protected Void doInBackground(Void... voids) {
redditDataRoomDatabase.customThemeDao().deleteAllCustomThemes();
lightThemeSharedPreferences.edit().clear().apply();
darkThemeSharedPreferences.edit().clear().apply();
amoledThemeSharedPreferences.edit().clear().apply();
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
deleteAllThemesAsyncTaskListener.success();
}
}

View File

@ -0,0 +1,22 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.os.Handler;
import java.util.concurrent.Executor;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
public class DeleteAllUsers {
public static void deleteAllUsers(Executor executor, Handler handler, RedditDataRoomDatabase redditDataRoomDatabase,
DeleteAllUsersListener deleteAllUsersListener) {
executor.execute(() -> {
redditDataRoomDatabase.userDao().deleteAllUsers();
handler.post(deleteAllUsersListener::success);
});
}
public interface DeleteAllUsersListener {
void success();
}
}

View File

@ -1,33 +0,0 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.os.AsyncTask;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
public class DeleteAllUsersAsyncTask extends AsyncTask<Void, Void, Void> {
private RedditDataRoomDatabase redditDataRoomDatabase;
private DeleteAllUsersAsyncTaskListener deleteAllUsersAsyncTaskListener;
public interface DeleteAllUsersAsyncTaskListener {
void success();
}
public DeleteAllUsersAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase,
DeleteAllUsersAsyncTaskListener deleteAllUsersAsyncTaskListener) {
this.redditDataRoomDatabase = redditDataRoomDatabase;
this.deleteAllUsersAsyncTaskListener = deleteAllUsersAsyncTaskListener;
}
@Override
protected Void doInBackground(Void... voids) {
redditDataRoomDatabase.userDao().deleteAllUsers();
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
deleteAllUsersAsyncTaskListener.success();
}
}

View File

@ -0,0 +1,23 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.os.Handler;
import java.util.concurrent.Executor;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
public class DeleteMultiredditInDatabase {
public static void deleteMultiredditInDatabase(Executor executor, Handler handler,
RedditDataRoomDatabase redditDataRoomDatabase,
String accountName, String multipath,
DeleteMultiredditInDatabaseListener deleteMultiredditInDatabaseListener) {
executor.execute(() -> {
redditDataRoomDatabase.multiRedditDao().deleteMultiReddit(multipath, accountName);
handler.post(deleteMultiredditInDatabaseListener::success);
});
}
public interface DeleteMultiredditInDatabaseListener {
void success();
}
}

View File

@ -1,37 +0,0 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.os.AsyncTask;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
public class DeleteMultiredditInDatabaseAsyncTask extends AsyncTask<Void, Void, Void> {
public interface DeleteMultiredditInDatabaseAsyncTaskListener {
void success();
}
private RedditDataRoomDatabase redditDataRoomDatabase;
private String accountName;
private String multipath;
private DeleteMultiredditInDatabaseAsyncTaskListener deleteMultiredditInDatabaseAsyncTaskListener;
public DeleteMultiredditInDatabaseAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase,
String accountName, String multipath,
DeleteMultiredditInDatabaseAsyncTaskListener deleteMultiredditInDatabaseAsyncTaskListener) {
this.redditDataRoomDatabase = redditDataRoomDatabase;
this.accountName = accountName;
this.multipath = multipath;
this.deleteMultiredditInDatabaseAsyncTaskListener = deleteMultiredditInDatabaseAsyncTaskListener;
}
@Override
protected Void doInBackground(Void... voids) {
redditDataRoomDatabase.multiRedditDao().deleteMultiReddit(multipath, accountName);
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
deleteMultiredditInDatabaseAsyncTaskListener.success();
}
}

View File

@ -0,0 +1,32 @@
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;
public class DeleteTheme {
public static void deleteTheme(Executor executor, Handler handler,
RedditDataRoomDatabase redditDataRoomDatabase, String themeName,
DeleteThemeListener deleteThemeListener) {
executor.execute(() -> {
CustomTheme customTheme = redditDataRoomDatabase.customThemeDao().getCustomTheme(themeName);
if (customTheme != null) {
boolean isLightTheme = customTheme.isLightTheme;
boolean isDarkTheme = customTheme.isDarkTheme;
boolean isAmoledTheme = customTheme.isAmoledTheme;
redditDataRoomDatabase.customThemeDao().deleteCustomTheme(themeName);
handler.post(() -> deleteThemeListener.success(isLightTheme, isDarkTheme, isAmoledTheme));
} else {
handler.post(() -> deleteThemeListener.success(false, false, false));
}
});
}
public interface DeleteThemeListener {
void success(boolean isLightTheme, boolean isDarkTheme, boolean isAmoledTheme);
}
}

View File

@ -1,44 +0,0 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.os.AsyncTask;
import ml.docilealligator.infinityforreddit.customtheme.CustomTheme;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
public class DeleteThemeAsyncTask extends AsyncTask<Void, Void, Void> {
private RedditDataRoomDatabase redditDataRoomDatabase;
private String themeName;
private DeleteThemeAsyncTaskListener deleteThemeAsyncTaskListener;
private boolean isLightTheme = false;
private boolean isDarkTheme = false;
private boolean isAmoledTheme = false;
public interface DeleteThemeAsyncTaskListener {
void success(boolean isLightTheme, boolean isDarkTheme, boolean isAmoledTheme);
}
public DeleteThemeAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase, String themeName,
DeleteThemeAsyncTaskListener deleteThemeAsyncTaskListener) {
this.redditDataRoomDatabase = redditDataRoomDatabase;
this.themeName = themeName;
this.deleteThemeAsyncTaskListener = deleteThemeAsyncTaskListener;
}
@Override
protected Void doInBackground(Void... voids) {
CustomTheme customTheme = redditDataRoomDatabase.customThemeDao().getCustomTheme(themeName);
if (customTheme != null) {
isLightTheme = customTheme.isLightTheme;
isDarkTheme = customTheme.isDarkTheme;
isAmoledTheme = customTheme.isAmoledTheme;
redditDataRoomDatabase.customThemeDao().deleteCustomTheme(themeName);
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
deleteThemeAsyncTaskListener.success(isLightTheme, isDarkTheme, isAmoledTheme);
}
}

View File

@ -1,94 +0,0 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.os.AsyncTask;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import ml.docilealligator.infinityforreddit.multireddit.MultiReddit;
import ml.docilealligator.infinityforreddit.multireddit.MultiRedditDao;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
public class InsertMultiRedditAsyncTask extends AsyncTask<Void, Void, Void> {
private MultiRedditDao multiRedditDao;
private ArrayList<MultiReddit> multiReddits;
private MultiReddit multiReddit;
private String accountName;
private InsertMultiRedditAsyncTaskListener insertMultiRedditAsyncTaskListener;
public InsertMultiRedditAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase,
ArrayList<MultiReddit> multiReddits, String accountName,
InsertMultiRedditAsyncTaskListener insertMultiRedditAsyncTaskListener) {
multiRedditDao = redditDataRoomDatabase.multiRedditDao();
this.multiReddits = multiReddits;
this.accountName = accountName;
this.insertMultiRedditAsyncTaskListener = insertMultiRedditAsyncTaskListener;
}
public InsertMultiRedditAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase,
MultiReddit multiReddit,
InsertMultiRedditAsyncTaskListener insertMultiRedditAsyncTaskListener) {
multiRedditDao = redditDataRoomDatabase.multiRedditDao();
this.multiReddit = multiReddit;
this.insertMultiRedditAsyncTaskListener = insertMultiRedditAsyncTaskListener;
}
@Override
protected Void doInBackground(Void... voids) {
if (multiReddit != null) {
multiRedditDao.insert(multiReddit);
return null;
}
List<MultiReddit> existingMultiReddits = multiRedditDao.getAllMultiRedditsList(accountName);
Collections.sort(multiReddits, (multiReddit, t1) -> multiReddit.getName().compareToIgnoreCase(t1.getName()));
List<String> deletedMultiredditNames = new ArrayList<>();
compareTwoMultiRedditList(multiReddits, existingMultiReddits, deletedMultiredditNames);
for (String deleted : deletedMultiredditNames) {
multiRedditDao.deleteMultiReddit(deleted, accountName);
}
for (MultiReddit multiReddit : multiReddits) {
multiRedditDao.insert(multiReddit);
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
insertMultiRedditAsyncTaskListener.success();
}
private void compareTwoMultiRedditList(List<MultiReddit> newMultiReddits,
List<MultiReddit> oldMultiReddits,
List<String> deletedMultiReddits) {
int newIndex = 0;
for (int oldIndex = 0; oldIndex < oldMultiReddits.size(); oldIndex++) {
if (newIndex >= newMultiReddits.size()) {
for (; oldIndex < oldMultiReddits.size(); oldIndex++) {
deletedMultiReddits.add(oldMultiReddits.get(oldIndex).getName());
}
return;
}
MultiReddit old = oldMultiReddits.get(oldIndex);
for (; newIndex < newMultiReddits.size(); newIndex++) {
if (newMultiReddits.get(newIndex).getName().compareToIgnoreCase(old.getName()) == 0) {
newIndex++;
break;
}
if (newMultiReddits.get(newIndex).getName().compareToIgnoreCase(old.getName()) > 0) {
deletedMultiReddits.add(old.getName());
break;
}
}
}
}
public interface InsertMultiRedditAsyncTaskListener {
void success();
}
}

View File

@ -0,0 +1,76 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.os.Handler;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.Executor;
import ml.docilealligator.infinityforreddit.multireddit.MultiReddit;
import ml.docilealligator.infinityforreddit.multireddit.MultiRedditDao;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
public class InsertMultireddit {
public static void insertMultireddit(Executor executor, Handler handler, RedditDataRoomDatabase redditDataRoomDatabase,
ArrayList<MultiReddit> multiReddits, String accountName,
InsertMultiRedditListener insertMultiRedditListener) {
executor.execute(() -> {
MultiRedditDao multiRedditDao = redditDataRoomDatabase.multiRedditDao();
List<MultiReddit> existingMultiReddits = multiRedditDao.getAllMultiRedditsList(accountName);
Collections.sort(multiReddits, (multiReddit, t1) -> multiReddit.getName().compareToIgnoreCase(t1.getName()));
List<String> deletedMultiredditNames = new ArrayList<>();
compareTwoMultiRedditList(multiReddits, existingMultiReddits, deletedMultiredditNames);
for (String deleted : deletedMultiredditNames) {
multiRedditDao.deleteMultiReddit(deleted, accountName);
}
for (MultiReddit multiReddit : multiReddits) {
multiRedditDao.insert(multiReddit);
}
handler.post(insertMultiRedditListener::success);
});
}
public static void insertMultireddit(Executor executor, Handler handler, RedditDataRoomDatabase redditDataRoomDatabase,
MultiReddit multiReddit,
InsertMultiRedditListener insertMultiRedditListener) {
executor.execute(() -> {
redditDataRoomDatabase.multiRedditDao().insert(multiReddit);
handler.post(insertMultiRedditListener::success);
});
}
private static void compareTwoMultiRedditList(List<MultiReddit> newMultiReddits,
List<MultiReddit> oldMultiReddits,
List<String> deletedMultiReddits) {
int newIndex = 0;
for (int oldIndex = 0; oldIndex < oldMultiReddits.size(); oldIndex++) {
if (newIndex >= newMultiReddits.size()) {
for (; oldIndex < oldMultiReddits.size(); oldIndex++) {
deletedMultiReddits.add(oldMultiReddits.get(oldIndex).getName());
}
return;
}
MultiReddit old = oldMultiReddits.get(oldIndex);
for (; newIndex < newMultiReddits.size(); newIndex++) {
if (newMultiReddits.get(newIndex).getName().compareToIgnoreCase(old.getName()) == 0) {
newIndex++;
break;
}
if (newMultiReddits.get(newIndex).getName().compareToIgnoreCase(old.getName()) > 0) {
deletedMultiReddits.add(old.getName());
break;
}
}
}
}
public interface InsertMultiRedditListener {
void success();
}
}

View File

@ -0,0 +1,24 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.os.Handler;
import java.util.concurrent.Executor;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.subreddit.SubredditData;
public class InsertSubredditData {
public static void insertSubredditData(Executor executor, Handler handler, RedditDataRoomDatabase db,
SubredditData subredditData,
InsertSubredditDataAsyncTaskListener insertSubredditDataAsyncTaskListener) {
executor.execute(() -> {
db.subredditDao().insert(subredditData);
handler.post(insertSubredditDataAsyncTaskListener::insertSuccess);
});
}
public interface InsertSubredditDataAsyncTaskListener {
void insertSuccess();
}
}

View File

@ -1,35 +0,0 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.os.AsyncTask;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.subreddit.SubredditDao;
import ml.docilealligator.infinityforreddit.subreddit.SubredditData;
public class InsertSubredditDataAsyncTask extends AsyncTask<Void, Void, Void> {
private SubredditDao mSubredditDao;
private SubredditData subredditData;
private InsertSubredditDataAsyncTaskListener insertSubredditDataAsyncTaskListener;
public InsertSubredditDataAsyncTask(RedditDataRoomDatabase db, SubredditData subredditData,
InsertSubredditDataAsyncTaskListener insertSubredditDataAsyncTaskListener) {
mSubredditDao = db.subredditDao();
this.subredditData = subredditData;
this.insertSubredditDataAsyncTaskListener = insertSubredditDataAsyncTaskListener;
}
@Override
protected Void doInBackground(final Void... params) {
mSubredditDao.insert(subredditData);
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
insertSubredditDataAsyncTaskListener.insertSuccess();
}
public interface InsertSubredditDataAsyncTaskListener {
void insertSuccess();
}
}

View File

@ -1,12 +1,13 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.os.AsyncTask;
import android.os.Handler;
import androidx.annotation.Nullable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.Executor;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.subreddit.SubredditDao;
@ -16,117 +17,99 @@ import ml.docilealligator.infinityforreddit.subscribedsubreddit.SubscribedSubred
import ml.docilealligator.infinityforreddit.subscribeduser.SubscribedUserDao;
import ml.docilealligator.infinityforreddit.subscribeduser.SubscribedUserData;
public class InsertSubscribedThingsAsyncTask extends AsyncTask<Void, Void, Void> {
public class InsertSubscribedThings {
private RedditDataRoomDatabase mRedditDataRoomDatabase;
private String mAccountName;
private SubscribedSubredditDao mSubscribedSubredditDao;
private SubscribedUserDao mSubscribedUserDao;
private SubredditDao mSubredditDao;
private SubscribedSubredditData mSingleSubscribedSubredditData;
private SubscribedUserData mSingleSubscribedUserData;
private List<SubscribedSubredditData> subscribedSubredditDataList;
private List<SubscribedUserData> subscribedUserDataList;
private List<SubredditData> subredditDataList;
private InsertSubscribedThingListener mInsertSubscribedThingListener;
public static void insertSubscribedThings(Executor executor, Handler handler,
RedditDataRoomDatabase redditDataRoomDatabase, @Nullable String accountName,
List<SubscribedSubredditData> subscribedSubredditDataList,
List<SubscribedUserData> subscribedUserDataList,
List<SubredditData> subredditDataList,
InsertSubscribedThingListener insertSubscribedThingListener) {
executor.execute(() -> {
if (accountName != null && redditDataRoomDatabase.accountDao().getAccountData(accountName) == null) {
handler.post(insertSubscribedThingListener::insertSuccess);
return;
}
public InsertSubscribedThingsAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase, @Nullable String accountName,
List<SubscribedSubredditData> subscribedSubredditDataList,
List<SubscribedUserData> subscribedUserDataList,
List<SubredditData> subredditDataList,
InsertSubscribedThingListener insertSubscribedThingListener) {
mRedditDataRoomDatabase = redditDataRoomDatabase;
mAccountName = accountName;
mSubscribedSubredditDao = redditDataRoomDatabase.subscribedSubredditDao();
mSubscribedUserDao = redditDataRoomDatabase.subscribedUserDao();
mSubredditDao = redditDataRoomDatabase.subredditDao();
SubscribedSubredditDao subscribedSubredditDao = redditDataRoomDatabase.subscribedSubredditDao();
SubscribedUserDao subscribedUserDao = redditDataRoomDatabase.subscribedUserDao();
SubredditDao subredditDao = redditDataRoomDatabase.subredditDao();
this.subscribedSubredditDataList = subscribedSubredditDataList;
this.subscribedUserDataList = subscribedUserDataList;
this.subredditDataList = subredditDataList;
mInsertSubscribedThingListener = insertSubscribedThingListener;
}
public InsertSubscribedThingsAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase,
SubscribedSubredditData subscribedSubredditDataList,
InsertSubscribedThingListener insertSubscribedThingListener) {
mRedditDataRoomDatabase = redditDataRoomDatabase;
mSubscribedSubredditDao = redditDataRoomDatabase.subscribedSubredditDao();
mAccountName = subscribedSubredditDataList.getUsername();
mSingleSubscribedSubredditData = subscribedSubredditDataList;
mInsertSubscribedThingListener = insertSubscribedThingListener;
}
public InsertSubscribedThingsAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase,
SubscribedUserData subscribedUserDataList,
InsertSubscribedThingListener insertSubscribedThingListener) {
mRedditDataRoomDatabase = redditDataRoomDatabase;
mSubscribedUserDao = redditDataRoomDatabase.subscribedUserDao();
mAccountName = subscribedUserDataList.getUsername();
mSingleSubscribedUserData = subscribedUserDataList;
mInsertSubscribedThingListener = insertSubscribedThingListener;
}
@Override
protected Void doInBackground(final Void... params) {
if (mAccountName != null && mRedditDataRoomDatabase.accountDao().getAccountData(mAccountName) == null) {
return null;
}
if (mSingleSubscribedSubredditData != null) {
mSubscribedSubredditDao.insert(mSingleSubscribedSubredditData);
} else if (mSingleSubscribedUserData != null) {
mSubscribedUserDao.insert(mSingleSubscribedUserData);
} else {
if (subscribedSubredditDataList != null) {
List<SubscribedSubredditData> existingSubscribedSubredditDataList =
mSubscribedSubredditDao.getAllSubscribedSubredditsList(mAccountName);
subscribedSubredditDao.getAllSubscribedSubredditsList(accountName);
Collections.sort(subscribedSubredditDataList, (subscribedSubredditData, t1) -> subscribedSubredditData.getName().compareToIgnoreCase(t1.getName()));
List<String> unsubscribedSubreddits = new ArrayList<>();
compareTwoSubscribedSubredditList(subscribedSubredditDataList, existingSubscribedSubredditDataList,
unsubscribedSubreddits);
for (String unsubscribed : unsubscribedSubreddits) {
mSubscribedSubredditDao.deleteSubscribedSubreddit(unsubscribed, mAccountName);
subscribedSubredditDao.deleteSubscribedSubreddit(unsubscribed, accountName);
}
for (SubscribedSubredditData s : subscribedSubredditDataList) {
mSubscribedSubredditDao.insert(s);
subscribedSubredditDao.insert(s);
}
}
if (subscribedUserDataList != null) {
List<SubscribedUserData> existingSubscribedUserDataList =
mSubscribedUserDao.getAllSubscribedUsersList(mAccountName);
subscribedUserDao.getAllSubscribedUsersList(accountName);
Collections.sort(subscribedUserDataList, (subscribedUserData, t1) -> subscribedUserData.getName().compareToIgnoreCase(t1.getName()));
List<String> unsubscribedUsers = new ArrayList<>();
compareTwoSubscribedUserList(subscribedUserDataList, existingSubscribedUserDataList,
unsubscribedUsers);
for (String unsubscribed : unsubscribedUsers) {
mSubscribedUserDao.deleteSubscribedUser(unsubscribed, mAccountName);
subscribedUserDao.deleteSubscribedUser(unsubscribed, accountName);
}
for (SubscribedUserData s : subscribedUserDataList) {
mSubscribedUserDao.insert(s);
subscribedUserDao.insert(s);
}
}
if (subredditDataList != null) {
for (SubredditData s : subredditDataList) {
mSubredditDao.insert(s);
subredditDao.insert(s);
}
}
}
return null;
handler.post(insertSubscribedThingListener::insertSuccess);
});
}
@Override
protected void onPostExecute(Void aVoid) {
mInsertSubscribedThingListener.insertSuccess();
public static void insertSubscribedThings(Executor executor, Handler handler, RedditDataRoomDatabase redditDataRoomDatabase,
SubscribedSubredditData singleSubscribedSubredditData,
InsertSubscribedThingListener insertSubscribedThingListener) {
executor.execute(() -> {
String accountName = singleSubscribedSubredditData.getUsername();
if (accountName != null && redditDataRoomDatabase.accountDao().getAccountData(accountName) == null) {
handler.post(insertSubscribedThingListener::insertSuccess);
return;
}
redditDataRoomDatabase.subscribedSubredditDao().insert(singleSubscribedSubredditData);
handler.post(insertSubscribedThingListener::insertSuccess);
});
}
private void compareTwoSubscribedSubredditList(List<SubscribedSubredditData> newSubscribedSubreddits,
public static void insertSubscribedThings(Executor executor, Handler handler, RedditDataRoomDatabase redditDataRoomDatabase,
SubscribedUserData mSingleSubscribedUserData,
InsertSubscribedThingListener insertSubscribedThingListener) {
executor.execute(() -> {
String accountName = mSingleSubscribedUserData.getUsername();
if (accountName != null && redditDataRoomDatabase.accountDao().getAccountData(accountName) == null) {
handler.post(insertSubscribedThingListener::insertSuccess);
return;
}
redditDataRoomDatabase.subscribedUserDao().insert(mSingleSubscribedUserData);
handler.post(insertSubscribedThingListener::insertSuccess);
});
}
private static void compareTwoSubscribedSubredditList(List<SubscribedSubredditData> newSubscribedSubreddits,
List<SubscribedSubredditData> oldSubscribedSubreddits,
List<String> unsubscribedSubredditNames) {
int newIndex = 0;
@ -152,7 +135,7 @@ public class InsertSubscribedThingsAsyncTask extends AsyncTask<Void, Void, Void>
}
}
private void compareTwoSubscribedUserList(List<SubscribedUserData> newSubscribedUsers,
private static void compareTwoSubscribedUserList(List<SubscribedUserData> newSubscribedUsers,
List<SubscribedUserData> oldSubscribedUsers,
List<String> unsubscribedUserNames) {
int newIndex = 0;

View File

@ -0,0 +1,25 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.os.Handler;
import java.util.concurrent.Executor;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.user.UserData;
public class InsertUserData {
public static void insertUserData(Executor executor, Handler handler, RedditDataRoomDatabase redditDataRoomDatabase,
UserData userData, InsertUserDataListener insertUserDataListener) {
executor.execute(() -> {
redditDataRoomDatabase.userDao().insert(userData);
if (insertUserDataListener != null) {
handler.post(insertUserDataListener::insertSuccess);
}
});
}
public interface InsertUserDataListener {
void insertSuccess();
}
}

View File

@ -1,36 +0,0 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.os.AsyncTask;
import ml.docilealligator.infinityforreddit.user.UserDao;
import ml.docilealligator.infinityforreddit.user.UserData;
public class InsertUserDataAsyncTask extends AsyncTask<Void, Void, Void> {
private UserDao userDao;
private UserData userData;
private InsertUserDataCallback insertUserDataCallback;
public InsertUserDataAsyncTask(UserDao userDao, UserData userData, InsertUserDataCallback insertUserDataCallback) {
this.userDao = userDao;
this.userData = userData;
this.insertUserDataCallback = insertUserDataCallback;
}
@Override
protected Void doInBackground(Void... voids) {
userDao.insert(userData);
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
if (insertUserDataCallback != null) {
insertUserDataCallback.insertSuccess();
}
}
public interface InsertUserDataCallback {
void insertSuccess();
}
}

View File

@ -0,0 +1,48 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.os.Handler;
import java.util.ArrayList;
import java.util.concurrent.Executor;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.subreddit.FetchSubredditData;
import ml.docilealligator.infinityforreddit.subreddit.SubredditDao;
import ml.docilealligator.infinityforreddit.subreddit.SubredditData;
import retrofit2.Retrofit;
public class LoadSubredditIcon {
public static void loadSubredditIcon(Executor executor, Handler handler, RedditDataRoomDatabase redditDataRoomDatabase,
String subredditName, Retrofit retrofit,
LoadSubredditIconAsyncTaskListener loadSubredditIconAsyncTaskListener) {
executor.execute(() -> {
SubredditDao subredditDao = redditDataRoomDatabase.subredditDao();
SubredditData subredditData = subredditDao.getSubredditData(subredditName);
if (subredditData != null) {
String iconImageUrl = subredditDao.getSubredditData(subredditName).getIconUrl();
handler.post(() -> loadSubredditIconAsyncTaskListener.loadIconSuccess(iconImageUrl));
} else {
handler.post(() -> FetchSubredditData.fetchSubredditData(retrofit, subredditName, new FetchSubredditData.FetchSubredditDataListener() {
@Override
public void onFetchSubredditDataSuccess(SubredditData subredditData1, int nCurrentOnlineSubscribers) {
ArrayList<SubredditData> singleSubredditDataList = new ArrayList<>();
singleSubredditDataList.add(subredditData1);
InsertSubscribedThings.insertSubscribedThings(executor, handler, redditDataRoomDatabase, null,
null, null, singleSubredditDataList,
() -> loadSubredditIconAsyncTaskListener.loadIconSuccess(subredditData1.getIconUrl()));
}
@Override
public void onFetchSubredditDataFail() {
loadSubredditIconAsyncTaskListener.loadIconSuccess(null);
}
}));
}
});
}
public interface LoadSubredditIconAsyncTaskListener {
void loadIconSuccess(String iconImageUrl);
}
}

View File

@ -1,71 +0,0 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.os.AsyncTask;
import java.util.ArrayList;
import ml.docilealligator.infinityforreddit.subreddit.FetchSubredditData;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.subreddit.SubredditDao;
import ml.docilealligator.infinityforreddit.subreddit.SubredditData;
import retrofit2.Retrofit;
public class LoadSubredditIconAsyncTask extends AsyncTask<Void, Void, Void> {
private RedditDataRoomDatabase redditDataRoomDatabase;
private SubredditDao subredditDao;
private String subredditName;
private Retrofit retrofit;
private String iconImageUrl;
private boolean hasSubredditInDb;
private LoadSubredditIconAsyncTaskListener loadSubredditIconAsyncTaskListener;
public LoadSubredditIconAsyncTask(RedditDataRoomDatabase redditDataRoomDatabase, String subredditName, Retrofit retrofit,
LoadSubredditIconAsyncTaskListener loadSubredditIconAsyncTaskListener) {
this.redditDataRoomDatabase = redditDataRoomDatabase;
this.subredditDao = redditDataRoomDatabase.subredditDao();
this.subredditName = subredditName;
this.retrofit = retrofit;
this.loadSubredditIconAsyncTaskListener = loadSubredditIconAsyncTaskListener;
}
@Override
protected Void doInBackground(Void... voids) {
SubredditData subredditData = subredditDao.getSubredditData(subredditName);
if (subredditData != null) {
iconImageUrl = subredditDao.getSubredditData(subredditName).getIconUrl();
hasSubredditInDb = true;
} else {
hasSubredditInDb = false;
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
if (!isCancelled()) {
if (hasSubredditInDb) {
loadSubredditIconAsyncTaskListener.loadIconSuccess(iconImageUrl);
} else {
FetchSubredditData.fetchSubredditData(retrofit, subredditName, new FetchSubredditData.FetchSubredditDataListener() {
@Override
public void onFetchSubredditDataSuccess(SubredditData subredditData, int nCurrentOnlineSubscribers) {
ArrayList<SubredditData> singleSubredditDataList = new ArrayList<>();
singleSubredditDataList.add(subredditData);
new InsertSubscribedThingsAsyncTask(redditDataRoomDatabase, null,
null, null, singleSubredditDataList,
() -> loadSubredditIconAsyncTaskListener.loadIconSuccess(subredditData.getIconUrl())).execute();
}
@Override
public void onFetchSubredditDataFail() {
loadSubredditIconAsyncTaskListener.loadIconSuccess(null);
}
});
}
}
}
public interface LoadSubredditIconAsyncTaskListener {
void loadIconSuccess(String iconImageUrl);
}
}

View File

@ -0,0 +1,42 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.os.Handler;
import java.util.concurrent.Executor;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.user.FetchUserData;
import ml.docilealligator.infinityforreddit.user.UserDao;
import ml.docilealligator.infinityforreddit.user.UserData;
import retrofit2.Retrofit;
public class LoadUserData {
public static void loadUserData(Executor executor, Handler handler, RedditDataRoomDatabase redditDataRoomDatabase, String userName,
Retrofit retrofit, LoadUserDataAsyncTaskListener loadUserDataAsyncTaskListener) {
executor.execute(() -> {
UserDao userDao = redditDataRoomDatabase.userDao();
if (userDao.getUserData(userName) != null) {
String iconImageUrl = userDao.getUserData(userName).getIconUrl();
handler.post(() -> loadUserDataAsyncTaskListener.loadUserDataSuccess(iconImageUrl));
} else {
handler.post(() -> FetchUserData.fetchUserData(retrofit, userName, new FetchUserData.FetchUserDataListener() {
@Override
public void onFetchUserDataSuccess(UserData userData) {
InsertUserData.insertUserData(executor, handler, redditDataRoomDatabase, userData,
() -> loadUserDataAsyncTaskListener.loadUserDataSuccess(userData.getIconUrl()));
}
@Override
public void onFetchUserDataFailed() {
loadUserDataAsyncTaskListener.loadUserDataSuccess(null);
}
}));
}
});
}
public interface LoadUserDataAsyncTaskListener {
void loadUserDataSuccess(String iconImageUrl);
}
}

View File

@ -1,58 +0,0 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.os.AsyncTask;
import ml.docilealligator.infinityforreddit.user.FetchUserData;
import ml.docilealligator.infinityforreddit.user.UserDao;
import ml.docilealligator.infinityforreddit.user.UserData;
import retrofit2.Retrofit;
public class LoadUserDataAsyncTask extends AsyncTask<Void, Void, Void> {
private UserDao userDao;
private String userName;
private String iconImageUrl;
private boolean hasUserInDb;
private Retrofit retrofit;
private LoadUserDataAsyncTaskListener loadUserDataAsyncTaskListener;
public LoadUserDataAsyncTask(UserDao userDao, String userName, Retrofit retrofit, LoadUserDataAsyncTaskListener loadUserDataAsyncTaskListener) {
this.userDao = userDao;
this.userName = userName;
this.retrofit = retrofit;
this.loadUserDataAsyncTaskListener = loadUserDataAsyncTaskListener;
}
@Override
protected Void doInBackground(Void... voids) {
if (userDao.getUserData(userName) != null) {
iconImageUrl = userDao.getUserData(userName).getIconUrl();
hasUserInDb = true;
} else {
hasUserInDb = false;
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
if (hasUserInDb) {
loadUserDataAsyncTaskListener.loadUserDataSuccess(iconImageUrl);
} else {
FetchUserData.fetchUserData(retrofit, userName, new FetchUserData.FetchUserDataListener() {
@Override
public void onFetchUserDataSuccess(UserData userData) {
new InsertUserDataAsyncTask(userDao, userData, () -> loadUserDataAsyncTaskListener.loadUserDataSuccess(userData.getIconUrl())).execute();
}
@Override
public void onFetchUserDataFailed() {
loadUserDataAsyncTaskListener.loadUserDataSuccess(null);
}
});
}
}
public interface LoadUserDataAsyncTaskListener {
void loadUserDataSuccess(String iconImageUrl);
}
}

View File

@ -0,0 +1,29 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.os.Handler;
import java.util.concurrent.Executor;
import ml.docilealligator.infinityforreddit.account.Account;
import ml.docilealligator.infinityforreddit.account.AccountDao;
public class ParseAndInsertNewAccount {
public static void parseAndInsertNewAccount(Executor executor, Handler handler, String username,
String accessToken, String refreshToken, String profileImageUrl,
String bannerImageUrl, int karma, String code, AccountDao accountDao,
ParseAndInsertAccountListener parseAndInsertAccountListener) {
executor.execute(() -> {
Account account = new Account(username, accessToken, refreshToken, code, profileImageUrl,
bannerImageUrl, karma, true);
accountDao.markAllAccountsNonCurrent();
accountDao.insert(account);
handler.post(parseAndInsertAccountListener::success);
});
}
public interface ParseAndInsertAccountListener {
void success();
}
}

View File

@ -1,50 +0,0 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.os.AsyncTask;
import ml.docilealligator.infinityforreddit.account.Account;
import ml.docilealligator.infinityforreddit.account.AccountDao;
public class ParseAndInsertNewAccountAsyncTask extends AsyncTask<Void, Void, Void> {
private String username;
private String accessToken;
private String refreshToken;
private String profileImageUrl;
private String bannerImageUrl;
private int karma;
private String code;
private AccountDao accountDao;
private ParseAndInsertAccountListener parseAndInsertAccountListener;
public ParseAndInsertNewAccountAsyncTask(String username, String accessToken, String refreshToken, String profileImageUrl, String bannerImageUrl,
int karma, String code, AccountDao accountDao,
ParseAndInsertAccountListener parseAndInsertAccountListener) {
this.username = username;
this.accessToken = accessToken;
this.refreshToken = refreshToken;
this.profileImageUrl = profileImageUrl;
this.bannerImageUrl = bannerImageUrl;
this.karma = karma;
this.code = code;
this.accountDao = accountDao;
this.parseAndInsertAccountListener = parseAndInsertAccountListener;
}
@Override
protected Void doInBackground(Void... voids) {
Account account = new Account(username, accessToken, refreshToken, code, profileImageUrl,
bannerImageUrl, karma, true);
accountDao.markAllAccountsNonCurrent();
accountDao.insert(account);
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
parseAndInsertAccountListener.success();
}
public interface ParseAndInsertAccountListener {
void success();
}
}

View File

@ -0,0 +1,35 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.graphics.Bitmap;
import android.os.Handler;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.concurrent.Executor;
public class SaveBitmapImageToFile {
public static void SaveBitmapImageToFile(Executor executor, Handler handler, Bitmap resource, String cacheDirPath, String fileName,
SaveBitmapImageToFileListener saveBitmapImageToFileListener) {
executor.execute(() -> {
try {
File imageFile = new File(cacheDirPath, fileName);
OutputStream outputStream = new FileOutputStream(imageFile);
resource.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
outputStream.flush();
outputStream.close();
handler.post(() -> saveBitmapImageToFileListener.saveSuccess(imageFile));
} catch (IOException e) {
handler.post(saveBitmapImageToFileListener::saveFailed);
}
});
}
public interface SaveBitmapImageToFileListener {
void saveSuccess(File imageFile);
void saveFailed();
}
}

View File

@ -1,55 +0,0 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class SaveBitmapImageToFileAsyncTask extends AsyncTask<Void, Void, Void> {
private Bitmap resource;
private String cacheDirPath;
private String fileName;
private SaveBitmapImageToFileAsyncTaskListener saveBitmapImageToFileAsyncTaskListener;
private boolean saveSuccess = true;
private File imageFile;
public SaveBitmapImageToFileAsyncTask(Bitmap resource, String cacheDirPath, String fileName,
SaveBitmapImageToFileAsyncTaskListener saveBitmapImageToFileAsyncTaskListener) {
this.resource = resource;
this.cacheDirPath = cacheDirPath;
this.fileName = fileName;
this.saveBitmapImageToFileAsyncTaskListener = saveBitmapImageToFileAsyncTaskListener;
}
public interface SaveBitmapImageToFileAsyncTaskListener {
void saveSuccess(File imageFile);
void saveFailed();
}
@Override
protected Void doInBackground(Void... voids) {
try {
imageFile = new File(cacheDirPath, fileName);
OutputStream outputStream = new FileOutputStream(imageFile);
resource.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
outputStream.flush();
outputStream.close();
} catch (IOException e) {
saveSuccess = false;
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
if (saveSuccess) {
saveBitmapImageToFileAsyncTaskListener.saveSuccess(imageFile);
} else {
saveBitmapImageToFileAsyncTaskListener.saveFailed();
}
}
}

View File

@ -0,0 +1,40 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.os.Handler;
import com.bumptech.glide.load.resource.gif.GifDrawable;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.ByteBuffer;
import java.util.concurrent.Executor;
public class SaveGIFToFile {
public static void saveGifToFile(Executor executor, Handler handler, GifDrawable resource,
String cacheDirPath, String fileName,
SaveGIFToFileAsyncTaskListener saveImageToFileAsyncTaskListener) {
executor.execute(() -> {
try {
File imageFile = new File(cacheDirPath, fileName);
ByteBuffer byteBuffer = resource.getBuffer();
OutputStream outputStream = new FileOutputStream(imageFile);
byte[] bytes = new byte[byteBuffer.capacity()];
((ByteBuffer) byteBuffer.duplicate().clear()).get(bytes);
outputStream.write(bytes, 0, bytes.length);
outputStream.close();
handler.post(() -> saveImageToFileAsyncTaskListener.saveSuccess(imageFile));
} catch (IOException e) {
handler.post(saveImageToFileAsyncTaskListener::saveFailed);
}
});
}
public interface SaveGIFToFileAsyncTaskListener {
void saveSuccess(File imageFile);
void saveFailed();
}
}

View File

@ -1,59 +0,0 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.os.AsyncTask;
import com.bumptech.glide.load.resource.gif.GifDrawable;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.ByteBuffer;
public class SaveGIFToFileAsyncTask extends AsyncTask<Void, Void, Void> {
private GifDrawable resource;
private String cacheDirPath;
private String fileName;
private SaveGIFToFileAsyncTaskListener saveImageToFileAsyncTaskListener;
private boolean saveSuccess = true;
private File imageFile;
public SaveGIFToFileAsyncTask(GifDrawable resource, String cacheDirPath, String fileName,
SaveGIFToFileAsyncTaskListener saveImageToFileAsyncTaskListener) {
this.resource = resource;
this.cacheDirPath = cacheDirPath;
this.fileName = fileName;
this.saveImageToFileAsyncTaskListener = saveImageToFileAsyncTaskListener;
}
public interface SaveGIFToFileAsyncTaskListener {
void saveSuccess(File imageFile);
void saveFailed();
}
@Override
protected Void doInBackground(Void... voids) {
try {
imageFile = new File(cacheDirPath, fileName);
ByteBuffer byteBuffer = resource.getBuffer();
OutputStream outputStream = new FileOutputStream(imageFile);
byte[] bytes = new byte[byteBuffer.capacity()];
((ByteBuffer) byteBuffer.duplicate().clear()).get(bytes);
outputStream.write(bytes, 0, bytes.length);
outputStream.close();
} catch (IOException e) {
saveSuccess = false;
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
if (saveSuccess) {
saveImageToFileAsyncTaskListener.saveSuccess(imageFile);
} else {
saveImageToFileAsyncTaskListener.saveFailed();
}
}
}

View File

@ -0,0 +1,77 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.app.WallpaperManager;
import android.graphics.Bitmap;
import android.graphics.Rect;
import android.media.ThumbnailUtils;
import android.os.Build;
import android.os.Handler;
import android.util.DisplayMetrics;
import android.view.WindowManager;
import java.io.IOException;
import java.util.concurrent.Executor;
import ml.docilealligator.infinityforreddit.WallpaperSetter;
public class SetAsWallpaper {
public static void setAsWallpaper(Executor executor, Handler handler, Bitmap bitmap, int setTo,
WallpaperManager manager, WindowManager windowManager,
WallpaperSetter.SetWallpaperListener setWallpaperListener) {
executor.execute(new Runnable() {
@Override
public void run() {
DisplayMetrics metrics = new DisplayMetrics();
Rect rect = null;
Bitmap bitmapFinal = bitmap;
if (windowManager != null) {
windowManager.getDefaultDisplay().getMetrics(metrics);
int height = metrics.heightPixels;
int width = metrics.widthPixels;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
bitmapFinal = ThumbnailUtils.extractThumbnail(bitmapFinal, width, height);
}
float imageAR = (float) bitmapFinal.getWidth() / (float) bitmapFinal.getHeight();
float screenAR = (float) width / (float) height;
if (imageAR > screenAR) {
int desiredWidth = (int) (bitmapFinal.getHeight() * screenAR);
rect = new Rect((bitmapFinal.getWidth() - desiredWidth) / 2, 0, bitmapFinal.getWidth(), bitmapFinal.getHeight());
} else {
int desiredHeight = (int) (bitmapFinal.getWidth() / screenAR);
rect = new Rect(0, (bitmapFinal.getHeight() - desiredHeight) / 2, bitmapFinal.getWidth(), (bitmapFinal.getHeight() + desiredHeight) / 2);
}
}
try {
switch (setTo) {
case WallpaperSetter.HOME_SCREEN:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
manager.setBitmap(bitmapFinal, rect, true, WallpaperManager.FLAG_SYSTEM);
}
break;
case WallpaperSetter.LOCK_SCREEN:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
manager.setBitmap(bitmapFinal, rect, true, WallpaperManager.FLAG_LOCK);
}
break;
case WallpaperSetter.BOTH_SCREENS:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
manager.setBitmap(bitmapFinal, rect, true, WallpaperManager.FLAG_SYSTEM | WallpaperManager.FLAG_LOCK);
} else {
manager.setBitmap(bitmapFinal);
}
break;
}
handler.post(setWallpaperListener::success);
} catch (IOException e) {
handler.post(setWallpaperListener::failed);
}
}
});
}
}

View File

@ -1,95 +0,0 @@
package ml.docilealligator.infinityforreddit.asynctasks;
import android.app.WallpaperManager;
import android.graphics.Bitmap;
import android.graphics.Rect;
import android.media.ThumbnailUtils;
import android.os.AsyncTask;
import android.os.Build;
import android.util.DisplayMetrics;
import android.view.WindowManager;
import java.io.IOException;
import ml.docilealligator.infinityforreddit.WallpaperSetter;
public class SetAsWallpaperAsyncTask extends AsyncTask<Void, Void, Void> {
private Bitmap bitmap;
private int setTo;
private WallpaperManager manager;
private WindowManager windowManager;
private WallpaperSetter.SetWallpaperListener setWallpaperListener;
private boolean success = true;
public SetAsWallpaperAsyncTask(Bitmap bitmap, int setTo, WallpaperManager manager, WindowManager windowManager,
WallpaperSetter.SetWallpaperListener setWallpaperListener) {
this.bitmap = bitmap;
this.setTo = setTo;
this.manager = manager;
this.windowManager = windowManager;
this.setWallpaperListener = setWallpaperListener;
}
@Override
protected Void doInBackground(Void... voids) {
DisplayMetrics metrics = new DisplayMetrics();
Rect rect = null;
if (windowManager != null) {
windowManager.getDefaultDisplay().getMetrics(metrics);
int height = metrics.heightPixels;
int width = metrics.widthPixels;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height);
}
float imageAR = (float) bitmap.getWidth() / (float) bitmap.getHeight();
float screenAR = (float) width / (float) height;
if (imageAR > screenAR) {
int desiredWidth = (int) (bitmap.getHeight() * screenAR);
rect = new Rect((bitmap.getWidth() - desiredWidth) / 2, 0, bitmap.getWidth(), bitmap.getHeight());
} else {
int desiredHeight = (int) (bitmap.getWidth() / screenAR);
rect = new Rect(0, (bitmap.getHeight() - desiredHeight) / 2, bitmap.getWidth(), (bitmap.getHeight() + desiredHeight) / 2);
}
}
try {
switch (setTo) {
case WallpaperSetter.HOME_SCREEN:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
manager.setBitmap(bitmap, rect, true, WallpaperManager.FLAG_SYSTEM);
}
break;
case WallpaperSetter.LOCK_SCREEN:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
manager.setBitmap(bitmap, rect, true, WallpaperManager.FLAG_LOCK);
}
break;
case WallpaperSetter.BOTH_SCREENS:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
manager.setBitmap(bitmap, rect, true, WallpaperManager.FLAG_SYSTEM | WallpaperManager.FLAG_LOCK);
} else {
manager.setBitmap(bitmap);
}
break;
}
} catch (IOException e) {
success = false;
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
if (success) {
setWallpaperListener.success();
} else {
setWallpaperListener.failed();
}
}
}

View File

@ -24,20 +24,22 @@ import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import com.bumptech.glide.Glide;
import com.bumptech.glide.RequestManager;
import java.util.concurrent.Executor;
import javax.inject.Inject;
import javax.inject.Named;
import butterknife.BindView;
import butterknife.ButterKnife;
import me.zhanghai.android.fastscroll.FastScrollerBuilder;
import ml.docilealligator.infinityforreddit.activities.BaseActivity;
import ml.docilealligator.infinityforreddit.activities.SubscribedThingListingActivity;
import ml.docilealligator.infinityforreddit.adapters.FollowedUsersRecyclerViewAdapter;
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.FragmentCommunicator;
import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.activities.BaseActivity;
import ml.docilealligator.infinityforreddit.activities.SubscribedThingListingActivity;
import ml.docilealligator.infinityforreddit.adapters.FollowedUsersRecyclerViewAdapter;
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.subscribeduser.SubscribedUserViewModel;
import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
import retrofit2.Retrofit;
@ -70,7 +72,9 @@ public class FollowedUsersListingFragment extends Fragment implements FragmentCo
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
CustomThemeWrapper customThemeWrapper;
CustomThemeWrapper mCustomThemeWrapper;
@Inject
Executor mExecutor;
SubscribedUserViewModel mSubscribedUserViewModel;
private Activity mActivity;
private RequestManager mGlide;
@ -108,7 +112,7 @@ public class FollowedUsersListingFragment extends Fragment implements FragmentCo
mLinearLayoutManager = new LinearLayoutManager(mActivity);
mRecyclerView.setLayoutManager(mLinearLayoutManager);
FollowedUsersRecyclerViewAdapter adapter = new FollowedUsersRecyclerViewAdapter(mActivity,
mOauthRetrofit, mRedditDataRoomDatabase, customThemeWrapper,
mExecutor, mOauthRetrofit, mRedditDataRoomDatabase, mCustomThemeWrapper,
getArguments().getString(EXTRA_ACCESS_TOKEN));
mRecyclerView.setAdapter(adapter);
new FastScrollerBuilder(mRecyclerView).build();
@ -117,7 +121,7 @@ public class FollowedUsersListingFragment extends Fragment implements FragmentCo
new SubscribedUserViewModel.Factory(mActivity.getApplication(), mRedditDataRoomDatabase, getArguments().getString(EXTRA_ACCOUNT_NAME)))
.get(SubscribedUserViewModel.class);
mSubscribedUserViewModel.getAllSubscribedUsers().observe(this, subscribedUserData -> {
mSubscribedUserViewModel.getAllSubscribedUsers().observe(getViewLifecycleOwner(), subscribedUserData -> {
mSwipeRefreshLayout.setRefreshing(false);
if (subscribedUserData == null || subscribedUserData.size() == 0) {
mRecyclerView.setVisibility(View.GONE);
@ -131,7 +135,7 @@ public class FollowedUsersListingFragment extends Fragment implements FragmentCo
adapter.setSubscribedUsers(subscribedUserData);
});
mSubscribedUserViewModel.getAllFavoriteSubscribedUsers().observe(this, favoriteSubscribedUserData -> {
mSubscribedUserViewModel.getAllFavoriteSubscribedUsers().observe(getViewLifecycleOwner(), favoriteSubscribedUserData -> {
mSwipeRefreshLayout.setRefreshing(false);
if (favoriteSubscribedUserData != null && favoriteSubscribedUserData.size() > 0) {
mLinearLayout.setVisibility(View.GONE);
@ -159,12 +163,12 @@ public class FollowedUsersListingFragment extends Fragment implements FragmentCo
public void applyTheme() {
if (mActivity instanceof SubscribedThingListingActivity) {
mSwipeRefreshLayout.setOnRefreshListener(() -> ((SubscribedThingListingActivity) mActivity).loadSubscriptions(true));
mSwipeRefreshLayout.setProgressBackgroundColorSchemeColor(customThemeWrapper.getCircularProgressBarBackground());
mSwipeRefreshLayout.setColorSchemeColors(customThemeWrapper.getColorAccent());
mSwipeRefreshLayout.setProgressBackgroundColorSchemeColor(mCustomThemeWrapper.getCircularProgressBarBackground());
mSwipeRefreshLayout.setColorSchemeColors(mCustomThemeWrapper.getColorAccent());
} else {
mSwipeRefreshLayout.setEnabled(false);
}
mErrorTextView.setTextColor(customThemeWrapper.getSecondaryTextColor());
mErrorTextView.setTextColor(mCustomThemeWrapper.getSecondaryTextColor());
}
public void goBackToTop() {

View File

@ -24,6 +24,8 @@ import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import com.bumptech.glide.Glide;
import com.bumptech.glide.RequestManager;
import java.util.concurrent.Executor;
import javax.inject.Inject;
import javax.inject.Named;
@ -72,6 +74,8 @@ public class MultiRedditListingFragment extends Fragment implements FragmentComm
Retrofit mOauthRetrofit;
@Inject
CustomThemeWrapper mCustomThemeWrapper;
@Inject
Executor mExecutor;
public MultiRedditViewModel mMultiRedditViewModel;
private AppCompatActivity mActivity;
@ -113,7 +117,8 @@ public class MultiRedditListingFragment extends Fragment implements FragmentComm
mLinearLayoutManager = new LinearLayoutManager(mActivity);
mRecyclerView.setLayoutManager(mLinearLayoutManager);
MultiRedditListingRecyclerViewAdapter adapter = new MultiRedditListingRecyclerViewAdapter(mActivity,
mOauthRetrofit, mRedditDataRoomDatabase, mCustomThemeWrapper, accessToken, new MultiRedditListingRecyclerViewAdapter.OnItemClickListener() {
mExecutor, mOauthRetrofit, mRedditDataRoomDatabase, mCustomThemeWrapper, accessToken,
new MultiRedditListingRecyclerViewAdapter.OnItemClickListener() {
@Override
public void onClick(MultiReddit multiReddit) {
if (mActivity instanceof MultiredditSelectionActivity) {

View File

@ -437,7 +437,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
sortType = new SortType(SortType.Type.valueOf(sort), SortType.Time.valueOf(sortTime));
postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.POST_LAYOUT_SEARCH_POST, defaultPostLayout);
mAdapter = new PostRecyclerViewAdapter(activity, mOauthRetrofit, mRetrofit, mGfycatRetrofit,
mAdapter = new PostRecyclerViewAdapter(activity, mExecutor, mOauthRetrofit, mRetrofit, mGfycatRetrofit,
mRedgifsRetrofit, mRedditDataRoomDatabase, mCustomThemeWrapper, locale,
windowWidth, accessToken, accountName, postType, postLayout, true,
mSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,
@ -503,7 +503,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
sortType = new SortType(SortType.Type.valueOf(sort));
}
mAdapter = new PostRecyclerViewAdapter(activity, mOauthRetrofit, mRetrofit, mGfycatRetrofit,
mAdapter = new PostRecyclerViewAdapter(activity, mExecutor, mOauthRetrofit, mRetrofit, mGfycatRetrofit,
mRedgifsRetrofit, mRedditDataRoomDatabase, mCustomThemeWrapper, locale,
windowWidth, accessToken, accountName, postType, postLayout, displaySubredditName,
mSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,
@ -567,7 +567,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
sortType = new SortType(SortType.Type.valueOf(sort));
}
mAdapter = new PostRecyclerViewAdapter(activity, mOauthRetrofit, mRetrofit, mGfycatRetrofit,
mAdapter = new PostRecyclerViewAdapter(activity, mExecutor, mOauthRetrofit, mRetrofit, mGfycatRetrofit,
mRedgifsRetrofit, mRedditDataRoomDatabase, mCustomThemeWrapper, locale,
windowWidth, accessToken, accountName, postType, postLayout, true,
mSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,
@ -631,7 +631,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
}
postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.POST_LAYOUT_USER_POST_BASE + username, defaultPostLayout);
mAdapter = new PostRecyclerViewAdapter(activity, mOauthRetrofit, mRetrofit, mGfycatRetrofit,
mAdapter = new PostRecyclerViewAdapter(activity, mExecutor, mOauthRetrofit, mRetrofit, mGfycatRetrofit,
mRedgifsRetrofit, mRedditDataRoomDatabase, mCustomThemeWrapper, locale,
windowWidth, accessToken, accountName, postType, postLayout, true,
mSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,
@ -686,7 +686,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
}
postLayout = mPostLayoutSharedPreferences.getInt(SharedPreferencesUtils.POST_LAYOUT_FRONT_PAGE_POST, defaultPostLayout);
mAdapter = new PostRecyclerViewAdapter(activity, mOauthRetrofit, mRetrofit, mGfycatRetrofit,
mAdapter = new PostRecyclerViewAdapter(activity, mExecutor, mOauthRetrofit, mRetrofit, mGfycatRetrofit,
mRedgifsRetrofit, mRedditDataRoomDatabase, mCustomThemeWrapper, locale,
windowWidth, accessToken, accountName, postType, postLayout, true,
mSharedPreferences, mNsfwAndSpoilerSharedPreferences, mPostHistorySharedPreferences,

View File

@ -5,6 +5,7 @@ import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.text.Spanned;
import android.text.style.SuperscriptSpan;
import android.text.util.Linkify;
@ -23,6 +24,8 @@ import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import org.commonmark.ext.gfm.tables.TableBlock;
import java.util.concurrent.Executor;
import javax.inject.Inject;
import javax.inject.Named;
@ -45,7 +48,7 @@ import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.activities.LinkResolverActivity;
import ml.docilealligator.infinityforreddit.activities.ViewSubredditDetailActivity;
import ml.docilealligator.infinityforreddit.asynctasks.InsertSubredditDataAsyncTask;
import ml.docilealligator.infinityforreddit.asynctasks.InsertSubredditData;
import ml.docilealligator.infinityforreddit.bottomsheetfragments.UrlMenuBottomSheetFragment;
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.subreddit.FetchSubredditData;
@ -72,6 +75,8 @@ public class SidebarFragment extends Fragment {
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
CustomThemeWrapper mCustomThemeWrapper;
@Inject
Executor mExecutor;
public SidebarFragment() {
// Required empty public constructor
@ -189,7 +194,8 @@ public class SidebarFragment extends Fragment {
@Override
public void onFetchSubredditDataSuccess(SubredditData subredditData, int nCurrentOnlineSubscribers) {
swipeRefreshLayout.setRefreshing(false);
new InsertSubredditDataAsyncTask(mRedditDataRoomDatabase, subredditData, () -> swipeRefreshLayout.setRefreshing(false)).execute();
InsertSubredditData.insertSubredditData(mExecutor, new Handler(), mRedditDataRoomDatabase,
subredditData, () -> swipeRefreshLayout.setRefreshing(false));
}
@Override

View File

@ -25,6 +25,8 @@ import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import com.bumptech.glide.Glide;
import java.util.concurrent.Executor;
import javax.inject.Inject;
import javax.inject.Named;
@ -88,7 +90,9 @@ public class SubredditListingFragment extends Fragment implements FragmentCommun
@Named("nsfw_and_spoiler")
SharedPreferences mNsfwAndSpoilerSharedPreferences;
@Inject
CustomThemeWrapper customThemeWrapper;
CustomThemeWrapper mCustomThemeWrapper;
@Inject
Executor mExecutor;
private LinearLayoutManager mLinearLayoutManager;
private SubredditListingRecyclerViewAdapter mAdapter;
private Activity mActivity;
@ -135,8 +139,8 @@ public class SubredditListingFragment extends Fragment implements FragmentCommun
sortType = new SortType(SortType.Type.valueOf(sort.toUpperCase()));
boolean nsfw = mNsfwAndSpoilerSharedPreferences.getBoolean((accountName == null ? "" : accountName) + SharedPreferencesUtils.NSFW_BASE, false);
mAdapter = new SubredditListingRecyclerViewAdapter(mActivity, mOauthRetrofit, mRetrofit,
customThemeWrapper, accessToken, accountName, mRedditDataRoomDatabase,
mAdapter = new SubredditListingRecyclerViewAdapter(mActivity, mExecutor, mOauthRetrofit, mRetrofit,
mCustomThemeWrapper, accessToken, accountName, mRedditDataRoomDatabase,
new SubredditListingRecyclerViewAdapter.Callback() {
@Override
public void retryLoadingMore() {
@ -236,9 +240,9 @@ public class SubredditListingFragment extends Fragment implements FragmentCommun
@Override
public void applyTheme() {
mSwipeRefreshLayout.setProgressBackgroundColorSchemeColor(customThemeWrapper.getCircularProgressBarBackground());
mSwipeRefreshLayout.setColorSchemeColors(customThemeWrapper.getColorAccent());
mFetchSubredditListingInfoTextView.setTextColor(customThemeWrapper.getSecondaryTextColor());
mSwipeRefreshLayout.setProgressBackgroundColorSchemeColor(mCustomThemeWrapper.getCircularProgressBarBackground());
mSwipeRefreshLayout.setColorSchemeColors(mCustomThemeWrapper.getColorAccent());
mFetchSubredditListingInfoTextView.setTextColor(mCustomThemeWrapper.getSecondaryTextColor());
}
public void goBackToTop() {

View File

@ -24,6 +24,8 @@ import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import com.bumptech.glide.Glide;
import com.bumptech.glide.RequestManager;
import java.util.concurrent.Executor;
import javax.inject.Inject;
import javax.inject.Named;
@ -74,7 +76,9 @@ public class SubscribedSubredditsListingFragment extends Fragment implements Fra
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
CustomThemeWrapper customThemeWrapper;
CustomThemeWrapper mCustomThemeWrapper;
@Inject
Executor mExecutor;
public SubscribedSubredditViewModel mSubscribedSubredditViewModel;
private Activity mActivity;
private RequestManager mGlide;
@ -116,12 +120,12 @@ public class SubscribedSubredditsListingFragment extends Fragment implements Fra
SubscribedSubredditsRecyclerViewAdapter adapter;
if (getArguments().getBoolean(EXTRA_IS_SUBREDDIT_SELECTION)) {
adapter = new SubscribedSubredditsRecyclerViewAdapter(mActivity, mOauthRetrofit, mRedditDataRoomDatabase,
customThemeWrapper, accessToken, getArguments().getBoolean(EXTRA_EXTRA_CLEAR_SELECTION),
adapter = new SubscribedSubredditsRecyclerViewAdapter(mActivity, mExecutor, mOauthRetrofit, mRedditDataRoomDatabase,
mCustomThemeWrapper, accessToken, getArguments().getBoolean(EXTRA_EXTRA_CLEAR_SELECTION),
(name, iconUrl, subredditIsUser) -> ((SubredditSelectionActivity) mActivity).getSelectedSubreddit(name, iconUrl, subredditIsUser));
} else {
adapter = new SubscribedSubredditsRecyclerViewAdapter(mActivity, mOauthRetrofit, mRedditDataRoomDatabase,
customThemeWrapper, accessToken);
adapter = new SubscribedSubredditsRecyclerViewAdapter(mActivity, mExecutor, mOauthRetrofit, mRedditDataRoomDatabase,
mCustomThemeWrapper, accessToken);
}
mRecyclerView.setAdapter(adapter);
@ -130,7 +134,7 @@ public class SubscribedSubredditsListingFragment extends Fragment implements Fra
mSubscribedSubredditViewModel = new ViewModelProvider(this,
new SubscribedSubredditViewModel.Factory(mActivity.getApplication(), mRedditDataRoomDatabase, accountName))
.get(SubscribedSubredditViewModel.class);
mSubscribedSubredditViewModel.getAllSubscribedSubreddits().observe(this, subscribedSubredditData -> {
mSubscribedSubredditViewModel.getAllSubscribedSubreddits().observe(getViewLifecycleOwner(), subscribedSubredditData -> {
mSwipeRefreshLayout.setRefreshing(false);
if (subscribedSubredditData == null || subscribedSubredditData.size() == 0) {
mRecyclerView.setVisibility(View.GONE);
@ -146,7 +150,7 @@ public class SubscribedSubredditsListingFragment extends Fragment implements Fra
adapter.setSubscribedSubreddits(subscribedSubredditData);
});
mSubscribedSubredditViewModel.getAllFavoriteSubscribedSubreddits().observe(this, favoriteSubscribedSubredditData -> {
mSubscribedSubredditViewModel.getAllFavoriteSubscribedSubreddits().observe(getViewLifecycleOwner(), favoriteSubscribedSubredditData -> {
mSwipeRefreshLayout.setRefreshing(false);
if (favoriteSubscribedSubredditData != null && favoriteSubscribedSubredditData.size() > 0) {
mLinearLayout.setVisibility(View.GONE);
@ -175,12 +179,12 @@ public class SubscribedSubredditsListingFragment extends Fragment implements Fra
public void applyTheme() {
if (mActivity instanceof SubscribedThingListingActivity) {
mSwipeRefreshLayout.setOnRefreshListener(() -> ((SubscribedThingListingActivity) mActivity).loadSubscriptions(true));
mSwipeRefreshLayout.setProgressBackgroundColorSchemeColor(customThemeWrapper.getCircularProgressBarBackground());
mSwipeRefreshLayout.setColorSchemeColors(customThemeWrapper.getColorAccent());
mSwipeRefreshLayout.setProgressBackgroundColorSchemeColor(mCustomThemeWrapper.getCircularProgressBarBackground());
mSwipeRefreshLayout.setColorSchemeColors(mCustomThemeWrapper.getColorAccent());
} else {
mSwipeRefreshLayout.setEnabled(false);
}
mErrorTextView.setTextColor(customThemeWrapper.getSecondaryTextColor());
mErrorTextView.setTextColor(mCustomThemeWrapper.getSecondaryTextColor());
}
public void goBackToTop() {

View File

@ -25,6 +25,8 @@ import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import com.bumptech.glide.Glide;
import java.util.concurrent.Executor;
import javax.inject.Inject;
import javax.inject.Named;
@ -88,7 +90,9 @@ public class UserListingFragment extends Fragment implements FragmentCommunicato
@Named("nsfw_and_spoiler")
SharedPreferences mNsfwAndSpoilerSharedPreferences;
@Inject
CustomThemeWrapper customThemeWrapper;
CustomThemeWrapper mCustomThemeWrapper;
@Inject
Executor mExecutor;
private LinearLayoutManager mLinearLayoutManager;
private String mQuery;
private UserListingRecyclerViewAdapter mAdapter;
@ -135,8 +139,8 @@ public class UserListingFragment extends Fragment implements FragmentCommunicato
sortType = new SortType(SortType.Type.valueOf(sort.toUpperCase()));
boolean nsfw = mNsfwAndSpoilerSharedPreferences.getBoolean((accountName == null ? "" : accountName) + SharedPreferencesUtils.NSFW_BASE, false);
mAdapter = new UserListingRecyclerViewAdapter(getActivity(), mOauthRetrofit, mRetrofit,
customThemeWrapper, accessToken, accountName, mRedditDataRoomDatabase.subscribedUserDao(),
mAdapter = new UserListingRecyclerViewAdapter(getActivity(), mExecutor, mOauthRetrofit, mRetrofit,
mCustomThemeWrapper, accessToken, accountName, mRedditDataRoomDatabase,
new UserListingRecyclerViewAdapter.Callback() {
@Override
public void retryLoadingMore() {
@ -238,9 +242,9 @@ public class UserListingFragment extends Fragment implements FragmentCommunicato
@Override
public void applyTheme() {
mSwipeRefreshLayout.setProgressBackgroundColorSchemeColor(customThemeWrapper.getCircularProgressBarBackground());
mSwipeRefreshLayout.setColorSchemeColors(customThemeWrapper.getColorAccent());
mFetchUserListingInfoTextView.setTextColor(customThemeWrapper.getSecondaryTextColor());
mSwipeRefreshLayout.setProgressBackgroundColorSchemeColor(mCustomThemeWrapper.getCircularProgressBarBackground());
mSwipeRefreshLayout.setColorSchemeColors(mCustomThemeWrapper.getColorAccent());
mFetchUserListingInfoTextView.setTextColor(mCustomThemeWrapper.getSecondaryTextColor());
}
public void goBackToTop() {

View File

@ -9,6 +9,7 @@ import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
@ -37,17 +38,21 @@ import com.davemorrissey.labs.subscaleview.ImageSource;
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView;
import java.io.File;
import java.util.concurrent.Executor;
import javax.inject.Inject;
import butterknife.BindView;
import butterknife.ButterKnife;
import ml.docilealligator.infinityforreddit.activities.ViewImgurMediaActivity;
import ml.docilealligator.infinityforreddit.asynctasks.SaveBitmapImageToFileAsyncTask;
import ml.docilealligator.infinityforreddit.bottomsheetfragments.SetAsWallpaperBottomSheetFragment;
import ml.docilealligator.infinityforreddit.BuildConfig;
import ml.docilealligator.infinityforreddit.ImgurMedia;
import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.services.DownloadMediaService;
import ml.docilealligator.infinityforreddit.SetAsWallpaperCallback;
import ml.docilealligator.infinityforreddit.activities.ViewImgurMediaActivity;
import ml.docilealligator.infinityforreddit.asynctasks.SaveBitmapImageToFile;
import ml.docilealligator.infinityforreddit.bottomsheetfragments.SetAsWallpaperBottomSheetFragment;
import ml.docilealligator.infinityforreddit.services.DownloadMediaService;
public class ViewImgurImageFragment extends Fragment {
@ -60,6 +65,8 @@ public class ViewImgurImageFragment extends Fragment {
SubsamplingScaleImageView imageView;
@BindView(R.id.load_image_error_linear_layout_view_imgur_image_fragment)
LinearLayout errorLinearLayout;
@Inject
Executor mExecutor;
private ViewImgurMediaActivity activity;
private RequestManager glide;
@ -76,6 +83,8 @@ public class ViewImgurImageFragment extends Fragment {
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_view_imgur_images, container, false);
((Infinity) activity.getApplication()).getAppComponent().inject(this);
ButterKnife.bind(this, rootView);
setHasOptionsMenu(true);
@ -150,83 +159,83 @@ public class ViewImgurImageFragment extends Fragment {
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.action_download_view_imgur_image_fragment:
if (isDownloading) {
return false;
}
int itemId = item.getItemId();
if (itemId == R.id.action_download_view_imgur_image_fragment) {
if (isDownloading) {
return false;
}
isDownloading = true;
isDownloading = true;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ContextCompat.checkSelfPermission(activity,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ContextCompat.checkSelfPermission(activity,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
// Permission is not granted
// No explanation needed; request the permission
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE);
} else {
// Permission has already been granted
download();
}
// Permission is not granted
// No explanation needed; request the permission
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE);
} else {
// Permission has already been granted
download();
}
} else {
download();
}
return true;
case R.id.action_share_view_imgur_image_fragment:
glide.asBitmap().load(imgurMedia.getLink()).into(new CustomTarget<Bitmap>() {
return true;
} else if (itemId == R.id.action_share_view_imgur_image_fragment) {
glide.asBitmap().load(imgurMedia.getLink()).into(new CustomTarget<Bitmap>() {
@Override
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
if (activity.getExternalCacheDir() != null) {
Toast.makeText(activity, R.string.save_image_first, Toast.LENGTH_SHORT).show();
new SaveBitmapImageToFileAsyncTask(resource, activity.getExternalCacheDir().getPath(),
imgurMedia.getFileName(),
new SaveBitmapImageToFileAsyncTask.SaveBitmapImageToFileAsyncTaskListener() {
@Override
public void saveSuccess(File imageFile) {
Uri uri = FileProvider.getUriForFile(activity,
BuildConfig.APPLICATION_ID + ".provider", imageFile);
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
shareIntent.setType("image/*");
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(shareIntent, getString(R.string.share)));
}
@Override
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
if (activity.getExternalCacheDir() != null) {
Toast.makeText(activity, R.string.save_image_first, Toast.LENGTH_SHORT).show();
SaveBitmapImageToFile.SaveBitmapImageToFile(mExecutor, new Handler(), resource, activity.getExternalCacheDir().getPath(),
imgurMedia.getFileName(),
new SaveBitmapImageToFile.SaveBitmapImageToFileListener() {
@Override
public void saveSuccess(File imageFile) {
Uri uri = FileProvider.getUriForFile(activity,
BuildConfig.APPLICATION_ID + ".provider", imageFile);
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
shareIntent.setType("image/*");
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(shareIntent, getString(R.string.share)));
}
@Override
public void saveFailed() {
Toast.makeText(activity,
R.string.cannot_save_image, Toast.LENGTH_SHORT).show();
}
}).execute();
} else {
Toast.makeText(activity,
R.string.cannot_get_storage, Toast.LENGTH_SHORT).show();
}
@Override
public void saveFailed() {
Toast.makeText(activity,
R.string.cannot_save_image, Toast.LENGTH_SHORT).show();
}
});
} else {
Toast.makeText(activity,
R.string.cannot_get_storage, Toast.LENGTH_SHORT).show();
}
@Override
public void onLoadCleared(@Nullable Drawable placeholder) {
}
});
return true;
case R.id.action_set_wallpaper_view_imgur_image_fragment:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
SetAsWallpaperBottomSheetFragment setAsWallpaperBottomSheetFragment = new SetAsWallpaperBottomSheetFragment();
Bundle bundle = new Bundle();
bundle.putInt(SetAsWallpaperBottomSheetFragment.EXTRA_VIEW_PAGER_POSITION, activity.getCurrentPagePosition());
setAsWallpaperBottomSheetFragment.setArguments(bundle);
setAsWallpaperBottomSheetFragment.show(activity.getSupportFragmentManager(), setAsWallpaperBottomSheetFragment.getTag());
} else {
((SetAsWallpaperCallback) activity).setToBoth(activity.getCurrentPagePosition());
}
return true;
@Override
public void onLoadCleared(@Nullable Drawable placeholder) {
}
});
return true;
} else if (itemId == R.id.action_set_wallpaper_view_imgur_image_fragment) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
SetAsWallpaperBottomSheetFragment setAsWallpaperBottomSheetFragment = new SetAsWallpaperBottomSheetFragment();
Bundle bundle = new Bundle();
bundle.putInt(SetAsWallpaperBottomSheetFragment.EXTRA_VIEW_PAGER_POSITION, activity.getCurrentPagePosition());
setAsWallpaperBottomSheetFragment.setArguments(bundle);
setAsWallpaperBottomSheetFragment.show(activity.getSupportFragmentManager(), setAsWallpaperBottomSheetFragment.getTag());
} else {
((SetAsWallpaperCallback) activity).setToBoth(activity.getCurrentPagePosition());
}
return true;
}
return false;

View File

@ -9,6 +9,7 @@ import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
@ -42,15 +43,19 @@ import com.github.piasy.biv.view.BigImageView;
import com.github.piasy.biv.view.GlideImageViewFactory;
import java.io.File;
import java.util.concurrent.Executor;
import javax.inject.Inject;
import butterknife.BindView;
import butterknife.ButterKnife;
import ml.docilealligator.infinityforreddit.BuildConfig;
import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.SetAsWallpaperCallback;
import ml.docilealligator.infinityforreddit.activities.ViewRedditGalleryActivity;
import ml.docilealligator.infinityforreddit.asynctasks.SaveBitmapImageToFileAsyncTask;
import ml.docilealligator.infinityforreddit.asynctasks.SaveGIFToFileAsyncTask;
import ml.docilealligator.infinityforreddit.asynctasks.SaveBitmapImageToFile;
import ml.docilealligator.infinityforreddit.asynctasks.SaveGIFToFile;
import ml.docilealligator.infinityforreddit.bottomsheetfragments.SetAsWallpaperBottomSheetFragment;
import ml.docilealligator.infinityforreddit.post.Post;
import ml.docilealligator.infinityforreddit.services.DownloadMediaService;
@ -67,6 +72,8 @@ public class ViewRedditGalleryImageOrGifFragment extends Fragment {
BigImageView imageView;
@BindView(R.id.load_image_error_linear_layout_view_reddit_gallery_image_or_gif_fragment)
LinearLayout errorLinearLayout;
@Inject
Executor mExecutor;
private ViewRedditGalleryActivity activity;
private RequestManager glide;
@ -86,6 +93,8 @@ public class ViewRedditGalleryImageOrGifFragment extends Fragment {
View rootView = inflater.inflate(R.layout.fragment_view_reddit_gallery_image_or_gif, container, false);
((Infinity) activity.getApplication()).getAppComponent().inject(this);
ButterKnife.bind(this, rootView);
setHasOptionsMenu(true);
@ -283,9 +292,9 @@ public class ViewRedditGalleryImageOrGifFragment extends Fragment {
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
if (activity.getExternalCacheDir() != null) {
Toast.makeText(activity, R.string.save_image_first, Toast.LENGTH_SHORT).show();
new SaveBitmapImageToFileAsyncTask(resource, activity.getExternalCacheDir().getPath(),
SaveBitmapImageToFile.SaveBitmapImageToFile(mExecutor, new Handler(), resource, activity.getExternalCacheDir().getPath(),
media.fileName,
new SaveBitmapImageToFileAsyncTask.SaveBitmapImageToFileAsyncTaskListener() {
new SaveBitmapImageToFile.SaveBitmapImageToFileListener() {
@Override
public void saveSuccess(File imageFile) {
Uri uri = FileProvider.getUriForFile(activity,
@ -303,7 +312,7 @@ public class ViewRedditGalleryImageOrGifFragment extends Fragment {
Toast.makeText(activity,
R.string.cannot_save_image, Toast.LENGTH_SHORT).show();
}
}).execute();
});
} else {
Toast.makeText(activity,
R.string.cannot_get_storage, Toast.LENGTH_SHORT).show();
@ -328,8 +337,8 @@ public class ViewRedditGalleryImageOrGifFragment extends Fragment {
@Override
public boolean onResourceReady(GifDrawable resource, Object model, Target<GifDrawable> target, DataSource dataSource, boolean isFirstResource) {
if (activity.getExternalCacheDir() != null) {
new SaveGIFToFileAsyncTask(resource, activity.getExternalCacheDir().getPath(), media.fileName,
new SaveGIFToFileAsyncTask.SaveGIFToFileAsyncTaskListener() {
SaveGIFToFile.saveGifToFile(mExecutor, new Handler(), resource, activity.getExternalCacheDir().getPath(), media.fileName,
new SaveGIFToFile.SaveGIFToFileAsyncTaskListener() {
@Override
public void saveSuccess(File imageFile) {
Uri uri = FileProvider.getUriForFile(activity,
@ -347,7 +356,7 @@ public class ViewRedditGalleryImageOrGifFragment extends Fragment {
Toast.makeText(activity,
R.string.cannot_save_gif, Toast.LENGTH_SHORT).show();
}
}).execute();
});
} else {
Toast.makeText(activity,
R.string.cannot_get_storage, Toast.LENGTH_SHORT).show();

View File

@ -1,8 +1,12 @@
package ml.docilealligator.infinityforreddit.multireddit;
import android.os.Handler;
import androidx.annotation.NonNull;
import ml.docilealligator.infinityforreddit.asynctasks.DeleteMultiredditInDatabaseAsyncTask;
import java.util.concurrent.Executor;
import ml.docilealligator.infinityforreddit.asynctasks.DeleteMultiredditInDatabase;
import ml.docilealligator.infinityforreddit.apis.RedditAPI;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.utils.APIUtils;
@ -12,12 +16,14 @@ import retrofit2.Response;
import retrofit2.Retrofit;
public class DeleteMultiReddit {
public interface DeleteMultiRedditListener {
void success();
void failed();
}
public static void deleteMultiReddit(Retrofit oauthRetrofit, RedditDataRoomDatabase redditDataRoomDatabase,
public static void deleteMultiReddit(Executor executor, Handler handler, Retrofit oauthRetrofit,
RedditDataRoomDatabase redditDataRoomDatabase,
String accessToken, String accountName, String multipath,
DeleteMultiRedditListener deleteMultiRedditListener) {
oauthRetrofit.create(RedditAPI.class).deleteMultiReddit(APIUtils.getOAuthHeader(accessToken),
@ -25,8 +31,8 @@ public class DeleteMultiReddit {
@Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
if (response.isSuccessful()) {
new DeleteMultiredditInDatabaseAsyncTask(redditDataRoomDatabase, accountName, multipath,
deleteMultiRedditListener::success).execute();
DeleteMultiredditInDatabase.deleteMultiredditInDatabase(executor, handler, redditDataRoomDatabase, accountName, multipath,
deleteMultiRedditListener::success);
} else {
deleteMultiRedditListener.failed();
}

View File

@ -1,12 +1,15 @@
package ml.docilealligator.infinityforreddit.multireddit;
import android.os.Handler;
import androidx.annotation.NonNull;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Executor;
import ml.docilealligator.infinityforreddit.apis.RedditAPI;
import ml.docilealligator.infinityforreddit.asynctasks.InsertMultiRedditAsyncTask;
import ml.docilealligator.infinityforreddit.asynctasks.InsertMultireddit;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.utils.APIUtils;
import retrofit2.Call;
@ -20,7 +23,8 @@ public class FavoriteMultiReddit {
void failed();
}
public static void favoriteMultiReddit(Retrofit oauthRetrofit, RedditDataRoomDatabase redditDataRoomDatabase,
public static void favoriteMultiReddit(Executor executor, Handler handler, Retrofit oauthRetrofit,
RedditDataRoomDatabase redditDataRoomDatabase,
String accessToken, boolean makeFavorite,
MultiReddit multiReddit, FavoriteMultiRedditListener favoriteMultiRedditListener) {
Map<String, String> params = new HashMap<>();
@ -33,8 +37,8 @@ public class FavoriteMultiReddit {
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
if (response.isSuccessful()) {
multiReddit.setFavorite(makeFavorite);
new InsertMultiRedditAsyncTask(redditDataRoomDatabase, multiReddit,
favoriteMultiRedditListener::success).execute();
InsertMultireddit.insertMultireddit(executor, handler, redditDataRoomDatabase, multiReddit,
favoriteMultiRedditListener::success);
} else {
favoriteMultiRedditListener.failed();
}

View File

@ -4,6 +4,7 @@ import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.widget.Toast;
import androidx.annotation.NonNull;
@ -16,19 +17,21 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import org.greenrobot.eventbus.EventBus;
import java.util.concurrent.Executor;
import javax.inject.Inject;
import javax.inject.Named;
import ml.docilealligator.infinityforreddit.asynctasks.DeleteAllPostLayoutsAsyncTask;
import ml.docilealligator.infinityforreddit.asynctasks.DeleteAllReadPostsAsyncTask;
import ml.docilealligator.infinityforreddit.asynctasks.DeleteAllSortTypesAsyncTask;
import ml.docilealligator.infinityforreddit.asynctasks.DeleteAllSubredditsAsyncTask;
import ml.docilealligator.infinityforreddit.asynctasks.DeleteAllThemesAsyncTask;
import ml.docilealligator.infinityforreddit.asynctasks.DeleteAllUsersAsyncTask;
import ml.docilealligator.infinityforreddit.events.RecreateActivityEvent;
import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.asynctasks.DeleteAllPostLayouts;
import ml.docilealligator.infinityforreddit.asynctasks.DeleteAllReadPosts;
import ml.docilealligator.infinityforreddit.asynctasks.DeleteAllSortTypes;
import ml.docilealligator.infinityforreddit.asynctasks.DeleteAllSubreddits;
import ml.docilealligator.infinityforreddit.asynctasks.DeleteAllThemes;
import ml.docilealligator.infinityforreddit.asynctasks.DeleteAllUsers;
import ml.docilealligator.infinityforreddit.events.RecreateActivityEvent;
import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
/**
@ -65,6 +68,8 @@ public class AdvancedPreferenceFragment extends PreferenceFragmentCompat {
@Inject
@Named("nsfw_and_spoiler")
SharedPreferences nsfwAndBlurringSharedPreferences;
@Inject
Executor executor;
private Activity activity;
@Override
@ -88,8 +93,8 @@ public class AdvancedPreferenceFragment extends PreferenceFragmentCompat {
new MaterialAlertDialogBuilder(activity, R.style.MaterialAlertDialogTheme)
.setTitle(R.string.are_you_sure)
.setPositiveButton(R.string.yes, (dialogInterface, i)
-> new DeleteAllSubredditsAsyncTask(mRedditDataRoomDatabase,
() -> Toast.makeText(activity, R.string.delete_all_subreddits_success, Toast.LENGTH_SHORT).show()).execute())
-> DeleteAllSubreddits.deleteAllSubreddits(executor, new Handler(), mRedditDataRoomDatabase,
() -> Toast.makeText(activity, R.string.delete_all_subreddits_success, Toast.LENGTH_SHORT).show()))
.setNegativeButton(R.string.no, null)
.show();
return true;
@ -101,8 +106,8 @@ public class AdvancedPreferenceFragment extends PreferenceFragmentCompat {
new MaterialAlertDialogBuilder(activity, R.style.MaterialAlertDialogTheme)
.setTitle(R.string.are_you_sure)
.setPositiveButton(R.string.yes, (dialogInterface, i)
-> new DeleteAllUsersAsyncTask(mRedditDataRoomDatabase,
() -> Toast.makeText(activity, R.string.delete_all_users_success, Toast.LENGTH_SHORT).show()).execute())
-> DeleteAllUsers.deleteAllUsers(executor, new Handler(), mRedditDataRoomDatabase,
() -> Toast.makeText(activity, R.string.delete_all_users_success, Toast.LENGTH_SHORT).show()))
.setNegativeButton(R.string.no, null)
.show();
return true;
@ -114,10 +119,11 @@ public class AdvancedPreferenceFragment extends PreferenceFragmentCompat {
new MaterialAlertDialogBuilder(activity, R.style.MaterialAlertDialogTheme)
.setTitle(R.string.are_you_sure)
.setPositiveButton(R.string.yes, (dialogInterface, i)
-> new DeleteAllSortTypesAsyncTask(mSharedPreferences, mSortTypeSharedPreferences, () -> {
-> DeleteAllSortTypes.deleteAllSortTypes(executor, new Handler(),
mSharedPreferences, mSortTypeSharedPreferences, () -> {
Toast.makeText(activity, R.string.delete_all_sort_types_success, Toast.LENGTH_SHORT).show();
EventBus.getDefault().post(new RecreateActivityEvent());
}).execute())
}))
.setNegativeButton(R.string.no, null)
.show();
return true;
@ -129,10 +135,11 @@ public class AdvancedPreferenceFragment extends PreferenceFragmentCompat {
new MaterialAlertDialogBuilder(activity, R.style.MaterialAlertDialogTheme)
.setTitle(R.string.are_you_sure)
.setPositiveButton(R.string.yes, (dialogInterface, i)
-> new DeleteAllPostLayoutsAsyncTask(mSharedPreferences, mPostLayoutSharedPreferences, () -> {
-> DeleteAllPostLayouts.deleteAllPostLayouts(executor, new Handler(),
mSharedPreferences, mPostLayoutSharedPreferences, () -> {
Toast.makeText(activity, R.string.delete_all_post_layouts_success, Toast.LENGTH_SHORT).show();
EventBus.getDefault().post(new RecreateActivityEvent());
}).execute())
}))
.setNegativeButton(R.string.no, null)
.show();
return true;
@ -144,11 +151,12 @@ public class AdvancedPreferenceFragment extends PreferenceFragmentCompat {
new MaterialAlertDialogBuilder(activity, R.style.MaterialAlertDialogTheme)
.setTitle(R.string.are_you_sure)
.setPositiveButton(R.string.yes, (dialogInterface, i)
-> new DeleteAllThemesAsyncTask(mRedditDataRoomDatabase, lightThemeSharedPreferences,
-> DeleteAllThemes.deleteAllThemes(executor, new Handler(),
mRedditDataRoomDatabase, lightThemeSharedPreferences,
darkThemeSharedPreferences, amoledThemeSharedPreferences, () -> {
Toast.makeText(activity, R.string.delete_all_themes_success, Toast.LENGTH_SHORT).show();
EventBus.getDefault().post(new RecreateActivityEvent());
}).execute())
}))
.setNegativeButton(R.string.no, null)
.show();
return true;
@ -175,9 +183,10 @@ public class AdvancedPreferenceFragment extends PreferenceFragmentCompat {
new MaterialAlertDialogBuilder(activity, R.style.MaterialAlertDialogTheme)
.setTitle(R.string.are_you_sure)
.setPositiveButton(R.string.yes, (dialogInterface, i)
-> new DeleteAllReadPostsAsyncTask(mRedditDataRoomDatabase, () -> {
-> DeleteAllReadPosts.deleteAllReadPosts(executor, new Handler(),
mRedditDataRoomDatabase, () -> {
Toast.makeText(activity, R.string.delete_all_read_posts_success, Toast.LENGTH_SHORT).show();
}).execute())
}))
.setNegativeButton(R.string.no, null)
.show();
return true;

View File

@ -7,6 +7,7 @@ import androidx.annotation.NonNull;
import java.util.HashMap;
import java.util.Map;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.apis.RedditAPI;
import ml.docilealligator.infinityforreddit.subscribeduser.SubscribedUserDao;
import ml.docilealligator.infinityforreddit.subscribeduser.SubscribedUserData;
@ -18,18 +19,18 @@ import retrofit2.Retrofit;
public class UserFollowing {
public static void followUser(Retrofit oauthRetrofit, Retrofit retrofit,
String accessToken, String username, String accountName,
SubscribedUserDao subscribedUserDao,
RedditDataRoomDatabase redditDataRoomDatabase,
UserFollowingListener userFollowingListener) {
userFollowing(oauthRetrofit, retrofit, accessToken, username, accountName, "sub",
subscribedUserDao, userFollowingListener);
redditDataRoomDatabase.subscribedUserDao(), userFollowingListener);
}
public static void unfollowUser(Retrofit oauthRetrofit, Retrofit retrofit,
String accessToken, String username, String accountName,
SubscribedUserDao subscribedUserDao,
RedditDataRoomDatabase redditDataRoomDatabase,
UserFollowingListener userFollowingListener) {
userFollowing(oauthRetrofit, retrofit, accessToken, username, accountName, "unsub",
subscribedUserDao, userFollowingListener);
redditDataRoomDatabase.subscribedUserDao(), userFollowingListener);
}
private static void userFollowing(Retrofit oauthRetrofit, Retrofit retrofit, String accessToken,

View File

@ -24,8 +24,8 @@
<string name="edit_multi_reddit_activity_label">"编辑版块聚合"</string>
<string name="selected_subeddits_activity_label">"被选中的版块"</string>
<string name="report_activity_label">"报告"</string>
<string name="view_imgur_media_activity_image_label">"图片"</string>
<string name="view_imgur_media_activity_video_label">"视频"</string>
<string name="view_imgur_media_activity_image_label">"图片 %1$d/%2$d"</string>
<string name="view_imgur_media_activity_video_label">"视频 %1$d/%2$d"</string>
<string name="send_private_message_activity_label">"私信"</string>
<string name="view_reddit_gallery_activity_image_label">"图片 %1$d/%2$d
"</string>