summaryrefslogtreecommitdiffhomepage
path: root/android/src
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2021-03-18 10:40:35 -0300
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2021-03-18 10:40:35 -0300
commit5cdf38a437317798012a89ceac048b7566f63375 (patch)
tree394bbac3be0521008d7d79620988c84961712ee3 /android/src
parent35c5e29341c15f70e358b54c0e536255edaa654e (diff)
parent55d43f7b62d118be3a228c140b2e7d45c95722b7 (diff)
downloadmullvadvpn-5cdf38a437317798012a89ceac048b7566f63375.tar.xz
mullvadvpn-5cdf38a437317798012a89ceac048b7566f63375.zip
Merge branch 'custom-dns-allow-lan-warning-dialog'
Diffstat (limited to 'android/src')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/AdvancedFragment.kt30
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ConfirmDnsDialogFragment.kt (renamed from android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ConfirmPublicDnsDialogFragment.kt)22
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/customdns/CustomDnsAdapter.kt18
-rw-r--r--android/src/main/res/layout/confirm_dns.xml (renamed from android/src/main/res/layout/confirm_public_dns.xml)5
-rw-r--r--android/src/main/res/values/strings.xml2
5 files changed, 41 insertions, 36 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/AdvancedFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/AdvancedFragment.kt
index 8e241ace49..c9ba93cd67 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/AdvancedFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/AdvancedFragment.kt
@@ -5,6 +5,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager
+import java.net.InetAddress
import kotlinx.coroutines.CompletableDeferred
import net.mullvad.mullvadvpn.R
import net.mullvad.mullvadvpn.model.Settings
@@ -37,9 +38,7 @@ class AdvancedFragment : ServiceDependentFragment(OnNoService.GoBack) {
titleController = CollapsibleTitleController(view, R.id.contents)
customDnsAdapter = CustomDnsAdapter(customDns).apply {
- showPublicDnsAddressWarning = { confirmation ->
- showConfirmPublicDnsServerDialog(confirmation)
- }
+ confirmAddAddress = ::confirmAddAddress
}
view.findViewById<CustomRecyclerView>(R.id.contents).apply {
@@ -123,20 +122,31 @@ class AdvancedFragment : ServiceDependentFragment(OnNoService.GoBack) {
}
}
- private fun showConfirmPublicDnsServerDialog(confirmation: CompletableDeferred<Boolean>) {
+ private suspend fun confirmAddAddress(address: InetAddress): Boolean {
+ return when {
+ address.isLinkLocalAddress() || address.isSiteLocalAddress() -> {
+ settingsListener.settings.allowLan ||
+ showConfirmDnsServerDialog(R.string.confirm_local_dns)
+ }
+ else -> showConfirmDnsServerDialog(R.string.confirm_public_dns)
+ }
+ }
+
+ private suspend fun showConfirmDnsServerDialog(message: Int): Boolean {
+ val confirmation = CompletableDeferred<Boolean>()
val transaction = parentFragmentManager.beginTransaction()
detachBackButtonHandler()
transaction.addToBackStack(null)
- ConfirmPublicDnsDialogFragment()
- .apply { confirmPublicDns = confirmation }
+ ConfirmDnsDialogFragment(message, confirmation)
.show(transaction, null)
- jobTracker.newUiJob("restoreBackButtonHandler") {
- confirmation.await()
- attachBackButtonHandler()
- }
+ val result = confirmation.await()
+
+ attachBackButtonHandler()
+
+ return result
}
private fun attachBackButtonHandler() {
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ConfirmPublicDnsDialogFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ConfirmDnsDialogFragment.kt
index c75662dcf0..054323a314 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ConfirmPublicDnsDialogFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/ConfirmDnsDialogFragment.kt
@@ -9,27 +9,31 @@ import android.view.View
import android.view.ViewGroup
import android.view.ViewGroup.LayoutParams
import android.widget.Button
+import android.widget.TextView
import androidx.fragment.app.DialogFragment
import kotlinx.coroutines.CompletableDeferred
import net.mullvad.mullvadvpn.R
-class ConfirmPublicDnsDialogFragment : DialogFragment() {
- var confirmPublicDns: CompletableDeferred<Boolean>? = null
-
+class ConfirmDnsDialogFragment @JvmOverloads constructor(
+ private val message: Int = R.string.confirm_public_dns,
+ private var confirmation: CompletableDeferred<Boolean>? = null
+) : DialogFragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
- val view = inflater.inflate(R.layout.confirm_public_dns, container, false)
+ val view = inflater.inflate(R.layout.confirm_dns, container, false)
+
+ view.findViewById<TextView>(R.id.message).setText(message)
view.findViewById<Button>(R.id.back_button).setOnClickListener {
activity?.onBackPressed()
}
view.findViewById<Button>(R.id.confirm_button).setOnClickListener {
- confirmPublicDns?.complete(true)
- confirmPublicDns = null
+ confirmation?.complete(true)
+ confirmation = null
dismiss()
}
@@ -49,17 +53,17 @@ class ConfirmPublicDnsDialogFragment : DialogFragment() {
dialog?.window?.setLayout(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)
- if (confirmPublicDns == null) {
+ if (confirmation == null) {
dismiss()
}
}
override fun onDismiss(dialogInterface: DialogInterface) {
- confirmPublicDns?.complete(false)
+ confirmation?.complete(false)
}
override fun onDestroy() {
- confirmPublicDns?.cancel()
+ confirmation?.cancel()
super.onDestroy()
}
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/customdns/CustomDnsAdapter.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/customdns/CustomDnsAdapter.kt
index 0bb528c623..c66fc04848 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/customdns/CustomDnsAdapter.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/customdns/CustomDnsAdapter.kt
@@ -5,7 +5,6 @@ import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView.Adapter
import java.net.InetAddress
import kotlin.properties.Delegates.observable
-import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
import net.mullvad.mullvadvpn.R
@@ -55,7 +54,8 @@ class CustomDnsAdapter(val customDns: CustomDns) : Adapter<CustomDnsItemHolder>(
val isEditing
get() = editingPosition != null
- var showPublicDnsAddressWarning: ((CompletableDeferred<Boolean>) -> Unit)? = null
+ // By default, refuse the address so that the dialog can be recreated by the user if needed
+ var confirmAddAddress: suspend (InetAddress) -> Boolean = { false }
init {
customDns.apply {
@@ -286,22 +286,10 @@ class CustomDnsAdapter(val customDns: CustomDns) : Adapter<CustomDnsItemHolder>(
if (inetAddressValidator.isValid(addressText)) {
val address = InetAddress.getByName(addressText)
- if (!address.isLoopbackAddress() && confirmAddIfPublicAddress(address)) {
+ if (!address.isLoopbackAddress() && confirmAddAddress(address)) {
handler(address)
}
}
}
}
-
- private suspend fun confirmAddIfPublicAddress(address: InetAddress): Boolean {
- if (address.isLinkLocalAddress() || address.isSiteLocalAddress()) {
- return true
- }
-
- val confirmation = CompletableDeferred<Boolean>()
-
- showPublicDnsAddressWarning?.invoke(confirmation)
-
- return confirmation.await()
- }
}
diff --git a/android/src/main/res/layout/confirm_public_dns.xml b/android/src/main/res/layout/confirm_dns.xml
index 90b1dfda08..f271d1aa6e 100644
--- a/android/src/main/res/layout/confirm_public_dns.xml
+++ b/android/src/main/res/layout/confirm_dns.xml
@@ -13,13 +13,14 @@
android:layout_marginTop="8dp"
android:layout_gravity="center"
android:src="@drawable/icon_alert" />
- <TextView android:layout_width="wrap_content"
+ <TextView android:id="@+id/message"
+ android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0"
android:layout_marginTop="16dp"
android:textColor="@color/white80"
android:textSize="@dimen/text_small"
- android:text="@string/confirm_public_dns" />
+ android:text="" />
<Button android:id="@+id/confirm_button"
android:layout_marginVertical="@dimen/button_separation"
android:text="@string/add_anyway"
diff --git a/android/src/main/res/values/strings.xml b/android/src/main/res/values/strings.xml
index 397b9b81bc..05cff41571 100644
--- a/android/src/main/res/values/strings.xml
+++ b/android/src/main/res/values/strings.xml
@@ -170,6 +170,8 @@
<string name="add_a_server">Add a server</string>
<string name="custom_dns_example">e.g. 10.0.0.4</string>
<string name="custom_dns_footer">Enable to add at least one DNS server.</string>
+ <string name="confirm_local_dns">The local DNS server will not work unless you enable \"Local
+ Network Sharing\" under Preferences.</string>
<string name="confirm_public_dns">The DNS server you are trying to add might not work because
it is public. Currently we only support local DNS servers.</string>
<string name="add_anyway">Add anyway</string>