diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2021-03-18 10:40:35 -0300 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2021-03-18 10:40:35 -0300 |
| commit | 5cdf38a437317798012a89ceac048b7566f63375 (patch) | |
| tree | 394bbac3be0521008d7d79620988c84961712ee3 /android/src | |
| parent | 35c5e29341c15f70e358b54c0e536255edaa654e (diff) | |
| parent | 55d43f7b62d118be3a228c140b2e7d45c95722b7 (diff) | |
| download | mullvadvpn-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.kt | 30 | ||||
| -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.kt | 18 | ||||
| -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.xml | 2 |
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> |
