mirror of
https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
synced 2025-02-04 22:04:48 +01:00
Basic search functionality for users
Signed-off-by: Balazs Toldi <balazs@toldi.eu>
This commit is contained in:
parent
e5f2e2f8a2
commit
eed13f0e59
@ -60,7 +60,7 @@ public class SortType {
|
|||||||
|
|
||||||
public static Type fromValue(String value) {
|
public static Type fromValue(String value) {
|
||||||
for (Type type : values()) {
|
for (Type type : values()) {
|
||||||
if (type.value.equals(value)) {
|
if (type.value.equalsIgnoreCase(value)) {
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,6 @@ import java.util.concurrent.Executor;
|
|||||||
|
|
||||||
import butterknife.BindView;
|
import butterknife.BindView;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
|
||||||
import eu.toldi.infinityforlemmy.NetworkState;
|
import eu.toldi.infinityforlemmy.NetworkState;
|
||||||
import eu.toldi.infinityforlemmy.R;
|
import eu.toldi.infinityforlemmy.R;
|
||||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
||||||
@ -36,6 +35,8 @@ import eu.toldi.infinityforlemmy.asynctasks.CheckIsFollowingUser;
|
|||||||
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
import eu.toldi.infinityforlemmy.customtheme.CustomThemeWrapper;
|
||||||
import eu.toldi.infinityforlemmy.user.UserData;
|
import eu.toldi.infinityforlemmy.user.UserData;
|
||||||
import eu.toldi.infinityforlemmy.user.UserFollowing;
|
import eu.toldi.infinityforlemmy.user.UserFollowing;
|
||||||
|
import eu.toldi.infinityforlemmy.utils.LemmyUtils;
|
||||||
|
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
||||||
import pl.droidsonroids.gif.GifImageView;
|
import pl.droidsonroids.gif.GifImageView;
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
|
|
||||||
@ -119,7 +120,7 @@ public class UserListingRecyclerViewAdapter extends PagedListAdapter<UserData, R
|
|||||||
if (isMultiSelection) {
|
if (isMultiSelection) {
|
||||||
((DataViewHolder) holder).checkBox.performClick();
|
((DataViewHolder) holder).checkBox.performClick();
|
||||||
} else {
|
} else {
|
||||||
callback.userSelected(userData.getName(), userData.getIconUrl());
|
callback.userSelected(userData.getName(), userData.getIconUrl(), LemmyUtils.actorID2FullName(userData.getActorId()));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -226,7 +227,7 @@ public class UserListingRecyclerViewAdapter extends PagedListAdapter<UserData, R
|
|||||||
public interface Callback {
|
public interface Callback {
|
||||||
void retryLoadingMore();
|
void retryLoadingMore();
|
||||||
|
|
||||||
void userSelected(String username, String iconUrl);
|
void userSelected(String username, String iconUrl, String userQualifiedName);
|
||||||
}
|
}
|
||||||
|
|
||||||
class DataViewHolder extends RecyclerView.ViewHolder {
|
class DataViewHolder extends RecyclerView.ViewHolder {
|
||||||
|
@ -139,8 +139,8 @@ public class UserListingFragment extends Fragment implements FragmentCommunicato
|
|||||||
boolean isGettingUserInfo = getArguments().getBoolean(EXTRA_IS_GETTING_USER_INFO);
|
boolean isGettingUserInfo = getArguments().getBoolean(EXTRA_IS_GETTING_USER_INFO);
|
||||||
String accessToken = getArguments().getString(EXTRA_ACCESS_TOKEN);
|
String accessToken = getArguments().getString(EXTRA_ACCESS_TOKEN);
|
||||||
String accountName = getArguments().getString(EXTRA_ACCOUNT_NAME);
|
String accountName = getArguments().getString(EXTRA_ACCOUNT_NAME);
|
||||||
String sort = mSortTypeSharedPreferences.getString(SharedPreferencesUtils.SORT_TYPE_SEARCH_USER, SortType.Type.TOP.value);
|
String sort = mSortTypeSharedPreferences.getString(SharedPreferencesUtils.SORT_TYPE_SEARCH_USER, SortType.Type.TOP_ALL.value);
|
||||||
sortType = new SortType(SortType.Type.valueOf(sort.toUpperCase()));
|
sortType = new SortType(SortType.Type.fromValue(sort));
|
||||||
boolean nsfw = !mSharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_NSFW_FOREVER, false) && mNsfwAndSpoilerSharedPreferences.getBoolean((accountName == null ? "" : accountName) + SharedPreferencesUtils.NSFW_BASE, false);
|
boolean nsfw = !mSharedPreferences.getBoolean(SharedPreferencesUtils.DISABLE_NSFW_FOREVER, false) && mNsfwAndSpoilerSharedPreferences.getBoolean((accountName == null ? "" : accountName) + SharedPreferencesUtils.NSFW_BASE, false);
|
||||||
|
|
||||||
mAdapter = new UserListingRecyclerViewAdapter(mActivity, mExecutor, mOauthRetrofit, mRetrofit.getRetrofit(),
|
mAdapter = new UserListingRecyclerViewAdapter(mActivity, mExecutor, mOauthRetrofit, mRetrofit.getRetrofit(),
|
||||||
@ -153,12 +153,13 @@ public class UserListingFragment extends Fragment implements FragmentCommunicato
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void userSelected(String username, String iconUrl) {
|
public void userSelected(String username, String iconUrl, String userQualifiedName) {
|
||||||
if (isGettingUserInfo) {
|
if (isGettingUserInfo) {
|
||||||
((SearchUsersResultActivity) mActivity).getSelectedUser(username, iconUrl);
|
((SearchUsersResultActivity) mActivity).getSelectedUser(username, iconUrl);
|
||||||
} else {
|
} else {
|
||||||
Intent intent = new Intent(mActivity, ViewUserDetailActivity.class);
|
Intent intent = new Intent(mActivity, ViewUserDetailActivity.class);
|
||||||
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, username);
|
intent.putExtra(ViewUserDetailActivity.EXTRA_USER_NAME_KEY, username);
|
||||||
|
intent.putExtra(ViewUserDetailActivity.EXTRA_QUALIFIED_USER_NAME_KEY, userQualifiedName);
|
||||||
mActivity.startActivity(intent);
|
mActivity.startActivity(intent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,8 +7,6 @@ import java.util.ArrayList;
|
|||||||
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
import eu.toldi.infinityforlemmy.RedditDataRoomDatabase;
|
||||||
import eu.toldi.infinityforlemmy.SortType;
|
import eu.toldi.infinityforlemmy.SortType;
|
||||||
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
|
import eu.toldi.infinityforlemmy.apis.LemmyAPI;
|
||||||
import eu.toldi.infinityforlemmy.apis.RedditAPI;
|
|
||||||
import eu.toldi.infinityforlemmy.utils.APIUtils;
|
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
import retrofit2.Callback;
|
import retrofit2.Callback;
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
@ -55,11 +53,11 @@ public class FetchUserData {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void fetchUserListingData(Retrofit retrofit, String query, String after, SortType.Type sortType, boolean nsfw,
|
public static void fetchUserListingData(Retrofit retrofit, String query, Integer page, SortType.Type sortType, boolean nsfw,
|
||||||
FetchUserListingDataListener fetchUserListingDataListener) {
|
FetchUserListingDataListener fetchUserListingDataListener) {
|
||||||
RedditAPI api = retrofit.create(RedditAPI.class);
|
LemmyAPI api = retrofit.create(LemmyAPI.class);
|
||||||
|
|
||||||
Call<String> userInfo = api.searchUsers(query, after, sortType, nsfw ? 1 : 0);
|
Call<String> userInfo = api.search(query, null, null, null, "Users", sortType.value, "All", page, 25, null);
|
||||||
userInfo.enqueue(new Callback<>() {
|
userInfo.enqueue(new Callback<>() {
|
||||||
@Override
|
@Override
|
||||||
public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
|
public void onResponse(@NonNull Call<String> call, @NonNull retrofit2.Response<String> response) {
|
||||||
|
@ -27,7 +27,7 @@ public class ParseUserData {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
JSONObject personJson = userDataJson.getJSONObject("person_view").getJSONObject("person");
|
JSONObject personJson = (userDataJson.has("person_view")) ? userDataJson.getJSONObject("person_view").getJSONObject("person") : userDataJson.getJSONObject("person");
|
||||||
String userName = personJson.getString(JSONUtils.NAME_KEY);
|
String userName = personJson.getString(JSONUtils.NAME_KEY);
|
||||||
String actor_id = personJson.getString("actor_id");
|
String actor_id = personJson.getString("actor_id");
|
||||||
String iconImageUrl = "";
|
String iconImageUrl = "";
|
||||||
@ -38,7 +38,7 @@ public class ParseUserData {
|
|||||||
if (!personJson.isNull("banner")) {
|
if (!personJson.isNull("banner")) {
|
||||||
bannerImageUrl = personJson.getString("banner");
|
bannerImageUrl = personJson.getString("banner");
|
||||||
}
|
}
|
||||||
JSONObject countsJson = userDataJson.getJSONObject("person_view").getJSONObject("counts");
|
JSONObject countsJson = (userDataJson.has("person_view")) ? userDataJson.getJSONObject("person_view").getJSONObject("counts") : userDataJson.getJSONObject("counts");
|
||||||
|
|
||||||
int linkKarma = countsJson.getInt(JSONUtils.POST_SCORE_KEY);
|
int linkKarma = countsJson.getInt(JSONUtils.POST_SCORE_KEY);
|
||||||
int commentKarma = countsJson.getInt(JSONUtils.COMMENT_SCORE_KEY);
|
int commentKarma = countsJson.getInt(JSONUtils.COMMENT_SCORE_KEY);
|
||||||
@ -150,8 +150,8 @@ public class ParseUserData {
|
|||||||
protected Void doInBackground(Void... voids) {
|
protected Void doInBackground(Void... voids) {
|
||||||
try {
|
try {
|
||||||
if (!parseFailed) {
|
if (!parseFailed) {
|
||||||
after = jsonResponse.getJSONObject(JSONUtils.DATA_KEY).getString(JSONUtils.AFTER_KEY);
|
|
||||||
JSONArray children = jsonResponse.getJSONObject(JSONUtils.DATA_KEY).getJSONArray(JSONUtils.CHILDREN_KEY);
|
JSONArray children = jsonResponse.getJSONArray("users");
|
||||||
for (int i = 0; i < children.length(); i++) {
|
for (int i = 0; i < children.length(); i++) {
|
||||||
try {
|
try {
|
||||||
UserData userData = parseUserDataBase(children.getJSONObject(i), false);
|
UserData userData = parseUserDataBase(children.getJSONObject(i), false);
|
||||||
|
@ -10,7 +10,7 @@ import eu.toldi.infinityforlemmy.NetworkState;
|
|||||||
import eu.toldi.infinityforlemmy.SortType;
|
import eu.toldi.infinityforlemmy.SortType;
|
||||||
import retrofit2.Retrofit;
|
import retrofit2.Retrofit;
|
||||||
|
|
||||||
public class UserListingDataSource extends PageKeyedDataSource<String, UserData> {
|
public class UserListingDataSource extends PageKeyedDataSource<Integer, UserData> {
|
||||||
|
|
||||||
private Retrofit retrofit;
|
private Retrofit retrofit;
|
||||||
private String query;
|
private String query;
|
||||||
@ -21,8 +21,8 @@ public class UserListingDataSource extends PageKeyedDataSource<String, UserData>
|
|||||||
private MutableLiveData<NetworkState> initialLoadStateLiveData;
|
private MutableLiveData<NetworkState> initialLoadStateLiveData;
|
||||||
private MutableLiveData<Boolean> hasUserLiveData;
|
private MutableLiveData<Boolean> hasUserLiveData;
|
||||||
|
|
||||||
private PageKeyedDataSource.LoadParams<String> params;
|
private PageKeyedDataSource.LoadParams<Integer> params;
|
||||||
private PageKeyedDataSource.LoadCallback<String, UserData> callback;
|
private PageKeyedDataSource.LoadCallback<Integer, UserData> callback;
|
||||||
|
|
||||||
UserListingDataSource(Retrofit retrofit, String query, SortType sortType, boolean nsfw) {
|
UserListingDataSource(Retrofit retrofit, String query, SortType sortType, boolean nsfw) {
|
||||||
this.retrofit = retrofit;
|
this.retrofit = retrofit;
|
||||||
@ -47,7 +47,7 @@ public class UserListingDataSource extends PageKeyedDataSource<String, UserData>
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void loadInitial(@NonNull PageKeyedDataSource.LoadInitialParams<String> params, @NonNull PageKeyedDataSource.LoadInitialCallback<String, UserData> callback) {
|
public void loadInitial(@NonNull PageKeyedDataSource.LoadInitialParams<Integer> params, @NonNull PageKeyedDataSource.LoadInitialCallback<Integer, UserData> callback) {
|
||||||
initialLoadStateLiveData.postValue(NetworkState.LOADING);
|
initialLoadStateLiveData.postValue(NetworkState.LOADING);
|
||||||
|
|
||||||
FetchUserData.fetchUserListingData(retrofit, query, null, sortType.getType(), nsfw,
|
FetchUserData.fetchUserListingData(retrofit, query, null, sortType.getType(), nsfw,
|
||||||
@ -56,7 +56,7 @@ public class UserListingDataSource extends PageKeyedDataSource<String, UserData>
|
|||||||
public void onFetchUserListingDataSuccess(ArrayList<UserData> UserData, String after) {
|
public void onFetchUserListingDataSuccess(ArrayList<UserData> UserData, String after) {
|
||||||
hasUserLiveData.postValue(UserData.size() != 0);
|
hasUserLiveData.postValue(UserData.size() != 0);
|
||||||
|
|
||||||
callback.onResult(UserData, null, after);
|
callback.onResult(UserData, null, 2);
|
||||||
initialLoadStateLiveData.postValue(NetworkState.LOADED);
|
initialLoadStateLiveData.postValue(NetworkState.LOADED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,12 +68,12 @@ public class UserListingDataSource extends PageKeyedDataSource<String, UserData>
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void loadBefore(@NonNull PageKeyedDataSource.LoadParams<String> params, @NonNull PageKeyedDataSource.LoadCallback<String, UserData> callback) {
|
public void loadBefore(@NonNull PageKeyedDataSource.LoadParams<Integer> params, @NonNull PageKeyedDataSource.LoadCallback<Integer, UserData> callback) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void loadAfter(@NonNull PageKeyedDataSource.LoadParams<String> params, @NonNull PageKeyedDataSource.LoadCallback<String, UserData> callback) {
|
public void loadAfter(@NonNull PageKeyedDataSource.LoadParams<Integer> params, @NonNull PageKeyedDataSource.LoadCallback<Integer, UserData> callback) {
|
||||||
this.params = params;
|
this.params = params;
|
||||||
this.callback = callback;
|
this.callback = callback;
|
||||||
|
|
||||||
@ -85,7 +85,7 @@ public class UserListingDataSource extends PageKeyedDataSource<String, UserData>
|
|||||||
new FetchUserData.FetchUserListingDataListener() {
|
new FetchUserData.FetchUserListingDataListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onFetchUserListingDataSuccess(ArrayList<UserData> UserData, String after) {
|
public void onFetchUserListingDataSuccess(ArrayList<UserData> UserData, String after) {
|
||||||
callback.onResult(UserData, after);
|
callback.onResult(UserData, params.key + 1);
|
||||||
paginationNetworkStateLiveData.postValue(NetworkState.LOADED);
|
paginationNetworkStateLiveData.postValue(NetworkState.LOADED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user