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 f2fa84a..1a3589e 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 @@ -1,9 +1,7 @@ package com.example.tampopo_client.views; -import android.app.Dialog; import android.app.NotificationChannel; import android.app.NotificationManager; -import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Build; @@ -18,8 +16,6 @@ import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; -import android.widget.TextView; -import android.widget.Toast; import androidx.activity.EdgeToEdge; import androidx.appcompat.app.AlertDialog; @@ -39,12 +35,12 @@ import com.example.tampopo_client.Tampopo; import com.example.tampopo_client.models.Activity; import com.example.tampopo_client.viewmodels.ActivityViewModel; -import com.example.tampopo_client.viewmodels.ChatViewModelFactory; -import com.example.tampopo_client.viewmodels.UserViewModel; -import com.google.android.material.imageview.ShapeableImageView; import com.example.tampopo_client.viewmodels.ActivityViewModelFactory; import com.example.tampopo_client.viewmodels.ChatViewModel; +import com.example.tampopo_client.viewmodels.ChatViewModelFactory; import com.example.tampopo_client.viewmodels.NotificationListener; +import com.example.tampopo_client.viewmodels.UserViewModel; +import com.google.android.material.imageview.ShapeableImageView; import java.util.ArrayList; import java.util.HashMap; @@ -52,12 +48,6 @@ import java.util.Map; public class MainActivity extends AppCompatActivity implements NotificationListener { - - private EditText editMessage; - private ImageButton sendButton; - private GridView wordGroup; - private LinearLayout messageList; - //private List friendIds = List.of(); //アクティビティの選択肢 private String[] words = {"ひまnow", "あそぼ!", "そろそろ会いたない〜?", "勉強なう", "電話しよ~", "お風呂入ってくる~", "今暇だよー!", "いそがしい~!!"}; private Button openDialogButton; @@ -72,7 +62,6 @@ private final List recentUpdatedFriends = new ArrayList<>(); // 最新6人 - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -101,8 +90,6 @@ // TODO: CHANGE userViewModel = new ViewModelProvider(this).get(UserViewModel.class); - -// handleIncomingIntent(getIntent()); //メイン画面からフレンド一覧画面への遷移 ImageButton friendButton = (ImageButton) findViewById(R.id.friend); friendButton.setOnClickListener(new View.OnClickListener() { @@ -124,17 +111,6 @@ ChatViewModelFactory factory1 = new ChatViewModelFactory(tampopo.getUserId(), tampopo.getToken(), tampopo.getChatroomId()); chatViewModel = new ViewModelProvider(this, factory1).get(ChatViewModel.class); -// MutableLiveData>friendUserIdsLiveDate = activityViewModel.getFriendUserIdsLiveData(); -// friendUserIdsLiveDate.observe(this, new Observer>() { -// @Override -// public void onChanged(List friendLive) { -// if(friendLive != null){ -// friendIds = friendLive; -// updateActivityView(activityViewModel.getActivitiesLiveData().getValue()); -// } -// } -// }); - MutableLiveData> friendsLiveData = activityViewModel.getFriendUserIdsLiveData(); friendsLiveData.observe(this, new Observer>() { @@ -145,43 +121,24 @@ } }); - for (String friendId: userViews.keySet()) { + + 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; + if (friendView == null) continue; //activitiesLiveData.observeForever(friendView); activitiesLiveData.observeForever(new Observer>() { @Override public void onChanged(List activities) { - // 更新したフレンドの再登場,更新してないフレンドの退場」 + // 更新したフレンドの再登場,更新してないフレンドの退場 //更新した人を見つけてFriendIconViewを呼び出して、 FriendIconView userView = userViews.get(updateFriendId); if (userView != null && activities != null && !activities.isEmpty()) { 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) { @@ -198,51 +155,21 @@ } }); - //activitiesLiveData.observe(this, userViews.get(friendId)); } - //メイン画面から通知一覧画面への遷移 -// ImageButton notificationButton = (ImageButton)findViewById(R.id.notification); -// notificationButton.setOnClickListener(new View.OnClickListener() { -// public void onClick(View v) { -// Intent intent = new Intent(MainActivity.this,NotificationActivity. class); -// startActivity(intent); -// } -// }); - //メイン画面から設定画面への遷移 - ImageButton settingButton = (ImageButton)findViewById(R.id.setting); + ImageButton settingButton = (ImageButton) findViewById(R.id.setting); settingButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { - Intent intent = new Intent(MainActivity.this,SettingActivity. class); + Intent intent = new Intent(MainActivity.this, SettingActivity.class); startActivity(intent); } }); - messageList = findViewById(R.id.messageList); - // ボタンを押すとダイアログ表示(トリガー用) openDialogButton = findViewById(R.id.openDialogButton); openDialogButton.setOnClickListener(v -> showInputDialog()); - // 仮データを作る(ユーザID、コメント) -// List mockActivities = new ArrayList<>(); -// mockActivities.add(new Activity("user01", "act01","ひま〜", "2025-09-25 10:00" )); -// mockActivities.add(new Activity("user02", "act02","勉強してるよ", "2025-09-25 10:01")); -// mockActivities.add(new Activity("user03", "act03","ねむい〜", "2025-09-25 10:02")); - - - // 表示を更新 -// updateActivityView(mockActivities); - - // 疑似通知ボタン chat申請後ダイアログを表示するため、それの疑似的な申請コード - //まだ動くかわからない - //Button testNotificationButton = findViewById(R.id.openDialogButton); // 既存のボタンを利用 - //testNotificationButton.setOnClickListener(v -> { - // 本来は通知を受信したタイミングで呼ばれる - // showCallRequestDialog(MainActivity.this, "user01"); - //}); - } @Override @@ -351,18 +278,10 @@ } private void updateActivityView(List friends) { - //TextView comment = this.findViewById(R.id.friend01_comment); - //for (Activity ac: activities.values()) { - // comment.setText(ac.getText()); - //} - ///natty ユーザごとにコメントの更新をする LinearLayout messageList = findViewById(R.id.messageList); for (String friendId : friends) { -// String friendId = entry.getUserId(); -// Activity activity = entry; - FriendIconView userView = userViews.get(friendId); MutableLiveData> activitiesLiveData = activityViewModel.getActivitiesLiveDataFromUserId(friendId); @@ -387,58 +306,18 @@ // ユーザIDに応じてアイコンリソースを決定(仮にハードコード or マッピング) iconView.setImageResource(getUserIconResource(friendId)); // ←ここがポイント - // コメント部分 -// TextView commentView = new TextView(this); -// commentView.setTextSize(16); -// commentView.setPadding(16, 0, 0, 0); -// commentView.setText(activity.getText()); -// -// // コンテナに追加 -// container.addView(iconView); -// container.addView(commentView); - // Mapに登録、画面に追加 userViews.put(friendId, container); messageList.addView(container); // TODO: CHANGE activitiesLiveData.observeForever(container.getActivitiesObserver()); - -// } else { -// // 既に表示されている → コメントだけ更新 -// TextView commentView = (TextView) ((LinearLayout) userView).getChildAt(1); -// commentView.setText(activity.getText()); -// } } } - } -// if (activities == null || friendIds == null) return; -// -// messageList.removeAllViews(); // 表示をリセット -// -// for (String userId : friendIds) { -// Activity activity = activities.get(userId); -// if (activity != null) { -// TextView textView = new TextView(this); -// textView.setText(activity.getText()); -// textView.setTextSize(16); -// textView.setPadding(16, 16, 16, 16); -// // 必要に応じてユーザー名なども表示できる -// messageList.addView(textView); -// } -// } - - //natty - //通知が来たときに赤丸をつける - //通知はまだできてないからいったん赤丸を表示させるっていうの書く - //この下のコードが赤丸がつくコード - //iconView.setStrokeColor(ContextCompat.getColorStateList(this, R.color.red)); //プッシュ通知 private void showChatNotification(String friendName) { -// NotificationManager notificationManager = -// (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this); String channelId = "chat_channel"; @@ -471,108 +350,13 @@ 1001 ); } -// ShapeableImageView iconView = new ShapeableImageView(this); -// iconView.setStrokeColor(ContextCompat.getColorStateList(this, R.color.black)); - } else { Log.d("NotificationTest", "notify() 呼ばれた!!"); notificationManager.notify(0, builder.build()); } - - } -// private static final int REQUEST_CODE_POST_NOTIFICATIONS = 1001; -// -// // 通知権限をチェックしてリクエストする -// private void checkAndRequestNotificationPermission() { -// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { -// // Android 13以上 → POST_NOTIFICATIONS の確認 -// if (ContextCompat.checkSelfPermission( -// this, -// android.Manifest.permission.POST_NOTIFICATIONS -// ) != PackageManager.PERMISSION_GRANTED) { -// -// ActivityCompat.requestPermissions( -// this, -// new String[]{android.Manifest.permission.POST_NOTIFICATIONS}, -// REQUEST_CODE_POST_NOTIFICATIONS -// ); -// } -// } else { -// // Android 12以下 → 権限は存在しないので説明だけ -// Toast.makeText(this, -// "通知を受け取るには端末の設定から通知を有効にしてください", -// Toast.LENGTH_LONG).show(); -// } -// } -// @Override -// public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { -// super.onRequestPermissionsResult(requestCode, permissions, grantResults); -// -// if (requestCode == REQUEST_CODE_POST_NOTIFICATIONS) { -// if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { -// Toast.makeText(this, "通知が許可されました", Toast.LENGTH_SHORT).show(); -// } else { -// Toast.makeText(this, "通知が拒否されました。設定から有効にできます", Toast.LENGTH_LONG).show(); -// } -// } -// } - private void highlightUserIcon(String userId) { - runOnUiThread(() -> { - FriendIconView container = userViews.get(userId); - if (container != null && container.getChildCount() > 0) { - View v = container.getChildAt(0); - if (v instanceof ShapeableImageView) { - ShapeableImageView icon = (ShapeableImageView) v; - icon.setStrokeColor(ContextCompat.getColorStateList(this, R.color.red)); - icon.setStrokeWidth(6f); // 太めにして目立たせる - } - } - }); } - private void clearUserIconHighlight(String userId) { - runOnUiThread(() -> { - FriendIconView container = userViews.get(userId); - if (container != null && container.getChildCount() > 0) { - View v = container.getChildAt(0); - if (v instanceof ShapeableImageView) { - ShapeableImageView icon = (ShapeableImageView) v; - icon.setStrokeWidth(0f); // 初期状態(枠なし)に戻す - } - } - }); - } - - - - //通話が来たときのダイアログ - // 通話リクエストを受け取った時に呼び出すダイアログ - 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); - - // メッセージテキスト - TextView tvMessage = dialog.findViewById(R.id.tv_message); - tvMessage.setText(fromUserName + " さんから通話リクエストが届いています。\n通話を開始しますか?"); - - // 開始ボタン - Button btnStart = dialog.findViewById(R.id.btn_start); - btnStart.setOnClickListener(v -> { - Toast.makeText(context, "通話を開始しました", Toast.LENGTH_SHORT).show(); - dialog.dismiss(); - // TODO: 実際の通話開始処理をここに書く - }); - - // キャンセルボタン - Button btnCancel = dialog.findViewById(R.id.btn_cancel); - btnCancel.setOnClickListener(v -> dialog.dismiss()); - - dialog.show(); - } -//通知を受信したときのダイアログ これが動いてます + //通知を受信したときのダイアログ これが動いてます //friendName+から通話があります。ってでるから通知が来たときのフレンドを変数に置く必要がある @Override public void onNotificationReceived() { @@ -581,21 +365,4 @@ // アイコンを赤枠に //runOnUiThread(() -> highlightUserIcon("user01")); } -// @Override -// protected void onNewIntent(Intent intent) { -// super.onNewIntent(intent); -// setIntent(intent); // 忘れずに更新 -// handleIncomingIntent(intent); -// } - -// private void handleIncomingIntent(Intent intent) { -// if (intent != null && intent.hasExtra("incoming_user_id")) { -// String incomingUserId = intent.getStringExtra("incoming_user_id"); -// if (incomingUserId != null) { -// // userIdからユーザ名を取得する処理を入れてもいいし -// showCallRequestDialog(this, incomingUserId); -// } -// } -// } - } \ No newline at end of file