diff --git a/app/src/main/java/com/example/tampopo_client/Tampopo.java b/app/src/main/java/com/example/tampopo_client/Tampopo.java index c5edc9b..5cf6ea8 100644 --- a/app/src/main/java/com/example/tampopo_client/Tampopo.java +++ b/app/src/main/java/com/example/tampopo_client/Tampopo.java @@ -17,11 +17,18 @@ private String nickname; private String icon; + @Override + public void onCreate(){ + super.onCreate(); + loadUserData(); + } + public String getToken() {return token;} public void setToken(String token) { this.token = token; + saveUserData(); } public String getUserId() { @@ -30,12 +37,14 @@ public void setUserId(String userId) { this.userId = userId; + saveUserData(); } public String getMailaddress() { return mailaddress; } public void setMailaddress(String mailaddress) { this.mailaddress = mailaddress; + saveUserData(); } @@ -46,6 +55,7 @@ public void setPassword(String password) { this.password = password; + saveUserData(); } public String getChatroomId() { @@ -54,6 +64,7 @@ public void setChatroomId(String ChatroomId) { this.chatroomId = ChatroomId; + saveUserData(); } public String getChatFriendId() { return chatFriendId; @@ -61,6 +72,7 @@ public void setChatFriendId(String ChatFriendId) { this.chatFriendId = ChatFriendId; + saveUserData(); } @@ -68,11 +80,41 @@ public void setNickname(String nickname) { this.nickname = nickname; + saveUserData(); } public String getIcon() { return icon; } public void setIcon(String icon) { this.icon = icon; + saveUserData(); + } + + // 永続的にデータを保存する + private void saveUserData() { + SharedPreferences prefs = getSharedPreferences("user_data", MODE_PRIVATE); + SharedPreferences.Editor editor = prefs.edit(); + editor.putString("token", token); + editor.putString("userId", userId); + editor.putString("password", password); + editor.putString("chatroomId", chatroomId); + editor.putString("chatFriendId", chatFriendId); + editor.putString("mailaddress", mailaddress); + editor.putString("nickname", nickname); + editor.putString("icon", icon); + editor.apply(); // 非同期で保存 + } + + // 起動時にデータを読み込む + private void loadUserData() { + SharedPreferences prefs = getSharedPreferences("user_data", MODE_PRIVATE); + token = prefs.getString("token", ""); + userId = prefs.getString("userId", ""); + password = prefs.getString("password", ""); + chatroomId = prefs.getString("chatroomId", ""); + chatFriendId = prefs.getString("chatFriendId", ""); + mailaddress = prefs.getString("mailaddress", ""); + nickname = prefs.getString("nickname", ""); + icon = prefs.getString("icon", ""); } } 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 3402974..4ea005d 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 @@ -8,15 +8,18 @@ import retrofit2.Call; import retrofit2.http.Body; import retrofit2.http.DELETE; +import retrofit2.http.Field; +import retrofit2.http.FormUrlEncoded; import retrofit2.http.GET; import retrofit2.http.Header; import retrofit2.http.POST; +import retrofit2.http.PUT; import retrofit2.http.Path; import retrofit2.http.Query; public interface ChatroomResource { - // チャットルームに入る + //チャットルームに入る @POST("chat-rooms") Call enterChatroom( @Query("user0-id") String myId, @@ -30,29 +33,39 @@ @Query("token") String token ); - - // メッセージ送信 - @POST("chat-rooms/{chatroom-id}/{user-id}/message") - Call sendMessage( - @Query("token") String token, - @Query("chatroom-id") String chatroomId, - @Query("user-id") String senderId, - @Query("message") String content - ); - - // メッセージ一覧取得 + // メッセージを閲覧する @GET("chat-rooms/{chat-room-id}/{user-id}") Call> getMessages( - @Query("token") String token, - @Query("chat-room-id") String chatroomId, - @Query("user-id") String partnerId + @Path("chat-room-id") String chatRoomId, + @Path("user-id") String userId, + @Query("token") String token ); - // チャットルーム削除 + // チャットルームの削除 @DELETE("chat-rooms/{chatroom-id}/{user-id}") Call destroyChatroom( - @Query("token") String token, - @Query("chatroom-id") String chatroomId, - @Query("user-id") String userId + @Path("chatroom-id") String chatRoomId, + @Path("user-id") String userId, + @Query("token") String token ); + + //チャットルームにユーザーを追加する + @PUT("chat-rooms/{chatroom-id}/{user-id}") + Call addChatRoomUser( + @Path("chatroom-id") String chatRoomId, + @Path("user-id") String userId, + @Query("token") String token + ); + + + //チャットルームにメッセージを追加する + @POST("chat-rooms/{chatroom-id}/{user-id}/message") + @FormUrlEncoded + Call sendMessage( + @Path("chatroom-id") String chatRoomId, + @Path("user-id") String senderId, + @Field("message") String message, + @Query("token") String token + ); + } 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 0be32fb..ee83d6a 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 @@ -20,13 +20,13 @@ public class ChatActivity extends AppCompatActivity { - private ChatViewModel chatroomViewModel; + private ChatViewModel chatViewModel; //メンバー変数 private EditText senderMessage; private EditText receiverMessage; private Button sendButton; - private Button backButton; + private ImageButton backButton; Tampopo tampopo; @@ -40,12 +40,12 @@ EdgeToEdge.enable(this);//画面の端っこまで使う(Edge-to-Edge)表示 setContentView(R.layout.activity_chat);//表示する画面のレイアウトXMLファイル(activity_chat.xml)を指定 - chatroomViewModel = new ViewModelProvider(this).get(ChatViewModel.class); + chatViewModel = new ViewModelProvider(this).get(ChatViewModel.class); senderMessage = findViewById(R.id.sender_message); receiverMessage = findViewById(R.id.receiver_message); sendButton = findViewById(R.id.send_Button); - ImageButton backButton = findViewById(R.id.back_Button); + backButton = findViewById(R.id.back_Button); receiverMessage.setKeyListener(null);//受信メッセージ編集不可 @@ -69,11 +69,11 @@ - String myId = tampopo.getUserId(); - String friendId = tampopo.getChatFriendId(); + //String myId = tampopo.getUserId(); + //String friendId = tampopo.getChatFriendId(); String chatroomId = tampopo.getChatroomId(); //String chatroomId = "0"; - String token = tampopo.getToken(); + //String token = tampopo.getToken(); // chatroomViewModel.enterChatroom(myId, friendId, token); @@ -102,15 +102,15 @@ String token = tampopo.getToken(); String chatroomId = tampopo.getChatroomId(); //String chatroomId = "0"; - chatroomViewModel.sendMessage(chatroomId, senderId, senderText, token); - senderMessage.setText(senderText);//自分のメッセージを送信欄に表示 + chatViewModel.sendMessage(chatroomId, senderId, senderText, token); + senderMessage.setText("");//自分のメッセージを送信欄に表示 } } }); //メッセージ受信 - chatroomViewModel.getLatestMessageLiveData().observe(this, chatMessage -> { + chatViewModel.getLatestMessageLiveData().observe(this, chatMessage -> { if (chatMessage != null) { String myUserId = tampopo.getUserId(); // 自分のIDを取得 String senderId = chatMessage.getSenderId(); //相手(メッセージ送信者)のIDを取得 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 fc16d0d..d289bae 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 @@ -3,6 +3,8 @@ import android.app.Dialog; import android.content.Context; import android.content.Intent; +import android.os.Handler; +import android.os.Looper; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; @@ -34,6 +36,7 @@ private String friendUserNickname; private ChatViewModel chatViewModel; + private String friendUserIconUrl; //ActivityLiveData private final Observer> activitiesObserver = new Observer>() { @Override @@ -64,11 +67,12 @@ return chatObserver; } - public FriendIconView(Context context, String friendUserId, String friendUserNickname, ChatViewModel chatViewModel) { + public FriendIconView(Context context, String friendUserId, String friendUserNickname, ChatViewModel chatViewModel, String friendUserIconUrl) { super(context); this.friendUserId = friendUserId; this.friendUserNickname = friendUserNickname; this.chatViewModel = chatViewModel; + this.friendUserIconUrl = friendUserIconUrl; init(null, 0); } @@ -99,6 +103,16 @@ mFriendChatNotification = findViewById(R.id.chat_notification); mFriendChatNotification.setVisibility(View.GONE); + //mainから渡されたfriendUserNicknameがnull出なければセットする + if(friendUserNickname != null){ + setNickname(friendUserNickname); + } + + //mainから渡されたfriendUserIconUrlがnull出なければセットする + if(friendUserIconUrl != null){ + setIconUrl(friendUserIconUrl); + } + //iconを押したらチャットを始めることができる(チャットのダイアログができたらFriendActivityを変更) mFriendIcon.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { @@ -231,7 +245,13 @@ * @param iconUrl アイコン画像のURL */ public void setIconUrl(String iconUrl) { - Glide.with(getContext()).load(iconUrl).into(getImageView()); + Handler handler = new Handler(Looper.getMainLooper()); + handler.post(new Runnable() { + @Override + public void run() { + Glide.with(getContext()).load(iconUrl).into(getImageView()); + } + }); } 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 9911876..a95bfba 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 @@ -119,6 +119,12 @@ // ChatViewModelを初期化する ChatViewModelFactory factory1 = new ChatViewModelFactory(tampopo.getUserId(), tampopo.getToken(), tampopo.getChatroomId()); chatViewModel = new ViewModelProvider(this, factory1).get(ChatViewModel.class); + chatViewModel.getChatroomIdLiveData().observe(this, new Observer() { + @Override + public void onChanged(String chatRoomId) { + tampopo.setChatroomId(chatRoomId); + } + }); MutableLiveData> friendsLiveData = activityViewModel.getFriendUserIdsLiveData(); @@ -412,7 +418,7 @@ new Thread(new Runnable() { @Override public void run() { - FriendIconView container = new FriendIconView(MainActivity.this, friendId, userViewModel.getNickname(friendId), chatViewModel); + FriendIconView container = new FriendIconView(MainActivity.this, friendId, userViewModel.getNickname(friendId), chatViewModel,userViewModel.getIcon(friendId)); Handler handler = new Handler(Looper.getMainLooper()); handler.post(new Runnable() { diff --git a/app/src/main/java/com/example/tampopo_client/views/ProfileActivity.java b/app/src/main/java/com/example/tampopo_client/views/ProfileActivity.java index b94a61b..1ac58c7 100644 --- a/app/src/main/java/com/example/tampopo_client/views/ProfileActivity.java +++ b/app/src/main/java/com/example/tampopo_client/views/ProfileActivity.java @@ -48,7 +48,10 @@ private ActivityResultLauncher launcher = registerForActivityResult(new ActivityResultContracts.OpenDocument(), new ActivityResultCallback() { @Override public void onActivityResult(Uri uri) { - if(uri == null)return; + if(uri == null){ + iconFlag = false; + return; + } ShapeableImageView changeIconButton = findViewById(R.id.changeIcon); changeIconButton.setImageURI(uri); try { @@ -105,12 +108,13 @@ } }); - EditText nicknameInput = (EditText) findViewById(R.id.nicknamebutton); + EditText nicknameInput = findViewById(R.id.nicknamebutton); nicknameInput.setText(((Tampopo) ProfileActivity.this.getApplication()).getNickname()); EditText useridInput = findViewById(R.id.idbutton); useridInput.setText(((Tampopo) ProfileActivity.this.getApplication()).getUserId()); + //IDを変更できないようにする useridInput.setEnabled(false); 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 4e9482c..0a063e9 100644 --- a/app/src/main/res/layout/sample_friend_icon_view.xml +++ b/app/src/main/res/layout/sample_friend_icon_view.xml @@ -94,6 +94,6 @@ android:layout_gravity="center_horizontal" android:layout_marginTop="-15dp" android:gravity="center" - android:text="nitta" + android:text="" android:textColor="@color/black" /> \ No newline at end of file