From a2bfd75dee9b4952771a66c555ba1d920a072ae9 Mon Sep 17 00:00:00 2001 From: Pacien TRAN-GIRARD Date: Tue, 11 Jul 2017 14:49:08 +0200 Subject: Implement create and join network dialogs + refactoring --- .../java/org/pacien/tincapp/extensions/Android.kt | 24 ++++++++++ .../tincapp/extensions/ApacheConfiguration.kt | 16 +++++++ .../java/org/pacien/tincapp/extensions/Java.kt | 18 ++++++++ .../pacien/tincapp/extensions/VpnServiceBuilder.kt | 51 ++++++++++++++++++++++ 4 files changed, 109 insertions(+) create mode 100644 app/src/main/java/org/pacien/tincapp/extensions/Android.kt create mode 100644 app/src/main/java/org/pacien/tincapp/extensions/ApacheConfiguration.kt create mode 100644 app/src/main/java/org/pacien/tincapp/extensions/Java.kt create mode 100644 app/src/main/java/org/pacien/tincapp/extensions/VpnServiceBuilder.kt (limited to 'app/src/main/java/org/pacien/tincapp/extensions') 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 @@ +package org.pacien.tincapp.extensions + +import android.widget.ArrayAdapter +import android.widget.TextView +import org.pacien.tincapp.R +import org.pacien.tincapp.context.App + +/** + * @author pacien + */ +object Android { + + fun ArrayAdapter.setElements(elems: Collection) { + setNotifyOnChange(false) + clear() + addAll(elems) + notifyDataSetChanged() + setNotifyOnChange(true) + } + + fun TextView.setText(list: List) = + if (list.isNotEmpty()) text = list.joinToString("\n") else text = App.getContext().getString(R.string.value_none) + +} 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 @@ +package org.pacien.tincapp.extensions + + +import org.apache.commons.configuration2.Configuration +import org.pacien.tincapp.data.CidrAddress + +/** + * @author pacien + */ +object ApacheConfiguration { + + fun Configuration.getStringList(key: String): List = getList(String::class.java, key, emptyList()) + fun Configuration.getCidrList(key: String): List = getStringList(key).map { CidrAddress.fromSlashSeparated(it) } + fun Configuration.getIntList(key: String): List = getList(Int::class.java, key, emptyList()) + +} 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 @@ +package org.pacien.tincapp.extensions + +import java8.util.concurrent.CompletableFuture + +/** + * @author pacien + */ +object Java { + + fun CompletableFuture.exceptionallyAccept(fn: (Throwable) -> Unit) = exceptionally { fn(it); null }!! + + fun applyIgnoringException(f: (A) -> R, x: A, alt: R? = null) = try { + f(x) + } catch (_: Exception) { + alt + } + +} 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 @@ +package org.pacien.tincapp.extensions + +import android.net.VpnService +import org.pacien.tincapp.data.CidrAddress +import org.pacien.tincapp.data.VpnInterfaceConfiguration +import org.pacien.tincapp.extensions.Java.applyIgnoringException + +/** + * @author pacien + */ +object VpnServiceBuilder { + + fun VpnService.Builder.addAddress(cidr: CidrAddress): VpnService.Builder = addAddress(cidr.address, cidr.prefix) + fun VpnService.Builder.addRoute(cidr: CidrAddress): VpnService.Builder = addRoute(cidr.address, cidr.prefix) + fun VpnService.Builder.allowBypass(allow: Boolean): VpnService.Builder = if (allow) allowBypass() else this + fun VpnService.Builder.overrideMtu(mtu: Int?): VpnService.Builder = if (mtu != null) setMtu(mtu) else this + + fun VpnService.Builder.addAddresses(cidrList: List): VpnService.Builder = + cidrList.fold(this, { net, cidr -> net.addAddress(cidr) }) + + fun VpnService.Builder.addRoutes(cidrList: List): VpnService.Builder = + cidrList.fold(this, { net, cidr -> net.addRoute(cidr) }) + + fun VpnService.Builder.addDnsServers(dnsList: List): VpnService.Builder = + dnsList.fold(this, { net, dns -> net.addDnsServer(dns) }) + + fun VpnService.Builder.addSearchDomains(domainList: List): VpnService.Builder = + domainList.fold(this, { net, domain -> net.addSearchDomain(domain) }) + + fun VpnService.Builder.allowFamilies(familyList: List): VpnService.Builder = + familyList.fold(this, { net, family -> net.allowFamily(family) }) + + fun VpnService.Builder.addAllowedApplications(apps: List): VpnService.Builder = + apps.fold(this, { net, app -> applyIgnoringException(net::addAllowedApplication, app, net)!! }) + + fun VpnService.Builder.addDisallowedApplications(apps: List): VpnService.Builder = + apps.fold(this, { net, app -> applyIgnoringException(net::addDisallowedApplication, app, net)!! }) + + fun VpnService.Builder.applyCfg(cfg: VpnInterfaceConfiguration): VpnService.Builder = this + .addAddresses(cfg.addresses) + .addRoutes(cfg.routes) + .addDnsServers(cfg.dnsServers) + .addSearchDomains(cfg.searchDomains) + .addAllowedApplications(cfg.allowedApplications) + .addDisallowedApplications(cfg.disallowedApplications) + .allowFamilies(cfg.allowedFamilies) + .allowBypass(cfg.allowBypass) + .setBlocking(cfg.blocking) + .overrideMtu(cfg.mtu) + +} -- cgit v1.2.3