diff --git a/android/app/lint-baseline.xml b/android/app/lint-baseline.xml index f176afcc1c0c..ae420539c803 100644 --- a/android/app/lint-baseline.xml +++ b/android/app/lint-baseline.xml @@ -1,5 +1,5 @@ - + - - - - - - - - - - - - @@ -78,15 +45,4 @@ column="22"/> - - - - diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt index e0ee6cdd2128..c5d7c84a19f3 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt @@ -1,6 +1,5 @@ package net.mullvad.mullvadvpn.ui -import android.Manifest import android.app.Activity import android.content.Intent import android.net.VpnService @@ -13,7 +12,7 @@ import androidx.core.view.WindowCompat import net.mullvad.mullvadvpn.compose.screen.MullvadApp import net.mullvad.mullvadvpn.di.paymentModule import net.mullvad.mullvadvpn.di.uiModule -import net.mullvad.mullvadvpn.lib.common.util.SdkUtils.isNotificationPermissionGranted +import net.mullvad.mullvadvpn.lib.common.util.SdkUtils.requestNotificationPermissionIfMissing import net.mullvad.mullvadvpn.lib.endpoint.getApiEndpointConfigurationExtras import net.mullvad.mullvadvpn.lib.theme.AppTheme import net.mullvad.mullvadvpn.repository.AccountRepository @@ -61,7 +60,7 @@ class MainActivity : ComponentActivity() { } fun initializeStateHandlerAndServiceConnection() { - checkForNotificationPermission() + requestNotificationPermissionIfMissing(requestNotificationPermissionLauncher) serviceConnectionManager.bind( vpnPermissionRequestHandler = ::requestVpnPermission, apiEndpointConfiguration = intent?.getApiEndpointConfigurationExtras() @@ -101,10 +100,4 @@ class MainActivity : ComponentActivity() { startActivityForResult(intent, 0) } - - private fun checkForNotificationPermission() { - if (isNotificationPermissionGranted().not()) { - requestNotificationPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS) - } - } } diff --git a/android/lib/common/build.gradle.kts b/android/lib/common/build.gradle.kts index ba33ab7db7a6..e327a8922cd9 100644 --- a/android/lib/common/build.gradle.kts +++ b/android/lib/common/build.gradle.kts @@ -19,7 +19,6 @@ android { lint { lintConfig = file("${rootProject.projectDir}/config/lint.xml") - baseline = file("lint-baseline.xml") abortOnError = true warningsAsErrors = true } @@ -30,6 +29,7 @@ dependencies { implementation(project(Dependencies.Mullvad.resourceLib)) implementation(project(Dependencies.Mullvad.talpidLib)) + implementation(Dependencies.AndroidX.appcompat) implementation(Dependencies.jodaTime) implementation(Dependencies.Kotlin.stdlib) implementation(Dependencies.KotlinX.coroutinesAndroid) diff --git a/android/lib/common/lint-baseline.xml b/android/lib/common/lint-baseline.xml deleted file mode 100644 index 141342d1659d..000000000000 --- a/android/lib/common/lint-baseline.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - diff --git a/android/lib/common/src/main/kotlin/net/mullvad/mullvadvpn/lib/common/util/SdkUtils.kt b/android/lib/common/src/main/kotlin/net/mullvad/mullvadvpn/lib/common/util/SdkUtils.kt index fe9564c45d44..92f97146f841 100644 --- a/android/lib/common/src/main/kotlin/net/mullvad/mullvadvpn/lib/common/util/SdkUtils.kt +++ b/android/lib/common/src/main/kotlin/net/mullvad/mullvadvpn/lib/common/util/SdkUtils.kt @@ -8,6 +8,8 @@ import android.content.pm.PackageInfo import android.content.pm.PackageManager import android.os.Build import android.service.quicksettings.Tile +import androidx.activity.result.ActivityResultLauncher +import androidx.annotation.ChecksSdkIntAtLeast object SdkUtils { fun getSupportedPendingIntentFlags(): Int { @@ -22,12 +24,19 @@ object SdkUtils { } } - fun Context.isNotificationPermissionGranted(): Boolean { - return (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) || - checkSelfPermission(Manifest.permission.POST_NOTIFICATIONS) == + @ChecksSdkIntAtLeast(api = Build.VERSION_CODES.TIRAMISU) + fun Context.isNotificationPermissionMissing(): Boolean { + return (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) && + checkSelfPermission(Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED } + fun Context.requestNotificationPermissionIfMissing(launcher: ActivityResultLauncher) { + if (isNotificationPermissionMissing()) { + launcher.launch(Manifest.permission.POST_NOTIFICATIONS) + } + } + fun Tile.setSubtitleIfSupported(subtitleText: CharSequence) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { this.subtitle = subtitleText diff --git a/android/lib/resource/lint-baseline.xml b/android/lib/resource/lint-baseline.xml index 02060c3f43e8..13532ef7b2f8 100644 --- a/android/lib/resource/lint-baseline.xml +++ b/android/lib/resource/lint-baseline.xml @@ -1,5 +1,5 @@ - + + errorLine1=" <item quantity="one">Les crédits du compte expirent dans un jour</item>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + errorLine1=" <item quantity="one">O crédito da conta expira dentro de um dia</item>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + errorLine1=" <item quantity="one">Les crédits du compte expirent dans une heure</item>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + errorLine1=" <item quantity="one">O crédito da conta expira dentro de uma hora</item>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + errorLine1=" <item quantity="one">il y a une minute</item>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + errorLine1=" <item quantity="one">há um minuto</item>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + errorLine1=" <item quantity="one">il y a un mois</item>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + errorLine1=" <item quantity="one">há um mês</item>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + errorLine1=" <item quantity="one">il y a un an</item>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + errorLine1=" <item quantity="one">há um ano</item>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + errorLine1=" <item quantity="one">il y a une heure</item>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + errorLine1=" <item quantity="one">há uma hora</item>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -235,7 +235,8 @@ errorLine2=" ~~~~~~~~~"> + line="7" + column="30"/>