diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 0897082..639c779 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -4,6 +4,7 @@
-
diff --git a/app/src/main/java/com/example/tampopo_client/models/FriendRequest.java b/app/src/main/java/com/example/tampopo_client/models/FriendRequest.java
index 939f0b7..fdca2af 100644
--- a/app/src/main/java/com/example/tampopo_client/models/FriendRequest.java
+++ b/app/src/main/java/com/example/tampopo_client/models/FriendRequest.java
@@ -1,10 +1,33 @@
package com.example.tampopo_client.models;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
public class FriendRequest {
+
+ // Swagger では friend-request-id / sender-id / receiver-id という
+ // ハイフン区切りのプロパティ名になっているため、そのままでは
+ // Jackson が id / senderId / receiverId にマッピングできない。
+ // その結果、これらのフィールドがすべて null になり、
+ // FriendReceivedFragment 側のフィルタ
+ // myUserId.equals(f.getReceiverId())
+ // が常に false となって受信一覧が空になる不具合が発生していた。
+ //
+ // そこで @JsonProperty で JSON のプロパティ名を明示的に指定し、
+ // サーバーから受け取った値が正しくセットされるようにする。
+
+ @JsonProperty("friend-request-id")
private Integer id;
+
+ @JsonProperty("sender-id")
private String senderId;
+
+ @JsonProperty("receiver-id")
private String receiverId;
+ // Jackson 用のデフォルトコンストラクタ
+ public FriendRequest() {
+ }
+
public FriendRequest(String senderId, String receiverId) {
this.senderId = senderId;
this.receiverId = receiverId;
diff --git a/app/src/main/java/com/example/tampopo_client/views/FriendReceivedFragment.java b/app/src/main/java/com/example/tampopo_client/views/FriendReceivedFragment.java
index b5a8976..c61d818 100644
--- a/app/src/main/java/com/example/tampopo_client/views/FriendReceivedFragment.java
+++ b/app/src/main/java/com/example/tampopo_client/views/FriendReceivedFragment.java
@@ -35,6 +35,10 @@
private int mColumnCount = 1;
private Tampopo tampopo;
+ // RecyclerView のアダプタをフィールドとして保持し、データ変更時に更新通知できるようにする
+ private MyFriendRequestRecyclerViewAdapter adapter;
+ // 受信フレンド申請取得用の ViewModel(再表示時にも再利用する)
+ private FriendReceivedRequestViewModel friendReceivedRequestViewModel;
/**
* Mandatory empty constructor for the fragment manager to instantiate the
@@ -87,7 +91,10 @@
} else {
recyclerView.setLayoutManager(new GridLayoutManager(context, mColumnCount));
}
- recyclerView.setAdapter(new MyFriendRequestRecyclerViewAdapter(FriendRequestContent.ITEMS, friendViewModel, receiverId, token));
+
+ // アダプタをフィールドに保持しておき、後でデータ更新時に notifyDataSetChanged() を呼び出す
+ adapter = new MyFriendRequestRecyclerViewAdapter(FriendRequestContent.ITEMS, friendViewModel, receiverId, token);
+ recyclerView.setAdapter(adapter);
}
return view;
}
@@ -95,17 +102,50 @@
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
- FriendReceivedRequestViewModel friendReceivedRequestViewModel = new ViewModelProvider(this).get(FriendReceivedRequestViewModel.class);
+ // ViewModel はフィールドに保持しておき、onResume などからも再利用できるようにする
+ friendReceivedRequestViewModel = new ViewModelProvider(this).get(FriendReceivedRequestViewModel.class);
+
+ // 画面生成直後にも最新の受信申請を取得
friendReceivedRequestViewModel.loadReceivedRequests(tampopo.getToken());
+
friendReceivedRequestViewModel.getReceivedRequestsLiveData().observe(getViewLifecycleOwner(), new Observer>() {
- // LiveData に変更があったとき(新しい友達リクエストのリストが届いたとき)に呼ばれるメソッド
@Override
public void onChanged(List friendRequests) {
- for (FriendRequest f: friendRequests) {
- FriendRequestContent.addItem(new FriendRequestContent.FriendRequestItem(f.getSenderId(), "ユーザー名"));
+ // まず既存の一覧をクリアし、最新の内容でリストを作り直す
+ FriendRequestContent.ITEMS.clear();
+ FriendRequestContent.ITEM_MAP.clear();
+
+ if (friendRequests != null) {
+ String myUserId = tampopo != null ? tampopo.getUserId() : null;
+
+ for (FriendRequest f : friendRequests) {
+ // 自分宛て(自分が receiver )のリクエストのみを受信一覧として表示
+ if (myUserId == null || myUserId.equals(f.getReceiverId())) {
+ FriendRequestContent.addItem(
+ new FriendRequestContent.FriendRequestItem(
+ f.getSenderId(),
+ "ユーザー名" // TODO: 必要に応じて実際のユーザー名に差し替え
+ )
+ );
+ }
+ }
+ }
+
+ // データが更新されたことをRecyclerViewのアダプタに通知して画面を更新
+ if (adapter != null) {
+ adapter.notifyDataSetChanged();
}
}
});
}
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ // 「保留中」タブに戻ってきたタイミングでも、毎回最新の受信フレンド申請を取得する
+ if (tampopo != null && friendReceivedRequestViewModel != null) {
+ friendReceivedRequestViewModel.loadReceivedRequests(tampopo.getToken());
+ }
+ }
}
\ No newline at end of file