diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml index b268ef3..a5431bc 100644 --- a/.idea/deploymentTargetSelector.xml +++ b/.idea/deploymentTargetSelector.xml @@ -4,6 +4,14 @@ 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..b5b8c5f 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 @@ -148,13 +148,12 @@ List userActivities = userActivitiesLiveData.getValue(); + // これまでは「先頭要素と同じ activityId なら更新しない」という判定をしていたが、 + // 同じ activityId のままテキストだけ更新されるケース(編集など)の変化を拾えないため、 + // activityId に関わらず常に最新を反映するようにする。 if (userActivities == null || userActivities.isEmpty()) { userActivitiesLiveData.postValue(List.of(latestActivity)); } else { - if (userActivities.get(0).getActivityId().equals(latestActivity.getActivityId())) { - return; - } - userActivitiesLiveData.postValue(List.of(latestActivity)); } } @@ -262,15 +261,22 @@ public void onResponse(@NonNull Call> call, @NonNull Response> response) { if (response.isSuccessful()) { - // MEMO: 入れ込んだだけ - // フレンドのIDをアクティビティ更新順に並べ替える - List friendUserIds = friendUserIdsLiveData.getValue(); - if (friendUserIds == null || !friendUserIds.equals(response.body())) { - friendUserIdsLiveData.postValue(response.body()); + // サーバーから取得した最新のフレンドID一覧 + List latestFriendUserIds = response.body(); + + // 直前の値と異なる場合のみ LiveData を更新し、並び替え処理を行う + List currentFriendUserIds = friendUserIdsLiveData.getValue(); + if (currentFriendUserIds == null || !currentFriendUserIds.equals(latestFriendUserIds)) { + friendUserIdsLiveData.postValue(latestFriendUserIds); + + // フレンドのIDをアクティビティ更新順に並べ替える SortedSet friends = new TreeSet<>(new Friend.UpdateTimeComparator()); - assert friendUserIds != null; - friendUserIds.forEach(userId -> { + if (latestFriendUserIds == null) { + return; + } + + latestFriendUserIds.forEach(userId -> { List activities = getActivitiesLiveDataFromUserId(userId).getValue(); if (activities == null || activities.isEmpty()) { return; diff --git a/app/src/main/java/com/example/tampopo_client/views/MainActivity.java b/app/src/main/java/com/example/tampopo_client/views/MainActivity.java index 9911876..e4dca48 100644 --- a/app/src/main/java/com/example/tampopo_client/views/MainActivity.java +++ b/app/src/main/java/com/example/tampopo_client/views/MainActivity.java @@ -418,6 +418,15 @@ handler.post(new Runnable() { @Override public void run() { + // FriendIconView を管理マップに保存 + userViews.put(friendId, container); + + // フレンドのアクティビティ更新を監視して吹き出しテキストを更新する + MutableLiveData> liveData = + activityViewModel.getActivitiesLiveDataFromUserId(friendId); + if (liveData != null) { + liveData.observe(MainActivity.this, container.getActivitiesObserver()); + } container.setPadding(16, 16, 16, 16); container.setId(View.generateViewId());