Editing multireddits is now available.

This commit is contained in:
Alex Ning 2020-04-04 16:10:25 +08:00
parent 9690c5eeac
commit d6dd171ac4
33 changed files with 975 additions and 296 deletions

View File

@ -64,7 +64,7 @@ dependencies {
implementation 'com.jakewharton:butterknife:10.2.0' implementation 'com.jakewharton:butterknife:10.2.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.0' annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.0'
implementation 'com.github.santalu:aspect-ratio-imageview:1.0.6' implementation 'com.github.santalu:aspect-ratio-imageview:1.0.6'
implementation 'androidx.paging:paging-runtime:2.1.1' implementation 'androidx.paging:paging-runtime:2.1.2'
implementation 'com.lsjwzh:materialloadingprogressbar:0.5.8-RELEASE' implementation 'com.lsjwzh:materialloadingprogressbar:0.5.8-RELEASE'
implementation 'io.noties.markwon:core:4.2.0' implementation 'io.noties.markwon:core:4.2.0'
implementation 'io.noties.markwon:linkify:4.2.0' implementation 'io.noties.markwon:linkify:4.2.0'
@ -79,7 +79,7 @@ dependencies {
implementation 'com.github.livefront:bridge:v1.2.0' implementation 'com.github.livefront:bridge:v1.2.0'
implementation 'com.evernote:android-state:1.4.1' implementation 'com.evernote:android-state:1.4.1'
annotationProcessor 'com.evernote:android-state-processor:1.4.1' annotationProcessor 'com.evernote:android-state-processor:1.4.1'
implementation 'androidx.work:work-runtime:2.3.2' implementation 'androidx.work:work-runtime:2.3.4'
implementation 'androidx.preference:preference:1.1.0' implementation 'androidx.preference:preference:1.1.0'
implementation 'com.nex3z:flow-layout:1.3.0' implementation 'com.nex3z:flow-layout:1.3.0'
implementation 'com.r0adkll:slidableactivity:2.1.0' implementation 'com.r0adkll:slidableactivity:2.1.0'

View File

@ -21,7 +21,16 @@
android:theme="@style/AppTheme" android:theme="@style/AppTheme"
android:usesCleartextTraffic="true" android:usesCleartextTraffic="true"
tools:replace="android:label"> tools:replace="android:label">
<activity android:name=".Activity.ThemePreviewActivity" <activity android:name=".Activity.SelectedSubredditsActivity"
android:label="@string/selected_subeddits_activity_label"
android:parentActivityName=".Activity.MainActivity"
android:theme="@style/AppTheme.NoActionBar" />
<activity android:name=".Activity.EditMultiRedditActivity"
android:label="@string/edit_multi_reddit_activity_label"
android:parentActivityName=".Activity.MainActivity"
android:theme="@style/AppTheme.NoActionBar"/>
<activity
android:name=".Activity.ThemePreviewActivity"
android:label="@string/theme_preview_activity_label" android:label="@string/theme_preview_activity_label"
android:parentActivityName=".Activity.MainActivity" android:parentActivityName=".Activity.MainActivity"
android:theme="@style/AppTheme.NoActionBar" /> android:theme="@style/AppTheme.NoActionBar" />

View File

@ -35,7 +35,6 @@ import ml.docilealligator.infinityforreddit.MultiReddit.CreateMultiReddit;
import ml.docilealligator.infinityforreddit.MultiReddit.MultiRedditJSONModel; import ml.docilealligator.infinityforreddit.MultiReddit.MultiRedditJSONModel;
import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.SubredditWithSelection;
import retrofit2.Retrofit; import retrofit2.Retrofit;
public class CreateMultiRedditActivity extends BaseActivity { public class CreateMultiRedditActivity extends BaseActivity {
@ -44,8 +43,7 @@ public class CreateMultiRedditActivity extends BaseActivity {
private static final String NULL_ACCESS_TOKEN_STATE = "NATS"; private static final String NULL_ACCESS_TOKEN_STATE = "NATS";
private static final String ACCESS_TOKEN_STATE = "ATS"; private static final String ACCESS_TOKEN_STATE = "ATS";
private static final String ACCOUNT_NAME_STATE = "ANS"; private static final String ACCOUNT_NAME_STATE = "ANS";
private static final String SELECTED_SUBSCRIBED_SUBREDDITS_STATE = "SSSS"; private static final String SELECTED_SUBREDDITS_STATE = "SSS";
private static final String SELECTED_OTHER_SUBREDDITS_STATE = "SOSS";
@BindView(R.id.coordinator_layout_create_multi_reddit_activity) @BindView(R.id.coordinator_layout_create_multi_reddit_activity)
CoordinatorLayout coordinatorLayout; CoordinatorLayout coordinatorLayout;
@BindView(R.id.appbar_layout_create_multi_reddit_activity) @BindView(R.id.appbar_layout_create_multi_reddit_activity)
@ -81,8 +79,7 @@ public class CreateMultiRedditActivity extends BaseActivity {
private boolean mNullAccessToken = false; private boolean mNullAccessToken = false;
private String mAccessToken; private String mAccessToken;
private String mAccountName; private String mAccountName;
private ArrayList<SubredditWithSelection> mSelectedSubscribedSubreddits; private ArrayList<String> mSubreddits;
private ArrayList<SubredditWithSelection> mSelectedOtherSubreddits;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
@ -105,8 +102,7 @@ public class CreateMultiRedditActivity extends BaseActivity {
mNullAccessToken = savedInstanceState.getBoolean(NULL_ACCESS_TOKEN_STATE); mNullAccessToken = savedInstanceState.getBoolean(NULL_ACCESS_TOKEN_STATE);
mAccessToken = savedInstanceState.getString(ACCESS_TOKEN_STATE); mAccessToken = savedInstanceState.getString(ACCESS_TOKEN_STATE);
mAccountName = savedInstanceState.getString(ACCOUNT_NAME_STATE); mAccountName = savedInstanceState.getString(ACCOUNT_NAME_STATE);
mSelectedSubscribedSubreddits = savedInstanceState.getParcelableArrayList(SELECTED_SUBSCRIBED_SUBREDDITS_STATE); mSubreddits = savedInstanceState.getStringArrayList(SELECTED_SUBREDDITS_STATE);
mSelectedOtherSubreddits = savedInstanceState.getParcelableArrayList(SELECTED_OTHER_SUBREDDITS_STATE);
if (!mNullAccessToken && mAccountName == null) { if (!mNullAccessToken && mAccountName == null) {
getCurrentAccountAndBindView(); getCurrentAccountAndBindView();
@ -114,8 +110,7 @@ public class CreateMultiRedditActivity extends BaseActivity {
bindView(); bindView();
} }
} else { } else {
mSelectedSubscribedSubreddits = new ArrayList<>(); mSubreddits = new ArrayList<>();
mSelectedOtherSubreddits = new ArrayList<>();
getCurrentAccountAndBindView(); getCurrentAccountAndBindView();
} }
} }
@ -136,11 +131,8 @@ public class CreateMultiRedditActivity extends BaseActivity {
private void bindView() { private void bindView() {
selectSubredditTextView.setOnClickListener(view -> { selectSubredditTextView.setOnClickListener(view -> {
Intent intent = new Intent(CreateMultiRedditActivity.this, SubredditMultiselectionActivity.class); Intent intent = new Intent(CreateMultiRedditActivity.this, SelectedSubredditsActivity.class);
intent.putParcelableArrayListExtra(SubredditMultiselectionActivity.EXTRA_SELECTED_SUBSCRIBED_SUBREDDITS, intent.putStringArrayListExtra(SelectedSubredditsActivity.EXTRA_SELECTED_SUBREDDITS, mSubreddits);
mSelectedSubscribedSubreddits);
intent.putParcelableArrayListExtra(SubredditMultiselectionActivity.EXTRA_SELECTED_OTHER_SUBREDDITS,
mSelectedOtherSubreddits);
startActivityForResult(intent, SUBREDDIT_SELECTION_REQUEST_CODE); startActivityForResult(intent, SUBREDDIT_SELECTION_REQUEST_CODE);
}); });
} }
@ -158,7 +150,7 @@ public class CreateMultiRedditActivity extends BaseActivity {
case android.R.id.home: case android.R.id.home:
finish(); finish();
return true; return true;
case R.id.action_create_create_multi_reddit_activity: case R.id.action_save_create_multi_reddit_activity:
if (mAccountName == null || mAccessToken == null) { if (mAccountName == null || mAccessToken == null) {
Snackbar.make(coordinatorLayout, R.string.something_went_wrong, Snackbar.LENGTH_SHORT).show(); Snackbar.make(coordinatorLayout, R.string.something_went_wrong, Snackbar.LENGTH_SHORT).show();
return true; return true;
@ -168,11 +160,8 @@ public class CreateMultiRedditActivity extends BaseActivity {
return true; return true;
} }
ArrayList<SubredditWithSelection> allSelectedSubreddits = new ArrayList<>();
allSelectedSubreddits.addAll(mSelectedSubscribedSubreddits);
allSelectedSubreddits.addAll(mSelectedOtherSubreddits);
String jsonModel = new MultiRedditJSONModel(nameEditText.getText().toString(), descriptionEditText.getText().toString(), String jsonModel = new MultiRedditJSONModel(nameEditText.getText().toString(), descriptionEditText.getText().toString(),
visibilitySwitch.isChecked(), allSelectedSubreddits).createJSONModel(); visibilitySwitch.isChecked(), mSubreddits).createJSONModel();
CreateMultiReddit.createMultiReddit(mOauthRetrofit, mRedditDataRoomDatabase, mAccessToken, CreateMultiReddit.createMultiReddit(mOauthRetrofit, mRedditDataRoomDatabase, mAccessToken,
"/user/" + mAccountName + "/m/" + nameEditText.getText().toString(), "/user/" + mAccountName + "/m/" + nameEditText.getText().toString(),
jsonModel, new CreateMultiReddit.CreateMultiRedditListener() { jsonModel, new CreateMultiReddit.CreateMultiRedditListener() {
@ -199,26 +188,8 @@ 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) {
if (mSelectedSubscribedSubreddits == null) { mSubreddits = data.getStringArrayListExtra(
mSelectedSubscribedSubreddits = new ArrayList<>(); SubredditMultiselectionActivity.EXTRA_RETURN_SELECTED_SUBREDDITS);
}
if (mSelectedOtherSubreddits == null) {
mSelectedOtherSubreddits = new ArrayList<>();
}
ArrayList<SubredditWithSelection> selectedSubscribedSubreddits = data.getParcelableArrayListExtra(
SubredditMultiselectionActivity.EXTRA_RETURN_SELECTED_SUBSCRIBED_SUBREDDITS);
ArrayList<SubredditWithSelection> selectedOtherSubreddits = data.getParcelableArrayListExtra(
SubredditMultiselectionActivity.EXTRA_RETURN_SUBSCRIBED_OTHER_SUBREDDITS);
if (selectedSubscribedSubreddits != null) {
mSelectedSubscribedSubreddits.clear();
mSelectedSubscribedSubreddits.addAll(selectedSubscribedSubreddits);
}
if (selectedOtherSubreddits != null) {
mSelectedOtherSubreddits.clear();
mSelectedOtherSubreddits.addAll(selectedOtherSubreddits);
}
descriptionEditText.setText(mSelectedSubscribedSubreddits.toString() + mSelectedOtherSubreddits.toString());
} }
} }
} }
@ -229,8 +200,7 @@ public class CreateMultiRedditActivity extends BaseActivity {
outState.putBoolean(NULL_ACCESS_TOKEN_STATE, mNullAccessToken); outState.putBoolean(NULL_ACCESS_TOKEN_STATE, mNullAccessToken);
outState.putString(ACCESS_TOKEN_STATE, mAccessToken); outState.putString(ACCESS_TOKEN_STATE, mAccessToken);
outState.putString(ACCOUNT_NAME_STATE, mAccountName); outState.putString(ACCOUNT_NAME_STATE, mAccountName);
outState.putParcelableArrayList(SELECTED_SUBSCRIBED_SUBREDDITS_STATE, mSelectedSubscribedSubreddits); outState.putStringArrayList(SELECTED_SUBREDDITS_STATE, mSubreddits);
outState.putParcelableArrayList(SELECTED_OTHER_SUBREDDITS_STATE, mSelectedOtherSubreddits);
} }
@Override @Override

View File

@ -0,0 +1,263 @@
package ml.docilealligator.infinityforreddit.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.ColorStateList;
import android.os.Build;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.Toolbar;
import androidx.coordinatorlayout.widget.CoordinatorLayout;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.snackbar.Snackbar;
import javax.inject.Inject;
import javax.inject.Named;
import butterknife.BindView;
import butterknife.ButterKnife;
import ml.docilealligator.infinityforreddit.AsyncTask.GetCurrentAccountAsyncTask;
import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.MultiReddit.EditMultiReddit;
import ml.docilealligator.infinityforreddit.MultiReddit.FetchMultiRedditInfo;
import ml.docilealligator.infinityforreddit.MultiReddit.MultiReddit;
import ml.docilealligator.infinityforreddit.MultiReddit.MultiRedditJSONModel;
import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import retrofit2.Retrofit;
public class EditMultiRedditActivity extends BaseActivity {
public static final String EXTRA_MULTI_REDDIT = "EMR";
public static final String EXTRA_MULTI_PATH = "EMP";
private static final int SUBREDDIT_SELECTION_REQUEST_CODE = 1;
private static final String NULL_ACCESS_TOKEN_STATE = "NATS";
private static final String ACCESS_TOKEN_STATE = "ATS";
private static final String ACCOUNT_NAME_STATE = "ANS";
private static final String MULTI_REDDIT_STATE = "MRS";
private static final String MULTI_PATH_STATE = "MPS";
@BindView(R.id.coordinator_layout_edit_multi_reddit_activity)
CoordinatorLayout coordinatorLayout;
@BindView(R.id.appbar_layout_edit_multi_reddit_activity)
AppBarLayout appBarLayout;
@BindView(R.id.toolbar_edit_multi_reddit_activity)
Toolbar toolbar;
@BindView(R.id.progress_bar_edit_multi_reddit_activity)
ProgressBar progressBar;
@BindView(R.id.linear_layout_edit_multi_reddit_activity)
LinearLayout linearLayout;
@BindView(R.id.multi_reddit_name_edit_text_edit_multi_reddit_activity)
EditText nameEditText;
@BindView(R.id.divider_1_edit_multi_reddit_activity)
View divider1;
@BindView(R.id.description_edit_text_edit_multi_reddit_activity)
EditText descriptionEditText;
@BindView(R.id.divider_2_edit_multi_reddit_activity)
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)
TextView selectSubredditTextView;
@Inject
@Named("oauth")
Retrofit mRetrofit;
@Inject
RedditDataRoomDatabase mRedditDataRoomDatabase;
@Inject
@Named("default")
SharedPreferences mSharedPreferences;
@Inject
CustomThemeWrapper mCustomThemeWrapper;
private boolean mNullAccessToken = false;
private String mAccessToken;
private String mAccountName;
private MultiReddit multiReddit;
private String multipath;
@Override
protected void onCreate(Bundle savedInstanceState) {
((Infinity) getApplication()).getAppComponent().inject(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit_multi_reddit);
ButterKnife.bind(this);
applyCustomTheme();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && isChangeStatusBarIconColor()) {
addOnOffsetChangedListener(appBarLayout);
}
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
if (savedInstanceState != null) {
mNullAccessToken = savedInstanceState.getBoolean(NULL_ACCESS_TOKEN_STATE);
mAccessToken = savedInstanceState.getString(ACCESS_TOKEN_STATE);
mAccountName = savedInstanceState.getString(ACCOUNT_NAME_STATE);
multiReddit = savedInstanceState.getParcelable(MULTI_REDDIT_STATE);
multipath = savedInstanceState.getString(MULTI_PATH_STATE);
if (!mNullAccessToken && mAccountName == null) {
getCurrentAccountAndBindView();
} else {
bindView();
}
} else {
multiReddit = getIntent().getParcelableExtra(EXTRA_MULTI_REDDIT);
multipath = getIntent().getStringExtra(EXTRA_MULTI_PATH);
getCurrentAccountAndBindView();
}
}
private void getCurrentAccountAndBindView() {
new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> {
if (account == null) {
mNullAccessToken = true;
Toast.makeText(this, R.string.logged_out, Toast.LENGTH_SHORT).show();
finish();
} else {
mAccessToken = account.getAccessToken();
mAccountName = account.getUsername();
bindView();
}
}).execute();
}
private void bindView() {
if (multiReddit == null) {
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 {
progressBar.setVisibility(View.GONE);
linearLayout.setVisibility(View.VISIBLE);
nameEditText.setText(multiReddit.getDisplayName());
descriptionEditText.setText(multiReddit.getDescription());
visibilitySwitch.setChecked(!multiReddit.getVisibility().equals("public"));
}
selectSubredditTextView.setOnClickListener(view -> {
Intent intent = new Intent(EditMultiRedditActivity.this, SelectedSubredditsActivity.class);
if (multiReddit.getSubreddits() != null) {
intent.putStringArrayListExtra(SelectedSubredditsActivity.EXTRA_SELECTED_SUBREDDITS, multiReddit.getSubreddits());
}
startActivityForResult(intent, SUBREDDIT_SELECTION_REQUEST_CODE);
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.edit_multi_reddit_activity, menu);
applyMenuItemTheme(menu);
return true;
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
case R.id.action_save_edit_multi_reddit_activity:
if (mAccountName == null || mAccessToken == null) {
Snackbar.make(coordinatorLayout, R.string.something_went_wrong, Snackbar.LENGTH_SHORT).show();
return true;
}
if (nameEditText.getText() == null || nameEditText.getText().toString().equals("")) {
Snackbar.make(coordinatorLayout, R.string.no_multi_reddit_name, Snackbar.LENGTH_SHORT).show();
return true;
}
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 false;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE && resultCode == RESULT_OK) {
if (data != null) {
multiReddit.setSubreddits(data.getStringArrayListExtra(
SubredditMultiselectionActivity.EXTRA_RETURN_SELECTED_SUBREDDITS));
}
}
}
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(NULL_ACCESS_TOKEN_STATE, mNullAccessToken);
outState.putString(ACCESS_TOKEN_STATE, mAccessToken);
outState.putString(ACCOUNT_NAME_STATE, mAccountName);
outState.putParcelable(MULTI_REDDIT_STATE, multiReddit);
outState.putString(MULTI_PATH_STATE, multipath);
}
@Override
public SharedPreferences getSharedPreferences() {
return mSharedPreferences;
}
@Override
protected CustomThemeWrapper getCustomThemeWrapper() {
return mCustomThemeWrapper;
}
@Override
protected void applyCustomTheme() {
applyAppBarLayoutAndToolbarTheme(appBarLayout, toolbar);
progressBar.setIndeterminateTintList(ColorStateList.valueOf(mCustomThemeWrapper.getColorAccent()));
int primaryTextColor = mCustomThemeWrapper.getPrimaryTextColor();
nameEditText.setTextColor(primaryTextColor);
int dividerColor = mCustomThemeWrapper.getDividerColor();
divider1.setBackgroundColor(dividerColor);
divider2.setBackgroundColor(dividerColor);
descriptionEditText.setTextColor(primaryTextColor);
visibilityTextView.setTextColor(primaryTextColor);
selectSubredditTextView.setTextColor(primaryTextColor);
}
}

View File

@ -38,7 +38,7 @@ import ml.docilealligator.infinityforreddit.AsyncTask.GetCurrentAccountAsyncTask
import ml.docilealligator.infinityforreddit.AsyncTask.InsertMultiRedditAsyncTask; import ml.docilealligator.infinityforreddit.AsyncTask.InsertMultiRedditAsyncTask;
import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeWrapper; import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.MultiReddit.FetchMultiReddit; import ml.docilealligator.infinityforreddit.MultiReddit.FetchMyMultiReddits;
import ml.docilealligator.infinityforreddit.MultiReddit.MultiReddit; import ml.docilealligator.infinityforreddit.MultiReddit.MultiReddit;
import ml.docilealligator.infinityforreddit.MultiReddit.MultiRedditViewModel; import ml.docilealligator.infinityforreddit.MultiReddit.MultiRedditViewModel;
import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.R;
@ -204,7 +204,7 @@ public class MultiRedditListingActivity extends BaseActivity {
private void loadMultiReddits() { private void loadMultiReddits() {
mSwipeRefreshLayout.setRefreshing(true); mSwipeRefreshLayout.setRefreshing(true);
FetchMultiReddit.fetchMyMultiReddits(mOauthRetrofit, mAccessToken, new FetchMultiReddit.FetchMultiRedditListener() { FetchMyMultiReddits.fetchMyMultiReddits(mOauthRetrofit, mAccessToken, new FetchMyMultiReddits.FetchMyMultiRedditsListener() {
@Override @Override
public void success(ArrayList<MultiReddit> multiReddits) { public void success(ArrayList<MultiReddit> multiReddits) {
new InsertMultiRedditAsyncTask(mRedditDataRoomDatabase, multiReddits, mAccountName, () -> { new InsertMultiRedditAsyncTask(mRedditDataRoomDatabase, multiReddits, mAccountName, () -> {

View File

@ -0,0 +1,146 @@
package ml.docilealligator.infinityforreddit.Activity;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.Toolbar;
import androidx.coordinatorlayout.widget.CoordinatorLayout;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import java.util.ArrayList;
import javax.inject.Inject;
import javax.inject.Named;
import butterknife.BindView;
import butterknife.ButterKnife;
import ml.docilealligator.infinityforreddit.Adapter.SelectedSubredditsRecyclerViewAdapter;
import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.R;
public class SelectedSubredditsActivity extends BaseActivity {
public static final String EXTRA_SELECTED_SUBREDDITS = "ESS";
public static final String EXTRA_RETURN_SELECTED_SUBREDDITS = "ERSS";
private static final int SUBREDDIT_SELECTION_REQUEST_CODE = 1;
private static final String SELECTED_SUBREDDITS_STATE = "SSS";
@BindView(R.id.coordinator_layout_selected_subreddits_activity)
CoordinatorLayout coordinatorLayout;
@BindView(R.id.appbar_layout_selected_subreddits_activity)
AppBarLayout appBarLayout;
@BindView(R.id.toolbar_selected_subreddits_activity)
Toolbar toolbar;
@BindView(R.id.recycler_view_selected_subreddits_activity)
RecyclerView recyclerView;
@BindView(R.id.fab_selected_subreddits_activity)
FloatingActionButton fab;
@Inject
@Named("default")
SharedPreferences mSharedPreferences;
@Inject
CustomThemeWrapper mCustomThemeWrapper;
private SelectedSubredditsRecyclerViewAdapter adapter;
private ArrayList<String> subreddits;
@Override
protected void onCreate(Bundle savedInstanceState) {
((Infinity) getApplication()).getAppComponent().inject(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_selected_subreddits);
ButterKnife.bind(this);
applyCustomTheme();
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
if (savedInstanceState != null) {
subreddits = savedInstanceState.getStringArrayList(SELECTED_SUBREDDITS_STATE);
} else {
subreddits = getIntent().getStringArrayListExtra(EXTRA_SELECTED_SUBREDDITS);
}
adapter = new SelectedSubredditsRecyclerViewAdapter(mCustomThemeWrapper, subreddits);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(adapter);
fab.setOnClickListener(view -> {
Intent intent = new Intent(this, SubredditMultiselectionActivity.class);
startActivityForResult(intent, SUBREDDIT_SELECTION_REQUEST_CODE);
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.selected_subreddits_activity, menu);
applyMenuItemTheme(menu);
return true;
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
if (item.getItemId() == android.R.id.home) {
finish();
return true;
} else if (item.getItemId() == R.id.action_save_selected_subreddits_activity) {
if (adapter != null) {
Intent returnIntent = new Intent();
returnIntent.putExtra(EXTRA_RETURN_SELECTED_SUBREDDITS, adapter.getSubreddits());
setResult(Activity.RESULT_OK, returnIntent);
}
finish();
}
return false;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == SUBREDDIT_SELECTION_REQUEST_CODE && resultCode == RESULT_OK) {
if (data != null) {
if (subreddits == null) {
subreddits = new ArrayList<>();
}
subreddits = data.getStringArrayListExtra(SubredditMultiselectionActivity.EXTRA_RETURN_SELECTED_SUBREDDITS);
adapter.addSubreddits(subreddits);
}
}
}
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
if (adapter != null) {
outState.putStringArrayList(SELECTED_SUBREDDITS_STATE, adapter.getSubreddits());
}
}
@Override
protected SharedPreferences getSharedPreferences() {
return mSharedPreferences;
}
@Override
protected CustomThemeWrapper getCustomThemeWrapper() {
return mCustomThemeWrapper;
}
@Override
protected void applyCustomTheme() {
coordinatorLayout.setBackgroundColor(mCustomThemeWrapper.getBackgroundColor());
applyAppBarLayoutAndToolbarTheme(appBarLayout, toolbar);
applyFABTheme(fab, R.drawable.ic_add_24dp);
}
}

View File

@ -40,24 +40,17 @@ import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase; import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
import ml.docilealligator.infinityforreddit.SubredditDatabase.SubredditData;
import ml.docilealligator.infinityforreddit.SubredditWithSelection;
import ml.docilealligator.infinityforreddit.SubscribedSubredditDatabase.SubscribedSubredditViewModel; import ml.docilealligator.infinityforreddit.SubscribedSubredditDatabase.SubscribedSubredditViewModel;
import retrofit2.Retrofit; import retrofit2.Retrofit;
public class SubredditMultiselectionActivity extends BaseActivity { public class SubredditMultiselectionActivity extends BaseActivity {
static final String EXTRA_SELECTED_SUBSCRIBED_SUBREDDITS = "ESS"; static final String EXTRA_RETURN_SELECTED_SUBREDDITS = "ERSS";
static final String EXTRA_SELECTED_OTHER_SUBREDDITS = "EOSS";
static final String EXTRA_RETURN_SELECTED_SUBSCRIBED_SUBREDDITS = "ERSSS";
static final String EXTRA_RETURN_SUBSCRIBED_OTHER_SUBREDDITS = "EROSS";
private static final int SUBREDDIT_SEARCH_REQUEST_CODE = 1; private static final int SUBREDDIT_SEARCH_REQUEST_CODE = 1;
private static final String NULL_ACCESS_TOKEN_STATE = "NATS"; private static final String NULL_ACCESS_TOKEN_STATE = "NATS";
private static final String ACCESS_TOKEN_STATE = "ATS"; private static final String ACCESS_TOKEN_STATE = "ATS";
private static final String ACCOUNT_NAME_STATE = "ANS"; private static final String ACCOUNT_NAME_STATE = "ANS";
private static final String SELECTED_SUBSCRIBED_SUBREDDITS_STATE = "SSSS";
private static final String SELECTED_OTHER_SUBREDDITS_STATE = "SOSS";
@BindView(R.id.coordinator_layout_subreddits_multiselection_activity) @BindView(R.id.coordinator_layout_subreddits_multiselection_activity)
CoordinatorLayout mCoordinatorLayout; CoordinatorLayout mCoordinatorLayout;
@ -132,20 +125,16 @@ public class SubredditMultiselectionActivity extends BaseActivity {
mAccountName = savedInstanceState.getString(ACCOUNT_NAME_STATE); mAccountName = savedInstanceState.getString(ACCOUNT_NAME_STATE);
if (!mNullAccessToken && mAccountName == null) { if (!mNullAccessToken && mAccountName == null) {
getCurrentAccountAndBindView(savedInstanceState.getParcelableArrayList(SELECTED_SUBSCRIBED_SUBREDDITS_STATE), getCurrentAccountAndBindView();
savedInstanceState.getParcelableArrayList(SELECTED_OTHER_SUBREDDITS_STATE));
} else { } else {
bindView(savedInstanceState.getParcelableArrayList(SELECTED_SUBSCRIBED_SUBREDDITS_STATE), bindView();
savedInstanceState.getParcelableArrayList(SELECTED_OTHER_SUBREDDITS_STATE));
} }
} else { } else {
getCurrentAccountAndBindView(getIntent().getParcelableArrayListExtra(EXTRA_SELECTED_SUBSCRIBED_SUBREDDITS), getCurrentAccountAndBindView();
getIntent().getParcelableArrayListExtra(EXTRA_SELECTED_OTHER_SUBREDDITS));
} }
} }
private void getCurrentAccountAndBindView(ArrayList<SubredditWithSelection> selectedSubscribedSubreddits, private void getCurrentAccountAndBindView() {
ArrayList<SubredditWithSelection> otherSubreddits) {
new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> { new GetCurrentAccountAsyncTask(mRedditDataRoomDatabase.accountDao(), account -> {
if (account == null) { if (account == null) {
mNullAccessToken = true; mNullAccessToken = true;
@ -154,16 +143,14 @@ public class SubredditMultiselectionActivity extends BaseActivity {
} else { } else {
mAccessToken = account.getAccessToken(); mAccessToken = account.getAccessToken();
mAccountName = account.getUsername(); mAccountName = account.getUsername();
bindView(selectedSubscribedSubreddits, otherSubreddits); bindView();
} }
}).execute(); }).execute();
} }
private void bindView(ArrayList<SubredditWithSelection> selectedSubscribedSubreddits, private void bindView() {
ArrayList<SubredditWithSelection> otherSubreddits) {
mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mAdapter = new SubredditMultiselectionRecyclerViewAdapter(this, mCustomThemeWrapper, mAdapter = new SubredditMultiselectionRecyclerViewAdapter(this, mCustomThemeWrapper);
selectedSubscribedSubreddits, otherSubreddits);
mRecyclerView.setAdapter(mAdapter); mRecyclerView.setAdapter(mAdapter);
mSubscribedSubredditViewModel = new ViewModelProvider(this, mSubscribedSubredditViewModel = new ViewModelProvider(this,
@ -201,10 +188,8 @@ public class SubredditMultiselectionActivity extends BaseActivity {
case R.id.action_save_subreddit_multiselection_activity: case R.id.action_save_subreddit_multiselection_activity:
if (mAdapter != null) { if (mAdapter != null) {
Intent returnIntent = new Intent(); Intent returnIntent = new Intent();
returnIntent.putParcelableArrayListExtra(EXTRA_RETURN_SELECTED_SUBSCRIBED_SUBREDDITS, returnIntent.putStringArrayListExtra(EXTRA_RETURN_SELECTED_SUBREDDITS,
mAdapter.getAllSelectedSubscribedSubreddits()); mAdapter.getAllSelectedSubreddits());
returnIntent.putParcelableArrayListExtra(EXTRA_RETURN_SUBSCRIBED_OTHER_SUBREDDITS,
mAdapter.getAllSelectedOtherSubreddits());
setResult(RESULT_OK, returnIntent); setResult(RESULT_OK, returnIntent);
} }
finish(); finish();
@ -221,12 +206,13 @@ public class SubredditMultiselectionActivity extends BaseActivity {
@Override @Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data);
if (requestCode == SUBREDDIT_SEARCH_REQUEST_CODE && resultCode == RESULT_OK && data != null if (requestCode == SUBREDDIT_SEARCH_REQUEST_CODE && resultCode == RESULT_OK && data != null) {
&& mAdapter != null) { Intent returnIntent = new Intent();
String subredditName = data.getStringExtra(SearchActivity.EXTRA_RETURN_SUBREDDIT_NAME); ArrayList<String> selectedSubreddits = mAdapter.getAllSelectedSubreddits();
String subredditIconUrl = data.getStringExtra(SearchActivity.EXTRA_RETURN_SUBREDDIT_ICON_URL); selectedSubreddits.add(data.getStringExtra(SearchActivity.EXTRA_RETURN_SUBREDDIT_NAME));
mAdapter.addOtherSubreddit(new SubredditData("-1", subredditName, subredditIconUrl, returnIntent.putStringArrayListExtra(EXTRA_RETURN_SELECTED_SUBREDDITS, selectedSubreddits);
null, null, null, 0)); setResult(RESULT_OK, returnIntent);
finish();
} }
} }
@ -236,8 +222,6 @@ public class SubredditMultiselectionActivity extends BaseActivity {
outState.putBoolean(NULL_ACCESS_TOKEN_STATE, mNullAccessToken); outState.putBoolean(NULL_ACCESS_TOKEN_STATE, mNullAccessToken);
outState.putString(ACCESS_TOKEN_STATE, mAccessToken); outState.putString(ACCESS_TOKEN_STATE, mAccessToken);
outState.putString(ACCOUNT_NAME_STATE, mAccountName); outState.putString(ACCOUNT_NAME_STATE, mAccountName);
outState.putParcelableArrayList(SELECTED_SUBSCRIBED_SUBREDDITS_STATE, mAdapter.getAllSelectedSubscribedSubreddits());
outState.putParcelableArrayList(SELECTED_OTHER_SUBREDDITS_STATE, mAdapter.getAllOtherSubreddits());
} }
@Override @Override

View File

@ -33,6 +33,7 @@ import ml.docilealligator.infinityforreddit.Fragment.SortTypeBottomSheetFragment
import ml.docilealligator.infinityforreddit.FragmentCommunicator; import ml.docilealligator.infinityforreddit.FragmentCommunicator;
import ml.docilealligator.infinityforreddit.Infinity; import ml.docilealligator.infinityforreddit.Infinity;
import ml.docilealligator.infinityforreddit.MultiReddit.DeleteMultiReddit; import ml.docilealligator.infinityforreddit.MultiReddit.DeleteMultiReddit;
import ml.docilealligator.infinityforreddit.MultiReddit.EditMultiReddit;
import ml.docilealligator.infinityforreddit.MultiReddit.MultiReddit; import ml.docilealligator.infinityforreddit.MultiReddit.MultiReddit;
import ml.docilealligator.infinityforreddit.Post.PostDataSource; import ml.docilealligator.infinityforreddit.Post.PostDataSource;
import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.R;
@ -248,7 +249,12 @@ public class ViewMultiRedditDetailActivity extends BaseActivity implements SortT
case R.id.action_change_post_layout_view_multi_reddit_detail_activity: case R.id.action_change_post_layout_view_multi_reddit_detail_activity:
postLayoutBottomSheetFragment.show(getSupportFragmentManager(), postLayoutBottomSheetFragment.getTag()); postLayoutBottomSheetFragment.show(getSupportFragmentManager(), postLayoutBottomSheetFragment.getTag());
return true; return true;
case R.id.action_delte_view_multi_reddit_detail_activity: case R.id.action_edit_view_multi_reddit_detail_activity:
Intent editIntent = new Intent(this, EditMultiRedditActivity.class);
editIntent.putExtra(EditMultiRedditActivity.EXTRA_MULTI_PATH, multiPath);
startActivity(editIntent);
return true;
case R.id.action_delete_view_multi_reddit_detail_activity:
new MaterialAlertDialogBuilder(this, R.style.MaterialAlertDialogTheme) new MaterialAlertDialogBuilder(this, R.style.MaterialAlertDialogTheme)
.setTitle(R.string.delete) .setTitle(R.string.delete)
.setMessage(R.string.delete_multi_reddit_dialog_message) .setMessage(R.string.delete_multi_reddit_dialog_message)

View File

@ -109,7 +109,7 @@ public class MultiRedditListingRecyclerViewAdapter extends RecyclerView.Adapter<
mFavoriteMultiReddits.size() + 2 : 0; mFavoriteMultiReddits.size() + 2 : 0;
MultiReddit multiReddit = mMultiReddits.get(holder.getAdapterPosition() - offset); MultiReddit multiReddit = mMultiReddits.get(holder.getAdapterPosition() - offset);
name = multiReddit.getName(); name = multiReddit.getDisplayName();
iconUrl = multiReddit.getIconUrl(); iconUrl = multiReddit.getIconUrl();
if(multiReddit.isFavorite()) { if(multiReddit.isFavorite()) {
((MultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_24dp); ((MultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_24dp);
@ -192,7 +192,7 @@ public class MultiRedditListingRecyclerViewAdapter extends RecyclerView.Adapter<
((MultiRedditViewHolder) holder).multiRedditNameTextView.setText(name); ((MultiRedditViewHolder) holder).multiRedditNameTextView.setText(name);
} else if (holder instanceof FavoriteMultiRedditViewHolder) { } else if (holder instanceof FavoriteMultiRedditViewHolder) {
MultiReddit multiReddit = mFavoriteMultiReddits.get(holder.getAdapterPosition() - 1); MultiReddit multiReddit = mFavoriteMultiReddits.get(holder.getAdapterPosition() - 1);
String name = multiReddit.getName(); String name = multiReddit.getDisplayName();
String iconUrl = multiReddit.getIconUrl(); String iconUrl = multiReddit.getIconUrl();
if(multiReddit.isFavorite()) { if(multiReddit.isFavorite()) {
((FavoriteMultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_24dp); ((FavoriteMultiRedditViewHolder) holder).favoriteImageView.setImageResource(R.drawable.ic_favorite_24dp);

View File

@ -0,0 +1,79 @@
package ml.docilealligator.infinityforreddit.Adapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import butterknife.BindView;
import butterknife.ButterKnife;
import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.R;
public class SelectedSubredditsRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private CustomThemeWrapper customThemeWrapper;
private ArrayList<String> subreddits;
public SelectedSubredditsRecyclerViewAdapter(CustomThemeWrapper customThemeWrapper, ArrayList<String> subreddits) {
this.customThemeWrapper = customThemeWrapper;
if (subreddits == null) {
this.subreddits = new ArrayList<>();
} else {
this.subreddits = subreddits;
}
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new SubredditViewHolder(LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_selected_subreddit, parent, false));
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
if (holder instanceof SubredditViewHolder) {
((SubredditViewHolder) holder).subredditNameTextView.setText(subreddits.get(holder.getAdapterPosition()));
((SubredditViewHolder) holder).deleteButton.setOnClickListener(view -> {
subreddits.remove(holder.getAdapterPosition());
notifyItemRemoved(holder.getAdapterPosition());
});
}
}
@Override
public int getItemCount() {
return subreddits.size();
}
public void addSubreddits(ArrayList<String> newSubreddits) {
int oldSize = subreddits.size();
subreddits.addAll(newSubreddits);
notifyItemRangeInserted(oldSize, newSubreddits.size());
}
public ArrayList<String> getSubreddits() {
return subreddits;
}
class SubredditViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.subreddit_name_item_selected_subreddit)
TextView subredditNameTextView;
@BindView(R.id.delete_image_view_item_selected_subreddit)
ImageView deleteButton;
public SubredditViewHolder(@NonNull View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
subredditNameTextView.setTextColor(customThemeWrapper.getPrimaryIconColor());
deleteButton.setColorFilter(customThemeWrapper.getPrimaryIconColor(), android.graphics.PorterDuff.Mode.SRC_IN);
}
}
}

View File

@ -7,7 +7,6 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.CheckBox; import android.widget.CheckBox;
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;
@ -24,134 +23,61 @@ import butterknife.ButterKnife;
import jp.wasabeef.glide.transformations.RoundedCornersTransformation; import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeWrapper; import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeWrapper;
import ml.docilealligator.infinityforreddit.R; import ml.docilealligator.infinityforreddit.R;
import ml.docilealligator.infinityforreddit.SubredditDatabase.SubredditData;
import ml.docilealligator.infinityforreddit.SubredditWithSelection; import ml.docilealligator.infinityforreddit.SubredditWithSelection;
import ml.docilealligator.infinityforreddit.SubscribedSubredditDatabase.SubscribedSubredditData; import ml.docilealligator.infinityforreddit.SubscribedSubredditDatabase.SubscribedSubredditData;
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> {
private static final int SUBSCRIBED_SUBREDDIT_VIEW_TYPE = 0;
private static final int OTHER_SUBREDDIT_VIEW_TYPE = 1;
private ArrayList<SubredditWithSelection> subscribedSubreddits; private ArrayList<SubredditWithSelection> subscribedSubreddits;
private ArrayList<SubredditWithSelection> otherSubreddits;
private ArrayList<SubredditWithSelection> selectedSubscribedSubreddits;
private ArrayList<SubredditWithSelection> selectedOtherSubreddits;
private Context context;
private RequestManager glide; private RequestManager glide;
private int primaryTextColor; private int primaryTextColor;
private int colorAccent; private int colorAccent;
public SubredditMultiselectionRecyclerViewAdapter(Context context, CustomThemeWrapper customThemeWrapper, public SubredditMultiselectionRecyclerViewAdapter(Context context, CustomThemeWrapper customThemeWrapper) {
ArrayList<SubredditWithSelection> selectedSubscribedSubreddits,
ArrayList<SubredditWithSelection> otherSubreddits) {
this.context = context;
glide = Glide.with(context); glide = Glide.with(context);
subscribedSubreddits = new ArrayList<>();
this.otherSubreddits = new ArrayList<>();
this.selectedSubscribedSubreddits = new ArrayList<>();
selectedOtherSubreddits = new ArrayList<>();
if (selectedSubscribedSubreddits != null) {
this.selectedSubscribedSubreddits.addAll(selectedSubscribedSubreddits);
}
if (otherSubreddits != null) {
this.selectedOtherSubreddits.addAll(otherSubreddits);
this.otherSubreddits.addAll(otherSubreddits);
}
primaryTextColor = customThemeWrapper.getPrimaryTextColor(); primaryTextColor = customThemeWrapper.getPrimaryTextColor();
colorAccent = customThemeWrapper.getColorAccent(); colorAccent = customThemeWrapper.getColorAccent();
} }
@Override
public int getItemViewType(int position) {
if (otherSubreddits.size() > 0) {
if (position >= otherSubreddits.size()) {
return SUBSCRIBED_SUBREDDIT_VIEW_TYPE;
}
return OTHER_SUBREDDIT_VIEW_TYPE;
}
return SUBSCRIBED_SUBREDDIT_VIEW_TYPE;
}
@NonNull @NonNull
@Override @Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if (viewType == SUBSCRIBED_SUBREDDIT_VIEW_TYPE) { return new SubscribedSubredditViewHolder(LayoutInflater.from(parent.getContext())
return new SubscribedSubredditViewHolder(LayoutInflater.from(parent.getContext()) .inflate(R.layout.item_subscribed_subreddit_multi_selection, parent, false));
.inflate(R.layout.item_subscribed_subreddit_multi_selection, parent, false));
} else {
return new OtherSubredditViewHolder(LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_subscribed_subreddit_multi_selection, parent, false));
}
} }
@Override @Override
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) {
int offset = otherSubreddits.size(); ((SubscribedSubredditViewHolder) holder).nameTextView.setText(subscribedSubreddits.get(position).getName());
((SubscribedSubredditViewHolder) holder).nameTextView.setText(subscribedSubreddits.get(position - offset).getName()); glide.load(subscribedSubreddits.get(position).getIconUrl())
glide.load(subscribedSubreddits.get(position - offset).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)
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))) .apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))))
.into(((SubscribedSubredditViewHolder) holder).iconImageView); .into(((SubscribedSubredditViewHolder) holder).iconImageView);
if (subscribedSubreddits.get(position - offset).isSelected()) { if (subscribedSubreddits.get(position).isSelected()) {
((SubscribedSubredditViewHolder) holder).checkBox.setChecked(true); ((SubscribedSubredditViewHolder) holder).checkBox.setChecked(true);
} else { } else {
((SubscribedSubredditViewHolder) holder).checkBox.setChecked(false); ((SubscribedSubredditViewHolder) holder).checkBox.setChecked(false);
} }
((SubscribedSubredditViewHolder) holder).checkBox.setOnClickListener(view -> { ((SubscribedSubredditViewHolder) holder).checkBox.setOnClickListener(view -> {
if (subscribedSubreddits.get(position - offset).isSelected()) { if (subscribedSubreddits.get(position).isSelected()) {
((SubscribedSubredditViewHolder) holder).checkBox.setChecked(false); ((SubscribedSubredditViewHolder) holder).checkBox.setChecked(false);
subscribedSubreddits.get(position - offset).setSelected(false); subscribedSubreddits.get(position).setSelected(false);
selectedSubscribedSubreddits.remove(subscribedSubreddits.get(position - offset));
} else { } else {
((SubscribedSubredditViewHolder) holder).checkBox.setChecked(true); ((SubscribedSubredditViewHolder) holder).checkBox.setChecked(true);
subscribedSubreddits.get(position - offset).setSelected(true); subscribedSubreddits.get(position).setSelected(true);
insertIntoSelectedSubredditsArrayListAscend(selectedSubscribedSubreddits,
subscribedSubreddits.get(position - offset));
} }
}); });
((SubscribedSubredditViewHolder) holder).itemView.setOnClickListener(view -> ((SubscribedSubredditViewHolder) holder).itemView.setOnClickListener(view ->
((SubscribedSubredditViewHolder) holder).checkBox.performClick()); ((SubscribedSubredditViewHolder) holder).checkBox.performClick());
} else if (holder instanceof OtherSubredditViewHolder) {
SubredditWithSelection subreddit = otherSubreddits.get(position);
((OtherSubredditViewHolder) holder).nameTextView.setText(subreddit.getName());
glide.load(subreddit.getIconUrl())
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
.error(glide.load(R.drawable.subreddit_default_icon)
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0))))
.into(((OtherSubredditViewHolder) holder).iconImageView);
if (subreddit.isSelected()) {
((OtherSubredditViewHolder) holder).checkBox.setChecked(true);
} else {
((OtherSubredditViewHolder) holder).checkBox.setChecked(false);
}
((OtherSubredditViewHolder) holder).checkBox.setOnClickListener(view -> {
if (subreddit.isSelected()) {
((OtherSubredditViewHolder) holder).checkBox.setChecked(false);
subreddit.setSelected(false);
selectedOtherSubreddits.remove(subreddit);
} else {
((OtherSubredditViewHolder) holder).checkBox.setChecked(true);
subreddit.setSelected(true);
insertIntoSelectedSubredditsArrayListAscend(selectedOtherSubreddits, subreddit);
}
});
((OtherSubredditViewHolder) holder).itemView.setOnClickListener(view ->
((OtherSubredditViewHolder) holder).checkBox.performClick());
} }
} }
@Override @Override
public int getItemCount() { public int getItemCount() {
return subscribedSubreddits.size() + otherSubreddits.size(); return subscribedSubreddits == null ? 0 : subscribedSubreddits.size();
} }
@Override @Override
@ -159,95 +85,22 @@ public class SubredditMultiselectionRecyclerViewAdapter extends RecyclerView.Ada
super.onViewRecycled(holder); super.onViewRecycled(holder);
if (holder instanceof SubscribedSubredditViewHolder) { if (holder instanceof SubscribedSubredditViewHolder) {
glide.clear(((SubscribedSubredditViewHolder) holder).iconImageView); glide.clear(((SubscribedSubredditViewHolder) holder).iconImageView);
} else if (holder instanceof OtherSubredditViewHolder) {
glide.clear(((OtherSubredditViewHolder) holder).iconImageView);
} }
} }
public void setSubscribedSubreddits(List<SubscribedSubredditData> subscribedSubreddits) { public void setSubscribedSubreddits(List<SubscribedSubredditData> subscribedSubreddits) {
if (this.subscribedSubreddits.isEmpty()) { this.subscribedSubreddits = SubredditWithSelection.convertSubscribedSubreddits(subscribedSubreddits);
ArrayList<SubredditWithSelection> temp = notifyDataSetChanged();
SubredditWithSelection.convertSubscribedSubreddits(subscribedSubreddits);
this.subscribedSubreddits.addAll(temp);
checkAllSelectedSubreddits(0, 0);
notifyDataSetChanged();
}
} }
public void addOtherSubreddit(SubredditData subreddit) { public ArrayList<String> getAllSelectedSubreddits() {
SubredditWithSelection subredditWithSelection = ArrayList<String> selectedSubreddits = new ArrayList<>();
SubredditWithSelection.convertSubreddit(subreddit); for (SubredditWithSelection s : subscribedSubreddits) {
subredditWithSelection.setSelected(true); if (s.isSelected()) {
int i = subscribedSubreddits.indexOf(subredditWithSelection); selectedSubreddits.add(s.getName());
if (i > 0) {
subscribedSubreddits.get(i).setSelected(true);
insertIntoSelectedSubredditsArrayListAscend(selectedSubscribedSubreddits, subredditWithSelection);
Toast.makeText(context, context.getString(R.string.subreddit_selected, subreddit.getName()), Toast.LENGTH_SHORT).show();
return;
}
insertIntoOtherSubredditsArrayListAscend(subredditWithSelection);
insertIntoSelectedSubredditsArrayListAscend(selectedOtherSubreddits, subredditWithSelection);
}
public ArrayList<SubredditWithSelection> getAllSelectedSubscribedSubreddits() {
return new ArrayList<>(selectedSubscribedSubreddits);
}
public ArrayList<SubredditWithSelection> getAllSelectedOtherSubreddits() {
return new ArrayList<>(selectedOtherSubreddits);
}
public ArrayList<SubredditWithSelection> getAllOtherSubreddits() {
return new ArrayList<>(otherSubreddits);
}
private void insertIntoSelectedSubredditsArrayListAscend(ArrayList<SubredditWithSelection> subreddits,
SubredditWithSelection subreddit) {
for (int i = 0; i < subreddits.size(); i++) {
if (subreddits.get(i).compareName(subreddit) < 0) {
continue;
} }
if (subreddits.get(i).compareName(subreddit) == 0) {
return;
}
subreddits.add(i, subreddit);
return;
}
subreddits.add(subreddit);
}
private void insertIntoOtherSubredditsArrayListAscend(SubredditWithSelection subreddit) {
for (int i = 0; i < otherSubreddits.size(); i++) {
if (otherSubreddits.get(i).compareName(subreddit) < 0) {
continue;
}
if (otherSubreddits.get(i).compareName(subreddit) == 0) {
return;
}
otherSubreddits.add(i, subreddit);
notifyItemInserted(i);
return;
}
otherSubreddits.add(subreddit);
notifyItemInserted(otherSubreddits.size() - 1);
}
private void checkAllSelectedSubreddits(int i1, int i2) {
if (selectedSubscribedSubreddits.size() <= i1 || subscribedSubreddits.size() <= i2) {
return;
}
if (selectedSubscribedSubreddits.get(i1).compareName(subscribedSubreddits.get(i2)) == 0) {
subscribedSubreddits.get(i2).setSelected(true);
checkAllSelectedSubreddits(i1 + 1, i2 + 1);
} else if (selectedSubscribedSubreddits.get(i1).compareName(subscribedSubreddits.get(i2)) < 0) {
//Insert to other subreddits
insertIntoOtherSubredditsArrayListAscend(selectedSubscribedSubreddits.get(i1));
insertIntoSelectedSubredditsArrayListAscend(selectedOtherSubreddits, selectedSubscribedSubreddits.get(i1));
checkAllSelectedSubreddits(i1 + 1, i2);
} else {
checkAllSelectedSubreddits(i1, i2 + 1);
} }
return selectedSubreddits;
} }
class SubscribedSubredditViewHolder extends RecyclerView.ViewHolder { class SubscribedSubredditViewHolder extends RecyclerView.ViewHolder {
@ -267,22 +120,4 @@ public class SubredditMultiselectionRecyclerViewAdapter extends RecyclerView.Ada
checkBox.setButtonTintList(ColorStateList.valueOf(colorAccent)); checkBox.setButtonTintList(ColorStateList.valueOf(colorAccent));
} }
} }
class OtherSubredditViewHolder extends RecyclerView.ViewHolder {
View itemView;
@BindView(R.id.icon_gif_image_view_item_subscribed_subreddit_multiselection)
GifImageView iconImageView;
@BindView(R.id.name_text_view_item_subscribed_subreddit_multiselection)
TextView nameTextView;
@BindView(R.id.checkbox_item_subscribed_subreddit_multiselection)
CheckBox checkBox;
OtherSubredditViewHolder(@NonNull View itemView) {
super(itemView);
this.itemView = itemView;
ButterKnife.bind(this, itemView);
nameTextView.setTextColor(primaryTextColor);
checkBox.setButtonTintList(ColorStateList.valueOf(colorAccent));
}
}
} }

View File

@ -10,6 +10,7 @@ import ml.docilealligator.infinityforreddit.Activity.CreateMultiRedditActivity;
import ml.docilealligator.infinityforreddit.Activity.CustomThemeListingActivity; import ml.docilealligator.infinityforreddit.Activity.CustomThemeListingActivity;
import ml.docilealligator.infinityforreddit.Activity.CustomizeThemeActivity; import ml.docilealligator.infinityforreddit.Activity.CustomizeThemeActivity;
import ml.docilealligator.infinityforreddit.Activity.EditCommentActivity; import ml.docilealligator.infinityforreddit.Activity.EditCommentActivity;
import ml.docilealligator.infinityforreddit.Activity.EditMultiRedditActivity;
import ml.docilealligator.infinityforreddit.Activity.EditPostActivity; import ml.docilealligator.infinityforreddit.Activity.EditPostActivity;
import ml.docilealligator.infinityforreddit.Activity.FilteredThingActivity; import ml.docilealligator.infinityforreddit.Activity.FilteredThingActivity;
import ml.docilealligator.infinityforreddit.Activity.LinkResolverActivity; import ml.docilealligator.infinityforreddit.Activity.LinkResolverActivity;
@ -24,6 +25,7 @@ import ml.docilealligator.infinityforreddit.Activity.RulesActivity;
import ml.docilealligator.infinityforreddit.Activity.SearchActivity; import ml.docilealligator.infinityforreddit.Activity.SearchActivity;
import ml.docilealligator.infinityforreddit.Activity.SearchResultActivity; import ml.docilealligator.infinityforreddit.Activity.SearchResultActivity;
import ml.docilealligator.infinityforreddit.Activity.SearchSubredditsResultActivity; import ml.docilealligator.infinityforreddit.Activity.SearchSubredditsResultActivity;
import ml.docilealligator.infinityforreddit.Activity.SelectedSubredditsActivity;
import ml.docilealligator.infinityforreddit.Activity.SettingsActivity; import ml.docilealligator.infinityforreddit.Activity.SettingsActivity;
import ml.docilealligator.infinityforreddit.Activity.SubredditMultiselectionActivity; import ml.docilealligator.infinityforreddit.Activity.SubredditMultiselectionActivity;
import ml.docilealligator.infinityforreddit.Activity.SubredditSelectionActivity; import ml.docilealligator.infinityforreddit.Activity.SubredditSelectionActivity;
@ -155,4 +157,8 @@ public interface AppComponent {
void inject(AdvancedPreferenceFragment advancedPreferenceFragment); void inject(AdvancedPreferenceFragment advancedPreferenceFragment);
void inject(ThemePreviewActivity themePreviewActivity); void inject(ThemePreviewActivity themePreviewActivity);
void inject(EditMultiRedditActivity editMultiRedditActivity);
void inject(SelectedSubredditsActivity selectedSubredditsActivity);
} }

View File

@ -0,0 +1,43 @@
package ml.docilealligator.infinityforreddit.MultiReddit;
import androidx.annotation.NonNull;
import java.util.HashMap;
import java.util.Map;
import ml.docilealligator.infinityforreddit.RedditAPI;
import ml.docilealligator.infinityforreddit.Utils.RedditUtils;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
public class EditMultiReddit {
public interface EditMultiRedditListener {
void success();
void failed();
}
public static void editMultiReddit(Retrofit oauthRetrofit, String accessToken, String multipath, String model,
EditMultiRedditListener editMultiRedditListener) {
Map<String, String> params = new HashMap<>();
params.put(RedditUtils.MULTIPATH_KEY, multipath);
params.put(RedditUtils.MODEL_KEY, model);
oauthRetrofit.create(RedditAPI.class).updateMultiReddit(RedditUtils.getOAuthHeader(accessToken),
params).enqueue(new Callback<String>() {
@Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
if (response.isSuccessful()) {
editMultiRedditListener.success();
} else {
editMultiRedditListener.failed();
}
}
@Override
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
editMultiRedditListener.failed();
}
});
}
}

View File

@ -0,0 +1,101 @@
package ml.docilealligator.infinityforreddit.MultiReddit;
import android.os.AsyncTask;
import androidx.annotation.NonNull;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import ml.docilealligator.infinityforreddit.RedditAPI;
import ml.docilealligator.infinityforreddit.Utils.JSONUtils;
import ml.docilealligator.infinityforreddit.Utils.RedditUtils;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
public class FetchMultiRedditInfo {
public interface FetchMultiRedditInfoListener {
void success(MultiReddit multiReddit);
void failed();
}
public static void fetchMultiRedditInfo(Retrofit retrofit, String accessToken, String multipath,
FetchMultiRedditInfoListener fetchMultiRedditInfoListener) {
retrofit.create(RedditAPI.class).getMultiRedditInfo(RedditUtils.getOAuthHeader(accessToken), multipath).enqueue(new Callback<String>() {
@Override
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
if (response.isSuccessful()) {
new ParseMultiRedditInfoAsyncTask(response.body(), fetchMultiRedditInfoListener).execute();
} else {
fetchMultiRedditInfoListener.failed();
}
}
@Override
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
fetchMultiRedditInfoListener.failed();
}
});
}
private static class ParseMultiRedditInfoAsyncTask extends AsyncTask<Void, Void, Void> {
private String response;
private FetchMultiRedditInfoListener fetchMultiRedditInfoListener;
private MultiReddit multiReddit;
private boolean parseFailed = false;
public ParseMultiRedditInfoAsyncTask(String response, FetchMultiRedditInfoListener fetchMultiRedditInfoListener) {
this.response = response;
this.fetchMultiRedditInfoListener = fetchMultiRedditInfoListener;
}
@Override
protected Void doInBackground(Void... voids) {
try {
JSONObject object = new JSONObject(response).getJSONObject(JSONUtils.DATA_KEY);
String path = object.getString(JSONUtils.PATH_KEY);
String displayName = object.getString(JSONUtils.DISPLAY_NAME_KEY);
String name = object.getString(JSONUtils.NAME_KEY);
String description = object.getString(JSONUtils.DESCRIPTION_MD_KEY);
String copiedFrom = object.getString(JSONUtils.COPIED_FROM_KEY);
String iconUrl = object.getString(JSONUtils.ICON_URL_KEY);
String visibility = object.getString(JSONUtils.VISIBILITY_KEY);
String owner = object.getString(JSONUtils.OWNER_KEY);
int nSubscribers = object.getInt(JSONUtils.NUM_SUBSCRIBERS_KEY);
long createdUTC = object.getLong(JSONUtils.CREATED_UTC_KEY);
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<>();
JSONArray subredditsArray = object.getJSONArray(JSONUtils.SUBREDDITS_KEY);
for (int i = 0; i < subredditsArray.length(); i++) {
subreddits.add(subredditsArray.getJSONObject(i).getString(JSONUtils.NAME_KEY));
}
multiReddit = new MultiReddit(path, displayName, name, description, copiedFrom, iconUrl,
visibility, owner, nSubscribers, createdUTC, over18, isSubscriber, isFavorite,
subreddits);
} catch (JSONException e) {
parseFailed = true;
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
if (parseFailed) {
fetchMultiRedditInfoListener.failed();
} else {
fetchMultiRedditInfoListener.success(multiReddit);
}
}
}
}

View File

@ -11,13 +11,13 @@ import retrofit2.Callback;
import retrofit2.Response; import retrofit2.Response;
import retrofit2.Retrofit; import retrofit2.Retrofit;
public class FetchMultiReddit { public class FetchMyMultiReddits {
public interface FetchMultiRedditListener { public interface FetchMyMultiRedditsListener {
void success(ArrayList<MultiReddit> multiReddits); void success(ArrayList<MultiReddit> multiReddits);
void failed(); void failed();
} }
public static void fetchMyMultiReddits(Retrofit oauthRetrofit, String accessToken, FetchMultiRedditListener fetchMultiRedditListener) { public static void fetchMyMultiReddits(Retrofit oauthRetrofit, String accessToken, FetchMyMultiRedditsListener fetchMyMultiRedditsListener) {
oauthRetrofit.create(RedditAPI.class) oauthRetrofit.create(RedditAPI.class)
.getMyMultiReddits(RedditUtils.getOAuthHeader(accessToken)).enqueue(new Callback<String>() { .getMyMultiReddits(RedditUtils.getOAuthHeader(accessToken)).enqueue(new Callback<String>() {
@Override @Override
@ -26,22 +26,22 @@ public class FetchMultiReddit {
ParseMultiReddit.parseMultiRedditsList(response.body(), new ParseMultiReddit.ParseMultiRedditsListListener() { ParseMultiReddit.parseMultiRedditsList(response.body(), new ParseMultiReddit.ParseMultiRedditsListListener() {
@Override @Override
public void success(ArrayList<MultiReddit> multiReddits) { public void success(ArrayList<MultiReddit> multiReddits) {
fetchMultiRedditListener.success(multiReddits); fetchMyMultiRedditsListener.success(multiReddits);
} }
@Override @Override
public void failed() { public void failed() {
fetchMultiRedditListener.failed(); fetchMyMultiRedditsListener.failed();
} }
}); });
} else { } else {
fetchMultiRedditListener.failed(); fetchMyMultiRedditsListener.failed();
} }
} }
@Override @Override
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) { public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
fetchMultiRedditListener.failed(); fetchMyMultiRedditsListener.failed();
} }
}); });
} }

View File

@ -4,8 +4,6 @@ import com.google.gson.Gson;
import java.util.ArrayList; import java.util.ArrayList;
import ml.docilealligator.infinityforreddit.SubredditWithSelection;
public class MultiRedditJSONModel { public class MultiRedditJSONModel {
private String display_name; private String display_name;
private String description_md; private String description_md;
@ -15,7 +13,7 @@ public class MultiRedditJSONModel {
public MultiRedditJSONModel() {} public MultiRedditJSONModel() {}
public MultiRedditJSONModel(String display_name, String description_md, boolean isPrivate, public MultiRedditJSONModel(String display_name, String description_md, boolean isPrivate,
ArrayList<SubredditWithSelection> subreddits) { ArrayList<String> subreddits) {
this.display_name = display_name; this.display_name = display_name;
this.description_md = description_md; this.description_md = description_md;
if (isPrivate) { if (isPrivate) {
@ -27,7 +25,7 @@ public class MultiRedditJSONModel {
if (subreddits != null) { if (subreddits != null) {
this.subreddits = new SubredditInMultiReddit[subreddits.size()]; this.subreddits = new SubredditInMultiReddit[subreddits.size()];
for (int i = 0; i < subreddits.size(); i++) { for (int i = 0; i < subreddits.size(); i++) {
SubredditInMultiReddit subredditInMultiReddit = new SubredditInMultiReddit(subreddits.get(i).getName()); SubredditInMultiReddit subredditInMultiReddit = new SubredditInMultiReddit(subreddits.get(i));
this.subreddits[i] = subredditInMultiReddit; this.subreddits[i] = subredditInMultiReddit;
} }
} }

View File

@ -32,9 +32,9 @@ public class ParseMultiReddit {
} }
private static MultiReddit parseMultiReddit(JSONObject singleMultiRedditJSON) throws JSONException { private static MultiReddit parseMultiReddit(JSONObject singleMultiRedditJSON) throws JSONException {
String displayName = singleMultiRedditJSON.getString(JSONUtils.DISPLAY_NAME); String displayName = singleMultiRedditJSON.getString(JSONUtils.DISPLAY_NAME_KEY);
String name = singleMultiRedditJSON.getString(JSONUtils.NAME_KEY); String name = singleMultiRedditJSON.getString(JSONUtils.NAME_KEY);
String description = singleMultiRedditJSON.getString(JSONUtils.DESCRIPTION_HTML_KEY); String description = singleMultiRedditJSON.getString(JSONUtils.DESCRIPTION_MD_KEY);
int nSubscribers = singleMultiRedditJSON.getInt(JSONUtils.NUM_SUBSCRIBERS_KEY); int nSubscribers = singleMultiRedditJSON.getInt(JSONUtils.NUM_SUBSCRIBERS_KEY);
String copiedFrom = singleMultiRedditJSON.getString(JSONUtils.COPIED_FROM_KEY); String copiedFrom = singleMultiRedditJSON.getString(JSONUtils.COPIED_FROM_KEY);
String iconUrl = singleMultiRedditJSON.getString(JSONUtils.ICON_URL_KEY); String iconUrl = singleMultiRedditJSON.getString(JSONUtils.ICON_URL_KEY);

View File

@ -22,7 +22,7 @@ class ParseSubredditData {
private static SubredditData parseSubredditData(JSONObject subredditDataJsonObject) throws JSONException { private static SubredditData parseSubredditData(JSONObject subredditDataJsonObject) throws JSONException {
String id = subredditDataJsonObject.getString(JSONUtils.NAME_KEY); String id = subredditDataJsonObject.getString(JSONUtils.NAME_KEY);
String subredditFullName = subredditDataJsonObject.getString(JSONUtils.DISPLAY_NAME); String subredditFullName = subredditDataJsonObject.getString(JSONUtils.DISPLAY_NAME_KEY);
String description = subredditDataJsonObject.getString(JSONUtils.PUBLIC_DESCRIPTION_KEY).trim(); String description = subredditDataJsonObject.getString(JSONUtils.PUBLIC_DESCRIPTION_KEY).trim();
String sidebarDescription = subredditDataJsonObject.getString(JSONUtils.DESCRIPTION_KEY).trim(); String sidebarDescription = subredditDataJsonObject.getString(JSONUtils.DESCRIPTION_KEY).trim();

View File

@ -72,7 +72,7 @@ class ParseSubscribedThing {
JSONArray children = jsonResponse.getJSONObject(JSONUtils.DATA_KEY).getJSONArray(JSONUtils.CHILDREN_KEY); JSONArray children = jsonResponse.getJSONObject(JSONUtils.DATA_KEY).getJSONArray(JSONUtils.CHILDREN_KEY);
for (int i = 0; i < children.length(); i++) { for (int i = 0; i < children.length(); i++) {
JSONObject data = children.getJSONObject(i).getJSONObject(JSONUtils.DATA_KEY); JSONObject data = children.getJSONObject(i).getJSONObject(JSONUtils.DATA_KEY);
String name = data.getString(JSONUtils.DISPLAY_NAME); String name = data.getString(JSONUtils.DISPLAY_NAME_KEY);
String bannerImageUrl = data.getString(JSONUtils.BANNER_BACKGROUND_IMAGE_KEY); String bannerImageUrl = data.getString(JSONUtils.BANNER_BACKGROUND_IMAGE_KEY);
if (bannerImageUrl.equals("") || bannerImageUrl.equals("null")) { if (bannerImageUrl.equals("") || bannerImageUrl.equals("null")) {
bannerImageUrl = data.getString(JSONUtils.BANNER_IMG_KEY); bannerImageUrl = data.getString(JSONUtils.BANNER_IMG_KEY);
@ -95,7 +95,7 @@ class ParseSubscribedThing {
//It's a user //It's a user
newSubscribedUserData.add(new SubscribedUserData(name.substring(2), iconUrl, accountName, isFavorite)); newSubscribedUserData.add(new SubscribedUserData(name.substring(2), iconUrl, accountName, isFavorite));
} else { } else {
String subredditFullName = data.getString(JSONUtils.DISPLAY_NAME); String subredditFullName = data.getString(JSONUtils.DISPLAY_NAME_KEY);
String description = data.getString(JSONUtils.PUBLIC_DESCRIPTION_KEY).trim(); String description = data.getString(JSONUtils.PUBLIC_DESCRIPTION_KEY).trim();
String sidebarDescription = data.getString(JSONUtils.DESCRIPTION_KEY); String sidebarDescription = data.getString(JSONUtils.DESCRIPTION_KEY);
int nSubscribers = data.getInt(JSONUtils.SUBSCRIBERS_KEY); int nSubscribers = data.getInt(JSONUtils.SUBSCRIBERS_KEY);

View File

@ -12,6 +12,7 @@ import retrofit2.http.GET;
import retrofit2.http.HeaderMap; import retrofit2.http.HeaderMap;
import retrofit2.http.Multipart; import retrofit2.http.Multipart;
import retrofit2.http.POST; import retrofit2.http.POST;
import retrofit2.http.PUT;
import retrofit2.http.Part; import retrofit2.http.Part;
import retrofit2.http.PartMap; import retrofit2.http.PartMap;
import retrofit2.http.Path; import retrofit2.http.Path;
@ -294,6 +295,13 @@ public interface RedditAPI {
@POST("/api/multi/multipath") @POST("/api/multi/multipath")
Call<String> createMultiReddit(@HeaderMap Map<String, String> headers, @FieldMap Map<String, String> params); Call<String> createMultiReddit(@HeaderMap Map<String, String> headers, @FieldMap Map<String, String> params);
@FormUrlEncoded
@PUT("/api/multi/multipath")
Call<String> updateMultiReddit(@HeaderMap Map<String, String> headers, @FieldMap Map<String, String> params);
@DELETE("/api/multi/multipath") @DELETE("/api/multi/multipath")
Call<String> deleteMultiReddit(@HeaderMap Map<String, String> headers, @Query("multipath") String multipath); Call<String> deleteMultiReddit(@HeaderMap Map<String, String> headers, @Query("multipath") String multipath);
@GET("/api/multi/multipath/")
Call<String> getMultiRedditInfo(@HeaderMap Map<String, String> headers, @Query("multipath") String multipath);
} }

View File

@ -58,7 +58,7 @@ public class JSONUtils {
public static final String COMMUNITY_ICON_KEY = "community_icon"; public static final String COMMUNITY_ICON_KEY = "community_icon";
public static final String LINK_KARMA_KEY = "link_karma"; public static final String LINK_KARMA_KEY = "link_karma";
public static final String COMMENT_KARMA_KEY = "comment_karma"; public static final String COMMENT_KARMA_KEY = "comment_karma";
public static final String DISPLAY_NAME = "display_name"; public static final String DISPLAY_NAME_KEY = "display_name";
public static final String SUBREDDIT_TYPE_KEY = "subreddit_type"; public static final String SUBREDDIT_TYPE_KEY = "subreddit_type";
public static final String SUBREDDIT_TYPE_VALUE_USER = "user"; public static final String SUBREDDIT_TYPE_VALUE_USER = "user";
public static final String SUBSCRIBERS_KEY = "subscribers"; public static final String SUBSCRIBERS_KEY = "subscribers";
@ -80,6 +80,7 @@ public class JSONUtils {
public static final String SHORT_NAME_KEY = "short_name"; public static final String SHORT_NAME_KEY = "short_name";
public static final String DESCRIPTION_KEY = "description"; public static final String DESCRIPTION_KEY = "description";
public static final String DESCRIPTION_HTML_KEY = "description_html"; public static final String DESCRIPTION_HTML_KEY = "description_html";
public static final String DESCRIPTION_MD_KEY = "description_md";
public static final String ARCHIVED_KEY = "archived"; public static final String ARCHIVED_KEY = "archived";
public static final String LOCKEC_KEY = "locked"; public static final String LOCKEC_KEY = "locked";
public static final String SAVED_KEY = "saved"; public static final String SAVED_KEY = "saved";

View File

@ -108,7 +108,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="16dp" android:padding="16dp"
android:text="@string/select_subreddit" android:text="@string/select_subreddits"
android:textSize="?attr/font_default" android:textSize="?attr/font_default"
android:textColor="?attr/primaryTextColor" android:textColor="?attr/primaryTextColor"
android:clickable="true" android:clickable="true"
@ -119,5 +119,4 @@
</androidx.core.widget.NestedScrollView> </androidx.core.widget.NestedScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout> </androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@ -0,0 +1,130 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/coordinator_layout_edit_multi_reddit_activity"
tools:context=".Activity.CreateMultiRedditActivity">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appbar_layout_edit_multi_reddit_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/toolbarAndTabBackgroundColor"
android:theme="@style/AppTheme.AppBarOverlay">
<com.google.android.material.appbar.CollapsingToolbarLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_scrollFlags="scroll|enterAlways"
app:titleEnabled="false"
app:toolbarId="@+id/toolbar_edit_multi_reddit_activity">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar_edit_multi_reddit_activity"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:popupTheme="@style/AppTheme.PopupOverlay"
app:navigationIcon="?attr/homeAsUpIndicator" />
</com.google.android.material.appbar.CollapsingToolbarLayout>
</com.google.android.material.appbar.AppBarLayout>
<ProgressBar
android:id="@+id/progress_bar_edit_multi_reddit_activity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" />
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout
android:id="@+id/linear_layout_edit_multi_reddit_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone">
<EditText
android:id="@+id/multi_reddit_name_edit_text_edit_multi_reddit_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:hint="@string/multi_reddit_name_hint"
android:inputType="textMultiLine"
android:textSize="?attr/font_default"
android:background="#00000000"
android:textColor="?attr/primaryTextColor"
android:maxLength="50" />
<View
android:id="@+id/divider_1_edit_multi_reddit_activity"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="?attr/dividerColor" />
<EditText
android:id="@+id/description_edit_text_edit_multi_reddit_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:hint="@string/multi_reddit_description_hint"
android:inputType="textMultiLine"
android:textSize="?attr/font_default"
android:background="#00000000"
android:textColor="?attr/primaryTextColor" />
<View
android:id="@+id/divider_2_edit_multi_reddit_activity"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="?attr/dividerColor" />
<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
android:id="@+id/select_subreddit_text_view_edit_multi_reddit_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:text="@string/select_subreddits"
android:textSize="?attr/font_default"
android:textColor="?attr/primaryTextColor"
android:clickable="true"
android:focusable="true"
android:background="?attr/selectableItemBackground" />
</LinearLayout>
</androidx.core.widget.NestedScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@ -0,0 +1,49 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/backgroundColor"
android:id="@+id/coordinator_layout_selected_subreddits_activity"
tools:context=".Activity.AccountPostsActivity">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appbar_layout_selected_subreddits_activity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/toolbarAndTabBackgroundColor"
android:theme="@style/AppTheme.AppBarOverlay">
<com.google.android.material.appbar.CollapsingToolbarLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_scrollFlags="scroll|enterAlways"
app:titleEnabled="false"
app:toolbarId="@+id/toolbar_selected_subreddits_activity">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar_selected_subreddits_activity"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:popupTheme="@style/AppTheme.PopupOverlay"
app:navigationIcon="?attr/homeAsUpIndicator" />
</com.google.android.material.appbar.CollapsingToolbarLayout>
</com.google.android.material.appbar.AppBarLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view_selected_subreddits_activity"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab_selected_subreddits_activity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/fab_margin"
android:layout_gravity="bottom|end" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="16dp"
android:paddingBottom="16dp"
android:paddingStart="72dp"
android:paddingEnd="16dp">
<TextView
android:id="@+id/subreddit_name_item_selected_subreddit"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="center_vertical"
android:layout_marginEnd="16dp" />
<ImageView
android:id="@+id/delete_image_view_item_selected_subreddit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:src="@drawable/ic_delete_24dp" />
</LinearLayout>

View File

@ -2,9 +2,9 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android" <menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"> xmlns:app="http://schemas.android.com/apk/res-auto">
<item <item
android:id="@+id/action_create_create_multi_reddit_activity" android:id="@+id/action_save_create_multi_reddit_activity"
android:orderInCategory="1" android:orderInCategory="1"
android:title="@string/action_send" android:title="@string/action_save"
android:icon="@drawable/ic_add_day_night_24dp" android:icon="@drawable/ic_add_day_night_24dp"
app:showAsAction="ifRoom" /> app:showAsAction="ifRoom" />
</menu> </menu>

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_save_edit_multi_reddit_activity"
android:orderInCategory="1"
android:title="@string/action_save"
android:icon="@drawable/ic_check_circle_toolbar_24dp"
app:showAsAction="ifRoom" />
</menu>

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_save_selected_subreddits_activity"
android:orderInCategory="1"
android:title="@string/action_save"
android:icon="@drawable/ic_check_circle_toolbar_24dp"
app:showAsAction="ifRoom" />
</menu>

View File

@ -35,8 +35,14 @@
app:showAsAction="never" /> app:showAsAction="never" />
<item <item
android:id="@+id/action_delte_view_multi_reddit_detail_activity" android:id="@+id/action_edit_view_multi_reddit_detail_activity"
android:orderInCategory="6" android:orderInCategory="6"
android:title="@string/action_edit_multi_reddit"
app:showAsAction="never" />
<item
android:id="@+id/action_delete_view_multi_reddit_detail_activity"
android:orderInCategory="7"
android:title="@string/action_delete_multi_reddit" android:title="@string/action_delete_multi_reddit"
app:showAsAction="never" /> app:showAsAction="never" />
</menu> </menu>

View File

@ -23,6 +23,8 @@
<string name="customize_theme_activity_label">Customize Theme</string> <string name="customize_theme_activity_label">Customize Theme</string>
<string name="customize_theme_activity_create_theme_label">Create Theme</string> <string name="customize_theme_activity_create_theme_label">Create Theme</string>
<string name="theme_preview_activity_label">Theme Preview</string> <string name="theme_preview_activity_label">Theme Preview</string>
<string name="edit_multi_reddit_activity_label">Edit Multireddit</string>
<string name="selected_subeddits_activity_label">Selected Subreddits</string>
<string name="navigation_drawer_open">Open navigation drawer</string> <string name="navigation_drawer_open">Open navigation drawer</string>
<string name="navigation_drawer_close">Close navigation drawer</string> <string name="navigation_drawer_close">Close navigation drawer</string>
@ -51,6 +53,7 @@
<string name="action_change_post_layout">Change Post Layout</string> <string name="action_change_post_layout">Change Post Layout</string>
<string name="action_view_side_bar">View Sidebar</string> <string name="action_view_side_bar">View Sidebar</string>
<string name="action_save">Save</string> <string name="action_save">Save</string>
<string name="action_edit_multi_reddit">Edit MultiReddit</string>
<string name="action_delete_multi_reddit">Delete Multireddit</string> <string name="action_delete_multi_reddit">Delete Multireddit</string>
<string name="action_share">Share</string> <string name="action_share">Share</string>
@ -103,6 +106,7 @@
<string name="cannot_fetch_subreddit_info">Cannot fetch subreddit info</string> <string name="cannot_fetch_subreddit_info">Cannot fetch subreddit info</string>
<string name="cannot_fetch_user_info">Cannot fetch user info</string> <string name="cannot_fetch_user_info">Cannot fetch user info</string>
<string name="cannot_fetch_sidebar">Cannot fetch sidebar</string> <string name="cannot_fetch_sidebar">Cannot fetch sidebar</string>
<string name="cannot_fetch_multireddit">Cannot fetch multireddit info</string>
<string name="gilded_count">x%1$d</string> <string name="gilded_count">x%1$d</string>
<string name="title_activity_view_user_detail">ViewUserDetailActivity</string> <string name="title_activity_view_user_detail">ViewUserDetailActivity</string>
@ -308,6 +312,7 @@
<string name="settings_open_link_in_app_title">Open Link In App</string> <string name="settings_open_link_in_app_title">Open Link In App</string>
<string name="settings_immersive_interface_title">Immersive Interface</string> <string name="settings_immersive_interface_title">Immersive Interface</string>
<string name="settings_enable_bottom_app_bar_title">Enable Bottom Navigation</string> <string name="settings_enable_bottom_app_bar_title">Enable Bottom Navigation</string>
<string name="settings_enable_bottom_app_bar_summary">Has No Effect in Anonymous Mode</string>
<string name="settings_vote_buttons_on_the_right_title">Vote Buttons on the Right</string> <string name="settings_vote_buttons_on_the_right_title">Vote Buttons on the Right</string>
<string name="settings_volume_keys_navigate_comments_title">Use Volume Keys to Navigate Comments in Posts</string> <string name="settings_volume_keys_navigate_comments_title">Use Volume Keys to Navigate Comments in Posts</string>
<string name="settings_volume_keys_navigate_posts_title">Use Volume Keys to Navigate Posts</string> <string name="settings_volume_keys_navigate_posts_title">Use Volume Keys to Navigate Posts</string>
@ -461,10 +466,11 @@
<string name="multi_reddit_name_hint">Name (Max 50 Characters)</string> <string name="multi_reddit_name_hint">Name (Max 50 Characters)</string>
<string name="multi_reddit_description_hint">Description</string> <string name="multi_reddit_description_hint">Description</string>
<string name="private_multi_reddit">Private</string> <string name="private_multi_reddit">Private</string>
<string name="select_subreddit">Select Subreddit</string> <string name="select_subreddits">Select Subreddits</string>
<string name="no_multi_reddit_name">Where is the name?</string> <string name="no_multi_reddit_name">Where is the name?</string>
<string name="create_multi_reddit_failed">Cannot create this multireddit</string> <string name="create_multi_reddit_failed">Cannot create this multireddit</string>
<string name="duplicate_multi_reddit">This multireddit already exists</string> <string name="duplicate_multi_reddit">This multireddit already exists</string>
<string name="edit_multi_reddit_failed">Cannot edit this multireddit</string>
<string name="logged_out">You are logged out</string> <string name="logged_out">You are logged out</string>
<string name="subreddit_selected">%1$s selected</string> <string name="subreddit_selected">%1$s selected</string>
<string name="delete_multi_reddit_success">Delete successfully</string> <string name="delete_multi_reddit_success">Delete successfully</string>

View File

@ -16,7 +16,8 @@
<SwitchPreference <SwitchPreference
app:defaultValue="false" app:defaultValue="false"
app:key="bottom_app_bar" app:key="bottom_app_bar"
app:title="@string/settings_enable_bottom_app_bar_title" /> app:title="@string/settings_enable_bottom_app_bar_title"
app:summary="@string/settings_enable_bottom_app_bar_summary" />
<SwitchPreference <SwitchPreference
app:defaultValue="false" app:defaultValue="false"

View File

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:value="@string/app_label"
android:hint="@string/search_hint"
android:voiceSearchMode="showVoiceSearchButton|launchRecognizer" >
</searchable>

View File

@ -31,6 +31,6 @@ task clean(type: Delete) {
} }
ext { ext {
roomVersion = '2.2.4' roomVersion = '2.2.5'
archLifecycleVersion = '2.2.0' archLifecycleVersion = '2.2.0'
} }