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 3cff24c..dc8b43c 100644 --- a/app/src/main/java/com/example/tampopo_client/Tampopo.java +++ b/app/src/main/java/com/example/tampopo_client/Tampopo.java @@ -3,31 +3,40 @@ import android.app.Application; public class Tampopo extends Application { - private String token; - private String userId; - private String password; + private String token; + private String userId; + private String password; + private String chatroomId; - public String getToken() { - return token; - } + public String getToken() { + return token; + } - public void setToken(String token) { - this.token = token; - } + public void setToken(String token) { + this.token = token; + } - public String getUserId() { - return userId; - } + public String getUserId() { + return userId; + } - public void setUserId(String userId) { - this.userId = userId; - } + public void setUserId(String userId) { + this.userId = userId; + } - public String getPassword() { - return password; - } + public String getPassword() { + return password; + } - public void setPassword(String password) { - this.password = password; - } + public void setPassword(String password) { + this.password = password; + } + + public String getChatroomId() { + return chatroomId; + } + + public void setChatroomId(String chatroomId) { + this.chatroomId = chatroomId; + } } 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 3a854e6..427753c 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,5 @@ 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; @@ -16,7 +12,6 @@ import android.widget.EditText; import android.widget.GridView; import android.widget.ImageButton; -import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; @@ -25,13 +20,9 @@ import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; -import androidx.core.app.NotificationCompat; -import androidx.core.app.NotificationManagerCompat; import androidx.core.content.ContextCompat; -import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; -import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -39,48 +30,33 @@ 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.NotificationListener; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; import android.util.TypedValue; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.ConstraintSet; -public class MainActivity extends AppCompatActivity implements NotificationListener { +public class MainActivity extends AppCompatActivity { private EditText editMessage; private ImageButton sendButton; private GridView wordGroup; private LinearLayout messageList; - //private List friendIds = List.of(); - //アクティビティの選択肢 private String[] words = {"ひまnow", "あそぼ!", "そろそろ会いたない〜?", "勉強なう", "電話しよ~", "お風呂入ってくる~", "今暇だよー!", "いそがしい~!!"}; private Button openDialogButton; - private Map userViews = new HashMap<>(); + private int[] marginTopInDp = {90,100,300,450,480,310,1000}; private int[] marginStartInDp = {0,250,0,90,200,280,1000}; - private int i = 0; ActivityViewModel activityViewModel; UserViewModel userViewModel; Tampopo tampopo; - //追加しました! - private ChatViewModel chatViewModel; - private final List recentUpdatedFriends = new ArrayList<>(); // 最新6人 - - - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -92,9 +68,6 @@ return insets; }); - //疑似的な通知のためにchatViewModelを定義する - chatViewModel = new ViewModelProvider(this).get(ChatViewModel.class); - chatViewModel.addNotificationListener(this); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) { @@ -106,10 +79,8 @@ } } - // TODO: CHANGE userViewModel = new ViewModelProvider(this).get(UserViewModel.class); - //メイン画面からフレンド一覧画面への遷移 ImageButton friendButton = (ImageButton) findViewById(R.id.friend); friendButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { @@ -118,108 +89,70 @@ } }); - //tampopoを宣言する tampopo = (Tampopo) getApplication(); - //activityViewModelを宣言する - ActivityViewModelFactory factory = new ActivityViewModelFactory(tampopo.getUserId(), tampopo.getToken()); // Factoryを使って、引数をコンストラクタにわたしつつViewModelを作成 + ActivityViewModelFactory factory = new ActivityViewModelFactory(tampopo.getUserId(), tampopo.getToken()); activityViewModel = new ViewModelProvider(this, factory).get(ActivityViewModel.class); - //追加しました!!!!!!!!!!! - // ChatViewModelを初期化する - ChatViewModelFactory factory1 = new ChatViewModelFactory(tampopo.getUserId(), tampopo.getToken(), tampopo.getChatroomId()); - chatViewModel = new ViewModelProvider(this, factory1).get(ChatViewModel.class); - activityViewModel.getAllFriendsLatestActivitiesLiveData().observe(this, new Observer>() { @Override public void onChanged(List activities) { - updateActivityView(activities); - } - }); - - //メイン画面から設定画面への遷移 - 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); - startActivity(intent); + // ここで吹き出しの更新などを行う } }); messageList = findViewById(R.id.messageList); - - // ボタンを押すとダイアログ表示(トリガー用) openDialogButton = findViewById(R.id.openDialogButton); openDialogButton.setOnClickListener(v -> showInputDialog()); - } @Override protected void onStart() { super.onStart(); - if (activityViewModel != null) { activityViewModel.startUpdating(1L); } - if (chatViewModel != null) { - chatViewModel.startUpdating(1L); - } } @Override protected void onStop() { super.onStop(); - if (activityViewModel != null) { activityViewModel.stopUpdating(); } - if (chatViewModel != null) { - chatViewModel.stopUpdating(); - } } @Override protected void onDestroy() { super.onDestroy(); - if (activityViewModel != null) { activityViewModel.stopUpdating(); } - if (chatViewModel != null) { - chatViewModel.stopUpdating(); - } } private void showInputDialog() { - // カスタムビュー読み込み View dialogView = getLayoutInflater().inflate(R.layout.main_dialog, null); EditText editTextInput = dialogView.findViewById(R.id.editTextInput); GridView wordGrid = dialogView.findViewById(R.id.wordGrid); ImageButton sendButton = dialogView.findViewById(R.id.sendButton); - //tokenとuserIdを代入する String token = tampopo.getToken(); String userId = tampopo.getUserId(); - // 語群セット ArrayAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, words); wordGrid.setAdapter(adapter); - // 語群クリックで入力欄にセット wordGrid.setOnItemClickListener((parent, view, position, id) -> { editTextInput.setText(words[position]); - // 入力欄にフォーカス&キーボード表示 editTextInput.requestFocus(); InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); imm.showSoftInput(editTextInput, InputMethodManager.SHOW_IMPLICIT); }); - // ダイアログ生成 AlertDialog dialog = new AlertDialog.Builder(this) .setView(dialogView) .create(); - // 送信ボタン処理 sendButton.setOnClickListener(v -> { String message = editTextInput.getText().toString().trim(); int length = message.length(); @@ -236,7 +169,7 @@ openDialogButton.setLineSpacing(4.0f, 1.2f); openDialogButton.setText(message); editTextInput.setText(""); - dialog.dismiss(); // ダイアログを閉じる + dialog.dismiss(); } else { openDialogButton.setText(""); } @@ -244,118 +177,4 @@ dialog.show(); } - - //natty 仮のフレンド情報 - private int getUserIconResource(String userId) { - switch (userId) { - case "user01": - return R.drawable.friend01_icon; - case "user02": - return R.drawable.friend04_icon; - case "user03": - return R.drawable.friend03_icon; - default: - return R.drawable.default_icon; - } - } - - private void updateActivityView(List activities) { - ConstraintLayout layout = findViewById(R.id.main); - - i = 0; - for (Activity activity : activities) { - String friendId = activity.getUserId(); - - FriendIconView userView = userViews.get(friendId); - - if (userView == null) { - // 新しいユーザなので、アイコン+コメントを作成 - userView = new FriendIconView(this, friendId, "", chatViewModel); - userView.setId(View.generateViewId()); - - ConstraintLayout.LayoutParams params = new ConstraintLayout.LayoutParams( - ConstraintLayout.LayoutParams.WRAP_CONTENT, - ConstraintLayout.LayoutParams.WRAP_CONTENT - ); - userView.setLayoutParams(params); - - layout.addView(userView); - userViews.put(friendId, userView); - } - - userView.setComment(activity.getText()); - - ConstraintSet set = new ConstraintSet(); - set.clone(layout); - int marginTopInPx = (int) TypedValue.applyDimension( - TypedValue.COMPLEX_UNIT_DIP, - marginTopInDp[i], - getResources().getDisplayMetrics() - ); - int marginStartInPx = (int) TypedValue.applyDimension( - TypedValue.COMPLEX_UNIT_DIP, - marginStartInDp[i], - getResources().getDisplayMetrics() - ); - - set.connect(userView.getId(), ConstraintSet.TOP, ConstraintSet.PARENT_ID, ConstraintSet.TOP, marginTopInPx); - set.connect(userView.getId(), ConstraintSet.START, ConstraintSet.PARENT_ID, ConstraintSet.START, marginStartInPx); - - set.applyTo(layout); - - if(i < 6){ - i++; - } - } - } - - //プッシュ通知 - private void showChatNotification(String friendName) { - NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this); - - String channelId = "chat_channel"; - - NotificationCompat.Builder builder = new NotificationCompat.Builder(this, channelId) - .setSmallIcon(R.drawable.default_icon) // 通知アイコン - .setContentTitle("新しいチャット") - .setContentText(friendName + " さんから通話があります") - .setPriority(NotificationCompat.PRIORITY_HIGH) - .setAutoCancel(true); // タップしたら消える - NotificationChannel channel = new NotificationChannel( - channelId, - "Chat Notifications", - NotificationManager.IMPORTANCE_HIGH - ); - notificationManager.createNotificationChannel(channel); - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { - if (ContextCompat.checkSelfPermission( - this, - android.Manifest.permission.POST_NOTIFICATIONS - ) == PackageManager.PERMISSION_GRANTED) { - Log.d("NotificationTest", "notify() 呼ばれた!!"); - notificationManager.notify(0, builder.build()); - } else { - // 許可されていない → リクエストする - ActivityCompat.requestPermissions( - this, - new String[]{android.Manifest.permission.POST_NOTIFICATIONS}, - 1001 - ); - } - } else { - Log.d("NotificationTest", "notify() 呼ばれた!!"); - notificationManager.notify(0, builder.build()); - } - } - - //通知を受信したときのダイアログ これが動いてます - //friendName+から通話があります。ってでるから通知が来たときのフレンドを変数に置く必要がある - @Override - public void onNotificationReceived() { - // 通知を受信したときにダイアログを表示 - runOnUiThread(() -> showChatNotification("user02")); - // アイコンを赤枠に - //runOnUiThread(() -> highlightUserIcon("user01")); - } -} \ No newline at end of file +}