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 494c624..918e9fc 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 @@ -19,11 +19,15 @@ import com.example.tampopo_client.R; import com.example.tampopo_client.Tampopo; import com.example.tampopo_client.viewmodels.ChatViewModel; +import com.example.tampopo_client.viewmodels.UserViewModel; import com.example.tampopo_client.viewmodels.ChatViewModelFactory; +import com.example.tampopo_client.viewmodels.ActivityViewModel; +import com.example.tampopo_client.viewmodels.ActivityViewModelFactory; public class ChatActivity extends AppCompatActivity { private ChatViewModel chatViewModel; + private ActivityViewModel activityViewModel; //メンバー変数 private EditText senderMessage; @@ -48,13 +52,31 @@ chatViewModel = new ViewModelProvider(this, factory1).get(ChatViewModel.class); chatViewModel.setChatRoomId(tampopo.getChatroomId()); + // アクティビティ更新用のViewModel(通話中の表示に利用) + ActivityViewModelFactory activityFactory = new ActivityViewModelFactory(tampopo.getUserId(), tampopo.getToken()); + activityViewModel = new ViewModelProvider(this, activityFactory).get(ActivityViewModel.class); + senderMessage = findViewById(R.id.sender_message); receiverMessage = findViewById(R.id.receiver_message); sendButton = findViewById(R.id.send_Button); backButton = findViewById(R.id.back_Button); roomId = findViewById(R.id.chat_room_id); TextView friendIdTextView = findViewById(R.id.friend_id); - friendIdTextView.setText(tampopo.getChatFriendId()); + // まずはIDを仮表示 + String friendId = tampopo.getChatFriendId(); + friendIdTextView.setText(friendId); + // 相手のニックネームを取得して表示(非同期) + new Thread(() -> { + try { + UserViewModel userViewModel = new UserViewModel(); + String nickname = userViewModel.getNickname(friendId); + if (nickname != null && !nickname.isEmpty()) { + runOnUiThread(() -> friendIdTextView.setText(nickname)); + } + } catch (Exception e) { + Log.e("ChatDebug", "ニックネーム取得に失敗", e); + } + }).start(); receiverMessage.setKeyListener(null);//受信メッセージ編集不可 // buttonSend.setOnClickListener(new OnClickListener() { @@ -157,5 +179,27 @@ chatViewModel.startUpdating(1L); } + // チャット開始時に自分と相手のアクティビティへ「通話中」を設定する + // 備考: サーバの認可仕様によっては相手ユーザーのアクティビティ更新が拒否される場合があります。 + // その場合でも少なくとも自分側は「通話中」に更新されます。 + try { + if (activityViewModel != null && tampopo != null) { + String me = tampopo.getUserId(); + String friend = tampopo.getChatFriendId(); + String token = tampopo.getToken(); + + if (me != null && token != null) { + activityViewModel.createActivity(me, token, "通話中"); + } + + if (friend != null && token != null) { + // 相手側のアクティビティも可能なら更新(権限があれば反映される) + activityViewModel.createActivity(friend, token, "通話中"); + } + } + } catch (Exception e) { + Log.e("ChatDebug", "通話中ステータス更新に失敗", e); + } + } }