mirror of
https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
synced 2024-11-07 03:07:26 +01:00
Multi-selection in user search result for CustomizePostFilterActivity.
This commit is contained in:
parent
b86e5284a2
commit
e0106e23e5
@ -247,6 +247,7 @@ public class CustomizePostFilterActivity extends BaseActivity {
|
|||||||
addUsersImageView.setOnClickListener(view -> {
|
addUsersImageView.setOnClickListener(view -> {
|
||||||
Intent intent = new Intent(this, SearchActivity.class);
|
Intent intent = new Intent(this, SearchActivity.class);
|
||||||
intent.putExtra(SearchActivity.EXTRA_SEARCH_ONLY_USERS, true);
|
intent.putExtra(SearchActivity.EXTRA_SEARCH_ONLY_USERS, true);
|
||||||
|
intent.putExtra(SearchActivity.EXTRA_IS_MULTI_SELECTION, true);
|
||||||
startActivityForResult(intent, ADD_USERS_REQUEST_CODE);
|
startActivityForResult(intent, ADD_USERS_REQUEST_CODE);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -423,28 +424,35 @@ public class CustomizePostFilterActivity extends BaseActivity {
|
|||||||
super.onActivityResult(requestCode, resultCode, data);
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
if (resultCode == RESULT_OK && data != null) {
|
if (resultCode == RESULT_OK && data != null) {
|
||||||
if (requestCode == ADD_SUBREDDITS_REQUEST_CODE) {
|
if (requestCode == ADD_SUBREDDITS_REQUEST_CODE) {
|
||||||
ArrayList<String> subreddits = data.getStringArrayListExtra(SubredditMultiselectionActivity.EXTRA_RETURN_SELECTED_SUBREDDITS);
|
ArrayList<String> subredditNames = data.getStringArrayListExtra(SubredditMultiselectionActivity.EXTRA_RETURN_SELECTED_SUBREDDITS);
|
||||||
String currentSubreddits = excludesSubredditsTextInputEditText.getText().toString().trim();
|
String currentSubreddits = excludesSubredditsTextInputEditText.getText().toString().trim();
|
||||||
if (!currentSubreddits.isEmpty() && currentSubreddits.charAt(currentSubreddits.length() - 1) != ',') {
|
if (subredditNames != null && !currentSubreddits.isEmpty() && currentSubreddits.charAt(currentSubreddits.length() - 1) != ',') {
|
||||||
String newString = currentSubreddits + ",";
|
String newString = currentSubreddits + ",";
|
||||||
excludesSubredditsTextInputEditText.setText(newString);
|
excludesSubredditsTextInputEditText.setText(newString);
|
||||||
}
|
}
|
||||||
if (subreddits != null) {
|
if (subredditNames != null) {
|
||||||
StringBuilder stringBuilder = new StringBuilder();
|
StringBuilder stringBuilder = new StringBuilder();
|
||||||
for (String s : subreddits) {
|
for (String s : subredditNames) {
|
||||||
stringBuilder.append(s).append(",");
|
stringBuilder.append(s).append(",");
|
||||||
}
|
}
|
||||||
stringBuilder.deleteCharAt(stringBuilder.length() - 1);
|
stringBuilder.deleteCharAt(stringBuilder.length() - 1);
|
||||||
excludesSubredditsTextInputEditText.append(stringBuilder.toString());
|
excludesSubredditsTextInputEditText.append(stringBuilder.toString());
|
||||||
}
|
}
|
||||||
} else if (requestCode == ADD_USERS_REQUEST_CODE) {
|
} else if (requestCode == ADD_USERS_REQUEST_CODE) {
|
||||||
String username = data.getStringExtra(SearchActivity.EXTRA_RETURN_USER_NAME);
|
ArrayList<String> usernames = data.getStringArrayListExtra(SearchActivity.RETURN_EXTRA_SELECTED_USERNAMES);
|
||||||
String currentUsers = excludesSubredditsTextInputEditText.getText().toString().trim();
|
String currentUsers = excludesUsersTextInputEditText.getText().toString().trim();
|
||||||
if (!currentUsers.isEmpty() && currentUsers.charAt(currentUsers.length() - 1) != ',') {
|
if (usernames != null && !currentUsers.isEmpty() && currentUsers.charAt(currentUsers.length() - 1) != ',') {
|
||||||
String newString = currentUsers + ",";
|
String newString = currentUsers + ",";
|
||||||
excludesSubredditsTextInputEditText.setText(newString);
|
excludesUsersTextInputEditText.setText(newString);
|
||||||
|
}
|
||||||
|
if (usernames != null) {
|
||||||
|
StringBuilder stringBuilder = new StringBuilder();
|
||||||
|
for (String s : usernames) {
|
||||||
|
stringBuilder.append(s).append(",");
|
||||||
|
}
|
||||||
|
stringBuilder.deleteCharAt(stringBuilder.length() - 1);
|
||||||
|
excludesUsersTextInputEditText.append(stringBuilder.toString());
|
||||||
}
|
}
|
||||||
excludesUsersTextInputEditText.append(username);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -54,6 +54,7 @@ public class SearchActivity extends BaseActivity {
|
|||||||
static final String EXTRA_RETURN_SUBREDDIT_NAME = "ERSN";
|
static final String EXTRA_RETURN_SUBREDDIT_NAME = "ERSN";
|
||||||
static final String EXTRA_RETURN_SUBREDDIT_ICON_URL = "ERSIU";
|
static final String EXTRA_RETURN_SUBREDDIT_ICON_URL = "ERSIU";
|
||||||
static final String RETURN_EXTRA_SELECTED_SUBREDDIT_NAMES = "RESSN";
|
static final String RETURN_EXTRA_SELECTED_SUBREDDIT_NAMES = "RESSN";
|
||||||
|
static final String RETURN_EXTRA_SELECTED_USERNAMES = "RESU";
|
||||||
static final String EXTRA_RETURN_USER_NAME = "ERUN";
|
static final String EXTRA_RETURN_USER_NAME = "ERUN";
|
||||||
static final String EXTRA_RETURN_USER_ICON_URL = "ERUIU";
|
static final String EXTRA_RETURN_USER_ICON_URL = "ERUIU";
|
||||||
static final String EXTRA_IS_MULTI_SELECTION = "EIMS";
|
static final String EXTRA_IS_MULTI_SELECTION = "EIMS";
|
||||||
@ -256,6 +257,7 @@ public class SearchActivity extends BaseActivity {
|
|||||||
} else if (searchOnlyUsers) {
|
} else if (searchOnlyUsers) {
|
||||||
Intent intent = new Intent(this, SearchUsersResultActivity.class);
|
Intent intent = new Intent(this, SearchUsersResultActivity.class);
|
||||||
intent.putExtra(SearchUsersResultActivity.EXTRA_QUERY, query);
|
intent.putExtra(SearchUsersResultActivity.EXTRA_QUERY, query);
|
||||||
|
intent.putExtra(SearchUsersResultActivity.EXTRA_IS_MULTI_SELECTION, getIntent().getBooleanExtra(EXTRA_IS_MULTI_SELECTION, false));
|
||||||
startActivityForResult(intent, USER_SEARCH_REQUEST_CODE);
|
startActivityForResult(intent, USER_SEARCH_REQUEST_CODE);
|
||||||
} else {
|
} else {
|
||||||
Intent intent = new Intent(SearchActivity.this, SearchResultActivity.class);
|
Intent intent = new Intent(SearchActivity.this, SearchResultActivity.class);
|
||||||
@ -355,11 +357,15 @@ public class SearchActivity extends BaseActivity {
|
|||||||
setResult(Activity.RESULT_OK, returnIntent);
|
setResult(Activity.RESULT_OK, returnIntent);
|
||||||
finish();
|
finish();
|
||||||
} else if (requestCode == USER_SEARCH_REQUEST_CODE) {
|
} else if (requestCode == USER_SEARCH_REQUEST_CODE) {
|
||||||
String username = data.getStringExtra(SearchUsersResultActivity.EXTRA_RETURN_USER_NAME);
|
|
||||||
String iconUrl = data.getStringExtra(SearchUsersResultActivity.EXTRA_RETURN_USER_ICON_URL);
|
|
||||||
Intent returnIntent = new Intent();
|
Intent returnIntent = new Intent();
|
||||||
returnIntent.putExtra(EXTRA_RETURN_USER_NAME, username);
|
if (getIntent().getBooleanExtra(EXTRA_IS_MULTI_SELECTION, false)) {
|
||||||
returnIntent.putExtra(EXTRA_RETURN_USER_ICON_URL, iconUrl);
|
returnIntent.putStringArrayListExtra(RETURN_EXTRA_SELECTED_USERNAMES, data.getStringArrayListExtra(SearchUsersResultActivity.RETURN_EXTRA_SELECTED_USERNAMES));
|
||||||
|
} else {
|
||||||
|
String username = data.getStringExtra(SearchUsersResultActivity.EXTRA_RETURN_USER_NAME);
|
||||||
|
String iconUrl = data.getStringExtra(SearchUsersResultActivity.EXTRA_RETURN_USER_ICON_URL);
|
||||||
|
returnIntent.putExtra(EXTRA_RETURN_USER_NAME, username);
|
||||||
|
returnIntent.putExtra(EXTRA_RETURN_USER_ICON_URL, iconUrl);
|
||||||
|
}
|
||||||
setResult(Activity.RESULT_OK, returnIntent);
|
setResult(Activity.RESULT_OK, returnIntent);
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
|
@ -169,13 +169,9 @@ public class SearchSubredditsResultActivity extends BaseActivity implements Acti
|
|||||||
return true;
|
return true;
|
||||||
} else if (item.getItemId() == R.id.action_save_search_subreddits_result_activity) {
|
} else if (item.getItemId() == R.id.action_save_search_subreddits_result_activity) {
|
||||||
if (mFragment != null) {
|
if (mFragment != null) {
|
||||||
List<SubredditData> subreddits = ((SubredditListingFragment) mFragment).getSelectedSubreddits();
|
ArrayList<String> selectedSubredditNames = ((SubredditListingFragment) mFragment).getSelectedSubredditNames();
|
||||||
ArrayList<String> subredditNames = new ArrayList<>();
|
|
||||||
for (SubredditData s : subreddits) {
|
|
||||||
subredditNames.add(s.getName());
|
|
||||||
}
|
|
||||||
Intent returnIntent = new Intent();
|
Intent returnIntent = new Intent();
|
||||||
returnIntent.putStringArrayListExtra(RETURN_EXTRA_SELECTED_SUBREDDIT_NAMES, subredditNames);
|
returnIntent.putStringArrayListExtra(RETURN_EXTRA_SELECTED_SUBREDDIT_NAMES, selectedSubredditNames);
|
||||||
setResult(Activity.RESULT_OK, returnIntent);
|
setResult(Activity.RESULT_OK, returnIntent);
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,8 @@ import android.content.Intent;
|
|||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.view.Menu;
|
||||||
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.Window;
|
import android.view.Window;
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
@ -20,6 +22,8 @@ import com.r0adkll.slidr.Slidr;
|
|||||||
import org.greenrobot.eventbus.EventBus;
|
import org.greenrobot.eventbus.EventBus;
|
||||||
import org.greenrobot.eventbus.Subscribe;
|
import org.greenrobot.eventbus.Subscribe;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Named;
|
import javax.inject.Named;
|
||||||
|
|
||||||
@ -36,8 +40,10 @@ import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
|
|||||||
public class SearchUsersResultActivity extends BaseActivity implements ActivityToolbarInterface {
|
public class SearchUsersResultActivity extends BaseActivity implements ActivityToolbarInterface {
|
||||||
|
|
||||||
static final String EXTRA_QUERY = "EQ";
|
static final String EXTRA_QUERY = "EQ";
|
||||||
|
static final String EXTRA_IS_MULTI_SELECTION = "EIMS";
|
||||||
static final String EXTRA_RETURN_USER_NAME = "ERUN";
|
static final String EXTRA_RETURN_USER_NAME = "ERUN";
|
||||||
static final String EXTRA_RETURN_USER_ICON_URL = "ERUIU";
|
static final String EXTRA_RETURN_USER_ICON_URL = "ERUIU";
|
||||||
|
static final String RETURN_EXTRA_SELECTED_USERNAMES = "RESU";
|
||||||
|
|
||||||
private static final String FRAGMENT_OUT_STATE = "FOS";
|
private static final String FRAGMENT_OUT_STATE = "FOS";
|
||||||
|
|
||||||
@ -111,6 +117,7 @@ public class SearchUsersResultActivity extends BaseActivity implements ActivityT
|
|||||||
bundle.putBoolean(UserListingFragment.EXTRA_IS_GETTING_USER_INFO, true);
|
bundle.putBoolean(UserListingFragment.EXTRA_IS_GETTING_USER_INFO, true);
|
||||||
bundle.putString(UserListingFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
bundle.putString(UserListingFragment.EXTRA_ACCESS_TOKEN, mAccessToken);
|
||||||
bundle.putString(UserListingFragment.EXTRA_ACCOUNT_NAME, mAccountName);
|
bundle.putString(UserListingFragment.EXTRA_ACCOUNT_NAME, mAccountName);
|
||||||
|
bundle.putBoolean(UserListingFragment.EXTRA_IS_MULTI_SELECTION, getIntent().getBooleanExtra(EXTRA_IS_MULTI_SELECTION, false));
|
||||||
mFragment.setArguments(bundle);
|
mFragment.setArguments(bundle);
|
||||||
getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout_search_users_result_activity, mFragment).commit();
|
getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout_search_users_result_activity, mFragment).commit();
|
||||||
} else {
|
} else {
|
||||||
@ -143,6 +150,33 @@ public class SearchUsersResultActivity extends BaseActivity implements ActivityT
|
|||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCreateOptionsMenu(Menu menu) {
|
||||||
|
if (getIntent().getBooleanExtra(EXTRA_IS_MULTI_SELECTION, false)) {
|
||||||
|
getMenuInflater().inflate(R.menu.search_users_result_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_search_users_result_activity) {
|
||||||
|
if (mFragment != null) {
|
||||||
|
ArrayList<String> selectedUsernames = ((UserListingFragment) mFragment).getSelectedUsernames();
|
||||||
|
Intent returnIntent = new Intent();
|
||||||
|
returnIntent.putStringArrayListExtra(RETURN_EXTRA_SELECTED_USERNAMES, selectedUsernames);
|
||||||
|
setResult(Activity.RESULT_OK, returnIntent);
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
||||||
super.onSaveInstanceState(outState);
|
super.onSaveInstanceState(outState);
|
||||||
|
@ -22,6 +22,7 @@ import androidx.recyclerview.widget.RecyclerView;
|
|||||||
import com.bumptech.glide.Glide;
|
import com.bumptech.glide.Glide;
|
||||||
import com.bumptech.glide.RequestManager;
|
import com.bumptech.glide.RequestManager;
|
||||||
import com.bumptech.glide.request.RequestOptions;
|
import com.bumptech.glide.request.RequestOptions;
|
||||||
|
import com.google.android.material.checkbox.MaterialCheckBox;
|
||||||
|
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
@ -61,6 +62,7 @@ public class UserListingRecyclerViewAdapter extends PagedListAdapter<UserData, R
|
|||||||
private String accessToken;
|
private String accessToken;
|
||||||
private String accountName;
|
private String accountName;
|
||||||
private RedditDataRoomDatabase redditDataRoomDatabase;
|
private RedditDataRoomDatabase redditDataRoomDatabase;
|
||||||
|
private boolean isMultiSelection;
|
||||||
|
|
||||||
private int primaryTextColor;
|
private int primaryTextColor;
|
||||||
private int buttonTextColor;
|
private int buttonTextColor;
|
||||||
@ -74,7 +76,7 @@ public class UserListingRecyclerViewAdapter extends PagedListAdapter<UserData, R
|
|||||||
public UserListingRecyclerViewAdapter(Context context, Executor executor, Retrofit oauthRetrofit, Retrofit retrofit,
|
public UserListingRecyclerViewAdapter(Context context, Executor executor, Retrofit oauthRetrofit, Retrofit retrofit,
|
||||||
CustomThemeWrapper customThemeWrapper, String accessToken,
|
CustomThemeWrapper customThemeWrapper, String accessToken,
|
||||||
String accountName, RedditDataRoomDatabase redditDataRoomDatabase,
|
String accountName, RedditDataRoomDatabase redditDataRoomDatabase,
|
||||||
Callback callback) {
|
boolean isMultiSelection, Callback callback) {
|
||||||
super(DIFF_CALLBACK);
|
super(DIFF_CALLBACK);
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.executor = executor;
|
this.executor = executor;
|
||||||
@ -83,6 +85,7 @@ public class UserListingRecyclerViewAdapter extends PagedListAdapter<UserData, R
|
|||||||
this.accessToken = accessToken;
|
this.accessToken = accessToken;
|
||||||
this.accountName = accountName;
|
this.accountName = accountName;
|
||||||
this.redditDataRoomDatabase = redditDataRoomDatabase;
|
this.redditDataRoomDatabase = redditDataRoomDatabase;
|
||||||
|
this.isMultiSelection = isMultiSelection;
|
||||||
this.callback = callback;
|
this.callback = callback;
|
||||||
glide = Glide.with(context);
|
glide = Glide.with(context);
|
||||||
primaryTextColor = customThemeWrapper.getPrimaryTextColor();
|
primaryTextColor = customThemeWrapper.getPrimaryTextColor();
|
||||||
@ -97,7 +100,7 @@ public class UserListingRecyclerViewAdapter extends PagedListAdapter<UserData, R
|
|||||||
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
if (viewType == VIEW_TYPE_DATA) {
|
if (viewType == VIEW_TYPE_DATA) {
|
||||||
ConstraintLayout constraintLayout = (ConstraintLayout) LayoutInflater.from(parent.getContext()).inflate(R.layout.item_user_listing, parent, false);
|
ConstraintLayout constraintLayout = (ConstraintLayout) LayoutInflater.from(parent.getContext()).inflate(R.layout.item_user_listing, parent, false);
|
||||||
return new UserListingRecyclerViewAdapter.DataViewHolder(constraintLayout);
|
return new DataViewHolder(constraintLayout);
|
||||||
} else if (viewType == VIEW_TYPE_ERROR) {
|
} else if (viewType == VIEW_TYPE_ERROR) {
|
||||||
RelativeLayout relativeLayout = (RelativeLayout) LayoutInflater.from(parent.getContext()).inflate(R.layout.item_footer_error, parent, false);
|
RelativeLayout relativeLayout = (RelativeLayout) LayoutInflater.from(parent.getContext()).inflate(R.layout.item_footer_error, parent, false);
|
||||||
return new UserListingRecyclerViewAdapter.ErrorViewHolder(relativeLayout);
|
return new UserListingRecyclerViewAdapter.ErrorViewHolder(relativeLayout);
|
||||||
@ -109,11 +112,15 @@ public class UserListingRecyclerViewAdapter extends PagedListAdapter<UserData, R
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
|
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
|
||||||
if (holder instanceof UserListingRecyclerViewAdapter.DataViewHolder) {
|
if (holder instanceof DataViewHolder) {
|
||||||
UserData userData = getItem(position);
|
UserData userData = getItem(position);
|
||||||
if (userData != null) {
|
if (userData != null) {
|
||||||
((UserListingRecyclerViewAdapter.DataViewHolder) holder).constraintLayout.setOnClickListener(view -> {
|
((DataViewHolder) holder).constraintLayout.setOnClickListener(view -> {
|
||||||
callback.userSelected(userData.getName(), userData.getIconUrl());
|
if (isMultiSelection) {
|
||||||
|
((DataViewHolder) holder).checkBox.performClick();
|
||||||
|
} else {
|
||||||
|
callback.userSelected(userData.getName(), userData.getIconUrl());
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!userData.getIconUrl().equals("")) {
|
if (!userData.getIconUrl().equals("")) {
|
||||||
@ -121,43 +128,47 @@ public class UserListingRecyclerViewAdapter extends PagedListAdapter<UserData, R
|
|||||||
.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(((UserListingRecyclerViewAdapter.DataViewHolder) holder).iconGifImageView);
|
.into(((DataViewHolder) holder).iconGifImageView);
|
||||||
} else {
|
} else {
|
||||||
glide.load(R.drawable.subreddit_default_icon)
|
glide.load(R.drawable.subreddit_default_icon)
|
||||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
|
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(72, 0)))
|
||||||
.into(((UserListingRecyclerViewAdapter.DataViewHolder) holder).iconGifImageView);
|
.into(((DataViewHolder) holder).iconGifImageView);
|
||||||
}
|
}
|
||||||
|
|
||||||
((UserListingRecyclerViewAdapter.DataViewHolder) holder).userNameTextView.setText(userData.getName());
|
((DataViewHolder) holder).userNameTextView.setText(userData.getName());
|
||||||
|
|
||||||
CheckIsFollowingUser.checkIsFollowingUser(executor, new Handler(), redditDataRoomDatabase,
|
if (!isMultiSelection) {
|
||||||
userData.getName(), accountName, new CheckIsFollowingUser.CheckIsFollowingUserListener() {
|
CheckIsFollowingUser.checkIsFollowingUser(executor, new Handler(), redditDataRoomDatabase,
|
||||||
@Override
|
userData.getName(), accountName, new CheckIsFollowingUser.CheckIsFollowingUserListener() {
|
||||||
public void isSubscribed() {
|
@Override
|
||||||
((UserListingRecyclerViewAdapter.DataViewHolder) holder).subscribeButton.setVisibility(View.GONE);
|
public void isSubscribed() {
|
||||||
}
|
((DataViewHolder) holder).subscribeButton.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void isNotSubscribed() {
|
public void isNotSubscribed() {
|
||||||
((UserListingRecyclerViewAdapter.DataViewHolder) holder).subscribeButton.setVisibility(View.VISIBLE);
|
((DataViewHolder) holder).subscribeButton.setVisibility(View.VISIBLE);
|
||||||
((UserListingRecyclerViewAdapter.DataViewHolder) holder).subscribeButton.setOnClickListener(view -> {
|
((DataViewHolder) holder).subscribeButton.setOnClickListener(view -> {
|
||||||
UserFollowing.followUser(oauthRetrofit, retrofit,
|
UserFollowing.followUser(oauthRetrofit, retrofit,
|
||||||
accessToken, userData.getName(), accountName, redditDataRoomDatabase,
|
accessToken, userData.getName(), accountName, redditDataRoomDatabase,
|
||||||
new UserFollowing.UserFollowingListener() {
|
new UserFollowing.UserFollowingListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onUserFollowingSuccess() {
|
public void onUserFollowingSuccess() {
|
||||||
((UserListingRecyclerViewAdapter.DataViewHolder) holder).subscribeButton.setVisibility(View.GONE);
|
((DataViewHolder) holder).subscribeButton.setVisibility(View.GONE);
|
||||||
Toast.makeText(context, R.string.followed, Toast.LENGTH_SHORT).show();
|
Toast.makeText(context, R.string.followed, Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onUserFollowingFail() {
|
public void onUserFollowingFail() {
|
||||||
Toast.makeText(context, R.string.follow_failed, Toast.LENGTH_SHORT).show();
|
Toast.makeText(context, R.string.follow_failed, Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
} else {
|
||||||
|
((DataViewHolder) holder).checkBox.setOnCheckedChangeListener((compoundButton, b) -> userData.setSelected(b));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -206,9 +217,9 @@ public class UserListingRecyclerViewAdapter extends PagedListAdapter<UserData, R
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) {
|
public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) {
|
||||||
if (holder instanceof UserListingRecyclerViewAdapter.DataViewHolder) {
|
if (holder instanceof DataViewHolder) {
|
||||||
glide.clear(((UserListingRecyclerViewAdapter.DataViewHolder) holder).iconGifImageView);
|
glide.clear(((DataViewHolder) holder).iconGifImageView);
|
||||||
((UserListingRecyclerViewAdapter.DataViewHolder) holder).subscribeButton.setVisibility(View.GONE);
|
((DataViewHolder) holder).subscribeButton.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -227,12 +238,17 @@ public class UserListingRecyclerViewAdapter extends PagedListAdapter<UserData, R
|
|||||||
TextView userNameTextView;
|
TextView userNameTextView;
|
||||||
@BindView(R.id.subscribe_image_view_item_user_listing)
|
@BindView(R.id.subscribe_image_view_item_user_listing)
|
||||||
ImageView subscribeButton;
|
ImageView subscribeButton;
|
||||||
|
@BindView(R.id.checkbox__item_user_listing)
|
||||||
|
MaterialCheckBox checkBox;
|
||||||
|
|
||||||
DataViewHolder(View itemView) {
|
DataViewHolder(View itemView) {
|
||||||
super(itemView);
|
super(itemView);
|
||||||
ButterKnife.bind(this, itemView);
|
ButterKnife.bind(this, itemView);
|
||||||
userNameTextView.setTextColor(primaryTextColor);
|
userNameTextView.setTextColor(primaryTextColor);
|
||||||
subscribeButton.setColorFilter(unsubscribedColor, android.graphics.PorterDuff.Mode.SRC_IN);
|
subscribeButton.setColorFilter(unsubscribedColor, android.graphics.PorterDuff.Mode.SRC_IN);
|
||||||
|
if (isMultiSelection) {
|
||||||
|
checkBox.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -260,17 +260,17 @@ public class SubredditListingFragment extends Fragment implements FragmentCommun
|
|||||||
return sortType;
|
return sortType;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<SubredditData> getSelectedSubreddits() {
|
public ArrayList<String> getSelectedSubredditNames() {
|
||||||
if (mSubredditListingViewModel != null) {
|
if (mSubredditListingViewModel != null) {
|
||||||
List<SubredditData> allSubreddits = mSubredditListingViewModel.getSubreddits().getValue();
|
List<SubredditData> allSubreddits = mSubredditListingViewModel.getSubreddits().getValue();
|
||||||
if (allSubreddits == null) {
|
if (allSubreddits == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<SubredditData> selectedSubreddits = new ArrayList<>();
|
ArrayList<String> selectedSubreddits = new ArrayList<>();
|
||||||
for (SubredditData s : allSubreddits) {
|
for (SubredditData s : allSubreddits) {
|
||||||
if (s.isSelected()) {
|
if (s.isSelected()) {
|
||||||
selectedSubreddits.add(s);
|
selectedSubreddits.add(s.getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return selectedSubreddits;
|
return selectedSubreddits;
|
||||||
|
@ -25,6 +25,8 @@ import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
|||||||
|
|
||||||
import com.bumptech.glide.Glide;
|
import com.bumptech.glide.Glide;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
@ -35,8 +37,8 @@ import butterknife.ButterKnife;
|
|||||||
import ml.docilealligator.infinityforreddit.FragmentCommunicator;
|
import ml.docilealligator.infinityforreddit.FragmentCommunicator;
|
||||||
import ml.docilealligator.infinityforreddit.Infinity;
|
import ml.docilealligator.infinityforreddit.Infinity;
|
||||||
import ml.docilealligator.infinityforreddit.NetworkState;
|
import ml.docilealligator.infinityforreddit.NetworkState;
|
||||||
import ml.docilealligator.infinityforreddit.RecyclerViewContentScrollingInterface;
|
|
||||||
import ml.docilealligator.infinityforreddit.R;
|
import ml.docilealligator.infinityforreddit.R;
|
||||||
|
import ml.docilealligator.infinityforreddit.RecyclerViewContentScrollingInterface;
|
||||||
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
|
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
|
||||||
import ml.docilealligator.infinityforreddit.SortType;
|
import ml.docilealligator.infinityforreddit.SortType;
|
||||||
import ml.docilealligator.infinityforreddit.activities.BaseActivity;
|
import ml.docilealligator.infinityforreddit.activities.BaseActivity;
|
||||||
@ -44,6 +46,7 @@ import ml.docilealligator.infinityforreddit.activities.SearchUsersResultActivity
|
|||||||
import ml.docilealligator.infinityforreddit.activities.ViewUserDetailActivity;
|
import ml.docilealligator.infinityforreddit.activities.ViewUserDetailActivity;
|
||||||
import ml.docilealligator.infinityforreddit.adapters.UserListingRecyclerViewAdapter;
|
import ml.docilealligator.infinityforreddit.adapters.UserListingRecyclerViewAdapter;
|
||||||
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
|
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper;
|
||||||
|
import ml.docilealligator.infinityforreddit.user.UserData;
|
||||||
import ml.docilealligator.infinityforreddit.user.UserListingViewModel;
|
import ml.docilealligator.infinityforreddit.user.UserListingViewModel;
|
||||||
import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
|
import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
@ -56,6 +59,7 @@ public class UserListingFragment extends Fragment implements FragmentCommunicato
|
|||||||
|
|
||||||
public static final String EXTRA_QUERY = "EQ";
|
public static final String EXTRA_QUERY = "EQ";
|
||||||
public static final String EXTRA_IS_GETTING_USER_INFO = "EIGUI";
|
public static final String EXTRA_IS_GETTING_USER_INFO = "EIGUI";
|
||||||
|
public static final String EXTRA_IS_MULTI_SELECTION = "EIMS";
|
||||||
public static final String EXTRA_ACCESS_TOKEN = "EAT";
|
public static final String EXTRA_ACCESS_TOKEN = "EAT";
|
||||||
public static final String EXTRA_ACCOUNT_NAME = "EAN";
|
public static final String EXTRA_ACCOUNT_NAME = "EAN";
|
||||||
|
|
||||||
@ -141,6 +145,7 @@ public class UserListingFragment extends Fragment implements FragmentCommunicato
|
|||||||
|
|
||||||
mAdapter = new UserListingRecyclerViewAdapter(getActivity(), mExecutor, mOauthRetrofit, mRetrofit,
|
mAdapter = new UserListingRecyclerViewAdapter(getActivity(), mExecutor, mOauthRetrofit, mRetrofit,
|
||||||
mCustomThemeWrapper, accessToken, accountName, mRedditDataRoomDatabase,
|
mCustomThemeWrapper, accessToken, accountName, mRedditDataRoomDatabase,
|
||||||
|
getArguments().getBoolean(EXTRA_IS_MULTI_SELECTION, false),
|
||||||
new UserListingRecyclerViewAdapter.Callback() {
|
new UserListingRecyclerViewAdapter.Callback() {
|
||||||
@Override
|
@Override
|
||||||
public void retryLoadingMore() {
|
public void retryLoadingMore() {
|
||||||
@ -256,4 +261,22 @@ public class UserListingFragment extends Fragment implements FragmentCommunicato
|
|||||||
public SortType getSortType() {
|
public SortType getSortType() {
|
||||||
return sortType;
|
return sortType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ArrayList<String> getSelectedUsernames() {
|
||||||
|
if (mUserListingViewModel != null) {
|
||||||
|
List<UserData> allUsers = mUserListingViewModel.getUsers().getValue();
|
||||||
|
if (allUsers != null) {
|
||||||
|
ArrayList<String> selectedUsernames = new ArrayList<>();
|
||||||
|
for (UserData u : allUsers) {
|
||||||
|
if (u.isSelected()) {
|
||||||
|
selectedUsernames.add(u.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return selectedUsernames;
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ package ml.docilealligator.infinityforreddit.user;
|
|||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.room.ColumnInfo;
|
import androidx.room.ColumnInfo;
|
||||||
import androidx.room.Entity;
|
import androidx.room.Entity;
|
||||||
|
import androidx.room.Ignore;
|
||||||
import androidx.room.PrimaryKey;
|
import androidx.room.PrimaryKey;
|
||||||
|
|
||||||
@Entity(tableName = "users")
|
@Entity(tableName = "users")
|
||||||
@ -37,6 +38,8 @@ public class UserData {
|
|||||||
private boolean isNSFW;
|
private boolean isNSFW;
|
||||||
@ColumnInfo(name = "description")
|
@ColumnInfo(name = "description")
|
||||||
private String description;
|
private String description;
|
||||||
|
@Ignore
|
||||||
|
private boolean isSelected;
|
||||||
|
|
||||||
public UserData(@NonNull String name, String iconUrl, String banner, int linkKarma, int commentKarma,
|
public UserData(@NonNull String name, String iconUrl, String banner, int linkKarma, int commentKarma,
|
||||||
int awarderKarma, int awardeeKarma, int totalKarma, long cakeday, boolean isGold,
|
int awarderKarma, int awardeeKarma, int totalKarma, long cakeday, boolean isGold,
|
||||||
@ -55,6 +58,7 @@ public class UserData {
|
|||||||
this.canBeFollowed = canBeFollowed;
|
this.canBeFollowed = canBeFollowed;
|
||||||
this.isNSFW = isNSFW;
|
this.isNSFW = isNSFW;
|
||||||
this.description = description;
|
this.description = description;
|
||||||
|
this.isSelected = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
@ -113,4 +117,12 @@ public class UserData {
|
|||||||
public String getDescription() {
|
public String getDescription() {
|
||||||
return description;
|
return description;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isSelected() {
|
||||||
|
return isSelected;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSelected(boolean selected) {
|
||||||
|
isSelected = selected;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -50,6 +50,7 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
app:layout_constraintBottom_toBottomOf="parent" />
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
android:visibility="gone" />
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
@ -44,4 +44,13 @@
|
|||||||
android:background="?attr/selectableItemBackground"
|
android:background="?attr/selectableItemBackground"
|
||||||
android:visibility="gone" />
|
android:visibility="gone" />
|
||||||
|
|
||||||
|
<com.google.android.material.checkbox.MaterialCheckBox
|
||||||
|
android:id="@+id/checkbox__item_user_listing"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
android:visibility="gone" />
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
10
app/src/main/res/menu/search_users_result_activity.xml
Normal file
10
app/src/main/res/menu/search_users_result_activity.xml
Normal 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_search_users_result_activity"
|
||||||
|
android:orderInCategory="1"
|
||||||
|
android:title="@string/action_save"
|
||||||
|
android:icon="@drawable/ic_check_circle_toolbar_24dp"
|
||||||
|
app:showAsAction="ifRoom" />
|
||||||
|
</menu>
|
Loading…
Reference in New Issue
Block a user