diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5e08fb93adc8654ecf14c22d050d882a36472506..54dbdd79490a9dd78bc62b296ed151d0e1a63b6c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -4,6 +4,8 @@ <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> + <!-- Enable after we target Android P --> + <!--<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />--> <application android:name=".QuasseldroidNG" diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/QuasseldroidNG.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/QuasseldroidNG.kt index 0b796525c93b0e2962f052d6ea7d3b95dc445ccc..f5ea01c145ee26071a87ebe3d59c62b638907f74 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/QuasseldroidNG.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/QuasseldroidNG.kt @@ -5,6 +5,7 @@ import android.content.pm.ShortcutInfo import android.content.pm.ShortcutManager import android.graphics.drawable.Icon import android.os.Build +import android.os.StrictMode import android.support.v7.preference.PreferenceManager import com.squareup.leakcanary.LeakCanary import de.kuschku.malheur.CrashHandler @@ -64,5 +65,52 @@ class QuasseldroidNG : Application() { .build() ) } + + if (BuildConfig.DEBUG) { + StrictMode.setThreadPolicy( + StrictMode.ThreadPolicy.Builder() + .detectNetwork() + .detectCustomSlowCalls() + .let { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + it.detectResourceMismatches() + } else { + it + } + } + .let { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + it.detectUnbufferedIo() + } else { + it + } + } + .penaltyLog() + .build() + ) + StrictMode.setVmPolicy( + StrictMode.VmPolicy.Builder() + .detectLeakedSqlLiteObjects() + .detectActivityLeaks() + .detectLeakedClosableObjects() + .detectLeakedRegistrationObjects() + .let { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { + it.detectFileUriExposure() + } else { + it + } + } + .let { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + it.detectContentUriWithoutPermission() + } else { + it + } + } + .penaltyLog() + .build() + ) + } } } diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/QuasselMessageRenderer.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/QuasselMessageRenderer.kt index da3b5cda99cac6d48a75e2b52a2b0d91526364ea..e61e8c882969399cb5bc94615270a6bb338b674b 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/QuasselMessageRenderer.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/QuasselMessageRenderer.kt @@ -297,14 +297,14 @@ class QuasselMessageRenderer( @Language("RegExp") private val scheme = "(?:(?:mailto:|magnet:|(?:[+.-]?\\w)+://)|www(?=\\.\\S+\\.))" @Language("RegExp") - private val authority = "(?:(?:[,.;@:]?[-\\w]+)+\\.?|\\[[0-9a-f:.]+])(?::\\d+)?" + private val authority = "(?:(?:[,.;@:]?[-\\w]+)+\\.?|\\[[0-9a-f:.]+])?(?::\\d+)?" @Language("RegExp") private val urlChars = "(?:[,.;:]*[\\w~@/?&=+$()!%#*-])" @Language("RegExp") private val urlEnd = "((?:>|[,.;:\"]*\\s|\\b|$))" private val urlPattern = Regex( - "\\b($scheme$authority(?:/$urlChars*)?)$urlEnd", + "\\b($scheme$authority(?:$urlChars*)?)$urlEnd", RegexOption.IGNORE_CASE )