mirror of
https://github.com/oxen-io/session-android.git
synced 2024-12-25 09:17:44 +00:00
Don't block while countries are loading
This commit is contained in:
parent
07df442d3e
commit
5b5413991d
@ -53,6 +53,14 @@ class PathActivity : PassphraseRequiredActionBarActivity() {
|
||||
}
|
||||
broadcastReceivers.add(pathsBuiltReceiver)
|
||||
LocalBroadcastManager.getInstance(this).registerReceiver(pathsBuiltReceiver, IntentFilter("pathsBuilt"))
|
||||
val onionRequestPathCountriesLoadedReceiver: BroadcastReceiver = object : BroadcastReceiver() {
|
||||
|
||||
override fun onReceive(context: Context, intent: Intent) {
|
||||
handleOnionRequestPathCountriesLoaded()
|
||||
}
|
||||
}
|
||||
broadcastReceivers.add(onionRequestPathCountriesLoadedReceiver)
|
||||
LocalBroadcastManager.getInstance(this).registerReceiver(onionRequestPathCountriesLoadedReceiver, IntentFilter("onionRequestPathCountriesLoaded"))
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
@ -66,6 +74,7 @@ class PathActivity : PassphraseRequiredActionBarActivity() {
|
||||
// region Updating
|
||||
private fun handleBuildingPathsEvent() { update(false) }
|
||||
private fun handlePathsBuiltEvent() { update(false) }
|
||||
private fun handleOnionRequestPathCountriesLoaded() { update(false) }
|
||||
|
||||
private fun update(isAnimated: Boolean) {
|
||||
pathRowsContainer.removeAllViews()
|
||||
@ -131,7 +140,7 @@ class PathActivity : PassphraseRequiredActionBarActivity() {
|
||||
|
||||
private fun getPathRow(snode: Snode, location: LineView.Location, dotAnimationStartDelay: Long, dotAnimationRepeatInterval: Long, isGuardSnode: Boolean): LinearLayout {
|
||||
val title = if (isGuardSnode) resources.getString(R.string.activity_path_guard_node_row_title) else resources.getString(R.string.activity_path_service_node_row_title)
|
||||
val subtitle = IP2Country.shared.getCountry(snode.ip)
|
||||
val subtitle = IP2Country.shared.countryNamesCache[snode.ip] ?: "Loading..."
|
||||
return getPathRow(title, subtitle, location, dotAnimationStartDelay, dotAnimationRepeatInterval)
|
||||
}
|
||||
// endregion
|
||||
|
@ -14,7 +14,7 @@ import java.io.FileReader
|
||||
|
||||
class IP2Country private constructor(private val context: Context) {
|
||||
private val pathsBuiltEventReceiver: BroadcastReceiver
|
||||
private val countryNamesCache = mutableMapOf<String, String>()
|
||||
val countryNamesCache = mutableMapOf<String, String>()
|
||||
|
||||
private val ipv4Table by lazy {
|
||||
loadFile("geolite2_country_blocks_ipv4.csv")
|
||||
@ -36,11 +36,11 @@ class IP2Country private constructor(private val context: Context) {
|
||||
}
|
||||
|
||||
init {
|
||||
preloadCountriesIfNeeded()
|
||||
populateCacheIfNeeded()
|
||||
pathsBuiltEventReceiver = object : BroadcastReceiver() {
|
||||
|
||||
override fun onReceive(context: Context, intent: Intent) {
|
||||
preloadCountriesIfNeeded()
|
||||
populateCacheIfNeeded()
|
||||
}
|
||||
}
|
||||
LocalBroadcastManager.getInstance(context).registerReceiver(pathsBuiltEventReceiver, IntentFilter("pathsBuilt"))
|
||||
@ -67,7 +67,7 @@ class IP2Country private constructor(private val context: Context) {
|
||||
return file
|
||||
}
|
||||
|
||||
fun getCountry(ip: String): String {
|
||||
private fun cacheCountryForIP(ip: String): String {
|
||||
var truncatedIP = ip
|
||||
fun getCountryInternal(): String {
|
||||
val country = countryNamesCache[ip]
|
||||
@ -103,12 +103,13 @@ class IP2Country private constructor(private val context: Context) {
|
||||
return getCountryInternal()
|
||||
}
|
||||
|
||||
private fun preloadCountriesIfNeeded() {
|
||||
private fun populateCacheIfNeeded() {
|
||||
Thread {
|
||||
val path = OnionRequestAPI.paths.firstOrNull() ?: return@Thread
|
||||
path.forEach { snode ->
|
||||
getCountry(snode.ip) // Preload if needed
|
||||
cacheCountryForIP(snode.ip) // Preload if needed
|
||||
}
|
||||
Broadcaster(context).broadcast("onionRequestPathCountriesLoaded")
|
||||
Log.d("Loki", "Finished preloading onion request path countries.")
|
||||
}.start()
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user