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);
}