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 7712406..1cf6c18 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 @@ -185,20 +185,17 @@ // =============================== // 2. メッセージ送信 // =============================== - public void sendMessage(String chatroomId, String senderId, String message, String token, boolean isFromMainActivity) { + public void sendMessage(String chatroomId, String senderId, String message, String token) { Call call = chatroomResource.sendMessage(token, chatroomId, senderId, message); call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { if (response.isSuccessful() && response.body() != null) { ChatMessage newMessage = response.body(); - if (isFromMainActivity) { - chatFriendToMeLiveData.setValue(newMessage.getSenderId()); - } else { latestMessage.setValue(newMessage); } } - } + @Override public void onFailure(Call call, Throwable t) { diff --git a/app/src/main/java/com/example/tampopo_client/viewmodels/UserViewModel.java b/app/src/main/java/com/example/tampopo_client/viewmodels/UserViewModel.java index 1ddbd4b..15936e6 100644 --- a/app/src/main/java/com/example/tampopo_client/viewmodels/UserViewModel.java +++ b/app/src/main/java/com/example/tampopo_client/viewmodels/UserViewModel.java @@ -7,6 +7,8 @@ import com.example.tampopo_client.models.User; import com.example.tampopo_client.resources.UserResource; +import java.io.IOException; + import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -105,24 +107,55 @@ } }); } + //ニックネーム + public String getNickname(String id) { + Call call = userResource.getName(id); + try { + Response response = call.execute(); + + if (response.isSuccessful()) { + System.out.println(response.code()); + return response.body(); + } else { + System.out.println(response.code()); + return null; + } + } catch (IOException e) { + throw new RuntimeException(e); + } +// + } //アイコン - public void getIcon(String id) { + public String getIcon(String id) { Call call = userResource.getIcon(id); - call.enqueue(new Callback() { - @Override - public void onResponse(Call call, Response response) { - if (response.isSuccessful()) { - icon.setValue(response.body()); - System.out.println(response.code()); - } else { - System.out.println(response.code()); - } + try { + Response response = call.execute(); + + if (response.isSuccessful()) { + System.out.println(response.code()); + return response.body(); + } else { + System.out.println(response.code()); + return null; } - @Override public void onFailure(Call call, Throwable t) { - System.out.println("エラー: " + t.getMessage()); - } - }); + } catch (IOException e) { + throw new RuntimeException(e); + } +// call.enqueue(new Callback() { +// @Override +// public void onResponse(Call call, Response response) { +// if (response.isSuccessful()) { +// icon.setValue(response.body()); +// System.out.println(response.code()); +// } else { +// System.out.println(response.code()); +// } +// } +// @Override public void onFailure(Call call, Throwable t) { +// System.out.println("エラー: " + t.getMessage()); +// } +// }); } public void updateIcon(String id, String newIcon, String token) { 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 61ad06e..696407e 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 @@ -16,7 +16,9 @@ import com.bumptech.glide.Glide; import com.example.tampopo_client.R; +import com.example.tampopo_client.Tampopo; import com.example.tampopo_client.models.Activity; +import com.example.tampopo_client.viewmodels.ChatViewModel; import com.google.android.material.imageview.ShapeableImageView; import java.util.List; @@ -29,8 +31,8 @@ private ImageView mFriendChatNotification; private boolean chatNotification = false; private String friendActivity; - private String userId; - private String chatroomId = null; + private String friendUserId; + private ChatViewModel chatViewModel; // TODO: CHANGE //ActivityLiveData @@ -67,27 +69,28 @@ return chatObserver; } - public FriendIconView(Context context, String userId) { + public FriendIconView(Context context, String friendUserId, ChatViewModel chatViewModel) { this(context); - this.userId = userId; + this.friendUserId = friendUserId; + this.chatViewModel = chatViewModel; init(null, 0); } public FriendIconView(Context context) { super(context); - this.userId = null; + this.friendUserId = null; init(null, 0); } public FriendIconView(Context context, AttributeSet attrs) { super(context, attrs); - this.userId = null; + this.friendUserId = null; init(attrs, 0); } public FriendIconView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); - this.userId = null; + this.friendUserId = null; init(attrs, defStyle); } @@ -118,7 +121,7 @@ mFriendChatNotification.setVisibility(View.GONE); } else { // 通話をかける場合 - showCallRequestDialog(getContext(), FriendIconView.this.userId); + showCallRequestDialog(getContext(), FriendIconView.this.friendUserId); } } }); @@ -140,11 +143,15 @@ Toast.makeText(context, "通話を開始しました", Toast.LENGTH_SHORT).show(); dialog.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); - intent.putExtra("friendId", userId); - intent.putExtra("chatroomId", chatroomId); + intent.putExtra("friendId", friendUserId); +// intent.putExtra("chatroomId", chatroomId); ctx.startActivity(intent); }); @@ -162,10 +169,6 @@ } } - public void setChatroomId(String chatroomId) { - this.chatroomId = chatroomId; - } - public void setImageResource(int resId) { if (mFriendIcon != null) { mFriendIcon.setImageResource(resId); 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 20e07a1..ddfc0bd 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 @@ -108,7 +108,8 @@ // 受信した友達申請を管理する ViewModel を取得 FriendReceivedRequestViewModel friendReceivedRequestViewModel = new ViewModelProvider(this).get(FriendReceivedRequestViewModel.class); // サーバーから受信した友達リクエスト一覧をロード - friendReceivedRequestViewModel.loadReceivedRequests(tampopo.getToken()); + //tampopo.getUserIdを追加しました + friendReceivedRequestViewModel.loadReceivedRequests(tampopo.getToken(),tampopo.getUserId()); // LiveData を監視して、データが変わったら RecyclerView に反映 friendReceivedRequestViewModel.getReceivedRequestsLiveData().observe(getViewLifecycleOwner(), new Observer>() { 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 4ae89c3..f2fa84a 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 @@ -46,6 +46,7 @@ import com.example.tampopo_client.viewmodels.ChatViewModel; import com.example.tampopo_client.viewmodels.NotificationListener; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -63,11 +64,13 @@ private Map userViews = new HashMap<>(); ActivityViewModel activityViewModel; - private UserViewModel userViewModel; + UserViewModel userViewModel; Tampopo tampopo; //追加しました! private ChatViewModel chatViewModel; + private final List recentUpdatedFriends = new ArrayList<>(); // 最新6人 + @Override @@ -133,6 +136,7 @@ // }); MutableLiveData> friendsLiveData = activityViewModel.getFriendUserIdsLiveData(); + friendsLiveData.observe(this, new Observer>() { @Override public void onChanged(List friends) { @@ -144,6 +148,8 @@ for (String friendId: userViews.keySet()) { final String updateFriendId = friendId; MutableLiveData> activitiesLiveData = activityViewModel.getActivitiesLiveDataFromUserId(updateFriendId); + //MutableLiveData> activitiesLiveData = activityViewModel.getActivitiesLiveDataFromUserId(updateFriendId); + FriendIconView friendView = userViews.get(friendId); if(friendView == null) continue; //activitiesLiveData.observeForever(friendView); @@ -157,6 +163,39 @@ Activity latest = activities.get(activities.size() - 1); userView.setComment(latest.getText()); } + //アイコンとニックネーム情報をとってくる + new Thread(() -> { + String nickname = userViewModel.getNickname(updateFriendId); + String iconUrl = userViewModel.getIcon(updateFriendId); + + runOnUiThread(() -> { + if (nickname != null && !nickname.isEmpty()) { + userView.setNickname(nickname); + } else { + userView.setNickname(updateFriendId); + } + +// if (iconUrl != null && !iconUrl.isEmpty()) { +// userView.setIconUrl(iconUrl); +// } else { +// userView.setIconUrl("http://nitta-lab-www.is.konan-u.ac.jp/tampopo/images/default_icon.png"); +// } + }); + }).start(); + //フレンドの位置決め + // 最新更新フレンドをリストに追加(最大6人保持) + synchronized (recentUpdatedFriends) { + // すでに存在する場合は削除して再追加(重複防止) + recentUpdatedFriends.remove(updateFriendId); + // 先頭に追加(最近更新した人ほど前) + recentUpdatedFriends.add(0, updateFriendId); + + // 6人を超えたら古いものを削除 + if (recentUpdatedFriends.size() > 6) { + recentUpdatedFriends.remove(recentUpdatedFriends.size() - 1); + } + } + } }); //activitiesLiveData.observe(this, userViews.get(friendId)); @@ -540,7 +579,7 @@ // 通知を受信したときにダイアログを表示 runOnUiThread(() -> showChatNotification("user02")); // アイコンを赤枠に - runOnUiThread(() -> highlightUserIcon("user01")); + //runOnUiThread(() -> highlightUserIcon("user01")); } // @Override // protected void onNewIntent(Intent intent) { diff --git a/app/src/main/java/com/example/tampopo_client/views/TestFriendIconActivity.java b/app/src/main/java/com/example/tampopo_client/views/TestFriendIconActivity.java index ffb0a47..06c2cc3 100644 --- a/app/src/main/java/com/example/tampopo_client/views/TestFriendIconActivity.java +++ b/app/src/main/java/com/example/tampopo_client/views/TestFriendIconActivity.java @@ -35,7 +35,7 @@ //FriendIconView 1個目 String uid = "haru"; FriendIconView view1 = new FriendIconView(this); - view1.setAccount(uid); + //view1.setAccount(uid); FrameLayout.LayoutParams params1 = new FrameLayout.LayoutParams( (int) (250*density), // width in px (int) (250*density) // height in px