diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index d9068088..7da894af 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -129,6 +129,9 @@ android {
detekt {
baseline = file("detekt-baseline.xml")
+ config.setFrom("$rootDir/detekt.yml")
+ buildUponDefaultConfig = true
+ allRules = false
}
dependencies {
@@ -138,4 +141,5 @@ dependencies {
implementation(libs.androidx.exifinterface)
implementation(libs.androidx.lifecycle.runtime.ktx)
implementation(libs.androidx.window)
+ detektPlugins(libs.compose.detekt)
}
diff --git a/app/detekt-baseline.xml b/app/detekt-baseline.xml
index fabad69a..14f73eb9 100644
--- a/app/detekt-baseline.xml
+++ b/app/detekt-baseline.xml
@@ -11,13 +11,8 @@
ImplicitDefaultLocale:MySize.kt$MySize$String.format("%.1f", (width * height.toFloat()) / ONE_MEGA_PIXEL)
ImplicitDefaultLocale:VideoQuality.kt$VideoQuality$String.format("%.1f", (width * height.toFloat()) / ONE_MEGA_PIXEL)
LargeClass:MainActivity.kt$MainActivity : SimpleActivityMediaSavedListenerCameraXPreviewListener
- LongMethod:ImageSaver.kt$ImageSaver$@SuppressLint("RestrictedApi") private fun saveImageToTempFile(): File?
- LongMethod:PhotoProcessor.kt$PhotoProcessor$override fun doInBackground(vararg params: ByteArray): String
- LongMethod:ShadowDrawable.kt$ShadowDrawable$override fun draw(canvas: Canvas)
- LongParameterList:CameraXInitializer.kt$CameraXInitializer$( previewView: PreviewView, listener: CameraXPreviewListener, mediaSoundHelper: MediaSoundHelper, outputUri: Uri?, isThirdPartyIntent: Boolean, initInPhotoMode: Boolean, )
LongParameterList:CameraXPreview.kt$CameraXPreview$( private val activity: BaseSimpleActivity, private val previewView: PreviewView, private val mediaSoundHelper: MediaSoundHelper, private val mediaOutputHelper: MediaOutputHelper, private val cameraErrorHandler: CameraErrorHandler, private val listener: CameraXPreviewListener, private val isThirdPartyIntent: Boolean, initInPhotoMode: Boolean, )
LongParameterList:ImageSaver.kt$ImageSaver$( private val contentResolver: ContentResolver, private val image: ImageProxy, private val mediaOutput: MediaOutput.ImageCaptureOutput, private val metadata: Metadata, private val jpegQuality: Int, private val saveExifAttributes: Boolean, private val onImageSaved: (Uri) -> Unit, private val onError: (ImageCaptureException) -> Unit, )
- LongParameterList:ImageSaver.kt$ImageSaver.Companion$( contentResolver: ContentResolver, image: ImageProxy, mediaOutput: MediaOutput.ImageCaptureOutput, metadata: Metadata, jpegQuality: Int, saveExifAttributes: Boolean, onImageSaved: (Uri) -> Unit, onError: (ImageCaptureException) -> Unit, )
LoopWithTooManyJumpStatements:ImageQualityManager.kt$ImageQualityManager$for
LoopWithTooManyJumpStatements:MediaActionSound.kt$MediaActionSound$for
MagicNumber:BitmapUtils.kt$BitmapUtils$128
@@ -33,7 +28,6 @@
MagicNumber:FocusCircleView.kt$FocusCircleView$500L
MagicNumber:FocusCircleView.kt$FocusCircleView$50f
MagicNumber:MainActivity.kt$MainActivity$90
- MagicNumber:MainActivity.kt$MainActivity.<no name provided>$1000
MagicNumber:MainActivity.kt$MainActivity.<no name provided>$134
MagicNumber:MainActivity.kt$MainActivity.<no name provided>$225
MagicNumber:MainActivity.kt$MainActivity.<no name provided>$289
@@ -64,9 +58,6 @@
MagicNumber:SettingsActivity.kt$SettingsActivity$90
MagicNumber:SettingsActivity.kt$SettingsActivity$95
MagicNumber:ShadowDrawable.kt$ShadowDrawable$255.0f
- MagicNumber:TimerMode.kt$TimerMode.TIMER_10$10000
- MagicNumber:TimerMode.kt$TimerMode.TIMER_3$3000
- MagicNumber:TimerMode.kt$TimerMode.TIMER_5$5000
MagicNumber:VideoQuality.kt$VideoQuality$1.9f
MagicNumber:VideoQuality.kt$VideoQuality$16
MagicNumber:VideoQuality.kt$VideoQuality$19
@@ -79,14 +70,6 @@
MagicNumber:VideoQuality.kt$VideoQuality$6
MagicNumber:VideoQuality.kt$VideoQuality$8f
MagicNumber:VideoQuality.kt$VideoQuality$9f
- MagicNumber:VideoQuality.kt$VideoQuality.FHD$1080
- MagicNumber:VideoQuality.kt$VideoQuality.FHD$1920
- MagicNumber:VideoQuality.kt$VideoQuality.HD$1280
- MagicNumber:VideoQuality.kt$VideoQuality.HD$720
- MagicNumber:VideoQuality.kt$VideoQuality.SD$480
- MagicNumber:VideoQuality.kt$VideoQuality.SD$720
- MagicNumber:VideoQuality.kt$VideoQuality.UHD$2160
- MagicNumber:VideoQuality.kt$VideoQuality.UHD$3840
MaxLineLength:CameraErrorHandler.kt$CameraErrorHandler$VideoRecordEvent.Finalize.ERROR_INSUFFICIENT_STORAGE -> context.toast(R.string.video_capture_insufficient_storage_error)
MaxLineLength:ImageUtil.kt$ImageUtil$require(image.format == ImageFormat.YUV_420_888) { "Incorrect image format of the input image proxy: " + image.format }
MaxLineLength:MainActivity.kt$MainActivity$binding.toggleCamera.setImageResource(if (frontCamera) R.drawable.ic_camera_rear_vector else R.drawable.ic_camera_front_vector)
diff --git a/app/lint-baseline.xml b/app/lint-baseline.xml
index 604d3fc5..1839f58a 100644
--- a/app/lint-baseline.xml
+++ b/app/lint-baseline.xml
@@ -58,8 +58,8 @@
errorLine1="app-build-targetSDK = "34""
errorLine2=" ~~~~">
@@ -113,7 +113,7 @@
errorLine1="distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
@@ -124,8 +124,8 @@
errorLine1="gradlePlugins-agp = "8.10.1""
errorLine2=" ~~~~~~~~">
@@ -135,8 +135,8 @@
errorLine1="androidx-ktx = "2.8.6""
errorLine2=" ~~~~~~~">
@@ -146,8 +146,8 @@
errorLine1="app-build-compileSDKVersion = "34""
errorLine2=" ~~~~">
diff --git a/detekt.yml b/detekt.yml
new file mode 100644
index 00000000..6472c5a3
--- /dev/null
+++ b/detekt.yml
@@ -0,0 +1,58 @@
+build:
+ maxIssues: 0
+ weights:
+ complexity: 2
+ LongParameterList: 2
+ style: 1
+
+processors:
+ active: true
+ exclude:
+ - "FunctionCountProcessor"
+ - "PropertyCountProcessor"
+
+config:
+ validation: true
+
+complexity:
+ LongParameterList:
+ active: true
+ functionThreshold: 10
+ constructorThreshold: 8
+ ignoreDefaultParameters: true
+ ignoreAnnotated:
+ - "Composable"
+ LongMethod:
+ active: true
+ threshold: 120
+ ignoreAnnotated:
+ - "Composable"
+ - "Preview"
+
+style:
+ MagicNumber:
+ active: true
+ ignoreAnnotated: ["Composable"]
+ ignoreEnums: true
+ ignoreNumbers: ["-1", "0", "1", "2", "42", "1000"]
+ MaxLineLength:
+ active: true
+ maxLineLength: 120
+ excludePackageStatements: true
+ excludeImportStatements: true
+
+naming:
+ FunctionNaming:
+ active: true
+ ignoreAnnotated: ["Composable", "Preview"]
+ functionPattern: "[a-z][A-Za-z0-9]*"
+
+Compose: # io.nlopez.compose.rules
+ ComposableParametersOrdering:
+ active: true
+ ModifierDefaultValue:
+ active: true
+ MissingModifierDefaultValue:
+ active: true
+ PublicComposablePreview:
+ active: true
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index f0ef25d1..88a9b487 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -3,6 +3,7 @@
kotlin = "2.2.0"
#Detekt
detekt = "1.23.8"
+detektCompose = "0.4.22"
#Androidx
androidx-document-file = "1.1.0"
androidx-exif-interface = "1.4.1"
@@ -31,6 +32,8 @@ androidx-window = { module = "androidx.window:window", version.ref = "androidx-w
androidx-lifecycle-runtime-ktx = { module = "androidx.lifecycle:lifecycle-runtime-ktx", version.ref = "androidx-ktx" }
androidx-exifinterface = { module = "androidx.exifinterface:exifinterface", version.ref = "androidx-exif-interface" }
androidx-documentfile = { module = "androidx.documentfile:documentfile", version.ref = "androidx-document-file" }
+#Compose
+compose-detekt = { module = "io.nlopez.compose.rules:detekt", version.ref = "detektCompose" }
#Fossify
fossify-commons = { module = "org.fossify:commons", version.ref = "commons" }
[bundles]
diff --git a/lint.xml b/lint.xml
index 05685cd8..4b4a7825 100644
--- a/lint.xml
+++ b/lint.xml
@@ -31,4 +31,5 @@
+