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 183e544..62ed1f3 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 @@ -45,8 +45,7 @@ private final List userActivityStatusChangeListeners; - private final List sortedFriendUserIds = new ArrayList<>(); - + private final MutableLiveData> sortedFriendUserIdsLiveData = new MutableLiveData<>(); /** * ActivityのViewModelを作成する。 @@ -117,8 +116,12 @@ public void onSuccess(Activity activity) { updateFriendToActivitiesLiveData(activity, userId); - // NOTE: 毎秒呼ばれるけど動いているので気にしない - sortFriendsByUpdateTime(friendUserIds); + // 変更があった場合、フレンドのユーザーIDを並び替えて更新する + List prevSortedFriendIds = sortedFriendUserIdsLiveData.getValue(); + List sortedFriendIds = sortFriendsByUpdateTime(friendUserIds); + if (prevSortedFriendIds == null || !prevSortedFriendIds.equals(sortedFriendIds)) { + sortedFriendUserIdsLiveData.postValue(sortedFriendIds); + } } @Override @@ -272,9 +275,14 @@ if (friendUserIds == null || !friendUserIds.equals(response.body())) { friendUserIdsLiveData.postValue(response.body()); - // NOTE: 毎秒呼ばれるけど動いているので気にしない - assert friendUserIds != null; - sortFriendsByUpdateTime(friendUserIds); + // 変更があった場合、フレンドのユーザーIDを並び替えて更新する + if (friendUserIds != null) { + List prevSortedFriendIds = sortedFriendUserIdsLiveData.getValue(); + List sortedFriendIds = sortFriendsByUpdateTime(friendUserIds); + if (prevSortedFriendIds == null || !prevSortedFriendIds.equals(sortedFriendIds)) { + sortedFriendUserIdsLiveData.postValue(sortedFriendIds); + } + } } } } @@ -291,7 +299,8 @@ * * @param friendUserIds 自身のフレンドのユーザーIDのリスト */ - private void sortFriendsByUpdateTime(List friendUserIds) { + private List sortFriendsByUpdateTime(List friendUserIds) { + List friendIds = new ArrayList<>(); SortedSet friends = new TreeSet<>(new Friend.UpdateTimeComparator()); friendUserIds.forEach(userId -> { @@ -304,9 +313,8 @@ friends.add(new Friend(userId, latestActivity.getUpdateTime())); }); - // 並び替えたフレンドのユーザーIDを順番に格納して更新する - sortedFriendUserIds.clear(); - friends.forEach(friend -> sortedFriendUserIds.add(friend.getUserId())); + friends.forEach(friend -> friendIds.add(friend.getUserId())); + return friendIds; } public MutableLiveData getMyLatestActivityLiveData() { @@ -342,8 +350,8 @@ return myToken; } - public List getSortedFriendUserIds() { - return sortedFriendUserIds; + public MutableLiveData> getSortedFriendUserIdsLiveData() { + return sortedFriendUserIdsLiveData; } public void addActivityStatusChangeObserver(UserActivityStatusChangeListener observer) {