mirror of
https://github.com/Docile-Alligator/Infinity-For-Reddit.git
synced 2026-02-04 23:25:29 +00:00
Continue implementing copying multireddits. ExpandedSubredditInMultiReddit.
This commit is contained in:
@ -2,6 +2,7 @@ plugins {
|
||||
id 'com.android.application'
|
||||
id 'org.jetbrains.kotlin.android'
|
||||
id 'org.jetbrains.kotlin.kapt'
|
||||
id 'kotlin-parcelize'
|
||||
}
|
||||
|
||||
android {
|
||||
|
||||
@ -11,6 +11,7 @@ import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.text.input.rememberTextFieldState
|
||||
import androidx.compose.foundation.text.input.setTextAndPlaceCursorAtEnd
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.Scaffold
|
||||
import androidx.compose.material3.Text
|
||||
@ -38,7 +39,6 @@ import ml.docilealligator.infinityforreddit.customviews.compose.CustomLoadingInd
|
||||
import ml.docilealligator.infinityforreddit.customviews.compose.CustomTextField
|
||||
import ml.docilealligator.infinityforreddit.customviews.compose.LocalAppTheme
|
||||
import ml.docilealligator.infinityforreddit.customviews.compose.SwitchRow
|
||||
import ml.docilealligator.infinityforreddit.multireddit.MultiReddit
|
||||
import ml.docilealligator.infinityforreddit.repositories.CopyMultiRedditActivityRepositoryImpl
|
||||
import ml.docilealligator.infinityforreddit.viewmodels.CopyMultiRedditActivityViewModel
|
||||
import ml.docilealligator.infinityforreddit.viewmodels.CopyMultiRedditActivityViewModel.Companion.provideFactory
|
||||
@ -102,6 +102,14 @@ class CopyMultiRedditActivity : BaseActivity() {
|
||||
val description = rememberTextFieldState()
|
||||
var isPrivate by remember { mutableStateOf(true) }
|
||||
|
||||
LaunchedEffect(multiRedditState) {
|
||||
if (multiRedditState is DataLoadState.Success) {
|
||||
val multiReddit = (multiRedditState as DataLoadState.Success).data
|
||||
name.setTextAndPlaceCursorAtEnd(multiReddit.name)
|
||||
description.setTextAndPlaceCursorAtEnd(multiReddit.description)
|
||||
}
|
||||
}
|
||||
|
||||
AppTheme(customThemeWrapper.themeType) {
|
||||
Scaffold(
|
||||
topBar = {
|
||||
@ -126,10 +134,10 @@ class CopyMultiRedditActivity : BaseActivity() {
|
||||
CustomLoadingIndicator()
|
||||
}
|
||||
}
|
||||
is DataLoadState.Error<*> -> {
|
||||
is DataLoadState.Error -> {
|
||||
|
||||
}
|
||||
is DataLoadState.Success<*> -> {
|
||||
is DataLoadState.Success -> {
|
||||
LazyColumn(
|
||||
modifier = Modifier.padding(innerPadding)
|
||||
) {
|
||||
|
||||
@ -171,7 +171,7 @@ public class EditMultiRedditActivity extends BaseActivity {
|
||||
binding.selectSubredditTextViewEditMultiRedditActivity.setOnClickListener(view -> {
|
||||
Intent intent = new Intent(EditMultiRedditActivity.this, SelectedSubredditsAndUsersActivity.class);
|
||||
if (multiReddit.getSubreddits() != null) {
|
||||
intent.putStringArrayListExtra(SelectedSubredditsAndUsersActivity.EXTRA_SELECTED_SUBREDDITS, multiReddit.getSubreddits());
|
||||
intent.putParcelableArrayListExtra(SelectedSubredditsAndUsersActivity.EXTRA_SELECTED_SUBREDDITS, multiReddit.getSubreddits());
|
||||
}
|
||||
startActivityForResult(intent, SUBREDDIT_SELECTION_REQUEST_CODE);
|
||||
});
|
||||
@ -215,7 +215,7 @@ public class EditMultiRedditActivity extends BaseActivity {
|
||||
});
|
||||
} else {
|
||||
String jsonModel = new MultiRedditJSONModel(binding.multiRedditNameEditTextEditMultiRedditActivity.getText().toString(), binding.descriptionEditTextEditMultiRedditActivity.getText().toString(),
|
||||
binding.visibilitySwitchEditMultiRedditActivity.isChecked(), multiReddit.getSubreddits()).createJSONModel();
|
||||
binding.visibilitySwitchEditMultiRedditActivity.isChecked(), multiReddit.getSubredditNames()).createJSONModel();
|
||||
EditMultiReddit.editMultiReddit(mRetrofit, accessToken, multiReddit.getPath(),
|
||||
jsonModel, new EditMultiReddit.EditMultiRedditListener() {
|
||||
@Override
|
||||
@ -239,7 +239,7 @@ public class EditMultiRedditActivity extends BaseActivity {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE && resultCode == RESULT_OK) {
|
||||
if (data != null) {
|
||||
multiReddit.setSubreddits(data.getStringArrayListExtra(
|
||||
multiReddit.setSubredditNames(data.getStringArrayListExtra(
|
||||
SelectedSubredditsAndUsersActivity.EXTRA_RETURN_SELECTED_SUBREDDITS));
|
||||
}
|
||||
}
|
||||
|
||||
@ -888,7 +888,7 @@ public class ViewMultiRedditDetailActivity extends BaseActivity implements SortT
|
||||
.show();
|
||||
return true;
|
||||
} else if (itemId == R.id.action_copy_view_multi_reddit_detail_activity) {
|
||||
CopyMultiRedditActivity.Companion.start(this, "");
|
||||
CopyMultiRedditActivity.Companion.start(this, multiPath);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
@ -188,7 +188,7 @@ public interface RedditAPI {
|
||||
@POST("/api/favorite")
|
||||
Call<String> favoriteThing(@HeaderMap Map<String, String> headers, @FieldMap Map<String, String> params);
|
||||
|
||||
@GET("/api/multi/mine")
|
||||
@GET("/api/multi/mine?expand_srs=true")
|
||||
Call<String> getMyMultiReddits(@HeaderMap Map<String, String> headers);
|
||||
|
||||
@FormUrlEncoded
|
||||
@ -206,7 +206,7 @@ public interface RedditAPI {
|
||||
@DELETE("/api/multi/multipath")
|
||||
Call<String> deleteMultiReddit(@HeaderMap Map<String, String> headers, @Query("multipath") String multipath);
|
||||
|
||||
@GET("/api/multi/multipath/")
|
||||
@GET("/api/multi/multipath?expand_srs=true")
|
||||
Call<String> getMultiRedditInfo(@HeaderMap Map<String, String> headers, @Query("multipath") String multipath);
|
||||
|
||||
@FormUrlEncoded
|
||||
|
||||
@ -6,7 +6,7 @@ import retrofit2.http.HeaderMap
|
||||
import retrofit2.http.Query
|
||||
|
||||
interface RedditAPIKt {
|
||||
@GET("/api/multi/multipath/")
|
||||
@GET("/api/multi/multipath?expand_srs=true")
|
||||
suspend fun getMultiRedditInfo(
|
||||
@HeaderMap headers: MutableMap<String, String>,
|
||||
@Query("multipath") multipath: String
|
||||
|
||||
@ -52,10 +52,10 @@ public class EditMultiReddit {
|
||||
EditMultiRedditListener editMultiRedditListener) {
|
||||
executor.execute(() -> {
|
||||
ArrayList<AnonymousMultiredditSubreddit> anonymousMultiredditSubreddits = new ArrayList<>();
|
||||
ArrayList<String> subreddits = multiReddit.getSubreddits();
|
||||
ArrayList<ExpandedSubredditInMultiReddit> subreddits = multiReddit.getSubreddits();
|
||||
redditDataRoomDatabase.multiRedditDao().insert(multiReddit);
|
||||
for (String s : subreddits) {
|
||||
anonymousMultiredditSubreddits.add(new AnonymousMultiredditSubreddit(multiReddit.getPath(), s));
|
||||
for (ExpandedSubredditInMultiReddit s : subreddits) {
|
||||
anonymousMultiredditSubreddits.add(new AnonymousMultiredditSubreddit(multiReddit.getPath(), s.getName()));
|
||||
}
|
||||
redditDataRoomDatabase.anonymousMultiredditSubredditDao().insertAll(anonymousMultiredditSubreddits);
|
||||
handler.post(editMultiRedditListener::success);
|
||||
|
||||
@ -0,0 +1,52 @@
|
||||
package ml.docilealligator.infinityforreddit.multireddit;
|
||||
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
public class ExpandedSubredditInMultiReddit implements Parcelable {
|
||||
private String name;
|
||||
private String iconUrl;
|
||||
|
||||
public ExpandedSubredditInMultiReddit(String name, String iconUrl) {
|
||||
this.name = name;
|
||||
this.iconUrl = iconUrl;
|
||||
}
|
||||
|
||||
protected ExpandedSubredditInMultiReddit(Parcel in) {
|
||||
name = in.readString();
|
||||
iconUrl = in.readString();
|
||||
}
|
||||
|
||||
public static final Creator<ExpandedSubredditInMultiReddit> CREATOR = new Creator<>() {
|
||||
@Override
|
||||
public ExpandedSubredditInMultiReddit createFromParcel(Parcel in) {
|
||||
return new ExpandedSubredditInMultiReddit(in);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ExpandedSubredditInMultiReddit[] newArray(int size) {
|
||||
return new ExpandedSubredditInMultiReddit[size];
|
||||
}
|
||||
};
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public String getIconUrl() {
|
||||
return iconUrl;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToParcel(@NonNull Parcel dest, int flags) {
|
||||
dest.writeString(name);
|
||||
dest.writeString(iconUrl);
|
||||
}
|
||||
}
|
||||
@ -65,11 +65,11 @@ public class FetchMultiRedditInfo {
|
||||
MultiReddit multiReddit = redditDataRoomDatabase.multiRedditDao().getMultiReddit(multipath, Account.ANONYMOUS_ACCOUNT);
|
||||
ArrayList<AnonymousMultiredditSubreddit> anonymousMultiredditSubreddits =
|
||||
(ArrayList<AnonymousMultiredditSubreddit>) redditDataRoomDatabase.anonymousMultiredditSubredditDao().getAllAnonymousMultiRedditSubreddits(multipath);
|
||||
ArrayList<String> subredditNames = new ArrayList<>();
|
||||
ArrayList<ExpandedSubredditInMultiReddit> subreddits = new ArrayList<>();
|
||||
for (AnonymousMultiredditSubreddit a : anonymousMultiredditSubreddits) {
|
||||
subredditNames.add(a.getSubredditName());
|
||||
subreddits.add(new ExpandedSubredditInMultiReddit(a.getSubredditName(), multiReddit.getIconUrl()));
|
||||
}
|
||||
multiReddit.setSubreddits(subredditNames);
|
||||
multiReddit.setSubreddits(subreddits);
|
||||
handler.post(() -> fetchMultiRedditInfoListener.success(multiReddit));
|
||||
});
|
||||
}
|
||||
@ -92,10 +92,16 @@ public class FetchMultiRedditInfo {
|
||||
boolean over18 = object.getBoolean(JSONUtils.OVER_18_KEY);
|
||||
boolean isSubscriber = object.getBoolean(JSONUtils.IS_SUBSCRIBER_KEY);
|
||||
boolean isFavorite = object.getBoolean(JSONUtils.IS_FAVORITED_KEY);
|
||||
ArrayList<String> subreddits = new ArrayList<>();
|
||||
ArrayList<ExpandedSubredditInMultiReddit> subreddits = new ArrayList<>();
|
||||
JSONArray subredditsArray = object.getJSONArray(JSONUtils.SUBREDDITS_KEY);
|
||||
for (int i = 0; i < subredditsArray.length(); i++) {
|
||||
subreddits.add(subredditsArray.getJSONObject(i).getString(JSONUtils.NAME_KEY));
|
||||
JSONObject subredditData = subredditsArray.getJSONObject(i).getJSONObject(JSONUtils.DATA_KEY);
|
||||
subreddits.add(
|
||||
new ExpandedSubredditInMultiReddit(
|
||||
subredditsArray.getJSONObject(i).getString(JSONUtils.NAME_KEY),
|
||||
subredditData.isNull(JSONUtils.COMMUNITY_ICON_KEY) ? subredditData.getString(JSONUtils.NAME_KEY) : subredditData.getString(JSONUtils.COMMUNITY_ICON_KEY)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
return new MultiReddit(path, displayName, name, description, copiedFrom, iconUrl,
|
||||
|
||||
@ -12,6 +12,7 @@ import androidx.room.Ignore;
|
||||
import androidx.room.Index;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import ml.docilealligator.infinityforreddit.account.Account;
|
||||
|
||||
@ -51,7 +52,7 @@ public class MultiReddit implements Parcelable {
|
||||
@ColumnInfo(name = "is_favorite")
|
||||
private boolean isFavorite;
|
||||
@Ignore
|
||||
private ArrayList<String> subreddits;
|
||||
private ArrayList<ExpandedSubredditInMultiReddit> subreddits;
|
||||
|
||||
public MultiReddit(@NonNull String path, @NonNull String displayName, @NonNull String name,
|
||||
String description, String copiedFrom, String iconUrl, String visibility,
|
||||
@ -75,7 +76,7 @@ public class MultiReddit implements Parcelable {
|
||||
public MultiReddit(@NonNull String path, @NonNull String displayName, @NonNull String name,
|
||||
String description, String copiedFrom, String iconUrl, String visibility,
|
||||
@NonNull String owner, int nSubscribers, long createdUTC, boolean over18,
|
||||
boolean isSubscriber, boolean isFavorite, ArrayList<String> subreddits) {
|
||||
boolean isSubscriber, boolean isFavorite, ArrayList<ExpandedSubredditInMultiReddit> subreddits) {
|
||||
this.displayName = displayName;
|
||||
this.name = name;
|
||||
this.description = description;
|
||||
@ -106,8 +107,7 @@ public class MultiReddit implements Parcelable {
|
||||
over18 = in.readByte() != 0;
|
||||
isSubscriber = in.readByte() != 0;
|
||||
isFavorite = in.readByte() != 0;
|
||||
subreddits = new ArrayList<>();
|
||||
in.readStringList(subreddits);
|
||||
subreddits = in.createTypedArrayList(ExpandedSubredditInMultiReddit.CREATOR);
|
||||
}
|
||||
|
||||
public static final Creator<MultiReddit> CREATOR = new Creator<>() {
|
||||
@ -229,14 +229,22 @@ public class MultiReddit implements Parcelable {
|
||||
isFavorite = favorite;
|
||||
}
|
||||
|
||||
public ArrayList<String> getSubreddits() {
|
||||
public ArrayList<ExpandedSubredditInMultiReddit> getSubreddits() {
|
||||
return subreddits;
|
||||
}
|
||||
|
||||
public void setSubreddits(ArrayList<String> subreddits) {
|
||||
public ArrayList<String> getSubredditNames() {
|
||||
return new ArrayList<>((subreddits.stream().map(ExpandedSubredditInMultiReddit::getName).collect(Collectors.toList())));
|
||||
}
|
||||
|
||||
public void setSubreddits(ArrayList<ExpandedSubredditInMultiReddit> subreddits) {
|
||||
this.subreddits = subreddits;
|
||||
}
|
||||
|
||||
public void setSubredditNames(ArrayList<String> subredditNames) {
|
||||
this.subreddits = new ArrayList<>(subredditNames.stream().map(name -> new ExpandedSubredditInMultiReddit(name, null)).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
@ -257,7 +265,7 @@ public class MultiReddit implements Parcelable {
|
||||
parcel.writeByte((byte) (over18 ? 1 : 0));
|
||||
parcel.writeByte((byte) (isSubscriber ? 1 : 0));
|
||||
parcel.writeByte((byte) (isFavorite ? 1 : 0));
|
||||
parcel.writeStringList(subreddits);
|
||||
parcel.writeTypedList(subreddits);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
||||
@ -76,9 +76,15 @@ public class ParseMultiReddit {
|
||||
boolean isFavorited = singleMultiRedditJSON.getBoolean(JSONUtils.IS_FAVORITED_KEY);
|
||||
|
||||
JSONArray subredditsArray = singleMultiRedditJSON.getJSONArray(JSONUtils.SUBREDDITS_KEY);
|
||||
ArrayList<String> subreddits = new ArrayList<>();
|
||||
for (int j = 0; j < subredditsArray.length(); j++) {
|
||||
subreddits.add(subredditsArray.getJSONObject(j).getString(JSONUtils.NAME_KEY));
|
||||
ArrayList<ExpandedSubredditInMultiReddit> subreddits = new ArrayList<>();
|
||||
for (int i = 0; i < subredditsArray.length(); i++) {
|
||||
JSONObject subredditData = subredditsArray.getJSONObject(i).getJSONObject(JSONUtils.DATA_KEY);
|
||||
subreddits.add(
|
||||
new ExpandedSubredditInMultiReddit(
|
||||
subredditsArray.getJSONObject(i).getString(JSONUtils.NAME_KEY),
|
||||
subredditData.isNull(JSONUtils.COMMUNITY_ICON_KEY) ? subredditData.getString(JSONUtils.NAME_KEY) : subredditData.getString(JSONUtils.COMMUNITY_ICON_KEY)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
return new MultiReddit(path, displayName, name, description, copiedFrom,
|
||||
|
||||
Reference in New Issue
Block a user