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 1a3589e..f6b4111 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,7 +1,9 @@ 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,6 +18,8 @@ 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; @@ -35,6 +39,9 @@ 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; @@ -47,11 +54,25 @@ 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 { + + 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; @@ -62,6 +83,7 @@ private final List recentUpdatedFriends = new ArrayList<>(); // 最新6人 + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -166,6 +188,8 @@ } }); + messageList = findViewById(R.id.messageList); + // ボタンを押すとダイアログ表示(トリガー用) openDialogButton = findViewById(R.id.openDialogButton); openDialogButton.setOnClickListener(v -> showInputDialog()); @@ -280,39 +304,78 @@ private void updateActivityView(List friends) { ///natty ユーザごとにコメントの更新をする LinearLayout messageList = findViewById(R.id.messageList); + ConstraintLayout layout = findViewById(R.id.main); + i = 0; for (String friendId : friends) { + +// String friendId = entry.getUserId(); +// Activity activity = entry; + FriendIconView userView = userViews.get(friendId); MutableLiveData> activitiesLiveData = activityViewModel.getActivitiesLiveDataFromUserId(friendId); if (userView == null) { + // 新しいユーザなので、アイコン+コメントを作成 FriendIconView container = new FriendIconView(this); container.setPadding(16, 16, 16, 16); + container.setId(View.generateViewId()); - // ユーザのアイコン(固定) - ShapeableImageView iconView = new ShapeableImageView(this); - iconView.setLayoutParams(new LinearLayout.LayoutParams(100, 100)); - iconView.setScaleType(ImageView.ScaleType.CENTER_CROP); - iconView.setStrokeColor(ContextCompat.getColorStateList(this, R.color.red)); - iconView.setStrokeWidth(2f); - iconView.setShapeAppearanceModel( - iconView.getShapeAppearanceModel().toBuilder() - .setAllCornerSizes(50) // 丸く - .build() + ConstraintLayout.LayoutParams params = new ConstraintLayout.LayoutParams( + ConstraintLayout.LayoutParams.WRAP_CONTENT, + ConstraintLayout.LayoutParams.WRAP_CONTENT ); + container.setLayoutParams(params); - // ユーザIDに応じてアイコンリソースを決定(仮にハードコード or マッピング) - iconView.setImageResource(getUserIconResource(friendId)); // ←ここがポイント + layout.addView(container); + +// // ユーザのアイコン(固定) +// ShapeableImageView iconView = new ShapeableImageView(this); +// iconView.setLayoutParams(new LinearLayout.LayoutParams(100, 100)); +// iconView.setScaleType(ImageView.ScaleType.CENTER_CROP); +// iconView.setStrokeColor(ContextCompat.getColorStateList(this, R.color.red)); +// iconView.setStrokeWidth(2f); +// iconView.setShapeAppearanceModel( +// iconView.getShapeAppearanceModel().toBuilder() +// .setAllCornerSizes(50) // 丸く +// .build() +// ); +// +// // ユーザIDに応じてアイコンリソースを決定(仮にハードコード or マッピング) +// iconView.setImageResource(getUserIconResource(friendId)); // ←ここがポイント // Mapに登録、画面に追加 userViews.put(friendId, container); - messageList.addView(container); + userView = container; + //messageList.addView(container); // TODO: CHANGE activitiesLiveData.observeForever(container.getActivitiesObserver()); } + + 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++; + } } }