fix:技能卡-声音秀增加权限申请逻辑
This commit is contained in:
@@ -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;
|
||||
|
@@ -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()
|
||||
}
|
||||
}
|
@@ -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>) {}
|
||||
}
|
||||
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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()
|
||||
}
|
||||
}
|
@@ -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")
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user