summaryrefslogtreecommitdiffhomepage
path: root/android/src
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-07-01 14:10:44 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-07-15 12:52:17 +0000
commitafc0127d0bdc3032c7a4c85c026e3aa107403cb0 (patch)
treecf0bab1a608f772142fa275997e62cd0d101c24b /android/src
parent577d62a574f054213c6e59882b9357f13783f642 (diff)
downloadmullvadvpn-afc0127d0bdc3032c7a4c85c026e3aa107403cb0.tar.xz
mullvadvpn-afc0127d0bdc3032c7a4c85c026e3aa107403cb0.zip
Create initial Split Tunnelling screen
Diffstat (limited to 'android/src')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/AdvancedFragment.kt4
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/SplitTunnellingFragment.kt43
-rw-r--r--android/src/main/res/layout/advanced.xml23
-rw-r--r--android/src/main/res/layout/split_tunnelling.xml55
-rw-r--r--android/src/main/res/layout/split_tunnelling_header.xml45
-rw-r--r--android/src/main/res/values/strings.xml4
6 files changed, 174 insertions, 0 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 4f51012759..ba9ca142d8 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/AdvancedFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/AdvancedFragment.kt
@@ -47,6 +47,10 @@ class AdvancedFragment : ServiceDependentFragment(OnNoService.GoBack) {
}
}
+ view.findViewById<View>(R.id.split_tunnelling).setOnClickListener {
+ openSubFragment(SplitTunnellingFragment())
+ }
+
settingsListener.subscribe(this) { settings ->
updateUi(settings)
}
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/SplitTunnellingFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/SplitTunnellingFragment.kt
new file mode 100644
index 0000000000..ebffbf6e6f
--- /dev/null
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/SplitTunnellingFragment.kt
@@ -0,0 +1,43 @@
+package net.mullvad.mullvadvpn.ui
+
+import android.os.Bundle
+import android.support.v7.widget.LinearLayoutManager
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import net.mullvad.mullvadvpn.R
+import net.mullvad.mullvadvpn.applist.AppListAdapter
+import net.mullvad.mullvadvpn.ui.widget.CustomRecyclerView
+import net.mullvad.mullvadvpn.util.AdapterWithHeader
+
+class SplitTunnellingFragment : ServiceDependentFragment(OnNoService.GoToLaunchScreen) {
+ private val appListAdapter = AppListAdapter()
+
+ private lateinit var titleController: CollapsibleTitleController
+
+ override fun onSafelyCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ val view = inflater.inflate(R.layout.split_tunnelling, container, false)
+
+ titleController = CollapsibleTitleController(view, R.id.app_list)
+
+ view.findViewById<CustomRecyclerView>(R.id.app_list).apply {
+ layoutManager = LinearLayoutManager(parentActivity)
+
+ adapter = AdapterWithHeader(appListAdapter, R.layout.split_tunnelling_header).apply {
+ onHeaderAvailable = { headerView ->
+ titleController.expandedTitleView = headerView.findViewById(R.id.expanded_title)
+ }
+ }
+ }
+
+ return view
+ }
+
+ override fun onSafelyDestroyView() {
+ titleController.onDestroy()
+ }
+}
diff --git a/android/src/main/res/layout/advanced.xml b/android/src/main/res/layout/advanced.xml
index 990784ac80..3d24a40d03 100644
--- a/android/src/main/res/layout/advanced.xml
+++ b/android/src/main/res/layout/advanced.xml
@@ -125,6 +125,29 @@
android:alpha="0.6"
android:src="@drawable/icon_chevron" />
</LinearLayout>
+ <LinearLayout android:id="@+id/split_tunnelling"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="24dp"
+ android:paddingHorizontal="16dp"
+ android:background="@drawable/cell_button_background"
+ android:clickable="true"
+ android:gravity="center">
+ <TextView android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:paddingHorizontal="8dp"
+ android:paddingVertical="17dp"
+ android:textColor="@color/white"
+ android:textSize="20sp"
+ android:textStyle="bold"
+ android:text="@string/split_tunnelling" />
+ <ImageView android:layout_width="14dp"
+ android:layout_height="24dp"
+ android:layout_weight="0"
+ android:alpha="0.6"
+ android:src="@drawable/icon_chevron" />
+ </LinearLayout>
</LinearLayout>
</net.mullvad.mullvadvpn.ui.widget.ListenableScrollView>
</LinearLayout>
diff --git a/android/src/main/res/layout/split_tunnelling.xml b/android/src/main/res/layout/split_tunnelling.xml
new file mode 100644
index 0000000000..e6284884c5
--- /dev/null
+++ b/android/src/main/res/layout/split_tunnelling.xml
@@ -0,0 +1,55 @@
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:mullvad="http://schemas.android.com/apk/res-auto"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@color/darkBlue"
+ android:elevation="3dp"
+ android:gravity="left">
+ <TextView android:id="@+id/title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textColor="@color/white"
+ android:textSize="16sp"
+ android:textStyle="bold"
+ android:text="@string/split_tunnelling" />
+ <LinearLayout android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+ <FrameLayout android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+ <LinearLayout android:id="@+id/back"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="0"
+ android:padding="12dp"
+ android:orientation="horizontal"
+ android:gravity="center_vertical | left"
+ android:clickable="true"
+ android:background="?android:attr/selectableItemBackground">
+ <ImageView android:layout_width="24dp"
+ android:layout_height="24dp"
+ android:layout_marginRight="8dp"
+ android:src="@drawable/icon_back" />
+ <TextView android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textColor="@color/white60"
+ android:textSize="13sp"
+ android:textStyle="bold"
+ android:text="@string/settings_advanced" />
+ </LinearLayout>
+ <TextView android:id="@+id/collapsed_title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginHorizontal="4dp"
+ android:layout_gravity="center"
+ android:textColor="@color/white"
+ android:textSize="16sp"
+ android:textStyle="bold"
+ android:text="@string/split_tunnelling" />
+ </FrameLayout>
+ <net.mullvad.mullvadvpn.ui.widget.CustomRecyclerView android:id="@+id/app_list"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:scrollbars="vertical" />
+ </LinearLayout>
+</FrameLayout>
diff --git a/android/src/main/res/layout/split_tunnelling_header.xml b/android/src/main/res/layout/split_tunnelling_header.xml
new file mode 100644
index 0000000000..0fd8abc45b
--- /dev/null
+++ b/android/src/main/res/layout/split_tunnelling_header.xml
@@ -0,0 +1,45 @@
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:gravity="left">
+ <TextView android:id="@+id/expanded_title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="0"
+ android:layout_marginLeft="24dp"
+ android:layout_marginTop="4dp"
+ android:layout_marginBottom="12dp"
+ android:text="@string/split_tunnelling"
+ android:textColor="@color/white"
+ android:textSize="32sp"
+ android:textStyle="bold" />
+ <TextView android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingTop="8dp"
+ android:paddingHorizontal="24dp"
+ android:text="@string/split_tunnelling_description"
+ android:textColor="@color/white60"
+ android:textSize="13sp" />
+ <LinearLayout android:id="@+id/enabled"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="24dp"
+ android:paddingHorizontal="16dp"
+ android:background="@drawable/cell_button_background"
+ android:gravity="center">
+ <TextView android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:paddingHorizontal="8dp"
+ android:paddingVertical="17dp"
+ android:textColor="@color/white"
+ android:textSize="20sp"
+ android:textStyle="bold"
+ android:text="@string/enabled" />
+ <net.mullvad.mullvadvpn.ui.CellSwitch android:id="@+id/enabled_toggle"
+ android:layout_width="52dp"
+ android:layout_height="32dp"
+ android:layout_weight="0" />
+ </LinearLayout>
+</LinearLayout>
diff --git a/android/src/main/res/values/strings.xml b/android/src/main/res/values/strings.xml
index 5160671d22..623d3f1fa4 100644
--- a/android/src/main/res/values/strings.xml
+++ b/android/src/main/res/values/strings.xml
@@ -159,6 +159,10 @@
<string name="wireguard_key_verification_failure">Key verification failed</string>
<string name="wireguard_public_key">WireGuard public key</string>
<string name="copied_wireguard_public_key">Copied WireGuard public key to clipboard</string>
+ <string name="split_tunnelling">Split tunnelling</string>
+ <string name="split_tunnelling_description">Split tunnelling makes it possible to select which
+ applications should not be routed through the VPN tunnel.</string>
+ <string name="enabled">Enabled</string>
<string name="account_url">https://mullvad.net/en/account</string>
<string name="wg_key_url">https://mullvad.net/account/ports</string>
<string name="create_account_url">https://mullvad.net/en/account/create</string>