diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 09ad5d2..40840fd 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -61,6 +61,9 @@ + 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 4384636..3402974 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 @@ -17,42 +17,42 @@ public interface ChatroomResource { // チャットルームに入る - @POST("enterChatroom") + @POST("chat-rooms") Call enterChatroom( - @Query("myId") String myId, - @Query("partnerId") String partnerId, - @Header("Authorization") String token + @Query("user0-id") String myId, + @Query("user1-id") String partnerId, + @Query("token") String token ); //チャットルームを探す - @GET("foundChatroom") + @GET("chat-rooms") Call getMyChatroom( - @Query("EnterUserId") String userId - + @Query("user0-id") String userId, + @Query("token") String token ); // メッセージ送信 - @POST("sendMessage") + @POST("chat-rooms/{chatroom-id}/{user-id}/message") Call sendMessage( - @Header("Authorization") String token, - @Query("chatroomId") String chatroomId, - @Query("senderId") String senderId, - @Query("content") String content + @Query("token") String token, + @Query("chatroom-id") String chatroomId, + @Query("user-id") String senderId, + @Query("message") String content ); // メッセージ一覧取得 - @GET("getMessages") + @GET("chat-rooms/{chat-room-id}/{user-id}") Call> getMessages( - @Header("Authorization") String token, - @Query("chatroomId") String chatroomId, - @Query("partnerId") String partnerId + @Query("token") String token, + @Query("chat-room-id") String chatroomId, + @Query("user-id") String partnerId ); // チャットルーム削除 - @DELETE("destroyChatroom") + @DELETE("chat-rooms/{chatroom-id}/{user-id}") Call destroyChatroom( - @Header("Authorization") String token, - @Query("chatroomId") String chatroomId, - @Query("userId") String userId + @Query("token") String token, + @Query("chatroom-id") String chatroomId, + @Query("user-id") String userId ); } 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 1cf6c18..1b360d7 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 @@ -57,7 +57,7 @@ this.chatroomResource = retrofit.create(ChatroomResource.class); } - public ChatViewModel(String userId, String token,String chatroomId) { + public ChatViewModel(String userId, String token, String chatroomId) { this.userId = userId; this.token = token; this.chatroomId = chatroomId; @@ -81,19 +81,36 @@ notificationListeners.forEach(NotificationListener::onNotificationReceived); }, 10_000); // 10秒後に通知 } - foundChatroom(userId); + foundChatroom(userId,token); loadLatestMessage(chatroomId, userId, token); }; } // getter - public MutableLiveData getChatroomIdLiveData() { return chatroomIdLiveData; } - public MutableLiveData> getChatMessages() { return chatMessages; } - public MutableLiveData getLatestMessageLiveData() { return latestMessage; } - public MutableLiveData getChatroomClosed() { return chatroomClosed; } - public MutableLiveData getChatFriendToMeLiveData() { return chatFriendToMeLiveData; } - public MutableLiveData getChatToFriendLiveData() { return chatToFriendLiveData; } + public MutableLiveData getChatroomIdLiveData() { + return chatroomIdLiveData; + } + + public MutableLiveData> getChatMessages() { + return chatMessages; + } + + public MutableLiveData getLatestMessageLiveData() { + return latestMessage; + } + + public MutableLiveData getChatroomClosed() { + return chatroomClosed; + } + + public MutableLiveData getChatFriendToMeLiveData() { + return chatFriendToMeLiveData; + } + + public MutableLiveData getChatToFriendLiveData() { + return chatToFriendLiveData; + } // =============================== // 1. チャットルームに入る(かける側) @@ -117,8 +134,8 @@ } // 1.5 自分がchatroomに入っているのか確認する - public void foundChatroom(String userId) { - Call call = chatroomResource.getMyChatroom(userId); + public void foundChatroom(String userId, String token) { + Call call = chatroomResource.getMyChatroom(userId, token); call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { @@ -144,7 +161,7 @@ // 1.55 現在通話中のペアを確認 // =============================== public void fetchActiveChatPair(String userId, String token) { - Call call = chatroomResource.getMyChatroom(userId); + Call call = chatroomResource.getMyChatroom(userId, token); call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { @@ -247,6 +264,7 @@ } // ===== ここから Handlerループ部分をそのまま追記 ===== + /** * 10秒ごとにサーバー確認を行う */ @@ -277,3 +295,4 @@ isChecking = false; } } +// \ No newline at end of file diff --git a/app/src/main/java/com/example/tampopo_client/views/ChatActivity.java b/app/src/main/java/com/example/tampopo_client/views/ChatActivity.java index 37bf1b0..48ac410 100644 --- a/app/src/main/java/com/example/tampopo_client/views/ChatActivity.java +++ b/app/src/main/java/com/example/tampopo_client/views/ChatActivity.java @@ -2,6 +2,7 @@ import android.content.Intent; import android.os.Bundle; +import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; @@ -29,6 +30,8 @@ Tampopo tampopo; + + @Override protected void onCreate(Bundle savedInstanceState) { tampopo = (Tampopo)getApplication(); @@ -60,6 +63,30 @@ // } // }); + Intent intent = getIntent(); + String friendId = intent.getStringExtra("friendId"); + String chatroomId = intent.getStringExtra("chatroomId"); + + Log.d("ChatDebug", "チャット相手ID: " + friendId); + Log.d("ChatDebug", "チャットルームID: " + chatroomId); + + String myId = tampopo.getUserId(); + String token = tampopo.getToken(); + chatroomViewModel.enterChatroom(myId, friendId, token); + + if (friendId == null || friendId.isEmpty()) { + Log.e("ChatDebug","Error: friendIdがnullです"); + } + + chatroomViewModel.getChatroomIdLiveData().observe(this, id -> { + if (id != null) { + tampopo.setChatroomId(id); + System.out.println("チャットルーム作成完了! ID: " + id); + } else { + System.out.println("チャットルーム作成に失敗しました"); + } + }); + //メッセージ送信 sendButton.setOnClickListener(new OnClickListener() { //sendButtonがクリックされたときの処理 @@ -70,7 +97,7 @@ String senderId = tampopo.getUserId(); String token = tampopo.getToken(); String chatroomId = tampopo.getChatroomId(); - chatroomViewModel.sendMessage(chatroomId, senderId, senderText, token); + chatroomViewModel.sendMessage(chatroomId, senderId,senderText, token); senderMessage.setText(senderText);//自分のメッセージを送信欄に表示 } } @@ -109,3 +136,4 @@ } } +// \ 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 696407e..2d461a6 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 @@ -30,8 +30,8 @@ private TextView mFriendNickname; private ImageView mFriendChatNotification; private boolean chatNotification = false; - private String friendActivity; private String friendUserId; + private String friendUserNickname; private ChatViewModel chatViewModel; // TODO: CHANGE @@ -41,8 +41,7 @@ public void onChanged(List activityList) { if (activityList != null && !activityList.isEmpty()) { Activity act = activityList.get(0); - friendActivity = act.getText(); - setComment(act.getUserId()); + setComment(act.getText()); } } }; @@ -57,7 +56,11 @@ //chatLiveData private final Observer chatObserver = new Observer() { @Override - public void onChanged(String chat) { + public void onChanged(String fromUserId) { + if (friendUserId.equals(fromUserId)) { + chatNotification = true; + mFriendChatNotification.setVisibility(View.VISIBLE); + } } }; @@ -69,9 +72,10 @@ return chatObserver; } - public FriendIconView(Context context, String friendUserId, ChatViewModel chatViewModel) { + public FriendIconView(Context context, String friendUserId,String friendUserNickname, ChatViewModel chatViewModel) { this(context); this.friendUserId = friendUserId; + this.friendUserNickname = friendUserNickname; this.chatViewModel = chatViewModel; init(null, 0); } @@ -114,34 +118,35 @@ //iconを押したらチャットを始めることができる(チャットのダイアログができたらFriendActivityを変更) mFriendIcon.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { + //通話に出る場合 if (chatNotification) { - Context ctx = getContext(); - Intent intent = new Intent(ctx, ChatActivity.class); - ctx.startActivity(intent); - mFriendChatNotification.setVisibility(View.GONE); - } else { - // 通話をかける場合 - showCallRequestDialog(getContext(), FriendIconView.this.friendUserId); + answeringCallDialog(getContext(), FriendIconView.this.friendUserNickname); + } // 通話をかける場合 + else if(!chatNotification){ + showCallRequestDialog(getContext(), FriendIconView.this.friendUserNickname); } } }); } - public void showCallRequestDialog(Context context, String fromUserName) { - Dialog dialog = new Dialog(context); - dialog.setContentView(R.layout.dialog_chat_receved); - dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent); - dialog.getWindow().setDimAmount(0.5f); + //通話に出る際のダイアログの表示 + public void answeringCallDialog(Context context, String fromUserNickname){ + Dialog fromDialog = new Dialog(context); + fromDialog.setContentView(R.layout.dialog_chat_receved); + fromDialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent); + fromDialog.getWindow().setDimAmount(0.5f); // メッセージテキスト - TextView tvMessage = dialog.findViewById(R.id.tv_message); - tvMessage.setText(fromUserName + " さんと通話を開始しますか?"); + TextView tvMessage = fromDialog.findViewById(R.id.tv_message); + tvMessage.setText(fromUserNickname + " さんから通話リクエストが届いています。\n通話を開始しますか?"); // 開始ボタン - Button btnStart = dialog.findViewById(R.id.btn_start); + Button btnStart = fromDialog.findViewById(R.id.btn_start); btnStart.setOnClickListener(v -> { Toast.makeText(context, "通話を開始しました", Toast.LENGTH_SHORT).show(); - dialog.dismiss(); + fromDialog.dismiss(); + mFriendChatNotification.setVisibility(View.GONE);//赤丸を消す + chatNotification = false; // 通話を開始する Tampopo tampopo = (Tampopo) ((MainActivity) getContext()).getApplication(); @@ -150,25 +155,58 @@ // ChatActivityに画面遷移する Context ctx = getContext(); Intent intent = new Intent(ctx, ChatActivity.class); - intent.putExtra("friendId", friendUserId); -// intent.putExtra("chatroomId", chatroomId); - ctx.startActivity(intent); }); // キャンセルボタン - Button btnCancel = dialog.findViewById(R.id.btn_cancel); - btnCancel.setOnClickListener(v -> dialog.dismiss()); + Button btnCancel = fromDialog.findViewById(R.id.btn_cancel); + btnCancel.setOnClickListener(v -> fromDialog.dismiss()); - dialog.show(); + fromDialog.show(); } + //通話をかける際のダイアログの表示 + public void showCallRequestDialog(Context context, String toUserNickname) { + Dialog toDialog = new Dialog(context); + toDialog.setContentView(R.layout.dialog_chat_receved); + toDialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent); + toDialog.getWindow().setDimAmount(0.5f); + + // メッセージテキスト + TextView tvMessage = toDialog.findViewById(R.id.tv_message); + tvMessage.setText(toUserNickname + " さんと通話を開始しますか?"); + + // 開始ボタン + Button btnStart = toDialog.findViewById(R.id.btn_start); + btnStart.setOnClickListener(v -> { + Toast.makeText(context, "通話を開始しました", Toast.LENGTH_SHORT).show(); + toDialog.dismiss(); + + // 通話を開始する + Tampopo tampopo = (Tampopo) ((MainActivity) getContext()).getApplication(); +// String chatroomId = chatViewModel.enterChatroom(tampopo.getUserId(), friendUserId, tampopo.getToken()); + + // ChatActivityに画面遷移する + Context ctx = getContext(); + Intent intent = new Intent(ctx, ChatActivity.class); + ctx.startActivity(intent); + }); + + // キャンセルボタン + Button btnCancel = toDialog.findViewById(R.id.btn_cancel); + btnCancel.setOnClickListener(v -> toDialog.dismiss()); + + toDialog.show(); + } + + //変更されたニックネームをセット public void setNickname(String nickname) { if (mFriendNickname != null) { mFriendNickname.setText(nickname); } } + //アクティビティの背景(吹き出し) public void setImageResource(int resId) { if (mFriendIcon != null) { mFriendIcon.setImageResource(resId); @@ -179,6 +217,7 @@ return mFriendIcon; } + //アクティビティをセット public void setComment(String comment) { if (mFriendComment != null) { int comment_length = comment.length(); @@ -229,6 +268,7 @@ public void setChatNotification(boolean chat) { //チャットを終了するときのonclickで一緒にsetChatNotification(false)もする(アイコン周りの赤丸を消す) //true(チャット通知が来た時)なら表示 + chatNotification = chat; if (chat) { mFriendChatNotification.setVisibility(View.VISIBLE); }