From ea7a4b03ab5489525b472c7e89de2027aa0d3000 Mon Sep 17 00:00:00 2001 From: Balazs Toldi Date: Fri, 6 Oct 2023 07:56:33 +0200 Subject: [PATCH] Some changes to enable multicomm (not working yet) --- .../activities/CreateMultiRedditActivity.java | 70 +++----- .../activities/EditMultiRedditActivity.java | 9 +- .../MultiredditSelectionActivity.java | 2 +- .../activities/SearchActivity.java | 8 +- .../SelectedSubredditsAndUsersActivity.java | 13 +- .../SubredditMultiselectionActivity.java | 17 +- .../SubscribedThingListingActivity.java | 20 ++- ...MultiRedditListingRecyclerViewAdapter.java | 160 ++++-------------- ...SelectedSubredditsRecyclerViewAdapter.java | 15 +- ...dditMultiselectionRecyclerViewAdapter.java | 8 +- .../fragments/MultiRedditListingFragment.java | 10 +- .../multireddit/CreateMultiReddit.java | 7 +- .../multireddit/EditMultiReddit.java | 7 +- .../multireddit/FetchMultiRedditInfo.java | 15 +- .../multireddit/MultiReddit.java | 13 +- .../multireddit/ParseMultiReddit.java | 7 +- .../post/PostPagingSource.java | 43 ++++- .../subreddit/SubredditWithSelection.java | 20 ++- 18 files changed, 188 insertions(+), 256 deletions(-) diff --git a/app/src/main/java/eu/toldi/infinityforlemmy/activities/CreateMultiRedditActivity.java b/app/src/main/java/eu/toldi/infinityforlemmy/activities/CreateMultiRedditActivity.java index d46bac1b..7ef0eab2 100644 --- a/app/src/main/java/eu/toldi/infinityforlemmy/activities/CreateMultiRedditActivity.java +++ b/app/src/main/java/eu/toldi/infinityforlemmy/activities/CreateMultiRedditActivity.java @@ -34,13 +34,13 @@ import butterknife.ButterKnife; import eu.toldi.infinityforlemmy.Infinity; import eu.toldi.infinityforlemmy.R; import eu.toldi.infinityforlemmy.RedditDataRoomDatabase; +import eu.toldi.infinityforlemmy.RetrofitHolder; import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper; import eu.toldi.infinityforlemmy.customviews.slidr.Slidr; import eu.toldi.infinityforlemmy.multireddit.CreateMultiReddit; -import eu.toldi.infinityforlemmy.multireddit.MultiRedditJSONModel; +import eu.toldi.infinityforlemmy.subreddit.SubredditWithSelection; import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils; import eu.toldi.infinityforlemmy.utils.Utils; -import retrofit2.Retrofit; public class CreateMultiRedditActivity extends BaseActivity { @@ -71,8 +71,8 @@ public class CreateMultiRedditActivity extends BaseActivity { @BindView(R.id.select_subreddit_text_view_create_multi_reddit_activity) TextView selectSubredditTextView; @Inject - @Named("oauth") - Retrofit mOauthRetrofit; + @Named("no_oauth") + RetrofitHolder mRetrofit; @Inject RedditDataRoomDatabase mRedditDataRoomDatabase; @Inject @@ -87,14 +87,14 @@ public class CreateMultiRedditActivity extends BaseActivity { Executor mExecutor; private String mAccessToken; private String mAccountName; - private ArrayList mSubreddits; + private ArrayList mSubreddits; @Override protected void onCreate(Bundle savedInstanceState) { ((Infinity) getApplication()).getAppComponent().inject(this); setImmersiveModeNotApplicable(); - + super.onCreate(savedInstanceState); setContentView(R.layout.activity_create_multi_reddit); @@ -116,8 +116,8 @@ public class CreateMultiRedditActivity extends BaseActivity { mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null); mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, "-"); + visibilityLinearLayout.setVisibility(View.GONE); if (mAccessToken == null) { - visibilityLinearLayout.setVisibility(View.GONE); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { nameEditText.setImeOptions(nameEditText.getImeOptions() | EditorInfoCompat.IME_FLAG_NO_PERSONALIZED_LEARNING); descriptionEditText.setImeOptions(descriptionEditText.getImeOptions() | EditorInfoCompat.IME_FLAG_NO_PERSONALIZED_LEARNING); @@ -125,7 +125,7 @@ public class CreateMultiRedditActivity extends BaseActivity { } if (savedInstanceState != null) { - mSubreddits = savedInstanceState.getStringArrayList(SELECTED_SUBREDDITS_STATE); + mSubreddits = savedInstanceState.getParcelableArrayList(SELECTED_SUBREDDITS_STATE); } else { mSubreddits = new ArrayList<>(); } @@ -135,7 +135,7 @@ public class CreateMultiRedditActivity extends BaseActivity { private void bindView() { selectSubredditTextView.setOnClickListener(view -> { Intent intent = new Intent(CreateMultiRedditActivity.this, SelectedSubredditsAndUsersActivity.class); - intent.putStringArrayListExtra(SelectedSubredditsAndUsersActivity.EXTRA_SELECTED_SUBREDDITS, mSubreddits); + intent.putParcelableArrayListExtra(SelectedSubredditsAndUsersActivity.EXTRA_SELECTED_SUBREDDITS, mSubreddits); startActivityForResult(intent, SUBREDDIT_SELECTION_REQUEST_CODE); }); } @@ -159,42 +159,20 @@ public class CreateMultiRedditActivity extends BaseActivity { return true; } - if (mAccessToken != null) { - String jsonModel = new MultiRedditJSONModel(nameEditText.getText().toString(), descriptionEditText.getText().toString(), - visibilitySwitch.isChecked(), mSubreddits).createJSONModel(); - CreateMultiReddit.createMultiReddit(mOauthRetrofit, mRedditDataRoomDatabase, mAccessToken, - "/user/" + mAccountName + "/m/" + nameEditText.getText().toString(), - jsonModel, new CreateMultiReddit.CreateMultiRedditListener() { - @Override - public void success() { - finish(); - } + CreateMultiReddit.anonymousCreateMultiReddit(mExecutor, new Handler(), mRedditDataRoomDatabase, + "/user/" + mAccountName + "/m/" + nameEditText.getText().toString(), + nameEditText.getText().toString(), descriptionEditText.getText().toString(), + mSubreddits, new CreateMultiReddit.CreateMultiRedditListener() { + @Override + public void success() { + finish(); + } - @Override - public void failed(int errorCode) { - if (errorCode == 409) { - Snackbar.make(coordinatorLayout, R.string.duplicate_multi_reddit, Snackbar.LENGTH_SHORT).show(); - } else { - Snackbar.make(coordinatorLayout, R.string.create_multi_reddit_failed, Snackbar.LENGTH_SHORT).show(); - } - } - }); - } else { - CreateMultiReddit.anonymousCreateMultiReddit(mExecutor, new Handler(), mRedditDataRoomDatabase, - "/user/-/m/" + nameEditText.getText().toString(), - nameEditText.getText().toString(), descriptionEditText.getText().toString(), - mSubreddits, new CreateMultiReddit.CreateMultiRedditListener() { - @Override - public void success() { - finish(); - } - - @Override - public void failed(int errorType) { - //Will not be called - } - }); - } + @Override + public void failed(int errorType) { + //Will not be called + } + }); } return false; } @@ -204,7 +182,7 @@ public class CreateMultiRedditActivity extends BaseActivity { super.onActivityResult(requestCode, resultCode, data); if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE && resultCode == RESULT_OK) { if (data != null) { - mSubreddits = data.getStringArrayListExtra( + mSubreddits = data.getParcelableArrayListExtra( SubredditMultiselectionActivity.EXTRA_RETURN_SELECTED_SUBREDDITS); } } @@ -213,7 +191,7 @@ public class CreateMultiRedditActivity extends BaseActivity { @Override protected void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); - outState.putStringArrayList(SELECTED_SUBREDDITS_STATE, mSubreddits); + outState.putParcelableArrayList(SELECTED_SUBREDDITS_STATE, mSubreddits); } @Override diff --git a/app/src/main/java/eu/toldi/infinityforlemmy/activities/EditMultiRedditActivity.java b/app/src/main/java/eu/toldi/infinityforlemmy/activities/EditMultiRedditActivity.java index dbc1b9fd..64a1ce88 100644 --- a/app/src/main/java/eu/toldi/infinityforlemmy/activities/EditMultiRedditActivity.java +++ b/app/src/main/java/eu/toldi/infinityforlemmy/activities/EditMultiRedditActivity.java @@ -40,7 +40,6 @@ import eu.toldi.infinityforlemmy.customviews.slidr.Slidr; import eu.toldi.infinityforlemmy.multireddit.EditMultiReddit; import eu.toldi.infinityforlemmy.multireddit.FetchMultiRedditInfo; import eu.toldi.infinityforlemmy.multireddit.MultiReddit; -import eu.toldi.infinityforlemmy.multireddit.MultiRedditJSONModel; import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils; import eu.toldi.infinityforlemmy.utils.Utils; import retrofit2.Retrofit; @@ -191,7 +190,7 @@ public class EditMultiRedditActivity extends BaseActivity { selectSubredditTextView.setOnClickListener(view -> { Intent intent = new Intent(EditMultiRedditActivity.this, SelectedSubredditsAndUsersActivity.class); if (multiReddit.getSubreddits() != null) { - intent.putStringArrayListExtra(SelectedSubredditsAndUsersActivity.EXTRA_SELECTED_SUBREDDITS, multiReddit.getSubreddits()); + intent.putParcelableArrayListExtra(SelectedSubredditsAndUsersActivity.EXTRA_SELECTED_SUBREDDITS, multiReddit.getSubreddits()); } startActivityForResult(intent, SUBREDDIT_SELECTION_REQUEST_CODE); }); @@ -234,7 +233,7 @@ public class EditMultiRedditActivity extends BaseActivity { } }); } else { - String jsonModel = new MultiRedditJSONModel(nameEditText.getText().toString(), descriptionEditText.getText().toString(), + /*String jsonModel = new MultiRedditJSONModel(nameEditText.getText().toString(), descriptionEditText.getText().toString(), visibilitySwitch.isChecked(), multiReddit.getSubreddits()).createJSONModel(); EditMultiReddit.editMultiReddit(mRetrofit, mAccessToken, multiReddit.getPath(), jsonModel, new EditMultiReddit.EditMultiRedditListener() { @@ -247,7 +246,7 @@ public class EditMultiRedditActivity extends BaseActivity { public void failed() { Snackbar.make(coordinatorLayout, R.string.edit_multi_reddit_failed, Snackbar.LENGTH_SHORT).show(); } - }); + });*/ } return true; } @@ -259,7 +258,7 @@ public class EditMultiRedditActivity extends BaseActivity { super.onActivityResult(requestCode, resultCode, data); if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE && resultCode == RESULT_OK) { if (data != null) { - multiReddit.setSubreddits(data.getStringArrayListExtra( + multiReddit.setSubreddits(data.getParcelableArrayListExtra( SelectedSubredditsAndUsersActivity.EXTRA_RETURN_SELECTED_SUBREDDITS)); } } diff --git a/app/src/main/java/eu/toldi/infinityforlemmy/activities/MultiredditSelectionActivity.java b/app/src/main/java/eu/toldi/infinityforlemmy/activities/MultiredditSelectionActivity.java index dc63a0dc..b1a5d45f 100644 --- a/app/src/main/java/eu/toldi/infinityforlemmy/activities/MultiredditSelectionActivity.java +++ b/app/src/main/java/eu/toldi/infinityforlemmy/activities/MultiredditSelectionActivity.java @@ -117,7 +117,7 @@ public class MultiredditSelectionActivity extends BaseActivity implements Activi getSupportActionBar().setDisplayHomeAsUpEnabled(true); mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null); - mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null); + mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, null); if (savedInstanceState == null) { bindView(true); diff --git a/app/src/main/java/eu/toldi/infinityforlemmy/activities/SearchActivity.java b/app/src/main/java/eu/toldi/infinityforlemmy/activities/SearchActivity.java index dedfda1f..3a2e3054 100644 --- a/app/src/main/java/eu/toldi/infinityforlemmy/activities/SearchActivity.java +++ b/app/src/main/java/eu/toldi/infinityforlemmy/activities/SearchActivity.java @@ -52,8 +52,10 @@ import eu.toldi.infinityforlemmy.recentsearchquery.RecentSearchQuery; import eu.toldi.infinityforlemmy.recentsearchquery.RecentSearchQueryViewModel; import eu.toldi.infinityforlemmy.subreddit.ParseSubredditData; import eu.toldi.infinityforlemmy.subreddit.SubredditData; +import eu.toldi.infinityforlemmy.subreddit.SubredditWithSelection; import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData; import eu.toldi.infinityforlemmy.utils.APIUtils; +import eu.toldi.infinityforlemmy.utils.LemmyUtils; import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils; import eu.toldi.infinityforlemmy.utils.Utils; import retrofit2.Call; @@ -182,9 +184,9 @@ public class SearchActivity extends BaseActivity { if (searchOnlySubreddits) { Intent returnIntent = new Intent(); if (getIntent().getBooleanExtra(EXTRA_IS_MULTI_SELECTION, false)) { - ArrayList subredditNameList = new ArrayList<>(); - subredditNameList.add(subredditData.getName()); - returnIntent.putStringArrayListExtra(RETURN_EXTRA_SELECTED_SUBREDDIT_NAMES, subredditNameList); + ArrayList subredditNameList = new ArrayList<>(); + subredditNameList.add(new SubredditWithSelection(subredditData.getName(), subredditData.getIconUrl(), LemmyUtils.actorID2FullName(subredditData.getActorId()))); + returnIntent.putParcelableArrayListExtra(RETURN_EXTRA_SELECTED_SUBREDDIT_NAMES, subredditNameList); } else { returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_NAME, new SubscribedSubredditData(subredditData)); returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_ICON_URL, subredditData.getIconUrl()); diff --git a/app/src/main/java/eu/toldi/infinityforlemmy/activities/SelectedSubredditsAndUsersActivity.java b/app/src/main/java/eu/toldi/infinityforlemmy/activities/SelectedSubredditsAndUsersActivity.java index 6e5484af..c661e315 100644 --- a/app/src/main/java/eu/toldi/infinityforlemmy/activities/SelectedSubredditsAndUsersActivity.java +++ b/app/src/main/java/eu/toldi/infinityforlemmy/activities/SelectedSubredditsAndUsersActivity.java @@ -18,7 +18,6 @@ import com.google.android.material.appbar.CollapsingToolbarLayout; import com.google.android.material.floatingactionbutton.FloatingActionButton; import java.util.ArrayList; -import java.util.Collections; import javax.inject.Inject; import javax.inject.Named; @@ -33,6 +32,7 @@ import eu.toldi.infinityforlemmy.bottomsheetfragments.SelectSubredditsOrUsersOpt import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper; import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed; import eu.toldi.infinityforlemmy.customviews.slidr.Slidr; +import eu.toldi.infinityforlemmy.subreddit.SubredditWithSelection; import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils; public class SelectedSubredditsAndUsersActivity extends BaseActivity implements ActivityToolbarInterface { @@ -62,7 +62,7 @@ public class SelectedSubredditsAndUsersActivity extends BaseActivity implements CustomThemeWrapper mCustomThemeWrapper; private LinearLayoutManagerBugFixed linearLayoutManager; private SelectedSubredditsRecyclerViewAdapter adapter; - private ArrayList subreddits; + private ArrayList subreddits; @Override protected void onCreate(Bundle savedInstanceState) { @@ -86,12 +86,11 @@ public class SelectedSubredditsAndUsersActivity extends BaseActivity implements setToolbarGoToTop(toolbar); if (savedInstanceState != null) { - subreddits = savedInstanceState.getStringArrayList(SELECTED_SUBREDDITS_STATE); + subreddits = savedInstanceState.getParcelableArrayList(SELECTED_SUBREDDITS_STATE); } else { - subreddits = getIntent().getStringArrayListExtra(EXTRA_SELECTED_SUBREDDITS); + subreddits = getIntent().getParcelableArrayListExtra(EXTRA_SELECTED_SUBREDDITS); } - Collections.sort(subreddits); adapter = new SelectedSubredditsRecyclerViewAdapter(this, mCustomThemeWrapper, subreddits); linearLayoutManager = new LinearLayoutManagerBugFixed(this); @@ -158,7 +157,7 @@ public class SelectedSubredditsAndUsersActivity extends BaseActivity implements if (subreddits == null) { subreddits = new ArrayList<>(); } - subreddits = data.getStringArrayListExtra(SubredditMultiselectionActivity.EXTRA_RETURN_SELECTED_SUBREDDITS); + subreddits = data.getParcelableArrayListExtra(SubredditMultiselectionActivity.EXTRA_RETURN_SELECTED_SUBREDDITS); adapter.addSubreddits(subreddits); } } else if (requestCode == USER_SELECTION_REQUEST_CODE) { @@ -176,7 +175,7 @@ public class SelectedSubredditsAndUsersActivity extends BaseActivity implements protected void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); if (adapter != null) { - outState.putStringArrayList(SELECTED_SUBREDDITS_STATE, adapter.getSubreddits()); + outState.putParcelableArrayList(SELECTED_SUBREDDITS_STATE, adapter.getSubreddits()); } } diff --git a/app/src/main/java/eu/toldi/infinityforlemmy/activities/SubredditMultiselectionActivity.java b/app/src/main/java/eu/toldi/infinityforlemmy/activities/SubredditMultiselectionActivity.java index 09e4042f..85c1a0cf 100644 --- a/app/src/main/java/eu/toldi/infinityforlemmy/activities/SubredditMultiselectionActivity.java +++ b/app/src/main/java/eu/toldi/infinityforlemmy/activities/SubredditMultiselectionActivity.java @@ -37,13 +37,14 @@ import eu.toldi.infinityforlemmy.ActivityToolbarInterface; import eu.toldi.infinityforlemmy.Infinity; import eu.toldi.infinityforlemmy.R; import eu.toldi.infinityforlemmy.RedditDataRoomDatabase; +import eu.toldi.infinityforlemmy.RetrofitHolder; import eu.toldi.infinityforlemmy.adapters.SubredditMultiselectionRecyclerViewAdapter; import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper; import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed; import eu.toldi.infinityforlemmy.customviews.slidr.Slidr; +import eu.toldi.infinityforlemmy.subreddit.SubredditWithSelection; import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditViewModel; import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils; -import retrofit2.Retrofit; public class SubredditMultiselectionActivity extends BaseActivity implements ActivityToolbarInterface { @@ -70,8 +71,8 @@ public class SubredditMultiselectionActivity extends BaseActivity implements Act @BindView(R.id.error_text_view_subscribed_subreddits_multiselection_activity) TextView mErrorTextView; @Inject - @Named("oauth") - Retrofit mOauthRetrofit; + @Named("no_oauth") + RetrofitHolder mRetrofit; @Inject RedditDataRoomDatabase mRedditDataRoomDatabase; @Inject @@ -131,7 +132,7 @@ public class SubredditMultiselectionActivity extends BaseActivity implements Act mSwipeRefreshLayout.setEnabled(false); - mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, "-"); + mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, "-"); bindView(); } @@ -177,7 +178,7 @@ public class SubredditMultiselectionActivity extends BaseActivity implements Act } else if (itemId == R.id.action_save_subreddit_multiselection_activity) { if (mAdapter != null) { Intent returnIntent = new Intent(); - returnIntent.putStringArrayListExtra(EXTRA_RETURN_SELECTED_SUBREDDITS, + returnIntent.putExtra(EXTRA_RETURN_SELECTED_SUBREDDITS, mAdapter.getAllSelectedSubreddits()); setResult(RESULT_OK, returnIntent); } @@ -198,12 +199,12 @@ public class SubredditMultiselectionActivity extends BaseActivity implements Act super.onActivityResult(requestCode, resultCode, data); if (requestCode == SUBREDDIT_SEARCH_REQUEST_CODE && resultCode == RESULT_OK && data != null && mAdapter != null) { Intent returnIntent = new Intent(); - ArrayList selectedSubreddits = mAdapter.getAllSelectedSubreddits(); - ArrayList searchedSubreddits = data.getStringArrayListExtra(SearchActivity.RETURN_EXTRA_SELECTED_SUBREDDIT_NAMES); + ArrayList selectedSubreddits = mAdapter.getAllSelectedSubreddits(); + ArrayList searchedSubreddits = data.getParcelableArrayListExtra(SearchActivity.RETURN_EXTRA_SELECTED_SUBREDDIT_NAMES); if (searchedSubreddits != null) { selectedSubreddits.addAll(searchedSubreddits); } - returnIntent.putStringArrayListExtra(EXTRA_RETURN_SELECTED_SUBREDDITS, selectedSubreddits); + returnIntent.putParcelableArrayListExtra(EXTRA_RETURN_SELECTED_SUBREDDITS, selectedSubreddits); setResult(RESULT_OK, returnIntent); finish(); } diff --git a/app/src/main/java/eu/toldi/infinityforlemmy/activities/SubscribedThingListingActivity.java b/app/src/main/java/eu/toldi/infinityforlemmy/activities/SubscribedThingListingActivity.java index 337387b5..5bdf214b 100644 --- a/app/src/main/java/eu/toldi/infinityforlemmy/activities/SubscribedThingListingActivity.java +++ b/app/src/main/java/eu/toldi/infinityforlemmy/activities/SubscribedThingListingActivity.java @@ -233,7 +233,7 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti sectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); viewPager.setAdapter(sectionsPagerAdapter); viewPager.setOffscreenPageLimit(1); - if (viewPager.getCurrentItem() != 2) { + if (viewPager.getCurrentItem() != 1) { fab.hide(); } viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @@ -244,7 +244,7 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti fab.hide(); } else { lockSwipeRightToGoBack(); - if (position != 2) { + if (position != 1) { fab.hide(); } else { fab.show(); @@ -476,7 +476,7 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti @Override public Fragment getItem(int position) { switch (position) { - default: + case 0: { SubscribedSubredditsListingFragment fragment = new SubscribedSubredditsListingFragment(); Bundle bundle = new Bundle(); @@ -487,12 +487,20 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti fragment.setArguments(bundle); return fragment; } + default: { + MultiRedditListingFragment fragment = new MultiRedditListingFragment(); + Bundle bundle = new Bundle(); + bundle.putString(MultiRedditListingFragment.EXTRA_ACCESS_TOKEN, mAccessToken); + bundle.putString(MultiRedditListingFragment.EXTRA_ACCOUNT_NAME, mAccountName == null ? "-" : mAccountQualifiedName); + fragment.setArguments(bundle); + return fragment; + } } } @Override public int getCount() { - return 1; + return 2; } @Override @@ -501,8 +509,6 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti case 0: return Utils.getTabTextWithCustomFont(typeface, getString(R.string.communities)); case 1: - return Utils.getTabTextWithCustomFont(typeface, getString(R.string.users)); - case 2: return Utils.getTabTextWithCustomFont(typeface, getString(R.string.multi_reddits)); } @@ -515,8 +521,6 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti Fragment fragment = (Fragment) super.instantiateItem(container, position); if (position == 0) { subscribedSubredditsListingFragment = (SubscribedSubredditsListingFragment) fragment; - } else if (position == 1) { - followedUsersListingFragment = (FollowedUsersListingFragment) fragment; } else { multiRedditListingFragment = (MultiRedditListingFragment) fragment; } diff --git a/app/src/main/java/eu/toldi/infinityforlemmy/adapters/MultiRedditListingRecyclerViewAdapter.java b/app/src/main/java/eu/toldi/infinityforlemmy/adapters/MultiRedditListingRecyclerViewAdapter.java index f9075fe0..3c928fc3 100644 --- a/app/src/main/java/eu/toldi/infinityforlemmy/adapters/MultiRedditListingRecyclerViewAdapter.java +++ b/app/src/main/java/eu/toldi/infinityforlemmy/adapters/MultiRedditListingRecyclerViewAdapter.java @@ -6,7 +6,6 @@ import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; -import android.widget.Toast; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; @@ -20,19 +19,18 @@ import java.util.concurrent.Executor; import butterknife.BindView; import butterknife.ButterKnife; -import jp.wasabeef.glide.transformations.RoundedCornersTransformation; -import me.zhanghai.android.fastscroll.PopupTextProvider; import eu.toldi.infinityforlemmy.R; import eu.toldi.infinityforlemmy.RedditDataRoomDatabase; import eu.toldi.infinityforlemmy.activities.BaseActivity; import eu.toldi.infinityforlemmy.asynctasks.InsertMultireddit; import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper; -import eu.toldi.infinityforlemmy.multireddit.FavoriteMultiReddit; import eu.toldi.infinityforlemmy.multireddit.MultiReddit; +import jp.wasabeef.glide.transformations.RoundedCornersTransformation; +import me.zhanghai.android.fastscroll.PopupTextProvider; import pl.droidsonroids.gif.GifImageView; import retrofit2.Retrofit; -public class MultiRedditListingRecyclerViewAdapter extends RecyclerView.Adapter implements PopupTextProvider { +public class MultiRedditListingRecyclerViewAdapter extends RecyclerView.Adapter implements PopupTextProvider { private static final int VIEW_TYPE_FAVORITE_MULTI_REDDIT_DIVIDER = 0; private static final int VIEW_TYPE_FAVORITE_MULTI_REDDIT = 1; @@ -54,6 +52,7 @@ public class MultiRedditListingRecyclerViewAdapter extends RecyclerView.Adapter< public interface OnItemClickListener { void onClick(MultiReddit multiReddit); + void onLongClick(MultiReddit multiReddit); } @@ -120,80 +119,31 @@ public class MultiRedditListingRecyclerViewAdapter extends RecyclerView.Adapter< MultiReddit multiReddit = mMultiReddits.get(holder.getBindingAdapterPosition() - offset); name = multiReddit.getDisplayName(); iconUrl = multiReddit.getIconUrl(); - if(multiReddit.isFavorite()) { + if (multiReddit.isFavorite()) { ((MultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_24dp); } else { ((MultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_border_24dp); } ((MultiRedditViewHolder) holder).favoriteImageView.setOnClickListener(view -> { - if(multiReddit.isFavorite()) { + if (multiReddit.isFavorite()) { ((MultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_border_24dp); multiReddit.setFavorite(false); - if (mAccessToken == null) { - InsertMultireddit.insertMultireddit(mExecutor, new Handler(), mRedditDataRoomDatabase, multiReddit, - () -> { - //Do nothing - }); - } else { - FavoriteMultiReddit.favoriteMultiReddit(mExecutor, new Handler(), mOauthRetrofit, mRedditDataRoomDatabase, - mAccessToken, false, multiReddit, - new FavoriteMultiReddit.FavoriteMultiRedditListener() { - @Override - public void success() { - int position = holder.getBindingAdapterPosition() - offset; - if(position >= 0 && mMultiReddits.size() > position) { - mMultiReddits.get(position).setFavorite(false); - } - ((MultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_border_24dp); - } - @Override - public void failed() { - Toast.makeText(mActivity, R.string.thing_unfavorite_failed, Toast.LENGTH_SHORT).show(); - int position = holder.getBindingAdapterPosition() - offset; - if(position >= 0 && mMultiReddits.size() > position) { - mMultiReddits.get(position).setFavorite(true); - } - ((MultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_24dp); - } - } - ); - } + InsertMultireddit.insertMultireddit(mExecutor, new Handler(), mRedditDataRoomDatabase, multiReddit, + () -> { + //Do nothing + }); } else { ((MultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_24dp); multiReddit.setFavorite(true); - if (mAccessToken == null) { - InsertMultireddit.insertMultireddit(mExecutor, new Handler(), mRedditDataRoomDatabase, multiReddit, - () -> { - //Do nothing - }); - } else { - FavoriteMultiReddit.favoriteMultiReddit(mExecutor, new Handler(), mOauthRetrofit, mRedditDataRoomDatabase, - mAccessToken, true, multiReddit, - new FavoriteMultiReddit.FavoriteMultiRedditListener() { - @Override - public void success() { - int position = holder.getBindingAdapterPosition() - offset; - if(position >= 0 && mMultiReddits.size() > position) { - mMultiReddits.get(position).setFavorite(true); - } - ((MultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_24dp); - } - @Override - public void failed() { - Toast.makeText(mActivity, R.string.thing_favorite_failed, Toast.LENGTH_SHORT).show(); - int position = holder.getBindingAdapterPosition() - offset; - if(position >= 0 && mMultiReddits.size() > position) { - mMultiReddits.get(position).setFavorite(false); - } - ((MultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_border_24dp); - } - } - ); - } + InsertMultireddit.insertMultireddit(mExecutor, new Handler(), mRedditDataRoomDatabase, multiReddit, + () -> { + //Do nothing + }); } + }); holder.itemView.setOnClickListener(view -> { mOnItemClickListener.onClick(multiReddit); @@ -220,79 +170,29 @@ public class MultiRedditListingRecyclerViewAdapter extends RecyclerView.Adapter< MultiReddit multiReddit = mFavoriteMultiReddits.get(holder.getBindingAdapterPosition() - 1); String name = multiReddit.getDisplayName(); String iconUrl = multiReddit.getIconUrl(); - if(multiReddit.isFavorite()) { + if (multiReddit.isFavorite()) { ((FavoriteMultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_24dp); } else { ((FavoriteMultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_border_24dp); } ((FavoriteMultiRedditViewHolder) holder).favoriteImageView.setOnClickListener(view -> { - if(multiReddit.isFavorite()) { + if (multiReddit.isFavorite()) { ((FavoriteMultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_border_24dp); multiReddit.setFavorite(false); - if (mAccessToken == null) { - InsertMultireddit.insertMultireddit(mExecutor, new Handler(), mRedditDataRoomDatabase, multiReddit, - () -> { - //Do nothing - }); - } else { - FavoriteMultiReddit.favoriteMultiReddit(mExecutor, new Handler(), mOauthRetrofit, mRedditDataRoomDatabase, - mAccessToken, false, multiReddit, - new FavoriteMultiReddit.FavoriteMultiRedditListener() { - @Override - public void success() { - int position = holder.getBindingAdapterPosition() - 1; - if(position >= 0 && mFavoriteMultiReddits.size() > position) { - mFavoriteMultiReddits.get(position).setFavorite(false); - } - ((FavoriteMultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_border_24dp); - } + InsertMultireddit.insertMultireddit(mExecutor, new Handler(), mRedditDataRoomDatabase, multiReddit, + () -> { + //Do nothing + }); - @Override - public void failed() { - Toast.makeText(mActivity, R.string.thing_unfavorite_failed, Toast.LENGTH_SHORT).show(); - int position = holder.getBindingAdapterPosition() - 1; - if(position >= 0 && mFavoriteMultiReddits.size() > position) { - mFavoriteMultiReddits.get(position).setFavorite(true); - } - ((FavoriteMultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_24dp); - } - } - ); - } } else { ((FavoriteMultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_24dp); multiReddit.setFavorite(true); - if (mAccessToken == null) { - InsertMultireddit.insertMultireddit(mExecutor, new Handler(), mRedditDataRoomDatabase, multiReddit, - () -> { - //Do nothing - }); - } else { - FavoriteMultiReddit.favoriteMultiReddit(mExecutor, new Handler(), mOauthRetrofit, mRedditDataRoomDatabase, - mAccessToken, true, multiReddit, - new FavoriteMultiReddit.FavoriteMultiRedditListener() { - @Override - public void success() { - int position = holder.getBindingAdapterPosition() - 1; - if(position >= 0 && mFavoriteMultiReddits.size() > position) { - mFavoriteMultiReddits.get(position).setFavorite(true); - } - ((FavoriteMultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_24dp); - } - @Override - public void failed() { - Toast.makeText(mActivity, R.string.thing_favorite_failed, Toast.LENGTH_SHORT).show(); - int position = holder.getBindingAdapterPosition() - 1; - if(position >= 0 && mFavoriteMultiReddits.size() > position) { - mFavoriteMultiReddits.get(position).setFavorite(false); - } - ((FavoriteMultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_border_24dp); - } - } - ); - } + InsertMultireddit.insertMultireddit(mExecutor, new Handler(), mRedditDataRoomDatabase, multiReddit, + () -> { + //Do nothing + }); } }); holder.itemView.setOnClickListener(view -> { @@ -322,7 +222,7 @@ public class MultiRedditListingRecyclerViewAdapter extends RecyclerView.Adapter< @Override public int getItemCount() { if (mMultiReddits != null) { - if(mFavoriteMultiReddits != null && mFavoriteMultiReddits.size() > 0) { + if (mFavoriteMultiReddits != null && mFavoriteMultiReddits.size() > 0) { return mMultiReddits.size() > 0 ? mFavoriteMultiReddits.size() + mMultiReddits.size() + 2 : 0; } @@ -334,7 +234,7 @@ public class MultiRedditListingRecyclerViewAdapter extends RecyclerView.Adapter< @Override public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) { - if(holder instanceof MultiRedditViewHolder) { + if (holder instanceof MultiRedditViewHolder) { mGlide.clear(((MultiRedditViewHolder) holder).iconImageView); } else if (holder instanceof FavoriteMultiRedditViewHolder) { mGlide.clear(((FavoriteMultiRedditViewHolder) holder).iconImageView); @@ -403,7 +303,8 @@ public class MultiRedditListingRecyclerViewAdapter extends RecyclerView.Adapter< } class FavoriteMultiRedditsDividerViewHolder extends RecyclerView.ViewHolder { - @BindView(R.id.divider_text_view_item_favorite_thing_divider) TextView dividerTextView; + @BindView(R.id.divider_text_view_item_favorite_thing_divider) + TextView dividerTextView; FavoriteMultiRedditsDividerViewHolder(@NonNull View itemView) { super(itemView); @@ -417,7 +318,8 @@ public class MultiRedditListingRecyclerViewAdapter extends RecyclerView.Adapter< } class AllMultiRedditsDividerViewHolder extends RecyclerView.ViewHolder { - @BindView(R.id.divider_text_view_item_favorite_thing_divider) TextView dividerTextView; + @BindView(R.id.divider_text_view_item_favorite_thing_divider) + TextView dividerTextView; AllMultiRedditsDividerViewHolder(@NonNull View itemView) { super(itemView); diff --git a/app/src/main/java/eu/toldi/infinityforlemmy/adapters/SelectedSubredditsRecyclerViewAdapter.java b/app/src/main/java/eu/toldi/infinityforlemmy/adapters/SelectedSubredditsRecyclerViewAdapter.java index 97e0ea07..adbca1f2 100644 --- a/app/src/main/java/eu/toldi/infinityforlemmy/adapters/SelectedSubredditsRecyclerViewAdapter.java +++ b/app/src/main/java/eu/toldi/infinityforlemmy/adapters/SelectedSubredditsRecyclerViewAdapter.java @@ -16,13 +16,14 @@ import butterknife.ButterKnife; import eu.toldi.infinityforlemmy.R; import eu.toldi.infinityforlemmy.activities.BaseActivity; import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper; +import eu.toldi.infinityforlemmy.subreddit.SubredditWithSelection; public class SelectedSubredditsRecyclerViewAdapter extends RecyclerView.Adapter { private BaseActivity activity; private CustomThemeWrapper customThemeWrapper; - private ArrayList subreddits; + private ArrayList subreddits; - public SelectedSubredditsRecyclerViewAdapter(BaseActivity activity, CustomThemeWrapper customThemeWrapper, ArrayList subreddits) { + public SelectedSubredditsRecyclerViewAdapter(BaseActivity activity, CustomThemeWrapper customThemeWrapper, ArrayList subreddits) { this.activity = activity; this.customThemeWrapper = customThemeWrapper; if (subreddits == null) { @@ -42,7 +43,7 @@ public class SelectedSubredditsRecyclerViewAdapter extends RecyclerView.Adapter< @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { if (holder instanceof SubredditViewHolder) { - ((SubredditViewHolder) holder).subredditNameTextView.setText(subreddits.get(holder.getBindingAdapterPosition())); + ((SubredditViewHolder) holder).subredditNameTextView.setText(subreddits.get(holder.getBindingAdapterPosition()).getName()); ((SubredditViewHolder) holder).deleteButton.setOnClickListener(view -> { subreddits.remove(holder.getBindingAdapterPosition()); notifyItemRemoved(holder.getBindingAdapterPosition()); @@ -55,18 +56,18 @@ public class SelectedSubredditsRecyclerViewAdapter extends RecyclerView.Adapter< return subreddits.size(); } - public void addSubreddits(ArrayList newSubreddits) { + public void addSubreddits(ArrayList newSubreddits) { int oldSize = subreddits.size(); subreddits.addAll(newSubreddits); notifyItemRangeInserted(oldSize, newSubreddits.size()); } public void addUserInSubredditType(String username) { - subreddits.add(username); - notifyItemInserted(subreddits.size()); + /*subreddits.add(username); + notifyItemInserted(subreddits.size());*/ } - public ArrayList getSubreddits() { + public ArrayList getSubreddits() { return subreddits; } diff --git a/app/src/main/java/eu/toldi/infinityforlemmy/adapters/SubredditMultiselectionRecyclerViewAdapter.java b/app/src/main/java/eu/toldi/infinityforlemmy/adapters/SubredditMultiselectionRecyclerViewAdapter.java index 2ac7d049..2f04c6f5 100644 --- a/app/src/main/java/eu/toldi/infinityforlemmy/adapters/SubredditMultiselectionRecyclerViewAdapter.java +++ b/app/src/main/java/eu/toldi/infinityforlemmy/adapters/SubredditMultiselectionRecyclerViewAdapter.java @@ -19,12 +19,12 @@ import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; -import jp.wasabeef.glide.transformations.RoundedCornersTransformation; import eu.toldi.infinityforlemmy.R; import eu.toldi.infinityforlemmy.activities.BaseActivity; import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper; import eu.toldi.infinityforlemmy.subreddit.SubredditWithSelection; import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData; +import jp.wasabeef.glide.transformations.RoundedCornersTransformation; import pl.droidsonroids.gif.GifImageView; public class SubredditMultiselectionRecyclerViewAdapter extends RecyclerView.Adapter { @@ -91,11 +91,11 @@ public class SubredditMultiselectionRecyclerViewAdapter extends RecyclerView.Ada notifyDataSetChanged(); } - public ArrayList getAllSelectedSubreddits() { - ArrayList selectedSubreddits = new ArrayList<>(); + public ArrayList getAllSelectedSubreddits() { + ArrayList selectedSubreddits = new ArrayList<>(); for (SubredditWithSelection s : subscribedSubreddits) { if (s.isSelected()) { - selectedSubreddits.add(s.getName()); + selectedSubreddits.add(s); } } return selectedSubreddits; diff --git a/app/src/main/java/eu/toldi/infinityforlemmy/fragments/MultiRedditListingFragment.java b/app/src/main/java/eu/toldi/infinityforlemmy/fragments/MultiRedditListingFragment.java index 7aa806c6..6b53c514 100644 --- a/app/src/main/java/eu/toldi/infinityforlemmy/fragments/MultiRedditListingFragment.java +++ b/app/src/main/java/eu/toldi/infinityforlemmy/fragments/MultiRedditListingFragment.java @@ -29,7 +29,6 @@ import javax.inject.Named; import butterknife.BindView; import butterknife.ButterKnife; -import me.zhanghai.android.fastscroll.FastScrollerBuilder; import eu.toldi.infinityforlemmy.FragmentCommunicator; import eu.toldi.infinityforlemmy.Infinity; import eu.toldi.infinityforlemmy.R; @@ -45,6 +44,7 @@ import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed; import eu.toldi.infinityforlemmy.multireddit.MultiReddit; import eu.toldi.infinityforlemmy.multireddit.MultiRedditViewModel; import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils; +import me.zhanghai.android.fastscroll.FastScrollerBuilder; import retrofit2.Retrofit; public class MultiRedditListingFragment extends Fragment implements FragmentCommunicator { @@ -111,9 +111,9 @@ public class MultiRedditListingFragment extends Fragment implements FragmentComm String accessToken = getArguments().getString(EXTRA_ACCESS_TOKEN); boolean isGettingMultiredditInfo = getArguments().getBoolean(EXTRA_IS_GETTING_MULTIREDDIT_INFO, false); - if (accessToken == null) { - mSwipeRefreshLayout.setEnabled(false); - } + + mSwipeRefreshLayout.setEnabled(false); + mGlide = Glide.with(this); @@ -122,7 +122,7 @@ public class MultiRedditListingFragment extends Fragment implements FragmentComm MultiRedditListingRecyclerViewAdapter adapter = new MultiRedditListingRecyclerViewAdapter(mActivity, mExecutor, mOauthRetrofit, mRedditDataRoomDatabase, mCustomThemeWrapper, accessToken, new MultiRedditListingRecyclerViewAdapter.OnItemClickListener() { - @Override + @Override public void onClick(MultiReddit multiReddit) { if (mActivity instanceof MultiredditSelectionActivity) { ((MultiredditSelectionActivity) mActivity).getSelectedMultireddit(multiReddit); diff --git a/app/src/main/java/eu/toldi/infinityforlemmy/multireddit/CreateMultiReddit.java b/app/src/main/java/eu/toldi/infinityforlemmy/multireddit/CreateMultiReddit.java index 444f8ca9..c17585de 100644 --- a/app/src/main/java/eu/toldi/infinityforlemmy/multireddit/CreateMultiReddit.java +++ b/app/src/main/java/eu/toldi/infinityforlemmy/multireddit/CreateMultiReddit.java @@ -13,6 +13,7 @@ import java.util.concurrent.Executor; import eu.toldi.infinityforlemmy.RedditDataRoomDatabase; import eu.toldi.infinityforlemmy.account.Account; import eu.toldi.infinityforlemmy.apis.RedditAPI; +import eu.toldi.infinityforlemmy.subreddit.SubredditWithSelection; import eu.toldi.infinityforlemmy.utils.APIUtils; import retrofit2.Call; import retrofit2.Callback; @@ -63,7 +64,7 @@ public class CreateMultiReddit { public static void anonymousCreateMultiReddit(Executor executor, Handler handler, RedditDataRoomDatabase redditDataRoomDatabase, String multipath, String name, String description, - List subreddits, + List subreddits, CreateMultiRedditListener createMultiRedditListener) { executor.execute(() -> { if (!redditDataRoomDatabase.accountDao().isAnonymousAccountInserted()) { @@ -72,8 +73,8 @@ public class CreateMultiReddit { redditDataRoomDatabase.multiRedditDao().insert(new MultiReddit(multipath, name, name, description, null, null, "private", "-", 0, System.currentTimeMillis(), true, false, false)); List anonymousMultiredditSubreddits = new ArrayList<>(); - for (String s : subreddits) { - anonymousMultiredditSubreddits.add(new AnonymousMultiredditSubreddit(multipath, s)); + for (SubredditWithSelection s : subreddits) { + anonymousMultiredditSubreddits.add(new AnonymousMultiredditSubreddit(multipath, s.getQualifiedName())); } redditDataRoomDatabase.anonymousMultiredditSubredditDao().insertAll(anonymousMultiredditSubreddits); diff --git a/app/src/main/java/eu/toldi/infinityforlemmy/multireddit/EditMultiReddit.java b/app/src/main/java/eu/toldi/infinityforlemmy/multireddit/EditMultiReddit.java index ff158a52..45598bc7 100644 --- a/app/src/main/java/eu/toldi/infinityforlemmy/multireddit/EditMultiReddit.java +++ b/app/src/main/java/eu/toldi/infinityforlemmy/multireddit/EditMultiReddit.java @@ -11,6 +11,7 @@ import java.util.concurrent.Executor; import eu.toldi.infinityforlemmy.RedditDataRoomDatabase; import eu.toldi.infinityforlemmy.apis.RedditAPI; +import eu.toldi.infinityforlemmy.subreddit.SubredditWithSelection; import eu.toldi.infinityforlemmy.utils.APIUtils; import retrofit2.Call; import retrofit2.Callback; @@ -52,10 +53,10 @@ public class EditMultiReddit { EditMultiRedditListener editMultiRedditListener) { executor.execute(() -> { ArrayList anonymousMultiredditSubreddits = new ArrayList<>(); - ArrayList subreddits = multiReddit.getSubreddits(); + ArrayList subreddits = multiReddit.getSubreddits(); redditDataRoomDatabase.multiRedditDao().insert(multiReddit); - for (String s : subreddits) { - anonymousMultiredditSubreddits.add(new AnonymousMultiredditSubreddit(multiReddit.getPath(), s)); + for (SubredditWithSelection s : subreddits) { + anonymousMultiredditSubreddits.add(new AnonymousMultiredditSubreddit(multiReddit.getPath(), s.getQualifiedName())); } redditDataRoomDatabase.anonymousMultiredditSubredditDao().insertAll(anonymousMultiredditSubreddits); handler.post(editMultiRedditListener::success); diff --git a/app/src/main/java/eu/toldi/infinityforlemmy/multireddit/FetchMultiRedditInfo.java b/app/src/main/java/eu/toldi/infinityforlemmy/multireddit/FetchMultiRedditInfo.java index c0ba1352..94026982 100644 --- a/app/src/main/java/eu/toldi/infinityforlemmy/multireddit/FetchMultiRedditInfo.java +++ b/app/src/main/java/eu/toldi/infinityforlemmy/multireddit/FetchMultiRedditInfo.java @@ -14,8 +14,9 @@ import java.util.concurrent.Executor; import eu.toldi.infinityforlemmy.RedditDataRoomDatabase; import eu.toldi.infinityforlemmy.apis.RedditAPI; -import eu.toldi.infinityforlemmy.utils.JSONUtils; +import eu.toldi.infinityforlemmy.subreddit.SubredditWithSelection; import eu.toldi.infinityforlemmy.utils.APIUtils; +import eu.toldi.infinityforlemmy.utils.JSONUtils; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -55,10 +56,8 @@ public class FetchMultiRedditInfo { MultiReddit multiReddit = redditDataRoomDatabase.multiRedditDao().getMultiReddit(multipath, "-"); ArrayList anonymousMultiredditSubreddits = (ArrayList) redditDataRoomDatabase.anonymousMultiredditSubredditDao().getAllAnonymousMultiRedditSubreddits(multipath); - ArrayList subredditNames = new ArrayList<>(); - for (AnonymousMultiredditSubreddit a : anonymousMultiredditSubreddits) { - subredditNames.add(a.getSubredditName()); - } + ArrayList subredditNames = new ArrayList<>(); + multiReddit.setSubreddits(subredditNames); handler.post(() -> fetchMultiRedditInfoListener.success(multiReddit)); }); @@ -93,11 +92,9 @@ public class FetchMultiRedditInfo { boolean over18 = object.getBoolean(JSONUtils.OVER_18_KEY); boolean isSubscriber = object.getBoolean(JSONUtils.IS_SUBSCRIBER_KEY); boolean isFavorite = object.getBoolean(JSONUtils.IS_FAVORITED_KEY); - ArrayList subreddits = new ArrayList<>(); + ArrayList subreddits = new ArrayList<>(); JSONArray subredditsArray = object.getJSONArray(JSONUtils.SUBREDDITS_KEY); - for (int i = 0; i < subredditsArray.length(); i++) { - subreddits.add(subredditsArray.getJSONObject(i).getString(JSONUtils.NAME_KEY)); - } + multiReddit = new MultiReddit(path, displayName, name, description, copiedFrom, iconUrl, visibility, owner, nSubscribers, createdUTC, over18, isSubscriber, isFavorite, diff --git a/app/src/main/java/eu/toldi/infinityforlemmy/multireddit/MultiReddit.java b/app/src/main/java/eu/toldi/infinityforlemmy/multireddit/MultiReddit.java index 1a118877..f8298b93 100644 --- a/app/src/main/java/eu/toldi/infinityforlemmy/multireddit/MultiReddit.java +++ b/app/src/main/java/eu/toldi/infinityforlemmy/multireddit/MultiReddit.java @@ -12,6 +12,7 @@ import androidx.room.Ignore; import java.util.ArrayList; import eu.toldi.infinityforlemmy.account.Account; +import eu.toldi.infinityforlemmy.subreddit.SubredditWithSelection; @Entity(tableName = "multi_reddits", primaryKeys = {"path", "username"}, foreignKeys = @ForeignKey(entity = Account.class, parentColumns = "username", @@ -48,7 +49,7 @@ public class MultiReddit implements Parcelable { @ColumnInfo(name = "is_favorite") private boolean isFavorite; @Ignore - private ArrayList subreddits; + private ArrayList subreddits; public MultiReddit(@NonNull String path, @NonNull String displayName, @NonNull String name, String description, String copiedFrom, String iconUrl, String visibility, @@ -72,7 +73,7 @@ public class MultiReddit implements Parcelable { public MultiReddit(@NonNull String path, @NonNull String displayName, @NonNull String name, String description, String copiedFrom, String iconUrl, String visibility, @NonNull String owner, int nSubscribers, long createdUTC, boolean over18, - boolean isSubscriber, boolean isFavorite, ArrayList subreddits) { + boolean isSubscriber, boolean isFavorite, ArrayList subreddits) { this.displayName = displayName; this.name = name; this.description = description; @@ -104,7 +105,7 @@ public class MultiReddit implements Parcelable { isSubscriber = in.readByte() != 0; isFavorite = in.readByte() != 0; subreddits = new ArrayList<>(); - in.readStringList(subreddits); + in.readList(subreddits, SubredditWithSelection.class.getClassLoader()); } public static final Creator CREATOR = new Creator<>() { @@ -226,11 +227,11 @@ public class MultiReddit implements Parcelable { isFavorite = favorite; } - public ArrayList getSubreddits() { + public ArrayList getSubreddits() { return subreddits; } - public void setSubreddits(ArrayList subreddits) { + public void setSubreddits(ArrayList subreddits) { this.subreddits = subreddits; } @@ -254,6 +255,6 @@ public class MultiReddit implements Parcelable { parcel.writeByte((byte) (over18 ? 1 : 0)); parcel.writeByte((byte) (isSubscriber ? 1 : 0)); parcel.writeByte((byte) (isFavorite ? 1 : 0)); - parcel.writeStringList(subreddits); + parcel.writeList(subreddits); } } diff --git a/app/src/main/java/eu/toldi/infinityforlemmy/multireddit/ParseMultiReddit.java b/app/src/main/java/eu/toldi/infinityforlemmy/multireddit/ParseMultiReddit.java index b1c57eba..38c4fc8f 100644 --- a/app/src/main/java/eu/toldi/infinityforlemmy/multireddit/ParseMultiReddit.java +++ b/app/src/main/java/eu/toldi/infinityforlemmy/multireddit/ParseMultiReddit.java @@ -9,6 +9,7 @@ import org.json.JSONObject; import java.util.ArrayList; import eu.toldi.infinityforlemmy.RedditDataRoomDatabase; +import eu.toldi.infinityforlemmy.subreddit.SubredditWithSelection; import eu.toldi.infinityforlemmy.utils.JSONUtils; public class ParseMultiReddit { @@ -47,10 +48,8 @@ public class ParseMultiReddit { boolean isFavorited = singleMultiRedditJSON.getBoolean(JSONUtils.IS_FAVORITED_KEY); JSONArray subredditsArray = singleMultiRedditJSON.getJSONArray(JSONUtils.SUBREDDITS_KEY); - ArrayList subreddits = new ArrayList<>(); - for (int j = 0; j < subredditsArray.length(); j++) { - subreddits.add(subredditsArray.getJSONObject(j).getString(JSONUtils.NAME_KEY)); - } + ArrayList subreddits = new ArrayList<>(); + return new MultiReddit(path, displayName, name, description, copiedFrom, iconUrl, visibility, owner, nSubscribers, createdUTC, over18, isSubscriber, diff --git a/app/src/main/java/eu/toldi/infinityforlemmy/post/PostPagingSource.java b/app/src/main/java/eu/toldi/infinityforlemmy/post/PostPagingSource.java index 711dfc96..3773efa9 100644 --- a/app/src/main/java/eu/toldi/infinityforlemmy/post/PostPagingSource.java +++ b/app/src/main/java/eu/toldi/infinityforlemmy/post/PostPagingSource.java @@ -17,6 +17,7 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Objects; import java.util.concurrent.Executor; +import java.util.regex.Pattern; import eu.toldi.infinityforlemmy.RetrofitHolder; import eu.toldi.infinityforlemmy.SortType; @@ -180,9 +181,9 @@ public class PostPagingSource extends ListenableFuturePagingSource(new ArrayList<>(), null, null)); - /* case TYPE_MULTI_REDDIT: - return loadMultiRedditPosts(loadParams, api); - default: + case TYPE_MULTI_REDDIT: + return loadMultipleSubredditPosts(loadParams, api, List.of(multiRedditPath.split(Pattern.quote("+")))); + /* default: return loadAnonymousHomePosts(loadParams, api);*/ } } @@ -294,6 +295,42 @@ public class PostPagingSource extends ListenableFuturePagingSource> loadMultipleSubredditPosts(@NonNull LoadParams loadParams, LemmyAPI api, List communities) { + List>> futures = new ArrayList<>(); + + for (String community : communities) { + ListenableFuture> subredditPost; + + subredditPost = api.getPosts(null, sortType.getType().value, loadParams.getKey(), 25, null, community, false, accessToken); + + ListenableFuture> communityFuture = Futures.transform(subredditPost, + this::transformData, executor); + + ListenableFuture> partialLoadResultFuture = + Futures.catching(communityFuture, HttpException.class, + LoadResult.Error::new, executor); + + futures.add(Futures.catching(partialLoadResultFuture, + IOException.class, LoadResult.Error::new, executor)); + } + + return Futures.transform(Futures.successfulAsList(futures), + results -> { + List combinedPosts = new ArrayList<>(); + for (LoadResult result : results) { + if (result instanceof LoadResult.Page) { + combinedPosts.addAll(((LoadResult.Page) result).getData()); + } else if (result instanceof LoadResult.Error) { + // Handle or propagate the error if needed + return result; + } + } + return new LoadResult.Page<>(combinedPosts, null, null); + }, executor); + } + + /* private ListenableFuture> loadMultiRedditPosts(@NonNull LoadParams loadParams, LemmyAPI api) { ListenableFuture> multiRedditPosts; diff --git a/app/src/main/java/eu/toldi/infinityforlemmy/subreddit/SubredditWithSelection.java b/app/src/main/java/eu/toldi/infinityforlemmy/subreddit/SubredditWithSelection.java index 1d160e7c..67d15ade 100644 --- a/app/src/main/java/eu/toldi/infinityforlemmy/subreddit/SubredditWithSelection.java +++ b/app/src/main/java/eu/toldi/infinityforlemmy/subreddit/SubredditWithSelection.java @@ -9,21 +9,26 @@ import java.util.ArrayList; import java.util.List; import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData; +import eu.toldi.infinityforlemmy.utils.LemmyUtils; public class SubredditWithSelection implements Parcelable { - private String name; - private String iconUrl; + private final String name; + private final String iconUrl; + + private final String qualifiedName; private boolean selected; - public SubredditWithSelection(String name, String iconUrl) { + public SubredditWithSelection(String name, String iconUrl, String qualifiedName) { this.name = name; this.iconUrl = iconUrl; + this.qualifiedName = qualifiedName; selected = false; } protected SubredditWithSelection(Parcel in) { name = in.readString(); iconUrl = in.readString(); + qualifiedName = in.readString(); selected = in.readByte() != 0; } @@ -51,6 +56,10 @@ public class SubredditWithSelection implements Parcelable { return selected; } + public String getQualifiedName() { + return qualifiedName; + } + public void setSelected(boolean selected) { this.selected = selected; } @@ -59,14 +68,14 @@ public class SubredditWithSelection implements Parcelable { List subscribedSubredditData) { ArrayList subredditWithSelections = new ArrayList<>(); for (SubscribedSubredditData s : subscribedSubredditData) { - subredditWithSelections.add(new SubredditWithSelection(s.getName(), s.getIconUrl())); + subredditWithSelections.add(new SubredditWithSelection(s.getName(), s.getIconUrl(), s.getQualified_name())); } return subredditWithSelections; } public static SubredditWithSelection convertSubreddit(SubredditData subreddit) { - return new SubredditWithSelection(subreddit.getName(), subreddit.getIconUrl()); + return new SubredditWithSelection(subreddit.getName(), subreddit.getIconUrl(), LemmyUtils.actorID2FullName(subreddit.getActorId())); } public int compareName(SubredditWithSelection subredditWithSelection) { @@ -95,6 +104,7 @@ public class SubredditWithSelection implements Parcelable { public void writeToParcel(Parcel parcel, int i) { parcel.writeString(name); parcel.writeString(iconUrl); + parcel.writeString(qualifiedName); parcel.writeByte((byte) (selected ? 1 : 0)); } }