From 352b22c7f643f2296bb718106b28242e2089d823 Mon Sep 17 00:00:00 2001 From: yangyakun Date: Tue, 21 Nov 2023 20:54:06 +0800 Subject: [PATCH] =?UTF-8?q?[6.2.0]=20[xiaozhi]=20[=E6=9D=83=E9=99=90?= =?UTF-8?q?=E8=BD=AC=E7=A7=BB=E5=88=B0=20mogo]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mogo/och/charter/view/SlidePanelView.kt | 8 ++-- .../module/utils/FrameAnimatorContainer.kt | 5 +-- .../mogo/och/common/module/wigets/ZhiView.kt | 37 +++++++++++++--- .../eagle/core/function/main/MainActivity.kt | 42 ++++++++++++++++--- .../core/function/main/MainPresenter.java | 3 +- 5 files changed, 76 insertions(+), 19 deletions(-) diff --git a/OCH/charter/driver/src/main/java/com/magic/mogo/och/charter/view/SlidePanelView.kt b/OCH/charter/driver/src/main/java/com/magic/mogo/och/charter/view/SlidePanelView.kt index 511b368c2f..3acbacbc59 100644 --- a/OCH/charter/driver/src/main/java/com/magic/mogo/och/charter/view/SlidePanelView.kt +++ b/OCH/charter/driver/src/main/java/com/magic/mogo/och/charter/view/SlidePanelView.kt @@ -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) { diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/FrameAnimatorContainer.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/FrameAnimatorContainer.kt index 299527d3c4..553aebd624 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/FrameAnimatorContainer.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/utils/FrameAnimatorContainer.kt @@ -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() } diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/ZhiView.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/ZhiView.kt index 942aa635e5..289546c1d3 100644 --- a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/ZhiView.kt +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/wigets/ZhiView.kt @@ -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, diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainActivity.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainActivity.kt index 781a780520..f5ca6be125 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainActivity.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainActivity.kt @@ -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, 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, } 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 } } diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainPresenter.java b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainPresenter.java index ee82744042..d81698c0bc 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainPresenter.java +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/main/MainPresenter.java @@ -77,7 +77,8 @@ public class MainPresenter extends Presenter { 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); }