aboutsummaryrefslogtreecommitdiff
path: root/app/src/main
diff options
context:
space:
mode:
authorHarsh Shandilya <me@msfjarvis.dev>2022-07-24 17:16:22 +0530
committerGitHub <noreply@github.com>2022-07-24 11:46:22 +0000
commit140175823f1c9763fb67a8d3ad135b7c94741421 (patch)
tree735c0aabb4aad62ee17c66305e7fa354d76787dd /app/src/main
parent9c5e9c8e4381aaa2886d0ad03070b2a57a937cce (diff)
Fix some StrictMode violations and start logging them (#2031)
Diffstat (limited to 'app/src/main')
-rw-r--r--app/src/main/java/app/passwordstore/Application.kt44
1 files changed, 44 insertions, 0 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)) {