aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java/org/pacien/tincapp/extensions
diff options
context:
space:
mode:
authorPacien TRAN-GIRARD2017-07-11 14:49:08 +0200
committerPacien TRAN-GIRARD2017-07-11 14:49:08 +0200
commita2bfd75dee9b4952771a66c555ba1d920a072ae9 (patch)
tree3fcf598fe4e8fe858b296089f651a198b4e5f47c /app/src/main/java/org/pacien/tincapp/extensions
parent336a8f9cc02b2f78796fd10ea6244e5d0bc725c7 (diff)
downloadtincapp-a2bfd75dee9b4952771a66c555ba1d920a072ae9.tar.gz
Implement create and join network dialogs + refactoring
Diffstat (limited to 'app/src/main/java/org/pacien/tincapp/extensions')
-rw-r--r--app/src/main/java/org/pacien/tincapp/extensions/Android.kt24
-rw-r--r--app/src/main/java/org/pacien/tincapp/extensions/ApacheConfiguration.kt16
-rw-r--r--app/src/main/java/org/pacien/tincapp/extensions/Java.kt18
-rw-r--r--app/src/main/java/org/pacien/tincapp/extensions/VpnServiceBuilder.kt51
4 files changed, 109 insertions, 0 deletions
diff --git a/app/src/main/java/org/pacien/tincapp/extensions/Android.kt b/app/src/main/java/org/pacien/tincapp/extensions/Android.kt
new file mode 100644
index 0000000..f10c4c7
--- /dev/null
+++ b/app/src/main/java/org/pacien/tincapp/extensions/Android.kt
@@ -0,0 +1,24 @@
1package org.pacien.tincapp.extensions
2
3import android.widget.ArrayAdapter
4import android.widget.TextView
5import org.pacien.tincapp.R
6import org.pacien.tincapp.context.App
7
8/**
9 * @author pacien
10 */
11object Android {
12
13 fun <T> ArrayAdapter<T>.setElements(elems: Collection<T>) {
14 setNotifyOnChange(false)
15 clear()
16 addAll(elems)
17 notifyDataSetChanged()
18 setNotifyOnChange(true)
19 }
20
21 fun TextView.setText(list: List<String>) =
22 if (list.isNotEmpty()) text = list.joinToString("\n") else text = App.getContext().getString(R.string.value_none)
23
24}
diff --git a/app/src/main/java/org/pacien/tincapp/extensions/ApacheConfiguration.kt b/app/src/main/java/org/pacien/tincapp/extensions/ApacheConfiguration.kt
new file mode 100644
index 0000000..eb4bb47
--- /dev/null
+++ b/app/src/main/java/org/pacien/tincapp/extensions/ApacheConfiguration.kt
@@ -0,0 +1,16 @@
1package org.pacien.tincapp.extensions
2
3
4import org.apache.commons.configuration2.Configuration
5import org.pacien.tincapp.data.CidrAddress
6
7/**
8 * @author pacien
9 */
10object ApacheConfiguration {
11
12 fun Configuration.getStringList(key: String): List<String> = getList(String::class.java, key, emptyList())
13 fun Configuration.getCidrList(key: String): List<CidrAddress> = getStringList(key).map { CidrAddress.fromSlashSeparated(it) }
14 fun Configuration.getIntList(key: String): List<Int> = getList(Int::class.java, key, emptyList())
15
16}
diff --git a/app/src/main/java/org/pacien/tincapp/extensions/Java.kt b/app/src/main/java/org/pacien/tincapp/extensions/Java.kt
new file mode 100644
index 0000000..af3c1af
--- /dev/null
+++ b/app/src/main/java/org/pacien/tincapp/extensions/Java.kt
@@ -0,0 +1,18 @@
1package org.pacien.tincapp.extensions
2
3import java8.util.concurrent.CompletableFuture
4
5/**
6 * @author pacien
7 */
8object Java {
9
10 fun <T> CompletableFuture<T>.exceptionallyAccept(fn: (Throwable) -> Unit) = exceptionally { fn(it); null }!!
11
12 fun <A, R> applyIgnoringException(f: (A) -> R, x: A, alt: R? = null) = try {
13 f(x)
14 } catch (_: Exception) {
15 alt
16 }
17
18}
diff --git a/app/src/main/java/org/pacien/tincapp/extensions/VpnServiceBuilder.kt b/app/src/main/java/org/pacien/tincapp/extensions/VpnServiceBuilder.kt
new file mode 100644
index 0000000..870668a
--- /dev/null
+++ b/app/src/main/java/org/pacien/tincapp/extensions/VpnServiceBuilder.kt
@@ -0,0 +1,51 @@
1package org.pacien.tincapp.extensions
2
3import android.net.VpnService
4import org.pacien.tincapp.data.CidrAddress
5import org.pacien.tincapp.data.VpnInterfaceConfiguration
6import org.pacien.tincapp.extensions.Java.applyIgnoringException
7
8/**
9 * @author pacien
10 */
11object VpnServiceBuilder {
12
13 fun VpnService.Builder.addAddress(cidr: CidrAddress): VpnService.Builder = addAddress(cidr.address, cidr.prefix)
14 fun VpnService.Builder.addRoute(cidr: CidrAddress): VpnService.Builder = addRoute(cidr.address, cidr.prefix)
15 fun VpnService.Builder.allowBypass(allow: Boolean): VpnService.Builder = if (allow) allowBypass() else this
16 fun VpnService.Builder.overrideMtu(mtu: Int?): VpnService.Builder = if (mtu != null) setMtu(mtu) else this
17
18 fun VpnService.Builder.addAddresses(cidrList: List<CidrAddress>): VpnService.Builder =
19 cidrList.fold(this, { net, cidr -> net.addAddress(cidr) })
20
21 fun VpnService.Builder.addRoutes(cidrList: List<CidrAddress>): VpnService.Builder =
22 cidrList.fold(this, { net, cidr -> net.addRoute(cidr) })
23
24 fun VpnService.Builder.addDnsServers(dnsList: List<String>): VpnService.Builder =
25 dnsList.fold(this, { net, dns -> net.addDnsServer(dns) })
26
27 fun VpnService.Builder.addSearchDomains(domainList: List<String>): VpnService.Builder =
28 domainList.fold(this, { net, domain -> net.addSearchDomain(domain) })
29
30 fun VpnService.Builder.allowFamilies(familyList: List<Int>): VpnService.Builder =
31 familyList.fold(this, { net, family -> net.allowFamily(family) })
32
33 fun VpnService.Builder.addAllowedApplications(apps: List<String>): VpnService.Builder =
34 apps.fold(this, { net, app -> applyIgnoringException(net::addAllowedApplication, app, net)!! })
35
36 fun VpnService.Builder.addDisallowedApplications(apps: List<String>): VpnService.Builder =
37 apps.fold(this, { net, app -> applyIgnoringException(net::addDisallowedApplication, app, net)!! })
38
39 fun VpnService.Builder.applyCfg(cfg: VpnInterfaceConfiguration): VpnService.Builder = this
40 .addAddresses(cfg.addresses)
41 .addRoutes(cfg.routes)
42 .addDnsServers(cfg.dnsServers)
43 .addSearchDomains(cfg.searchDomains)
44 .addAllowedApplications(cfg.allowedApplications)
45 .addDisallowedApplications(cfg.disallowedApplications)
46 .allowFamilies(cfg.allowedFamilies)
47 .allowBypass(cfg.allowBypass)
48 .setBlocking(cfg.blocking)
49 .overrideMtu(cfg.mtu)
50
51}