diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-03-18 16:54:40 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-03-18 17:03:54 +0000 |
| commit | 104db1a1a456f19d6f8760ee84b7bb06ca2c5f87 (patch) | |
| tree | 1d2e970be9a8882f968661bbac04dbe2d0e40443 | |
| parent | feba8106d174dec1507e14f08fc6b0fa0aaf3366 (diff) | |
| download | mullvadvpn-104db1a1a456f19d6f8760ee84b7bb06ca2c5f87.tar.xz mullvadvpn-104db1a1a456f19d6f8760ee84b7bb06ca2c5f87.zip | |
Store selected relay item in activity
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"), |
