package com.linecorp.linesdk.dialog.internal; import android.os.AsyncTask; import androidx.annotation.NonNull; import com.linecorp.linesdk.FriendSortField; import com.linecorp.linesdk.GetFriendsResponse; import com.linecorp.linesdk.GetGroupsResponse; import com.linecorp.linesdk.LineApiResponse; import com.linecorp.linesdk.LineFriendProfile; import com.linecorp.linesdk.LineGroup; import com.linecorp.linesdk.api.LineApiClient; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class GetTargetUserTask extends AsyncTask<Void, List<TargetUser>, Void> { private TargetUser.Type type; private LineApiClient lineApiClient; private NextAction nextAction; public GetTargetUserTask(TargetUser.Type type, LineApiClient lineApiClient, NextAction action) { this.type = type; this.lineApiClient = lineApiClient; this.nextAction = action; } @Override protected Void doInBackground(Void... voids) { if (type == TargetUser.Type.FRIEND) { getAllFriends(); } else if (type == TargetUser.Type.GROUP) { getAllGroups(); } return null; } @Override protected void onProgressUpdate(List<TargetUser>... values) { List<TargetUser> targetUserList = values[0]; nextAction.run(targetUserList); } @FunctionalInterface public interface NextAction { void run(final List<TargetUser> targetUserList); } @NonNull private List<TargetUser> convertFriendsToTargetUsers(List<LineFriendProfile> friends) { List<TargetUser> targetUsers = new ArrayList<>(); for (LineFriendProfile friend : friends) { targetUsers.add(TargetUser.createInstance(friend)); } return targetUsers; } @NonNull private List<TargetUser> convertGroupsToTargetUsers(List<LineGroup> groups) { List<TargetUser> targetUsers = new ArrayList<>(); for (LineGroup group : groups) { targetUsers.add(TargetUser.createInstance(group)); } return targetUsers; } private void getAllFriends() { String nextPageToken = ""; while (nextPageToken != null) { LineApiResponse<GetFriendsResponse> response = lineApiClient.getFriends(FriendSortField.RELATION, nextPageToken, true); if (!response.isSuccess()) { publishProgress(Collections.emptyList()); return; } GetFriendsResponse getFriendsResponse = response.getResponseData(); publishProgress(convertFriendsToTargetUsers(getFriendsResponse.getFriends())); nextPageToken = getFriendsResponse.getNextPageRequestToken(); } } private void getAllGroups() { String nextPageToken = ""; while (nextPageToken != null) { LineApiResponse<GetGroupsResponse> response = lineApiClient.getGroups(nextPageToken, true); if (!response.isSuccess()) { publishProgress(Collections.emptyList()); return; } GetGroupsResponse getGroupsResponse = response.getResponseData(); publishProgress(convertGroupsToTargetUsers(getGroupsResponse.getGroups())); nextPageToken = getGroupsResponse.getNextPageRequestToken(); } } }