summaryrefslogtreecommitdiffhomepage
path: root/android
diff options
context:
space:
mode:
authorLinus Färnstrand <linus@mullvad.net>2019-09-13 13:24:07 +0200
committerLinus Färnstrand <linus@mullvad.net>2019-09-13 13:24:07 +0200
commitf664e5e245804754b15a086d810c81a2f376da0d (patch)
tree814428191d3776033c87f449030359e8cb1666eb /android
parent40de3386b2c98369d76cbd12e194c931bc17bd87 (diff)
parente5511a373c937b28009e7cebada3249af2e820ed (diff)
downloadmullvadvpn-f664e5e245804754b15a086d810c81a2f376da0d.tar.xz
mullvadvpn-f664e5e245804754b15a086d810c81a2f376da0d.zip
Merge branch 'relay-list-v3'
Diffstat (limited to 'android')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/model/Relay.kt2
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/Relay.kt6
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayCity.kt3
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayCountry.kt3
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayItem.kt1
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayItemHolder.kt17
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayList.kt2
-rw-r--r--android/src/main/res/drawable/icon_relay_inactive.xml8
8 files changed, 38 insertions, 4 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/model/Relay.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/model/Relay.kt
index 4173af782b..b5d582e18d 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/model/Relay.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/model/Relay.kt
@@ -1,4 +1,4 @@
package net.mullvad.mullvadvpn.model
-data class Relay(val hostname: String, val hasWireguardTunnels: Boolean) {
+data class Relay(val hostname: String, val hasWireguardTunnels: Boolean, val active: Boolean) {
}
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/Relay.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/Relay.kt
index 8620a64963..db8afade98 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/Relay.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/Relay.kt
@@ -2,7 +2,11 @@ package net.mullvad.mullvadvpn.relaylist
import net.mullvad.mullvadvpn.model.LocationConstraint
-data class Relay(val city: RelayCity, override val name: String) : RelayItem {
+data class Relay(
+ val city: RelayCity,
+ override val name: String,
+ override val active: Boolean
+) : RelayItem {
override val code = name
override val type = RelayItemType.Relay
override val location = LocationConstraint.Hostname(city.country.code, city.code, name)
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayCity.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayCity.kt
index 9d4ba65ccf..70b2ca2d0a 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayCity.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayCity.kt
@@ -12,6 +12,9 @@ class RelayCity(
override val type = RelayItemType.City
override val location = LocationConstraint.City(country.code, code)
+ override val active
+ get() = relays.any { relay -> relay.active }
+
override val hasChildren
get() = relays.size > 1
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayCountry.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayCountry.kt
index fb2aacab33..f5d5a867c3 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayCountry.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayCountry.kt
@@ -11,6 +11,9 @@ class RelayCountry(
override val type = RelayItemType.Country
override val location = LocationConstraint.Country(code)
+ override val active
+ get() = cities.any { city -> city.active }
+
override val hasChildren
get() = getRelayCount() > 1
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayItem.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayItem.kt
index d55378fbd4..e5f28acee6 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayItem.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayItem.kt
@@ -7,6 +7,7 @@ interface RelayItem {
val name: String
val code: String
val location: LocationConstraint
+ val active: Boolean
val hasChildren: Boolean
val visibleChildCount: Int
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayItemHolder.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayItemHolder.kt
index e753d3af5a..275e6f5dfa 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayItemHolder.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayItemHolder.kt
@@ -3,6 +3,7 @@ package net.mullvad.mullvadvpn.relaylist
import android.support.v7.widget.RecyclerView.ViewHolder
import android.view.View
import android.widget.ImageButton
+import android.widget.ImageView
import android.widget.TextView
import net.mullvad.mullvadvpn.R
@@ -14,7 +15,7 @@ class RelayItemHolder(
) : ViewHolder(view) {
private val name: TextView = view.findViewById(R.id.name)
private val chevron: ImageButton = view.findViewById(R.id.chevron)
- private val relayActive: View = view.findViewById(R.id.relay_active)
+ private val relayActive: ImageView = view.findViewById(R.id.relay_active)
private val selectedIcon: View = view.findViewById(R.id.selected)
private val countryColor = view.context.getColor(R.color.blue)
@@ -49,14 +50,28 @@ class RelayItemHolder(
if (item != null) {
name.text = item.name
+ if (item.active) {
+ name.alpha = 1.0F
+ } else {
+ name.alpha = 0.5F
+ }
+
if (selected) {
relayActive.visibility = View.INVISIBLE
selectedIcon.visibility = View.VISIBLE
} else {
relayActive.visibility = View.VISIBLE
selectedIcon.visibility = View.INVISIBLE
+
+ if (item.active) {
+ relayActive.setImageResource(R.drawable.icon_relay_active)
+ } else {
+ relayActive.setImageResource(R.drawable.icon_relay_inactive)
+ }
}
+ view.setEnabled(item.active)
+
when (item.type) {
RelayItemType.Country -> setViewStyle(countryColor, countryPadding)
RelayItemType.City -> setViewStyle(cityColor, cityPadding)
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayList.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayList.kt
index 26cd7ffa58..7d09e421db 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayList.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayList.kt
@@ -19,7 +19,7 @@ class RelayList {
val validCityRelays = city.relays.filter { relay -> relay.hasWireguardTunnels }
for (relay in validCityRelays) {
- relays.add(Relay(relayCity, relay.hostname))
+ relays.add(Relay(relayCity, relay.hostname, relay.active))
}
if (relays.isNotEmpty()) {
diff --git a/android/src/main/res/drawable/icon_relay_inactive.xml b/android/src/main/res/drawable/icon_relay_inactive.xml
new file mode 100644
index 0000000000..79818e106f
--- /dev/null
+++ b/android/src/main/res/drawable/icon_relay_inactive.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="oval"
+ >
+ <solid android:color="@color/red"/>
+ <size android:width="16dp" android:height="16dp"/>
+</shape>