diff --git a/app/src/main/java/com/example/tampopo_client/resources/ChatroomResource.java b/app/src/main/java/com/example/tampopo_client/resources/ChatroomResource.java index 48f8d72..16d9f3f 100644 --- a/app/src/main/java/com/example/tampopo_client/resources/ChatroomResource.java +++ b/app/src/main/java/com/example/tampopo_client/resources/ChatroomResource.java @@ -31,6 +31,10 @@ @Query("token") String token ); + // 全てのチャットルームを取得 + @GET("chat-rooms/all") + Call> getAllChatrooms(@Query("token") String token); + // メッセージを閲覧する @GET("chat-rooms/{chat-room-id}/{user-id}") Call> getMessages( diff --git a/app/src/main/java/com/example/tampopo_client/viewmodels/ChatViewModel.java b/app/src/main/java/com/example/tampopo_client/viewmodels/ChatViewModel.java index 80b1fce..91dcf63 100644 --- a/app/src/main/java/com/example/tampopo_client/viewmodels/ChatViewModel.java +++ b/app/src/main/java/com/example/tampopo_client/viewmodels/ChatViewModel.java @@ -8,13 +8,14 @@ import com.example.tampopo_client.models.ChatMessage; import com.example.tampopo_client.models.Chatroom; -import com.example.tampopo_client.models.Chatroom; import com.example.tampopo_client.resources.ChatroomResource; import java.io.IOException; import java.util.ArrayList; -import java.util.HashMap; +import java.util.HashSet; import java.util.List; +import java.util.Set; + import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -34,6 +35,7 @@ // 通話中(リアルタイム監視用) private final MutableLiveData chatFriendToMeLiveData = new MutableLiveData<>(); + private final MutableLiveData> inCallFriendIdsLiveData = new MutableLiveData<>(new ArrayList<>()); // ===== 以下は追加部分(Handlerループ) ===== @@ -89,6 +91,7 @@ }, 10_000); // 10秒後に通知 } foundChatroom(userId,token); + fetchAllChatrooms(); System.out.println(chatroomIdLiveData.getValue()); if (chatroomId != null){ loadLatestMessage(chatroomId, userId, token); @@ -120,6 +123,9 @@ return chatFriendToMeLiveData; } + public MutableLiveData> getInCallFriendIdsLiveData() { + return inCallFriendIdsLiveData; + } // =============================== @@ -185,7 +191,26 @@ }); } + private void fetchAllChatrooms() { + chatroomResource.getAllChatrooms(token).enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + if (response.isSuccessful() && response.body() != null) { + Set inCallIds = new HashSet<>(); + for (Chatroom room : response.body()) { + inCallIds.add(room.getUser0Id()); + inCallIds.add(room.getUser1Id()); + } + inCallFriendIdsLiveData.postValue(new ArrayList<>(inCallIds)); + } + } + @Override + public void onFailure(Call> call, Throwable t) { + Log.e("ChatVM", "Failed to fetch all chatrooms: " + t.getMessage()); + } + }); + } // =============================== @@ -286,4 +311,3 @@ isChecking = false; } } -// \ No newline at end of file diff --git a/app/src/main/java/com/example/tampopo_client/views/FriendIconView.java b/app/src/main/java/com/example/tampopo_client/views/FriendIconView.java index da95864..20986e5 100644 --- a/app/src/main/java/com/example/tampopo_client/views/FriendIconView.java +++ b/app/src/main/java/com/example/tampopo_client/views/FriendIconView.java @@ -31,12 +31,17 @@ private TextView mFriendComment; private TextView mFriendNickname; private ImageView mFriendChatNotification; + private TextView mFriendInCallStatus; private boolean chatNotification = false; public void setFriendUserId(String friendUserId) { this.friendUserId = friendUserId; } + public String getFriendUserId() { + return friendUserId; + } + private String friendUserId; private String friendUserNickname; private ChatViewModel chatViewModel; @@ -106,7 +111,9 @@ mFriendNickname = findViewById(R.id.friend_nickname); mFriendIcon = findViewById(R.id.friend_icon); mFriendChatNotification = findViewById(R.id.chat_notification); + mFriendInCallStatus = findViewById(R.id.friend_in_call_status); mFriendChatNotification.setVisibility(View.GONE); + mFriendInCallStatus.setVisibility(View.GONE); //mainから渡されたfriendUserNicknameがnull出なければセットする if(friendUserNickname != null){ @@ -225,6 +232,12 @@ } } + public void setInCallStatus(boolean inCall) { + if (mFriendInCallStatus != null) { + mFriendInCallStatus.setVisibility(inCall ? View.VISIBLE : View.GONE); + } + } + //アクティビティの背景(吹き出し) public void setImageResource(int resId) { if (mFriendIcon != null) { 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 f8c799b..b02eec3 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 @@ -139,6 +139,15 @@ } }); + chatViewModel.getInCallFriendIdsLiveData().observe(this, inCallFriendIds -> { + for (FriendIconView friendIconView : friendIconViewMap.values()) { + String friendId = friendIconView.getFriendUserId(); + if (friendId != null) { + friendIconView.setInCallStatus(inCallFriendIds.contains(friendId)); + } + } + }); + /* * FriendIconViewを作成して、画面に配置する */ @@ -713,6 +722,10 @@ } }).start(); } + + // FriendIconViewにfriendUserIdを取得するメソッドを追加する必要があります。 + // この例では、FriendIconViewクラスに `public String getFriendUserId() { return friendUserId; }` が追加されていると仮定します。 + } //プッシュ通知 diff --git a/app/src/main/res/drawable/in_call_background.xml b/app/src/main/res/drawable/in_call_background.xml new file mode 100644 index 0000000..53f2eb5 --- /dev/null +++ b/app/src/main/res/drawable/in_call_background.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/sample_friend_icon_view.xml b/app/src/main/res/layout/sample_friend_icon_view.xml index 0a063e9..28a45d7 100644 --- a/app/src/main/res/layout/sample_friend_icon_view.xml +++ b/app/src/main/res/layout/sample_friend_icon_view.xml @@ -7,18 +7,6 @@ android:gravity="center" android:background="@android:color/transparent" > - - - - - - - - - - - - - - - - - - - - - + + \ No newline at end of file