[Modify]声音卡点击返回键时的弹窗

This commit is contained in:
wushaocheng
2023-01-13 01:37:01 +08:00
parent da012b004a
commit f0a08a7fa3
6 changed files with 249 additions and 14 deletions

View File

@@ -23,7 +23,7 @@ import com.yizhuan.erban.audio.viewmodel.SoundViewModel
import com.yizhuan.erban.base.BaseViewBindingActivity
import com.yizhuan.erban.common.widget.dialog.DialogManager.OkCancelDialogListener
import com.yizhuan.erban.databinding.ActivitySoundSignatureBinding
import com.yizhuan.erban.ui.widget.dialog.CommonTipDialog
import com.yizhuan.erban.ui.widget.dialog.CommonDialog
import com.yizhuan.xchat_android_core.file.FileModel
import com.yizhuan.xchat_android_core.room.model.AvRoomModel
import com.yizhuan.xchat_android_core.statistic.StatisticManager
@@ -152,6 +152,7 @@ class SoundSignatureActivity : BaseViewBindingActivity<ActivitySoundSignatureBin
ResUtil.getString(R.string.audio_presenter_recordingvoicepresenter_02)
)
refreshButtonView(SoundViewModel.STATE_RECORD_SAVE_SUCCESS)
soundViewModel.audioState = SoundViewModel.STATE_RECORD_SAVE_SUCCESS
SingleToastUtil.showToast(getString(R.string.update_success))
val intent = Intent()
intent.putExtra(AUDIO_FILE, soundViewModel.audioUrl)
@@ -172,6 +173,34 @@ class SoundSignatureActivity : BaseViewBindingActivity<ActivitySoundSignatureBin
soundViewModel.showNormalState()
}
soundViewModel.showSaveConfirmDialogLiveData.observe(this) {
CommonDialog(this).apply {
setTipMsg(ResUtil.getString(R.string.sound_has_not_been_saved))
setOnActionListener(
object : CommonDialog.OnActionListener {
override fun onOk() {
finishView(null)
}
}
)
show()
}
}
soundViewModel.showRecordConfirmDialogLiveData.observe(this) {
CommonDialog(this).apply {
setTipMsg(ResUtil.getString(R.string.sound_has_not_been_recorded_yet))
setOnActionListener(
object : CommonDialog.OnActionListener {
override fun onOk() {
finishView(null)
}
}
)
show()
}
}
}
private fun showLoad() {
@@ -205,7 +234,7 @@ class SoundSignatureActivity : BaseViewBindingActivity<ActivitySoundSignatureBin
}
}
return
}else {
} else {
soundViewModel.clickCenterIcon()
}
}
@@ -222,17 +251,17 @@ class SoundSignatureActivity : BaseViewBindingActivity<ActivitySoundSignatureBin
}
private fun deleteRecord() {
val tipDialog = CommonTipDialog(this)
tipDialog.setTipMsg(ResUtil.getString(R.string.sure_to_delete_sound))
tipDialog.setOkText(getString(R.string.sure))
tipDialog.setOnActionListener(
object : CommonTipDialog.OnActionListener {
override fun onOk() {
soundViewModel.deleteRecord()
CommonDialog(this).apply {
setTipMsg(ResUtil.getString(R.string.sure_to_delete_sound))
setOnActionListener(
object : CommonDialog.OnActionListener {
override fun onOk() {
soundViewModel.deleteRecord()
}
}
}
)
tipDialog.show()
)
show()
}
}
/**

View File

@@ -10,10 +10,12 @@ import com.yizhuan.erban.R
import com.yizhuan.erban.audio.SoundSignatureActivity
import com.yizhuan.erban.audio.helper.AudioPlayerHelper
import com.yizhuan.erban.audio.helper.OnPlayListener
import com.yizhuan.erban.audio.presenter.RecordingVoicePresenter
import com.yizhuan.erban.base.BaseViewModel
import com.yizhuan.xchat_android_core.audio.AudioPlayAndRecordManager
import com.yizhuan.xchat_android_core.manager.AvRoomDataManager
import com.yizhuan.xchat_android_core.sound.model.SoundModel
import com.yizhuan.xchat_android_core.utils.Logger
import com.yizhuan.xchat_android_core.utils.toast
import com.yizhuan.xchat_android_library.common.application.BaseApp
import com.yizhuan.xchat_android_library.utils.ResUtil
@@ -75,6 +77,12 @@ class SoundViewModel : BaseViewModel() {
private val _deleteRecordLiveData = MutableLiveData<String?>()
val deleteRecordLiveData: MutableLiveData<String?> = _deleteRecordLiveData
private val _showSaveConfirmDialogLiveData = MutableLiveData<String?>()
val showSaveConfirmDialogLiveData: MutableLiveData<String?> = _showSaveConfirmDialogLiveData
private val _showRecordConfirmDialogLiveData = MutableLiveData<String?>()
val showRecordConfirmDialogLiveData: MutableLiveData<String?> = _showRecordConfirmDialogLiveData
init {
audioManager = AudioPlayAndRecordManager.getInstance()
}
@@ -87,6 +95,7 @@ class SoundViewModel : BaseViewModel() {
STATE_RECORD_NORMAL -> startRecord() // 默认状态,点击了中间按钮:开始录音
STATE_RECORD_RECORDING -> stopRecord() // 录制中状态,点击了中间按钮:停止录音
STATE_RECORD_SUCCESS -> clickAudition() // 试听状态,点击了中间按钮:试听声音
STATE_RECORD_SAVE_SUCCESS -> clickAudition() //保存成功,点击了中间按钮:试听声音
}
}
@@ -238,14 +247,18 @@ class SoundViewModel : BaseViewModel() {
AudioPlayerHelper.get().endPlay()
_refreshPlayStatusLiveData.value = false // 返回页面时,此时正在播放声音,则停止播放并显示停止状态(播放按钮)
}
_finishViewLiveData.value = null// 退出页面
if (audioState == STATE_RECORD_SUCCESS) { // 已经录制未保存:未保存提示(确定则返回页面/取消则保留当前页面)
_showSaveConfirmDialogLiveData.value = null
} else {
_finishViewLiveData.value = null// 退出页面
}
}
/**
* 试听按钮
*/
private fun clickAudition() {
if (audioState == STATE_RECORD_SUCCESS) {
if (audioState == STATE_RECORD_SUCCESS || audioState == STATE_RECORD_SAVE_SUCCESS || audioState == STATE_RECORD_AUDIT_SUCCESS) {
if (AudioPlayerHelper.get().isPlaying) {
AudioPlayerHelper.get().pausePlay()
_refreshPlayStatusLiveData.value = false// 点击试听按钮此时正在播放声音,则暂停播放并显示停止状态(播放按钮)

View File

@@ -0,0 +1,123 @@
package com.yizhuan.erban.ui.widget.dialog;
import android.content.Context;
import android.os.Bundle;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.style.AbsoluteSizeSpan;
import android.text.style.StyleSpan;
import android.widget.TextView;
import androidx.annotation.ColorRes;
import com.yizhuan.erban.R;
import com.yizhuan.xchat_android_core.utils.TextUtils;
import com.yizhuan.xchat_android_library.utils.ResUtil;
import static android.graphics.Typeface.BOLD;
/**
* @author jack
* @Description
* @Date 2019/1/21
*/
public class CommonDialog extends BaseDialog {
private String tipMsg = "";
private String okText = ResUtil.getString(R.string.widget_dialog_commontipdialog_01);
private String cancelText = ResUtil.getString(R.string.widget_dialog_commontipdialog_02);
private boolean isBold;
private @ColorRes
int color = -1;
private int textSize = -1;
public CommonDialog(Context context) {
super(context, R.style.dialog);
init();
}
private void init() {
this.setCancelable(true);
this.setCanceledOnTouchOutside(true);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_common_dialog);
TextView tip = findViewById(R.id.message);
tip.setText(tipMsg);
if (color != -1) {
tip.setTextColor(getContext().getResources().getColor(color));
}
SpannableStringBuilder builder = new SpannableStringBuilder(tipMsg);
if (textSize != -1) {
AbsoluteSizeSpan sizeSpan = new AbsoluteSizeSpan(textSize);
builder.setSpan(sizeSpan, 0, builder.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);
}
if (isBold) {
StyleSpan boldSpan = new StyleSpan(BOLD);
builder.setSpan(boldSpan, 0, builder.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);
}
tip.setText(builder);
TextView ok = findViewById(R.id.btn_ok);
ok.setText(okText);
ok.setOnClickListener(v -> {
this.dismiss();
if (l != null) {
l.onOk();
}
});
TextView cancel = findViewById(R.id.btn_cancel);
cancel.setText(cancelText);
cancel.setOnClickListener(v -> {
this.dismiss();
if (l != null) {
l.onCancel();
}
});
}
public void setTipMsg(String tipMsg) {
this.tipMsg = tipMsg;
}
public void setBold(boolean isBold) {
this.isBold = isBold;
}
public void setTextColor(@ColorRes int color) {
this.color = color;
}
public void setTextSize(int textSize) {
this.textSize = textSize;
}
private OnActionListener l;
public void setOkText(String okText) {
if (!TextUtils.isEmptyText(okText))
this.okText = okText;
}
public void setCancelText(String cancelText) {
if (!TextUtils.isEmptyText(cancelText))
this.cancelText = cancelText;
}
public void setOnActionListener(OnActionListener l) {
this.l = l;
}
public interface OnActionListener {
default void onOk() {
}
default void onCancel() {
}
}
}

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="@dimen/dp_28"/>
<solid android:color="@color/color_E6E6F0"/>
</shape>

View File

@@ -0,0 +1,59 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="295dp"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:background="@drawable/shape_white_12dp_round"
android:orientation="vertical"
tools:background="@color/black_transparent_10">
<View
android:layout_width="0dp"
android:layout_height="@dimen/dp_26" />
<TextView
android:id="@+id/message"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginBottom="@dimen/dp_32"
android:layout_weight="1"
android:gravity="center"
android:lineSpacingMultiplier="1.2"
android:paddingStart="20dp"
android:paddingEnd="20dp"
android:textColor="@color/text_title_color"
android:textSize="14sp"
tools:text="@string/layout_layout_ok_cancel_dialog_01" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="24dp"
android:gravity="center_horizontal"
android:orientation="horizontal">
<TextView
android:id="@+id/btn_ok"
android:layout_width="120dp"
android:layout_height="38dp"
android:background="@drawable/bg_e6e6f0_28"
android:gravity="center"
android:text="@string/text_ok"
android:textColor="@color/color_B3B3C3"
android:textSize="@dimen/sp_14" />
<TextView
android:id="@+id/btn_cancel"
android:layout_width="120dp"
android:layout_height="38dp"
android:layout_marginStart="@dimen/dp_16"
android:background="@drawable/bg_common_confirm"
android:gravity="center"
android:text="@string/cancel"
android:textColor="@color/white"
android:textSize="@dimen/sp_14" />
</LinearLayout>
</LinearLayout>

View File

@@ -5049,5 +5049,7 @@
<string name="sound_duration">%d"</string>
<string name="no_room_has_been_added_yet">暫未加入房間</string>
<string name="user_no_room_has_been_added_yet">該用戶暫未加入房間</string>
<string name="sound_has_not_been_saved">聲音還未保存,確認退出嗎?</string>
<string name="sound_has_not_been_recorded_yet">聲音還未錄製完成,確認退出嗎?</string>
</resources>