summaryrefslogtreecommitdiffhomepage
path: root/android/app/src
diff options
context:
space:
mode:
authorJonatan Rhodin <jonatan.rhodin@mullvad.net>2023-10-27 10:23:04 +0200
committerJonatan Rhodin <jonatan.rhodin@mullvad.net>2023-10-27 10:23:04 +0200
commitae31f2cad7b14e4590666d9d45a737691cc7925d (patch)
treea02498eeb933bb804543e3d7c43935861f8df9d0 /android/app/src
parent44676ede5ba7df73fc4f7586fea010db55b80d4d (diff)
parenta275b7b70bf6f3ba8394623ea8215e16a12b9928 (diff)
downloadmullvadvpn-ae31f2cad7b14e4590666d9d45a737691cc7925d.tar.xz
mullvadvpn-ae31f2cad7b14e4590666d9d45a737691cc7925d.zip
Merge branch 'prepare-for-compose-navigation-droid-442'
Diffstat (limited to 'android/app/src')
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/RedeemVoucherDialog.kt10
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AccountScreen.kt4
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/util/SecureScreen.kt30
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt38
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/AccountFragment.kt12
5 files changed, 44 insertions, 50 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/RedeemVoucherDialog.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/RedeemVoucherDialog.kt
index 1f86eedc64..93734e537d 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/RedeemVoucherDialog.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/dialog/RedeemVoucherDialog.kt
@@ -22,6 +22,9 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.tooling.preview.Devices
import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.window.DialogProperties
+import androidx.compose.ui.window.SecureFlagPolicy
+import net.mullvad.mullvadvpn.BuildConfig
import net.mullvad.mullvadvpn.R
import net.mullvad.mullvadvpn.compose.button.PrimaryButton
import net.mullvad.mullvadvpn.compose.button.VariantButton
@@ -171,7 +174,12 @@ fun RedeemVoucherDialog(
titleContentColor = MaterialTheme.colorScheme.onBackground,
onDismissRequest = {
onDismiss(uiState.voucherViewModelState is VoucherDialogState.Success)
- }
+ },
+ properties =
+ DialogProperties(
+ securePolicy =
+ if (BuildConfig.DEBUG) SecureFlagPolicy.Inherit else SecureFlagPolicy.SecureOn
+ )
)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AccountScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AccountScreen.kt
index 683c57987b..b19d432549 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AccountScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/AccountScreen.kt
@@ -37,6 +37,7 @@ import net.mullvad.mullvadvpn.compose.component.MissingPolicy
import net.mullvad.mullvadvpn.compose.component.NavigateBackIconButton
import net.mullvad.mullvadvpn.compose.component.ScaffoldWithMediumTopBar
import net.mullvad.mullvadvpn.compose.dialog.DeviceNameInfoDialog
+import net.mullvad.mullvadvpn.compose.util.SecureScreenWhileInView
import net.mullvad.mullvadvpn.constant.IS_PLAY_BUILD
import net.mullvad.mullvadvpn.lib.common.util.openAccountPageInBrowser
import net.mullvad.mullvadvpn.lib.theme.AppTheme
@@ -74,6 +75,9 @@ fun AccountScreen(
onLogoutClick: () -> Unit = {},
onBackClick: () -> Unit = {}
) {
+ // This will enable SECURE_FLAG while this screen is visible to preview screenshot
+ SecureScreenWhileInView()
+
val context = LocalContext.current
val backgroundColor = MaterialTheme.colorScheme.background
val systemUiController = rememberSystemUiController()
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/util/SecureScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/util/SecureScreen.kt
new file mode 100644
index 0000000000..2680f5b4b8
--- /dev/null
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/util/SecureScreen.kt
@@ -0,0 +1,30 @@
+package net.mullvad.mullvadvpn.compose.util
+
+import android.app.Activity
+import android.view.WindowManager
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.DisposableEffect
+import androidx.compose.runtime.saveable.rememberSaveable
+import androidx.compose.ui.platform.LocalContext
+import net.mullvad.mullvadvpn.BuildConfig
+
+@Composable
+fun SecureScreenWhileInView() {
+ if (BuildConfig.DEBUG) {
+ return
+ }
+ val context = LocalContext.current
+ val window = (context as Activity).window
+ val secureScreenWasEnabled = rememberSaveable {
+ window.attributes.flags and WindowManager.LayoutParams.FLAG_SECURE != 0
+ }
+
+ DisposableEffect(Unit) {
+ window.addFlags(WindowManager.LayoutParams.FLAG_SECURE)
+ onDispose {
+ if (!secureScreenWasEnabled) {
+ window.clearFlags(WindowManager.LayoutParams.FLAG_SECURE)
+ }
+ }
+ }
+}
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 e8c8cefb81..98b0c0576c 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
@@ -9,13 +9,10 @@ import android.content.res.Configuration
import android.net.VpnService
import android.os.Bundle
import android.util.Log
-import android.view.WindowManager
-import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.runtime.collectAsState
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.platform.ViewCompositionStrategy
-import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import androidx.fragment.app.FragmentManager
import androidx.lifecycle.lifecycleScope
@@ -59,22 +56,18 @@ import org.koin.android.ext.android.getKoin
import org.koin.core.context.loadKoinModules
open class MainActivity : FragmentActivity() {
- private var requestNotificationPermissionLauncher: ActivityResultLauncher<String> =
+ private val requestNotificationPermissionLauncher =
registerForActivityResult(ActivityResultContracts.RequestPermission()) {
// NotificationManager.areNotificationsEnabled is used to check the state rather than
// handling the callback value.
}
- private var visibleSecureScreens = HashSet<Fragment>()
-
private val deviceIsTv by lazy {
val uiModeManager = getSystemService(UI_MODE_SERVICE) as UiModeManager
uiModeManager.currentModeType == Configuration.UI_MODE_TYPE_TELEVISION
}
- var backButtonHandler: (() -> Boolean)? = null
-
private lateinit var accountRepository: AccountRepository
private lateinit var deviceRepository: DeviceRepository
private lateinit var privacyDisclaimerRepository: PrivacyDisclaimerRepository
@@ -135,14 +128,6 @@ open class MainActivity : FragmentActivity() {
serviceConnectionManager.onVpnPermissionResult(resultCode == Activity.RESULT_OK)
}
- override fun onBackPressed() {
- val handled = backButtonHandler?.invoke() ?: false
-
- if (!handled) {
- super.onBackPressed()
- }
- }
-
override fun onStop() {
Log.d("mullvad", "Stopping main activity")
super.onStop()
@@ -159,26 +144,6 @@ open class MainActivity : FragmentActivity() {
super.onDestroy()
}
- fun enterSecureScreen(screen: Fragment) {
- synchronized(this) {
- visibleSecureScreens.add(screen)
-
- if (!BuildConfig.DEBUG) {
- window?.addFlags(WindowManager.LayoutParams.FLAG_SECURE)
- }
- }
- }
-
- fun leaveSecureScreen(screen: Fragment) {
- synchronized(this) {
- visibleSecureScreens.remove(screen)
-
- if (!BuildConfig.DEBUG && visibleSecureScreens.isEmpty()) {
- window?.clearFlags(WindowManager.LayoutParams.FLAG_SECURE)
- }
- }
- }
-
fun openAccount() {
supportFragmentManager.beginTransaction().apply {
setCustomAnimations(
@@ -208,7 +173,6 @@ open class MainActivity : FragmentActivity() {
}
private fun launchDeviceStateHandler(): Job {
-
return lifecycleScope.launch {
launch {
deviceRepository.deviceState
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/AccountFragment.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/AccountFragment.kt
index 3bd46d9f52..efdc0783a3 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/AccountFragment.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/AccountFragment.kt
@@ -1,6 +1,5 @@
package net.mullvad.mullvadvpn.ui.fragment
-import android.app.Activity
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
@@ -11,7 +10,6 @@ import androidx.compose.ui.platform.ComposeView
import net.mullvad.mullvadvpn.R
import net.mullvad.mullvadvpn.compose.screen.AccountScreen
import net.mullvad.mullvadvpn.lib.theme.AppTheme
-import net.mullvad.mullvadvpn.ui.extension.requireMainActivity
import net.mullvad.mullvadvpn.viewmodel.AccountViewModel
import org.koin.androidx.viewmodel.ext.android.viewModel
@@ -42,16 +40,6 @@ class AccountFragment : BaseFragment() {
}
}
- override fun onAttach(activity: Activity) {
- super.onAttach(activity)
- requireMainActivity().enterSecureScreen(this)
- }
-
- override fun onDetach() {
- super.onDetach()
- requireMainActivity().leaveSecureScreen(this)
- }
-
override fun onEnterTransitionAnimationEnd() {
vm.onTransitionAnimationEnd()
}