diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml index b268ef3..77e74ca 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..020765a 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 @@ -149,12 +149,25 @@ List userActivities = userActivitiesLiveData.getValue(); if (userActivities == null || userActivities.isEmpty()) { + // 初回またはこれまでアクティビティが無い場合はそのまま反映 userActivitiesLiveData.postValue(List.of(latestActivity)); } else { - if (userActivities.get(0).getActivityId().equals(latestActivity.getActivityId())) { + Activity previousLatest = userActivities.get(0); + + // activityId が同じでも、テキストや更新時刻が変わっている場合がある。 + // その場合も FriendIconView 側に変更を通知したいので、完全に同一内容のときのみスキップする。 + boolean isSameActivityId = previousLatest.getActivityId().equals(latestActivity.getActivityId()); + boolean isSameText = previousLatest.getText() != null + && previousLatest.getText().equals(latestActivity.getText()); + boolean isSameUpdateTime = previousLatest.getUpdateTime() != null + && previousLatest.getUpdateTime().equals(latestActivity.getUpdateTime()); + + if (isSameActivityId && isSameText && isSameUpdateTime) { + // サーバ側で一切変更がなければ何も通知しない return; } + // いずれかが変化していれば最新情報として LiveData を更新 userActivitiesLiveData.postValue(List.of(latestActivity)); } } 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..3b52a93 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 @@ -468,20 +468,10 @@ if (i < 6) { i++; } - - // TODO: CHANGE - activitiesLiveData.observe(MainActivity.this, activities -> { - if (activities == null || activities.isEmpty()) return; - - Activity latest = activities.get(activities.size() - 1); - - // UIスレッドで安全に更新 - FriendIconView friendView = userViews.get(friendId); - if (friendView != null) { - friendView.setComment(latest.getText()); - Log.d("ActivityUpdate", friendId + " のコメントを更新: " + latest.getText()); - } - }); + // FriendIconView 自身が持つアクティビティ監視用 Observer を利用して + // 各フレンドの最新アクティビティが更新されたタイミングで + // 吹き出しコメントが自動的に変わるようにする + activitiesLiveData.observe(MainActivity.this, container.getActivitiesObserver()); List sortedFriendUserIds = activityViewModel.getSortedFriendUserIds(); int size = sortedFriendUserIds.size();