Merge branch 'dev_robotaxi-d_230912_6.1.0' into dev_minibus-d_230926_6.1.0
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -7,5 +7,4 @@
|
||||
/build
|
||||
/captures
|
||||
.externalNativeBuild
|
||||
.cxx
|
||||
.gitlab-ci.yml
|
||||
.cxx
|
||||
25
.gitlab-ci.yml
Normal file
25
.gitlab-ci.yml
Normal file
@@ -0,0 +1,25 @@
|
||||
stages:
|
||||
- analyze
|
||||
|
||||
inspect java and kotlin codes:
|
||||
tags:
|
||||
- apk
|
||||
- android
|
||||
stage: analyze
|
||||
script:
|
||||
- echo "$CI_COMMIT_BEFORE_SHA $CI_COMMIT_SHA $CI_COMMIT_BRANCH"
|
||||
- echo "$CI_JOB_STAGE}_reports_${CI_PROJECT_NAME}_${CI_BUILD_REF_NAME}"
|
||||
- ./gradlew runCodeInspect
|
||||
before_script:
|
||||
- source change_java_version
|
||||
artifacts:
|
||||
name: "$CI_JOB_STAGE}_reports_${CI_PROJECT_NAME}_$CI_COMMIT_REF_SLUG"
|
||||
when: on_failure
|
||||
expire_in: 1 days
|
||||
paths:
|
||||
- "build/reports/*"
|
||||
only:
|
||||
- "$CI_COMMIT_BRANCH"
|
||||
except:
|
||||
- master
|
||||
allow_failure: true
|
||||
@@ -45,8 +45,6 @@ import org.greenrobot.eventbus.EventBus
|
||||
*/
|
||||
class SelectLineView : ConstraintLayout, SelectLineViewModel.SelectLineViewCallback {
|
||||
|
||||
private val TAG = "OrderInfoView"
|
||||
|
||||
constructor(context: Context) : super(context)
|
||||
|
||||
constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet)
|
||||
@@ -100,7 +98,7 @@ class SelectLineView : ConstraintLayout, SelectLineViewModel.SelectLineViewCallb
|
||||
rlv_line_list.layoutManager =
|
||||
LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
|
||||
rlv_line_list.addItemDecoration(
|
||||
com.mogo.och.charter.passenger.ui.selectline.layoutmanage.BottomDecoration(
|
||||
BottomDecoration(
|
||||
AutoSizeUtils.dp2px(context, 60f)
|
||||
)
|
||||
)
|
||||
@@ -109,7 +107,7 @@ class SelectLineView : ConstraintLayout, SelectLineViewModel.SelectLineViewCallb
|
||||
rv_site_list.layoutManager =
|
||||
LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
|
||||
rv_site_list.addItemDecoration(
|
||||
com.mogo.och.charter.passenger.ui.selectline.layoutmanage.BottomDecoration(
|
||||
BottomDecoration(
|
||||
AutoSizeUtils.dp2px(context, 90f)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -61,7 +61,7 @@ internal class InfoVideoView @JvmOverloads constructor(
|
||||
"蘑菇车联之红旗车队"
|
||||
))
|
||||
add(
|
||||
com.mogo.och.taxi.passenger.bean.TaxiPassengerVideoPlay(
|
||||
TaxiPassengerVideoPlay(
|
||||
"https://img.zhidaohulian.com/fileServer/online_car_hailing/1655708499497/大运会合作解说版.m4v",
|
||||
"https://img.zhidaohulian.com/fileServer/online_car_hailing/1655969536177/大运会.png",
|
||||
"蘑菇车联牵手成都大运会"
|
||||
@@ -79,7 +79,7 @@ internal class InfoVideoView @JvmOverloads constructor(
|
||||
|
||||
fun exitFullScreenMode(resetVideoPlayer: Boolean) {
|
||||
val carouselLayoutManager = rvVideoPlaylist?.layoutManager as CarouselLayoutManager
|
||||
val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager)
|
||||
val (_: Int, player) = getPlayer(carouselLayoutManager)
|
||||
player?.let {
|
||||
it.exitFullScreenMode()
|
||||
it.onVideoPause()
|
||||
@@ -100,7 +100,7 @@ internal class InfoVideoView @JvmOverloads constructor(
|
||||
return
|
||||
}
|
||||
val carouselLayoutManager = rvVideoPlaylist?.layoutManager as CarouselLayoutManager
|
||||
val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager)
|
||||
val (_: Int, player) = getPlayer(carouselLayoutManager)
|
||||
when (visibility) {
|
||||
View.VISIBLE -> {
|
||||
player?.let {
|
||||
@@ -218,7 +218,7 @@ internal class InfoVideoView @JvmOverloads constructor(
|
||||
override fun onWindowFocusChanged(hasWindowFocus: Boolean) {
|
||||
super.onWindowFocusChanged(hasWindowFocus)
|
||||
val carouselLayoutManager = rvVideoPlaylist?.layoutManager as CarouselLayoutManager
|
||||
val (centerItemPosition: Int, player) = getPlayer(carouselLayoutManager)
|
||||
val (_: Int, player) = getPlayer(carouselLayoutManager)
|
||||
player?.let {
|
||||
if(it.isInPlayingState&&!it.isIfCurrentIsFullscreen&&!hasWindowFocus){
|
||||
player.onVideoPause()
|
||||
|
||||
@@ -303,6 +303,10 @@ class TaxiCurrentTaskViewModel : BaseViewModel<UnmannedState, TaskUiIntent>(),
|
||||
*/
|
||||
override fun onStopAutopilot() {
|
||||
UiThreadHandler.removeCallbacks(startTaskRunnable)
|
||||
if (!TaxiTaskModel.checkCurrentTaskCondition()) {
|
||||
d(TAG, "onStopAutopilot: 无任务无需流转状态")
|
||||
return
|
||||
}
|
||||
startTask(false)
|
||||
}
|
||||
|
||||
|
||||
@@ -1322,6 +1322,7 @@ object TaxiTaskModel {
|
||||
*/
|
||||
fun clearCurrentOCHOrder() {
|
||||
clearAutopilotControlParameters()
|
||||
mIsArrivedSiteStartTag = false
|
||||
isRestartAutopilot = false
|
||||
if (FunctionBuildConfig.isDemoMode) {
|
||||
// 当美化模式(演示模式)开启时: 取消或订单已完成时,置false
|
||||
|
||||
@@ -19,7 +19,6 @@ import com.mogo.eagle.core.block.runtime.config.recorder.*
|
||||
import com.mogo.eagle.core.block.runtime.utils.TimeUtils.Companion.now
|
||||
import com.mogo.eagle.core.function.call.devatools.*
|
||||
import com.mogo.eagle.core.utilcode.util.*
|
||||
import kotlinx.coroutines.*
|
||||
import kotlinx.coroutines.Runnable
|
||||
import java.lang.ref.WeakReference
|
||||
import java.util.LinkedList
|
||||
|
||||
14
build.gradle
14
build.gradle
@@ -39,7 +39,7 @@ buildscript {
|
||||
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.18'
|
||||
classpath "com.mogo.sticky:service:${plugin_version}"
|
||||
classpath "io.github.knight-zxw:lancet-plugin:${lancetx_plugin_version}"
|
||||
classpath "io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.21.0"
|
||||
classpath "io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.15.0"
|
||||
classpath 'com.mogo.cloud:matrix:1.0.0'
|
||||
// classpath 'com.bytedance.btrace:rhea-gradle-plugin:2.0.0'
|
||||
}
|
||||
@@ -52,7 +52,6 @@ buildscript {
|
||||
}
|
||||
|
||||
allprojects {
|
||||
apply from: rootProject.file('codequality/pmd.gradle')
|
||||
repositories {
|
||||
mavenLocal()
|
||||
maven { url 'http://nexus.zhidaoauto.com/repository/maven-releases/' }
|
||||
@@ -73,6 +72,17 @@ allprojects {
|
||||
}
|
||||
google()
|
||||
}
|
||||
|
||||
if (isCodeInspectEnable ) {
|
||||
def basePath = new File(codequality, 'code_inspect_increment.gradle').path
|
||||
apply from: "$basePath"
|
||||
def pmdPath = new File(codequality, 'pmd.gradle').path
|
||||
apply from: "$pmdPath"
|
||||
def detektPath = new File(codequality, 'detekt.gradle').path
|
||||
apply from: "$detektPath"
|
||||
def codeInspectPath = new File(codequality, 'code_inspect.gradle').path
|
||||
apply from: "$codeInspectPath"
|
||||
}
|
||||
}
|
||||
|
||||
task clean(type: Delete) {
|
||||
|
||||
0
codequality/baseline.xml
Normal file
0
codequality/baseline.xml
Normal file
24
codequality/code_inspect.gradle
Normal file
24
codequality/code_inspect.gradle
Normal file
@@ -0,0 +1,24 @@
|
||||
task runCodeInspect {
|
||||
group = "codeInspect"
|
||||
description = "静态代码检查,统一触发pmd detekt任务"
|
||||
}
|
||||
|
||||
project.afterEvaluate {
|
||||
bindTask("pmd", "runCodeInspect")
|
||||
bindTask("detekt", "runCodeInspect")
|
||||
}
|
||||
|
||||
/**
|
||||
* 绑定任务
|
||||
* @param taskName 任务名称
|
||||
* @param targetTaskName 被绑定的任务名称
|
||||
* @param action taskName指定的任务执行完成后的回调
|
||||
*/
|
||||
def bindTask(String taskName, String targetTaskName) {
|
||||
def task = project.tasks.findByName(taskName)
|
||||
if (task != null) {
|
||||
logger.lifecycle("${task} will be run")
|
||||
def targetTask = project.tasks.findByName(targetTaskName)
|
||||
targetTask.finalizedBy(task)
|
||||
}
|
||||
}
|
||||
187
codequality/code_inspect_increment.gradle
Normal file
187
codequality/code_inspect_increment.gradle
Normal file
@@ -0,0 +1,187 @@
|
||||
ext {
|
||||
//存储增量的Java文件,给pmd使用
|
||||
commitJavaFiles = new ArrayList<String>()
|
||||
//存储增量的kotlin文件,给detekt使用
|
||||
commitKotlinFiles = new ArrayList<String>()
|
||||
commitAuthor = ""
|
||||
appVersionName = ""
|
||||
}
|
||||
|
||||
/**
|
||||
* 增量开关, 给 lint 插件做增量扫描使用
|
||||
*/
|
||||
def isIncrement = false
|
||||
|
||||
/**
|
||||
* 通过cmd命令获取结果值
|
||||
* @return string 结果值
|
||||
*/
|
||||
def getResultFromCmd(String cmd) {
|
||||
logger.lifecycle("${project.name} cmd:$cmd")
|
||||
def out = new ByteArrayOutputStream()
|
||||
if (System.properties['os.name'].toLowerCase().contains('windows')) {
|
||||
project.exec {
|
||||
ExecSpec execSpec ->
|
||||
executable 'cmd'
|
||||
args '/c', "$cmd"
|
||||
standardOutput = out
|
||||
}.assertNormalExitValue()
|
||||
} else {
|
||||
// jenkins 打包出异常,需要区分linux和macOS
|
||||
// project.exec {
|
||||
// ExecSpec execSpec ->
|
||||
// executable 'bash'
|
||||
// args '-c', "$cmd"
|
||||
// standardOutput = out
|
||||
// }.assertNormalExitValue()
|
||||
}
|
||||
return out.toString().trim()
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取提交作者
|
||||
* @return 提交作者
|
||||
*/
|
||||
def getCommitAuthor() {
|
||||
def commitAuthor = ""
|
||||
// if (isCiServer()) {
|
||||
// commitAuthor = "${System.env.CI_COMMIT_AUTHOR}"
|
||||
// commitAuthor = commitAuthor.substring(0, commitAuthor.indexOf('<')).trim()
|
||||
// } else {
|
||||
commitAuthor = getResultFromCmd("git config --get user.name")
|
||||
// }
|
||||
return commitAuthor
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取提交 sha,用于 git diff 出增量文件,其它项目仓库,这个方法需要更改实现
|
||||
* @return 提交 sha
|
||||
*/
|
||||
def getCommitTargetSha() {
|
||||
//目前这个仓库只能根据上一个merge节点,进行代码增量检测
|
||||
def commitTargetSha = getResultFromCmd("git log --max-count=1 --pretty=%H --merges")
|
||||
return commitTargetSha
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取提交文件,只包含.java和.kt的文件
|
||||
* @return 文件相对路径数组
|
||||
*/
|
||||
def getCommitFiles() {
|
||||
def commitTargetSha = getCommitTargetSha()
|
||||
def commitSha = getResultFromCmd("git log --max-count=1 --pretty=%H")
|
||||
def commitAuthor = getCommitAuthor()
|
||||
def cmd = "git log --name-only --author=$commitAuthor --pretty=\"format:\" $commitTargetSha..$commitSha"
|
||||
def result = getResultFromCmd(cmd)
|
||||
def projectStartPath = getProjectStartPath()
|
||||
logger.lifecycle("projectStartPath=$projectStartPath")
|
||||
if (result != null && result.trim().length() > 0) {
|
||||
def files = result.readLines()
|
||||
.findAll { it.startsWith("${projectStartPath}") && isFilePathValid(it) }.toArray()
|
||||
return files.toUnique()
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断文件路径是否合理
|
||||
* @param path 文件路径
|
||||
* @return true合理,否则不合理
|
||||
*/
|
||||
static def isFilePathValid(String path) {
|
||||
return (path.endsWith('.kt') || path.endsWith('.java') || path.endsWith('.xml') || path.endsWith('.png')) && !path.contains('/test/') && !path.contains('/androidTest/') && !path.contains('/generated/')
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取src目录下的所有文件,只包含.java和.kt的文件
|
||||
* @return 文件相对路径数组
|
||||
*/
|
||||
def getAllFiles() {
|
||||
def fileCollection = project.files("src")
|
||||
if (fileCollection == null) {
|
||||
return null
|
||||
}
|
||||
def files = fileCollection.asFileTree.getFiles()
|
||||
def iterator = files.iterator()
|
||||
def allFiles = new ArrayList<String>(files.size())
|
||||
while (iterator.hasNext()) {
|
||||
File file = iterator.next()
|
||||
def path = getProjectStartPath() + File.separator + project.relativePath(file.path)
|
||||
if (path != null && isFilePathValid(path)) {
|
||||
allFiles.add(path)
|
||||
}
|
||||
}
|
||||
return allFiles.toArray(new Object[allFiles.size()])
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取项目名称,如gradleengine,framework/asmbase
|
||||
* @return 项目名称
|
||||
*/
|
||||
def getProjectStartPath() {
|
||||
def projectRelativePath = project.relativePath(project.path).replaceAll(':', '/')
|
||||
return projectRelativePath.substring(1)
|
||||
}
|
||||
|
||||
/**
|
||||
* 存储提交文件
|
||||
* @param commitFiles 提交文件
|
||||
*/
|
||||
def saveCommitFiles(Object[] commitFiles) {
|
||||
//commitFiles 是对象
|
||||
def lintBuildDir = new File(project.buildDir, "code_inspect")
|
||||
if (!lintBuildDir.exists()) {
|
||||
lintBuildDir.mkdirs()
|
||||
}
|
||||
def changedFile = new File(lintBuildDir, "commit_files.txt")
|
||||
def fileOutputStream = new FileOutputStream(changedFile)
|
||||
def rootProjectPath = project.rootProject.rootDir.path + File.separator
|
||||
//存储绝对路径
|
||||
for (int i = 0; i < commitFiles.length; i++) {
|
||||
def commitFile = commitFiles[i].toString()
|
||||
fileOutputStream.write((rootProjectPath + commitFile).getBytes("utf-8"))
|
||||
if (i != commitFiles.length - 1)
|
||||
fileOutputStream.write("\n".getBytes("utf-8"))
|
||||
}
|
||||
fileOutputStream.flush()
|
||||
fileOutputStream.close()
|
||||
logger.lifecycle("Save Commit Files In: ${changedFile.path} \n$commitFiles")
|
||||
}
|
||||
|
||||
|
||||
task runCodeInspectIncrement {
|
||||
// group = "codeInspect"
|
||||
// description = "存储增量文件"
|
||||
// def commitJavaFiles = new ArrayList<String>()
|
||||
// def commitKotlinFiles = new ArrayList<String>()
|
||||
//
|
||||
// def commitFiles = new Object[0]
|
||||
// if (isIncrement) {
|
||||
// commitFiles = getCommitFiles()
|
||||
// } else {
|
||||
// commitFiles = getAllFiles()
|
||||
// }
|
||||
// saveCommitFiles(commitFiles)
|
||||
// if (commitFiles != null && commitFiles.length > 0) {
|
||||
// def projectStartPath = getProjectStartPath()
|
||||
// for (String s : commitFiles) {
|
||||
// def commitFile = s.toString().trim()
|
||||
// if (commitFile.endsWith('.kt')) {
|
||||
// commitKotlinFiles.add(commitFile.substring(projectStartPath.length() + 1))
|
||||
// } else if (commitFile.endsWith('.java')) {
|
||||
// commitJavaFiles.add(commitFile.substring(projectStartPath.length() + 1))
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// if (!commitKotlinFiles.isEmpty()) {
|
||||
// logger.lifecycle("${project.name} commitKotlinFiles:$commitKotlinFiles")
|
||||
// }
|
||||
// if (!commitJavaFiles.isEmpty()) {
|
||||
// logger.lifecycle("${project.name} commitJavaFiles:$commitJavaFiles")
|
||||
// }
|
||||
// project.setProperty("commitKotlinFiles", commitKotlinFiles)
|
||||
// project.setProperty("commitJavaFiles", commitJavaFiles)
|
||||
// project.setProperty("commitAuthor", getCommitAuthor())
|
||||
}
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
|
||||
<!--https://pmd.github.io/pmd-5.6.1/pmd-java/index.html-->
|
||||
|
||||
<exclude-pattern>.*.kt</exclude-pattern>
|
||||
<exclude-pattern>.*/R.java</exclude-pattern>
|
||||
<exclude-pattern>.*/gen/.*</exclude-pattern>
|
||||
<exclude-pattern>.*Dagger*.*</exclude-pattern>
|
||||
@@ -25,8 +26,6 @@
|
||||
<!-- </properties>-->
|
||||
<!-- </rule>-->
|
||||
|
||||
<!-- 应避免重新分配catch语句中捕获的异常变量 -->
|
||||
<rule ref="category/java/bestpractices.xml/AvoidReassigningCatchVariables" />
|
||||
<!-- StringBuffers/StringBuilders可能会大幅增长,因此如果保存在寿命较长的对象中,可能会成为内存泄漏的来源 -->
|
||||
<rule ref="category/java/bestpractices.xml/AvoidStringBufferField" />
|
||||
<!-- 在同一行中声明多个变量,会比较混乱 -->
|
||||
@@ -44,9 +43,7 @@
|
||||
</rule>
|
||||
<!-- 检查未使用的局部变量 -->
|
||||
<rule ref="category/java/bestpractices.xml/UnusedLocalVariable" />
|
||||
<!-- 检查未使用的private变量 -->
|
||||
<!-- <rule ref="category/java/bestpractices.xml/UnusedPrivateField" />-->
|
||||
<rule ref="category/java/bestpractices.xml/UseStandardCharsets" />
|
||||
<!-- <rule ref="category/java/bestpractices.xml/UseStandardCharsets" />-->
|
||||
|
||||
<!-- 容易出现运行时错误 -->
|
||||
<rule ref="category/java/errorprone.xml/AvoidBranchingStatementAsLastInLoop" />
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
apply plugin: 'io.gitlab.arturbosch.detekt'
|
||||
|
||||
def configPath = rootProject.file("codequality").path
|
||||
|
||||
detekt {
|
||||
toolVersion = "1.15.0"
|
||||
input = files(
|
||||
"src/main/java",
|
||||
"src/jinlvvan/java",
|
||||
"src/driverm1/java"
|
||||
)
|
||||
parallel = false
|
||||
//将配置文件应用于detekt的默认配置文件之上
|
||||
buildUponDefaultConfig = false
|
||||
//规则集
|
||||
config.setFrom("${configPath}/detekt.yml")
|
||||
//指定基准文件。在detekt的后续运行中,所有发现都存储在此文件中
|
||||
// baseline = file("${configPath}/baseline.xml")
|
||||
disableDefaultRuleSets = false
|
||||
ignoreFailures = true
|
||||
// Android: Don't create tasks for the specified build types (e.g. "release")
|
||||
// ignoredBuildTypes = ["release"]
|
||||
// Android: Don't create tasks for the specified build flavor (e.g. "production")
|
||||
// ignoredFlavors = ["production"]
|
||||
// Android: Don't create tasks for the specified build variants (e.g. "productionRelease")
|
||||
// ignoredVariants = ["productionRelease"]
|
||||
}
|
||||
|
||||
tasks.detekt.jvmTarget = "1.8"
|
||||
|
||||
tasks.named("detekt").configure {
|
||||
reports {
|
||||
// Enable/Disable HTML report (default: true)
|
||||
html {
|
||||
enabled = true
|
||||
// Path where HTML report will be stored (default: `build/reports/detekt/detekt.html`)
|
||||
destination = new File(new File("${project.rootProject.buildDir.path}/reports/detekt"), "${project.name}-detekt.html")
|
||||
}
|
||||
xml {
|
||||
enabled = true
|
||||
destination = new File(new File("${project.rootProject.buildDir.path}/reports/detekt"), "${project.name}-detekt.xml")
|
||||
}
|
||||
txt {
|
||||
enabled = false
|
||||
// destination = new File(new File("${project.rootProject.buildDir.path}/reports/detekt"), "${project.name}-detekt.txt")
|
||||
}
|
||||
sarif {
|
||||
// Enable/Disable SARIF report (default: false)
|
||||
enabled = true
|
||||
// Path where SARIF report will be stored (default: `build/reports/detekt/detekt.sarif`)
|
||||
destination = new File(new File("${project.rootProject.buildDir.path}/reports/detekt"), "${project.name}-detekt.sarif")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
803
codequality/detekt.yml
Normal file
803
codequality/detekt.yml
Normal file
@@ -0,0 +1,803 @@
|
||||
build:
|
||||
excludeCorrectable: false
|
||||
|
||||
config:
|
||||
validation: true
|
||||
warningsAsErrors: false
|
||||
# checkExhaustiveness: false
|
||||
# when writing own rules with new properties, exclude the property path e.g.: 'my_rule_set,.*>.*>[my_property]'
|
||||
excludes: 'custom-checks.*'
|
||||
|
||||
processors:
|
||||
active: true
|
||||
exclude:
|
||||
- 'DetektProgressListener'
|
||||
# - 'KtFileCountProcessor'
|
||||
# - 'PackageCountProcessor'
|
||||
# - 'ClassCountProcessor'
|
||||
# - 'FunctionCountProcessor'
|
||||
# - 'PropertyCountProcessor'
|
||||
# - 'ProjectComplexityProcessor'
|
||||
# - 'ProjectCognitiveComplexityProcessor'
|
||||
# - 'ProjectLLOCProcessor'
|
||||
# - 'ProjectCLOCProcessor'
|
||||
# - 'ProjectLOCProcessor'
|
||||
# - 'ProjectSLOCProcessor'
|
||||
# - 'LicenseHeaderLoaderExtension'
|
||||
|
||||
console-reports:
|
||||
active: true
|
||||
exclude:
|
||||
- 'ProjectStatisticsReport'
|
||||
- 'ComplexityReport'
|
||||
- 'NotificationReport'
|
||||
- 'FindingsReport'
|
||||
- 'FileBasedFindingsReport'
|
||||
# - 'LiteFindingsReport'
|
||||
|
||||
output-reports:
|
||||
active: true
|
||||
exclude:
|
||||
# - 'TxtOutputReport'
|
||||
# - 'XmlOutputReport'
|
||||
# - 'HtmlOutputReport'
|
||||
# - 'MdOutputReport'
|
||||
# - 'SarifOutputReport'
|
||||
|
||||
comments:
|
||||
active: false
|
||||
AbsentOrWrongFileLicense: #报告每个没有所需许可证标头的Kotlin源文件
|
||||
active: false
|
||||
licenseTemplateFile: 'license.template'
|
||||
# licenseTemplateIsRegex: false
|
||||
CommentOverPrivateFunction: #报告private函数的注释和文档
|
||||
active: false
|
||||
CommentOverPrivateProperty: #报告私有属性的注释和文档
|
||||
active: false
|
||||
# DeprecatedBlockTag: #报告注释中使用@deprecated块标记,可以使用@ReplaceWith annotations
|
||||
# active: false
|
||||
EndOfSentenceFormat: #验证KDoc注释的第一句话的结尾
|
||||
active: false
|
||||
endOfSentenceFormat: '([.?!][ \t\n\r\f<])|([.?!:]$)'
|
||||
# KDocReferencesNonPublicProperty: #报告任何引用类的非公共属性的KDoc注释
|
||||
# active: false
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
# OutdatedDocumentation: #报告任何具有与声明签名不匹配的KDoc的类、函数或构造函数
|
||||
# active: false
|
||||
# matchTypeParameters: true
|
||||
# matchDeclarationsOrder: true
|
||||
# allowParamOnConstructorProperties: false
|
||||
UndocumentedPublicClass: #报告没有所需文档的公共类、对象和接口
|
||||
active: false
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
searchInNestedClass: true
|
||||
searchInInnerClass: true
|
||||
searchInInnerObject: true
|
||||
searchInInnerInterface: true
|
||||
# searchInProtectedClass: false
|
||||
UndocumentedPublicFunction: #报告任何没有所需文档的公共方法
|
||||
active: false
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
# searchProtectedFunction: false
|
||||
UndocumentedPublicProperty: #报告任何没有所需文档的公共字段
|
||||
active: false
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
# searchProtectedProperty: false
|
||||
|
||||
complexity:
|
||||
active: true
|
||||
# CognitiveComplexMethod: #报告复杂方法
|
||||
# active: false
|
||||
# allowedComplexity: 15
|
||||
ComplexCondition: #报告复杂条件
|
||||
active: false
|
||||
# allowedConditions: 4
|
||||
ComplexInterface: #包含太多函数和/或属性的复杂接口表明该接口一次处理太多事情。接口应该遵循单一责任原则,以鼓励该接口的实现不要同时处理太多事情
|
||||
active: false
|
||||
# allowedDefinitions: 10
|
||||
includeStaticDeclarations: false
|
||||
includePrivateDeclarations: false
|
||||
# ignoreOverloaded: false
|
||||
|
||||
#该规则使用McCabe的循环复杂性(MCC)度量来测量函数源代码中线性独立路径的数量{https://www.ndepend.com/docs/code-metrics#CC}
|
||||
# CyclomaticComplexMethod: #复杂的方法很难理解和阅读。复杂方法的副作用可能并不明显。更喜欢把复杂的方法分解成更小的方法,这样更容易理解。较小的方法也可以命名得更清晰,从而提高代码的可读性。
|
||||
# active: true
|
||||
# allowedComplexity: 14
|
||||
# ignoreSingleWhenExpression: false
|
||||
# ignoreSimpleWhenEntries: false
|
||||
# ignoreNestingFunctions: false
|
||||
# ignoreLocalFunctions: false
|
||||
# nestingFunctions:
|
||||
# - 'also'
|
||||
# - 'apply'
|
||||
# - 'forEach'
|
||||
# - 'isNotNull'
|
||||
# - 'ifNull'
|
||||
# - 'let'
|
||||
# - 'run'
|
||||
# - 'use'
|
||||
# - 'with'
|
||||
LabeledExpression: #报告已标记的表达式
|
||||
active: false
|
||||
ignoredLabels: []
|
||||
LargeClass: #报告大型类
|
||||
active: true
|
||||
# allowedLines: 600
|
||||
LongMethod: #报告大方法
|
||||
active: true
|
||||
# allowedLines: 60
|
||||
LongParameterList: #报告参数超过特定阈值的函数和构造函数。
|
||||
active: true
|
||||
# allowedFunctionParameters: 6
|
||||
# allowedConstructorParameters: 15
|
||||
ignoreDefaultParameters: false
|
||||
ignoreDataClasses: true
|
||||
# ignoreAnnotatedParameter: []
|
||||
MethodOverloading: #报告经常重载的方法
|
||||
active: false
|
||||
# allowedOverloads: 6
|
||||
NamedArguments: #报告参数超过某个阈值且全部未命名的函数调用。参数过多的调用更难理解,因此命名参数会有所帮助。
|
||||
active: false
|
||||
# allowedArguments: 3
|
||||
# ignoreArgumentsMatchingNames: false
|
||||
NestedBlockDepth: #报告函数中嵌套深度过大
|
||||
active: true
|
||||
# allowedDepth: 4
|
||||
# NestedScopeFunctions: #避免嵌套作用域函数
|
||||
# active: false
|
||||
# allowedDepth: 1
|
||||
# functions:
|
||||
# - 'kotlin.apply'
|
||||
# - 'kotlin.run'
|
||||
# - 'kotlin.with'
|
||||
# - 'kotlin.let'
|
||||
# - 'kotlin.also'
|
||||
ReplaceSafeCallChainWithRun: #不可为null的类型上的安全调用链是冗余的,可以通过将冗余的安全调用封装在run{}块中来删除 {xxx?.run}
|
||||
active: false
|
||||
StringLiteralDuplication: #规则检测并报告重复的字符串文字
|
||||
active: false
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
# allowedDuplications: 2
|
||||
ignoreAnnotation: true
|
||||
# allowedWithLengthLessThan: 5
|
||||
ignoreStringsRegex: '$^'
|
||||
TooManyFunctions: #此规则报告包含过多函数的文件、类、接口、对象和枚举。每个元素可以配置有不同的阈值。
|
||||
active: true
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
# allowedFunctionsPerFile: 11
|
||||
# allowedFunctionsPerClass: 11
|
||||
# allowedFunctionsPerInterface: 11
|
||||
# allowedFunctionsPerObject: 11
|
||||
# allowedFunctionsPerEnum: 11
|
||||
ignoreDeprecated: false
|
||||
ignorePrivate: false
|
||||
ignoreOverridden: false
|
||||
|
||||
#协程规则集分析代码中潜在的协程问题。
|
||||
coroutines:
|
||||
active: true
|
||||
GlobalCoroutineUsage:
|
||||
active: false
|
||||
# InjectDispatcher: #始终使用依赖项注入来注入调度器,以便于测试
|
||||
# active: true
|
||||
# dispatcherNames:
|
||||
# - 'IO'
|
||||
# - 'Default'
|
||||
# - 'Unconfined'
|
||||
RedundantSuspendModifier: #suspend修饰符只能在需要的地方使用,否则该函数只能从其他挂起函数中使用。这不必要地限制了函数的使用,应该通过删除不需要的suspend修饰符来避免
|
||||
active: true
|
||||
# SleepInsteadOfDelay: #报告Thread.sleep在挂起函数和协同程序块中的使用情况。由于协程的轻量级性质,一个线程可以同时包含多个协程,因此如果一个协程调用thread.sleep,它可能会停止执行不相关的协程,并导致不可预测的行为。
|
||||
# active: true
|
||||
# SuspendFunSwallowedCancellation: #不应在runCatching的lambda块内部调用suspend函数
|
||||
# active: false
|
||||
# SuspendFunWithCoroutineScopeReceiver: #将CoroutineScope用作接收器的挂起函数不应标记为挂起。
|
||||
# active: false
|
||||
SuspendFunWithFlowReturnType: #从kotlin.coroutines.Flow返回Flow的函数不应标记为挂起,简单地调用一个返回Flow的函数的行为不应该有任何副作用。只有当针对返回的Flow开始收集时,才应该实际完成工作。
|
||||
active: true
|
||||
|
||||
#空块规则集包含将报告应避免的空代码块的规则。
|
||||
empty-blocks:
|
||||
active: true
|
||||
EmptyCatchBlock: #报告空的捕获块。空的catch块表示异常被忽略而未被处理
|
||||
active: true
|
||||
allowedExceptionNameRegex: '_|(ignore|expected).*'
|
||||
EmptyClassBlock: #报告空类。空的代码块没有任何作用,应该删除
|
||||
active: true
|
||||
EmptyDefaultConstructor: #报告空的默认构造函数。空的代码块没有任何作用,应该删除
|
||||
active: true
|
||||
EmptyDoWhileBlock: #报告空的do/while循环。空的代码块没有任何作用,应该删除
|
||||
active: true
|
||||
EmptyElseBlock: #报告为空的else块。空的代码块没有任何作用,应该删除
|
||||
active: true
|
||||
EmptyFinallyBlock: #报告为空的finally块。空代码块没有任何作用,应该删除
|
||||
active: true
|
||||
EmptyForBlock: #报告为空的for块。空代码块没有任何作用,应该删除
|
||||
active: true
|
||||
EmptyFunctionBlock: #报告为空的方法块。空代码块没有任何作用,应该删除
|
||||
active: true
|
||||
ignoreOverridden: false
|
||||
EmptyIfBlock: #报告为空的if块。空代码块没有任何作用,应该删除
|
||||
active: true
|
||||
EmptyInitBlock: #报告为空的init块。空代码块没有任何作用,应该删除
|
||||
active: true
|
||||
# EmptyKotlinFile: #报告为空的kotlin文件。空代码块没有任何作用,应该删除
|
||||
# active: true
|
||||
EmptySecondaryConstructor: #报告为空的辅助构造函数。空代码块没有任何作用,应该删除
|
||||
active: true
|
||||
EmptyTryBlock: #报告为空的try块。空代码块没有任何作用,应该删除
|
||||
active: true
|
||||
EmptyWhenBlock: #报告为空的when块。空代码块没有任何作用,应该删除
|
||||
active: true
|
||||
EmptyWhileBlock: #报告为空的while块。空代码块没有任何作用,应该删除
|
||||
active: true
|
||||
|
||||
exceptions:
|
||||
active: true
|
||||
ExceptionRaisedInUnexpectedLocation: #此规则报告从不应引发异常的函数。如果存在引发异常的函数,则会报告该函数。默认情况下,此规则检查toString、hashCode、equals和finalize。此规则可通过methodNames配置进行配置
|
||||
active: true
|
||||
methodNames:
|
||||
- 'equals'
|
||||
- 'finalize'
|
||||
- 'hashCode'
|
||||
- 'toString'
|
||||
InstanceOfCheckForException: #此规则报告通过is检查或强制转换检查异常类型的捕获块。代码应该使用多个catch块,而不是捕获一般的异常类型,然后检查特定的异常类型。然后,这些捕获块应该捕获特定的异常
|
||||
active: true
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
NotImplementedDeclaration: #此规则报告引发的所有NotImplementedError类型的异常。它还报告所有TODO(..)函数。这表明功能仍在开发中,无法正常工作。这两种声明都只能作为临时声明,不应放入生产环境中
|
||||
active: false
|
||||
# ObjectExtendsThrowable: #避免抛出单例Throwable
|
||||
# active: false
|
||||
PrintStackTrace: #打印堆栈
|
||||
active: true
|
||||
RethrowCaughtException: #重新抛出异常
|
||||
active: true
|
||||
ReturnFromFinally: # finally return
|
||||
active: true
|
||||
ignoreLabeled: false
|
||||
SwallowedException: #报告所有捕获异常且未正确传递(例如作为原因)到新引发异常的实例
|
||||
active: true
|
||||
ignoredExceptionTypes:
|
||||
- 'InterruptedException'
|
||||
- 'MalformedURLException'
|
||||
- 'NumberFormatException'
|
||||
- 'ParseException'
|
||||
allowedExceptionNameRegex: '_|(ignore|expected).*'
|
||||
ThrowingExceptionFromFinally: #报告从finally块抛出异常
|
||||
active: true
|
||||
ThrowingExceptionInMain: #报告在主方法中引发的所有异常。只有当异常可以由“更高”的函数处理时,才应该抛出异常
|
||||
active: false
|
||||
ThrowingExceptionsWithoutMessageOrCause: #报告在没有参数或进一步描述的情况下抛出的所有异常
|
||||
active: true
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
exceptions:
|
||||
- 'ArrayIndexOutOfBoundsException'
|
||||
- 'Exception'
|
||||
- 'IllegalArgumentException'
|
||||
- 'IllegalMonitorStateException'
|
||||
- 'IllegalStateException'
|
||||
- 'IndexOutOfBoundsException'
|
||||
- 'NullPointerException'
|
||||
- 'RuntimeException'
|
||||
- 'Throwable'
|
||||
ThrowingNewInstanceOfSameException: #异常不应封装在同一异常类型中,然后重新抛出。更喜欢用更有意义的异常类型包装异常
|
||||
active: true
|
||||
TooGenericExceptionCaught: #规则为类型过于通用的异常报告捕获块。最好捕获当前处理的案例的特定异常,避免扩大区域
|
||||
active: true
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
exceptionNames:
|
||||
- 'ArrayIndexOutOfBoundsException'
|
||||
- 'Error'
|
||||
# - 'Exception'
|
||||
- 'IllegalMonitorStateException'
|
||||
- 'IndexOutOfBoundsException'
|
||||
- 'NullPointerException'
|
||||
- 'RuntimeException'
|
||||
# - 'Throwable'
|
||||
allowedExceptionNameRegex: '_|(ignore|expected).*'
|
||||
TooGenericExceptionThrown: #规则报告类型过于通用的抛出异常。对于当前发生的情况,最好抛出特定的异常
|
||||
active: true
|
||||
exceptionNames:
|
||||
- 'Error'
|
||||
- 'Exception'
|
||||
- 'RuntimeException'
|
||||
- 'Throwable'
|
||||
|
||||
naming:
|
||||
active: true
|
||||
# BooleanPropertyNaming:
|
||||
# active: false
|
||||
# allowedPattern: '^(is|has|are)'
|
||||
ClassNaming:
|
||||
active: true
|
||||
classPattern: '[A-Z][a-zA-Z0-9]*'
|
||||
ConstructorParameterNaming:
|
||||
active: true
|
||||
parameterPattern: '[a-z][A-Za-z0-9]*'
|
||||
privateParameterPattern: '[a-z][A-Za-z0-9]*'
|
||||
excludeClassPattern: '$^'
|
||||
EnumNaming:
|
||||
active: true
|
||||
enumEntryPattern: '[A-Z][_a-zA-Z0-9]*'
|
||||
ForbiddenClassName:
|
||||
active: false
|
||||
forbiddenName: []
|
||||
# FunctionNameMaxLength:
|
||||
# active: false
|
||||
# maximumFunctionNameLength: 30
|
||||
# FunctionNameMinLength:
|
||||
# active: false
|
||||
# minimumFunctionNameLength: 3
|
||||
FunctionNaming:
|
||||
active: true
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
functionPattern: '[a-z][a-zA-Z0-9]*'
|
||||
excludeClassPattern: '$^'
|
||||
FunctionParameterNaming:
|
||||
active: true
|
||||
parameterPattern: '[a-z][A-Za-z0-9]*'
|
||||
excludeClassPattern: '$^'
|
||||
InvalidPackageDeclaration:
|
||||
active: true
|
||||
rootPackage: ''
|
||||
# requireRootInDeclaration: false
|
||||
# LambdaParameterNaming:
|
||||
# active: false
|
||||
# parameterPattern: '[a-z][A-Za-z0-9]*|_'
|
||||
MatchingDeclarationName:
|
||||
active: true
|
||||
mustBeFirst: true
|
||||
# multiplatformTargets:
|
||||
# - 'ios'
|
||||
# - 'android'
|
||||
# - 'js'
|
||||
# - 'jvm'
|
||||
# - 'native'
|
||||
# - 'iosArm64'
|
||||
# - 'iosX64'
|
||||
# - 'macosX64'
|
||||
# - 'mingwX64'
|
||||
# - 'linuxX64'
|
||||
MemberNameEqualsClassName:
|
||||
active: true
|
||||
ignoreOverridden: true
|
||||
# NoNameShadowing:
|
||||
# active: true
|
||||
NonBooleanPropertyPrefixedWithIs:
|
||||
active: false
|
||||
ObjectPropertyNaming:
|
||||
active: true
|
||||
constantPattern: '[A-Za-z][_A-Za-z0-9]*'
|
||||
propertyPattern: '[A-Za-z][_A-Za-z0-9]*'
|
||||
privatePropertyPattern: '(_)?[A-Za-z][_A-Za-z0-9]*'
|
||||
PackageNaming:
|
||||
active: true
|
||||
packagePattern: '[a-z]+(\.[a-z][A-Za-z0-9]*)*'
|
||||
TopLevelPropertyNaming:
|
||||
active: true
|
||||
constantPattern: '[A-Z][_A-Z0-9]*'
|
||||
propertyPattern: '[A-Za-z][_A-Za-z0-9]*'
|
||||
privatePropertyPattern: '_?[A-Za-z][_A-Za-z0-9]*'
|
||||
VariableMaxLength:
|
||||
active: false
|
||||
maximumVariableNameLength: 64
|
||||
VariableMinLength:
|
||||
active: false
|
||||
minimumVariableNameLength: 1
|
||||
VariableNaming:
|
||||
active: true
|
||||
variablePattern: '[a-z][A-Za-z0-9]*'
|
||||
privateVariablePattern: '(_)?[a-z][A-Za-z0-9]*'
|
||||
excludeClassPattern: '$^'
|
||||
|
||||
performance:
|
||||
active: true
|
||||
ArrayPrimitive: #使用Array<Primitive>会导致隐含拳击和性能打击。更喜欢使用Kotlin专用的数组实例
|
||||
active: true
|
||||
# CouldBeSequence: #由于每个调用都会创建一个新的列表,因此长链的收集操作将带来性能损失。请考虑使用序列
|
||||
# active: false
|
||||
# allowedOperations: 2
|
||||
ForEachOnRange: #在一个范围内使用forEach可能会产生巨大的性能成本。因此,在大多数情况下,应该使用简单的for循环 (for example: {(1..10).forEach})
|
||||
active: true
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
SpreadOperator: #在大多数情况下,使用排列运算符会导致在调用方法之前创建数组的完整副本。这会带来非常高的性能损失
|
||||
active: true
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
# UnnecessaryPartOfBinaryExpression: #仅在表达式仅使用以下运算符之一||或&&的情况下验证二进制表达式
|
||||
# active: false
|
||||
UnnecessaryTemporaryInstantiation: #将基元类型转换为字符串时,请避免使用临时对象。与直接使用基元类型相比,这会降低性能。若要解决此问题,请删除包装类型
|
||||
active: true
|
||||
|
||||
#潜在错误规则集提供了检测潜在错误的规则。
|
||||
potential-bugs:
|
||||
active: true
|
||||
# AvoidReferentialEquality: #检查平等
|
||||
# active: true
|
||||
# forbiddenTypePatterns:
|
||||
# - 'kotlin.String'
|
||||
# CastNullableToNonNullableType: #可空强转null
|
||||
# active: false
|
||||
# ignorePlatformTypes: true
|
||||
# CastToNullableType: #将不安全的强制转换报告为可为null的类型。作为字符串?未填充,可能被误用为安全类型转换(如?字符串)
|
||||
# active: false
|
||||
# CharArrayToStringCall:
|
||||
# active: false
|
||||
Deprecation:
|
||||
active: false
|
||||
# DontDowncastCollectionTypes: #检查集合向下类型转换,建议方法转换({list as MutableList} convert : {list.toMutableList()})
|
||||
# active: false
|
||||
# DoubleMutabilityForCollection: #MutableState可变var,不可变建议val
|
||||
# active: true
|
||||
# mutableTypes:
|
||||
# - 'kotlin.collections.MutableList'
|
||||
# - 'kotlin.collections.MutableMap'
|
||||
# - 'kotlin.collections.MutableSet'
|
||||
# - 'java.util.ArrayList'
|
||||
# - 'java.util.LinkedHashSet'
|
||||
# - 'java.util.HashSet'
|
||||
# - 'java.util.LinkedHashMap'
|
||||
# - 'java.util.HashMap'
|
||||
# ElseCaseInsteadOfExhaustiveWhen: #当表达式包含else大小写时,即使它们有一组详尽的大小写,该规则也会报告
|
||||
# active: false
|
||||
# ignoredSubjectTypes: []
|
||||
EqualsAlwaysReturnsTrueOrFalse: #报告始终返回true或false的equals()方法。
|
||||
active: true
|
||||
EqualsWithHashCodeExist: #当一个类重写equals()方法时,它也应该重写hashCode()方法
|
||||
active: true
|
||||
# ExitOutsideMain: #报告主函数之外使用System.exit()、Runtime.exit()、Runtime.holt()和Kotlin的exitProcess()时的使用情况
|
||||
# active: false
|
||||
ExplicitGarbageCollectionCall: #报告所有显式触发垃圾回收器的调用。代码应该独立于垃圾收集器工作,并且不应该要求在某些时间点触发GC。
|
||||
active: true
|
||||
HasPlatformType: #必须在公共API中显式声明平台类型,以防止出现意外错误
|
||||
active: true
|
||||
|
||||
#此规则对使用@CheckReturnValue或@CheckResult注释的函数返回值但未以任何方式使用该值的实例发出警告Kotlin编译器通常不会对这种情况发出警告,所以这就是该规则背后的基本原理。
|
||||
IgnoredReturnValue:
|
||||
active: false
|
||||
# restrictToConfig: true
|
||||
returnValueAnnotations:
|
||||
- 'CheckResult'
|
||||
- '*.CheckResult'
|
||||
- 'CheckReturnValue'
|
||||
- '*.CheckReturnValue'
|
||||
# ignoreReturnValueAnnotations:
|
||||
# - 'CanIgnoreReturnValue'
|
||||
# - '*.CanIgnoreReturnValue'
|
||||
# returnValueTypes:
|
||||
# - 'kotlin.sequences.Sequence'
|
||||
# - 'kotlinx.coroutines.flow.*Flow'
|
||||
# - 'java.util.stream.*Stream'
|
||||
# ignoreFunctionCall: []
|
||||
ImplicitDefaultLocale: #格式化字符串或执行大小写转换时,更喜欢显式传递[java.util.Locale],而不是使用隐式默认值
|
||||
active: false
|
||||
ImplicitUnitReturnType: #使用表达式语句的函数具有隐式返回类型
|
||||
active: false
|
||||
allowExplicitReturnType: true
|
||||
InvalidRange: #报告为空的范围
|
||||
active: true
|
||||
IteratorHasNextCallsNextMethod: #验证Iterator接口的实现。Iterator实现的hasNext()方法不应该有任何副作用
|
||||
active: true
|
||||
IteratorNotThrowingNoSuchElementException: #报告在next()方法的实现中不抛出NoSuchElementException的Iterator接口的实现。当没有更多的元素要返回时,迭代器应该抛出NoSuchElementException
|
||||
active: true
|
||||
LateinitUsage: #报告Late-init修饰符的用法。
|
||||
active: false
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
ignoreOnClassesPattern: ''
|
||||
MapGetWithNotNullAssertionOperator: #使用非null断言运算符报告对map访问方法map[]或map.get()的调用!!。这可能会导致NullPointerException
|
||||
active: true
|
||||
# MissingPackageDeclaration: #当缺少包声明时报告
|
||||
# active: false
|
||||
# excludes: ['**/*.kts']
|
||||
# NullCheckOnMutableProperty: #报告对可变属性的null检查,因为这些属性的值可以在执行if语句后更改,从而使null检查无效
|
||||
# active: false
|
||||
NullableToStringCall: #使用可能返回字符串“null”的可为null的接收器报告toString()调用
|
||||
active: false
|
||||
# PropertyUsedBeforeDeclaration: #报告在声明之前使用的属性
|
||||
# active: false
|
||||
UnconditionalJumpStatementInLoop: #报告包含跳转语句的循环,这些语句在任何条件下都会跳转
|
||||
active: false
|
||||
# UnnecessaryNotNullCheck: #使用requireNotNull或checkNotNull报告用户可以删除的不必要的非null检查。
|
||||
# active: false
|
||||
UnnecessaryNotNullOperator: #报告用户可以删除的不必要的非null运算符用法(!!)
|
||||
active: true
|
||||
UnnecessarySafeCall: #报告用户可以删除的不必要的非null运算符用法(?)
|
||||
active: true
|
||||
# UnreachableCatchBlock: #报告无法访问的捕获块。如果在上面的块中已经捕获到异常,则捕获块可能无法访问(Exception or Throwable)catch顺序
|
||||
# active: true
|
||||
UnreachableCode: #报告无法访问的代码。代码可能无法访问,因为它位于return、throw、continue或break表达式后面
|
||||
active: true
|
||||
UnsafeCallOnNullableType: #报告对可为null的类型的不安全调用
|
||||
active: true
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**']
|
||||
UnsafeCast: #报告不安全的强制转换
|
||||
active: true
|
||||
# UnusedUnaryOperator: #检测未使用的一元运算符
|
||||
# active: true
|
||||
UselessPostfixExpression: #报告未使用因而不必要的后缀表达式(++,--)
|
||||
active: true
|
||||
WrongEqualsTypeParameter: #报告接受错误类型参数的equals()方法
|
||||
active: true
|
||||
|
||||
#{link https://detekt.dev/docs/rules/style#explicititlambdaparameter}
|
||||
style:
|
||||
active: true
|
||||
# AbstractClassCanBeConcreteClass:
|
||||
# active: true
|
||||
# AbstractClassCanBeInterface:
|
||||
# active: true
|
||||
# AlsoCouldBeApply:
|
||||
# active: false
|
||||
# BracesOnIfStatements:
|
||||
# active: false
|
||||
# singleLine: 'never'
|
||||
# multiLine: 'always'
|
||||
# BracesOnWhenStatements:
|
||||
# active: false
|
||||
# singleLine: 'necessary'
|
||||
# multiLine: 'consistent'
|
||||
# CanBeNonNullable:
|
||||
# active: false
|
||||
# CascadingCallWrapping:
|
||||
# active: false
|
||||
# includeElvis: true
|
||||
ClassOrdering:
|
||||
active: false
|
||||
CollapsibleIfStatements:
|
||||
active: false
|
||||
DataClassContainsFunctions:
|
||||
active: false
|
||||
# conversionFunctionPrefix:
|
||||
# - 'to'
|
||||
# allowOperators: false
|
||||
DataClassShouldBeImmutable:
|
||||
active: false
|
||||
# DestructuringDeclarationWithTooManyEntries:
|
||||
# active: false
|
||||
# maxDestructuringEntries: 3
|
||||
# DoubleNegativeLambda:
|
||||
# active: false
|
||||
# negativeFunctions:
|
||||
# - reason: 'Use `takeIf` instead.'
|
||||
# value: 'takeUnless'
|
||||
# - reason: 'Use `all` instead.'
|
||||
# value: 'none'
|
||||
# negativeFunctionNameParts:
|
||||
# - 'not'
|
||||
# - 'non'
|
||||
EqualsNullCall:
|
||||
active: true
|
||||
EqualsOnSignatureLine:
|
||||
active: false
|
||||
ExplicitCollectionElementAccessMethod:
|
||||
active: false
|
||||
ExplicitItLambdaParameter:
|
||||
active: true
|
||||
ExpressionBodySyntax:
|
||||
active: false
|
||||
includeLineWrapping: false
|
||||
# ForbiddenAnnotation:
|
||||
# active: false
|
||||
# annotations:
|
||||
# - reason: 'it is a java annotation. Use `Suppress` instead.'
|
||||
# value: 'java.lang.SuppressWarnings'
|
||||
# - reason: 'it is a java annotation. Use `kotlin.Deprecated` instead.'
|
||||
# value: 'java.lang.Deprecated'
|
||||
# - reason: 'it is a java annotation. Use `kotlin.annotation.MustBeDocumented` instead.'
|
||||
# value: 'java.lang.annotation.Documented'
|
||||
# - reason: 'it is a java annotation. Use `kotlin.annotation.Target` instead.'
|
||||
# value: 'java.lang.annotation.Target'
|
||||
# - reason: 'it is a java annotation. Use `kotlin.annotation.Retention` instead.'
|
||||
# value: 'java.lang.annotation.Retention'
|
||||
# - reason: 'it is a java annotation. Use `kotlin.annotation.Repeatable` instead.'
|
||||
# value: 'java.lang.annotation.Repeatable'
|
||||
# - reason: 'Kotlin does not support @Inherited annotation, see https://youtrack.jetbrains.com/issue/KT-22265'
|
||||
# value: 'java.lang.annotation.Inherited'
|
||||
ForbiddenComment:
|
||||
active: false
|
||||
# comments:
|
||||
# - reason: 'Forbidden FIXME todo marker in comment, please fix the problem.'
|
||||
# value: 'FIXME:'
|
||||
# - reason: 'Forbidden STOPSHIP todo marker in comment, please address the problem before shipping the code.'
|
||||
# value: 'STOPSHIP:'
|
||||
# - reason: 'Forbidden TODO todo marker in comment, please do the changes.'
|
||||
# value: 'TODO:'
|
||||
allowedPatterns: ''
|
||||
ForbiddenImport:
|
||||
active: false
|
||||
imports: []
|
||||
forbiddenPatterns: ''
|
||||
ForbiddenMethodCall:
|
||||
active: false
|
||||
methods:
|
||||
- reason: 'print does not allow you to configure the output stream. Use a logger instead.'
|
||||
value: 'kotlin.io.print'
|
||||
- reason: 'println does not allow you to configure the output stream. Use a logger instead.'
|
||||
value: 'kotlin.io.println'
|
||||
# ForbiddenSuppress:
|
||||
# active: false
|
||||
# rules: []
|
||||
ForbiddenVoid:
|
||||
active: true
|
||||
ignoreOverridden: false
|
||||
ignoreUsageInGenerics: false
|
||||
FunctionOnlyReturningConstant:
|
||||
active: true
|
||||
ignoreOverridableFunction: true
|
||||
# ignoreActualFunction: true
|
||||
# excludedFunctions: []
|
||||
LoopWithTooManyJumpStatements:
|
||||
active: true
|
||||
maxJumpCount: 1
|
||||
MagicNumber:
|
||||
active: true
|
||||
excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/androidUnitTest/**', '**/androidInstrumentedTest/**', '**/jsTest/**', '**/iosTest/**', '**/*.kts']
|
||||
ignoreNumbers:
|
||||
- '-1'
|
||||
- '0'
|
||||
- '1'
|
||||
- '2'
|
||||
ignoreHashCodeFunction: true
|
||||
ignorePropertyDeclaration: false
|
||||
ignoreLocalVariableDeclaration: false
|
||||
ignoreConstantDeclaration: true
|
||||
ignoreCompanionObjectPropertyDeclaration: true
|
||||
ignoreAnnotation: false
|
||||
ignoreNamedArgument: true
|
||||
ignoreEnums: false
|
||||
ignoreRanges: false
|
||||
# ignoreExtensionFunctions: true
|
||||
MandatoryBracesLoops:
|
||||
active: false
|
||||
# MaxChainedCallsOnSameLine:
|
||||
# active: false
|
||||
# maxChainedCalls: 5
|
||||
MaxLineLength:
|
||||
active: true
|
||||
maxLineLength: 120
|
||||
excludePackageStatements: true
|
||||
excludeImportStatements: true
|
||||
excludeCommentStatements: false
|
||||
# excludeRawStrings: true
|
||||
# MayBeConstant:
|
||||
# active: true
|
||||
ModifierOrder:
|
||||
active: true
|
||||
# MultilineLambdaItParameter:
|
||||
# active: false
|
||||
# MultilineRawStringIndentation:
|
||||
# active: false
|
||||
# indentSize: 4
|
||||
# trimmingMethods:
|
||||
# - 'trimIndent'
|
||||
# - 'trimMargin'
|
||||
NestedClassesVisibility: #嵌套类从父类继承其可见性,通常用于实现嵌套在其中的类的本地功能。这些嵌套类的可见性不能高于其父类
|
||||
active: true
|
||||
NewLineAtEndOfFile:
|
||||
active: true
|
||||
NoTabs:
|
||||
active: false
|
||||
# NullableBooleanCheck:
|
||||
# active: false
|
||||
# ObjectLiteralToLambda: #除了实现单个方法之外什么都不做的匿名对象可以用作lambda。
|
||||
# active: true
|
||||
OptionalAbstractKeyword:
|
||||
active: true
|
||||
OptionalUnit:
|
||||
active: false
|
||||
PreferToOverPairSyntax:
|
||||
active: false
|
||||
ProtectedMemberInFinalClass:
|
||||
active: true
|
||||
# RangeUntilInsteadOfRangeTo:
|
||||
# active: false
|
||||
RedundantExplicitType:
|
||||
active: false
|
||||
RedundantHigherOrderMapUsage:
|
||||
active: true
|
||||
RedundantVisibilityModifierRule:
|
||||
active: false
|
||||
# ReturnCount: #在一个函数中有许多出口点可能会造成混乱,并影响代码的可读性。
|
||||
# active: false
|
||||
# max: 2
|
||||
# excludedFunctions:
|
||||
# - 'equals'
|
||||
# excludeLabeled: false
|
||||
# excludeReturnFromLambda: false
|
||||
# excludeGuardClauses: false
|
||||
SafeCast:
|
||||
active: true
|
||||
SerialVersionUIDInSerializableClass:
|
||||
active: true
|
||||
# SpacingAfterPackageDeclaration:
|
||||
# active: false
|
||||
# StringShouldBeRawString:
|
||||
# active: false
|
||||
# maxEscapedCharacterCount: 2
|
||||
# ignoredCharacters: []
|
||||
ThrowsCount: #限制函数中抛出语句的数量,函数应该有明确的throw语句
|
||||
active: true
|
||||
max: 2
|
||||
# excludeGuardClauses: false
|
||||
TrailingWhitespace:
|
||||
active: false
|
||||
# TrimMultilineRawString:
|
||||
# active: false
|
||||
# trimmingMethods:
|
||||
# - 'trimIndent'
|
||||
# - 'trimMargin'
|
||||
UnderscoresInNumericLiterals:
|
||||
active: false
|
||||
# acceptableLength: 4
|
||||
# allowNonStandardGrouping: false
|
||||
UnnecessaryAnnotationUseSiteTarget:
|
||||
active: false
|
||||
UnnecessaryApply:
|
||||
active: true
|
||||
# UnnecessaryBackticks:
|
||||
# active: false
|
||||
# UnnecessaryBracesAroundTrailingLambda:
|
||||
# active: false
|
||||
# UnnecessaryFilter:
|
||||
# active: true
|
||||
UnnecessaryInheritance: #此规则报告不必要的超类型
|
||||
active: true
|
||||
# UnnecessaryInnerClass:
|
||||
# active: false
|
||||
UnnecessaryLet:
|
||||
active: false
|
||||
UnnecessaryParentheses:
|
||||
active: false
|
||||
# allowForUnclearPrecedence: false
|
||||
# UnusedImport:
|
||||
# active: false
|
||||
# UnusedParameter:
|
||||
# active: true
|
||||
# allowedNames: 'ignored|expected'
|
||||
UnusedPrivateClass:
|
||||
active: true
|
||||
UnusedPrivateMember:
|
||||
active: true
|
||||
allowedNames: ''
|
||||
# UnusedPrivateProperty:
|
||||
# active: true
|
||||
# allowedNames: '_|ignored|expected|serialVersionUID'
|
||||
# UseAnyOrNoneInsteadOfFind:
|
||||
# active: true
|
||||
UseArrayLiteralsInAnnotations:
|
||||
active: true
|
||||
UseCheckNotNull:
|
||||
active: true
|
||||
UseCheckOrError:
|
||||
active: true
|
||||
UseDataClass:
|
||||
active: false
|
||||
allowVars: false
|
||||
UseEmptyCounterpart:
|
||||
active: false
|
||||
UseIfEmptyOrIfBlank:
|
||||
active: false
|
||||
UseIfInsteadOfWhen:
|
||||
active: false
|
||||
# ignoreWhenContainingVariableDeclaration: false
|
||||
# UseIsNullOrEmpty:
|
||||
# active: true
|
||||
# UseLet:
|
||||
# active: false
|
||||
# UseOrEmpty:
|
||||
# active: true
|
||||
UseRequire:
|
||||
active: true
|
||||
UseRequireNotNull:
|
||||
active: true
|
||||
# UseSumOfInsteadOfFlatMapSize:
|
||||
# active: false
|
||||
UselessCallOnNotNull:
|
||||
active: true
|
||||
UtilityClassWithPublicConstructor:
|
||||
active: true
|
||||
VarCouldBeVal:
|
||||
active: true
|
||||
# ignoreLateinitVar: false
|
||||
WildcardImport:
|
||||
active: true
|
||||
excludeImports:
|
||||
- 'java.util.*'
|
||||
@@ -4,15 +4,15 @@ def pmdConfigPath = rootProject.file("codequality").path
|
||||
|
||||
task pmd(type:Pmd){
|
||||
//忽略失败,如果设置为true,检测出bug会停止task
|
||||
ignoreFailures = false
|
||||
ignoreFailures = true
|
||||
consoleOutput = true
|
||||
//filter路径
|
||||
ruleSetFiles = files("${pmdConfigPath}/custom-pmd-ruleset.xml") // todo 新增rules
|
||||
ruleSetFiles = files("${pmdConfigPath}/custom-pmd-ruleset.xml") //新增rules
|
||||
ruleSets = []
|
||||
//检测资源路径
|
||||
source 'src/main/java','src/jinlvvan/java','src/driverm1/java'
|
||||
//排除项
|
||||
exclude '**/gen/**'
|
||||
exclude '**/gen/**,*.kt'
|
||||
|
||||
reports {
|
||||
xml.getRequired().set(false)
|
||||
|
||||
@@ -2,6 +2,12 @@ apply from: rootProject.file('gradle/ext.gradle')
|
||||
ext {
|
||||
time = ""
|
||||
kotlin_version = "1.6.21"
|
||||
|
||||
//插件工具存放目录
|
||||
codequality = new File(projectDir, 'codequality')
|
||||
//静态代码检查开关
|
||||
isCodeInspectEnable = true
|
||||
|
||||
dependencies = [
|
||||
// androidx
|
||||
androidxappcompat : "androidx.appcompat:appcompat:1.3.1",
|
||||
@@ -224,14 +230,8 @@ ext {
|
||||
block_detector : "com.mogo.eagle.core.block:runtime:10.0.21"
|
||||
]
|
||||
android = [
|
||||
launcherApplicationId : "com.mogo.launcher",
|
||||
independentApplicationId : "com.mogo.launcher.app",
|
||||
fLauncherApplicationId : "com.mogo.launcher.f",
|
||||
bydautoIndependentApplicationId: "com.mogo.launcher.app.bydauto",
|
||||
fLauncherAmapApiValue : "ace34d685cc04836c03905e4d1536125",
|
||||
bydautoIndependentApiValue : "b1e1d527b02a493913c50985827c943a",
|
||||
commonLauncherAmapApiValue : "a36b9f7b086fa3951bb35338a5a06dd3",
|
||||
commonIndependentAmapApiValue : "1c3fbc5f5e183619ffb1e7bc01e6751f",
|
||||
compileSdkVersion : 33,
|
||||
buildToolsVersion : "29.0.2",
|
||||
minSdkVersion : 23,
|
||||
|
||||
@@ -17,6 +17,7 @@ import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_AD
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_VEHICLE
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_CAR_CONFIG
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_CAR_LOC
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_PARALLEL
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_P_ACTIONS
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_P_OBJECTS
|
||||
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_STATUS_QUERY_RESP
|
||||
@@ -771,6 +772,12 @@ class MoGoAdasListenerImpl : OnAdasListener {
|
||||
* @param sysTime 当前时间戳
|
||||
* @param parallelTaskProcessNotice 数据
|
||||
*/
|
||||
@ChainLog(
|
||||
linkChainLog = CHAIN_TYPE_SOCKET_AUTOPILOT,
|
||||
linkCode = CHAIN_SOURCE_ADAS,
|
||||
nodeAliasCode = CHAIN_CODE_ADAS_PARALLEL,
|
||||
paramIndexes = [0, 1, 2, 4]
|
||||
)
|
||||
override fun onParallelDrivingResp(
|
||||
header: MessagePad.Header,
|
||||
messageType: AiCloudTask.MessageType,
|
||||
|
||||
@@ -19,6 +19,8 @@ import com.mogo.eagle.core.network.*
|
||||
import com.mogo.eagle.core.network.utils.*
|
||||
import com.mogo.eagle.core.utilcode.download.Config
|
||||
import com.mogo.eagle.core.utilcode.kotlin.*
|
||||
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
|
||||
import com.mogo.eagle.core.utilcode.mogo.getMisChannelCode
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.*
|
||||
import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr
|
||||
import com.mogo.eagle.core.utilcode.util.*
|
||||
@@ -66,6 +68,7 @@ class UpgradeAppNetWorkManager private constructor() {
|
||||
"${ it.first } -> ${ it.second }"
|
||||
}
|
||||
}
|
||||
itx["role"] = AppIdentityModeUtils.getMisChannelCode(FunctionBuildConfig.appIdentityMode)
|
||||
})
|
||||
}
|
||||
Log.d(TAG, "getAppUpgradeInfo: -> records:" + records?.entries?.joinToString(",") { itx -> "key:${itx.key} -> value:[${itx.value.joinToString(",") { "${it.first},${it.second}" } }]"})
|
||||
|
||||
@@ -93,16 +93,19 @@ class ParallelDriveView @JvmOverloads constructor(
|
||||
reqParaDrive()
|
||||
listener?.onReqClick()
|
||||
}
|
||||
|
||||
APP_REQUESTING -> {
|
||||
cancelParaDrive()
|
||||
Log.d(TAG, "Click-请求已取消")
|
||||
ToastUtils.showShort("请求已取消!")
|
||||
checkAvailableAndUpdateUI()
|
||||
}
|
||||
|
||||
AD_REQUESTING -> {
|
||||
Log.d(TAG, "Click-自动驾驶正在请求平行驾驶")
|
||||
ToastUtils.showShort("自动驾驶正在请求平行驾驶")
|
||||
}
|
||||
|
||||
UNAVAILABLE -> {
|
||||
Log.d(TAG, "Click-请P档驻车并松开油门刹车后请求")
|
||||
ToastUtils.showShort("请P档驻车并松开油门刹车后请求")
|
||||
@@ -118,41 +121,36 @@ class ParallelDriveView @JvmOverloads constructor(
|
||||
|
||||
override fun onAutopilotStatusResponse(state: Int) {
|
||||
super.onAutopilotStatusResponse(state)
|
||||
if (state != autopilotState) {
|
||||
synchronized(this) {
|
||||
when (state) {
|
||||
7 -> {
|
||||
if (this.autopilotState != 7) {
|
||||
isAutoDriving = false
|
||||
Log.d(TAG, "onAutopilotStatusResponse-7")
|
||||
ThreadUtils.runOnUiThread({
|
||||
updateUI(PARALLEL_DRIVING)
|
||||
}, ThreadUtils.MODE.QUEUE)
|
||||
}
|
||||
}
|
||||
when (state) {
|
||||
7 -> {
|
||||
isAutoDriving = false
|
||||
Log.d(TAG, "onAutopilotStatusResponse-7")
|
||||
ThreadUtils.runOnUiThread({
|
||||
updateUI(PARALLEL_DRIVING)
|
||||
}, ThreadUtils.MODE.QUEUE)
|
||||
}
|
||||
|
||||
2 -> {
|
||||
if (this.autopilotState != state) {
|
||||
isAutoDriving = true
|
||||
Log.d(TAG, "onAutopilotStatusResponse-2")
|
||||
}
|
||||
}
|
||||
|
||||
else -> {
|
||||
if (this.autopilotState != state) {
|
||||
isAutoDriving = false
|
||||
Log.d(TAG, "onAutopilotStatusResponse-else")
|
||||
if (this.autopilotState == 7) {
|
||||
ThreadUtils.runOnUiThread({
|
||||
checkAvailableAndUpdateUI()
|
||||
}, ThreadUtils.MODE.QUEUE)
|
||||
}
|
||||
}
|
||||
}
|
||||
2 -> {
|
||||
isAutoDriving = true
|
||||
Log.d(TAG, "onAutopilotStatusResponse-2")
|
||||
if (this.autopilotState == 7) {
|
||||
ThreadUtils.runOnUiThread({
|
||||
checkAvailableAndUpdateUI()
|
||||
}, ThreadUtils.MODE.QUEUE)
|
||||
}
|
||||
}
|
||||
|
||||
else -> {
|
||||
isAutoDriving = false
|
||||
Log.d(TAG, "onAutopilotStatusResponse-else")
|
||||
if (this.autopilotState == 7) {
|
||||
ThreadUtils.runOnUiThread({
|
||||
checkAvailableAndUpdateUI()
|
||||
}, ThreadUtils.MODE.QUEUE)
|
||||
}
|
||||
this.autopilotState = state
|
||||
}
|
||||
}
|
||||
this.autopilotState = state
|
||||
}
|
||||
|
||||
override fun onParallelDrivingAbility(
|
||||
|
||||
@@ -70,6 +70,7 @@ class ChainConstant {
|
||||
const val CHAIN_CODE_ADAS_P_OBJECTS = "CHAIN_CODE_ADAS_P_OBJECTS"
|
||||
const val CHAIN_CODE_ADAS_P_ACTIONS = "CHAIN_CODE_ADAS_P_ACTIONS"
|
||||
const val CHAIN_CODE_ADAS_STATUS_QUERY_RESP = "CHAIN_CODE_ADAS_STATUS_QUERY_RESP"
|
||||
const val CHAIN_CODE_ADAS_PARALLEL = "CHAIN_CODE_ADAS_PARALLEL"
|
||||
|
||||
const val CHAIN_CODE_RECORD_NATIVE_LEAK = "CHAIN_CODE_RECORD_NATIVE_LEAK"
|
||||
const val CHAIN_CODE_RECORD_ANR = "CHAIN_CODE_RECORD_ANR"
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.mogo.eagle.core.widget.media.video
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.os.Build
|
||||
import android.util.AttributeSet
|
||||
@@ -212,6 +213,7 @@ class NoticeSimpleVideoPlayer : StandardGSYVideoPlayer {
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("ObsoleteSdkInt")
|
||||
override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
|
||||
super.onSizeChanged(w, h, oldw, oldh)
|
||||
if (!mIfCurrentIsFullscreen) {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.mogo.commons.koom
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.Application
|
||||
import android.os.Build
|
||||
import com.kwai.koom.base.CommonConfig
|
||||
@@ -8,6 +9,7 @@ import com.kwai.koom.base.MonitorManager
|
||||
|
||||
object KoomInitTask : InitTask {
|
||||
|
||||
@SuppressLint("ObsoleteSdkInt")
|
||||
override fun init(application: Application) {
|
||||
val config = CommonConfig.Builder()
|
||||
.setApplication(application) // Set application
|
||||
|
||||
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -1,6 +1,6 @@
|
||||
#Fri Sep 22 11:53:55 CST 2023
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-bin.zip
|
||||
distributionPath=wrapper/dists
|
||||
zipStorePath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
|
||||
@@ -1,85 +0,0 @@
|
||||
//package com.autonavi.nge.dm;
|
||||
//
|
||||
//import android.os.IBinder;
|
||||
//import com.autonavi.nge.guidance.RouteBook;
|
||||
//import com.autonavi.nge.guidance.NaviInfo;
|
||||
//import com.autonavi.nge.guidance.RouteImage;
|
||||
//import com.autonavi.nge.guidance.LaneMask;
|
||||
//import com.autonavi.nge.obj.Category;
|
||||
//import com.autonavi.nge.obj.UpdateRegion;
|
||||
//import com.autonavi.nge.trafficInfo.TMCID;
|
||||
//import com.autonavi.nge.search.SPPoiItem;
|
||||
//import com.autonavi.nge.search.SPCategories;
|
||||
//import com.autonavi.nge.search.SPQuery;
|
||||
//import com.autonavi.nge.search.SPSearchResult;
|
||||
//import com.autonavi.nge.map.LonLat;
|
||||
//import com.autonavi.nge.guidance.GuidanceStatListener;
|
||||
//interface INavigationCore {
|
||||
//// IBinder getHandler();
|
||||
// void Routing_SetOrigin(float lon, float lat, int sessionid);
|
||||
// void Routing_SetDest(float lon, float lat, int sessionid);
|
||||
// void Routing_GetRoute(int sessionid);
|
||||
// boolean Routing_GetStatus(int sessionid);
|
||||
// void Routing_Reset(int sessionid);
|
||||
// void Routing_ClearTour(int sessionid);
|
||||
// void RoutingSetCostModel(int model, int sessionid);
|
||||
// void RoutingSetAvoidHighway(boolean isAvoidHighway, int sessionid);
|
||||
// void RoutingSetAvoidToll(boolean isAvoidToll, int sessionid);
|
||||
//
|
||||
// void Traffic_Update(in List<TMCID> ids, int evt);
|
||||
// void Traffic_UpdateByTile(int tile, in int[] ids, in byte[] speeds);
|
||||
// void RoutingSetUseTraffic(boolean useTraffic, int sessionid);
|
||||
// int RoutingGetRouteNum(int sessionid);
|
||||
// int RoutingGetLength(int route, int sessionid);
|
||||
// int RoutingGetSTime(int route, int sessionid);
|
||||
// int RoutingGetDTime(int route, int sessionid);
|
||||
// void addwaypoint(float lon, float lat, int heading, int sessionid);
|
||||
// void clearwaypoints(int sessionid);
|
||||
//
|
||||
// void Guidance_UpdatePosition(float lon, float lat, float speed, float heading);
|
||||
// void Guidance_StartNavi(int type);
|
||||
// void Guidance_StopNavi();
|
||||
// void Guidance_SetSimSpeed(int speed);
|
||||
// void Guidance_PauseSimNavi();
|
||||
// void Guidance_ResumeSimNavi();
|
||||
// RouteBook Guidance_RouteBook(int session,int start,int end);
|
||||
// NaviInfo Guidance_NaviInfo();
|
||||
// NaviInfo GetNaviInfo(in byte[] datas);
|
||||
// String Guidance_TTS();
|
||||
// RouteImage Guidance_Image(int imageUr,int imageBg,int imageArrow,int type);
|
||||
// LaneMask Guidance_LaneMask();
|
||||
// double Guidance_getRoadAngle();
|
||||
//
|
||||
// List<SPPoiItem> Search_getSearchResult(int productId, double lon, double lat, double radius, int kindfilter, int updateregionId, String keyWord, int pageIdx, int searchType);
|
||||
// SPPoiItem getPoiItemByPoiId(int poiId);
|
||||
// List<SPPoiItem> getPoiItemListByLonLat(int prodId, int urId, float lon, float lat, int pageCount, int pageIdx);
|
||||
// List<SPPoiItem> queryPoiItemByCircle(float centerLon,float centerLat,float radius);
|
||||
// List<SPPoiItem> queryPoiItemByRect(float topLeftLon,float topLeftLat,float bottomRightLon,float bottomRightLat);
|
||||
// List<SPPoiItem> queryPoiItemByPolygon(in List<LonLat> latLonPoints);
|
||||
// List getFTSDataByDA( int urid, String keyStr, int keytype, int maxResultCount);
|
||||
// List<String> getInputResult(int productId, int updateregionId, String inputStr);
|
||||
// List<String> getInputResultByDA();
|
||||
// List<Category> getCatList(int urid);
|
||||
// List<UpdateRegion> getURListByDA(int prodid);
|
||||
// void play(String text,boolean forcePlay);
|
||||
//
|
||||
// int RoutingGetSearchedCnt(int route, int sessionid);
|
||||
//
|
||||
// int [] getMemoryInfo();
|
||||
//
|
||||
// void startServer();
|
||||
//
|
||||
// void stopServer();
|
||||
//
|
||||
// int getMDSVersion();
|
||||
// String getDataVersion();
|
||||
// String getCopyRight();
|
||||
// String getCompilerVersion();
|
||||
//
|
||||
// void onGuidanceStatusChanged(int statCode, in byte[] datas);
|
||||
//
|
||||
// void setGuidanceStatListener(GuidanceStatListener listener);
|
||||
//
|
||||
// SPCategories getAllPoiCategories(int languageCode);
|
||||
// List<SPSearchResult> getPoiItemList(in SPQuery query);
|
||||
//}
|
||||
@@ -1025,7 +1025,7 @@ class MapController(private var context: Context?, private val mMapView: IMapVie
|
||||
val data = polylineOptions.lonLats
|
||||
var polyline: Polyline? = null
|
||||
try {
|
||||
if (data == null || data.size <= 1) {
|
||||
if (data.size <= 1) {
|
||||
throw RuntimeException("传入的坐标数必须大于1")
|
||||
}
|
||||
val strOptionsJson = JSON.toJSONString(polylineOptions)
|
||||
@@ -1054,7 +1054,7 @@ class MapController(private var context: Context?, private val mMapView: IMapVie
|
||||
val colorSize = colorValues?.size ?: 0
|
||||
var polyline: Polyline? = null
|
||||
try {
|
||||
if (data == null || data.size <= 1) {
|
||||
if (data.size <= 1) {
|
||||
throw RuntimeException("传入的坐标数必须大于1")
|
||||
}
|
||||
if (polylineOptions.getIsGradient() && colorSize > data.size) {
|
||||
@@ -1090,7 +1090,7 @@ class MapController(private var context: Context?, private val mMapView: IMapVie
|
||||
val data = deadZoneOptions.getPosition()
|
||||
var deadZone: DeadZone? = null
|
||||
try {
|
||||
if (data == null || data.size <= 1) {
|
||||
if (data.size <= 1) {
|
||||
throw RuntimeException("传入的坐标数必须大于1")
|
||||
}
|
||||
val strOptionsJson = JSON.toJSONString(deadZoneOptions)
|
||||
|
||||
Reference in New Issue
Block a user