aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/src/main/java/app/passwordstore/Application.kt44
-rw-r--r--build-logic/android-plugins/src/main/kotlin/app/passwordstore/gradle/SentryPlugin.kt6
2 files changed, 45 insertions, 5 deletions
diff --git a/app/src/main/java/app/passwordstore/Application.kt b/app/src/main/java/app/passwordstore/Application.kt
index 05bffbfb..e1436d29 100644
--- a/app/src/main/java/app/passwordstore/Application.kt
+++ b/app/src/main/java/app/passwordstore/Application.kt
@@ -5,6 +5,8 @@
package app.passwordstore
import android.content.SharedPreferences
+import android.os.Build
+import android.os.StrictMode
import androidx.appcompat.app.AppCompatDelegate
import androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY
import androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM
@@ -24,10 +26,13 @@ import com.google.android.material.color.DynamicColors
import dagger.hilt.android.HiltAndroidApp
import io.sentry.Sentry
import io.sentry.protocol.User
+import java.util.concurrent.Executors
import javax.inject.Inject
import logcat.AndroidLogcatLogger
import logcat.LogPriority.DEBUG
+import logcat.LogPriority.VERBOSE
import logcat.LogcatLogger
+import logcat.logcat
@Suppress("Unused")
@HiltAndroidApp
@@ -47,6 +52,7 @@ class Application : android.app.Application(), SharedPreferences.OnSharedPrefere
prefs.getBoolean(PreferenceKeys.ENABLE_DEBUG_LOGGING, false)
) {
LogcatLogger.install(AndroidLogcatLogger(DEBUG))
+ setVmPolicy()
}
prefs.registerOnSharedPreferenceChangeListener(this)
setNightMode()
@@ -75,6 +81,44 @@ class Application : android.app.Application(), SharedPreferences.OnSharedPrefere
}
}
+ private fun setVmPolicy() {
+ val builder =
+ StrictMode.VmPolicy.Builder()
+ .detectActivityLeaks()
+ .detectCleartextNetwork()
+ .detectFileUriExposure()
+ .detectLeakedClosableObjects()
+ .detectLeakedRegistrationObjects()
+ .detectLeakedSqlLiteObjects()
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ builder.detectContentUriWithoutPermission()
+ }
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
+ builder.detectCredentialProtectedWhileLocked().detectImplicitDirectBoot()
+ }
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+ builder.detectNonSdkApiUsage()
+ }
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+ builder.detectIncorrectContextUse().detectUnsafeIntentLaunch()
+ }
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
+ builder.penaltyListener(Executors.newSingleThreadExecutor()) { violation ->
+ logcat(VERBOSE) { violation.stackTraceToString() }
+ }
+ } else {
+ builder.penaltyLog()
+ }
+
+ val policy = builder.build()
+ StrictMode.setVmPolicy(policy)
+ }
+
private fun setNightMode() {
AppCompatDelegate.setDefaultNightMode(
when (prefs.getString(PreferenceKeys.APP_THEME) ?: getString(R.string.app_theme_def)) {
diff --git a/build-logic/android-plugins/src/main/kotlin/app/passwordstore/gradle/SentryPlugin.kt b/build-logic/android-plugins/src/main/kotlin/app/passwordstore/gradle/SentryPlugin.kt
index c18e1b79..034c62f9 100644
--- a/build-logic/android-plugins/src/main/kotlin/app/passwordstore/gradle/SentryPlugin.kt
+++ b/build-logic/android-plugins/src/main/kotlin/app/passwordstore/gradle/SentryPlugin.kt
@@ -4,7 +4,6 @@ import app.passwordstore.gradle.flavors.FlavorDimensions
import app.passwordstore.gradle.flavors.ProductFlavors
import com.android.build.api.variant.ApplicationAndroidComponentsExtension
import io.sentry.android.gradle.SentryPlugin
-import io.sentry.android.gradle.extensions.InstrumentationFeature
import io.sentry.android.gradle.extensions.SentryPluginExtension
import org.gradle.api.Plugin
import org.gradle.api.Project
@@ -32,10 +31,7 @@ class SentryPlugin : Plugin<Project> {
)
ignoredBuildTypes.set(setOf("debug"))
ignoredFlavors.set(setOf(ProductFlavors.FREE))
- tracingInstrumentation {
- enabled.set(true)
- features.set(setOf(InstrumentationFeature.FILE_IO))
- }
+ tracingInstrumentation { enabled.set(false) }
autoInstallation.enabled.set(false)
}
}