fix:技能卡-声音秀增加权限申请逻辑

This commit is contained in:
Max
2024-03-28 19:13:24 +08:00
parent 1bb3bb1c3e
commit 5f0d1bb7cd
6 changed files with 77 additions and 4 deletions

View File

@@ -137,7 +137,7 @@ public abstract class BaseActivity extends RxAppCompatActivity
*/
protected static final String STATUS_TAG = "STATUS_TAG";
protected final RxPermissions rxPermissions = new RxPermissions(this);
public final RxPermissions rxPermissions = new RxPermissions(this);
protected TitleBar mTitleBar;
protected DefaultToolBar mToolBar;
protected CompositeDisposable mCompositeDisposable;

View File

@@ -1,11 +1,22 @@
package com.nnbc123.app.skill
import android.Manifest
import android.annotation.SuppressLint
import android.content.Intent
import android.net.Uri
import android.provider.Settings
import androidx.core.util.Consumer
import com.nnbc123.app.R
import com.nnbc123.app.base.BaseActivity
import com.nnbc123.app.common.permission.PermissionHelper.isAllGranted
import com.nnbc123.app.skill.dialog.SkillSelectionDialog
import com.nnbc123.app.skill.repository.SkillDataManager
import com.nnbc123.app.skill.repository.SkillModel
import com.nnbc123.app.skill.widget.*
import com.nnbc123.app.ui.widget.dialog.CommonTipDialog
import com.nnbc123.app.ui.widget.dialog.RequestPermissionPromptDialog
import com.nnbc123.app.ui.widget.dialog.RequestPermissionPromptDialog.Companion.dismissCurrentDialog
import com.nnbc123.app.ui.widget.dialog.RequestPermissionPromptDialog.Companion.isNeedPrompt
import com.nnbc123.core.file.FileModel
import com.nnbc123.core.skill.entity.PropRefEntity
import com.nnbc123.core.skill.entity.PropsEntity
@@ -13,6 +24,7 @@ import com.nnbc123.core.skill.entity.SkillPostServerEntity
import com.nnbc123.core.skill.entity.SkillPropertyEntity
import com.nnbc123.core.skill.event.SkillEvent
import com.nnbc123.core.utils.toast
import com.nnbc123.library.utils.ResUtil
import org.greenrobot.eventbus.EventBus
import java.io.File
@@ -198,4 +210,53 @@ class SkillDataDelegate(private val skillView: SkillCardView, private val activi
activity.toast(th.message)
})
}
override fun requestMicPermissions(consumer: Consumer<Boolean>) {
super.requestMicPermissions(consumer)
val permissions = arrayOf(
Manifest.permission.RECORD_AUDIO,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE
)
val sb = StringBuffer()
sb.append("1.").append(ResUtil.getString(R.string.permission_denied_tips_mic))
.append("\n2.").append(ResUtil.getString(R.string.permission_denied_tips_image))
val tips = sb.toString()
if (isNeedPrompt()
&& !isAllGranted(activity.rxPermissions, *permissions)
) {
RequestPermissionPromptDialog(activity, tips).show()
}
activity.checkPermission(Consumer<Boolean> { isGranted: Boolean ->
dismissCurrentDialog()
if (isGranted) {
consumer.accept(true)
} else {
consumer.accept(false)
showPermissionDeniedTipsDialog(tips)
}
}, *permissions)
}
private fun showPermissionDeniedTipsDialog(message: String) {
val mPrivacyDialog = CommonTipDialog(activity)
mPrivacyDialog.setTipMsg(message)
mPrivacyDialog.setOkText("去设置")
mPrivacyDialog.setOnActionListener(
object : CommonTipDialog.OnActionListener {
override fun onOk() {
//同意跳到应用详情页面
val packageUri = Uri.parse("package:" + activity.packageName)
val intent = Intent(
Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
packageUri
)
activity.startActivityForResult(
intent, 0
)
}
}
)
mPrivacyDialog.show()
}
}

View File

@@ -1,5 +1,6 @@
package com.nnbc123.app.skill.widget
import androidx.core.util.Consumer
import com.nnbc123.core.skill.entity.PropRefEntity
import java.io.File
@@ -31,6 +32,7 @@ interface ItemEventListener {
fun onItemClick(item: SkillItem) {}
fun onRecordSuccess(audioFile: File?, duration: Int) {}
fun onDeleteRecordClick() {}
fun requestMicPermissions(consumer: Consumer<Boolean>) {}
}

View File

@@ -3,6 +3,7 @@ package com.nnbc123.app.skill.widget
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import androidx.core.util.Consumer
import com.netease.nim.uikit.common.util.sys.ScreenUtil
import com.netease.nimlib.sdk.media.record.RecordType
import com.nnbc123.app.R
@@ -12,6 +13,7 @@ import com.nnbc123.app.databinding.LayoutSkillAudioBinding
import com.nnbc123.app.ui.widget.dialog.CommonTipDialog
import com.nnbc123.core.utils.TextUtils
import com.nnbc123.core.utils.toast
import com.tbruyelle.rxpermissions2.RxPermissions
import java.io.File
class RecordIResourceItem(private val itemAttribute: ItemAttribute) : SkillItem,
@@ -119,6 +121,13 @@ class RecordIResourceItem(private val itemAttribute: ItemAttribute) : SkillItem,
setItemByState(RECORD_STATE_READY)
}
override fun onClickRecord() {
itemAttribute.itemEventListener?.requestMicPermissions {
if (it) {
binding.recordView.startRecord()
}
}
}
/**
* 根据状态设置View

View File

@@ -50,7 +50,7 @@ class TimerRecorderView(context: Context, @Nullable attrs: AttributeSet?, defSty
setOnClickListener {
when (state) {
STATE_PAUSED -> {
startRecord()
recordListener?.onClickRecord()
}
STATE_PLAYED -> {
endAudioRecord(false)
@@ -82,7 +82,7 @@ class TimerRecorderView(context: Context, @Nullable attrs: AttributeSet?, defSty
//开始录制
private fun startRecord() {
fun startRecord() {
if (audioMessageHelper == null) {
val options = NimUIKitImpl.getOptions()
options.audioRecordMaxTime = recordDuration
@@ -175,5 +175,6 @@ class TimerRecorderView(context: Context, @Nullable attrs: AttributeSet?, defSty
fun onRecordCancel()
fun onRecordSuccess(file: File?)
fun onRecordFail()
fun onClickRecord()
}
}

View File

@@ -31,7 +31,7 @@ class RequestPermissionPromptDialog(context: Context, private val message: Strin
* 是否需要展示权限申请说明
*/
fun isNeedPrompt(): Boolean {
return (BasicConfig.INSTANCE.channel == "huawei")
return (BasicConfig.INSTANCE.channel == "huawei") || (BasicConfig.INSTANCE.channel == "rongyao")
}
}