diff --git a/app/src/main/java/com/example/tampopo_client/viewmodels/ActivityViewModel.java b/app/src/main/java/com/example/tampopo_client/viewmodels/ActivityViewModel.java index 455723a..dbfa5ac 100644 --- a/app/src/main/java/com/example/tampopo_client/viewmodels/ActivityViewModel.java +++ b/app/src/main/java/com/example/tampopo_client/viewmodels/ActivityViewModel.java @@ -4,6 +4,7 @@ import androidx.annotation.NonNull; import androidx.lifecycle.MutableLiveData; +import androidx.recyclerview.widget.SortedList; import com.example.tampopo_client.models.Activity; import com.example.tampopo_client.resources.ActivitiesResource; @@ -110,11 +111,13 @@ // 自分のフレンドの最新のアクティビティを取得して更新する if (friendUserIdsLiveData.isInitialized() && friendUserIdsLiveData.getValue() != null) { - for (String userId : friendUserIdsLiveData.getValue()) { + List friendUserIds = friendUserIdsLiveData.getValue(); + for (String userId : friendUserIds) { pullLatestActivity(userId, activitiesResource, new ActivityFetchCallback() { @Override public void onSuccess(Activity activity) { updateFriendToActivitiesLiveData(activity, userId); + sortFriendsByUpdateTime(friendUserIds); } @Override @@ -267,22 +270,9 @@ List friendUserIds = friendUserIdsLiveData.getValue(); if (friendUserIds == null || !friendUserIds.equals(response.body())) { friendUserIdsLiveData.postValue(response.body()); - SortedSet friends = new TreeSet<>(new Friend.UpdateTimeComparator()); assert friendUserIds != null; - friendUserIds.forEach(userId -> { - List activities = getActivitiesLiveDataFromUserId(userId).getValue(); - if (activities == null || activities.isEmpty()) { - return; - } - - Activity latestActivity = activities.get(0); - friends.add(new Friend(userId, latestActivity.getUpdateTime())); - }); - - // 並び替えたフレンドのユーザーIDを順番に格納して更新する - sortedFriendUserIds.clear(); - friends.forEach(friend -> sortedFriendUserIds.add(friend.getUserId())); + sortFriendsByUpdateTime(friendUserIds); } } } @@ -294,6 +284,29 @@ }); } + /** + * ユーザのフレンドのリストを更新順で並び替える + * + * @param friendUserIds 自身のフレンドのユーザーIDのリスト + */ + private void sortFriendsByUpdateTime(List friendUserIds) { + SortedSet friends = new TreeSet<>(new Friend.UpdateTimeComparator()); + + friendUserIds.forEach(userId -> { + List activities = getActivitiesLiveDataFromUserId(userId).getValue(); + if (activities == null || activities.isEmpty()) { + return; + } + + Activity latestActivity = activities.get(0); + friends.add(new Friend(userId, latestActivity.getUpdateTime())); + }); + + // 並び替えたフレンドのユーザーIDを順番に格納して更新する + sortedFriendUserIds.clear(); + friends.forEach(friend -> sortedFriendUserIds.add(friend.getUserId())); + } + public MutableLiveData getMyLatestActivityLiveData() { return myLatestActivityLiveData; } @@ -311,6 +324,10 @@ return friendToActivitiesLiveData.get(userId); } + public Map>> getFriendToActivitiesLiveData() { + return friendToActivitiesLiveData; + } + public MutableLiveData> getFriendUserIdsLiveData() { return friendUserIdsLiveData; } @@ -355,7 +372,7 @@ public static class UpdateTimeComparator implements Comparator { @Override public int compare(Friend o1, Friend o2) { - return o1.getLatestUpdateTime().compareTo(o2.getLatestUpdateTime()); + return o2.getLatestUpdateTime().compareTo(o1.getLatestUpdateTime()); } } }