From 542e12a88b1bd0179a8861672ea4c6376aa0cf6c Mon Sep 17 00:00:00 2001 From: max Date: Thu, 11 Apr 2024 16:12:26 +0800 Subject: [PATCH] =?UTF-8?q?RTL=E9=80=82=E9=85=8D=EF=BC=9A=E6=88=BF?= =?UTF-8?q?=E9=97=B4=E7=94=A8=E6=88=B7=E5=8D=A1=E7=89=87=E5=BA=95=E9=83=A8?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E6=8C=89=E9=92=AE=E7=A7=BB=E5=8A=A8=E5=88=B0?= =?UTF-8?q?=E4=B8=8A=E9=9D=A2=E7=9A=84=E6=93=8D=E4=BD=9C=E6=8C=89=E9=92=AE?= =?UTF-8?q?=E5=8C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chwl/app/ui/widget/UserInfoDialog.java | 498 ++++++++---------- .../chwl/app/view/AutoMirroredImageView.kt | 30 ++ .../user_card_ic_clean_gift_value.png | Bin 0 -> 825 bytes .../user_card_ic_close_mic.png | Bin 0 -> 1025 bytes .../user_card_ic_down_mic_listen.png | Bin 0 -> 933 bytes .../drawable-xxhdpi/user_card_ic_lock_mic.png | Bin 0 -> 922 bytes .../user_card_ic_no_lock_mic.png | Bin 0 -> 854 bytes .../drawable-xxhdpi/user_card_ic_open_mic.png | Bin 0 -> 988 bytes app/src/main/res/layout/dialog_user_info.xml | 25 - 9 files changed, 254 insertions(+), 299 deletions(-) create mode 100644 app/src/main/java/com/chwl/app/view/AutoMirroredImageView.kt create mode 100644 app/src/main/res/drawable-xxhdpi/user_card_ic_clean_gift_value.png create mode 100644 app/src/main/res/drawable-xxhdpi/user_card_ic_close_mic.png create mode 100644 app/src/main/res/drawable-xxhdpi/user_card_ic_down_mic_listen.png create mode 100644 app/src/main/res/drawable-xxhdpi/user_card_ic_lock_mic.png create mode 100644 app/src/main/res/drawable-xxhdpi/user_card_ic_no_lock_mic.png create mode 100644 app/src/main/res/drawable-xxhdpi/user_card_ic_open_mic.png diff --git a/app/src/main/java/com/chwl/app/ui/widget/UserInfoDialog.java b/app/src/main/java/com/chwl/app/ui/widget/UserInfoDialog.java index 8b1210476..40fbd97e3 100644 --- a/app/src/main/java/com/chwl/app/ui/widget/UserInfoDialog.java +++ b/app/src/main/java/com/chwl/app/ui/widget/UserInfoDialog.java @@ -278,8 +278,7 @@ public class UserInfoDialog extends AppCompatDialog implements View.OnClickListe myUid = AuthModel.get().getCurrentUid(); - addViewItems(); - addMainAndMicBottons(); + loadButtons(); subscribe = IMNetEaseManager.get().getChatRoomEventObservable().subscribe(this::onReceiveRoomEvent); initAttentData(); initDatingData(); @@ -347,7 +346,6 @@ public class UserInfoDialog extends AppCompatDialog implements View.OnClickListe private void setMicViewVisiable(boolean isVisiable) { findViewById(R.id.recycler_view_mic).setVisibility(isVisiable ? View.VISIBLE : View.GONE); findViewById(R.id.layout_grid_button).setVisibility(isVisiable ? View.GONE : View.VISIBLE); - findViewById(R.id.ll_bottom_buttons).setVisibility(isVisiable ? View.GONE : View.VISIBLE); } private void updateAttentView() { @@ -358,7 +356,18 @@ public class UserInfoDialog extends AppCompatDialog implements View.OnClickListe isAttention ? R.drawable.icon_dialog_cancel_attent : R.drawable.icon_dialog_attent); } - private void addViewItems() { + private void loadButtons() { + if (buttons == null) { + buttons = new ArrayList<>(); + } + List items = addMainAndMicBottons(); + if (items != null) { + buttons.addAll(items); + } + addViewItems(items); + } + + private void addViewItems(List buttons) { if (ListUtils.isListEmpty(buttons)) { findViewById(R.id.layout_grid_button).setVisibility(View.GONE); return; @@ -376,6 +385,7 @@ public class UserInfoDialog extends AppCompatDialog implements View.OnClickListe item.getLayoutParams().width = itemWidth; TextView textView = item.findViewById(R.id.text); textView.setText(buttonItem.mText); + textView.setGravity(Gravity.CENTER); ImageView imageView = item.findViewById(R.id.image); imageView.setImageResource(buttonItem.imgRes); //关注按钮的处理 @@ -425,15 +435,11 @@ public class UserInfoDialog extends AppCompatDialog implements View.OnClickListe /** * 添加主页麦位操作的button */ - private void addMainAndMicBottons() { - LinearLayout llBottomButtons = findViewById(R.id.ll_bottom_buttons); - if (llBottomButtons == null) return; - llBottomButtons.removeAllViews(); + private List addMainAndMicBottons() { if (!isInRoom) { - hideBottom(); - return; + return null; } - List bottomList = getMicRelativeButtons(String.valueOf(uid)); + List bottomList = getMicRelativeButtons(String.valueOf(uid)); //如果用户在麦上,而且登录用户是管理员,则显示此按钮 if (AvRoomDataManager.get().isShowGiftValue() && AvRoomDataManager.get().isManager()) { @@ -449,63 +455,7 @@ public class UserInfoDialog extends AppCompatDialog implements View.OnClickListe } } } - if (ListUtils.isListEmpty(bottomList)) { - hideBottom(); - return; - } - for (int i = 0; i < bottomList.size(); i++) { - TextView textView = bottomList.get(i); - textView.setVisibility(View.INVISIBLE); - llBottomButtons.addView(textView); - } - llBottomButtons.post(() -> { - int parentWidth = llBottomButtons.getMeasuredWidth(); - int childCount = bottomList.size(); - if (bottomList.size() == 1) { - LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(parentWidth, - ViewGroup.LayoutParams.MATCH_PARENT); - TextView textView = bottomList.get(0); - textView.setVisibility(View.VISIBLE); - textView.setLayoutParams(params); - return; - } - int[] wrapWidth = new int[childCount]; - int childWidths = 0; - for (int i = 0; i < bottomList.size(); i++) { - TextView textView = bottomList.get(i); - int width = textView.getMeasuredWidth(); - wrapWidth[i] = width; - childWidths += width; - } - //空白是多少 - int paddingSpace = (parentWidth - childWidths) / (childCount * 2); - //剩余是多少px - int leftPx = (parentWidth - childWidths) - paddingSpace * (childCount * 2); - leftPx = leftPx / childCount; - //重新计算item的宽度 - for (int i = 0; i < childCount; i++) { - wrapWidth[i] = wrapWidth[i] + 2 * paddingSpace; - } - for (int i = 0; i < llBottomButtons.getChildCount(); i++) { - View textView = llBottomButtons.getChildAt(i); - LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(wrapWidth[i] + leftPx, - ViewGroup.LayoutParams.MATCH_PARENT); - textView.setLayoutParams(params); - textView.setVisibility(View.VISIBLE); - } - }); - - } - - private void hideBottom() { - LinearLayout llBottomButtons = findViewById(R.id.ll_bottom_buttons); - if (llBottomButtons != null) { - llBottomButtons.setVisibility(View.GONE); - } - View lineBottom = findViewById(R.id.line_bottom); - if (lineBottom != null) { - lineBottom.setVisibility(View.GONE); - } + return bottomList; } private void onReceiveRoomEvent(RoomEvent roomEvent) { @@ -786,7 +736,6 @@ public class UserInfoDialog extends AppCompatDialog implements View.OnClickListe dismiss(); break; case R.id.fl_avatar_layout: - case R.id.user_info_page_btn: UserInfoActivity.Companion.start(context, uid); dismiss(); break; @@ -846,8 +795,8 @@ public class UserInfoDialog extends AppCompatDialog implements View.OnClickListe * 不去判断用户在不在房间 * 麦位操作相关的一些操作,比如上下麦 */ - public List getMicRelativeButtons(String account) { - List buttonItems = new ArrayList<>(); + public List getMicRelativeButtons(String account) { + List buttonItems = new ArrayList<>(); final RoomInfo currentRoom = AvRoomDataManager.get().mCurrentRoomInfo; if (currentRoom == null) return buttonItems; //根据账号查询在哪个坑位 @@ -1063,7 +1012,7 @@ public class UserInfoDialog extends AppCompatDialog implements View.OnClickListe * 如果是超管点开资料卡片,隐藏 * 抱ta上麦 */ - private void handleInviteMicItem(List buttonItems) { + private void handleInviteMicItem(List buttonItems) { if (!SuperAdminUtil.isSuperAdmin() && !(AvRoomDataManager.get().isSingleRoom() && AvRoomDataManager.get().isOpenAnotherPKMode())) { buttonItems.add(createInviteMicItem()); @@ -1080,39 +1029,40 @@ public class UserInfoDialog extends AppCompatDialog implements View.OnClickListe return textView; } - private TextView createClearGiftValueItem() { - TextView textView = getTextView(getString(R.string.ui_widget_userinfodialog_013)); - - textView.setOnClickListener(v -> { - GiftValueModel.get().clearSingleMicValue(uid).subscribe(new DontWarnObserver() { - @Override - public void accept(RoomGiftValue roomGiftValue, String error) { - super.accept(roomGiftValue, error); - if (roomGiftValue == null) { - return; + private ViewItem createClearGiftValueItem() { + return new ViewItem(getString(R.string.ui_widget_userinfodialog_013), R.drawable.user_card_ic_clean_gift_value, new ViewItem.OnClickListener() { + @Override + public void onClick() { + GiftValueModel.get().clearSingleMicValue(uid).subscribe(new DontWarnObserver() { + @Override + public void accept(RoomGiftValue roomGiftValue, String error) { + super.accept(roomGiftValue, error); + if (roomGiftValue == null) { + return; + } + if (error != null) { + SingleToastUtil.showToast(error); + return; + } + SingleToastUtil.showToast(getString(R.string.ui_widget_userinfodialog_014)); + GiftValueMrg.get().updateRoomGiftValue(roomGiftValue, true); + //通知房间其他用户更新 + GiftValueMrg.get().sendRoomGiftValueMsg(roomGiftValue); } - if (error != null) { - SingleToastUtil.showToast(error); - return; - } - SingleToastUtil.showToast(getString(R.string.ui_widget_userinfodialog_014)); - GiftValueMrg.get().updateRoomGiftValue(roomGiftValue, true); - //通知房间其他用户更新 - GiftValueMrg.get().sendRoomGiftValueMsg(roomGiftValue); - } - }); - dismiss(); + }); + dismiss(); + } }); - return textView; } - private TextView createDownMicItem() { - TextView textView = getTextView(getString(R.string.ui_widget_userinfodialog_016)); - textView.setOnClickListener(v -> { - showDownMicDialog(); - dismiss(); + private ViewItem createDownMicItem() { + return new ViewItem(getString(R.string.ui_widget_userinfodialog_016), R.drawable.user_card_ic_down_mic_listen, new ViewItem.OnClickListener() { + @Override + public void onClick() { + showDownMicDialog(); + dismiss(); + } }); - return textView; } /** @@ -1211,192 +1161,192 @@ public class UserInfoDialog extends AppCompatDialog implements View.OnClickListe ); } - private TextView createBanMicItem(int micPosition) { - TextView textView = getTextView(getString(R.string.ui_widget_userinfodialog_019)); - textView.setOnClickListener(v -> { - - final RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo; - if (roomInfo == null) { - return; - } - mSuperAdminModel.roomOperate(SuperAdminModel.CLOSE_MIC).subscribe(); - homePartyModel.closeMicroPhone(micPosition, roomInfo.getUid()).subscribe(); - dismiss(); - - }); - return textView; - } - - private TextView createOpenMicItem(int micPosition) { - TextView textView = getTextView(getString(R.string.ui_widget_userinfodialog_021)); - textView.setOnClickListener(v -> { - - final RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo; - if (roomInfo == null) { - return; - } - homePartyModel.openMicroPhone(micPosition, roomInfo.getUid()).subscribe(); - dismiss(); - - }); - return textView; - } - - private TextView createLockMicItem(int micPosition) { - TextView textView = getTextView(getString(R.string.ui_widget_userinfodialog_022)); - textView.setOnClickListener(v -> { - - final RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo; - if (roomInfo == null) { - return; - } - if (AvRoomDataManager.get().isQueuingMicro()) { - SingleToastUtil.showToast(getString(R.string.ui_widget_userinfodialog_024)); - return; - } - mSuperAdminModel.roomOperate(SuperAdminModel.LOCK_MIC).subscribe(); - - homePartyModel.lockMicroPhone(micPosition, roomInfo.getUid() + "", - AuthModel.get().getTicket()).subscribe(); - dismiss(); - }); - return textView; - } - - private TextView createUnLockMicItem(int micPosition) { - TextView textView = getTextView(getString(R.string.ui_widget_userinfodialog_025)); - textView.setOnClickListener(v -> { - final RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo; - if (roomInfo == null) { - return; - } - if (AvRoomDataManager.get().isQueuingMicro()) { - SingleToastUtil.showToast(getString(R.string.ui_widget_userinfodialog_026)); - return; - } - if (AvRoomDataManager.get().isOpenPKMode()) { - SingleToastUtil.showToast(getString(R.string.ui_widget_userinfodialog_027)); - return; - } - homePartyModel.unLockMicroPhone(micPosition, roomInfo.getUid() + "", - AuthModel.get().getTicket()).subscribe(); - dismiss(); - }); - return textView; - } - - private TextView createGiveGiftMicItem() { - TextView textView = getTextView(getString(R.string.give_gift)); - textView.setOnClickListener(view -> { - GiftDialog dialog = new GiftDialog(context, uid, isInRoom, false, true); - if (giftDialogBtnClickListener != null) { - dialog.setGiftDialogBtnClickListener(giftDialogBtnClickListener); - } - dialog.show(); - dismiss(); - }); - return textView; - - } - - private TextView createInviteMicItem() { - TextView textView = getTextView(getString(R.string.ui_widget_userinfodialog_028)); - textView.setOnClickListener(v -> { - if (AvRoomDataManager.get().getChatRoomMember(String.valueOf(uid)) == null) { - SingleToastUtil.showToast(context.getString(R.string.tips_member_not_in_room)); + private ViewItem createBanMicItem(int micPosition) { + return new ViewItem(getString(R.string.ui_widget_userinfodialog_019), R.drawable.user_card_ic_close_mic, new ViewItem.OnClickListener() { + @Override + public void onClick() { + final RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo; + if (roomInfo == null) { + return; + } + mSuperAdminModel.roomOperate(SuperAdminModel.CLOSE_MIC).subscribe(); + homePartyModel.closeMicroPhone(micPosition, roomInfo.getUid()).subscribe(); dismiss(); - return; } - setMicViewVisiable(true); - RecyclerView recyclerView = findViewById(R.id.recycler_view_mic); - - UpMicAdapter adapter = new UpMicAdapter(context, uid, - position -> { - if (AvRoomDataManager.get().isLeaveMode() && uid == AvRoomDataManager.get().getRoomUid()) { - SingleToastUtil.showToast(context.getString(R.string.tips_close_leave_mode_first)); - dismiss(); - return; - } - if (isMySelf) { - RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo; - if (roomInfo == null) { - return; - } - //自己抱自己上麦 - AvRoomDataManager.get().haveStartDragon = false; - homePartyModel.upMicroPhone( - position - 1, - String.valueOf(uid), - String.valueOf(roomInfo.getRoomId()), - true, - new CallBack() { - @Override - public void onSuccess(String data) { - GiftValueMrg.get().requestUpMic(position - 1, String.valueOf(uid)); - } - - @Override - public void onFail(int code, String error) { - - } - } - ); - dismiss(); - return; - } - - String nick = null; - if (userInfo != null) { - nick = userInfo.getNick(); - - if (userInfo.getDefUser() == UserInfo.USER_TYPE_ROBOT) { - SingleToastUtil.showToast(context.getString(R.string.unable_to_up_mic_by_level)); - return; - } - } - - BaseInfo baseInfo = new BaseInfo(uid, nick); - IMNetEaseManager.get().inviteMicroPhoneBySdk(baseInfo, position - 1).subscribe(); - dismiss(); - }); - recyclerView.setLayoutManager(new GridLayoutManager(getContext(), 4)); - recyclerView.setAdapter(adapter); - }); - return textView; + } + + private ViewItem createOpenMicItem(int micPosition) { + return new ViewItem(getString(R.string.ui_widget_userinfodialog_021), R.drawable.user_card_ic_no_lock_mic, new ViewItem.OnClickListener() { + @Override + public void onClick() { + final RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo; + if (roomInfo == null) { + return; + } + homePartyModel.openMicroPhone(micPosition, roomInfo.getUid()).subscribe(); + dismiss(); + } + }); + } + + private ViewItem createLockMicItem(int micPosition) { + return new ViewItem(getString(R.string.ui_widget_userinfodialog_022), R.drawable.user_card_ic_lock_mic, new ViewItem.OnClickListener() { + @Override + public void onClick() { + final RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo; + if (roomInfo == null) { + return; + } + if (AvRoomDataManager.get().isQueuingMicro()) { + SingleToastUtil.showToast(getString(R.string.ui_widget_userinfodialog_024)); + return; + } + mSuperAdminModel.roomOperate(SuperAdminModel.LOCK_MIC).subscribe(); + + homePartyModel.lockMicroPhone(micPosition, roomInfo.getUid() + "", + AuthModel.get().getTicket()).subscribe(); + dismiss(); + } + }); + } + + private ViewItem createUnLockMicItem(int micPosition) { + return new ViewItem(getString(R.string.ui_widget_userinfodialog_025), R.drawable.user_card_ic_no_lock_mic, new ViewItem.OnClickListener() { + @Override + public void onClick() { + final RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo; + if (roomInfo == null) { + return; + } + if (AvRoomDataManager.get().isQueuingMicro()) { + SingleToastUtil.showToast(getString(R.string.ui_widget_userinfodialog_026)); + return; + } + if (AvRoomDataManager.get().isOpenPKMode()) { + SingleToastUtil.showToast(getString(R.string.ui_widget_userinfodialog_027)); + return; + } + homePartyModel.unLockMicroPhone(micPosition, roomInfo.getUid() + "", + AuthModel.get().getTicket()).subscribe(); + dismiss(); + } + }); + } + + private ViewItem createGiveGiftMicItem() { + return new ViewItem(getString(R.string.give_gift), R.drawable.icon_send_gift_ture, new ViewItem.OnClickListener() { + @Override + public void onClick() { + GiftDialog dialog = new GiftDialog(context, uid, isInRoom, false, true); + if (giftDialogBtnClickListener != null) { + dialog.setGiftDialogBtnClickListener(giftDialogBtnClickListener); + } + dialog.show(); + dismiss(); + } + }); + } + + private ViewItem createInviteMicItem() { + return new ViewItem(getString(R.string.ui_widget_userinfodialog_028), R.drawable.user_card_ic_open_mic, new ViewItem.OnClickListener() { + @Override + public void onClick() { + if (AvRoomDataManager.get().getChatRoomMember(String.valueOf(uid)) == null) { + SingleToastUtil.showToast(context.getString(R.string.tips_member_not_in_room)); + dismiss(); + return; + } + setMicViewVisiable(true); + RecyclerView recyclerView = findViewById(R.id.recycler_view_mic); + + UpMicAdapter adapter = new UpMicAdapter(context, uid, + position -> { + if (AvRoomDataManager.get().isLeaveMode() && uid == AvRoomDataManager.get().getRoomUid()) { + SingleToastUtil.showToast(context.getString(R.string.tips_close_leave_mode_first)); + dismiss(); + return; + } + if (isMySelf) { + RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo; + if (roomInfo == null) { + return; + } + //自己抱自己上麦 + AvRoomDataManager.get().haveStartDragon = false; + homePartyModel.upMicroPhone( + position - 1, + String.valueOf(uid), + String.valueOf(roomInfo.getRoomId()), + true, + new CallBack() { + @Override + public void onSuccess(String data) { + GiftValueMrg.get().requestUpMic(position - 1, String.valueOf(uid)); + } + + @Override + public void onFail(int code, String error) { + + } + } + ); + dismiss(); + return; + } + + String nick = null; + if (userInfo != null) { + nick = userInfo.getNick(); + + if (userInfo.getDefUser() == UserInfo.USER_TYPE_ROBOT) { + SingleToastUtil.showToast(context.getString(R.string.unable_to_up_mic_by_level)); + return; + } + } + + BaseInfo baseInfo = new BaseInfo(uid, nick); + IMNetEaseManager.get().inviteMicroPhoneBySdk(baseInfo, position - 1).subscribe(); + dismiss(); + }); + recyclerView.setLayoutManager(new GridLayoutManager(getContext(), 4)); + recyclerView.setAdapter(adapter); + } + }); } @SuppressLint("CheckResult") - private TextView createKickMicItem() { - TextView textView = getTextView(getString(R.string.ui_widget_userinfodialog_029)); - textView.setOnClickListener(v -> { - if (SuperAdminUtil.isSuperAdmin()) { - mSuperAdminModel.roomOperate(SuperAdminModel.TAKE_OUT_MIC, uid).subscribe(); - kickDownMicCode(); - return; - } - - if (AvRoomDataManager.get().isOnMic(uid)) { - if (AvRoomDataManager.get().isGamePlaying(uid)) { - new DialogManager(context).showOkCancelWithTitleDialog(getString(R.string.ui_widget_userinfodialog_031), - (DialogManager.LambdaOkDialogListener) () -> { - kickDownMicCode(); - dismiss(); - }); + private ViewItem createKickMicItem() { + return new ViewItem(getString(R.string.ui_widget_userinfodialog_029), R.drawable.user_card_ic_close_mic, new ViewItem.OnClickListener() { + @Override + public void onClick() { + if (SuperAdminUtil.isSuperAdmin()) { + mSuperAdminModel.roomOperate(SuperAdminModel.TAKE_OUT_MIC, uid).subscribe(); + kickDownMicCode(); return; } - if (GiftValueDialogUiHelper.get().isNeedKickDownMicDialog()) { - dismiss(); - GiftValueDialogUiHelper.get().showGiftValueDialog(context, null, - GiftValueDialogUiHelper.TYPE_KICK_DOWN_MIC, - this::kickDownMicCode); - return; + if (AvRoomDataManager.get().isOnMic(uid)) { + if (AvRoomDataManager.get().isGamePlaying(uid)) { + new DialogManager(context).showOkCancelWithTitleDialog(getString(R.string.ui_widget_userinfodialog_031), + (DialogManager.LambdaOkDialogListener) () -> { + kickDownMicCode(); + dismiss(); + }); + return; + } + + if (GiftValueDialogUiHelper.get().isNeedKickDownMicDialog()) { + dismiss(); + GiftValueDialogUiHelper.get().showGiftValueDialog(context, null, + GiftValueDialogUiHelper.TYPE_KICK_DOWN_MIC, + () -> kickDownMicCode()); + return; + } + kickDownMicCode(); } - kickDownMicCode(); } }); - return textView; } @SuppressLint("CheckResult") diff --git a/app/src/main/java/com/chwl/app/view/AutoMirroredImageView.kt b/app/src/main/java/com/chwl/app/view/AutoMirroredImageView.kt new file mode 100644 index 000000000..eaab435d3 --- /dev/null +++ b/app/src/main/java/com/chwl/app/view/AutoMirroredImageView.kt @@ -0,0 +1,30 @@ +package com.chwl.app.view + +import android.content.Context +import android.graphics.Canvas +import android.util.AttributeSet +import android.widget.ImageView + +class AutoMirroredImageView : ImageView { + constructor(context: Context?) : super(context) + constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) + constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super( + context, + attrs, + defStyleAttr + ) + + constructor( + context: Context?, + attrs: AttributeSet?, + defStyleAttr: Int, + defStyleRes: Int + ) : super(context, attrs, defStyleAttr, defStyleRes) + + override fun onDraw(canvas: Canvas?) { + if (layoutDirection == LAYOUT_DIRECTION_RTL) { + canvas?.scale(-1f, 1f, width / 2f, height / 2f) + } + super.onDraw(canvas) + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable-xxhdpi/user_card_ic_clean_gift_value.png b/app/src/main/res/drawable-xxhdpi/user_card_ic_clean_gift_value.png new file mode 100644 index 0000000000000000000000000000000000000000..b57b3300625a3a6db15f08c535d1e4e799e44be3 GIT binary patch literal 825 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r53?z4+XPOVBx&nMcT!Hle(gpvEry-%~P#Z&%Q&HSG~`+wR@kOCmsdFp@5;{T_v|9|)S|DC7* zr)~JZ`Pl#Ed;fp^{(r%a|6R-fm(TqF?9Km+cmDtU{r~W#|7#BZZ(Q*I^1c77_A@#! z{Qz{0L`jfeFa!73*H7-=*gK=#L*@OM74r&{BmLzi#krowmds>eU~=Sq(?|F`kd~Dj~d_0G4@?P3o zX&~|b?3>$qi7cnrI(~n5*yGQ4yZd#lizDA=-apjJxr6)C^8+e#Sl>Q2c^5mQXZQOV z_eIYne6_l6cji!iK{1p?sU54frjMHX$%n@QS(!o zxyyccNhc&-<~VCwt{ph}ziDVfaa>cUu-Tji^8;)mnmc(6uPdZoI3JavW9c%3X-V3` z8Xs?-8mEq}7oLm!idtdO>ebOQ@AjJ;0ox93`m4V9nYE(0Z|y;SsfWhXXGK_q$cq2) ziDSNEX%{T;RYvfTaZ=z?UDJ$LTb5cW%v;#qaVJW!_=Tdo%C^X(+98LYiQaOWbm-Fs zXHSl$3`{0Wb2+Mf*ovGycz0@@>$tgavVF(#MM`Zs-$Os>zj$K)sL?9C<&mh?!;f6H zf*-k*1wU{x3(ji2y0pQ+%R5!5P05h^Yrl2IyN;QjGdLEuaRgrgy1q&#XpU1n_v4R; zgp(ZQ7f)Nl-|%GtWy zI$7QQQApWMX}@pNX6(*P-yc>GU$bL<+MDU_?_TSEXPslK^nlNBN3z&Eg%0agkN7U{ zcx?B~VUo2`Dqrc&_pF BnGOH| literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/user_card_ic_close_mic.png b/app/src/main/res/drawable-xxhdpi/user_card_ic_close_mic.png new file mode 100644 index 0000000000000000000000000000000000000000..833b11102cb271e66f77cdda05c17931aed927bc GIT binary patch literal 1025 zcmV+c1pfPpP)2=^8fhl z|Muqp*pvUpV*m5q|LDN~;;{eHg#XED|McPi{PzFanE%y_|IBs&?$7_~#{b-%|K6ql z$7P+U;(`DG02g#pPE!C2@$2N>y_k1MAsF}B*UYG%absCeChEg<5&!@K_en%SR9M5! zncI@0Fc5|j6k+f@TkMhyR%rQC*yiCK% zh;J7a=sw4~iApq|?q^iw{UIPaDx#+YW1=!H+23pQVkcOWtT4RL@c7L2hk{N=o2F_RyV478YxoSQRY^bagyO=n>2v+>N4CC1%N zE}+L~N5UR5_)3gxez97f{n>=inq0?T6cQbz@%#2Qa-&Fb;|2se56ciBjqZpYLPX3M zV|!2xMVX_}jj?2D;~pWu_8@_nGA{)e{7%@~y)$lbx?LSy*_4T( zoZ|Ag=G99Wf1`Rfg#?4RZNj+x?G`B`JpS`le%qKJ=R7&XKX79@G9e_GMC!$334Y*`K6+YsAJ3p;hcy zasC?Lk>vGtzSv5R73vQ@>W^mX50C1Px782e>RSZrn;7cbEb1FU>RVOnn`!FXebpP1 vs#~Uto4Tso&Wao3YFqdJ!^?#iUw`}oe-O>jtmLH+00000NkvXXu0mjf>;n%P literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/user_card_ic_down_mic_listen.png b/app/src/main/res/drawable-xxhdpi/user_card_ic_down_mic_listen.png new file mode 100644 index 0000000000000000000000000000000000000000..ef7a2ef521c8dc5906a650cb35624b81707ae17a GIT binary patch literal 933 zcmV;W16urvP)D*8h6e|8LX(X3YO{)Bpef|ET2ux#|Dz`v3I&|LFMt%I^Px*#DK@|K#`o z)AIk#@Bgvq|Dodlnc)A4+W*Gw|G?}2+w}kX{{Ow||992@0IvCM0000PbW%=J01NBn z-PpaDcSt1n^Y6^4o^fMYPahc<3afChmjD0)t4TybR9M5T)aiDDFc1acVF&lE+8bLa zxUqQj{ok&HQ$1QTQI_v7WVmD|p%*rRKXV;(2nVvGjH3)1`a(2(~@8tVxfo2-d7 zu+f4&VCz|E#TxMS`mDIN(VD$h^ml>|CiPx>=)|kdGdf!QJ8xrjG=4sXE;@7R!4f@K z(w$+U2bMuMK6>Hb1DfcCd5btlPv(CGZRjP(eH022M*Cv|9h)ivbmHP$JoqkR@B)&i zx^lUw$@!AgswE?^PN9&Ze48doy3HdYg(omZvMnpHifVb0;VvtxPZVIRwAakO`oSxn zT&qpkYc3rJjDw7qq9&Cg4^VQ5Heej(=4DXG7s6yDe7E9PVk0tc3#}f7|0Z76| zL<&iG5E-ozJ~hIZO?b3~{>t^o+Acyr7TS7Ftom|75qfJBp<#`*MbZZ$eH3xt(x@du z*|#KgmGYHwZi>=t;z{Y|ab_qg!n}tMobZttJ+#Bu3iRTGUd`akBYM3>FW_*C0BvHR zZ5Ff(BrFTmN5t@c;g+|0|FEZ&~~Q7W1iP17{IH;POukeho_wo;|rOXpF>75+PB7s{Id zX>^H)#Al1KRS2|f7P~6QZ=F!mR`~SMF*}!kJ3>|UiULpd&g+{~RncX>G~I&PCig+W zN>6do5_Oeo?!dqwZcUZ^Q@=htQdD#0fpyNj_9&b7^VO-3?zrdvyL0KjoYV{3Z&ohK z4-eZcUU+hUTgk(vjn8+CSxyy(ijFTFO@ z@%7p5GhY6iYSH%KulwB}o{AFlnQK4TZP~Th{=ny#Ds1|;@n!pC-klepp4D?wqG`K{ zac0M?33c32a(qiF+r3pk?2q^Ev506i*N!yao$YviQn{+P zI)lHsuSbEhq51<>7j6!_slQVEB)Bs(F0EaeUVD5_PVk1Lf3o@IQHEdgPVav%xMosJ z=O&ggn(ozG^;Dk9w}XI_C3d*$LdUdn=RO4f=jR`pjmgw>5EMMkV)>=Zv*i z)NaUZsTBCs@QOL7Znp7sQMN>dE_JZrqTH_xSVw{c4ljcPysteo=EE(q+z_ zY9aP-iK~}v50GaMlS=q+wfs7R_D=1F?1;6inJT9HFvgrI7h^S;9K|TZR1mEnLmVx(puJW+<>yGQ~10hyS^vrUi1{yi_d_LOzM3{F6Zbj zxLN7tmZX^w*3aYjo^@~7hHn1dvo4-i-hFQqw?(Yr235A`%^O?=qC+>PN=1L4*s2me sbJ9}1XzR&GEyC~qKm7Pm|9N?N)!83bGO*8P2PS9+Pgg&ebxsLQ04?vri~s-t literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/user_card_ic_no_lock_mic.png b/app/src/main/res/drawable-xxhdpi/user_card_ic_no_lock_mic.png new file mode 100644 index 0000000000000000000000000000000000000000..4963360b6b7d0ae9eeac662a37f02aeb0e4c5ae1 GIT binary patch literal 854 zcmV-c1F8IpP)fW|B<%; z!q)%U=Ks^;|9`6gdZ+)p(*LBx|F_TooW1{pt^e@#|FO&exzPW_2E^(B000rWVu7W@e2H>(UE}#hh zpaB(eH=g%@y5od|gg}SQ?+WJPPc!Y5Iz+DHS*A7z=9+1FjvLW*z&aQy&`(y;&RTv{EsEx+1x)je+bfNrVdwwg`ze zGcbZNWAk*3qR;reUnYhIMl-^e{w^@VqSf*)8@ zMbROX{uPHf-WAU`WOStpbfj^YxN=D$;Zy}`;C_B z*1ZhL@s*e1cd(2y&jo8Q5{_wgok#J%2g@a43D!yE-B7t5#Q|7L`chPIUgGv@v+~ZQ zC90w=0a#*So~U_#k6vH}@--vMxuWKF$&!wxV}f(#E{taqMPQ}kZD5$FYiJS-599o^J-JvXk zFMo%2|IL}P3WG2dMW40ACI}7%u}C4tL0$a+&#R%UH-ntPw}zZC@7@yyJg)46oc%af zz*YiB4ICw~wVDOi=2)P!h6Og(vB1te3-lIPV6dJA_GXR*y1b-F;480D68Kh&J_Dl$ zMge?OGK!@CBdQ&O4aU;o;d z|IK&*`0fAVu>aty|J|Se&wKyNZ~yMl|JIKG)QJD|-~Z>m|K+&<vrI977kcQJvl{iyHA=NA$Iq##C{+yNZqoXwahZUN2Q9*ZBv^@hA8RRDI5h@$m z#QFxPVIW=PvWHrFOUZma)YQwJ(H@|-ft}Ou2n~#~T^ne`$o$V}X!cb|7Y%hki_y`T z{&8Q>g85s+eYBwe-?Ryu`v^QQc(|aMuK`t1oC{A~98lE15vQP>_xxpl24$KC4nf!k z{7tY0VaO5|C=nO@$aN#13lS(5i;c+vy?8DMf)mf`kt2?iN)!-oTsR?d;=&CCC9Y)w z%0Xn@k-CeI11O8aGxHP~E2LK9<5_rgG*H&xfoo7S#%#112%A~$23pK)H_&90b^|BG zX?1q8z?}mbU0!m?`6fSb!+9vLS%rk3Jdtc*@?d;Os7!$b7p{3P<;n#}C=4?389XB7 zf`f#^g%HR1Fhb_HIdfZW7zTnU^bgvHu$$;&DQbPG-QfTKxkeWVHfRJD3q4PM64qLt zogLK{Ec?rgI7+y*c&S2-`j)?PslJo;2cnRl$Xg_fZ}pF&^9BPatmTLaxd^)YQGhlK zu~t4V@ZwHB)^@0?131`IDc@?iVAfK|J2==M1YR-gpW1EO^{%o$@(=j+kT}d7xhf(G z+ZKpOT{#kfI3W2d - - - - - - -