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 93b6087..61ad06e 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 @@ -1,73 +1,98 @@ package com.example.tampopo_client.views; -import static androidx.core.content.ContextCompat.startActivity; - +import android.app.Dialog; import android.content.Context; import android.content.Intent; -import android.content.res.TypedArray; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.drawable.Drawable; -import android.text.TextPaint; import android.util.AttributeSet; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; +import android.widget.Button; import android.widget.FrameLayout; -import android.widget.ImageButton; import android.widget.ImageView; import android.widget.TextView; +import android.widget.Toast; -import androidx.activity.EdgeToEdge; import androidx.lifecycle.Observer; import com.bumptech.glide.Glide; import com.example.tampopo_client.R; import com.example.tampopo_client.models.Activity; -import com.example.tampopo_client.viewmodels.ActivityViewModel; import com.google.android.material.imageview.ShapeableImageView; import java.util.List; -import java.util.Map; -/** - * TODO: document your custom view class. - */ -public class FriendIconView extends FrameLayout implements Observer>{ - private String mExampleString; // TODO: use a default from R.string... -// private int mExampleColor = Color.RED; // TODO: use a default from R.color... - private float mExampleDimension = 0; // TODO: use a default from R.dimen... - private Drawable mExampleDrawable; - - private TextPaint mTextPaint; - private float mTextWidth; - private float mTextHeight; +public class FriendIconView extends FrameLayout { private ShapeableImageView mFriendIcon; private ImageView mFriendCommentImage; private TextView mFriendComment; private TextView mFriendNickname; private ImageView mFriendChatNotification; private boolean chatNotification = false; - private Observer> activityObserver; - String friendActivity = "123"; + private String friendActivity; + private String userId; + private String chatroomId = null; + + // TODO: CHANGE + //ActivityLiveData + private final Observer> activitiesObserver = new Observer>() { + @Override + public void onChanged(List activityList) { + if (activityList != null && !activityList.isEmpty()) { + Activity act = activityList.get(0); + friendActivity = act.getText(); + setComment(act.getUserId()); + } + } + }; + + //userLiveData + private final Observer userObserver = new Observer() { + @Override + public void onChanged(String user) { + } + }; + + //chatLiveData + private final Observer chatObserver = new Observer() { + @Override + public void onChanged(String chat) { + } + }; + + public Observer> getActivitiesObserver() { + return activitiesObserver; + } + + public Observer getChatObserver() { + return chatObserver; + } + + public FriendIconView(Context context, String userId) { + this(context); + this.userId = userId; + init(null, 0); + } + public FriendIconView(Context context) { super(context); + this.userId = null; init(null, 0); } public FriendIconView(Context context, AttributeSet attrs) { super(context, attrs); + this.userId = null; init(attrs, 0); } public FriendIconView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); + this.userId = null; init(attrs, defStyle); } private void init(AttributeSet attrs, int defStyle) { - LayoutInflater.from(getContext()).inflate(R.layout.sample_friend_icon_view,this,true); + LayoutInflater.from(getContext()).inflate(R.layout.sample_friend_icon_view, this, true); mFriendCommentImage = findViewById(R.id.friend_comment_image); mFriendComment = findViewById(R.id.friend_comment); mFriendNickname = findViewById(R.id.friend_nickname); @@ -75,64 +100,60 @@ mFriendChatNotification = findViewById(R.id.chat_notification); //true(チャット通知が来た時)なら表示 - if(chatNotification){ + if (chatNotification) { mFriendChatNotification.setVisibility(View.VISIBLE); } //false(チャット通知が来ていない)なら非表示 - else{ + else { mFriendChatNotification.setVisibility(View.GONE); } //iconを押したらチャットを始めることができる(チャットのダイアログができたらFriendActivityを変更) mFriendIcon.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { - Context ctx = getContext(); - Intent intent = new Intent(ctx, ChatActivity. class); - ctx.startActivity(intent); + if (chatNotification) { + Context ctx = getContext(); + Intent intent = new Intent(ctx, ChatActivity.class); + ctx.startActivity(intent); + mFriendChatNotification.setVisibility(View.GONE); + } else { + // 通話をかける場合 + showCallRequestDialog(getContext(), FriendIconView.this.userId); + } } }); -// if(attrs != null){ -// TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.FriendIconView, defStyle, 0); -// String nickname = a.getString(R.styleable.FriendIconView_nickname); -// if(nickname != null){ -// setNickname(nickname); -// } -// Drawable iconDrawable = a.getDrawable(R.styleable.FriendIconView_iconSrc); -// if(iconDrawable != null){ -// mFriendIcon.setImageDrawable(iconDrawable); -// } -// a.recycle(); -// } + } - // Load attributes -// final TypedArray a = getContext().obtainStyledAttributes( -// attrs, R.styleable.FriendIconView, defStyle, 0); -// -// mExampleString = a.getString( -// R.styleable.FriendIconView_exampleString); -// mExampleColor = a.getColor( -// R.styleable.FriendIconView_exampleColor, -// mExampleColor); -// // Use getDimensionPixelSize or getDimensionPixelOffset when dealing with -// // values that should fall on pixel boundaries. -// mExampleDimension = a.getDimension( -// R.styleable.FriendIconView_exampleDimension, -// mExampleDimension); -// -// if (a.hasValue(R.styleable.FriendIconView_exampleDrawable)) { -// mExampleDrawable = a.getDrawable( -// R.styleable.FriendIconView_exampleDrawable); -// mExampleDrawable.setCallback(this); -// } + 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); -// // Set up a default TextPaint object -// mTextPaint = new TextPaint(); -// mTextPaint.setFlags(Paint.ANTI_ALIAS_FLAG); -// mTextPaint.setTextAlign(Paint.Align.LEFT); -// -// // Update TextPaint and text measurements from attributes -// invalidateTextPaintAndMeasurements(); -// + // メッセージテキスト + TextView tvMessage = dialog.findViewById(R.id.tv_message); + tvMessage.setText(fromUserName + " さんと通話を開始しますか?"); + + // 開始ボタン + Button btnStart = dialog.findViewById(R.id.btn_start); + btnStart.setOnClickListener(v -> { + Toast.makeText(context, "通話を開始しました", Toast.LENGTH_SHORT).show(); + dialog.dismiss(); + + // ChatActivityに画面遷移する + Context ctx = getContext(); + Intent intent = new Intent(ctx, ChatActivity.class); + intent.putExtra("friendId", userId); + intent.putExtra("chatroomId", chatroomId); + + ctx.startActivity(intent); + }); + + // キャンセルボタン + Button btnCancel = dialog.findViewById(R.id.btn_cancel); + btnCancel.setOnClickListener(v -> dialog.dismiss()); + + dialog.show(); } public void setNickname(String nickname) { @@ -141,17 +162,22 @@ } } + public void setChatroomId(String chatroomId) { + this.chatroomId = chatroomId; + } + public void setImageResource(int resId) { if (mFriendIcon != null) { mFriendIcon.setImageResource(resId); } } - public ImageView getImageView(){ + public ImageView getImageView() { return mFriendIcon; } - public void setComment(String comment){ - if(mFriendComment != null){ + + public void setComment(String comment) { + if (mFriendComment != null) { int comment_length = comment.length(); if (comment_length > 20) { mFriendComment.setTextSize(7); @@ -166,156 +192,46 @@ // public void setActivityLiveDataObserver(String uid, ActivityViewModel viewModel){ // activityObserver = new Observer>() { - @Override - public void onChanged(List activityList) { - if(activityList != null && !activityList.isEmpty()){ - Activity act = activityList.get(0); - friendActivity = act.getText(); - setAccount(act.getUserId()); - } - } + + // TODO: CHANGE +// @Override +// public void onChanged(List activityList) { +// if (activityList != null && !activityList.isEmpty()) { +// Activity act = activityList.get(0); +// friendActivity = act.getText(); +// setAccount(act.getUserId()); +// } +// } // }; // viewModel.getActivitiesLiveDataFromUserId(uid).observeForever(activityObserver); // } - //uidを引数にカスタムビューにニックネーム,コメント,アイコンをセットする - public void setAccount(String uid){ - setNickname("haru"); - setComment((friendActivity)); - String imageUrl = "http://nitta-lab-www.is.konan-u.ac.jp/tampopo-data/icon" + uid + ".jpg"; - Glide.with(getContext()) - .load(imageUrl) - .into(getImageView()); + /** + * FriendIconViewのアイコン画像を更新する + * + * @param iconUrl アイコン画像のURL + */ + public void setIconUrl(String iconUrl) { + Glide.with(getContext()).load(iconUrl).into(getImageView()); } - public void setChatNotification(boolean chat){ + + //uidを引数にカスタムビューにニックネーム,コメント,アイコンをセットする +// public void setAccount(String uid, String iconUrl) { +// this.userId = uid; +// setNickname("nitta"); +// //String imageUrl = "http://nitta-lab-www.is.konan-u.ac.jp/tampopo-data/icon" + uid + ".jpg"; +// Glide.with(getContext()).load(iconUrl).into(getImageView()); +// } + + public void setChatNotification(boolean chat) { //チャットを終了するときのonclickで一緒にsetChatNotification(false)もする(アイコン周りの赤丸を消す) //true(チャット通知が来た時)なら表示 - if(chat){ + if (chat) { mFriendChatNotification.setVisibility(View.VISIBLE); } //false(チャット通知が来ていない)なら非表示 - else{ + else { mFriendChatNotification.setVisibility(View.GONE); } } -// private void invalidateTextPaintAndMeasurements() { -// mTextPaint.setTextSize(mExampleDimension); -// mTextPaint.setColor(mExampleColor); -// mTextWidth = mTextPaint.measureText(mExampleString); -// -// Paint.FontMetrics fontMetrics = mTextPaint.getFontMetrics(); -// mTextHeight = fontMetrics.bottom; -// } - -// @Override -// protected void onDraw(Canvas canvas) { -// super.onDraw(canvas); -// -// // TODO: consider storing these as member variables to reduce -// // allocations per draw cycle. -// int paddingLeft = getPaddingLeft(); -// int paddingTop = getPaddingTop(); -// int paddingRight = getPaddingRight(); -// int paddingBottom = getPaddingBottom(); -// -// int contentWidth = getWidth() - paddingLeft - paddingRight; -// int contentHeight = getHeight() - paddingTop - paddingBottom; -// -// // Draw the text. -// canvas.drawText(mExampleString, -// paddingLeft + (contentWidth - mTextWidth) / 2, -// paddingTop + (contentHeight + mTextHeight) / 2, -// mTextPaint); -// -// // Draw the example drawable on top of the text. -// if (mExampleDrawable != null) { -// mExampleDrawable.setBounds(paddingLeft, paddingTop, -// paddingLeft + contentWidth, paddingTop + contentHeight); -// mExampleDrawable.draw(canvas); -// } -// } - - /** - * Gets the example string attribute value. - * - * @return The example string attribute value. - */ - public String getExampleString() { - return mExampleString; - } - - /** - * Sets the view"s example string attribute value. In the example view, this string - * is the text to draw. - * - * @param exampleString The example string attribute value to use. - */ -// public void setExampleString(String exampleString) { -// mExampleString = exampleString; -// invalidateTextPaintAndMeasurements(); -// } - - /** - * Gets the example color attribute value. - * - * @return The example color attribute value. - */ -// public int getExampleColor() { -// return mExampleColor; -// } - - /** - * Sets the view"s example color attribute value. In the example view, this color - * is the font color. - * - * @param exampleColor The example color attribute value to use. - */ -// public void setExampleColor(int exampleColor) { -// mExampleColor = exampleColor; -// invalidateTextPaintAndMeasurements(); -// } - - /** - * Gets the example dimension attribute value. - * - * @return The example dimension attribute value. - */ - public float getExampleDimension() { - return mExampleDimension; - } - - /** - * Sets the view"s example dimension attribute value. In the example view, this dimension - * is the font size. - * - * @param exampleDimension The example dimension attribute value to use. - */ -// public void setExampleDimension(float exampleDimension) { -// mExampleDimension = exampleDimension; -// invalidateTextPaintAndMeasurements(); -// } - - /** - * Gets the example drawable attribute value. - * - * @return The example drawable attribute value. - */ - public Drawable getExampleDrawable() { - return mExampleDrawable; - } - - /** - * Sets the view"s example drawable attribute value. In the example view, this drawable is - * drawn above the text. - * - * @param exampleDrawable The example drawable attribute value to use. - */ - public void setExampleDrawable(Drawable exampleDrawable) { - mExampleDrawable = exampleDrawable; - } - -// @Override -// public void onChanged(List activityList) { -// activityList.get(0). -// } }