diff --git a/app/src/main/java/com/example/tampopo_client/models/Activity.java b/app/src/main/java/com/example/tampopo_client/models/Activity.java index 7c3d626..6dcf984 100644 --- a/app/src/main/java/com/example/tampopo_client/models/Activity.java +++ b/app/src/main/java/com/example/tampopo_client/models/Activity.java @@ -13,6 +13,9 @@ this.updateTime = updateTime; } + public Activity() { + } + public String getUserId() { return userId; } 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 3df02a7..979f251 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 @@ -62,7 +62,7 @@ activitiesResource = retrofit.create(ActivitiesResource.class); userResource = retrofit.create(UserResource.class); - friendToActivitiesLiveData = Map.of(); + friendToActivitiesLiveData = new HashMap<>(); friendUserIdsLiveData = new MutableLiveData<>(List.of()); myLatestActivityLiveData = new MutableLiveData<>(null); @@ -146,9 +146,6 @@ assert userActivitiesLiveData != null; List userActivities = userActivitiesLiveData.getValue(); - if (userActivities == null) { - return; - } if (userActivities.isEmpty()) { userActivitiesLiveData.postValue(List.of(latestActivity)); @@ -263,27 +260,29 @@ @Override public void onResponse(@NonNull Call> call, @NonNull Response> response) { if (response.isSuccessful()) { - friendUserIdsLiveData.postValue(response.body()); // MEMO: 入れ込んだだけ // フレンドのIDをアクティビティ更新順に並べ替える List friendUserIds = friendUserIdsLiveData.getValue(); - SortedSet friends = new TreeSet<>(new Friend.UpdateTimeComparator()); + 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; - } + 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())); - }); + Activity latestActivity = activities.get(0); + friends.add(new Friend(userId, latestActivity.getUpdateTime())); + }); - // 並び替えたフレンドのユーザーIDを順番に格納して更新する - sortedFriendUserIds.clear(); - friends.forEach(friend -> sortedFriendUserIds.add(friend.getUserId())); + // 並び替えたフレンドのユーザーIDを順番に格納して更新する + sortedFriendUserIds.clear(); + friends.forEach(friend -> sortedFriendUserIds.add(friend.getUserId())); + } } } @@ -305,6 +304,9 @@ * @return 取得対象のユーザーのアクティビティのリストのライブデータ */ public MutableLiveData> getActivitiesLiveDataFromUserId(String userId) { + if(!friendToActivitiesLiveData.containsKey(userId)){ + friendToActivitiesLiveData.put(userId, new MutableLiveData<>()); + } return friendToActivitiesLiveData.get(userId); } 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 29af578..d75baff 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 @@ -134,14 +134,24 @@ }); for (String friendId: userViews.keySet()) { - MutableLiveData> activitiesLiveData = activityViewModel.getActivitiesLiveDataFromUserId(friendId); - activitiesLiveData.observe(this, new Observer>() { + final String updateFriendId = friendId; + MutableLiveData> activitiesLiveData = activityViewModel.getActivitiesLiveDataFromUserId(updateFriendId); + FriendIconView friendView = userViews.get(friendId); + if(friendView == null) continue; + //activitiesLiveData.observeForever(friendView); + activitiesLiveData.observeForever(new Observer>() { @Override public void onChanged(List activities) { // 更新したフレンドの再登場,更新してないフレンドの退場」 + //更新した人を見つけてFriendIconViewを呼び出して、 + FriendIconView userView = userViews.get(updateFriendId); + if (userView != null && activities != null && !activities.isEmpty()) { + Activity latest = activities.get(activities.size() - 1); + userView.setComment(latest.getText()); + } } }); - activitiesLiveData.observe(this, userViews.get(friendId)); + //activitiesLiveData.observe(this, userViews.get(friendId)); } //メイン画面から通知一覧画面への遷移 @@ -307,6 +317,8 @@ // Activity activity = entry; FriendIconView userView = userViews.get(friendId); + MutableLiveData> activitiesLiveData = activityViewModel.getActivitiesLiveDataFromUserId(friendId); + if (userView == null) { // 新しいユーザなので、アイコン+コメントを作成 @@ -341,6 +353,7 @@ // Mapに登録、画面に追加 userViews.put(friendId, container); messageList.addView(container); + activitiesLiveData.observeForever(container); // } else { // // 既に表示されている → コメントだけ更新 @@ -510,11 +523,12 @@ dialog.show(); } - +//通知を受信したときのダイアログ これが動いてます + //friendName+から通話があります。ってでるから通知が来たときのフレンドを変数に置く必要がある @Override public void onNotificationReceived() { // 通知を受信したときにダイアログを表示 - runOnUiThread(() -> showChatNotification("user01")); + runOnUiThread(() -> showChatNotification("user02")); // アイコンを赤枠に runOnUiThread(() -> highlightUserIcon("user01")); }