package bg.mentormate.academy.radarapp.adapters; import android.content.Context; import android.view.View; import android.view.ViewGroup; import com.parse.ParseException; import com.parse.ParseQuery; import com.parse.ParseQueryAdapter; import java.util.ArrayList; import java.util.List; import bg.mentormate.academy.radarapp.Constants; import bg.mentormate.academy.radarapp.data.LocalDb; import bg.mentormate.academy.radarapp.models.Follow; import bg.mentormate.academy.radarapp.models.User; import bg.mentormate.academy.radarapp.views.UserItem; /** * Created by tl on 17.02.15. */ public class UserQueryAdapter extends ParseQueryAdapter<User> { private static final int LIMIT = 50; public UserQueryAdapter(final Context context, final String searchQuery, final String category, final User user) { super(context, new QueryFactory<User>() { @Override public ParseQuery<User> create() { ParseQuery<User> query = new ParseQuery<>(Constants.USER_TABLE); query.orderByDescending(Constants.PARSE_COL_CREATED_AT); if (category.equals(Constants.SEARCH)) { query.setLimit(LIMIT) .whereNotEqualTo(Constants.PARSE_COL_OBJECT_ID, LocalDb.getInstance().getCurrentUser().getObjectId()); } else if (category.equals(Constants.FOLLOWING) && user != null) { Follow follow = getFollowObject(user); List<User> users = follow.getFollowings(); List<String> objectIds = fetchUsersObjectIds(users); query.whereContainedIn(Constants.PARSE_COL_OBJECT_ID, objectIds); } else if (category.equals(Constants.FOLLOWER) && user != null) { Follow follow = getFollowObject(user); List<User> users = follow.getFollowers(); List<String> objectIds = fetchUsersObjectIds(users); query.whereContainedIn(Constants.PARSE_COL_OBJECT_ID, objectIds); } if (searchQuery != null) { query.whereContains(Constants.USER_COL_USERNAME, searchQuery); } return query; } }); } private static List<String> fetchUsersObjectIds(List<User> users) { List<String> objectIds = new ArrayList<>(); for (User user: users) { objectIds.add(user.getObjectId()); } return objectIds; } private static Follow getFollowObject(User user) { Follow follow = null; try { follow = user.getFollow(); follow.fetchIfNeeded(); } catch (ParseException e) { e.printStackTrace(); } return follow; } @Override public View getItemView(User user, View v, ViewGroup parent) { if (v == null) { v = new UserItem(getContext()); } ((UserItem) v).setData(user); return v; } }