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 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;
|
||||||
|
@@ -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()
|
||||||
|
}
|
||||||
}
|
}
|
@@ -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>) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
@@ -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()
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -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")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user