summaryrefslogtreecommitdiffhomepage
path: root/android
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-03-18 16:54:40 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-03-18 17:03:54 +0000
commit104db1a1a456f19d6f8760ee84b7bb06ca2c5f87 (patch)
tree1d2e970be9a8882f968661bbac04dbe2d0e40443 /android
parentfeba8106d174dec1507e14f08fc6b0fa0aaf3366 (diff)
downloadmullvadvpn-104db1a1a456f19d6f8760ee84b7bb06ca2c5f87.tar.xz
mullvadvpn-104db1a1a456f19d6f8760ee84b7bb06ca2c5f87.zip
Store selected relay item in activity
Diffstat (limited to 'android')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt2
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/SelectLocationFragment.kt8
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/Relay.kt1
-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.kt15
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayItem.kt1
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayListAdapter.kt44
7 files changed, 69 insertions, 5 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt
index b5fc9c3306..b7b0e8fa8c 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt
@@ -4,6 +4,8 @@ import android.os.Bundle
import android.support.v4.app.FragmentActivity
class MainActivity : FragmentActivity() {
+ var selectedRelayItemCode: String? = null
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main)
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/SelectLocationFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/SelectLocationFragment.kt
index 00e5f533c6..369e4d9289 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/SelectLocationFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/SelectLocationFragment.kt
@@ -32,9 +32,13 @@ class SelectLocationFragment : Fragment() {
}
private fun configureRelayList(relayList: RecyclerView) {
- val relayListAdapter = RelayListAdapter()
+ val parentActivity = activity as MainActivity?
+ val relayListAdapter = RelayListAdapter(parentActivity?.selectedRelayItemCode)
- relayListAdapter.onSelect = { close() }
+ relayListAdapter.onSelect = { relayItemCode ->
+ parentActivity?.selectedRelayItemCode = relayItemCode
+ close()
+ }
relayList.apply {
layoutManager = LinearLayoutManager(context!!)
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 9335899ef6..131f71df9d 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/Relay.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/Relay.kt
@@ -1,6 +1,7 @@
package net.mullvad.mullvadvpn.relaylist
data class Relay(override val name: String) : RelayItem {
+ override val code = name
override val type = RelayItemType.Relay
override val hasChildren = false
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 b9d1bddd69..182a0ae3e5 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayCity.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayCity.kt
@@ -2,6 +2,7 @@ package net.mullvad.mullvadvpn.relaylist
class RelayCity(
override val name: String,
+ override val code: String,
override var expanded: Boolean,
val relays: List<Relay>
) : RelayItem {
@@ -46,4 +47,6 @@ class RelayCity(
}
fun getRelayCount(): Int = relays.size
+
+ fun findRelayByCode(code: String): RelayItem? = relays.find { relay -> relay.code == code }
}
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 17b18da007..ab78172b51 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayCountry.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayCountry.kt
@@ -2,6 +2,7 @@ package net.mullvad.mullvadvpn.relaylist
class RelayCountry(
override val name: String,
+ override val code: String,
override var expanded: Boolean,
val cities: List<RelayCity>
) : RelayItem {
@@ -44,4 +45,18 @@ class RelayCountry(
}
fun getRelayCount(): Int = cities.map { city -> city.getRelayCount() }.sum()
+
+ fun findRelayItemByCode(cityCode: String, relayCode: String?): RelayItem? {
+ for (city in cities) {
+ if (city.code == cityCode) {
+ if (relayCode != null) {
+ return city.findRelayByCode("$cityCode-$relayCode")
+ } else {
+ return city
+ }
+ }
+ }
+
+ return null
+ }
}
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 24329e18ed..9f325e6377 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayItem.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayItem.kt
@@ -3,6 +3,7 @@ package net.mullvad.mullvadvpn.relaylist
interface RelayItem {
val type: RelayItemType
val name: String
+ val code: String
val hasChildren: Boolean
val visibleChildCount: Int
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayListAdapter.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayListAdapter.kt
index fa455a39f4..583df4899c 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayListAdapter.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/RelayListAdapter.kt
@@ -9,13 +9,17 @@ import android.view.ViewGroup
import net.mullvad.mullvadvpn.R
-class RelayListAdapter : Adapter<RelayItemHolder>() {
+class RelayListAdapter(private val initialSelectedItemCode: String?) : Adapter<RelayItemHolder>() {
private val relayList = fakeRelayList
private val activeIndices = LinkedList<WeakReference<RelayListAdapterPosition>>()
private var selectedItem: RelayItem? = null
private var selectedItemHolder: RelayItemHolder? = null
- var onSelect: (() -> Unit)? = null
+ var onSelect: ((String?) -> Unit)? = null
+
+ init {
+ initialSelectedItemCode?.let { code -> selectedItem = findRelayItemByCode(code) }
+ }
override fun onCreateViewHolder(parentView: ViewGroup, type: Int): RelayItemHolder {
val inflater = LayoutInflater.from(parentView.context)
@@ -52,7 +56,7 @@ class RelayListAdapter : Adapter<RelayItemHolder>() {
selectedItemHolder = holder
selectedItemHolder?.apply { selected = true }
- onSelect?.invoke()
+ onSelect?.invoke(item?.code)
}
fun expandItem(itemIndex: RelayListAdapterPosition, childCount: Int) {
@@ -98,30 +102,57 @@ class RelayListAdapter : Adapter<RelayItemHolder>() {
holder.selected = false
}
}
+
+ private fun findRelayItemByCode(code: String): RelayItem? {
+ val codeParts = code.split('-')
+
+ for (country in relayList) {
+ if (country.code == codeParts[0]) {
+ if (codeParts.size == 1) {
+ return country
+ } else {
+ var relayCode: String? = null
+
+ if (codeParts.size == 3) {
+ relayCode = codeParts[2]
+ }
+
+ return country.findRelayItemByCode("${codeParts[0]}-${codeParts[1]}", relayCode)
+ }
+ }
+ }
+
+ return null
+ }
}
val fakeRelayList = listOf(
RelayCountry(
"Australia",
+ "au",
false,
listOf(
RelayCity(
"Brisbane",
+ "au-bne",
false,
listOf(Relay("au-bne-001"))
),
RelayCity(
"Melbourne",
+ "au-mel",
false,
listOf(Relay("au-mel-002"), Relay("au-mel-003"), Relay("au-mel-004"))
),
RelayCity(
"Perth",
+ "au-per",
false,
listOf(Relay("au-per-001"))
),
RelayCity(
"Sydney",
+ "au-syd",
false,
listOf(
Relay("au1-wireguard"),
@@ -134,10 +165,12 @@ val fakeRelayList = listOf(
),
RelayCountry(
"South Africa",
+ "za",
false,
listOf(
RelayCity(
"Johannesburg",
+ "za-jnb",
false,
listOf(Relay("za-jnb-001"))
)
@@ -145,10 +178,12 @@ val fakeRelayList = listOf(
),
RelayCountry(
"Sweden",
+ "se",
false,
listOf(
RelayCity(
"Gothenburg",
+ "se-got",
false,
listOf(
Relay("se3-wireguard"),
@@ -164,6 +199,7 @@ val fakeRelayList = listOf(
),
RelayCity(
"Helsingborg",
+ "se-hel",
false,
listOf(
Relay("se-hel-001"),
@@ -176,6 +212,7 @@ val fakeRelayList = listOf(
),
RelayCity(
"Malmö",
+ "se-mma",
false,
listOf(
Relay("se4-wireguard"),
@@ -193,6 +230,7 @@ val fakeRelayList = listOf(
),
RelayCity(
"Stockholm",
+ "se-sto",
false,
listOf(
Relay("se2-wireguard"),