[xiaozhi]
[权限转移到 mogo]
This commit is contained in:
yangyakun
2023-11-21 20:54:06 +08:00
parent 8d21486b60
commit 352b22c7f6
5 changed files with 76 additions and 19 deletions

View File

@@ -8,6 +8,7 @@ import android.util.AttributeSet
import android.view.MotionEvent
import android.view.View
import android.view.animation.DecelerateInterpolator
import androidx.core.graphics.scale
import com.magic.mogo.och.charter.R
import com.mogo.commons.AbsMogoApplication
import me.jessyan.autosize.AutoSizeConfig
@@ -85,9 +86,10 @@ class SlidePanelView @JvmOverloads constructor(
val size = AutoSizeUtils.dp2px(context, 120f)
val opts = BitmapFactory.Options()
opts.inDensity = AutoSizeConfig.getInstance().initDensity.toInt()
bmBlock = BitmapFactory.decodeResource(resources, R.drawable.charter_base_slide_block, opts) as Bitmap
bmBlock = Bitmap.createScaledBitmap(bmBlock!!, size, size, true) as Bitmap
blockWidth = bmBlock!!.width
bmBlock = (BitmapFactory.decodeResource(resources, R.drawable.charter_base_slide_block, opts) as Bitmap).apply {
scale(size,size)
blockWidth = width
}
}
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {

View File

@@ -7,10 +7,6 @@ import android.os.Handler
import android.os.Looper
import android.widget.ImageView
import com.mogo.commons.AbsMogoApplication
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OCHCOMMON
import com.mogo.och.common.module.wigets.ZhiView
import java.lang.RuntimeException
import java.lang.ref.SoftReference
@@ -105,6 +101,7 @@ class FrameAnimatorContainer (resId: Int,
@Synchronized
fun reStart(){
mIndex = -1
mIsRunning = false
start()
}

View File

@@ -1,22 +1,27 @@
package com.mogo.och.common.module.wigets
import android.Manifest
import android.content.Context
import android.util.AttributeSet
import androidx.appcompat.widget.AppCompatImageView
import androidx.core.app.ActivityCompat
import com.mogo.eagle.core.data.msgbox.MsgBoxBean
import com.mogo.eagle.core.data.msgbox.MsgBoxType
import com.mogo.eagle.core.data.msgbox.VoiceMsg
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager
import com.mogo.eagle.core.function.main.MainPresenter
import com.mogo.eagle.core.utilcode.kotlin.onClick
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.eagle.core.utilcode.mogo.permissions.PermissionsDialogUtils
import com.mogo.eagle.core.utilcode.util.ActivityUtils
import com.mogo.och.common.module.R
import com.mogo.och.common.module.utils.FrameAnimatorContainer
import com.mogo.och.common.module.utils.PermissionUtil
import com.mogo.tts.base.zhi.AsrTextBean
import com.mogo.tts.base.zhi.CallbackWidget
import com.mogo.tts.base.zhi.AvatarManager
import com.mogo.tts.base.zhi.CallbackWidget
import com.mogo.tts.base.zhi.ZhiRecordWinUi
import java.util.concurrent.atomic.AtomicBoolean
class ZhiView @JvmOverloads constructor(
context: Context,
@@ -98,7 +103,23 @@ class ZhiView @JvmOverloads constructor(
}
})
onClick {
AvatarManager.wakeupXiaoZhi()
if (PermissionUtil.checkPermission(context,Manifest.permission.RECORD_AUDIO)) {
AvatarManager.wakeupXiaoZhi()
}else{
//申请悬浮窗权限
val shouldShowRequestPermissionRationale = ActivityUtils.getTopActivity()
.shouldShowRequestPermissionRationale(Manifest.permission.RECORD_AUDIO)
if(shouldShowRequestPermissionRationale){// 可以弹窗系统权限框
ActivityCompat.requestPermissions(ActivityUtils.getTopActivity(),
arrayOf(
Manifest.permission.RECORD_AUDIO,
), MainPresenter.MOGO_PERMISSION_REQUEST_CODE
)
}else{// 不会弹系统弹窗
PermissionsDialogUtils.openAppDetails(ActivityUtils.getTopActivity(), "录音机", 100)
}
}
}
}
@@ -106,6 +127,9 @@ class ZhiView @JvmOverloads constructor(
super.onWindowFocusChanged(hasWindowFocus)
CallerLogger.d(SceneConstant.M_OCHCOMMON + TAG, "焦点与否:${hasWindowFocus}")
AvatarManager.enableXiaoZhi(!hasWindowFocus)
if(hasWindowFocus){
currentAnim.reStart()
}
}
override fun onAttachedToWindow() {
@@ -127,7 +151,9 @@ class ZhiView @JvmOverloads constructor(
CallerLogger.d(TAG,"-----onStatusChange $status")
this.status = status?:ZhiRecordWinUi.RecordStatus.STATUS_SILENCE
when (status) {
ZhiRecordWinUi.RecordStatus.STATUS_SILENCE -> {}
ZhiRecordWinUi.RecordStatus.STATUS_SILENCE -> {
currentAnim.stop()
}
ZhiRecordWinUi.RecordStatus.STATUS_LISTENING -> {// 监听中
currentAnim.stop()
}
@@ -154,8 +180,7 @@ class ZhiView @JvmOverloads constructor(
override fun close(trigger: Boolean) {
CallerLogger.d(TAG,"-----close $trigger")
status = ZhiRecordWinUi.RecordStatus.STATUS_SILENCE
currentAnim.stop()
onStatusChange(ZhiRecordWinUi.RecordStatus.STATUS_SILENCE)
val msg = VoiceMsg(
isWakeUp = false,
isWakeUpEnd = true,

View File

@@ -1,11 +1,14 @@
package com.mogo.eagle.core.function.main
import android.Manifest
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
import android.os.Bundle
import android.provider.Settings
import android.view.*
import android.view.Gravity
import android.view.View
import android.view.ViewGroup
import android.widget.FrameLayout
import androidx.recyclerview.widget.LinearLayoutManager
import com.kwai.koom.base.MonitorManager.addMonitorConfig
@@ -38,6 +41,7 @@ import com.mogo.eagle.core.function.hmi.ui.widget.StatusBarView
import com.mogo.eagle.core.function.main.modules.MogoModulesManager
import com.mogo.eagle.core.function.main.windowview.FloatingViewHandler
import com.mogo.eagle.core.utilcode.mogo.AppLaunchTimeUtils
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.i
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
@@ -49,7 +53,8 @@ import com.mogo.map.listener.IMogoMapListener
import com.mogo.map.listener.MogoMapListenerHandler.Companion.mogoMapListenerHandler
import com.mogo.map.uicontroller.EnumMapUI
import com.zhjt.service.chain.ChainLog
import kotlinx.android.synthetic.main.module_main_activity_main.*
import kotlinx.android.synthetic.main.module_main_activity_main.module_main_id_cover_up
import kotlinx.android.synthetic.main.module_main_activity_main.rvConnectInfo
import java.io.File
@@ -378,10 +383,32 @@ open class MainActivity : MvpActivity<MainView?, MainPresenter?>(), MainView,
if (requestCode == MainPresenter.MOGO_PERMISSION_REQUEST_CODE) {
var isAllGranted = true
// 判断是否所有的权限都已经授予了
for (grant in grantResults) {
val reasong = StringBuffer()
grantResults.forEachIndexed { index, grant ->
if (grant != PackageManager.PERMISSION_GRANTED) {
isAllGranted = false
break
when (permissions[index]) {
Manifest.permission.RECORD_AUDIO -> {
reasong.append("录音机、")
}
Manifest.permission.BLUETOOTH -> {
reasong.append("蓝牙、")
}
Manifest.permission.READ_EXTERNAL_STORAGE -> {
reasong.append("读取外部文件、")
}
Manifest.permission.WRITE_EXTERNAL_STORAGE -> {
reasong.append("写入外部文件、")
}
Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION -> {
if(!reasong.contains("定位")){
reasong.append("定位、")
}
}
else -> {}
}
}
}
if (isAllGranted) {
@@ -389,7 +416,12 @@ open class MainActivity : MvpActivity<MainView?, MainPresenter?>(), MainView,
} else {
// 弹出对话框告诉用户需要权限的原因, 并引导用户去应用权限管理中手动打开权限按钮
if (!isFirst) {
PermissionsDialogUtils.openAppDetails(this, null, REQUEST_CODE_DIALOG)
if (reasong.isNotEmpty()) {
val substring = reasong.substring(0, reasong.length - 2)
PermissionsDialogUtils.openAppDetails(this, substring, REQUEST_CODE_DIALOG)
}else {
PermissionsDialogUtils.openAppDetails(this, null, REQUEST_CODE_DIALOG)
}
isFirst = true
}
}

View File

@@ -77,7 +77,8 @@ public class MainPresenter extends Presenter<MainView> {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
Manifest.permission.ACCESS_FINE_LOCATION
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION,
}, MOGO_PERMISSION_REQUEST_CODE);
}