mirror of
https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
synced 2025-02-07 15:14:47 +01:00
Compare commits
22 Commits
709b5dddaf
...
0ac65d2fd5
Author | SHA1 | Date | |
---|---|---|---|
|
0ac65d2fd5 | ||
|
9f513b2b4e | ||
|
79e59b9b89 | ||
|
bde6b3a753 | ||
|
f658d70149 | ||
|
3d5c936fa3 | ||
|
e7f84b8aed | ||
|
ba5b533cb9 | ||
|
133dc4a69c | ||
|
0fd7203fa3 | ||
|
1a1b92bb72 | ||
|
715f371440 | ||
|
b1164921a0 | ||
|
b69245aedc | ||
|
3dc94a05c7 | ||
|
d0849e9f27 | ||
|
2ea47cf7fd | ||
|
6d23f4e13d | ||
|
8a9102bc8a | ||
|
40a9091b7d | ||
|
af7148ce58 | ||
|
ff0bacff1d |
Binary file not shown.
Before Width: | Height: | Size: 20 KiB |
@ -27,9 +27,6 @@ A Lemmy client for Android written in Java. It's a fork of the [Infinity for Red
|
|||||||
<img src="./.assets/google-play-badge.png" height="80">
|
<img src="./.assets/google-play-badge.png" height="80">
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<a href="https://apt.izzysoft.de/fdroid/index/apk/eu.toldi.infinityforlemmy">
|
|
||||||
<img src="./.assets/IzzyOnDroid.png" height="80">
|
|
||||||
</a>
|
|
||||||
<a href="https://codeberg.org/Bazsalanszky/Eternity/releases/">
|
<a href="https://codeberg.org/Bazsalanszky/Eternity/releases/">
|
||||||
<img src="./.assets/codeberg.png" height="80">
|
<img src="./.assets/codeberg.png" height="80">
|
||||||
</a>
|
</a>
|
||||||
|
@ -323,7 +323,7 @@
|
|||||||
<data android:host="feddit.de" />
|
<data android:host="feddit.de" />
|
||||||
<data android:host="lemmy.fmhy.ml" />
|
<data android:host="lemmy.fmhy.ml" />
|
||||||
<data android:host="lemmy.ca" />
|
<data android:host="lemmy.ca" />
|
||||||
<data android:host="www.hexbear.net" />
|
<data android:host="hexbear.net" />
|
||||||
<data android:host="programming.dev" />
|
<data android:host="programming.dev" />
|
||||||
<data android:host="lemmy.dbzer0.com" />
|
<data android:host="lemmy.dbzer0.com" />
|
||||||
<data android:host="lemmy.blahaj.zone" />
|
<data android:host="lemmy.blahaj.zone" />
|
||||||
|
@ -1,99 +0,0 @@
|
|||||||
package eu.toldi.infinityforlemmy;
|
|
||||||
|
|
||||||
import android.os.AsyncTask;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
|
|
||||||
import org.json.JSONException;
|
|
||||||
import org.json.JSONObject;
|
|
||||||
|
|
||||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
|
|
||||||
import eu.toldi.infinityforlemmy.utils.LemmyUtils;
|
|
||||||
import retrofit2.Call;
|
|
||||||
import retrofit2.Callback;
|
|
||||||
import retrofit2.Retrofit;
|
|
||||||
|
|
||||||
public class FetchMyInfo {
|
|
||||||
|
|
||||||
public static void fetchAccountInfo(final Retrofit retrofit, RedditDataRoomDatabase redditDataRoomDatabase,
|
|
||||||
String username,String accessToken, final FetchMyInfoListener fetchMyInfoListener) {
|
|
||||||
LemmyAPI api = retrofit.create(LemmyAPI.class);
|
|
||||||
|
|
||||||
Call<String> userInfo = api.userInfo(username,accessToken);
|
|
||||||
userInfo.enqueue(new Callback<String>() {
|
|
||||||
@Override
|
|
||||||
public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
|
|
||||||
if (response.isSuccessful()) {
|
|
||||||
new ParseAndSaveAccountInfoAsyncTask(response.body(), redditDataRoomDatabase, fetchMyInfoListener).execute();
|
|
||||||
} else {
|
|
||||||
fetchMyInfoListener.onFetchMyInfoFailed(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
|
|
||||||
fetchMyInfoListener.onFetchMyInfoFailed(false);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public interface FetchMyInfoListener {
|
|
||||||
void onFetchMyInfoSuccess(String name, String display_name,String profileImageUrl, String bannerImageUrl);
|
|
||||||
|
|
||||||
void onFetchMyInfoFailed(boolean parseFailed);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class ParseAndSaveAccountInfoAsyncTask extends AsyncTask<Void, Void, Void> {
|
|
||||||
private JSONObject jsonResponse;
|
|
||||||
private RedditDataRoomDatabase redditDataRoomDatabase;
|
|
||||||
private FetchMyInfoListener fetchMyInfoListener;
|
|
||||||
private boolean parseFailed;
|
|
||||||
|
|
||||||
private String name;
|
|
||||||
private String profileImageUrl;
|
|
||||||
private String bannerImageUrl;
|
|
||||||
|
|
||||||
private String display_name;
|
|
||||||
|
|
||||||
ParseAndSaveAccountInfoAsyncTask(String response, RedditDataRoomDatabase redditDataRoomDatabase,
|
|
||||||
FetchMyInfoListener fetchMyInfoListener) {
|
|
||||||
try {
|
|
||||||
jsonResponse = new JSONObject(response);
|
|
||||||
this.redditDataRoomDatabase = redditDataRoomDatabase;
|
|
||||||
this.fetchMyInfoListener = fetchMyInfoListener;
|
|
||||||
parseFailed = false;
|
|
||||||
} catch (JSONException e) {
|
|
||||||
fetchMyInfoListener.onFetchMyInfoFailed(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Void doInBackground(Void... voids) {
|
|
||||||
try {
|
|
||||||
JSONObject person = jsonResponse.getJSONObject("person_view").getJSONObject("person");
|
|
||||||
|
|
||||||
name = LemmyUtils.actorID2FullName(person.getString("actor_id"));
|
|
||||||
if (!person.isNull("avatar")) {
|
|
||||||
profileImageUrl = person.getString("avatar");
|
|
||||||
}
|
|
||||||
if (!person.isNull("banner")) {
|
|
||||||
bannerImageUrl = person.getString("banner");
|
|
||||||
}
|
|
||||||
display_name = (person.has("display_name")) ? person.getString("display_name") : person.getString("name");
|
|
||||||
redditDataRoomDatabase.accountDao().updateAccountInfo(name, profileImageUrl, bannerImageUrl);
|
|
||||||
} catch (JSONException e) {
|
|
||||||
parseFailed = true;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onPostExecute(Void aVoid) {
|
|
||||||
if (!parseFailed) {
|
|
||||||
fetchMyInfoListener.onFetchMyInfoSuccess(name,display_name, profileImageUrl, bannerImageUrl);
|
|
||||||
} else {
|
|
||||||
fetchMyInfoListener.onFetchMyInfoFailed(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -49,7 +49,7 @@ public class FetchPostFilterReadPostsAndConcatenatedSubredditNames {
|
|||||||
if (anonymousSubscribedSubreddits != null && !anonymousSubscribedSubreddits.isEmpty()) {
|
if (anonymousSubscribedSubreddits != null && !anonymousSubscribedSubreddits.isEmpty()) {
|
||||||
StringBuilder stringBuilder = new StringBuilder();
|
StringBuilder stringBuilder = new StringBuilder();
|
||||||
for (SubscribedSubredditData s : anonymousSubscribedSubreddits) {
|
for (SubscribedSubredditData s : anonymousSubscribedSubreddits) {
|
||||||
stringBuilder.append(s.getName()).append("+");
|
stringBuilder.append(s.getQualified_name()).append(",");
|
||||||
}
|
}
|
||||||
if (stringBuilder.length() > 0) {
|
if (stringBuilder.length() > 0) {
|
||||||
stringBuilder.deleteCharAt(stringBuilder.length() - 1);
|
stringBuilder.deleteCharAt(stringBuilder.length() - 1);
|
||||||
|
@ -35,8 +35,8 @@ public class SortType {
|
|||||||
NEW("New", "New"),
|
NEW("New", "New"),
|
||||||
OLD("Old", "Old"),
|
OLD("Old", "Old"),
|
||||||
TOP("Top", "Top"),
|
TOP("Top", "Top"),
|
||||||
MOST_COMMENTS("MostCommentes", "Most Commentes"),
|
MOST_COMMENTS("MostComments", "Most Comments"),
|
||||||
NEW_COMMENTS("NewCommentes", "New Commentes"),
|
NEW_COMMENTS("NewComments", "New Comments"),
|
||||||
|
|
||||||
TOP_HOUR("TopHour", "Top"),
|
TOP_HOUR("TopHour", "Top"),
|
||||||
TOP_SIX_HOURS("TopSixHour", "Top"),
|
TOP_SIX_HOURS("TopSixHour", "Top"),
|
||||||
@ -48,7 +48,10 @@ public class SortType {
|
|||||||
TOP_SIX_MONTHS("TopSixMonths", "Top"),
|
TOP_SIX_MONTHS("TopSixMonths", "Top"),
|
||||||
TOP_NINE_MONTHS("TopNineMonths", "Top"),
|
TOP_NINE_MONTHS("TopNineMonths", "Top"),
|
||||||
TOP_YEAR("TopYear", "Top"),
|
TOP_YEAR("TopYear", "Top"),
|
||||||
TOP_ALL("TopAll", "Top");
|
TOP_ALL("TopAll", "Top"),
|
||||||
|
|
||||||
|
SCALED("Scaled", "Scaled"),
|
||||||
|
CONTROVERSIAL("Controversial", "Controversial");
|
||||||
|
|
||||||
public final String value;
|
public final String value;
|
||||||
public final String fullName;
|
public final String fullName;
|
||||||
|
@ -34,13 +34,13 @@ import butterknife.ButterKnife;
|
|||||||
import eu.toldi.infinityforlemmy.Infinity;
|
import eu.toldi.infinityforlemmy.Infinity;
|
||||||
import eu.toldi.infinityforlemmy.R;
|
import eu.toldi.infinityforlemmy.R;
|
||||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
||||||
|
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||||
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
||||||
import eu.toldi.infinityforlemmy.multireddit.CreateMultiReddit;
|
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.SharedPreferencesUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||||
import retrofit2.Retrofit;
|
|
||||||
|
|
||||||
public class CreateMultiRedditActivity extends BaseActivity {
|
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)
|
@BindView(R.id.select_subreddit_text_view_create_multi_reddit_activity)
|
||||||
TextView selectSubredditTextView;
|
TextView selectSubredditTextView;
|
||||||
@Inject
|
@Inject
|
||||||
@Named("oauth")
|
@Named("no_oauth")
|
||||||
Retrofit mOauthRetrofit;
|
RetrofitHolder mRetrofit;
|
||||||
@Inject
|
@Inject
|
||||||
RedditDataRoomDatabase mRedditDataRoomDatabase;
|
RedditDataRoomDatabase mRedditDataRoomDatabase;
|
||||||
@Inject
|
@Inject
|
||||||
@ -87,7 +87,7 @@ public class CreateMultiRedditActivity extends BaseActivity {
|
|||||||
Executor mExecutor;
|
Executor mExecutor;
|
||||||
private String mAccessToken;
|
private String mAccessToken;
|
||||||
private String mAccountName;
|
private String mAccountName;
|
||||||
private ArrayList<String> mSubreddits;
|
private ArrayList<SubredditWithSelection> mSubreddits;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
@ -114,10 +114,10 @@ public class CreateMultiRedditActivity extends BaseActivity {
|
|||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
|
||||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, "-");
|
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, "-");
|
||||||
|
|
||||||
if (mAccessToken == null) {
|
|
||||||
visibilityLinearLayout.setVisibility(View.GONE);
|
visibilityLinearLayout.setVisibility(View.GONE);
|
||||||
|
if (mAccessToken == null) {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
nameEditText.setImeOptions(nameEditText.getImeOptions() | EditorInfoCompat.IME_FLAG_NO_PERSONALIZED_LEARNING);
|
nameEditText.setImeOptions(nameEditText.getImeOptions() | EditorInfoCompat.IME_FLAG_NO_PERSONALIZED_LEARNING);
|
||||||
descriptionEditText.setImeOptions(descriptionEditText.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) {
|
if (savedInstanceState != null) {
|
||||||
mSubreddits = savedInstanceState.getStringArrayList(SELECTED_SUBREDDITS_STATE);
|
mSubreddits = savedInstanceState.getParcelableArrayList(SELECTED_SUBREDDITS_STATE);
|
||||||
} else {
|
} else {
|
||||||
mSubreddits = new ArrayList<>();
|
mSubreddits = new ArrayList<>();
|
||||||
}
|
}
|
||||||
@ -135,7 +135,7 @@ public class CreateMultiRedditActivity extends BaseActivity {
|
|||||||
private void bindView() {
|
private void bindView() {
|
||||||
selectSubredditTextView.setOnClickListener(view -> {
|
selectSubredditTextView.setOnClickListener(view -> {
|
||||||
Intent intent = new Intent(CreateMultiRedditActivity.this, SelectedSubredditsAndUsersActivity.class);
|
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);
|
startActivityForResult(intent, SUBREDDIT_SELECTION_REQUEST_CODE);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -159,29 +159,17 @@ public class CreateMultiRedditActivity extends BaseActivity {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mAccessToken != null) {
|
// Create a list of community qualified names seperated by a comma
|
||||||
String jsonModel = new MultiRedditJSONModel(nameEditText.getText().toString(), descriptionEditText.getText().toString(),
|
StringBuilder subredditList = new StringBuilder();
|
||||||
visibilitySwitch.isChecked(), mSubreddits).createJSONModel();
|
String prefix = "";
|
||||||
CreateMultiReddit.createMultiReddit(mOauthRetrofit, mRedditDataRoomDatabase, mAccessToken,
|
for (SubredditWithSelection s : mSubreddits) {
|
||||||
"/user/" + mAccountName + "/m/" + nameEditText.getText().toString(),
|
subredditList.append(prefix);
|
||||||
jsonModel, new CreateMultiReddit.CreateMultiRedditListener() {
|
prefix = ",";
|
||||||
@Override
|
subredditList.append(s.getQualifiedName());
|
||||||
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,
|
CreateMultiReddit.anonymousCreateMultiReddit(mExecutor, new Handler(), mRedditDataRoomDatabase,
|
||||||
"/user/-/m/" + nameEditText.getText().toString(),
|
mAccountName, subredditList.toString(),
|
||||||
nameEditText.getText().toString(), descriptionEditText.getText().toString(),
|
nameEditText.getText().toString(), descriptionEditText.getText().toString(),
|
||||||
mSubreddits, new CreateMultiReddit.CreateMultiRedditListener() {
|
mSubreddits, new CreateMultiReddit.CreateMultiRedditListener() {
|
||||||
@Override
|
@Override
|
||||||
@ -195,7 +183,6 @@ public class CreateMultiRedditActivity extends BaseActivity {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -204,7 +191,7 @@ public class CreateMultiRedditActivity extends BaseActivity {
|
|||||||
super.onActivityResult(requestCode, resultCode, data);
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE && resultCode == RESULT_OK) {
|
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE && resultCode == RESULT_OK) {
|
||||||
if (data != null) {
|
if (data != null) {
|
||||||
mSubreddits = data.getStringArrayListExtra(
|
mSubreddits = data.getParcelableArrayListExtra(
|
||||||
SubredditMultiselectionActivity.EXTRA_RETURN_SELECTED_SUBREDDITS);
|
SubredditMultiselectionActivity.EXTRA_RETURN_SELECTED_SUBREDDITS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -213,7 +200,7 @@ public class CreateMultiRedditActivity extends BaseActivity {
|
|||||||
@Override
|
@Override
|
||||||
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
||||||
super.onSaveInstanceState(outState);
|
super.onSaveInstanceState(outState);
|
||||||
outState.putStringArrayList(SELECTED_SUBREDDITS_STATE, mSubreddits);
|
outState.putParcelableArrayList(SELECTED_SUBREDDITS_STATE, mSubreddits);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -12,7 +12,6 @@ import android.view.View;
|
|||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.ProgressBar;
|
import android.widget.ProgressBar;
|
||||||
import android.widget.Switch;
|
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
@ -25,6 +24,7 @@ import com.google.android.material.appbar.AppBarLayout;
|
|||||||
import com.google.android.material.appbar.CollapsingToolbarLayout;
|
import com.google.android.material.appbar.CollapsingToolbarLayout;
|
||||||
import com.google.android.material.snackbar.Snackbar;
|
import com.google.android.material.snackbar.Snackbar;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
@ -40,7 +40,7 @@ import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
|||||||
import eu.toldi.infinityforlemmy.multireddit.EditMultiReddit;
|
import eu.toldi.infinityforlemmy.multireddit.EditMultiReddit;
|
||||||
import eu.toldi.infinityforlemmy.multireddit.FetchMultiRedditInfo;
|
import eu.toldi.infinityforlemmy.multireddit.FetchMultiRedditInfo;
|
||||||
import eu.toldi.infinityforlemmy.multireddit.MultiReddit;
|
import eu.toldi.infinityforlemmy.multireddit.MultiReddit;
|
||||||
import eu.toldi.infinityforlemmy.multireddit.MultiRedditJSONModel;
|
import eu.toldi.infinityforlemmy.subreddit.SubredditWithSelection;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
@ -70,12 +70,6 @@ public class EditMultiRedditActivity extends BaseActivity {
|
|||||||
EditText descriptionEditText;
|
EditText descriptionEditText;
|
||||||
@BindView(R.id.divider_2_edit_multi_reddit_activity)
|
@BindView(R.id.divider_2_edit_multi_reddit_activity)
|
||||||
View divider2;
|
View divider2;
|
||||||
@BindView(R.id.visibility_wrapper_linear_layout_edit_multi_reddit_activity)
|
|
||||||
LinearLayout visibilityLinearLayout;
|
|
||||||
@BindView(R.id.visibility_text_view_edit_multi_reddit_activity)
|
|
||||||
TextView visibilityTextView;
|
|
||||||
@BindView(R.id.visibility_switch_edit_multi_reddit_activity)
|
|
||||||
Switch visibilitySwitch;
|
|
||||||
@BindView(R.id.select_subreddit_text_view_edit_multi_reddit_activity)
|
@BindView(R.id.select_subreddit_text_view_edit_multi_reddit_activity)
|
||||||
TextView selectSubredditTextView;
|
TextView selectSubredditTextView;
|
||||||
@Inject
|
@Inject
|
||||||
@ -123,10 +117,9 @@ public class EditMultiRedditActivity extends BaseActivity {
|
|||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
|
||||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, "-");
|
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, "-");
|
||||||
|
|
||||||
if (mAccessToken == null) {
|
if (mAccessToken == null) {
|
||||||
visibilityLinearLayout.setVisibility(View.GONE);
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
nameEditText.setImeOptions(nameEditText.getImeOptions() | EditorInfoCompat.IME_FLAG_NO_PERSONALIZED_LEARNING);
|
nameEditText.setImeOptions(nameEditText.getImeOptions() | EditorInfoCompat.IME_FLAG_NO_PERSONALIZED_LEARNING);
|
||||||
descriptionEditText.setImeOptions(descriptionEditText.getImeOptions() | EditorInfoCompat.IME_FLAG_NO_PERSONALIZED_LEARNING);
|
descriptionEditText.setImeOptions(descriptionEditText.getImeOptions() | EditorInfoCompat.IME_FLAG_NO_PERSONALIZED_LEARNING);
|
||||||
@ -145,9 +138,9 @@ public class EditMultiRedditActivity extends BaseActivity {
|
|||||||
|
|
||||||
private void bindView() {
|
private void bindView() {
|
||||||
if (multiReddit == null) {
|
if (multiReddit == null) {
|
||||||
if (mAccessToken == null) {
|
|
||||||
FetchMultiRedditInfo.anonymousFetchMultiRedditInfo(mExecutor, new Handler(),
|
FetchMultiRedditInfo.anonymousFetchMultiRedditInfo(mExecutor, new Handler(),
|
||||||
mRedditDataRoomDatabase, multipath, new FetchMultiRedditInfo.FetchMultiRedditInfoListener() {
|
mRedditDataRoomDatabase, multipath, mAccountName, new FetchMultiRedditInfo.FetchMultiRedditInfoListener() {
|
||||||
@Override
|
@Override
|
||||||
public void success(MultiReddit multiReddit) {
|
public void success(MultiReddit multiReddit) {
|
||||||
EditMultiRedditActivity.this.multiReddit = multiReddit;
|
EditMultiRedditActivity.this.multiReddit = multiReddit;
|
||||||
@ -162,36 +155,27 @@ public class EditMultiRedditActivity extends BaseActivity {
|
|||||||
//Will not be called
|
//Will not be called
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
|
||||||
FetchMultiRedditInfo.fetchMultiRedditInfo(mRetrofit, mAccessToken, multipath, new FetchMultiRedditInfo.FetchMultiRedditInfoListener() {
|
|
||||||
@Override
|
|
||||||
public void success(MultiReddit multiReddit) {
|
|
||||||
EditMultiRedditActivity.this.multiReddit = multiReddit;
|
|
||||||
progressBar.setVisibility(View.GONE);
|
|
||||||
linearLayout.setVisibility(View.VISIBLE);
|
|
||||||
nameEditText.setText(multiReddit.getDisplayName());
|
|
||||||
descriptionEditText.setText(multiReddit.getDescription());
|
|
||||||
visibilitySwitch.setChecked(!multiReddit.getVisibility().equals("public"));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void failed() {
|
|
||||||
Snackbar.make(coordinatorLayout, R.string.cannot_fetch_multireddit, Snackbar.LENGTH_SHORT).show();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
progressBar.setVisibility(View.GONE);
|
progressBar.setVisibility(View.GONE);
|
||||||
linearLayout.setVisibility(View.VISIBLE);
|
linearLayout.setVisibility(View.VISIBLE);
|
||||||
nameEditText.setText(multiReddit.getDisplayName());
|
nameEditText.setText(multiReddit.getDisplayName());
|
||||||
descriptionEditText.setText(multiReddit.getDescription());
|
descriptionEditText.setText(multiReddit.getDescription());
|
||||||
visibilitySwitch.setChecked(!multiReddit.getVisibility().equals("public"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
selectSubredditTextView.setOnClickListener(view -> {
|
selectSubredditTextView.setOnClickListener(view -> {
|
||||||
Intent intent = new Intent(EditMultiRedditActivity.this, SelectedSubredditsAndUsersActivity.class);
|
Intent intent = new Intent(EditMultiRedditActivity.this, SelectedSubredditsAndUsersActivity.class);
|
||||||
if (multiReddit.getSubreddits() != null) {
|
if (multiReddit.getSubreddits() != null) {
|
||||||
intent.putStringArrayListExtra(SelectedSubredditsAndUsersActivity.EXTRA_SELECTED_SUBREDDITS, multiReddit.getSubreddits());
|
if (multiReddit.getSubreddits().isEmpty() && !multiReddit.getPath().equals("")) {
|
||||||
|
String[] communities = multiReddit.getPath().split(",");
|
||||||
|
ArrayList<SubredditWithSelection> communitiesList = new ArrayList<>();
|
||||||
|
for (String community : communities) {
|
||||||
|
communitiesList.add(new SubredditWithSelection(community.substring(0, community.indexOf('@')), null, community));
|
||||||
|
}
|
||||||
|
intent.putParcelableArrayListExtra(SelectedSubredditsAndUsersActivity.EXTRA_SELECTED_SUBREDDITS, communitiesList);
|
||||||
|
} else {
|
||||||
|
intent.putParcelableArrayListExtra(SelectedSubredditsAndUsersActivity.EXTRA_SELECTED_SUBREDDITS, multiReddit.getSubreddits());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
startActivityForResult(intent, SUBREDDIT_SELECTION_REQUEST_CODE);
|
startActivityForResult(intent, SUBREDDIT_SELECTION_REQUEST_CODE);
|
||||||
});
|
});
|
||||||
@ -216,13 +200,23 @@ public class EditMultiRedditActivity extends BaseActivity {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mAccessToken == null) {
|
|
||||||
String name = nameEditText.getText().toString();
|
String name = nameEditText.getText().toString();
|
||||||
multiReddit.setDisplayName(name);
|
multiReddit.setDisplayName(name);
|
||||||
multiReddit.setName(name);
|
multiReddit.setName(name);
|
||||||
multiReddit.setDescription(descriptionEditText.getText().toString());
|
multiReddit.setDescription(descriptionEditText.getText().toString());
|
||||||
|
StringBuilder pathStringBuilder = new StringBuilder();
|
||||||
|
String prefix = "";
|
||||||
|
for (SubredditWithSelection s : multiReddit.getSubreddits()) {
|
||||||
|
pathStringBuilder.append(prefix);
|
||||||
|
prefix = ",";
|
||||||
|
pathStringBuilder.append(s.getQualifiedName());
|
||||||
|
}
|
||||||
|
|
||||||
|
multiReddit.setPath(pathStringBuilder.toString());
|
||||||
|
|
||||||
EditMultiReddit.anonymousEditMultiReddit(mExecutor, new Handler(), mRedditDataRoomDatabase,
|
EditMultiReddit.anonymousEditMultiReddit(mExecutor, new Handler(), mRedditDataRoomDatabase,
|
||||||
multiReddit, new EditMultiReddit.EditMultiRedditListener() {
|
multiReddit, multipath, new EditMultiReddit.EditMultiRedditListener() {
|
||||||
@Override
|
@Override
|
||||||
public void success() {
|
public void success() {
|
||||||
finish();
|
finish();
|
||||||
@ -233,22 +227,7 @@ public class EditMultiRedditActivity extends BaseActivity {
|
|||||||
//Will not be called
|
//Will not be called
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
|
||||||
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() {
|
|
||||||
@Override
|
|
||||||
public void success() {
|
|
||||||
finish();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void failed() {
|
|
||||||
Snackbar.make(coordinatorLayout, R.string.edit_multi_reddit_failed, Snackbar.LENGTH_SHORT).show();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -259,7 +238,7 @@ public class EditMultiRedditActivity extends BaseActivity {
|
|||||||
super.onActivityResult(requestCode, resultCode, data);
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE && resultCode == RESULT_OK) {
|
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE && resultCode == RESULT_OK) {
|
||||||
if (data != null) {
|
if (data != null) {
|
||||||
multiReddit.setSubreddits(data.getStringArrayListExtra(
|
multiReddit.setSubreddits(data.getParcelableArrayListExtra(
|
||||||
SelectedSubredditsAndUsersActivity.EXTRA_RETURN_SELECTED_SUBREDDITS));
|
SelectedSubredditsAndUsersActivity.EXTRA_RETURN_SELECTED_SUBREDDITS));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -296,7 +275,6 @@ public class EditMultiRedditActivity extends BaseActivity {
|
|||||||
divider2.setBackgroundColor(dividerColor);
|
divider2.setBackgroundColor(dividerColor);
|
||||||
descriptionEditText.setTextColor(primaryTextColor);
|
descriptionEditText.setTextColor(primaryTextColor);
|
||||||
descriptionEditText.setHintTextColor(secondaryTextColor);
|
descriptionEditText.setHintTextColor(secondaryTextColor);
|
||||||
visibilityTextView.setTextColor(primaryTextColor);
|
|
||||||
selectSubredditTextView.setTextColor(primaryTextColor);
|
selectSubredditTextView.setTextColor(primaryTextColor);
|
||||||
|
|
||||||
if (typeface != null) {
|
if (typeface != null) {
|
||||||
|
@ -371,20 +371,17 @@ public class FilteredPostsActivity extends BaseActivity implements SortTypeSelec
|
|||||||
} else if (itemId == R.id.action_sort_filtered_thing_activity) {
|
} else if (itemId == R.id.action_sort_filtered_thing_activity) {
|
||||||
switch (postType) {
|
switch (postType) {
|
||||||
case PostPagingSource.TYPE_FRONT_PAGE:
|
case PostPagingSource.TYPE_FRONT_PAGE:
|
||||||
SortTypeBottomSheetFragment bestSortTypeBottomSheetFragment = SortTypeBottomSheetFragment.getNewInstance(false, mFragment.getSortType());
|
case PostPagingSource.TYPE_SUBREDDIT:
|
||||||
|
case PostPagingSource.TYPE_MULTI_REDDIT:
|
||||||
|
case PostPagingSource.TYPE_ANONYMOUS_MULTIREDDIT:
|
||||||
|
case PostPagingSource.TYPE_ANONYMOUS_FRONT_PAGE:
|
||||||
|
SortTypeBottomSheetFragment bestSortTypeBottomSheetFragment = SortTypeBottomSheetFragment.getNewInstance(postType, mFragment.getSortType());
|
||||||
bestSortTypeBottomSheetFragment.show(getSupportFragmentManager(), bestSortTypeBottomSheetFragment.getTag());
|
bestSortTypeBottomSheetFragment.show(getSupportFragmentManager(), bestSortTypeBottomSheetFragment.getTag());
|
||||||
break;
|
break;
|
||||||
case PostPagingSource.TYPE_SEARCH:
|
case PostPagingSource.TYPE_SEARCH:
|
||||||
SearchPostSortTypeBottomSheetFragment searchPostSortTypeBottomSheetFragment = SearchPostSortTypeBottomSheetFragment.getNewInstance(mFragment.getSortType());
|
SearchPostSortTypeBottomSheetFragment searchPostSortTypeBottomSheetFragment = SearchPostSortTypeBottomSheetFragment.getNewInstance(mFragment.getSortType());
|
||||||
searchPostSortTypeBottomSheetFragment.show(getSupportFragmentManager(), searchPostSortTypeBottomSheetFragment.getTag());
|
searchPostSortTypeBottomSheetFragment.show(getSupportFragmentManager(), searchPostSortTypeBottomSheetFragment.getTag());
|
||||||
break;
|
break;
|
||||||
case PostPagingSource.TYPE_SUBREDDIT:
|
|
||||||
case PostPagingSource.TYPE_MULTI_REDDIT:
|
|
||||||
case PostPagingSource.TYPE_ANONYMOUS_MULTIREDDIT:
|
|
||||||
case PostPagingSource.TYPE_ANONYMOUS_FRONT_PAGE:
|
|
||||||
SortTypeBottomSheetFragment sortTypeBottomSheetFragment = SortTypeBottomSheetFragment.getNewInstance(true, mFragment.getSortType());
|
|
||||||
sortTypeBottomSheetFragment.show(getSupportFragmentManager(), sortTypeBottomSheetFragment.getTag());
|
|
||||||
break;
|
|
||||||
case PostPagingSource.TYPE_USER:
|
case PostPagingSource.TYPE_USER:
|
||||||
UserThingSortTypeBottomSheetFragment userThingSortTypeBottomSheetFragment = UserThingSortTypeBottomSheetFragment.getNewInstance(mFragment.getSortType());
|
UserThingSortTypeBottomSheetFragment userThingSortTypeBottomSheetFragment = UserThingSortTypeBottomSheetFragment.getNewInstance(mFragment.getSortType());
|
||||||
userThingSortTypeBottomSheetFragment.show(getSupportFragmentManager(), userThingSortTypeBottomSheetFragment.getTag());
|
userThingSortTypeBottomSheetFragment.show(getSupportFragmentManager(), userThingSortTypeBottomSheetFragment.getTag());
|
||||||
|
@ -42,6 +42,7 @@ import eu.toldi.infinityforlemmy.site.FetchSiteInfo;
|
|||||||
import eu.toldi.infinityforlemmy.site.SiteInfo;
|
import eu.toldi.infinityforlemmy.site.SiteInfo;
|
||||||
import eu.toldi.infinityforlemmy.site.SiteStatistics;
|
import eu.toldi.infinityforlemmy.site.SiteStatistics;
|
||||||
import eu.toldi.infinityforlemmy.user.BasicUserInfo;
|
import eu.toldi.infinityforlemmy.user.BasicUserInfo;
|
||||||
|
import eu.toldi.infinityforlemmy.user.MyUserInfo;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
import io.noties.markwon.AbstractMarkwonPlugin;
|
import io.noties.markwon.AbstractMarkwonPlugin;
|
||||||
import io.noties.markwon.Markwon;
|
import io.noties.markwon.Markwon;
|
||||||
@ -170,7 +171,7 @@ public class InstanceInfoActivity extends BaseActivity {
|
|||||||
private void fetchInstanceInfo() {
|
private void fetchInstanceInfo() {
|
||||||
FetchSiteInfo.fetchSiteInfo(mRetorifitHolder.getRetrofit(), null, new FetchSiteInfo.FetchSiteInfoListener() {
|
FetchSiteInfo.fetchSiteInfo(mRetorifitHolder.getRetrofit(), null, new FetchSiteInfo.FetchSiteInfoListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onFetchSiteInfoSuccess(SiteInfo siteInfo) {
|
public void onFetchSiteInfoSuccess(SiteInfo siteInfo, MyUserInfo myUserInfo) {
|
||||||
mLoadingConstraintLayout.setVisibility(View.GONE);
|
mLoadingConstraintLayout.setVisibility(View.GONE);
|
||||||
toolbar.setTitle(siteInfo.getName());
|
toolbar.setTitle(siteInfo.getName());
|
||||||
if (siteInfo.getSidebar() != null) {
|
if (siteInfo.getSidebar() != null) {
|
||||||
@ -197,7 +198,7 @@ public class InstanceInfoActivity extends BaseActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFetchSiteInfoFailed() {
|
public void onFetchSiteInfoFailed(boolean parseFailed) {
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -39,7 +39,6 @@ import javax.inject.Named;
|
|||||||
|
|
||||||
import butterknife.BindView;
|
import butterknife.BindView;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
import eu.toldi.infinityforlemmy.FetchMyInfo;
|
|
||||||
import eu.toldi.infinityforlemmy.Infinity;
|
import eu.toldi.infinityforlemmy.Infinity;
|
||||||
import eu.toldi.infinityforlemmy.R;
|
import eu.toldi.infinityforlemmy.R;
|
||||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
||||||
@ -55,6 +54,7 @@ import eu.toldi.infinityforlemmy.lemmyverse.LemmyInstance;
|
|||||||
import eu.toldi.infinityforlemmy.lemmyverse.LemmyVerseFetchInstances;
|
import eu.toldi.infinityforlemmy.lemmyverse.LemmyVerseFetchInstances;
|
||||||
import eu.toldi.infinityforlemmy.site.FetchSiteInfo;
|
import eu.toldi.infinityforlemmy.site.FetchSiteInfo;
|
||||||
import eu.toldi.infinityforlemmy.site.SiteInfo;
|
import eu.toldi.infinityforlemmy.site.SiteInfo;
|
||||||
|
import eu.toldi.infinityforlemmy.user.MyUserInfo;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
@ -67,6 +67,9 @@ public class LoginActivity extends BaseActivity {
|
|||||||
private static final String ENABLE_DOM_STATE = "EDS";
|
private static final String ENABLE_DOM_STATE = "EDS";
|
||||||
private static final String IS_AGREE_TO_USER_AGGREMENT_STATE = "IATUAS";
|
private static final String IS_AGREE_TO_USER_AGGREMENT_STATE = "IATUAS";
|
||||||
|
|
||||||
|
public static final String EXTRA_INPUT_USERNAME = "INPUT_USERNAME";
|
||||||
|
public static final String EXTRA_INPUT_INSTANCE = "INPUT_INSTANCE";
|
||||||
|
|
||||||
@BindView(R.id.coordinator_layout_login_activity)
|
@BindView(R.id.coordinator_layout_login_activity)
|
||||||
CoordinatorLayout coordinatorLayout;
|
CoordinatorLayout coordinatorLayout;
|
||||||
@BindView(R.id.appbar_layout_login_activity)
|
@BindView(R.id.appbar_layout_login_activity)
|
||||||
@ -149,6 +152,17 @@ public class LoginActivity extends BaseActivity {
|
|||||||
isAgreeToUserAgreement = savedInstanceState.getBoolean(IS_AGREE_TO_USER_AGGREMENT_STATE);
|
isAgreeToUserAgreement = savedInstanceState.getBoolean(IS_AGREE_TO_USER_AGGREMENT_STATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get username and instance from intent
|
||||||
|
Intent intent = getIntent();
|
||||||
|
String username_intent = intent.getStringExtra(EXTRA_INPUT_USERNAME);
|
||||||
|
String instance_intent = intent.getStringExtra(EXTRA_INPUT_INSTANCE);
|
||||||
|
if (username_intent != null) {
|
||||||
|
username_input.setText(username_intent);
|
||||||
|
}
|
||||||
|
if (instance_intent != null) {
|
||||||
|
instance_input.setText(instance_intent);
|
||||||
|
}
|
||||||
|
|
||||||
LemmyVerseFetchInstances.INSTANCE.fetchInstances(mLemmyVerseRetrofit, new FetchInstancesListener() {
|
LemmyVerseFetchInstances.INSTANCE.fetchInstances(mLemmyVerseRetrofit, new FetchInstancesListener() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -203,23 +217,31 @@ public class LoginActivity extends BaseActivity {
|
|||||||
try {
|
try {
|
||||||
JSONObject responseJSON = new JSONObject(accountResponse);
|
JSONObject responseJSON = new JSONObject(accountResponse);
|
||||||
String accessToken = responseJSON.getString("jwt");
|
String accessToken = responseJSON.getString("jwt");
|
||||||
mRetrofit.setAccessToken(null);
|
mRetrofit.setAccessToken(accessToken);
|
||||||
|
|
||||||
FetchMyInfo.fetchAccountInfo(mRetrofit.getRetrofit(), mRedditDataRoomDatabase, username,
|
|
||||||
accessToken, new FetchMyInfo.FetchMyInfoListener() {
|
|
||||||
@Override
|
|
||||||
public void onFetchMyInfoSuccess(String name, String display_name, String profileImageUrl, String bannerImageUrl) {
|
|
||||||
FetchSiteInfo.fetchSiteInfo(mRetrofit.getRetrofit(), accessToken, new FetchSiteInfo.FetchSiteInfoListener() {
|
FetchSiteInfo.fetchSiteInfo(mRetrofit.getRetrofit(), accessToken, new FetchSiteInfo.FetchSiteInfoListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onFetchSiteInfoSuccess(SiteInfo siteInfo) {
|
public void onFetchSiteInfoSuccess(SiteInfo siteInfo, MyUserInfo myUserInfo) {
|
||||||
|
if (myUserInfo == null) {
|
||||||
|
finish();
|
||||||
|
Toast.makeText(LoginActivity.this, R.string.parse_user_info_error, Toast.LENGTH_SHORT).show();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
boolean canDownvote = siteInfo.isEnable_downvotes();
|
boolean canDownvote = siteInfo.isEnable_downvotes();
|
||||||
ParseAndInsertNewAccount.parseAndInsertNewAccount(mExecutor, new Handler(), name, display_name, accessToken, profileImageUrl, bannerImageUrl, authCode, finalInstance, canDownvote, mRedditDataRoomDatabase.accountDao(),
|
ParseAndInsertNewAccount.parseAndInsertNewAccount(mExecutor, new Handler(), myUserInfo.getQualifiedName(), myUserInfo.getDisplayName(), accessToken, myUserInfo.getProfileImageUrl(), myUserInfo.getBannerImageUrl(), authCode, finalInstance, canDownvote, mRedditDataRoomDatabase.accountDao(),
|
||||||
() -> {
|
() -> {
|
||||||
Intent resultIntent = new Intent();
|
Intent resultIntent = new Intent();
|
||||||
setResult(Activity.RESULT_OK, resultIntent);
|
setResult(Activity.RESULT_OK, resultIntent);
|
||||||
finish();
|
finish();
|
||||||
});
|
});
|
||||||
mCurrentAccountSharedPreferences.edit().putBoolean(SharedPreferencesUtils.CAN_DOWNVOTE, canDownvote).apply();
|
mCurrentAccountSharedPreferences.edit()
|
||||||
|
.putString(SharedPreferencesUtils.ACCESS_TOKEN, accessToken)
|
||||||
|
.putString(SharedPreferencesUtils.ACCOUNT_NAME, myUserInfo.getDisplayName())
|
||||||
|
.putString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, myUserInfo.getQualifiedName())
|
||||||
|
.putString(SharedPreferencesUtils.ACCOUNT_INSTANCE,finalInstance)
|
||||||
|
.putString(SharedPreferencesUtils.ACCOUNT_IMAGE_URL, myUserInfo.getProfileImageUrl())
|
||||||
|
.putBoolean(SharedPreferencesUtils.CAN_DOWNVOTE, canDownvote).apply();
|
||||||
String[] version = siteInfo.getVersion().split("\\.");
|
String[] version = siteInfo.getVersion().split("\\.");
|
||||||
if (version.length > 0) {
|
if (version.length > 0) {
|
||||||
Log.d("SwitchAccount", "Lemmy Version: " + version[0] + "." + version[1]);
|
Log.d("SwitchAccount", "Lemmy Version: " + version[0] + "." + version[1]);
|
||||||
@ -228,37 +250,23 @@ public class LoginActivity extends BaseActivity {
|
|||||||
if (majorVersion > 0 || (majorVersion == 0 && minorVersion >= 19)) {
|
if (majorVersion > 0 || (majorVersion == 0 && minorVersion >= 19)) {
|
||||||
mRetrofit.setAccessToken(accessToken);
|
mRetrofit.setAccessToken(accessToken);
|
||||||
mCurrentAccountSharedPreferences.edit().putBoolean(SharedPreferencesUtils.BEARER_TOKEN_AUTH, true).apply();
|
mCurrentAccountSharedPreferences.edit().putBoolean(SharedPreferencesUtils.BEARER_TOKEN_AUTH, true).apply();
|
||||||
|
} else {
|
||||||
|
mRetrofit.setAccessToken(null);
|
||||||
|
mCurrentAccountSharedPreferences.edit().putBoolean(SharedPreferencesUtils.BEARER_TOKEN_AUTH, false).apply();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFetchSiteInfoFailed() {
|
public void onFetchSiteInfoFailed(boolean parseFailed) {
|
||||||
ParseAndInsertNewAccount.parseAndInsertNewAccount(mExecutor, new Handler(), name,display_name, accessToken, profileImageUrl, bannerImageUrl, authCode, finalInstance,true, mRedditDataRoomDatabase.accountDao(),
|
|
||||||
() -> {
|
|
||||||
Intent resultIntent = new Intent();
|
|
||||||
setResult(Activity.RESULT_OK, resultIntent);
|
|
||||||
finish();
|
|
||||||
});
|
|
||||||
mCurrentAccountSharedPreferences.edit().putBoolean(SharedPreferencesUtils.CAN_DOWNVOTE, true).apply();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
mCurrentAccountSharedPreferences.edit().putString(SharedPreferencesUtils.ACCESS_TOKEN, accessToken)
|
|
||||||
.putString(SharedPreferencesUtils.ACCOUNT_NAME, display_name)
|
|
||||||
.putString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, name)
|
|
||||||
.putString(SharedPreferencesUtils.ACCOUNT_INSTANCE,finalInstance)
|
|
||||||
.putString(SharedPreferencesUtils.ACCOUNT_IMAGE_URL, profileImageUrl).apply();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onFetchMyInfoFailed(boolean parseFailed) {
|
|
||||||
if (parseFailed) {
|
if (parseFailed) {
|
||||||
|
finish();
|
||||||
Toast.makeText(LoginActivity.this, R.string.parse_user_info_error, Toast.LENGTH_SHORT).show();
|
Toast.makeText(LoginActivity.this, R.string.parse_user_info_error, Toast.LENGTH_SHORT).show();
|
||||||
} else {
|
} else {
|
||||||
|
progressBar.setVisibility(ProgressBar.GONE);
|
||||||
|
loginButton.setEnabled(true);
|
||||||
Toast.makeText(LoginActivity.this, R.string.cannot_fetch_user_info, Toast.LENGTH_SHORT).show();
|
Toast.makeText(LoginActivity.this, R.string.cannot_fetch_user_info, Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
|
|
||||||
finish();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
|
@ -14,6 +14,7 @@ import android.os.Bundle;
|
|||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.text.Editable;
|
import android.text.Editable;
|
||||||
import android.text.TextWatcher;
|
import android.text.TextWatcher;
|
||||||
|
import android.util.Log;
|
||||||
import android.view.Gravity;
|
import android.view.Gravity;
|
||||||
import android.view.KeyEvent;
|
import android.view.KeyEvent;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
@ -119,12 +120,15 @@ import eu.toldi.infinityforlemmy.post.MarkPostAsRead;
|
|||||||
import eu.toldi.infinityforlemmy.post.Post;
|
import eu.toldi.infinityforlemmy.post.Post;
|
||||||
import eu.toldi.infinityforlemmy.post.PostPagingSource;
|
import eu.toldi.infinityforlemmy.post.PostPagingSource;
|
||||||
import eu.toldi.infinityforlemmy.readpost.InsertReadPost;
|
import eu.toldi.infinityforlemmy.readpost.InsertReadPost;
|
||||||
|
import eu.toldi.infinityforlemmy.site.FetchSiteInfo;
|
||||||
|
import eu.toldi.infinityforlemmy.site.SiteInfo;
|
||||||
import eu.toldi.infinityforlemmy.subreddit.ParseSubredditData;
|
import eu.toldi.infinityforlemmy.subreddit.ParseSubredditData;
|
||||||
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
||||||
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
|
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
|
||||||
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditViewModel;
|
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditViewModel;
|
||||||
import eu.toldi.infinityforlemmy.subscribeduser.SubscribedUserData;
|
import eu.toldi.infinityforlemmy.subscribeduser.SubscribedUserData;
|
||||||
import eu.toldi.infinityforlemmy.user.FetchUserData;
|
import eu.toldi.infinityforlemmy.user.FetchUserData;
|
||||||
|
import eu.toldi.infinityforlemmy.user.MyUserInfo;
|
||||||
import eu.toldi.infinityforlemmy.user.UserData;
|
import eu.toldi.infinityforlemmy.user.UserData;
|
||||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.CustomThemeSharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.CustomThemeSharedPreferencesUtils;
|
||||||
@ -248,6 +252,8 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
private int fabOption;
|
private int fabOption;
|
||||||
private int inboxCount;
|
private int inboxCount;
|
||||||
|
|
||||||
|
private boolean mBearerTokenUsed = true;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
SplashScreen.installSplashScreen(this);
|
SplashScreen.installSplashScreen(this);
|
||||||
@ -340,7 +346,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
|
|
||||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
||||||
mRetrofit.setAccessToken(mAccessToken);
|
mRetrofit.setAccessToken(mAccessToken);
|
||||||
|
mBearerTokenUsed = mCurrentAccountSharedPreferences.getBoolean(SharedPreferencesUtils.BEARER_TOKEN_AUTH, true);
|
||||||
|
|
||||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
||||||
mAccountQualifiedName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, null);
|
mAccountQualifiedName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, null);
|
||||||
@ -374,6 +380,8 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
mRetrofit.setBaseURL(instancePreference);
|
mRetrofit.setBaseURL(instancePreference);
|
||||||
this.recreate();
|
this.recreate();
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
checkUserToken();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1081,6 +1089,34 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void checkUserToken() {
|
||||||
|
if (mBearerTokenUsed) {
|
||||||
|
FetchUserData.validateAuthToken(mRetrofit.getRetrofit(), new FetchUserData.ValidateAuthTokenListener() {
|
||||||
|
@Override
|
||||||
|
public void onValidateAuthTokenSuccess() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onValidateAuthTokenFailed() {
|
||||||
|
// Alert user that the token is invalid and they need to re-login
|
||||||
|
new MaterialAlertDialogBuilder(MainActivity.this, R.style.MaterialAlertDialogTheme)
|
||||||
|
.setTitle(R.string.token_expired)
|
||||||
|
.setMessage(R.string.token_expired_message)
|
||||||
|
.setPositiveButton(R.string.ok, (dialogInterface, i) -> {
|
||||||
|
Intent intent = new Intent(MainActivity.this, LoginActivity.class);
|
||||||
|
// Username without instance
|
||||||
|
String username = mAccountName.substring(0, mAccountQualifiedName.indexOf("@"));
|
||||||
|
intent.putExtra(LoginActivity.EXTRA_INPUT_USERNAME, username);
|
||||||
|
intent.putExtra(LoginActivity.EXTRA_INPUT_INSTANCE, mRetrofit.getBaseURL());
|
||||||
|
startActivity(intent);
|
||||||
|
})
|
||||||
|
.setCancelable(false)
|
||||||
|
.show();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void loadUserData() {
|
private void loadUserData() {
|
||||||
if (!mFetchUserInfoSuccess) {
|
if (!mFetchUserInfoSuccess) {
|
||||||
FetchUserData.fetchUnreadCount(mRetrofit.getRetrofit(), mAccessToken, new FetchUserData.FetchUserUnreadCountListener() {
|
FetchUserData.fetchUnreadCount(mRetrofit.getRetrofit(), mAccessToken, new FetchUserData.FetchUserUnreadCountListener() {
|
||||||
@ -1109,6 +1145,31 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
mFetchUserInfoSuccess = false;
|
mFetchUserInfoSuccess = false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
FetchSiteInfo.fetchSiteInfo(mRetrofit.getRetrofit(), mAccessToken, new FetchSiteInfo.FetchSiteInfoListener() {
|
||||||
|
@Override
|
||||||
|
public void onFetchSiteInfoSuccess(SiteInfo siteInfo, MyUserInfo myUserInfo) {
|
||||||
|
String[] version = siteInfo.getVersion().split("\\.");
|
||||||
|
if (version.length > 0) {
|
||||||
|
Log.d("MainActvity", "Lemmy Version: " + version[0] + "." + version[1]);
|
||||||
|
int majorVersion = Integer.parseInt(version[0]);
|
||||||
|
int minorVersion = Integer.parseInt(version[1]);
|
||||||
|
if (majorVersion > 0 || (majorVersion == 0 && minorVersion >= 19)) {
|
||||||
|
mRetrofit.setAccessToken(mAccessToken);
|
||||||
|
mCurrentAccountSharedPreferences.edit().putBoolean(SharedPreferencesUtils.BEARER_TOKEN_AUTH, true).apply();
|
||||||
|
checkUserToken();
|
||||||
|
} else {
|
||||||
|
mRetrofit.setAccessToken(null);
|
||||||
|
mCurrentAccountSharedPreferences.edit().putBoolean(SharedPreferencesUtils.BEARER_TOKEN_AUTH, false).apply();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFetchSiteInfoFailed(boolean parseFailed) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1134,7 +1195,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
|
|||||||
int currentPostType = sectionsPagerAdapter.getCurrentPostType();
|
int currentPostType = sectionsPagerAdapter.getCurrentPostType();
|
||||||
PostFragment postFragment = sectionsPagerAdapter.getCurrentFragment();
|
PostFragment postFragment = sectionsPagerAdapter.getCurrentFragment();
|
||||||
if (postFragment != null) {
|
if (postFragment != null) {
|
||||||
SortTypeBottomSheetFragment sortTypeBottomSheetFragment = SortTypeBottomSheetFragment.getNewInstance(currentPostType != PostPagingSource.TYPE_FRONT_PAGE, postFragment.getSortType());
|
SortTypeBottomSheetFragment sortTypeBottomSheetFragment = SortTypeBottomSheetFragment.getNewInstance(currentPostType, postFragment.getSortType());
|
||||||
sortTypeBottomSheetFragment.show(getSupportFragmentManager(), sortTypeBottomSheetFragment.getTag());
|
sortTypeBottomSheetFragment.show(getSupportFragmentManager(), sortTypeBottomSheetFragment.getTag());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -117,7 +117,7 @@ public class MultiredditSelectionActivity extends BaseActivity implements Activi
|
|||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
|
||||||
mAccessToken = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCESS_TOKEN, null);
|
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) {
|
if (savedInstanceState == null) {
|
||||||
bindView(true);
|
bindView(true);
|
||||||
|
@ -55,8 +55,10 @@ import eu.toldi.infinityforlemmy.recentsearchquery.RecentSearchQuery;
|
|||||||
import eu.toldi.infinityforlemmy.recentsearchquery.RecentSearchQueryViewModel;
|
import eu.toldi.infinityforlemmy.recentsearchquery.RecentSearchQueryViewModel;
|
||||||
import eu.toldi.infinityforlemmy.subreddit.ParseSubredditData;
|
import eu.toldi.infinityforlemmy.subreddit.ParseSubredditData;
|
||||||
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
||||||
|
import eu.toldi.infinityforlemmy.subreddit.SubredditWithSelection;
|
||||||
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
|
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
|
||||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||||
|
import eu.toldi.infinityforlemmy.utils.LemmyUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.Utils;
|
import eu.toldi.infinityforlemmy.utils.Utils;
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
@ -190,9 +192,9 @@ public class SearchActivity extends BaseActivity {
|
|||||||
if (searchOnlySubreddits) {
|
if (searchOnlySubreddits) {
|
||||||
Intent returnIntent = new Intent();
|
Intent returnIntent = new Intent();
|
||||||
if (getIntent().getBooleanExtra(EXTRA_IS_MULTI_SELECTION, false)) {
|
if (getIntent().getBooleanExtra(EXTRA_IS_MULTI_SELECTION, false)) {
|
||||||
ArrayList<String> subredditNameList = new ArrayList<>();
|
ArrayList<SubredditWithSelection> subredditNameList = new ArrayList<>();
|
||||||
subredditNameList.add(subredditData.getName());
|
subredditNameList.add(new SubredditWithSelection(subredditData.getName(), subredditData.getIconUrl(), LemmyUtils.actorID2FullName(subredditData.getActorId())));
|
||||||
returnIntent.putStringArrayListExtra(RETURN_EXTRA_SELECTED_SUBREDDIT_NAMES, subredditNameList);
|
returnIntent.putParcelableArrayListExtra(RETURN_EXTRA_SELECTED_SUBREDDIT_NAMES, subredditNameList);
|
||||||
} else {
|
} else {
|
||||||
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_NAME, new SubscribedSubredditData(subredditData));
|
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_NAME, new SubscribedSubredditData(subredditData));
|
||||||
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_ICON_URL, subredditData.getIconUrl());
|
returnIntent.putExtra(EXTRA_RETURN_SUBREDDIT_ICON_URL, subredditData.getIconUrl());
|
||||||
|
@ -18,7 +18,6 @@ import com.google.android.material.appbar.CollapsingToolbarLayout;
|
|||||||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Named;
|
import javax.inject.Named;
|
||||||
@ -29,10 +28,10 @@ import eu.toldi.infinityforlemmy.ActivityToolbarInterface;
|
|||||||
import eu.toldi.infinityforlemmy.Infinity;
|
import eu.toldi.infinityforlemmy.Infinity;
|
||||||
import eu.toldi.infinityforlemmy.R;
|
import eu.toldi.infinityforlemmy.R;
|
||||||
import eu.toldi.infinityforlemmy.adapters.SelectedSubredditsRecyclerViewAdapter;
|
import eu.toldi.infinityforlemmy.adapters.SelectedSubredditsRecyclerViewAdapter;
|
||||||
import eu.toldi.infinityforlemmy.bottomsheetfragments.SelectSubredditsOrUsersOptionsBottomSheetFragment;
|
|
||||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||||
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
|
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
|
||||||
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
||||||
|
import eu.toldi.infinityforlemmy.subreddit.SubredditWithSelection;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
|
|
||||||
public class SelectedSubredditsAndUsersActivity extends BaseActivity implements ActivityToolbarInterface {
|
public class SelectedSubredditsAndUsersActivity extends BaseActivity implements ActivityToolbarInterface {
|
||||||
@ -62,7 +61,7 @@ public class SelectedSubredditsAndUsersActivity extends BaseActivity implements
|
|||||||
CustomThemeWrapper mCustomThemeWrapper;
|
CustomThemeWrapper mCustomThemeWrapper;
|
||||||
private LinearLayoutManagerBugFixed linearLayoutManager;
|
private LinearLayoutManagerBugFixed linearLayoutManager;
|
||||||
private SelectedSubredditsRecyclerViewAdapter adapter;
|
private SelectedSubredditsRecyclerViewAdapter adapter;
|
||||||
private ArrayList<String> subreddits;
|
private ArrayList<SubredditWithSelection> subreddits;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
@ -86,12 +85,11 @@ public class SelectedSubredditsAndUsersActivity extends BaseActivity implements
|
|||||||
setToolbarGoToTop(toolbar);
|
setToolbarGoToTop(toolbar);
|
||||||
|
|
||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
subreddits = savedInstanceState.getStringArrayList(SELECTED_SUBREDDITS_STATE);
|
subreddits = savedInstanceState.getParcelableArrayList(SELECTED_SUBREDDITS_STATE);
|
||||||
} else {
|
} else {
|
||||||
subreddits = getIntent().getStringArrayListExtra(EXTRA_SELECTED_SUBREDDITS);
|
subreddits = getIntent().getParcelableArrayListExtra(EXTRA_SELECTED_SUBREDDITS);
|
||||||
}
|
}
|
||||||
|
|
||||||
Collections.sort(subreddits);
|
|
||||||
|
|
||||||
adapter = new SelectedSubredditsRecyclerViewAdapter(this, mCustomThemeWrapper, subreddits);
|
adapter = new SelectedSubredditsRecyclerViewAdapter(this, mCustomThemeWrapper, subreddits);
|
||||||
linearLayoutManager = new LinearLayoutManagerBugFixed(this);
|
linearLayoutManager = new LinearLayoutManagerBugFixed(this);
|
||||||
@ -110,8 +108,7 @@ public class SelectedSubredditsAndUsersActivity extends BaseActivity implements
|
|||||||
});
|
});
|
||||||
|
|
||||||
fab.setOnClickListener(view -> {
|
fab.setOnClickListener(view -> {
|
||||||
SelectSubredditsOrUsersOptionsBottomSheetFragment selectSubredditsOrUsersOptionsBottomSheetFragment = new SelectSubredditsOrUsersOptionsBottomSheetFragment();
|
selectSubreddits();
|
||||||
selectSubredditsOrUsersOptionsBottomSheetFragment.show(getSupportFragmentManager(), selectSubredditsOrUsersOptionsBottomSheetFragment.getTag());
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -158,7 +155,7 @@ public class SelectedSubredditsAndUsersActivity extends BaseActivity implements
|
|||||||
if (subreddits == null) {
|
if (subreddits == null) {
|
||||||
subreddits = new ArrayList<>();
|
subreddits = new ArrayList<>();
|
||||||
}
|
}
|
||||||
subreddits = data.getStringArrayListExtra(SubredditMultiselectionActivity.EXTRA_RETURN_SELECTED_SUBREDDITS);
|
subreddits = data.getParcelableArrayListExtra(SubredditMultiselectionActivity.EXTRA_RETURN_SELECTED_SUBREDDITS);
|
||||||
adapter.addSubreddits(subreddits);
|
adapter.addSubreddits(subreddits);
|
||||||
}
|
}
|
||||||
} else if (requestCode == USER_SELECTION_REQUEST_CODE) {
|
} else if (requestCode == USER_SELECTION_REQUEST_CODE) {
|
||||||
@ -176,7 +173,7 @@ public class SelectedSubredditsAndUsersActivity extends BaseActivity implements
|
|||||||
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
||||||
super.onSaveInstanceState(outState);
|
super.onSaveInstanceState(outState);
|
||||||
if (adapter != null) {
|
if (adapter != null) {
|
||||||
outState.putStringArrayList(SELECTED_SUBREDDITS_STATE, adapter.getSubreddits());
|
outState.putParcelableArrayList(SELECTED_SUBREDDITS_STATE, adapter.getSubreddits());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,13 +37,14 @@ import eu.toldi.infinityforlemmy.ActivityToolbarInterface;
|
|||||||
import eu.toldi.infinityforlemmy.Infinity;
|
import eu.toldi.infinityforlemmy.Infinity;
|
||||||
import eu.toldi.infinityforlemmy.R;
|
import eu.toldi.infinityforlemmy.R;
|
||||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
||||||
|
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||||
import eu.toldi.infinityforlemmy.adapters.SubredditMultiselectionRecyclerViewAdapter;
|
import eu.toldi.infinityforlemmy.adapters.SubredditMultiselectionRecyclerViewAdapter;
|
||||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||||
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
|
import eu.toldi.infinityforlemmy.customviews.LinearLayoutManagerBugFixed;
|
||||||
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
||||||
|
import eu.toldi.infinityforlemmy.subreddit.SubredditWithSelection;
|
||||||
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditViewModel;
|
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditViewModel;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
import retrofit2.Retrofit;
|
|
||||||
|
|
||||||
public class SubredditMultiselectionActivity extends BaseActivity implements ActivityToolbarInterface {
|
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)
|
@BindView(R.id.error_text_view_subscribed_subreddits_multiselection_activity)
|
||||||
TextView mErrorTextView;
|
TextView mErrorTextView;
|
||||||
@Inject
|
@Inject
|
||||||
@Named("oauth")
|
@Named("no_oauth")
|
||||||
Retrofit mOauthRetrofit;
|
RetrofitHolder mRetrofit;
|
||||||
@Inject
|
@Inject
|
||||||
RedditDataRoomDatabase mRedditDataRoomDatabase;
|
RedditDataRoomDatabase mRedditDataRoomDatabase;
|
||||||
@Inject
|
@Inject
|
||||||
@ -131,7 +132,7 @@ public class SubredditMultiselectionActivity extends BaseActivity implements Act
|
|||||||
|
|
||||||
mSwipeRefreshLayout.setEnabled(false);
|
mSwipeRefreshLayout.setEnabled(false);
|
||||||
|
|
||||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, "-");
|
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, "-");
|
||||||
|
|
||||||
bindView();
|
bindView();
|
||||||
}
|
}
|
||||||
@ -177,7 +178,7 @@ public class SubredditMultiselectionActivity extends BaseActivity implements Act
|
|||||||
} else if (itemId == R.id.action_save_subreddit_multiselection_activity) {
|
} else if (itemId == R.id.action_save_subreddit_multiselection_activity) {
|
||||||
if (mAdapter != null) {
|
if (mAdapter != null) {
|
||||||
Intent returnIntent = new Intent();
|
Intent returnIntent = new Intent();
|
||||||
returnIntent.putStringArrayListExtra(EXTRA_RETURN_SELECTED_SUBREDDITS,
|
returnIntent.putExtra(EXTRA_RETURN_SELECTED_SUBREDDITS,
|
||||||
mAdapter.getAllSelectedSubreddits());
|
mAdapter.getAllSelectedSubreddits());
|
||||||
setResult(RESULT_OK, returnIntent);
|
setResult(RESULT_OK, returnIntent);
|
||||||
}
|
}
|
||||||
@ -198,12 +199,12 @@ public class SubredditMultiselectionActivity extends BaseActivity implements Act
|
|||||||
super.onActivityResult(requestCode, resultCode, data);
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
if (requestCode == SUBREDDIT_SEARCH_REQUEST_CODE && resultCode == RESULT_OK && data != null && mAdapter != null) {
|
if (requestCode == SUBREDDIT_SEARCH_REQUEST_CODE && resultCode == RESULT_OK && data != null && mAdapter != null) {
|
||||||
Intent returnIntent = new Intent();
|
Intent returnIntent = new Intent();
|
||||||
ArrayList<String> selectedSubreddits = mAdapter.getAllSelectedSubreddits();
|
ArrayList<SubredditWithSelection> selectedSubreddits = mAdapter.getAllSelectedSubreddits();
|
||||||
ArrayList<String> searchedSubreddits = data.getStringArrayListExtra(SearchActivity.RETURN_EXTRA_SELECTED_SUBREDDIT_NAMES);
|
ArrayList<SubredditWithSelection> searchedSubreddits = data.getParcelableArrayListExtra(SearchActivity.RETURN_EXTRA_SELECTED_SUBREDDIT_NAMES);
|
||||||
if (searchedSubreddits != null) {
|
if (searchedSubreddits != null) {
|
||||||
selectedSubreddits.addAll(searchedSubreddits);
|
selectedSubreddits.addAll(searchedSubreddits);
|
||||||
}
|
}
|
||||||
returnIntent.putStringArrayListExtra(EXTRA_RETURN_SELECTED_SUBREDDITS, selectedSubreddits);
|
returnIntent.putParcelableArrayListExtra(EXTRA_RETURN_SELECTED_SUBREDDITS, selectedSubreddits);
|
||||||
setResult(RESULT_OK, returnIntent);
|
setResult(RESULT_OK, returnIntent);
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
|
@ -63,7 +63,6 @@ import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
|||||||
import eu.toldi.infinityforlemmy.fragments.FollowedUsersListingFragment;
|
import eu.toldi.infinityforlemmy.fragments.FollowedUsersListingFragment;
|
||||||
import eu.toldi.infinityforlemmy.fragments.MultiRedditListingFragment;
|
import eu.toldi.infinityforlemmy.fragments.MultiRedditListingFragment;
|
||||||
import eu.toldi.infinityforlemmy.fragments.SubscribedSubredditsListingFragment;
|
import eu.toldi.infinityforlemmy.fragments.SubscribedSubredditsListingFragment;
|
||||||
import eu.toldi.infinityforlemmy.multireddit.DeleteMultiReddit;
|
|
||||||
import eu.toldi.infinityforlemmy.multireddit.FetchMyMultiReddits;
|
import eu.toldi.infinityforlemmy.multireddit.FetchMyMultiReddits;
|
||||||
import eu.toldi.infinityforlemmy.multireddit.MultiReddit;
|
import eu.toldi.infinityforlemmy.multireddit.MultiReddit;
|
||||||
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
import eu.toldi.infinityforlemmy.subreddit.SubredditData;
|
||||||
@ -236,7 +235,7 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
|
|||||||
sectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
|
sectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
|
||||||
viewPager.setAdapter(sectionsPagerAdapter);
|
viewPager.setAdapter(sectionsPagerAdapter);
|
||||||
viewPager.setOffscreenPageLimit(1);
|
viewPager.setOffscreenPageLimit(1);
|
||||||
if (viewPager.getCurrentItem() != 2) {
|
if (viewPager.getCurrentItem() != 1) {
|
||||||
fab.hide();
|
fab.hide();
|
||||||
}
|
}
|
||||||
viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
|
viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
|
||||||
@ -247,7 +246,7 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
|
|||||||
fab.hide();
|
fab.hide();
|
||||||
} else {
|
} else {
|
||||||
lockSwipeRightToGoBack();
|
lockSwipeRightToGoBack();
|
||||||
if (position != 2) {
|
if (position != 1) {
|
||||||
fab.hide();
|
fab.hide();
|
||||||
} else {
|
} else {
|
||||||
fab.show();
|
fab.show();
|
||||||
@ -258,7 +257,7 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
|
|||||||
tabLayout.setupWithViewPager(viewPager);
|
tabLayout.setupWithViewPager(viewPager);
|
||||||
|
|
||||||
if (showMultiReddits) {
|
if (showMultiReddits) {
|
||||||
viewPager.setCurrentItem(2, false);
|
viewPager.setCurrentItem(1, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
loadSubscriptions(false);
|
loadSubscriptions(false);
|
||||||
@ -386,7 +385,7 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
|
|||||||
FetchMyMultiReddits.fetchMyMultiReddits(mOauthRetrofit, mAccessToken, new FetchMyMultiReddits.FetchMyMultiRedditsListener() {
|
FetchMyMultiReddits.fetchMyMultiReddits(mOauthRetrofit, mAccessToken, new FetchMyMultiReddits.FetchMyMultiRedditsListener() {
|
||||||
@Override
|
@Override
|
||||||
public void success(ArrayList<MultiReddit> multiReddits) {
|
public void success(ArrayList<MultiReddit> multiReddits) {
|
||||||
InsertMultireddit.insertMultireddits(mExecutor, new Handler(), mRedditDataRoomDatabase, multiReddits, mAccountName, () -> {
|
InsertMultireddit.insertMultireddits(mExecutor, new Handler(), mRedditDataRoomDatabase, multiReddits, mAccountQualifiedName, () -> {
|
||||||
mInsertMultiredditSuccess = true;
|
mInsertMultiredditSuccess = true;
|
||||||
sectionsPagerAdapter.stopMultiRedditRefreshProgressbar();
|
sectionsPagerAdapter.stopMultiRedditRefreshProgressbar();
|
||||||
});
|
});
|
||||||
@ -408,27 +407,11 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
|
|||||||
.setMessage(R.string.delete_multi_reddit_dialog_message)
|
.setMessage(R.string.delete_multi_reddit_dialog_message)
|
||||||
.setPositiveButton(R.string.delete, (dialogInterface, i)
|
.setPositiveButton(R.string.delete, (dialogInterface, i)
|
||||||
-> {
|
-> {
|
||||||
if (mAccessToken == null) {
|
|
||||||
DeleteMultiredditInDatabase.deleteMultiredditInDatabase(mExecutor, new Handler(), mRedditDataRoomDatabase, mAccountName, multiReddit.getPath(),
|
DeleteMultiredditInDatabase.deleteMultiredditInDatabase(mExecutor, new Handler(), mRedditDataRoomDatabase, mAccountQualifiedName, multiReddit.getPath(),
|
||||||
() -> Toast.makeText(SubscribedThingListingActivity.this,
|
() -> Toast.makeText(SubscribedThingListingActivity.this,
|
||||||
R.string.delete_multi_reddit_success, Toast.LENGTH_SHORT).show());
|
R.string.delete_multi_reddit_success, Toast.LENGTH_SHORT).show());
|
||||||
} else {
|
|
||||||
DeleteMultiReddit.deleteMultiReddit(mExecutor, new Handler(), mOauthRetrofit, mRedditDataRoomDatabase,
|
|
||||||
mAccessToken, mAccountName, multiReddit.getPath(), new DeleteMultiReddit.DeleteMultiRedditListener() {
|
|
||||||
@Override
|
|
||||||
public void success() {
|
|
||||||
Toast.makeText(SubscribedThingListingActivity.this,
|
|
||||||
R.string.delete_multi_reddit_success, Toast.LENGTH_SHORT).show();
|
|
||||||
//loadMultiReddits();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void failed() {
|
|
||||||
Toast.makeText(SubscribedThingListingActivity.this,
|
|
||||||
R.string.delete_multi_reddit_failed, Toast.LENGTH_SHORT).show();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
.setNegativeButton(R.string.cancel, null)
|
.setNegativeButton(R.string.cancel, null)
|
||||||
.show();
|
.show();
|
||||||
@ -484,7 +467,7 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
|
|||||||
@Override
|
@Override
|
||||||
public Fragment getItem(int position) {
|
public Fragment getItem(int position) {
|
||||||
switch (position) {
|
switch (position) {
|
||||||
default:
|
|
||||||
case 0: {
|
case 0: {
|
||||||
SubscribedSubredditsListingFragment fragment = new SubscribedSubredditsListingFragment();
|
SubscribedSubredditsListingFragment fragment = new SubscribedSubredditsListingFragment();
|
||||||
Bundle bundle = new Bundle();
|
Bundle bundle = new Bundle();
|
||||||
@ -495,12 +478,20 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
|
|||||||
fragment.setArguments(bundle);
|
fragment.setArguments(bundle);
|
||||||
return fragment;
|
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
|
@Override
|
||||||
public int getCount() {
|
public int getCount() {
|
||||||
return 1;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -509,8 +500,6 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
|
|||||||
case 0:
|
case 0:
|
||||||
return Utils.getTabTextWithCustomFont(typeface, getString(R.string.communities));
|
return Utils.getTabTextWithCustomFont(typeface, getString(R.string.communities));
|
||||||
case 1:
|
case 1:
|
||||||
return Utils.getTabTextWithCustomFont(typeface, getString(R.string.users));
|
|
||||||
case 2:
|
|
||||||
return Utils.getTabTextWithCustomFont(typeface, getString(R.string.multi_reddits));
|
return Utils.getTabTextWithCustomFont(typeface, getString(R.string.multi_reddits));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -523,8 +512,6 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
|
|||||||
Fragment fragment = (Fragment) super.instantiateItem(container, position);
|
Fragment fragment = (Fragment) super.instantiateItem(container, position);
|
||||||
if (position == 0) {
|
if (position == 0) {
|
||||||
subscribedSubredditsListingFragment = (SubscribedSubredditsListingFragment) fragment;
|
subscribedSubredditsListingFragment = (SubscribedSubredditsListingFragment) fragment;
|
||||||
} else if (position == 1) {
|
|
||||||
followedUsersListingFragment = (FollowedUsersListingFragment) fragment;
|
|
||||||
} else {
|
} else {
|
||||||
multiRedditListingFragment = (MultiRedditListingFragment) fragment;
|
multiRedditListingFragment = (MultiRedditListingFragment) fragment;
|
||||||
}
|
}
|
||||||
|
@ -62,10 +62,8 @@ import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
|||||||
import eu.toldi.infinityforlemmy.customviews.NavigationWrapper;
|
import eu.toldi.infinityforlemmy.customviews.NavigationWrapper;
|
||||||
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
import eu.toldi.infinityforlemmy.customviews.slidr.Slidr;
|
||||||
import eu.toldi.infinityforlemmy.events.GoBackToMainPageEvent;
|
import eu.toldi.infinityforlemmy.events.GoBackToMainPageEvent;
|
||||||
import eu.toldi.infinityforlemmy.events.RefreshMultiRedditsEvent;
|
|
||||||
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
import eu.toldi.infinityforlemmy.events.SwitchAccountEvent;
|
||||||
import eu.toldi.infinityforlemmy.fragments.PostFragment;
|
import eu.toldi.infinityforlemmy.fragments.PostFragment;
|
||||||
import eu.toldi.infinityforlemmy.multireddit.DeleteMultiReddit;
|
|
||||||
import eu.toldi.infinityforlemmy.multireddit.MultiReddit;
|
import eu.toldi.infinityforlemmy.multireddit.MultiReddit;
|
||||||
import eu.toldi.infinityforlemmy.post.MarkPostAsRead;
|
import eu.toldi.infinityforlemmy.post.MarkPostAsRead;
|
||||||
import eu.toldi.infinityforlemmy.post.Post;
|
import eu.toldi.infinityforlemmy.post.Post;
|
||||||
@ -592,7 +590,7 @@ public class ViewMultiRedditDetailActivity extends BaseActivity implements SortT
|
|||||||
|
|
||||||
private void showSortTypeBottomSheetFragment() {
|
private void showSortTypeBottomSheetFragment() {
|
||||||
if (mFragment instanceof PostFragment) {
|
if (mFragment instanceof PostFragment) {
|
||||||
SortTypeBottomSheetFragment sortTypeBottomSheetFragment = SortTypeBottomSheetFragment.getNewInstance(true, ((PostFragment) mFragment).getSortType());
|
SortTypeBottomSheetFragment sortTypeBottomSheetFragment = SortTypeBottomSheetFragment.getNewInstance(SortTypeBottomSheetFragment.PAGE_TYPE_MULTICOMMUNITY, ((PostFragment) mFragment).getSortType());
|
||||||
sortTypeBottomSheetFragment.show(getSupportFragmentManager(), sortTypeBottomSheetFragment.getTag());
|
sortTypeBottomSheetFragment.show(getSupportFragmentManager(), sortTypeBottomSheetFragment.getTag());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -678,7 +676,7 @@ public class ViewMultiRedditDetailActivity extends BaseActivity implements SortT
|
|||||||
-> {
|
-> {
|
||||||
Utils.hideKeyboard(this);
|
Utils.hideKeyboard(this);
|
||||||
Intent subredditIntent = new Intent(this, ViewSubredditDetailActivity.class);
|
Intent subredditIntent = new Intent(this, ViewSubredditDetailActivity.class);
|
||||||
subredditIntent.putExtra(ViewSubredditDetailActivity.EXTRA_SUBREDDIT_NAME_KEY, thingEditText.getText().toString());
|
subredditIntent.putExtra(ViewSubredditDetailActivity.EXTRA_COMMUNITY_FULL_NAME_KEY, thingEditText.getText().toString());
|
||||||
startActivity(subredditIntent);
|
startActivity(subredditIntent);
|
||||||
})
|
})
|
||||||
.setNegativeButton(R.string.cancel, (dialogInterface, i) -> {
|
.setNegativeButton(R.string.cancel, (dialogInterface, i) -> {
|
||||||
@ -699,7 +697,7 @@ public class ViewMultiRedditDetailActivity extends BaseActivity implements SortT
|
|||||||
if (i == EditorInfo.IME_ACTION_DONE) {
|
if (i == EditorInfo.IME_ACTION_DONE) {
|
||||||
Utils.hideKeyboard(this);
|
Utils.hideKeyboard(this);
|
||||||
Intent userIntent = new Intent(this, ViewUserDetailActivity.class);
|
Intent userIntent = new Intent(this, ViewUserDetailActivity.class);
|
||||||
userIntent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, thingEditText.getText().toString());
|
userIntent.putExtra(ViewUserDetailActivity.EXTRA_QUALIFIED_USER_NAME_KEY, thingEditText.getText().toString());
|
||||||
startActivity(userIntent);
|
startActivity(userIntent);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -764,6 +762,7 @@ public class ViewMultiRedditDetailActivity extends BaseActivity implements SortT
|
|||||||
Intent editIntent = new Intent(this, EditMultiRedditActivity.class);
|
Intent editIntent = new Intent(this, EditMultiRedditActivity.class);
|
||||||
editIntent.putExtra(EditMultiRedditActivity.EXTRA_MULTI_PATH, multiPath);
|
editIntent.putExtra(EditMultiRedditActivity.EXTRA_MULTI_PATH, multiPath);
|
||||||
startActivity(editIntent);
|
startActivity(editIntent);
|
||||||
|
finish();
|
||||||
return true;
|
return true;
|
||||||
} else if (itemId == R.id.action_delete_view_multi_reddit_detail_activity) {
|
} else if (itemId == R.id.action_delete_view_multi_reddit_detail_activity) {
|
||||||
new MaterialAlertDialogBuilder(this, R.style.MaterialAlertDialogTheme)
|
new MaterialAlertDialogBuilder(this, R.style.MaterialAlertDialogTheme)
|
||||||
@ -771,30 +770,13 @@ public class ViewMultiRedditDetailActivity extends BaseActivity implements SortT
|
|||||||
.setMessage(R.string.delete_multi_reddit_dialog_message)
|
.setMessage(R.string.delete_multi_reddit_dialog_message)
|
||||||
.setPositiveButton(R.string.delete, (dialogInterface, i)
|
.setPositiveButton(R.string.delete, (dialogInterface, i)
|
||||||
-> {
|
-> {
|
||||||
if (mAccessToken == null) {
|
|
||||||
DeleteMultiredditInDatabase.deleteMultiredditInDatabase(mExecutor, new Handler(), mRedditDataRoomDatabase, mAccountName, multiPath,
|
DeleteMultiredditInDatabase.deleteMultiredditInDatabase(mExecutor, new Handler(), mRedditDataRoomDatabase, mAccountName, multiPath,
|
||||||
() -> {
|
() -> {
|
||||||
Toast.makeText(this, R.string.delete_multi_reddit_success, Toast.LENGTH_SHORT).show();
|
Toast.makeText(this, R.string.delete_multi_reddit_success, Toast.LENGTH_SHORT).show();
|
||||||
finish();
|
finish();
|
||||||
});
|
});
|
||||||
} else {
|
|
||||||
DeleteMultiReddit.deleteMultiReddit(mExecutor, new Handler(), mOauthRetrofit, mRedditDataRoomDatabase,
|
|
||||||
mAccessToken, mAccountName, multiPath, new DeleteMultiReddit.DeleteMultiRedditListener() {
|
|
||||||
@Override
|
|
||||||
public void success() {
|
|
||||||
Toast.makeText(ViewMultiRedditDetailActivity.this,
|
|
||||||
R.string.delete_multi_reddit_success, Toast.LENGTH_SHORT).show();
|
|
||||||
EventBus.getDefault().post(new RefreshMultiRedditsEvent());
|
|
||||||
finish();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void failed() {
|
|
||||||
Toast.makeText(ViewMultiRedditDetailActivity.this,
|
|
||||||
R.string.delete_multi_reddit_failed, Toast.LENGTH_SHORT).show();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
.setNegativeButton(R.string.cancel, null)
|
.setNegativeButton(R.string.cancel, null)
|
||||||
.show();
|
.show();
|
||||||
|
@ -392,6 +392,14 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
mAccountName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_NAME, null);
|
||||||
mAccountQualifiedName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, null);
|
mAccountQualifiedName = mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_QUALIFIED_NAME, null);
|
||||||
|
|
||||||
|
if (mAccessToken != null) {
|
||||||
|
mRetrofit.setAccessToken(mAccessToken);
|
||||||
|
}
|
||||||
|
String instance = (mAccessToken == null) ? mSharedPreferences.getString(SharedPreferencesUtils.ANONYMOUS_ACCOUNT_INSTANCE, APIUtils.API_BASE_URI) : mCurrentAccountSharedPreferences.getString(SharedPreferencesUtils.ACCOUNT_INSTANCE, null);
|
||||||
|
if (instance != null) {
|
||||||
|
mRetrofit.setBaseURL(instance);
|
||||||
|
}
|
||||||
|
|
||||||
if (savedInstanceState == null) {
|
if (savedInstanceState == null) {
|
||||||
mMessageFullname = getIntent().getIntExtra(EXTRA_MESSAGE_FULLNAME, 0);
|
mMessageFullname = getIntent().getIntExtra(EXTRA_MESSAGE_FULLNAME, 0);
|
||||||
mNewAccountName = getIntent().getStringExtra(EXTRA_NEW_ACCOUNT_NAME);
|
mNewAccountName = getIntent().getStringExtra(EXTRA_NEW_ACCOUNT_NAME);
|
||||||
@ -1206,7 +1214,7 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
private void displaySortTypeBottomSheetFragment() {
|
private void displaySortTypeBottomSheetFragment() {
|
||||||
Fragment fragment = fragmentManager.findFragmentByTag("f0");
|
Fragment fragment = fragmentManager.findFragmentByTag("f0");
|
||||||
if (fragment instanceof PostFragment) {
|
if (fragment instanceof PostFragment) {
|
||||||
SortTypeBottomSheetFragment sortTypeBottomSheetFragment = SortTypeBottomSheetFragment.getNewInstance(true, ((PostFragment) fragment).getSortType());
|
SortTypeBottomSheetFragment sortTypeBottomSheetFragment = SortTypeBottomSheetFragment.getNewInstance(SortTypeBottomSheetFragment.PAGE_TYPE_COMMUNITY, ((PostFragment) fragment).getSortType());
|
||||||
sortTypeBottomSheetFragment.show(fragmentManager, sortTypeBottomSheetFragment.getTag());
|
sortTypeBottomSheetFragment.show(fragmentManager, sortTypeBottomSheetFragment.getTag());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1233,7 +1233,6 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
getMenuInflater().inflate(R.menu.view_user_detail_activity, menu);
|
getMenuInflater().inflate(R.menu.view_user_detail_activity, menu);
|
||||||
if (username.equals(mAccountName)) {
|
if (username.equals(mAccountName)) {
|
||||||
menu.findItem(R.id.action_send_private_message_view_user_detail_activity).setVisible(false);
|
menu.findItem(R.id.action_send_private_message_view_user_detail_activity).setVisible(false);
|
||||||
menu.findItem(R.id.action_report_view_user_detail_activity).setVisible(false);
|
|
||||||
menu.findItem(R.id.action_block_user_view_user_detail_activity).setVisible(false);
|
menu.findItem(R.id.action_block_user_view_user_detail_activity).setVisible(false);
|
||||||
} else {
|
} else {
|
||||||
menu.findItem(R.id.action_edit_profile_view_user_detail_activity).setVisible(false);
|
menu.findItem(R.id.action_edit_profile_view_user_detail_activity).setVisible(false);
|
||||||
@ -1299,11 +1298,6 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
|||||||
intent.putExtra(PostFilterPreferenceActivity.EXTRA_USER_NAME, username);
|
intent.putExtra(PostFilterPreferenceActivity.EXTRA_USER_NAME, username);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
return true;
|
return true;
|
||||||
} else if (itemId == R.id.action_report_view_user_detail_activity) {
|
|
||||||
Intent reportIntent = new Intent(this, LinkResolverActivity.class);
|
|
||||||
reportIntent.setData(Uri.parse("https://www.reddithelp.com/en/categories/rules-reporting/account-and-community-restrictions/what-should-i-do-if-i-see-something-i"));
|
|
||||||
startActivity(reportIntent);
|
|
||||||
return true;
|
|
||||||
} else if (itemId == R.id.action_block_user_view_user_detail_activity) {
|
} else if (itemId == R.id.action_block_user_view_user_detail_activity) {
|
||||||
if (mAccessToken == null) {
|
if (mAccessToken == null) {
|
||||||
Toast.makeText(this, R.string.login_first, Toast.LENGTH_SHORT).show();
|
Toast.makeText(this, R.string.login_first, Toast.LENGTH_SHORT).show();
|
||||||
|
@ -6,7 +6,6 @@ import android.view.View;
|
|||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
@ -20,15 +19,14 @@ import java.util.concurrent.Executor;
|
|||||||
|
|
||||||
import butterknife.BindView;
|
import butterknife.BindView;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
|
||||||
import me.zhanghai.android.fastscroll.PopupTextProvider;
|
|
||||||
import eu.toldi.infinityforlemmy.R;
|
import eu.toldi.infinityforlemmy.R;
|
||||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
||||||
import eu.toldi.infinityforlemmy.activities.BaseActivity;
|
import eu.toldi.infinityforlemmy.activities.BaseActivity;
|
||||||
import eu.toldi.infinityforlemmy.asynctasks.InsertMultireddit;
|
import eu.toldi.infinityforlemmy.asynctasks.InsertMultireddit;
|
||||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||||
import eu.toldi.infinityforlemmy.multireddit.FavoriteMultiReddit;
|
|
||||||
import eu.toldi.infinityforlemmy.multireddit.MultiReddit;
|
import eu.toldi.infinityforlemmy.multireddit.MultiReddit;
|
||||||
|
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
||||||
|
import me.zhanghai.android.fastscroll.PopupTextProvider;
|
||||||
import pl.droidsonroids.gif.GifImageView;
|
import pl.droidsonroids.gif.GifImageView;
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
|
|
||||||
@ -54,6 +52,7 @@ public class MultiRedditListingRecyclerViewAdapter extends RecyclerView.Adapter<
|
|||||||
|
|
||||||
public interface OnItemClickListener {
|
public interface OnItemClickListener {
|
||||||
void onClick(MultiReddit multiReddit);
|
void onClick(MultiReddit multiReddit);
|
||||||
|
|
||||||
void onLongClick(MultiReddit multiReddit);
|
void onLongClick(MultiReddit multiReddit);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -130,70 +129,21 @@ public class MultiRedditListingRecyclerViewAdapter extends RecyclerView.Adapter<
|
|||||||
if (multiReddit.isFavorite()) {
|
if (multiReddit.isFavorite()) {
|
||||||
((MultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_border_24dp);
|
((MultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_border_24dp);
|
||||||
multiReddit.setFavorite(false);
|
multiReddit.setFavorite(false);
|
||||||
if (mAccessToken == null) {
|
|
||||||
InsertMultireddit.insertMultireddit(mExecutor, new Handler(), mRedditDataRoomDatabase, multiReddit,
|
InsertMultireddit.insertMultireddit(mExecutor, new Handler(), mRedditDataRoomDatabase, multiReddit,
|
||||||
() -> {
|
() -> {
|
||||||
//Do nothing
|
//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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
((MultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_24dp);
|
((MultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_24dp);
|
||||||
multiReddit.setFavorite(true);
|
multiReddit.setFavorite(true);
|
||||||
if (mAccessToken == null) {
|
|
||||||
InsertMultireddit.insertMultireddit(mExecutor, new Handler(), mRedditDataRoomDatabase, multiReddit,
|
InsertMultireddit.insertMultireddit(mExecutor, new Handler(), mRedditDataRoomDatabase, multiReddit,
|
||||||
() -> {
|
() -> {
|
||||||
//Do nothing
|
//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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
holder.itemView.setOnClickListener(view -> {
|
holder.itemView.setOnClickListener(view -> {
|
||||||
mOnItemClickListener.onClick(multiReddit);
|
mOnItemClickListener.onClick(multiReddit);
|
||||||
@ -230,69 +180,19 @@ public class MultiRedditListingRecyclerViewAdapter extends RecyclerView.Adapter<
|
|||||||
if (multiReddit.isFavorite()) {
|
if (multiReddit.isFavorite()) {
|
||||||
((FavoriteMultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_border_24dp);
|
((FavoriteMultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_border_24dp);
|
||||||
multiReddit.setFavorite(false);
|
multiReddit.setFavorite(false);
|
||||||
if (mAccessToken == null) {
|
|
||||||
InsertMultireddit.insertMultireddit(mExecutor, new Handler(), mRedditDataRoomDatabase, multiReddit,
|
InsertMultireddit.insertMultireddit(mExecutor, new Handler(), mRedditDataRoomDatabase, multiReddit,
|
||||||
() -> {
|
() -> {
|
||||||
//Do nothing
|
//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);
|
|
||||||
}
|
|
||||||
|
|
||||||
@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 {
|
} else {
|
||||||
((FavoriteMultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_24dp);
|
((FavoriteMultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_24dp);
|
||||||
multiReddit.setFavorite(true);
|
multiReddit.setFavorite(true);
|
||||||
if (mAccessToken == null) {
|
|
||||||
InsertMultireddit.insertMultireddit(mExecutor, new Handler(), mRedditDataRoomDatabase, multiReddit,
|
InsertMultireddit.insertMultireddit(mExecutor, new Handler(), mRedditDataRoomDatabase, multiReddit,
|
||||||
() -> {
|
() -> {
|
||||||
//Do nothing
|
//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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
holder.itemView.setOnClickListener(view -> {
|
holder.itemView.setOnClickListener(view -> {
|
||||||
@ -403,7 +303,8 @@ public class MultiRedditListingRecyclerViewAdapter extends RecyclerView.Adapter<
|
|||||||
}
|
}
|
||||||
|
|
||||||
class FavoriteMultiRedditsDividerViewHolder extends RecyclerView.ViewHolder {
|
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) {
|
FavoriteMultiRedditsDividerViewHolder(@NonNull View itemView) {
|
||||||
super(itemView);
|
super(itemView);
|
||||||
@ -417,7 +318,8 @@ public class MultiRedditListingRecyclerViewAdapter extends RecyclerView.Adapter<
|
|||||||
}
|
}
|
||||||
|
|
||||||
class AllMultiRedditsDividerViewHolder extends RecyclerView.ViewHolder {
|
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) {
|
AllMultiRedditsDividerViewHolder(@NonNull View itemView) {
|
||||||
super(itemView);
|
super(itemView);
|
||||||
|
@ -346,7 +346,7 @@ public class PostDetailRecyclerViewAdapter extends RecyclerView.Adapter<Recycler
|
|||||||
mHideUpvoteRatio = postDetailsSharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_UPVOTE_RATIO, false);
|
mHideUpvoteRatio = postDetailsSharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_UPVOTE_RATIO, false);
|
||||||
mHideTheNumberOfAwards = postDetailsSharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_THE_NUMBER_OF_AWARDS, false);
|
mHideTheNumberOfAwards = postDetailsSharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_THE_NUMBER_OF_AWARDS, false);
|
||||||
mHideSubredditAndUserPrefix = postDetailsSharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_SUBREDDIT_AND_USER_PREFIX, false);
|
mHideSubredditAndUserPrefix = postDetailsSharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_SUBREDDIT_AND_USER_PREFIX, false);
|
||||||
mShareOnLocalInstance = postDetailsSharedPreferences.getBoolean(SharedPreferencesUtils.SHARE_LINK_ON_LOCAL_INSTANCE, false);
|
mShareOnLocalInstance = sharedPreferences.getBoolean(SharedPreferencesUtils.SHARE_LINK_ON_LOCAL_INSTANCE, false);
|
||||||
mShowDisplayNames = postDetailsSharedPreferences.getBoolean(SharedPreferencesUtils.POST_DETAIL_DISPLAY_NAME_INSTEAD_OF_USERNAME, true);
|
mShowDisplayNames = postDetailsSharedPreferences.getBoolean(SharedPreferencesUtils.POST_DETAIL_DISPLAY_NAME_INSTEAD_OF_USERNAME, true);
|
||||||
mHideTheNumberOfVotes = postDetailsSharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_THE_NUMBER_OF_VOTES, false);
|
mHideTheNumberOfVotes = postDetailsSharedPreferences.getBoolean(SharedPreferencesUtils.HIDE_THE_NUMBER_OF_VOTES, false);
|
||||||
mHideDownvotes = !currentAccountSharedPreferences.getBoolean(SharedPreferencesUtils.CAN_DOWNVOTE, true);
|
mHideDownvotes = !currentAccountSharedPreferences.getBoolean(SharedPreferencesUtils.CAN_DOWNVOTE, true);
|
||||||
|
@ -16,13 +16,14 @@ import butterknife.ButterKnife;
|
|||||||
import eu.toldi.infinityforlemmy.R;
|
import eu.toldi.infinityforlemmy.R;
|
||||||
import eu.toldi.infinityforlemmy.activities.BaseActivity;
|
import eu.toldi.infinityforlemmy.activities.BaseActivity;
|
||||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||||
|
import eu.toldi.infinityforlemmy.subreddit.SubredditWithSelection;
|
||||||
|
|
||||||
public class SelectedSubredditsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
public class SelectedSubredditsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
||||||
private BaseActivity activity;
|
private BaseActivity activity;
|
||||||
private CustomThemeWrapper customThemeWrapper;
|
private CustomThemeWrapper customThemeWrapper;
|
||||||
private ArrayList<String> subreddits;
|
private ArrayList<SubredditWithSelection> subreddits;
|
||||||
|
|
||||||
public SelectedSubredditsRecyclerViewAdapter(BaseActivity activity, CustomThemeWrapper customThemeWrapper, ArrayList<String> subreddits) {
|
public SelectedSubredditsRecyclerViewAdapter(BaseActivity activity, CustomThemeWrapper customThemeWrapper, ArrayList<SubredditWithSelection> subreddits) {
|
||||||
this.activity = activity;
|
this.activity = activity;
|
||||||
this.customThemeWrapper = customThemeWrapper;
|
this.customThemeWrapper = customThemeWrapper;
|
||||||
if (subreddits == null) {
|
if (subreddits == null) {
|
||||||
@ -42,7 +43,7 @@ public class SelectedSubredditsRecyclerViewAdapter extends RecyclerView.Adapter<
|
|||||||
@Override
|
@Override
|
||||||
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
|
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
|
||||||
if (holder instanceof SubredditViewHolder) {
|
if (holder instanceof SubredditViewHolder) {
|
||||||
((SubredditViewHolder) holder).subredditNameTextView.setText(subreddits.get(holder.getBindingAdapterPosition()));
|
((SubredditViewHolder) holder).subredditNameTextView.setText(subreddits.get(holder.getBindingAdapterPosition()).getQualifiedName());
|
||||||
((SubredditViewHolder) holder).deleteButton.setOnClickListener(view -> {
|
((SubredditViewHolder) holder).deleteButton.setOnClickListener(view -> {
|
||||||
subreddits.remove(holder.getBindingAdapterPosition());
|
subreddits.remove(holder.getBindingAdapterPosition());
|
||||||
notifyItemRemoved(holder.getBindingAdapterPosition());
|
notifyItemRemoved(holder.getBindingAdapterPosition());
|
||||||
@ -55,18 +56,22 @@ public class SelectedSubredditsRecyclerViewAdapter extends RecyclerView.Adapter<
|
|||||||
return subreddits.size();
|
return subreddits.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addSubreddits(ArrayList<String> newSubreddits) {
|
public void addSubreddits(ArrayList<SubredditWithSelection> newSubreddits) {
|
||||||
int oldSize = subreddits.size();
|
int oldSize = subreddits.size();
|
||||||
subreddits.addAll(newSubreddits);
|
for (SubredditWithSelection subreddit : newSubreddits) {
|
||||||
|
if (!subreddits.contains(subreddit)) {
|
||||||
|
subreddits.add(subreddit);
|
||||||
|
}
|
||||||
|
}
|
||||||
notifyItemRangeInserted(oldSize, newSubreddits.size());
|
notifyItemRangeInserted(oldSize, newSubreddits.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addUserInSubredditType(String username) {
|
public void addUserInSubredditType(String username) {
|
||||||
subreddits.add(username);
|
/*subreddits.add(username);
|
||||||
notifyItemInserted(subreddits.size());
|
notifyItemInserted(subreddits.size());*/
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArrayList<String> getSubreddits() {
|
public ArrayList<SubredditWithSelection> getSubreddits() {
|
||||||
return subreddits;
|
return subreddits;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,12 +19,12 @@ import java.util.List;
|
|||||||
|
|
||||||
import butterknife.BindView;
|
import butterknife.BindView;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
|
||||||
import eu.toldi.infinityforlemmy.R;
|
import eu.toldi.infinityforlemmy.R;
|
||||||
import eu.toldi.infinityforlemmy.activities.BaseActivity;
|
import eu.toldi.infinityforlemmy.activities.BaseActivity;
|
||||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||||
import eu.toldi.infinityforlemmy.subreddit.SubredditWithSelection;
|
import eu.toldi.infinityforlemmy.subreddit.SubredditWithSelection;
|
||||||
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
|
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
|
||||||
|
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
||||||
import pl.droidsonroids.gif.GifImageView;
|
import pl.droidsonroids.gif.GifImageView;
|
||||||
|
|
||||||
public class SubredditMultiselectionRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
public class SubredditMultiselectionRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
||||||
@ -53,6 +53,7 @@ public class SubredditMultiselectionRecyclerViewAdapter extends RecyclerView.Ada
|
|||||||
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
|
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
|
||||||
if (holder instanceof SubscribedSubredditViewHolder) {
|
if (holder instanceof SubscribedSubredditViewHolder) {
|
||||||
((SubscribedSubredditViewHolder) holder).nameTextView.setText(subscribedSubreddits.get(position).getName());
|
((SubscribedSubredditViewHolder) holder).nameTextView.setText(subscribedSubreddits.get(position).getName());
|
||||||
|
((SubscribedSubredditViewHolder) holder).instanceTextView.setText(subscribedSubreddits.get(position).getQualifiedName().substring(subscribedSubreddits.get(position).getQualifiedName().indexOf("@")));
|
||||||
glide.load(subscribedSubreddits.get(position).getIconUrl())
|
glide.load(subscribedSubreddits.get(position).getIconUrl())
|
||||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
|
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
|
||||||
.error(glide.load(R.drawable.subreddit_default_icon)
|
.error(glide.load(R.drawable.subreddit_default_icon)
|
||||||
@ -91,11 +92,11 @@ public class SubredditMultiselectionRecyclerViewAdapter extends RecyclerView.Ada
|
|||||||
notifyDataSetChanged();
|
notifyDataSetChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArrayList<String> getAllSelectedSubreddits() {
|
public ArrayList<SubredditWithSelection> getAllSelectedSubreddits() {
|
||||||
ArrayList<String> selectedSubreddits = new ArrayList<>();
|
ArrayList<SubredditWithSelection> selectedSubreddits = new ArrayList<>();
|
||||||
for (SubredditWithSelection s : subscribedSubreddits) {
|
for (SubredditWithSelection s : subscribedSubreddits) {
|
||||||
if (s.isSelected()) {
|
if (s.isSelected()) {
|
||||||
selectedSubreddits.add(s.getName());
|
selectedSubreddits.add(s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return selectedSubreddits;
|
return selectedSubreddits;
|
||||||
@ -107,6 +108,9 @@ public class SubredditMultiselectionRecyclerViewAdapter extends RecyclerView.Ada
|
|||||||
GifImageView iconImageView;
|
GifImageView iconImageView;
|
||||||
@BindView(R.id.name_text_view_item_subscribed_subreddit_multiselection)
|
@BindView(R.id.name_text_view_item_subscribed_subreddit_multiselection)
|
||||||
TextView nameTextView;
|
TextView nameTextView;
|
||||||
|
|
||||||
|
@BindView(R.id.instance_text_view_item_subscribed_subreddit_multiselection)
|
||||||
|
TextView instanceTextView;
|
||||||
@BindView(R.id.checkbox_item_subscribed_subreddit_multiselection)
|
@BindView(R.id.checkbox_item_subscribed_subreddit_multiselection)
|
||||||
CheckBox checkBox;
|
CheckBox checkBox;
|
||||||
|
|
||||||
@ -115,10 +119,12 @@ public class SubredditMultiselectionRecyclerViewAdapter extends RecyclerView.Ada
|
|||||||
this.itemView = itemView;
|
this.itemView = itemView;
|
||||||
ButterKnife.bind(this, itemView);
|
ButterKnife.bind(this, itemView);
|
||||||
nameTextView.setTextColor(primaryTextColor);
|
nameTextView.setTextColor(primaryTextColor);
|
||||||
|
instanceTextView.setTextColor(primaryTextColor);
|
||||||
checkBox.setButtonTintList(ColorStateList.valueOf(colorAccent));
|
checkBox.setButtonTintList(ColorStateList.valueOf(colorAccent));
|
||||||
|
|
||||||
if (activity.typeface != null) {
|
if (activity.typeface != null) {
|
||||||
nameTextView.setTypeface(activity.typeface);
|
nameTextView.setTypeface(activity.typeface);
|
||||||
|
instanceTextView.setTypeface(activity.typeface);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,8 +24,8 @@ public class AccountSectionRecyclerViewAdapter extends RecyclerView.Adapter<Recy
|
|||||||
|
|
||||||
private static final int VIEW_TYPE_MENU_GROUP_TITLE = 1;
|
private static final int VIEW_TYPE_MENU_GROUP_TITLE = 1;
|
||||||
private static final int VIEW_TYPE_MENU_ITEM = 2;
|
private static final int VIEW_TYPE_MENU_ITEM = 2;
|
||||||
private static final int ACCOUNT_SECTION_ITEMS = 4;
|
private static final int ACCOUNT_SECTION_ITEMS = 5;
|
||||||
private static final int ANONYMOUS_ACCOUNT_SECTION_ITEMS = 1;
|
private static final int ANONYMOUS_ACCOUNT_SECTION_ITEMS = 2;
|
||||||
|
|
||||||
private BaseActivity baseActivity;
|
private BaseActivity baseActivity;
|
||||||
private int inboxCount;
|
private int inboxCount;
|
||||||
@ -113,6 +113,10 @@ public class AccountSectionRecyclerViewAdapter extends RecyclerView.Adapter<Recy
|
|||||||
baseActivity.startActivity(intent);
|
baseActivity.startActivity(intent);
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
case 4:
|
||||||
|
stringId = R.string.multi_reddit;
|
||||||
|
drawableId = R.drawable.ic_multi_reddit_24dp;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
stringId = R.string.account_saved_thing_activity_label;
|
stringId = R.string.account_saved_thing_activity_label;
|
||||||
drawableId = R.drawable.ic_outline_bookmarks_24dp;
|
drawableId = R.drawable.ic_outline_bookmarks_24dp;
|
||||||
@ -125,6 +129,10 @@ public class AccountSectionRecyclerViewAdapter extends RecyclerView.Adapter<Recy
|
|||||||
stringId = R.string.subscriptions;
|
stringId = R.string.subscriptions;
|
||||||
drawableId = R.drawable.ic_subscritptions_bottom_app_bar_24dp;
|
drawableId = R.drawable.ic_subscritptions_bottom_app_bar_24dp;
|
||||||
break;
|
break;
|
||||||
|
case 2:
|
||||||
|
stringId = R.string.multi_reddit;
|
||||||
|
drawableId = R.drawable.ic_multi_reddit_24dp;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
stringId = R.string.anonymous_account_instance;
|
stringId = R.string.anonymous_account_instance;
|
||||||
drawableId = R.drawable.ic_account_circle_24dp;
|
drawableId = R.drawable.ic_account_circle_24dp;
|
||||||
|
@ -66,6 +66,9 @@ public interface LemmyAPI {
|
|||||||
@GET("api/v3/user/unread_count")
|
@GET("api/v3/user/unread_count")
|
||||||
Call<MessageCount> userUnreadCount(@NonNull @Query("auth") String access_token);
|
Call<MessageCount> userUnreadCount(@NonNull @Query("auth") String access_token);
|
||||||
|
|
||||||
|
@GET("api/v3/user/validate_auth")
|
||||||
|
Call<String> userValidateAuth();
|
||||||
|
|
||||||
@Headers("Content-Type: application/json")
|
@Headers("Content-Type: application/json")
|
||||||
@POST("api/v3/user/mention/mark_as_read")
|
@POST("api/v3/user/mention/mark_as_read")
|
||||||
Call<String> userMentionMarkAsRead(@Body ReadMessageDTO params);
|
Call<String> userMentionMarkAsRead(@Body ReadMessageDTO params);
|
||||||
|
@ -13,11 +13,7 @@ public class DeleteMultiredditInDatabase {
|
|||||||
String accountName, String multipath,
|
String accountName, String multipath,
|
||||||
DeleteMultiredditInDatabaseListener deleteMultiredditInDatabaseListener) {
|
DeleteMultiredditInDatabaseListener deleteMultiredditInDatabaseListener) {
|
||||||
executor.execute(() -> {
|
executor.execute(() -> {
|
||||||
if (accountName.equals("-")) {
|
|
||||||
redditDataRoomDatabase.multiRedditDao().anonymousDeleteMultiReddit(multipath);
|
redditDataRoomDatabase.multiRedditDao().anonymousDeleteMultiReddit(multipath);
|
||||||
} else {
|
|
||||||
redditDataRoomDatabase.multiRedditDao().deleteMultiReddit(multipath, accountName);
|
|
||||||
}
|
|
||||||
handler.post(deleteMultiredditInDatabaseListener::success);
|
handler.post(deleteMultiredditInDatabaseListener::success);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,7 @@ import eu.toldi.infinityforlemmy.RetrofitHolder;
|
|||||||
import eu.toldi.infinityforlemmy.account.Account;
|
import eu.toldi.infinityforlemmy.account.Account;
|
||||||
import eu.toldi.infinityforlemmy.site.FetchSiteInfo;
|
import eu.toldi.infinityforlemmy.site.FetchSiteInfo;
|
||||||
import eu.toldi.infinityforlemmy.site.SiteInfo;
|
import eu.toldi.infinityforlemmy.site.SiteInfo;
|
||||||
|
import eu.toldi.infinityforlemmy.user.MyUserInfo;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
|
|
||||||
public class SwitchAccount {
|
public class SwitchAccount {
|
||||||
@ -33,7 +34,7 @@ public class SwitchAccount {
|
|||||||
retrofitHolder.setAccessToken(null);
|
retrofitHolder.setAccessToken(null);
|
||||||
FetchSiteInfo.fetchSiteInfo(retrofitHolder.getRetrofit(), account.getAccessToken(), new FetchSiteInfo.FetchSiteInfoListener() {
|
FetchSiteInfo.fetchSiteInfo(retrofitHolder.getRetrofit(), account.getAccessToken(), new FetchSiteInfo.FetchSiteInfoListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onFetchSiteInfoSuccess(SiteInfo siteInfo) {
|
public void onFetchSiteInfoSuccess(SiteInfo siteInfo, MyUserInfo myUserInfo) {
|
||||||
boolean canDownvote = siteInfo.isEnable_downvotes();
|
boolean canDownvote = siteInfo.isEnable_downvotes();
|
||||||
currentAccountSharedPreferences.edit().putBoolean(SharedPreferencesUtils.CAN_DOWNVOTE, canDownvote).apply();
|
currentAccountSharedPreferences.edit().putBoolean(SharedPreferencesUtils.CAN_DOWNVOTE, canDownvote).apply();
|
||||||
String[] version = siteInfo.getVersion().split("\\.");
|
String[] version = siteInfo.getVersion().split("\\.");
|
||||||
@ -49,7 +50,7 @@ public class SwitchAccount {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFetchSiteInfoFailed() {
|
public void onFetchSiteInfoFailed(boolean parseFailed) {
|
||||||
Log.e("SwitchAccount", "Failed to fetch site info");
|
Log.e("SwitchAccount", "Failed to fetch site info");
|
||||||
currentAccountSharedPreferences.edit().putBoolean(SharedPreferencesUtils.CAN_DOWNVOTE, true).apply();
|
currentAccountSharedPreferences.edit().putBoolean(SharedPreferencesUtils.CAN_DOWNVOTE, true).apply();
|
||||||
}
|
}
|
||||||
|
@ -29,11 +29,20 @@ import eu.toldi.infinityforlemmy.utils.Utils;
|
|||||||
*/
|
*/
|
||||||
public class SortTypeBottomSheetFragment extends LandscapeExpandedRoundedBottomSheetDialogFragment {
|
public class SortTypeBottomSheetFragment extends LandscapeExpandedRoundedBottomSheetDialogFragment {
|
||||||
|
|
||||||
public static final String EXTRA_NO_BEST_TYPE = "ENBT";
|
|
||||||
public static final String EXTRA_CURRENT_SORT_TYPE = "ECST";
|
public static final String EXTRA_CURRENT_SORT_TYPE = "ECST";
|
||||||
|
|
||||||
|
public static final String EXTRA_PAGE_TYPE = "EPT";
|
||||||
|
|
||||||
|
public static final int PAGE_TYPE_FRONT_PAGE = 0;
|
||||||
|
public static final int PAGE_TYPE_COMMUNITY = 1;
|
||||||
|
public static final int PAGE_TYPE_USER = 2;
|
||||||
|
public static final int PAGE_TYPE_SEARCH = 3;
|
||||||
|
public static final int PAGE_TYPE_MULTICOMMUNITY = 4;
|
||||||
|
public static final int PAGE_TYPE_ANONYMOUS_FRONT_PAGE = 5;
|
||||||
|
|
||||||
|
|
||||||
@BindView(R.id.best_type_text_view_sort_type_bottom_sheet_fragment)
|
@BindView(R.id.best_type_text_view_sort_type_bottom_sheet_fragment)
|
||||||
TextView bestTypeTextView;
|
TextView activeTypeTextView;
|
||||||
@BindView(R.id.hot_type_text_view_sort_type_bottom_sheet_fragment)
|
@BindView(R.id.hot_type_text_view_sort_type_bottom_sheet_fragment)
|
||||||
TextView hotTypeTextView;
|
TextView hotTypeTextView;
|
||||||
@BindView(R.id.new_type_text_view_sort_type_bottom_sheet_fragment)
|
@BindView(R.id.new_type_text_view_sort_type_bottom_sheet_fragment)
|
||||||
@ -43,16 +52,28 @@ public class SortTypeBottomSheetFragment extends LandscapeExpandedRoundedBottomS
|
|||||||
@BindView(R.id.top_type_text_view_sort_type_bottom_sheet_fragment)
|
@BindView(R.id.top_type_text_view_sort_type_bottom_sheet_fragment)
|
||||||
TextView topTypeTextView;
|
TextView topTypeTextView;
|
||||||
|
|
||||||
|
@BindView(R.id.scaled_type_text_view_sort_type_bottom_sheet_fragment)
|
||||||
|
TextView scaledTypeTextView;
|
||||||
|
|
||||||
|
@BindView(R.id.controversial_type_text_view_sort_type_bottom_sheet_fragment)
|
||||||
|
TextView controversialTypeTextView;
|
||||||
|
|
||||||
|
@BindView(R.id.most_comments_type_text_view_sort_type_bottom_sheet_fragment)
|
||||||
|
TextView mostCommentsTypeTextView;
|
||||||
|
|
||||||
|
@BindView(R.id.new_comments_type_text_view_sort_type_bottom_sheet_fragment)
|
||||||
|
TextView newCommentsTypeTextView;
|
||||||
|
|
||||||
private BaseActivity activity;
|
private BaseActivity activity;
|
||||||
|
|
||||||
public SortTypeBottomSheetFragment() {
|
public SortTypeBottomSheetFragment() {
|
||||||
// Required empty public constructor
|
// Required empty public constructor
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SortTypeBottomSheetFragment getNewInstance(boolean isNoBestType, SortType currentSortType) {
|
public static SortTypeBottomSheetFragment getNewInstance(int pageType, SortType currentSortType) {
|
||||||
SortTypeBottomSheetFragment fragment = new SortTypeBottomSheetFragment();
|
SortTypeBottomSheetFragment fragment = new SortTypeBottomSheetFragment();
|
||||||
Bundle bundle = new Bundle();
|
Bundle bundle = new Bundle();
|
||||||
bundle.putBoolean(EXTRA_NO_BEST_TYPE, isNoBestType);
|
bundle.putInt(EXTRA_PAGE_TYPE, pageType);
|
||||||
bundle.putString(EXTRA_CURRENT_SORT_TYPE, currentSortType.getType().fullName);
|
bundle.putString(EXTRA_CURRENT_SORT_TYPE, currentSortType.getType().fullName);
|
||||||
fragment.setArguments(bundle);
|
fragment.setArguments(bundle);
|
||||||
return fragment;
|
return fragment;
|
||||||
@ -69,18 +90,31 @@ public class SortTypeBottomSheetFragment extends LandscapeExpandedRoundedBottomS
|
|||||||
rootView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
|
rootView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getArguments().getBoolean(EXTRA_NO_BEST_TYPE)) {
|
int pageType = getArguments().getInt(EXTRA_PAGE_TYPE, PAGE_TYPE_USER);
|
||||||
bestTypeTextView.setVisibility(View.GONE);
|
|
||||||
} else {
|
switch (pageType) {
|
||||||
bestTypeTextView.setOnClickListener(view -> {
|
|
||||||
((SortTypeSelectionCallback) activity).sortTypeSelected(new SortType(SortType.Type.ACTIVE));
|
case PAGE_TYPE_MULTICOMMUNITY:
|
||||||
dismiss();
|
case PAGE_TYPE_USER:
|
||||||
});
|
case PAGE_TYPE_ANONYMOUS_FRONT_PAGE:
|
||||||
|
activeTypeTextView.setVisibility(View.GONE);
|
||||||
|
hotTypeTextView.setVisibility(View.GONE);
|
||||||
|
scaledTypeTextView.setVisibility(View.GONE);
|
||||||
|
controversialTypeTextView.setVisibility(View.GONE);
|
||||||
|
mostCommentsTypeTextView.setVisibility(View.GONE);
|
||||||
|
newCommentsTypeTextView.setVisibility(View.GONE);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
case PAGE_TYPE_COMMUNITY:
|
||||||
|
case PAGE_TYPE_FRONT_PAGE:
|
||||||
|
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
String currentSortType = getArguments().getString(EXTRA_CURRENT_SORT_TYPE);
|
String currentSortType = getArguments().getString(EXTRA_CURRENT_SORT_TYPE);
|
||||||
if (currentSortType.equals(SortType.Type.ACTIVE.fullName)) {
|
if (currentSortType.equals(SortType.Type.ACTIVE.fullName)) {
|
||||||
bestTypeTextView.setCompoundDrawablesRelativeWithIntrinsicBounds(bestTypeTextView.getCompoundDrawablesRelative()[0], null, AppCompatResources.getDrawable(activity, R.drawable.ic_round_check_circle_day_night_24dp), null);
|
activeTypeTextView.setCompoundDrawablesRelativeWithIntrinsicBounds(activeTypeTextView.getCompoundDrawablesRelative()[0], null, AppCompatResources.getDrawable(activity, R.drawable.ic_round_check_circle_day_night_24dp), null);
|
||||||
} else if (currentSortType.equals(SortType.Type.HOT.fullName)) {
|
} else if (currentSortType.equals(SortType.Type.HOT.fullName)) {
|
||||||
hotTypeTextView.setCompoundDrawablesRelativeWithIntrinsicBounds(hotTypeTextView.getCompoundDrawablesRelative()[0], null, AppCompatResources.getDrawable(activity, R.drawable.ic_round_check_circle_day_night_24dp), null);
|
hotTypeTextView.setCompoundDrawablesRelativeWithIntrinsicBounds(hotTypeTextView.getCompoundDrawablesRelative()[0], null, AppCompatResources.getDrawable(activity, R.drawable.ic_round_check_circle_day_night_24dp), null);
|
||||||
} else if (currentSortType.equals(SortType.Type.NEW.fullName)) {
|
} else if (currentSortType.equals(SortType.Type.NEW.fullName)) {
|
||||||
@ -89,8 +123,21 @@ public class SortTypeBottomSheetFragment extends LandscapeExpandedRoundedBottomS
|
|||||||
oldTypeTextView.setCompoundDrawablesRelativeWithIntrinsicBounds(oldTypeTextView.getCompoundDrawablesRelative()[0], null, AppCompatResources.getDrawable(activity, R.drawable.ic_round_check_circle_day_night_24dp), null);
|
oldTypeTextView.setCompoundDrawablesRelativeWithIntrinsicBounds(oldTypeTextView.getCompoundDrawablesRelative()[0], null, AppCompatResources.getDrawable(activity, R.drawable.ic_round_check_circle_day_night_24dp), null);
|
||||||
} else if (currentSortType.equals(SortType.Type.TOP.fullName)) {
|
} else if (currentSortType.equals(SortType.Type.TOP.fullName)) {
|
||||||
topTypeTextView.setCompoundDrawablesRelativeWithIntrinsicBounds(topTypeTextView.getCompoundDrawablesRelative()[0], null, AppCompatResources.getDrawable(activity, R.drawable.ic_round_check_circle_day_night_24dp), null);
|
topTypeTextView.setCompoundDrawablesRelativeWithIntrinsicBounds(topTypeTextView.getCompoundDrawablesRelative()[0], null, AppCompatResources.getDrawable(activity, R.drawable.ic_round_check_circle_day_night_24dp), null);
|
||||||
|
} else if (currentSortType.equals(SortType.Type.SCALED.fullName)) {
|
||||||
|
scaledTypeTextView.setCompoundDrawablesRelativeWithIntrinsicBounds(scaledTypeTextView.getCompoundDrawablesRelative()[0], null, AppCompatResources.getDrawable(activity, R.drawable.ic_round_check_circle_day_night_24dp), null);
|
||||||
|
} else if (currentSortType.equals(SortType.Type.CONTROVERSIAL.fullName)) {
|
||||||
|
controversialTypeTextView.setCompoundDrawablesRelativeWithIntrinsicBounds(controversialTypeTextView.getCompoundDrawablesRelative()[0], null, AppCompatResources.getDrawable(activity, R.drawable.ic_round_check_circle_day_night_24dp), null);
|
||||||
|
} else if (currentSortType.equals(SortType.Type.MOST_COMMENTS.fullName)) {
|
||||||
|
mostCommentsTypeTextView.setCompoundDrawablesRelativeWithIntrinsicBounds(mostCommentsTypeTextView.getCompoundDrawablesRelative()[0], null, AppCompatResources.getDrawable(activity, R.drawable.ic_round_check_circle_day_night_24dp), null);
|
||||||
|
} else if (currentSortType.equals(SortType.Type.NEW_COMMENTS.fullName)) {
|
||||||
|
newCommentsTypeTextView.setCompoundDrawablesRelativeWithIntrinsicBounds(newCommentsTypeTextView.getCompoundDrawablesRelative()[0], null, AppCompatResources.getDrawable(activity, R.drawable.ic_round_check_circle_day_night_24dp), null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
activeTypeTextView.setOnClickListener(view -> {
|
||||||
|
((SortTypeSelectionCallback) activity).sortTypeSelected(new SortType(SortType.Type.ACTIVE));
|
||||||
|
dismiss();
|
||||||
|
});
|
||||||
|
|
||||||
hotTypeTextView.setOnClickListener(view -> {
|
hotTypeTextView.setOnClickListener(view -> {
|
||||||
((SortTypeSelectionCallback) activity).sortTypeSelected(new SortType(SortType.Type.HOT));
|
((SortTypeSelectionCallback) activity).sortTypeSelected(new SortType(SortType.Type.HOT));
|
||||||
dismiss();
|
dismiss();
|
||||||
@ -111,6 +158,26 @@ public class SortTypeBottomSheetFragment extends LandscapeExpandedRoundedBottomS
|
|||||||
dismiss();
|
dismiss();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
scaledTypeTextView.setOnClickListener(view -> {
|
||||||
|
((SortTypeSelectionCallback) activity).sortTypeSelected(new SortType(SortType.Type.SCALED));
|
||||||
|
dismiss();
|
||||||
|
});
|
||||||
|
|
||||||
|
controversialTypeTextView.setOnClickListener(view -> {
|
||||||
|
((SortTypeSelectionCallback) activity).sortTypeSelected(new SortType(SortType.Type.CONTROVERSIAL));
|
||||||
|
dismiss();
|
||||||
|
});
|
||||||
|
|
||||||
|
mostCommentsTypeTextView.setOnClickListener(view -> {
|
||||||
|
((SortTypeSelectionCallback) activity).sortTypeSelected(new SortType(SortType.Type.MOST_COMMENTS));
|
||||||
|
dismiss();
|
||||||
|
});
|
||||||
|
|
||||||
|
newCommentsTypeTextView.setOnClickListener(view -> {
|
||||||
|
((SortTypeSelectionCallback) activity).sortTypeSelected(new SortType(SortType.Type.NEW_COMMENTS));
|
||||||
|
dismiss();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
if (activity.typeface != null) {
|
if (activity.typeface != null) {
|
||||||
Utils.setFontToAllTextViews(rootView, activity.typeface);
|
Utils.setFontToAllTextViews(rootView, activity.typeface);
|
||||||
|
@ -37,8 +37,6 @@ public class UserThingSortTypeBottomSheetFragment extends LandscapeExpandedRound
|
|||||||
TextView hotTypeTextView;
|
TextView hotTypeTextView;
|
||||||
@BindView(R.id.top_type_text_view_user_thing_sort_type_bottom_sheet_fragment)
|
@BindView(R.id.top_type_text_view_user_thing_sort_type_bottom_sheet_fragment)
|
||||||
TextView topTypeTextView;
|
TextView topTypeTextView;
|
||||||
@BindView(R.id.controversial_type_text_view_user_thing_sort_type_bottom_sheet_fragment)
|
|
||||||
TextView controversialTypeTextView;
|
|
||||||
private BaseActivity activity;
|
private BaseActivity activity;
|
||||||
|
|
||||||
public UserThingSortTypeBottomSheetFragment() {
|
public UserThingSortTypeBottomSheetFragment() {
|
||||||
@ -95,12 +93,6 @@ public class UserThingSortTypeBottomSheetFragment extends LandscapeExpandedRound
|
|||||||
dismiss();
|
dismiss();
|
||||||
});
|
});
|
||||||
|
|
||||||
/* controversialTypeTextView.setOnClickListener(view -> {
|
|
||||||
if (activity != null) {
|
|
||||||
((SortTypeSelectionCallback) activity).sortTypeSelected(SortType.Type.CONTROVERSIAL.name());
|
|
||||||
}
|
|
||||||
dismiss();
|
|
||||||
});*/
|
|
||||||
|
|
||||||
if (activity.typeface != null) {
|
if (activity.typeface != null) {
|
||||||
Utils.setFontToAllTextViews(rootView, activity.typeface);
|
Utils.setFontToAllTextViews(rootView, activity.typeface);
|
||||||
|
@ -29,7 +29,6 @@ import javax.inject.Named;
|
|||||||
|
|
||||||
import butterknife.BindView;
|
import butterknife.BindView;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
import me.zhanghai.android.fastscroll.FastScrollerBuilder;
|
|
||||||
import eu.toldi.infinityforlemmy.FragmentCommunicator;
|
import eu.toldi.infinityforlemmy.FragmentCommunicator;
|
||||||
import eu.toldi.infinityforlemmy.Infinity;
|
import eu.toldi.infinityforlemmy.Infinity;
|
||||||
import eu.toldi.infinityforlemmy.R;
|
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.MultiReddit;
|
||||||
import eu.toldi.infinityforlemmy.multireddit.MultiRedditViewModel;
|
import eu.toldi.infinityforlemmy.multireddit.MultiRedditViewModel;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
|
import me.zhanghai.android.fastscroll.FastScrollerBuilder;
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
|
|
||||||
public class MultiRedditListingFragment extends Fragment implements FragmentCommunicator {
|
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);
|
String accessToken = getArguments().getString(EXTRA_ACCESS_TOKEN);
|
||||||
boolean isGettingMultiredditInfo = getArguments().getBoolean(EXTRA_IS_GETTING_MULTIREDDIT_INFO, false);
|
boolean isGettingMultiredditInfo = getArguments().getBoolean(EXTRA_IS_GETTING_MULTIREDDIT_INFO, false);
|
||||||
|
|
||||||
if (accessToken == null) {
|
|
||||||
mSwipeRefreshLayout.setEnabled(false);
|
mSwipeRefreshLayout.setEnabled(false);
|
||||||
}
|
|
||||||
|
|
||||||
mGlide = Glide.with(this);
|
mGlide = Glide.with(this);
|
||||||
|
|
||||||
|
@ -435,7 +435,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
|
|||||||
|
|
||||||
postType = getArguments().getInt(EXTRA_POST_TYPE);
|
postType = getArguments().getInt(EXTRA_POST_TYPE);
|
||||||
|
|
||||||
mSwipeRefreshLayout.setEnabled(mSharedPreferences.getBoolean(SharedPreferencesUtils.PULL_TO_REFRESH, true) && postType != PostPagingSource.TYPE_ANONYMOUS_FRONT_PAGE);
|
mSwipeRefreshLayout.setEnabled(mSharedPreferences.getBoolean(SharedPreferencesUtils.PULL_TO_REFRESH, true));
|
||||||
mSwipeRefreshLayout.setOnRefreshListener(this::refresh);
|
mSwipeRefreshLayout.setOnRefreshListener(this::refresh);
|
||||||
|
|
||||||
accessToken = getArguments().getString(EXTRA_ACCESS_TOKEN);
|
accessToken = getArguments().getString(EXTRA_ACCESS_TOKEN);
|
||||||
@ -597,7 +597,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
|
|||||||
String sortTime = null;
|
String sortTime = null;
|
||||||
|
|
||||||
sort = mSortTypeSharedPreferences.getString(SharedPreferencesUtils.SORT_TYPE_MULTI_REDDIT_POST_BASE + multiRedditPath,
|
sort = mSortTypeSharedPreferences.getString(SharedPreferencesUtils.SORT_TYPE_MULTI_REDDIT_POST_BASE + multiRedditPath,
|
||||||
SortType.Type.HOT.name());
|
SortType.Type.NEW.name());
|
||||||
if (sort.equals(SortType.Type.TOP.name())) {
|
if (sort.equals(SortType.Type.TOP.name())) {
|
||||||
sortTime = mSortTypeSharedPreferences.getString(SharedPreferencesUtils.SORT_TIME_MULTI_REDDIT_POST_BASE + multiRedditPath,
|
sortTime = mSortTypeSharedPreferences.getString(SharedPreferencesUtils.SORT_TIME_MULTI_REDDIT_POST_BASE + multiRedditPath,
|
||||||
SortType.Time.ALL.name());
|
SortType.Time.ALL.name());
|
||||||
@ -728,7 +728,7 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
|
|||||||
nameOfUsage = PostFilterUsage.NO_USAGE;
|
nameOfUsage = PostFilterUsage.NO_USAGE;
|
||||||
subredditName = getArguments().getString(EXTRA_NAME);
|
subredditName = getArguments().getString(EXTRA_NAME);
|
||||||
|
|
||||||
String sort = mSortTypeSharedPreferences.getString(SharedPreferencesUtils.SORT_TYPE_SUBREDDIT_POST_BASE + "-", SortType.Type.HOT.name());
|
String sort = mSortTypeSharedPreferences.getString(SharedPreferencesUtils.SORT_TYPE_SUBREDDIT_POST_BASE + "-", SortType.Type.NEW.name());
|
||||||
String sortTime = null;
|
String sortTime = null;
|
||||||
if (sort.equals(SortType.Type.TOP.name())) {
|
if (sort.equals(SortType.Type.TOP.name())) {
|
||||||
sortTime = mSortTypeSharedPreferences.getString(SharedPreferencesUtils.SORT_TIME_SUBREDDIT_POST_BASE + "-", SortType.Time.ALL.name());
|
sortTime = mSortTypeSharedPreferences.getString(SharedPreferencesUtils.SORT_TIME_SUBREDDIT_POST_BASE + "-", SortType.Time.ALL.name());
|
||||||
@ -967,7 +967,8 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
|
|||||||
this.postFilter = postFilter;
|
this.postFilter = postFilter;
|
||||||
postFilter.allowNSFW = !mSharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_NSFW_FOREVER, false) && mNsfwAndSpoilerSharedPreferences.getBoolean(SharedPreferencesUtils.NSFW_BASE, false);
|
postFilter.allowNSFW = !mSharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_NSFW_FOREVER, false) && mNsfwAndSpoilerSharedPreferences.getBoolean(SharedPreferencesUtils.NSFW_BASE, false);
|
||||||
this.concatenatedSubredditNames = concatenatedSubredditNames;
|
this.concatenatedSubredditNames = concatenatedSubredditNames;
|
||||||
showErrorView(R.string.anonymous_homepage_not_implemented);
|
//showErrorView(R.string.anonymous_homepage_not_implemented);
|
||||||
|
initializeAndBindPostViewModelForAnonymous(concatenatedSubredditNames);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
@ -1009,7 +1010,8 @@ public class PostFragment extends Fragment implements FragmentCommunicator {
|
|||||||
if (activity != null && !activity.isFinishing() && !activity.isDestroyed() && !isDetached()) {
|
if (activity != null && !activity.isFinishing() && !activity.isDestroyed() && !isDetached()) {
|
||||||
postFilter.allowNSFW = !mSharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_NSFW_FOREVER, false) && mNsfwAndSpoilerSharedPreferences.getBoolean(SharedPreferencesUtils.NSFW_BASE, false);
|
postFilter.allowNSFW = !mSharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_NSFW_FOREVER, false) && mNsfwAndSpoilerSharedPreferences.getBoolean(SharedPreferencesUtils.NSFW_BASE, false);
|
||||||
this.concatenatedSubredditNames = concatenatedSubredditNames;
|
this.concatenatedSubredditNames = concatenatedSubredditNames;
|
||||||
showErrorView(R.string.anonymous_homepage_not_implemented);
|
//showErrorView(R.string.anonymous_homepage_not_implemented);
|
||||||
|
initializeAndBindPostViewModelForAnonymous(concatenatedSubredditNames);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
@ -558,7 +558,7 @@ public class ViewPostDetailFragment extends Fragment implements FragmentCommunic
|
|||||||
touchHelper.attachToRecyclerView((mCommentsRecyclerView == null ? mRecyclerView : mCommentsRecyclerView));
|
touchHelper.attachToRecyclerView((mCommentsRecyclerView == null ? mRecyclerView : mCommentsRecyclerView));
|
||||||
}
|
}
|
||||||
|
|
||||||
mSwipeRefreshLayout.setOnRefreshListener(() -> refresh());
|
mSwipeRefreshLayout.setOnRefreshListener(() -> refresh(true, true));
|
||||||
|
|
||||||
mSmoothScroller = new LinearSmoothScroller(activity) {
|
mSmoothScroller = new LinearSmoothScroller(activity) {
|
||||||
@Override
|
@Override
|
||||||
|
@ -4,7 +4,6 @@ import android.os.Handler;
|
|||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -13,6 +12,7 @@ import java.util.concurrent.Executor;
|
|||||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
||||||
import eu.toldi.infinityforlemmy.account.Account;
|
import eu.toldi.infinityforlemmy.account.Account;
|
||||||
import eu.toldi.infinityforlemmy.apis.RedditAPI;
|
import eu.toldi.infinityforlemmy.apis.RedditAPI;
|
||||||
|
import eu.toldi.infinityforlemmy.subreddit.SubredditWithSelection;
|
||||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
import retrofit2.Callback;
|
import retrofit2.Callback;
|
||||||
@ -62,21 +62,22 @@ public class CreateMultiReddit {
|
|||||||
|
|
||||||
public static void anonymousCreateMultiReddit(Executor executor, Handler handler,
|
public static void anonymousCreateMultiReddit(Executor executor, Handler handler,
|
||||||
RedditDataRoomDatabase redditDataRoomDatabase,
|
RedditDataRoomDatabase redditDataRoomDatabase,
|
||||||
|
String accountName,
|
||||||
String multipath, String name, String description,
|
String multipath, String name, String description,
|
||||||
List<String> subreddits,
|
List<SubredditWithSelection> subreddits,
|
||||||
CreateMultiRedditListener createMultiRedditListener) {
|
CreateMultiRedditListener createMultiRedditListener) {
|
||||||
executor.execute(() -> {
|
executor.execute(() -> {
|
||||||
if (!redditDataRoomDatabase.accountDao().isAnonymousAccountInserted()) {
|
if (!redditDataRoomDatabase.accountDao().isAnonymousAccountInserted()) {
|
||||||
redditDataRoomDatabase.accountDao().insert(Account.getAnonymousAccount());
|
redditDataRoomDatabase.accountDao().insert(Account.getAnonymousAccount());
|
||||||
}
|
}
|
||||||
redditDataRoomDatabase.multiRedditDao().insert(new MultiReddit(multipath, name, name, description,
|
redditDataRoomDatabase.multiRedditDao().insert(new MultiReddit(multipath, name, name, description,
|
||||||
null, null, "private", "-", 0, System.currentTimeMillis(), true, false, false));
|
null, null, "private", accountName, 0, System.currentTimeMillis(), true, false, false));
|
||||||
List<AnonymousMultiredditSubreddit> anonymousMultiredditSubreddits = new ArrayList<>();
|
/*List<AnonymousMultiredditSubreddit> anonymousMultiredditSubreddits = new ArrayList<>();
|
||||||
for (String s : subreddits) {
|
for (SubredditWithSelection s : subreddits) {
|
||||||
anonymousMultiredditSubreddits.add(new AnonymousMultiredditSubreddit(multipath, s));
|
anonymousMultiredditSubreddits.add(new AnonymousMultiredditSubreddit(multipath, s.getQualifiedName()));
|
||||||
}
|
}
|
||||||
redditDataRoomDatabase.anonymousMultiredditSubredditDao().insertAll(anonymousMultiredditSubreddits);
|
redditDataRoomDatabase.anonymousMultiredditSubredditDao().insertAll(anonymousMultiredditSubreddits);
|
||||||
|
*/
|
||||||
handler.post(createMultiRedditListener::success);
|
handler.post(createMultiRedditListener::success);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,7 @@ import java.util.concurrent.Executor;
|
|||||||
|
|
||||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
||||||
import eu.toldi.infinityforlemmy.apis.RedditAPI;
|
import eu.toldi.infinityforlemmy.apis.RedditAPI;
|
||||||
|
import eu.toldi.infinityforlemmy.subreddit.SubredditWithSelection;
|
||||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
import retrofit2.Callback;
|
import retrofit2.Callback;
|
||||||
@ -48,16 +49,14 @@ public class EditMultiReddit {
|
|||||||
|
|
||||||
public static void anonymousEditMultiReddit(Executor executor, Handler handler,
|
public static void anonymousEditMultiReddit(Executor executor, Handler handler,
|
||||||
RedditDataRoomDatabase redditDataRoomDatabase,
|
RedditDataRoomDatabase redditDataRoomDatabase,
|
||||||
MultiReddit multiReddit,
|
MultiReddit multiReddit, String oldPath,
|
||||||
EditMultiRedditListener editMultiRedditListener) {
|
EditMultiRedditListener editMultiRedditListener) {
|
||||||
executor.execute(() -> {
|
executor.execute(() -> {
|
||||||
ArrayList<AnonymousMultiredditSubreddit> anonymousMultiredditSubreddits = new ArrayList<>();
|
ArrayList<AnonymousMultiredditSubreddit> anonymousMultiredditSubreddits = new ArrayList<>();
|
||||||
ArrayList<String> subreddits = multiReddit.getSubreddits();
|
ArrayList<SubredditWithSelection> subreddits = multiReddit.getSubreddits();
|
||||||
|
redditDataRoomDatabase.multiRedditDao().anonymousDeleteMultiReddit(oldPath);
|
||||||
redditDataRoomDatabase.multiRedditDao().insert(multiReddit);
|
redditDataRoomDatabase.multiRedditDao().insert(multiReddit);
|
||||||
for (String s : subreddits) {
|
|
||||||
anonymousMultiredditSubreddits.add(new AnonymousMultiredditSubreddit(multiReddit.getPath(), s));
|
|
||||||
}
|
|
||||||
redditDataRoomDatabase.anonymousMultiredditSubredditDao().insertAll(anonymousMultiredditSubreddits);
|
|
||||||
handler.post(editMultiRedditListener::success);
|
handler.post(editMultiRedditListener::success);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -14,8 +14,9 @@ import java.util.concurrent.Executor;
|
|||||||
|
|
||||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
||||||
import eu.toldi.infinityforlemmy.apis.RedditAPI;
|
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.APIUtils;
|
||||||
|
import eu.toldi.infinityforlemmy.utils.JSONUtils;
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
import retrofit2.Callback;
|
import retrofit2.Callback;
|
||||||
import retrofit2.Response;
|
import retrofit2.Response;
|
||||||
@ -49,16 +50,14 @@ public class FetchMultiRedditInfo {
|
|||||||
|
|
||||||
public static void anonymousFetchMultiRedditInfo(Executor executor, Handler handler,
|
public static void anonymousFetchMultiRedditInfo(Executor executor, Handler handler,
|
||||||
RedditDataRoomDatabase redditDataRoomDatabase,
|
RedditDataRoomDatabase redditDataRoomDatabase,
|
||||||
String multipath,
|
String multipath, String accountName,
|
||||||
FetchMultiRedditInfoListener fetchMultiRedditInfoListener) {
|
FetchMultiRedditInfoListener fetchMultiRedditInfoListener) {
|
||||||
executor.execute(() -> {
|
executor.execute(() -> {
|
||||||
MultiReddit multiReddit = redditDataRoomDatabase.multiRedditDao().getMultiReddit(multipath, "-");
|
MultiReddit multiReddit = redditDataRoomDatabase.multiRedditDao().getMultiReddit(multipath, accountName);
|
||||||
ArrayList<AnonymousMultiredditSubreddit> anonymousMultiredditSubreddits =
|
ArrayList<AnonymousMultiredditSubreddit> anonymousMultiredditSubreddits =
|
||||||
(ArrayList<AnonymousMultiredditSubreddit>) redditDataRoomDatabase.anonymousMultiredditSubredditDao().getAllAnonymousMultiRedditSubreddits(multipath);
|
(ArrayList<AnonymousMultiredditSubreddit>) redditDataRoomDatabase.anonymousMultiredditSubredditDao().getAllAnonymousMultiRedditSubreddits(multipath);
|
||||||
ArrayList<String> subredditNames = new ArrayList<>();
|
ArrayList<SubredditWithSelection> subredditNames = new ArrayList<>();
|
||||||
for (AnonymousMultiredditSubreddit a : anonymousMultiredditSubreddits) {
|
|
||||||
subredditNames.add(a.getSubredditName());
|
|
||||||
}
|
|
||||||
multiReddit.setSubreddits(subredditNames);
|
multiReddit.setSubreddits(subredditNames);
|
||||||
handler.post(() -> fetchMultiRedditInfoListener.success(multiReddit));
|
handler.post(() -> fetchMultiRedditInfoListener.success(multiReddit));
|
||||||
});
|
});
|
||||||
@ -93,11 +92,9 @@ public class FetchMultiRedditInfo {
|
|||||||
boolean over18 = object.getBoolean(JSONUtils.OVER_18_KEY);
|
boolean over18 = object.getBoolean(JSONUtils.OVER_18_KEY);
|
||||||
boolean isSubscriber = object.getBoolean(JSONUtils.IS_SUBSCRIBER_KEY);
|
boolean isSubscriber = object.getBoolean(JSONUtils.IS_SUBSCRIBER_KEY);
|
||||||
boolean isFavorite = object.getBoolean(JSONUtils.IS_FAVORITED_KEY);
|
boolean isFavorite = object.getBoolean(JSONUtils.IS_FAVORITED_KEY);
|
||||||
ArrayList<String> subreddits = new ArrayList<>();
|
ArrayList<SubredditWithSelection> subreddits = new ArrayList<>();
|
||||||
JSONArray subredditsArray = object.getJSONArray(JSONUtils.SUBREDDITS_KEY);
|
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,
|
multiReddit = new MultiReddit(path, displayName, name, description, copiedFrom, iconUrl,
|
||||||
visibility, owner, nSubscribers, createdUTC, over18, isSubscriber, isFavorite,
|
visibility, owner, nSubscribers, createdUTC, over18, isSubscriber, isFavorite,
|
||||||
|
@ -12,6 +12,7 @@ import androidx.room.Ignore;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import eu.toldi.infinityforlemmy.account.Account;
|
import eu.toldi.infinityforlemmy.account.Account;
|
||||||
|
import eu.toldi.infinityforlemmy.subreddit.SubredditWithSelection;
|
||||||
|
|
||||||
@Entity(tableName = "multi_reddits", primaryKeys = {"path", "username"},
|
@Entity(tableName = "multi_reddits", primaryKeys = {"path", "username"},
|
||||||
foreignKeys = @ForeignKey(entity = Account.class, parentColumns = "username",
|
foreignKeys = @ForeignKey(entity = Account.class, parentColumns = "username",
|
||||||
@ -48,7 +49,7 @@ public class MultiReddit implements Parcelable {
|
|||||||
@ColumnInfo(name = "is_favorite")
|
@ColumnInfo(name = "is_favorite")
|
||||||
private boolean isFavorite;
|
private boolean isFavorite;
|
||||||
@Ignore
|
@Ignore
|
||||||
private ArrayList<String> subreddits;
|
private ArrayList<SubredditWithSelection> subreddits;
|
||||||
|
|
||||||
public MultiReddit(@NonNull String path, @NonNull String displayName, @NonNull String name,
|
public MultiReddit(@NonNull String path, @NonNull String displayName, @NonNull String name,
|
||||||
String description, String copiedFrom, String iconUrl, String visibility,
|
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,
|
public MultiReddit(@NonNull String path, @NonNull String displayName, @NonNull String name,
|
||||||
String description, String copiedFrom, String iconUrl, String visibility,
|
String description, String copiedFrom, String iconUrl, String visibility,
|
||||||
@NonNull String owner, int nSubscribers, long createdUTC, boolean over18,
|
@NonNull String owner, int nSubscribers, long createdUTC, boolean over18,
|
||||||
boolean isSubscriber, boolean isFavorite, ArrayList<String> subreddits) {
|
boolean isSubscriber, boolean isFavorite, ArrayList<SubredditWithSelection> subreddits) {
|
||||||
this.displayName = displayName;
|
this.displayName = displayName;
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.description = description;
|
this.description = description;
|
||||||
@ -104,7 +105,7 @@ public class MultiReddit implements Parcelable {
|
|||||||
isSubscriber = in.readByte() != 0;
|
isSubscriber = in.readByte() != 0;
|
||||||
isFavorite = in.readByte() != 0;
|
isFavorite = in.readByte() != 0;
|
||||||
subreddits = new ArrayList<>();
|
subreddits = new ArrayList<>();
|
||||||
in.readStringList(subreddits);
|
in.readList(subreddits, SubredditWithSelection.class.getClassLoader());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final Creator<MultiReddit> CREATOR = new Creator<>() {
|
public static final Creator<MultiReddit> CREATOR = new Creator<>() {
|
||||||
@ -226,11 +227,11 @@ public class MultiReddit implements Parcelable {
|
|||||||
isFavorite = favorite;
|
isFavorite = favorite;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArrayList<String> getSubreddits() {
|
public ArrayList<SubredditWithSelection> getSubreddits() {
|
||||||
return subreddits;
|
return subreddits;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSubreddits(ArrayList<String> subreddits) {
|
public void setSubreddits(ArrayList<SubredditWithSelection> subreddits) {
|
||||||
this.subreddits = subreddits;
|
this.subreddits = subreddits;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -254,6 +255,6 @@ public class MultiReddit implements Parcelable {
|
|||||||
parcel.writeByte((byte) (over18 ? 1 : 0));
|
parcel.writeByte((byte) (over18 ? 1 : 0));
|
||||||
parcel.writeByte((byte) (isSubscriber ? 1 : 0));
|
parcel.writeByte((byte) (isSubscriber ? 1 : 0));
|
||||||
parcel.writeByte((byte) (isFavorite ? 1 : 0));
|
parcel.writeByte((byte) (isFavorite ? 1 : 0));
|
||||||
parcel.writeStringList(subreddits);
|
parcel.writeList(subreddits);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ import org.json.JSONObject;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
||||||
|
import eu.toldi.infinityforlemmy.subreddit.SubredditWithSelection;
|
||||||
import eu.toldi.infinityforlemmy.utils.JSONUtils;
|
import eu.toldi.infinityforlemmy.utils.JSONUtils;
|
||||||
|
|
||||||
public class ParseMultiReddit {
|
public class ParseMultiReddit {
|
||||||
@ -47,10 +48,8 @@ public class ParseMultiReddit {
|
|||||||
boolean isFavorited = singleMultiRedditJSON.getBoolean(JSONUtils.IS_FAVORITED_KEY);
|
boolean isFavorited = singleMultiRedditJSON.getBoolean(JSONUtils.IS_FAVORITED_KEY);
|
||||||
|
|
||||||
JSONArray subredditsArray = singleMultiRedditJSON.getJSONArray(JSONUtils.SUBREDDITS_KEY);
|
JSONArray subredditsArray = singleMultiRedditJSON.getJSONArray(JSONUtils.SUBREDDITS_KEY);
|
||||||
ArrayList<String> subreddits = new ArrayList<>();
|
ArrayList<SubredditWithSelection> subreddits = new ArrayList<>();
|
||||||
for (int j = 0; j < subredditsArray.length(); j++) {
|
|
||||||
subreddits.add(subredditsArray.getJSONObject(j).getString(JSONUtils.NAME_KEY));
|
|
||||||
}
|
|
||||||
|
|
||||||
return new MultiReddit(path, displayName, name, description, copiedFrom,
|
return new MultiReddit(path, displayName, name, description, copiedFrom,
|
||||||
iconUrl, visibility, owner, nSubscribers, createdUTC, over18, isSubscriber,
|
iconUrl, visibility, owner, nSubscribers, createdUTC, over18, isSubscriber,
|
||||||
|
@ -13,16 +13,21 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||||
import eu.toldi.infinityforlemmy.SortType;
|
import eu.toldi.infinityforlemmy.SortType;
|
||||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
|
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
|
||||||
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher;
|
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher;
|
||||||
import eu.toldi.infinityforlemmy.postfilter.PostFilter;
|
import eu.toldi.infinityforlemmy.postfilter.PostFilter;
|
||||||
|
import eu.toldi.infinityforlemmy.utils.MultiCommunityUtils;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
import retrofit2.HttpException;
|
import retrofit2.HttpException;
|
||||||
import retrofit2.Response;
|
import retrofit2.Response;
|
||||||
@ -95,17 +100,9 @@ public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post
|
|||||||
this.postFeedScrolledPositionSharedPreferences = postFeedScrolledPositionSharedPreferences;
|
this.postFeedScrolledPositionSharedPreferences = postFeedScrolledPositionSharedPreferences;
|
||||||
if (postType == TYPE_SUBREDDIT || postType == TYPE_ANONYMOUS_FRONT_PAGE) {
|
if (postType == TYPE_SUBREDDIT || postType == TYPE_ANONYMOUS_FRONT_PAGE) {
|
||||||
this.subredditOrUserName = path;
|
this.subredditOrUserName = path;
|
||||||
} else {
|
|
||||||
if (sortType != null) {
|
|
||||||
if (path.endsWith("/")) {
|
|
||||||
multiRedditPath = path + sortType.getType().value;
|
|
||||||
} else {
|
|
||||||
multiRedditPath = path + "/" + sortType.getType().value;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
multiRedditPath = path;
|
multiRedditPath = path;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
this.postType = postType;
|
this.postType = postType;
|
||||||
if (sortType == null) {
|
if (sortType == null) {
|
||||||
if (path.equals("local") || path.equals("all")) {
|
if (path.equals("local") || path.equals("all")) {
|
||||||
@ -183,14 +180,11 @@ public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post
|
|||||||
return loadSearchPosts(loadParams, api);
|
return loadSearchPosts(loadParams, api);
|
||||||
case TYPE_SUBREDDIT:
|
case TYPE_SUBREDDIT:
|
||||||
return loadSubredditPosts(loadParams, api);
|
return loadSubredditPosts(loadParams, api);
|
||||||
default:
|
case TYPE_MULTI_REDDIT:
|
||||||
|
return loadMultipleSubredditPosts(loadParams, api, List.of(multiRedditPath.split(Pattern.quote(","))));
|
||||||
case TYPE_ANONYMOUS_FRONT_PAGE:
|
case TYPE_ANONYMOUS_FRONT_PAGE:
|
||||||
// Return a dummy result
|
|
||||||
return Futures.immediateFuture(new LoadResult.Page<>(new ArrayList<>(), null, null));
|
|
||||||
/* case TYPE_MULTI_REDDIT:
|
|
||||||
return loadMultiRedditPosts(loadParams, api);
|
|
||||||
default:
|
default:
|
||||||
return loadAnonymousHomePosts(loadParams, api);*/
|
return loadAnonymousHomePosts(loadParams, api);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -301,6 +295,81 @@ public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post
|
|||||||
return Futures.catching(partialLoadResultFuture,
|
return Futures.catching(partialLoadResultFuture,
|
||||||
IOException.class, LoadResult.Error::new, executor);
|
IOException.class, LoadResult.Error::new, executor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Map<String, List<Post>> undisplayedPosts = new HashMap<>();
|
||||||
|
|
||||||
|
private ListenableFuture<LoadResult<Integer, Post>> loadMultipleSubredditPosts(@NonNull LoadParams<Integer> loadParams, LemmyAPI api, List<String> communities) {
|
||||||
|
List<ListenableFuture<LoadResult<Integer, Post>>> futures = new ArrayList<>();
|
||||||
|
List<Post> combinedPostsFromCache = new ArrayList<>();
|
||||||
|
|
||||||
|
// Check and use undisplayed posts first
|
||||||
|
for (String community : communities) {
|
||||||
|
futures.add(fetchPostsFromCommunity(api, loadParams, community));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Combine and sort posts from cache and fetched
|
||||||
|
return Futures.transform(Futures.successfulAsList(futures),
|
||||||
|
results -> {
|
||||||
|
for (LoadResult<Integer, Post> result : results) {
|
||||||
|
if (result instanceof LoadResult.Page) {
|
||||||
|
combinedPostsFromCache.addAll(((LoadResult.Page<Integer, Post>) result).getData());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
switch (sortType.getType()) {
|
||||||
|
default:
|
||||||
|
case NEW:
|
||||||
|
MultiCommunityUtils.INSTANCE.sortByNewest(combinedPostsFromCache);
|
||||||
|
case TOP_ALL:
|
||||||
|
case TOP_YEAR:
|
||||||
|
case TOP_NINE_MONTHS:
|
||||||
|
case TOP_SIX_MONTHS:
|
||||||
|
case TOP_THREE_MONTHS:
|
||||||
|
case TOP_MONTH:
|
||||||
|
case TOP_WEEK:
|
||||||
|
case TOP_DAY:
|
||||||
|
case TOP_TWELVE_HOURS:
|
||||||
|
case TOP_SIX_HOURS:
|
||||||
|
case TOP_HOUR:
|
||||||
|
MultiCommunityUtils.INSTANCE.sortByScore(combinedPostsFromCache);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Post> result = MultiCommunityUtils.INSTANCE.takeFirstN(combinedPostsFromCache, 25);
|
||||||
|
// Gather undisplayed posts
|
||||||
|
for (int i = result.size(); i < combinedPostsFromCache.size(); i++) {
|
||||||
|
Post post = combinedPostsFromCache.get(i);
|
||||||
|
if (undisplayedPosts.containsKey(post.getCommunityInfo().getQualifiedName())) {
|
||||||
|
undisplayedPosts.get(post.getCommunityInfo().getQualifiedName()).add(post);
|
||||||
|
} else {
|
||||||
|
undisplayedPosts.put(post.getCommunityInfo().getQualifiedName(), new ArrayList<>(Arrays.asList(post)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Integer prevKey = result.size() > 0 ? (loadParams.getKey() != null) ? loadParams.getKey() : 1 : null;
|
||||||
|
Integer nextKey = (prevKey != null) ? prevKey + 1 : null;
|
||||||
|
|
||||||
|
return new LoadResult.Page<>(result, prevKey, nextKey);
|
||||||
|
}, executor);
|
||||||
|
}
|
||||||
|
|
||||||
|
private ListenableFuture<LoadResult<Integer, Post>> fetchPostsFromCommunity(LemmyAPI api, LoadParams<Integer> loadParams, String community) {
|
||||||
|
|
||||||
|
ListenableFuture<Response<String>> subredditPost;
|
||||||
|
|
||||||
|
subredditPost = api.getPostsListenableFuture(null, sortType.getType().value, loadParams.getKey(), 25, null, community, false, accessToken);
|
||||||
|
|
||||||
|
ListenableFuture<LoadResult<Integer, Post>> communityFuture = Futures.transform(subredditPost,
|
||||||
|
this::transformData, executor);
|
||||||
|
|
||||||
|
ListenableFuture<LoadResult<Integer, Post>> partialLoadResultFuture =
|
||||||
|
Futures.catching(communityFuture, HttpException.class,
|
||||||
|
LoadResult.Error::new, executor);
|
||||||
|
|
||||||
|
return Futures.catching(partialLoadResultFuture,
|
||||||
|
IOException.class, LoadResult.Error::new, executor);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
private ListenableFuture<LoadResult<String, Post>> loadMultiRedditPosts(@NonNull LoadParams<String> loadParams, LemmyAPI api) {
|
private ListenableFuture<LoadResult<String, Post>> loadMultiRedditPosts(@NonNull LoadParams<String> loadParams, LemmyAPI api) {
|
||||||
ListenableFuture<Response<String>> multiRedditPosts;
|
ListenableFuture<Response<String>> multiRedditPosts;
|
||||||
@ -313,20 +382,6 @@ public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post
|
|||||||
|
|
||||||
ListenableFuture<LoadResult<String, Post>> pageFuture = Futures.transform(multiRedditPosts, this::transformData, executor);
|
ListenableFuture<LoadResult<String, Post>> pageFuture = Futures.transform(multiRedditPosts, this::transformData, executor);
|
||||||
|
|
||||||
ListenableFuture<LoadResult<String, Post>> partialLoadResultFuture =
|
|
||||||
Futures.catching(pageFuture, HttpException.class,
|
|
||||||
LoadResult.Error::new, executor);
|
|
||||||
|
|
||||||
return Futures.catching(partialLoadResultFuture,
|
|
||||||
IOException.class, LoadResult.Error::new, executor);
|
|
||||||
}
|
|
||||||
|
|
||||||
private ListenableFuture<LoadResult<String, Post>> loadAnonymousHomePosts(@NonNull LoadParams<String> loadParams, LemmyAPI api) {
|
|
||||||
ListenableFuture<Response<String>> anonymousHomePosts;
|
|
||||||
anonymousHomePosts = api.getSubredditBestPostsListenableFuture(subredditOrUserName, sortType.getType(), sortType.getTime(), loadParams.getKey());
|
|
||||||
|
|
||||||
ListenableFuture<LoadResult<String, Post>> pageFuture = Futures.transform(anonymousHomePosts, this::transformData, executor);
|
|
||||||
|
|
||||||
ListenableFuture<LoadResult<String, Post>> partialLoadResultFuture =
|
ListenableFuture<LoadResult<String, Post>> partialLoadResultFuture =
|
||||||
Futures.catching(pageFuture, HttpException.class,
|
Futures.catching(pageFuture, HttpException.class,
|
||||||
LoadResult.Error::new, executor);
|
LoadResult.Error::new, executor);
|
||||||
@ -335,6 +390,14 @@ public class PostPagingSource extends ListenableFuturePagingSource<Integer, Post
|
|||||||
IOException.class, LoadResult.Error::new, executor);
|
IOException.class, LoadResult.Error::new, executor);
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
|
private ListenableFuture<LoadResult<Integer, Post>> loadAnonymousHomePosts(@NonNull LoadParams<Integer> loadParams, LemmyAPI api) {
|
||||||
|
if (subredditOrUserName == null) {
|
||||||
|
// Return empty list
|
||||||
|
return Futures.immediateFuture(new LoadResult.Page<>(new ArrayList<>(), null, null));
|
||||||
|
}
|
||||||
|
return loadMultipleSubredditPosts(loadParams, api, Arrays.asList(subredditOrUserName.split(Pattern.quote(","))));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean getKeyReuseSupported() {
|
public boolean getKeyReuseSupported() {
|
||||||
//TODO: Figure out why this is needed
|
//TODO: Figure out why this is needed
|
||||||
|
@ -17,12 +17,17 @@ import androidx.paging.PagingConfig;
|
|||||||
import androidx.paging.PagingData;
|
import androidx.paging.PagingData;
|
||||||
import androidx.paging.PagingDataTransforms;
|
import androidx.paging.PagingDataTransforms;
|
||||||
import androidx.paging.PagingLiveData;
|
import androidx.paging.PagingLiveData;
|
||||||
|
import androidx.paging.PagingSource;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
import eu.toldi.infinityforlemmy.RetrofitHolder;
|
||||||
import eu.toldi.infinityforlemmy.SortType;
|
import eu.toldi.infinityforlemmy.SortType;
|
||||||
|
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
|
||||||
|
import eu.toldi.infinityforlemmy.multicommunity.MulticommunityPagingSource;
|
||||||
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher;
|
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher;
|
||||||
import eu.toldi.infinityforlemmy.postfilter.PostFilter;
|
import eu.toldi.infinityforlemmy.postfilter.PostFilter;
|
||||||
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
import eu.toldi.infinityforlemmy.utils.SharedPreferencesUtils;
|
||||||
@ -230,8 +235,8 @@ public class PostViewModel extends ViewModel {
|
|||||||
currentlyReadPostIdsLiveData.setValue(true);
|
currentlyReadPostIdsLiveData.setValue(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PostPagingSource returnPagingSoruce() {
|
public PagingSource returnPagingSoruce() {
|
||||||
PostPagingSource paging3PagingSource;
|
PagingSource paging3PagingSource;
|
||||||
switch (postType) {
|
switch (postType) {
|
||||||
case PostPagingSource.TYPE_FRONT_PAGE:
|
case PostPagingSource.TYPE_FRONT_PAGE:
|
||||||
paging3PagingSource = new PostPagingSource(executor, retrofit, accessToken, accountName,
|
paging3PagingSource = new PostPagingSource(executor, retrofit, accessToken, accountName,
|
||||||
@ -239,12 +244,16 @@ public class PostViewModel extends ViewModel {
|
|||||||
postFilter, readPostList, name, postEnricher);
|
postFilter, readPostList, name, postEnricher);
|
||||||
break;
|
break;
|
||||||
case PostPagingSource.TYPE_SUBREDDIT:
|
case PostPagingSource.TYPE_SUBREDDIT:
|
||||||
case PostPagingSource.TYPE_MULTI_REDDIT:
|
|
||||||
case PostPagingSource.TYPE_ANONYMOUS_FRONT_PAGE:
|
|
||||||
paging3PagingSource = new PostPagingSource(executor, retrofit, accessToken, accountName,
|
paging3PagingSource = new PostPagingSource(executor, retrofit, accessToken, accountName,
|
||||||
sharedPreferences, postFeedScrolledPositionSharedPreferences, name, postType,
|
sharedPreferences, postFeedScrolledPositionSharedPreferences, name, postType,
|
||||||
sortType, postFilter, readPostList, postEnricher);
|
sortType, postFilter, readPostList, postEnricher);
|
||||||
break;
|
break;
|
||||||
|
case PostPagingSource.TYPE_MULTI_REDDIT:
|
||||||
|
case PostPagingSource.TYPE_ANONYMOUS_FRONT_PAGE:
|
||||||
|
String[] communities = (name != null) ? name.split(Pattern.quote(",")) : new String[0];
|
||||||
|
paging3PagingSource = new MulticommunityPagingSource(retrofit.getRetrofit().create(LemmyAPI.class), List.of(communities), accessToken,
|
||||||
|
sortType, executor, postFilter, (readPostList != null) ? readPostList : new ArrayList<>(), postEnricher);
|
||||||
|
break;
|
||||||
case PostPagingSource.TYPE_SEARCH:
|
case PostPagingSource.TYPE_SEARCH:
|
||||||
paging3PagingSource = new PostPagingSource(executor, retrofit, accessToken, accountName,
|
paging3PagingSource = new PostPagingSource(executor, retrofit, accessToken, accountName,
|
||||||
sharedPreferences, postFeedScrolledPositionSharedPreferences, name, query, trendingSource,
|
sharedPreferences, postFeedScrolledPositionSharedPreferences, name, query, trendingSource,
|
||||||
@ -380,12 +389,12 @@ public class PostViewModel extends ViewModel {
|
|||||||
this.executor = executor;
|
this.executor = executor;
|
||||||
this.retrofit = retrofit;
|
this.retrofit = retrofit;
|
||||||
this.sharedPreferences = sharedPreferences;
|
this.sharedPreferences = sharedPreferences;
|
||||||
// TODO is this used? because it is getting overwritten with opt
|
|
||||||
this.name = concatenatedSubredditNames;
|
this.name = concatenatedSubredditNames;
|
||||||
this.postType = postType;
|
this.postType = postType;
|
||||||
this.sortType = sortType;
|
this.sortType = sortType;
|
||||||
this.postFilter = postFilter;
|
this.postFilter = postFilter;
|
||||||
this.name = opt;
|
|
||||||
this.postEnricher = postEnricher;
|
this.postEnricher = postEnricher;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
package eu.toldi.infinityforlemmy.site;
|
package eu.toldi.infinityforlemmy.site;
|
||||||
|
|
||||||
|
import org.json.JSONException;
|
||||||
|
|
||||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
|
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
|
||||||
|
import eu.toldi.infinityforlemmy.user.MyUserInfo;
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
|
|
||||||
public class FetchSiteInfo {
|
public class FetchSiteInfo {
|
||||||
@ -11,24 +14,29 @@ public class FetchSiteInfo {
|
|||||||
@Override
|
@Override
|
||||||
public void onResponse(retrofit2.Call<String> call, retrofit2.Response<String> response) {
|
public void onResponse(retrofit2.Call<String> call, retrofit2.Response<String> response) {
|
||||||
if (response.isSuccessful()) {
|
if (response.isSuccessful()) {
|
||||||
|
try {
|
||||||
String siteInfoJson = response.body();
|
String siteInfoJson = response.body();
|
||||||
SiteInfo siteInfo = SiteInfo.parseSiteInfo(siteInfoJson);
|
SiteInfo siteInfo = SiteInfo.parseSiteInfo(siteInfoJson);
|
||||||
fetchSiteInfoListener.onFetchSiteInfoSuccess(siteInfo);
|
MyUserInfo myUserInfo = MyUserInfo.parseFromSiteInfo(siteInfoJson);
|
||||||
|
fetchSiteInfoListener.onFetchSiteInfoSuccess(siteInfo, myUserInfo);
|
||||||
|
} catch (JSONException e) {
|
||||||
|
fetchSiteInfoListener.onFetchSiteInfoFailed(true);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
fetchSiteInfoListener.onFetchSiteInfoFailed();
|
fetchSiteInfoListener.onFetchSiteInfoFailed(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFailure(retrofit2.Call<String> call, Throwable t) {
|
public void onFailure(retrofit2.Call<String> call, Throwable t) {
|
||||||
fetchSiteInfoListener.onFetchSiteInfoFailed();
|
fetchSiteInfoListener.onFetchSiteInfoFailed(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface FetchSiteInfoListener {
|
public interface FetchSiteInfoListener {
|
||||||
void onFetchSiteInfoSuccess(SiteInfo siteInfo);
|
void onFetchSiteInfoSuccess(SiteInfo siteInfo, MyUserInfo myUserInfo);
|
||||||
void onFetchSiteInfoFailed();
|
void onFetchSiteInfoFailed(boolean parseFailed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -79,8 +79,7 @@ public class SiteInfo {
|
|||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SiteInfo parseSiteInfo(String siteInfoJson) {
|
public static SiteInfo parseSiteInfo(String siteInfoJson) throws JSONException {
|
||||||
try {
|
|
||||||
JSONObject siteInfo = new JSONObject(siteInfoJson);
|
JSONObject siteInfo = new JSONObject(siteInfoJson);
|
||||||
JSONObject siteView = siteInfo.getJSONObject("site_view");
|
JSONObject siteView = siteInfo.getJSONObject("site_view");
|
||||||
JSONObject site = siteView.getJSONObject("site");
|
JSONObject site = siteView.getJSONObject("site");
|
||||||
@ -115,9 +114,5 @@ public class SiteInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return new SiteInfo(id, name, version, sidebar, description, enable_downvotes, enable_nsfw, community_creation_admin_only, admins, SiteStatistics.parseSiteStatistics(counts));
|
return new SiteInfo(id, name, version, sidebar, description, enable_downvotes, enable_nsfw, community_creation_admin_only, admins, SiteStatistics.parseSiteStatistics(counts));
|
||||||
} catch (JSONException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,21 +9,26 @@ import java.util.ArrayList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
|
import eu.toldi.infinityforlemmy.subscribedsubreddit.SubscribedSubredditData;
|
||||||
|
import eu.toldi.infinityforlemmy.utils.LemmyUtils;
|
||||||
|
|
||||||
public class SubredditWithSelection implements Parcelable {
|
public class SubredditWithSelection implements Parcelable {
|
||||||
private String name;
|
private final String name;
|
||||||
private String iconUrl;
|
private final String iconUrl;
|
||||||
|
|
||||||
|
private final String qualifiedName;
|
||||||
private boolean selected;
|
private boolean selected;
|
||||||
|
|
||||||
public SubredditWithSelection(String name, String iconUrl) {
|
public SubredditWithSelection(String name, String iconUrl, String qualifiedName) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.iconUrl = iconUrl;
|
this.iconUrl = iconUrl;
|
||||||
|
this.qualifiedName = qualifiedName;
|
||||||
selected = false;
|
selected = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected SubredditWithSelection(Parcel in) {
|
protected SubredditWithSelection(Parcel in) {
|
||||||
name = in.readString();
|
name = in.readString();
|
||||||
iconUrl = in.readString();
|
iconUrl = in.readString();
|
||||||
|
qualifiedName = in.readString();
|
||||||
selected = in.readByte() != 0;
|
selected = in.readByte() != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -51,6 +56,10 @@ public class SubredditWithSelection implements Parcelable {
|
|||||||
return selected;
|
return selected;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getQualifiedName() {
|
||||||
|
return qualifiedName;
|
||||||
|
}
|
||||||
|
|
||||||
public void setSelected(boolean selected) {
|
public void setSelected(boolean selected) {
|
||||||
this.selected = selected;
|
this.selected = selected;
|
||||||
}
|
}
|
||||||
@ -59,14 +68,14 @@ public class SubredditWithSelection implements Parcelable {
|
|||||||
List<SubscribedSubredditData> subscribedSubredditData) {
|
List<SubscribedSubredditData> subscribedSubredditData) {
|
||||||
ArrayList<SubredditWithSelection> subredditWithSelections = new ArrayList<>();
|
ArrayList<SubredditWithSelection> subredditWithSelections = new ArrayList<>();
|
||||||
for (SubscribedSubredditData s : subscribedSubredditData) {
|
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;
|
return subredditWithSelections;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SubredditWithSelection convertSubreddit(SubredditData subreddit) {
|
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) {
|
public int compareName(SubredditWithSelection subredditWithSelection) {
|
||||||
@ -82,7 +91,7 @@ public class SubredditWithSelection implements Parcelable {
|
|||||||
if (!(obj instanceof SubredditWithSelection)) {
|
if (!(obj instanceof SubredditWithSelection)) {
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
return this.getName().compareToIgnoreCase(((SubredditWithSelection) obj).getName()) == 0;
|
return this.getQualifiedName().compareToIgnoreCase(((SubredditWithSelection) obj).getQualifiedName()) == 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -95,6 +104,7 @@ public class SubredditWithSelection implements Parcelable {
|
|||||||
public void writeToParcel(Parcel parcel, int i) {
|
public void writeToParcel(Parcel parcel, int i) {
|
||||||
parcel.writeString(name);
|
parcel.writeString(name);
|
||||||
parcel.writeString(iconUrl);
|
parcel.writeString(iconUrl);
|
||||||
|
parcel.writeString(qualifiedName);
|
||||||
parcel.writeByte((byte) (selected ? 1 : 0));
|
parcel.writeByte((byte) (selected ? 1 : 0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -107,6 +107,33 @@ public class FetchUserData {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void validateAuthToken(Retrofit retrofit, ValidateAuthTokenListener validateAuthTokenListener) {
|
||||||
|
LemmyAPI api = retrofit.create(LemmyAPI.class);
|
||||||
|
|
||||||
|
Call<String> validateAuthToken = api.userValidateAuth();
|
||||||
|
validateAuthToken.enqueue(new Callback<>() {
|
||||||
|
@Override
|
||||||
|
public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
|
||||||
|
if (response.isSuccessful()) {
|
||||||
|
validateAuthTokenListener.onValidateAuthTokenSuccess();
|
||||||
|
} else {
|
||||||
|
validateAuthTokenListener.onValidateAuthTokenFailed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
|
||||||
|
validateAuthTokenListener.onValidateAuthTokenFailed();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface ValidateAuthTokenListener {
|
||||||
|
void onValidateAuthTokenSuccess();
|
||||||
|
|
||||||
|
void onValidateAuthTokenFailed();
|
||||||
|
}
|
||||||
|
|
||||||
public interface FetchUserUnreadCountListener {
|
public interface FetchUserUnreadCountListener {
|
||||||
void onFetchUserUnreadCountSuccess(int unreadCount);
|
void onFetchUserUnreadCountSuccess(int unreadCount);
|
||||||
|
|
||||||
|
@ -0,0 +1,61 @@
|
|||||||
|
package eu.toldi.infinityforlemmy.user;
|
||||||
|
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import eu.toldi.infinityforlemmy.utils.LemmyUtils;
|
||||||
|
|
||||||
|
public class MyUserInfo {
|
||||||
|
|
||||||
|
private final String qualifiedName;
|
||||||
|
private final String name;
|
||||||
|
private final String displayName;
|
||||||
|
private final String profileImageUrl;
|
||||||
|
private final String bannerImageUrl;
|
||||||
|
|
||||||
|
private MyUserInfo(String qualifiedName, String name, String displayName, String profileImageUrl, String bannerImageUrl) {
|
||||||
|
this.qualifiedName = qualifiedName;
|
||||||
|
this.name = name;
|
||||||
|
this.displayName = displayName;
|
||||||
|
this.profileImageUrl = profileImageUrl;
|
||||||
|
this.bannerImageUrl = bannerImageUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getQualifiedName() {
|
||||||
|
return qualifiedName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDisplayName() {
|
||||||
|
return displayName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getProfileImageUrl() {
|
||||||
|
return profileImageUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBannerImageUrl() {
|
||||||
|
return bannerImageUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static MyUserInfo parseFromSiteInfo(String siteInfoJson) throws JSONException {
|
||||||
|
JSONObject siteInfo = new JSONObject(siteInfoJson);
|
||||||
|
JSONObject myUser = siteInfo.optJSONObject("my_user");
|
||||||
|
if (myUser == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
JSONObject localUserView = myUser.getJSONObject("local_user_view");
|
||||||
|
JSONObject person = localUserView.getJSONObject("person");
|
||||||
|
|
||||||
|
String qualifiedName = LemmyUtils.actorID2FullName(person.getString("actor_id"));
|
||||||
|
String name = person.getString("name");
|
||||||
|
String displayName = person.has("display_name") ? person.getString("display_name") : name;
|
||||||
|
String avatar = person.optString("avatar");
|
||||||
|
String banner = person.optString("banner");
|
||||||
|
|
||||||
|
return new MyUserInfo(qualifiedName, name, displayName, avatar, banner);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,197 @@
|
|||||||
|
package eu.toldi.infinityforlemmy.multicommunity
|
||||||
|
|
||||||
|
import androidx.paging.ListenableFuturePagingSource
|
||||||
|
import androidx.paging.PagingState
|
||||||
|
import com.google.common.base.Function
|
||||||
|
import com.google.common.util.concurrent.Futures
|
||||||
|
import com.google.common.util.concurrent.ListenableFuture
|
||||||
|
import eu.toldi.infinityforlemmy.SortType
|
||||||
|
import eu.toldi.infinityforlemmy.apis.LemmyAPI
|
||||||
|
import eu.toldi.infinityforlemmy.post.ParsePost
|
||||||
|
import eu.toldi.infinityforlemmy.post.Post
|
||||||
|
import eu.toldi.infinityforlemmy.post.enrich.PostEnricher
|
||||||
|
import eu.toldi.infinityforlemmy.postfilter.PostFilter
|
||||||
|
import eu.toldi.infinityforlemmy.utils.MultiCommunityUtils.sortByNewest
|
||||||
|
import eu.toldi.infinityforlemmy.utils.MultiCommunityUtils.sortByOldest
|
||||||
|
import eu.toldi.infinityforlemmy.utils.MultiCommunityUtils.sortByScore
|
||||||
|
import retrofit2.HttpException
|
||||||
|
import retrofit2.Response
|
||||||
|
import java.io.IOException
|
||||||
|
import java.util.concurrent.Executor
|
||||||
|
|
||||||
|
|
||||||
|
class MulticommunityPagingSource(
|
||||||
|
private val api: LemmyAPI,
|
||||||
|
private val communities: List<String>,
|
||||||
|
private val accessToken: String?,
|
||||||
|
private val sortType: SortType,
|
||||||
|
private val executor: Executor,
|
||||||
|
private val postFilter: PostFilter,
|
||||||
|
private val readPostList: List<String>, private val postEnricher: PostEnricher
|
||||||
|
) : ListenableFuturePagingSource<Map<String, Int>, Post>() {
|
||||||
|
|
||||||
|
private val postLinkedHashSet: LinkedHashSet<Post> = LinkedHashSet()
|
||||||
|
private val undisplayedPosts = mutableMapOf<String, MutableList<Post>>()
|
||||||
|
|
||||||
|
override fun loadFuture(loadParams: LoadParams<Map<String, Int>>): ListenableFuture<LoadResult<Map<String, Int>, Post>> {
|
||||||
|
val currentPageMap = loadParams.key ?: communities.associateWith { 1 }
|
||||||
|
|
||||||
|
// Initialize a list to hold futures of post loading results
|
||||||
|
val futuresList = mutableListOf<ListenableFuture<LoadResult<Int, Post>>>()
|
||||||
|
val combinedPosts = mutableListOf<Post>()
|
||||||
|
val wasCached = mutableMapOf<String, Boolean>()
|
||||||
|
// Loop through each community and fetch posts
|
||||||
|
for ((community, pageNumber) in currentPageMap) {
|
||||||
|
if (community == "all") continue // Skip all
|
||||||
|
if (undisplayedPosts.containsKey(community) && undisplayedPosts[community]!!.size > 10) {
|
||||||
|
val posts: List<Post> = undisplayedPosts[community] ?: listOf()
|
||||||
|
combinedPosts.addAll(posts)
|
||||||
|
undisplayedPosts[community]!!.clear() // Clear used posts
|
||||||
|
wasCached[community] = true
|
||||||
|
// Add a dummy future to the list
|
||||||
|
futuresList.add(Futures.immediateFuture(LoadResult.Page(posts, null, null)))
|
||||||
|
} else {
|
||||||
|
val future = fetchPostsFromCommunity(api, pageNumber, community)
|
||||||
|
futuresList.add(future)
|
||||||
|
wasCached[community] = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val combinedFuture: ListenableFuture<LoadResult<Map<String, Int>, Post>> =
|
||||||
|
Futures.transform(Futures.successfulAsList(futuresList), { individualResults ->
|
||||||
|
// Combine the results from individual communities
|
||||||
|
|
||||||
|
val nextPageMap = mutableMapOf<String, Int>()
|
||||||
|
|
||||||
|
for ((index, result) in individualResults.withIndex()) {
|
||||||
|
if (result is LoadResult.Page<Int, Post>) {
|
||||||
|
combinedPosts.addAll(result.data)
|
||||||
|
val addition = if (wasCached[communities[index]] == true) 0 else 1
|
||||||
|
nextPageMap[communities[index]] =
|
||||||
|
result.nextKey ?: (currentPageMap[communities[index]]?.plus(addition))
|
||||||
|
?: 1
|
||||||
|
}
|
||||||
|
// Handle other cases like LoadResult.Error
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
val sorted = when (sortType.type) {
|
||||||
|
SortType.Type.NEW -> {
|
||||||
|
sortByNewest(combinedPosts)
|
||||||
|
}
|
||||||
|
|
||||||
|
SortType.Type.OLD -> {
|
||||||
|
sortByOldest(combinedPosts)
|
||||||
|
}
|
||||||
|
|
||||||
|
SortType.Type.TOP_ALL, SortType.Type.TOP_YEAR, SortType.Type.TOP_NINE_MONTHS, SortType.Type.TOP_SIX_MONTHS, SortType.Type.TOP_THREE_MONTHS, SortType.Type.TOP_MONTH, SortType.Type.TOP_WEEK, SortType.Type.TOP_DAY, SortType.Type.TOP_TWELVE_HOURS, SortType.Type.TOP_SIX_HOURS, SortType.Type.TOP_HOUR
|
||||||
|
-> sortByScore(combinedPosts)
|
||||||
|
|
||||||
|
else -> {
|
||||||
|
sortByNewest(combinedPosts)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val filteredPosts = sorted.take(25)
|
||||||
|
|
||||||
|
// Store undisplayed posts
|
||||||
|
for (post in combinedPosts) {
|
||||||
|
if (!filteredPosts.contains(post)) {
|
||||||
|
if (undisplayedPosts.containsKey(post.subredditNamePrefixed)) {
|
||||||
|
undisplayedPosts[post.subredditNamePrefixed]?.add(post)
|
||||||
|
} else {
|
||||||
|
undisplayedPosts[post.subredditNamePrefixed] = mutableListOf(post)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (currentPageMap.containsKey("all")) {
|
||||||
|
nextPageMap["all"] = filteredPosts.size + currentPageMap["all"]!!
|
||||||
|
} else {
|
||||||
|
nextPageMap["all"] = filteredPosts.size
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
LoadResult.Page(
|
||||||
|
data = filteredPosts,
|
||||||
|
prevKey = null, // Define prevKey logic if needed
|
||||||
|
nextKey = if (filteredPosts.isNotEmpty()) nextPageMap else null
|
||||||
|
)
|
||||||
|
}, executor)
|
||||||
|
val partialLoadResultFuture =
|
||||||
|
Futures.catching<LoadResult<Map<String, Int>, Post>, HttpException>(
|
||||||
|
combinedFuture,
|
||||||
|
HttpException::class.java,
|
||||||
|
Function<HttpException, LoadResult<Map<String, Int>, Post>> { throwable: HttpException ->
|
||||||
|
LoadResult.Error(throwable)
|
||||||
|
}, executor
|
||||||
|
)
|
||||||
|
|
||||||
|
return partialLoadResultFuture
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun fetchPostsFromCommunity(
|
||||||
|
api: LemmyAPI,
|
||||||
|
pageNumber: Int,
|
||||||
|
community: String
|
||||||
|
): ListenableFuture<LoadResult<Int, Post>> {
|
||||||
|
val subredditPost: ListenableFuture<Response<String>>
|
||||||
|
subredditPost = api.getPostsListenableFuture(
|
||||||
|
null,
|
||||||
|
sortType.getType().value,
|
||||||
|
pageNumber,
|
||||||
|
25,
|
||||||
|
null,
|
||||||
|
community,
|
||||||
|
false,
|
||||||
|
accessToken
|
||||||
|
)
|
||||||
|
val communityFuture: ListenableFuture<LoadResult<Int, Post>> = Futures.transform(
|
||||||
|
subredditPost,
|
||||||
|
{ response -> transformData(response, pageNumber) }, executor
|
||||||
|
)
|
||||||
|
|
||||||
|
val partialLoadResultFuture: ListenableFuture<LoadResult<Int, Post>> =
|
||||||
|
Futures.catching(
|
||||||
|
communityFuture,
|
||||||
|
HttpException::class.java,
|
||||||
|
{ throwable -> LoadResult.Error<Int, Post>(throwable) },
|
||||||
|
executor
|
||||||
|
)
|
||||||
|
|
||||||
|
return Futures.catching(
|
||||||
|
partialLoadResultFuture,
|
||||||
|
IOException::class.java,
|
||||||
|
Function<IOException, LoadResult<Int, Post>> { throwable ->
|
||||||
|
LoadResult.Error<Int, Post>(throwable)
|
||||||
|
}, executor
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fun transformData(response: Response<String>, pageNumber: Int): LoadResult<Int, Post> {
|
||||||
|
if (!response.isSuccessful) return LoadResult.Error(Exception("Response failed"))
|
||||||
|
|
||||||
|
val responseString =
|
||||||
|
response.body() ?: return LoadResult.Error(Exception("Empty response body"))
|
||||||
|
val newPosts =
|
||||||
|
ParsePost.parsePostsSync(responseString, -1, postFilter, readPostList, postEnricher)
|
||||||
|
?: return LoadResult.Error(Exception("Error parsing posts"))
|
||||||
|
|
||||||
|
// Filter out already linked posts
|
||||||
|
val trulyNewPosts = newPosts.filterNot(postLinkedHashSet::contains)
|
||||||
|
postLinkedHashSet.addAll(trulyNewPosts)
|
||||||
|
|
||||||
|
val nextKey = if (trulyNewPosts.isNotEmpty()) pageNumber + 1 else null
|
||||||
|
return LoadResult.Page(trulyNewPosts, null, nextKey)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
override fun getRefreshKey(pagingState: PagingState<Map<String, Int>, Post>): Map<String, Int>? {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
// Additional methods and logic...
|
||||||
|
}
|
@ -0,0 +1,27 @@
|
|||||||
|
package eu.toldi.infinityforlemmy.utils
|
||||||
|
|
||||||
|
import eu.toldi.infinityforlemmy.post.Post
|
||||||
|
|
||||||
|
object MultiCommunityUtils {
|
||||||
|
|
||||||
|
fun takeFirstN(posts: List<Post>, take: Int = 25): List<Post> {
|
||||||
|
return posts.take(take)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun sortByNewest(posts: List<Post>): List<Post> {
|
||||||
|
return posts.sortedByDescending { it.postTimeMillis }
|
||||||
|
}
|
||||||
|
|
||||||
|
fun sortByOldest(posts: List<Post>): List<Post> {
|
||||||
|
return posts.sortedBy { it.postTimeMillis }
|
||||||
|
}
|
||||||
|
|
||||||
|
fun sortByMostComments(posts: List<Post>): List<Post> {
|
||||||
|
return posts.sortedByDescending { it.nComments }
|
||||||
|
}
|
||||||
|
|
||||||
|
fun sortByScore(posts: List<Post>): List<Post> {
|
||||||
|
return posts.sortedByDescending { it.score }
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
10
app/src/main/res/drawable/baseline_scale_24.xml
Normal file
10
app/src/main/res/drawable/baseline_scale_24.xml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<vector android:height="24dp"
|
||||||
|
android:tint="#000000"
|
||||||
|
android:viewportHeight="24"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:width="24dp"
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<path
|
||||||
|
android:fillColor="@android:color/white"
|
||||||
|
android:pathData="M14,11V8c4.56,-0.58 8,-3.1 8,-6H2c0,2.9 3.44,5.42 8,6l0,3c-3.68,0.73 -8,3.61 -8,11h6v-2H4.13c0.93,-6.83 6.65,-7.2 7.87,-7.2s6.94,0.37 7.87,7.2H16v2h6C22,14.61 17.68,11.73 14,11zM12,22c-1.1,0 -2,-0.9 -2,-2c0,-0.55 0.22,-1.05 0.59,-1.41C11.39,17.79 16,16 16,16s-1.79,4.61 -2.59,5.41C13.05,21.78 12.55,22 12,22z" />
|
||||||
|
</vector>
|
10
app/src/main/res/drawable/ic_new_comments_24.xml
Normal file
10
app/src/main/res/drawable/ic_new_comments_24.xml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<vector android:height="24dp"
|
||||||
|
android:tint="#000000"
|
||||||
|
android:viewportHeight="24"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:width="24dp"
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<path
|
||||||
|
android:fillColor="@android:color/white"
|
||||||
|
android:pathData="M21.99,4c0,-1.1 -0.89,-2 -1.99,-2H4c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h14l4,4 -0.01,-18zM17,11h-4v4h-2v-4H7V9h4V5h2v4h4v2z" />
|
||||||
|
</vector>
|
@ -85,32 +85,6 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="1dp" />
|
android:layout_height="1dp" />
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:id="@+id/visibility_wrapper_linear_layout_edit_multi_reddit_activity"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:padding="16dp"
|
|
||||||
android:clickable="true"
|
|
||||||
android:focusable="true"
|
|
||||||
android:background="?attr/selectableItemBackground">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/visibility_text_view_edit_multi_reddit_activity"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_weight="1"
|
|
||||||
android:text="@string/private_multi_reddit"
|
|
||||||
android:textSize="?attr/font_default"
|
|
||||||
android:textColor="?attr/primaryTextColor" />
|
|
||||||
|
|
||||||
<Switch
|
|
||||||
android:id="@+id/visibility_switch_edit_multi_reddit_activity"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:checked="true" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/select_subreddit_text_view_edit_multi_reddit_activity"
|
android:id="@+id/select_subreddit_text_view_edit_multi_reddit_activity"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
@ -87,6 +87,44 @@
|
|||||||
android:textSize="?attr/font_default"
|
android:textSize="?attr/font_default"
|
||||||
app:drawableTint="?attr/primaryTextColor" />
|
app:drawableTint="?attr/primaryTextColor" />
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
|
android:id="@+id/scaled_type_text_view_sort_type_bottom_sheet_fragment"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:clickable="true"
|
||||||
|
android:drawableStart="@drawable/baseline_scale_24"
|
||||||
|
android:drawablePadding="48dp"
|
||||||
|
android:focusable="true"
|
||||||
|
android:fontFamily="?attr/font_family"
|
||||||
|
android:paddingStart="32dp"
|
||||||
|
android:paddingTop="16dp"
|
||||||
|
android:paddingEnd="32dp"
|
||||||
|
android:paddingBottom="16dp"
|
||||||
|
android:text="@string/sort_scaled"
|
||||||
|
android:textColor="?attr/primaryTextColor"
|
||||||
|
android:textSize="?attr/font_default"
|
||||||
|
app:drawableTint="?attr/primaryTextColor" />
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
|
android:id="@+id/controversial_type_text_view_sort_type_bottom_sheet_fragment"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:clickable="true"
|
||||||
|
android:drawableStart="@drawable/ic_controversial_24"
|
||||||
|
android:drawablePadding="48dp"
|
||||||
|
android:focusable="true"
|
||||||
|
android:fontFamily="?attr/font_family"
|
||||||
|
android:paddingStart="32dp"
|
||||||
|
android:paddingTop="16dp"
|
||||||
|
android:paddingEnd="32dp"
|
||||||
|
android:paddingBottom="16dp"
|
||||||
|
android:text="@string/sort_controversial"
|
||||||
|
android:textColor="?attr/primaryTextColor"
|
||||||
|
android:textSize="?attr/font_default"
|
||||||
|
app:drawableTint="?attr/primaryTextColor" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatTextView
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
android:id="@+id/top_type_text_view_sort_type_bottom_sheet_fragment"
|
android:id="@+id/top_type_text_view_sort_type_bottom_sheet_fragment"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
@ -106,6 +144,44 @@
|
|||||||
android:textSize="?attr/font_default"
|
android:textSize="?attr/font_default"
|
||||||
app:drawableTint="?attr/primaryTextColor" />
|
app:drawableTint="?attr/primaryTextColor" />
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
|
android:id="@+id/most_comments_type_text_view_sort_type_bottom_sheet_fragment"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:clickable="true"
|
||||||
|
android:drawableStart="@drawable/ic_comment_black_24"
|
||||||
|
android:drawablePadding="48dp"
|
||||||
|
android:focusable="true"
|
||||||
|
android:fontFamily="?attr/font_family"
|
||||||
|
android:paddingStart="32dp"
|
||||||
|
android:paddingTop="16dp"
|
||||||
|
android:paddingEnd="32dp"
|
||||||
|
android:paddingBottom="16dp"
|
||||||
|
android:text="@string/sort_most_comments"
|
||||||
|
android:textColor="?attr/primaryTextColor"
|
||||||
|
android:textSize="?attr/font_default"
|
||||||
|
app:drawableTint="?attr/primaryTextColor" />
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
|
android:id="@+id/new_comments_type_text_view_sort_type_bottom_sheet_fragment"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:clickable="true"
|
||||||
|
android:drawableStart="@drawable/ic_new_comments_24"
|
||||||
|
android:drawablePadding="48dp"
|
||||||
|
android:focusable="true"
|
||||||
|
android:fontFamily="?attr/font_family"
|
||||||
|
android:paddingStart="32dp"
|
||||||
|
android:paddingTop="16dp"
|
||||||
|
android:paddingEnd="32dp"
|
||||||
|
android:paddingBottom="16dp"
|
||||||
|
android:text="@string/sort_new_comments"
|
||||||
|
android:textColor="?attr/primaryTextColor"
|
||||||
|
android:textSize="?attr/font_default"
|
||||||
|
app:drawableTint="?attr/primaryTextColor" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</androidx.core.widget.NestedScrollView>
|
</androidx.core.widget.NestedScrollView>
|
||||||
|
@ -63,23 +63,4 @@
|
|||||||
android:textSize="?attr/font_default"
|
android:textSize="?attr/font_default"
|
||||||
app:drawableTint="?attr/primaryTextColor" />
|
app:drawableTint="?attr/primaryTextColor" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatTextView
|
|
||||||
android:id="@+id/controversial_type_text_view_user_thing_sort_type_bottom_sheet_fragment"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:background="?attr/selectableItemBackground"
|
|
||||||
android:clickable="true"
|
|
||||||
android:drawableStart="@drawable/ic_controversial_24"
|
|
||||||
android:drawablePadding="48dp"
|
|
||||||
android:focusable="true"
|
|
||||||
android:fontFamily="?attr/font_family"
|
|
||||||
android:paddingStart="32dp"
|
|
||||||
android:paddingTop="16dp"
|
|
||||||
android:paddingEnd="32dp"
|
|
||||||
android:paddingBottom="16dp"
|
|
||||||
android:text="@string/sort_controversial"
|
|
||||||
android:textColor="?attr/primaryTextColor"
|
|
||||||
android:textSize="?attr/font_default"
|
|
||||||
app:drawableTint="?attr/primaryTextColor" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
@ -18,15 +18,36 @@
|
|||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:layout_marginEnd="32dp" />
|
android:layout_marginEnd="32dp" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/name_text_view_item_subscribed_subreddit_multiselection"
|
android:id="@+id/name_text_view_item_subscribed_subreddit_multiselection"
|
||||||
android:layout_width="0dp"
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginEnd="0dp"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:gravity="start"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:fontFamily="?attr/font_family"
|
||||||
|
android:textSize="?attr/font_default" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/instance_text_view_item_subscribed_subreddit_multiselection"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:layout_marginEnd="32dp"
|
android:layout_marginEnd="32dp"
|
||||||
android:textSize="?attr/font_default"
|
android:ellipsize="end"
|
||||||
android:fontFamily="?attr/font_family" />
|
android:gravity="start"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:fontFamily="?attr/font_family"
|
||||||
|
android:textSize="?attr/font_default" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
<CheckBox
|
<CheckBox
|
||||||
android:id="@+id/checkbox_item_subscribed_subreddit_multiselection"
|
android:id="@+id/checkbox_item_subscribed_subreddit_multiselection"
|
||||||
|
@ -44,10 +44,6 @@
|
|||||||
android:title="@string/action_add_to_post_filter"
|
android:title="@string/action_add_to_post_filter"
|
||||||
app:showAsAction="never" />
|
app:showAsAction="never" />
|
||||||
|
|
||||||
<item
|
|
||||||
android:id="@+id/action_report_view_user_detail_activity"
|
|
||||||
android:orderInCategory="9"
|
|
||||||
android:title="@string/action_report" />
|
|
||||||
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_block_user_view_user_detail_activity"
|
android:id="@+id/action_block_user_view_user_detail_activity"
|
||||||
|
@ -1347,4 +1347,7 @@
|
|||||||
<string name="comment_filter_usage_embedded_more_count">a %1$d dalších</string>
|
<string name="comment_filter_usage_embedded_more_count">a %1$d dalších</string>
|
||||||
<string name="billing_error_network_error">Během operace došlo k chybě sítě.</string>
|
<string name="billing_error_network_error">Během operace došlo k chybě sítě.</string>
|
||||||
<string name="the_url_of_you_prefered_lemmy_instance_with_or_without_the_https_prefix">Adresa URL vaší preferované instance Lemmy s nebo bez předpony https://</string>
|
<string name="the_url_of_you_prefered_lemmy_instance_with_or_without_the_https_prefix">Adresa URL vaší preferované instance Lemmy s nebo bez předpony https://</string>
|
||||||
|
<string name="token_expired_message">"Váš token vypršel. Jelikož Eternity neukládá vaše hesla, budete se muset znovu ručně přihlásit! "</string>
|
||||||
|
<string name="token_expired">Token vypršel</string>
|
||||||
|
<string name="sort_scaled">Škálované</string>
|
||||||
</resources>
|
</resources>
|
@ -1100,4 +1100,22 @@
|
|||||||
<string name="settings_collapse_post_section_title">Poszt szekció összecsukása</string>
|
<string name="settings_collapse_post_section_title">Poszt szekció összecsukása</string>
|
||||||
<string name="settings_hide_subscribed_communities_sections_title">Feliratkozások szekció elrejtése</string>
|
<string name="settings_hide_subscribed_communities_sections_title">Feliratkozások szekció elrejtése</string>
|
||||||
<string name="settings_separate_post_and_comments_in_portrait_mode_title">Posztok és kommentek szétválasztása álló módban</string>
|
<string name="settings_separate_post_and_comments_in_portrait_mode_title">Posztok és kommentek szétválasztása álló módban</string>
|
||||||
|
<string name="settings_miscellaneous_dangerous_group_title">Veszélyes</string>
|
||||||
|
<string name="action_add_to_home_screen">Hozzáadás a kezdőképernyőhöz</string>
|
||||||
|
<string name="subscription_activity_label">Feliratkozások</string>
|
||||||
|
<string name="confirm_delete_all_recent_searches">Biztos, hogy törölni szeretné a keresési előzményeit?</string>
|
||||||
|
<string name="settings_experimental_feature">Kísérleti funkció</string>
|
||||||
|
<string name="settings_hide_comment_awards_title">Komment Díjak elrejtése</string>
|
||||||
|
<string name="settings_custom_title_font_family_title">Egyedi cím betűtípus</string>
|
||||||
|
<string name="settings_hide_text_post_content">Szöveges posztok tartalmának elrejtése</string>
|
||||||
|
<string name="settings_custom_content_font_family_title">Egyedi tartalom betűtípus</string>
|
||||||
|
<string name="comment_filter_preference_activity_label">Komment szűrő</string>
|
||||||
|
<string name="settings_show_author_avatar_title">Szerző profilképének megjelenítése</string>
|
||||||
|
<string name="settings_legacy_autoplay_video_controller_ui_title">Korábbi videovezérlő felhasználói felület</string>
|
||||||
|
<string name="settings_link_handler_value_internal_browser">Beépített böngésző</string>
|
||||||
|
<string name="confirm">Megerősítés</string>
|
||||||
|
<string name="settings_fixed_height_preview_in_card_title">Fix magasságú kártyák</string>
|
||||||
|
<string name="customize_comment_filter_activity_label">Komment szűrő személyre szabása</string>
|
||||||
|
<string name="settings_reddit_user_agreement_title">Lemmy felhasználói megegyezés</string>
|
||||||
|
<string name="settings_custom_font_family_title">Egyedi betűtípus</string>
|
||||||
</resources>
|
</resources>
|
@ -203,7 +203,7 @@
|
|||||||
<string name="sort_new">Новое</string>
|
<string name="sort_new">Новое</string>
|
||||||
<string name="sort_random">Случайное</string>
|
<string name="sort_random">Случайное</string>
|
||||||
<string name="sort_rising">Набирающее популярность</string>
|
<string name="sort_rising">Набирающее популярность</string>
|
||||||
<string name="sort_top">Топовое</string>
|
<string name="sort_top">Лучшее</string>
|
||||||
<string name="sort_controversial">Спорное</string>
|
<string name="sort_controversial">Спорное</string>
|
||||||
<string name="sort_relevance">Релевантное</string>
|
<string name="sort_relevance">Релевантное</string>
|
||||||
<string name="sort_comments">Комментарии</string>
|
<string name="sort_comments">Комментарии</string>
|
||||||
@ -1336,4 +1336,7 @@
|
|||||||
<string name="acknowledgement_purchase_failed_description">Упс.. при проверке вашей покупки возникла ошибка. Если эта проблема не решится за три дня, вы получите возврат автоматически.
|
<string name="acknowledgement_purchase_failed_description">Упс.. при проверке вашей покупки возникла ошибка. Если эта проблема не решится за три дня, вы получите возврат автоматически.
|
||||||
\nНе переживайте, вы по-прежнему можете использовать Infinity для Reddit.</string>
|
\nНе переживайте, вы по-прежнему можете использовать Infinity для Reddit.</string>
|
||||||
<string name="billing_error_network_error">При произведении операции произошла ошибка сети.</string>
|
<string name="billing_error_network_error">При произведении операции произошла ошибка сети.</string>
|
||||||
|
<string name="token_expired_message">"Срок действия вашего токена истёк. Поскольку Eternity не хранит ваш пароль, вам придётся снова войти вручную! "</string>
|
||||||
|
<string name="token_expired">Срок действия токена истёк</string>
|
||||||
|
<string name="sort_scaled">Раздутое</string>
|
||||||
</resources>
|
</resources>
|
@ -1343,4 +1343,6 @@
|
|||||||
<string name="subscription_plan_description_monthly_999">Infinity</string>
|
<string name="subscription_plan_description_monthly_999">Infinity</string>
|
||||||
<string name="subscription_plan_description_monthly">Бронзова</string>
|
<string name="subscription_plan_description_monthly">Бронзова</string>
|
||||||
<string name="subscription_plan_description_monthly_699">Платинова</string>
|
<string name="subscription_plan_description_monthly_699">Платинова</string>
|
||||||
|
<string name="token_expired_message">"Термін дії токена закінчився. Оскільки Eternity не зберігає Ваш пароль, Вам потрібно повторно ввійти вручну! "</string>
|
||||||
|
<string name="token_expired">Токен недійсний</string>
|
||||||
</resources>
|
</resources>
|
@ -1265,7 +1265,7 @@
|
|||||||
<string name="i_understand">I understand</string>
|
<string name="i_understand">I understand</string>
|
||||||
<string name="instance_url">Instance URL</string>
|
<string name="instance_url">Instance URL</string>
|
||||||
<string name="instance_url_hint">The URL of you preferred Lemmy instance with or without the https:// prefix</string>
|
<string name="instance_url_hint">The URL of you preferred Lemmy instance with or without the https:// prefix</string>
|
||||||
<string name="user_username">Username</string>
|
<string name="user_username">Username or email</string>
|
||||||
<string name="user_password">Password</string>
|
<string name="user_password">Password</string>
|
||||||
<string name="user_2fa_token">2FA token (if needed)</string>
|
<string name="user_2fa_token">2FA token (if needed)</string>
|
||||||
<string name="user_login">Login</string>
|
<string name="user_login">Login</string>
|
||||||
@ -1318,4 +1318,9 @@
|
|||||||
<string name="original_app">The original Reddit app</string>
|
<string name="original_app">The original Reddit app</string>
|
||||||
<string name="settings_credits_original_app_description">"Infinity was created by u/Hostilenemy "</string>
|
<string name="settings_credits_original_app_description">"Infinity was created by u/Hostilenemy "</string>
|
||||||
<string name="the_url_of_you_prefered_lemmy_instance_with_or_without_the_https_prefix">The URL of you prefered Lemmy instance with or without the https:// prefix</string>
|
<string name="the_url_of_you_prefered_lemmy_instance_with_or_without_the_https_prefix">The URL of you prefered Lemmy instance with or without the https:// prefix</string>
|
||||||
|
<string name="sort_scaled">Scaled</string>
|
||||||
|
<string name="token_expired">Token Expired</string>
|
||||||
|
<string name="token_expired_message">"Your token has been expired. As Eternity does not store your password, you need to manually log back in! "</string>
|
||||||
|
<string name="sort_most_comments">Most Comments</string>
|
||||||
|
<string name="sort_new_comments">New Comments</string>
|
||||||
</resources>
|
</resources>
|
Loading…
x
Reference in New Issue
Block a user