summaryrefslogtreecommitdiffhomepage
path: root/android
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-06-05 13:14:28 -0300
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-06-05 13:14:28 -0300
commit9f24024e55c166f0b84cfadbb8f856baa2203193 (patch)
tree1b21b6d7e42c535f662f757affebc4c3a0b61e5e /android
parent284a08c528ac520c9e4dfef33254e7b511bf8679 (diff)
parent4a7e5672c88e89aaa275900b0f087f8e407bf737 (diff)
downloadmullvadvpn-9f24024e55c166f0b84cfadbb8f856baa2203193.tar.xz
mullvadvpn-9f24024e55c166f0b84cfadbb8f856baa2203193.zip
Merge branch 'secure-sensitive-screens'
Diffstat (limited to 'android')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/AccountFragment.kt2
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt24
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ProblemReportFragment.kt22
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceAwareFragment.kt10
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/WireguardKeyFragment.kt2
5 files changed, 59 insertions, 1 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/AccountFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/AccountFragment.kt
index eae581a243..20851572e9 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/AccountFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/AccountFragment.kt
@@ -15,6 +15,8 @@ import net.mullvad.mullvadvpn.ui.widget.UrlButton
import org.joda.time.DateTime
class AccountFragment : ServiceDependentFragment(OnNoService.GoBack) {
+ override val isSecureScreen = true
+
private val dateStyle = DateFormat.MEDIUM
private val timeStyle = DateFormat.SHORT
private val expiryFormatter = DateFormat.getDateTimeInstance(dateStyle, timeStyle)
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt
index 10e886f73e..c946b47e83 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt
@@ -6,11 +6,14 @@ import android.content.Intent
import android.os.Build
import android.os.Bundle
import android.os.IBinder
+import android.support.v4.app.Fragment
import android.support.v4.app.FragmentActivity
import android.support.v4.app.FragmentManager
+import android.view.WindowManager
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
+import net.mullvad.mullvadvpn.BuildConfig
import net.mullvad.mullvadvpn.R
import net.mullvad.mullvadvpn.dataproxy.MullvadProblemReport
import net.mullvad.mullvadvpn.service.MullvadVpnService
@@ -27,6 +30,7 @@ class MainActivity : FragmentActivity() {
private var service: MullvadVpnService.LocalBinder? = null
private var serviceConnection: ServiceConnection? = null
private var shouldConnect = false
+ private var visibleSecureScreens = HashSet<Fragment>()
private val serviceConnectionManager = object : android.content.ServiceConnection {
override fun onServiceConnected(className: ComponentName, binder: IBinder) {
@@ -105,6 +109,26 @@ 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 openSettings() {
supportFragmentManager?.beginTransaction()?.apply {
setCustomAnimations(
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ProblemReportFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ProblemReportFragment.kt
index 0cf2c61c84..69da3542c5 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ProblemReportFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ProblemReportFragment.kt
@@ -13,6 +13,7 @@ import android.widget.EditText
import android.widget.ScrollView
import android.widget.TextView
import android.widget.ViewSwitcher
+import kotlin.properties.Delegates.observable
import kotlinx.coroutines.CompletableDeferred
import net.mullvad.mullvadvpn.R
import net.mullvad.mullvadvpn.dataproxy.MullvadProblemReport
@@ -21,6 +22,17 @@ import net.mullvad.mullvadvpn.util.JobTracker
class ProblemReportFragment : Fragment() {
private val jobTracker = JobTracker()
+ private var showingEmail by observable(false) { _, oldValue, newValue ->
+ if (oldValue != newValue) {
+ if (newValue == true) {
+ parentActivity.enterSecureScreen(this)
+ } else {
+ parentActivity.leaveSecureScreen(this)
+ }
+ }
+ }
+
+ private lateinit var parentActivity: MainActivity
private lateinit var problemReport: MullvadProblemReport
private lateinit var bodyContainer: ViewSwitcher
@@ -46,7 +58,7 @@ class ProblemReportFragment : Fragment() {
override fun onAttach(context: Context) {
super.onAttach(context)
- val parentActivity = context as MainActivity
+ parentActivity = context as MainActivity
problemReport = parentActivity.problemReport
problemReport.collect()
@@ -118,6 +130,12 @@ class ProblemReportFragment : Fragment() {
super.onDestroyView()
}
+ override fun onDetach() {
+ showingEmail = false
+
+ super.onDetach()
+ }
+
private suspend fun sendReport(shouldConfirmNoEmail: Boolean) {
val userEmail = userEmailInput.text.trim().toString()
@@ -194,6 +212,8 @@ class ProblemReportFragment : Fragment() {
responseMessageLabel.visibility = View.VISIBLE
responseEmailLabel.visibility = View.VISIBLE
responseEmailLabel.text = userEmail
+
+ showingEmail = true
}
sendStatusLabel.setText(R.string.sent)
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceAwareFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceAwareFragment.kt
index 648215527c..4bbff22a59 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceAwareFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ServiceAwareFragment.kt
@@ -7,6 +7,8 @@ import net.mullvad.mullvadvpn.util.JobTracker
abstract class ServiceAwareFragment : Fragment() {
val jobTracker = JobTracker()
+ open val isSecureScreen = false
+
lateinit var parentActivity: MainActivity
private set
@@ -18,6 +20,10 @@ abstract class ServiceAwareFragment : Fragment() {
parentActivity = context as MainActivity
+ if (isSecureScreen) {
+ parentActivity.enterSecureScreen(this)
+ }
+
parentActivity.serviceNotifier.subscribe(this) { connection ->
configureServiceConnection(connection)
}
@@ -32,6 +38,10 @@ abstract class ServiceAwareFragment : Fragment() {
override fun onDetach() {
parentActivity.serviceNotifier.unsubscribe(this)
+ if (isSecureScreen) {
+ parentActivity.leaveSecureScreen(this)
+ }
+
super.onDetach()
}
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/WireguardKeyFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/WireguardKeyFragment.kt
index 25537b76a5..787032eaab 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/WireguardKeyFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/WireguardKeyFragment.kt
@@ -25,6 +25,8 @@ import org.joda.time.format.DateTimeFormat
val RFC3339_FORMAT = DateTimeFormat.forPattern("YYYY-MM-dd HH:mm:ss.SSSSSSSSSS z")
class WireguardKeyFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) {
+ override val isSecureScreen = true
+
sealed class ActionState {
class Idle(val verified: Boolean) : ActionState()
class Generating(val replacing: Boolean) : ActionState()