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

This commit is contained in:
Max
2024-03-28 19:13:24 +08:00
parent 1bb3bb1c3e
commit 06f31c3e9c
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 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 TitleBar mTitleBar;
protected DefaultToolBar mToolBar; protected DefaultToolBar mToolBar;
protected CompositeDisposable mCompositeDisposable; protected CompositeDisposable mCompositeDisposable;

View File

@@ -1,11 +1,22 @@
package com.nnbc123.app.skill package com.nnbc123.app.skill
import android.Manifest
import android.annotation.SuppressLint 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.base.BaseActivity
import com.nnbc123.app.common.permission.PermissionHelper.isAllGranted
import com.nnbc123.app.skill.dialog.SkillSelectionDialog import com.nnbc123.app.skill.dialog.SkillSelectionDialog
import com.nnbc123.app.skill.repository.SkillDataManager import com.nnbc123.app.skill.repository.SkillDataManager
import com.nnbc123.app.skill.repository.SkillModel import com.nnbc123.app.skill.repository.SkillModel
import com.nnbc123.app.skill.widget.* 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.file.FileModel
import com.nnbc123.core.skill.entity.PropRefEntity import com.nnbc123.core.skill.entity.PropRefEntity
import com.nnbc123.core.skill.entity.PropsEntity 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.entity.SkillPropertyEntity
import com.nnbc123.core.skill.event.SkillEvent import com.nnbc123.core.skill.event.SkillEvent
import com.nnbc123.core.utils.toast import com.nnbc123.core.utils.toast
import com.nnbc123.library.utils.ResUtil
import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.EventBus
import java.io.File import java.io.File
@@ -198,4 +210,53 @@ class SkillDataDelegate(private val skillView: SkillCardView, private val activi
activity.toast(th.message) 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 package com.nnbc123.app.skill.widget
import androidx.core.util.Consumer
import com.nnbc123.core.skill.entity.PropRefEntity import com.nnbc123.core.skill.entity.PropRefEntity
import java.io.File import java.io.File
@@ -31,6 +32,7 @@ interface ItemEventListener {
fun onItemClick(item: SkillItem) {} fun onItemClick(item: SkillItem) {}
fun onRecordSuccess(audioFile: File?, duration: Int) {} fun onRecordSuccess(audioFile: File?, duration: Int) {}
fun onDeleteRecordClick() {} 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.content.Context
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import androidx.core.util.Consumer
import com.netease.nim.uikit.common.util.sys.ScreenUtil import com.netease.nim.uikit.common.util.sys.ScreenUtil
import com.netease.nimlib.sdk.media.record.RecordType import com.netease.nimlib.sdk.media.record.RecordType
import com.nnbc123.app.R 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.app.ui.widget.dialog.CommonTipDialog
import com.nnbc123.core.utils.TextUtils import com.nnbc123.core.utils.TextUtils
import com.nnbc123.core.utils.toast import com.nnbc123.core.utils.toast
import com.tbruyelle.rxpermissions2.RxPermissions
import java.io.File import java.io.File
class RecordIResourceItem(private val itemAttribute: ItemAttribute) : SkillItem, class RecordIResourceItem(private val itemAttribute: ItemAttribute) : SkillItem,
@@ -119,6 +121,13 @@ class RecordIResourceItem(private val itemAttribute: ItemAttribute) : SkillItem,
setItemByState(RECORD_STATE_READY) setItemByState(RECORD_STATE_READY)
} }
override fun onClickRecord() {
itemAttribute.itemEventListener?.requestMicPermissions {
if (it) {
binding.recordView.startRecord()
}
}
}
/** /**
* 根据状态设置View * 根据状态设置View

View File

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

View File

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