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 08364f9..a361397 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 @@ -12,6 +12,7 @@ import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; +import java.util.Comparator; import java.util.List; import java.util.Map; @@ -40,6 +41,8 @@ private final List userActivityStatusChangeListeners; + private final List sortedFriendUserIds = new ArrayList<>(); + /** * ActivityのViewModelを作成する。 * @@ -117,9 +120,29 @@ } } - // 最新のフレンドのユーザーIDを取得して更新する if (friendUserIdsLiveData.isInitialized()) { + // 最新のフレンドのユーザーIDを取得して更新する pullLatestFriendUserIds(myUserId, myToken); + + // フレンドのIDをアクティビティ更新順に並べ替える + List friendUserIds = friendUserIdsLiveData.getValue(); + List friends = new ArrayList<>(); + + 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())); + }); + friends.sort(new Friend.UpdateTimeComparator()); + + // 並び替えたフレンドのユーザーIDを順番に格納して更新する + sortedFriendUserIds.clear(); + friends.forEach(friend -> sortedFriendUserIds.add(friend.getUserId())); } }; } @@ -238,7 +261,7 @@ * @param dateTime 変換対象の日時(文字列) * @return 変換後の日時(LocalDateTime) */ - private LocalDateTime getDateTimeFromString(String dateTime) { + private static LocalDateTime getDateTimeFromString(String dateTime) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm"); return LocalDateTime.parse(dateTime, formatter); } @@ -266,13 +289,6 @@ }); } - /** - * - */ - private void sortFriendsByLatestUpdateTime() { - - } - public MutableLiveData getMyLatestActivityLiveData() { return myLatestActivityLiveData; } @@ -299,6 +315,10 @@ return myToken; } + public List getSortedFriendUserIds() { + return sortedFriendUserIds; + } + public void addActivityStatusChangeObserver(UserActivityStatusChangeListener observer) { userActivityStatusChangeListeners.add(observer); } @@ -307,6 +327,31 @@ userActivityStatusChangeListeners.clear(); } + private static class Friend { + private final String userId; + private final LocalDateTime latestUpdateTime; + + public Friend(String userId, String latestUpdateTime) { + this.userId = userId; + this.latestUpdateTime = getDateTimeFromString(latestUpdateTime); + } + + public String getUserId() { + return userId; + } + + public LocalDateTime getLatestUpdateTime() { + return latestUpdateTime; + } + + public static class UpdateTimeComparator implements Comparator { + @Override + public int compare(Friend o1, Friend o2) { + return o1.getLatestUpdateTime().compareTo(o2.getLatestUpdateTime()); + } + } + } + private interface ActivityFetchCallback { void onSuccess(Activity activity);