Skip to content

Commit

Permalink
Update how we subscribe to app events
Browse files Browse the repository at this point in the history
  • Loading branch information
atavism committed Jun 21, 2024
1 parent c53e5d8 commit 556a1f3
Show file tree
Hide file tree
Showing 7 changed files with 94 additions and 59 deletions.
4 changes: 0 additions & 4 deletions android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -413,10 +413,6 @@ dependencies {
testImplementation "io.mockk:mockk:1.13.5"
}

kapt {
correctErrorTypes true
}

apply plugin: 'com.google.gms.google-services'

sentry {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import io.lantern.model.Vpn
import org.getlantern.lantern.BuildConfig
import org.getlantern.lantern.LanternApp
import org.getlantern.lantern.model.Bandwidth
import org.getlantern.lantern.event.EventHandler
import org.getlantern.lantern.model.Stats
import org.getlantern.lantern.model.Utils
import org.getlantern.mobilesdk.Logger
Expand Down Expand Up @@ -134,9 +135,6 @@ abstract class SessionManager(application: Application) : Session {
if (locale != null) {
val oldLocale = prefs.getString(LANG, "")
prefs.edit().putString(LANG, locale.toString()).apply()
if (locale.language != oldLocale) {
//EventBus.getDefault().post(locale)
}
}
}

Expand Down Expand Up @@ -182,7 +180,7 @@ abstract class SessionManager(application: Application) : Session {
}

override fun updateAdSettings(adSettings: AdSettings) {
//EventBus.getDefault().post(adSettings)

}

/**
Expand Down Expand Up @@ -355,7 +353,7 @@ abstract class SessionManager(application: Application) : Session {
val b = Bandwidth(percent, remaining, allowed, ttlSeconds)
Logger.debug("bandwidth", b.toString())
saveLatestBandwidth(b)
//EventBus.getDefault().postSticky(b)
EventHandler.postBandwidthEvent(b)
}

fun setSurveyLinkOpened(url: String?) {
Expand Down Expand Up @@ -400,7 +398,7 @@ abstract class SessionManager(application: Application) : Session {
}

val st = Stats(city, country, countryCode, httpsUpgrades, adsBlocked, hasSucceedingProxy)
//EventBus.getDefault().postSticky(st)
EventHandler.postStatsEvent(st)

// save last location received
prefs.edit().putString(SERVER_COUNTRY, country)
Expand Down
57 changes: 27 additions & 30 deletions android/app/src/main/kotlin/org/getlantern/lantern/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import kotlinx.coroutines.*
import okhttp3.Response
import org.getlantern.lantern.activity.WebViewActivity_
import org.getlantern.lantern.event.AppEvent
import org.getlantern.lantern.event.AppEvent.*
import org.getlantern.lantern.event.EventHandler
import org.getlantern.lantern.event.EventManager
import org.getlantern.lantern.model.AccountInitializationStatus
Expand Down Expand Up @@ -98,14 +99,32 @@ class MainActivity : FlutterActivity(), MethodChannel.MethodCallHandler,
LanternApp.getSession().dnsDetector.publishNetworkAvailability()
}
}
EventHandler.subscribeAppEvent { appEvent ->
if (appEvent is AppEvent.StatsEvent) {
val stats = appEvent.stats
Logger.debug("Stats updated", stats.toString())
sessionModel.saveServerInfo(
Vpn.ServerInfo.newBuilder().setCity(stats.city).setCountry(stats.country)
.setCountryCode(stats.countryCode).build(),
)
EventHandler.subscribeAppEvents { appEvent ->
when (appEvent) {
is AppEvent.BandwidthEvent -> {
val event = appEvent as AppEvent.BandwidthEvent
Logger.debug("bandwidth updated", event.bandwidth.toString())
vpnModel.updateBandwidth(event.bandwidth)
}
is AppEvent.StatsEvent -> {
val stats = appEvent.stats
Logger.debug("Stats updated", stats.toString())
sessionModel.saveServerInfo(
Vpn.ServerInfo.newBuilder().setCity(stats.city).setCountry(stats.country)
.setCountryCode(stats.countryCode).build(),
)
}
is AppEvent.StatusEvent -> {
updateUserData()
updatePaymentMethods()
updateCurrencyList()
}
is AppEvent.VpnStateEvent -> {
updateStatus(appEvent.vpnState.useVpn)
}
else -> {
Logger.debug(TAG, "Unknown app event " + appEvent)
}
}
}
MethodChannel(
Expand Down Expand Up @@ -266,28 +285,6 @@ class MainActivity : FlutterActivity(), MethodChannel.MethodCallHandler,
}
}

//@Subscribe(threadMode = ThreadMode.MAIN)
fun vpnStateChanged(state: VpnState) {
updateStatus(state.useVpn)
}

//@Subscribe(threadMode = ThreadMode.MAIN)
fun lanternStarted(status: LanternStatus) {
updateUserData()
updatePaymentMethods()
updateCurrencyList();
}

//@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
fun onEvent(event: Event) {
eventManager.onNewEvent(event = event)
}

//@Subscribe(threadMode = ThreadMode.MAIN)
fun bandwidthUpdated(bandwidth: Bandwidth) {
Logger.debug("bandwidth updated", bandwidth.toString())
vpnModel.updateBandwidth(bandwidth)
}

private fun updateUserData() {
lanternClient.userData(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,19 @@ import kotlinx.coroutines.ensureActive
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
import kotlin.coroutines.coroutineContext
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.asSharedFlow
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.filterIsInstance
import kotlinx.coroutines.launch
import org.getlantern.lantern.model.AccountInitializationStatus
import org.getlantern.lantern.model.Bandwidth
import org.getlantern.lantern.model.LanternStatus
import org.getlantern.lantern.model.LanternStatus.Status
import org.getlantern.lantern.model.Stats
import kotlin.coroutines.coroutineContext
import org.getlantern.lantern.model.VpnState
import org.getlantern.mobilesdk.model.LoConf

object EventBus {
private val _events = MutableSharedFlow<Any>()
Expand All @@ -32,13 +38,37 @@ object EventBus {

// EventHandler is used to publish app events that subscribers can listen to from anywhere
internal object EventHandler {
suspend fun postStatsEvent(stats: Stats) {
fun postAccountInitializationStatus(status: AccountInitializationStatus.Status) {
postAppEvent(AppEvent.AccountInitializationEvent(status))
}

fun postBandwidthEvent(bandwidth: Bandwidth) {
postAppEvent(AppEvent.BandwidthEvent(bandwidth))
}

fun postLoConfEvent(loconf: LoConf) {
postAppEvent(AppEvent.LoConfEvent(loconf))
}

fun postStatsEvent(stats: Stats) {
postAppEvent(AppEvent.StatsEvent(stats))
}

fun postStatusEvent(status: LanternStatus) {
postAppEvent(AppEvent.StatusEvent(status))
}

fun postVpnStateEvent(vpnState: VpnState) {
postAppEvent(AppEvent.VpnStateEvent(vpnState))
}

fun postAppEvent(appEvent: AppEvent) {
CoroutineScope(Dispatchers.IO).launch {
EventBus.publish(AppEvent.StatsEvent(stats))
EventBus.publish(appEvent)
}
}

fun subscribeAppEvent(onEvent: (AppEvent) -> Unit) {
fun subscribeAppEvents(onEvent: (AppEvent) -> Unit) {
CoroutineScope(Dispatchers.Main + SupervisorJob()).launch {
EventBus.subscribe<AppEvent> { appEvent ->
onEvent(appEvent)
Expand All @@ -48,7 +78,27 @@ internal object EventHandler {
}

sealed class AppEvent {
data class AccountInitializationEvent(
val status: AccountInitializationStatus.Status
) : AppEvent()

data class BandwidthEvent(
val bandwidth: Bandwidth
) : AppEvent()

data class LoConfEvent(
val loconf: LoConf,
) : AppEvent()

data class StatsEvent(
val stats: Stats,
) : AppEvent()

data class StatusEvent(
val status: LanternStatus,
) : AppEvent()

data class VpnStateEvent(
val vpnState: VpnState,
) : AppEvent()
}
Original file line number Diff line number Diff line change
Expand Up @@ -335,7 +335,6 @@ class LanternSessionManager(application: Application) : SessionManager(applicati
}

if (user.isProUser) {
//EventBus.getDefault().post(UserStatus(user.isActive, user.monthsLeft().toLong()))
prefs.edit().putInt(PRO_MONTHS_LEFT, user.monthsLeft())
.putInt(PRO_DAYS_LEFT, user.daysLeft())
.apply()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import android.app.NotificationManager
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import org.getlantern.lantern.event.EventHandler
import org.getlantern.lantern.model.Utils
import org.getlantern.lantern.model.VpnState
import org.getlantern.lantern.vpn.LanternVpnService
Expand All @@ -19,7 +20,7 @@ class NotificationReceiver : BroadcastReceiver() {
LanternVpnService::class.java,
)
) {
//EventBus.getDefault().post(VpnState(false))
EventHandler.postVpnStateEvent(VpnState(false))
context.startService(
Intent(
context,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import org.androidannotations.annotations.EService
import org.getlantern.lantern.BuildConfig
import org.getlantern.lantern.LanternApp
import org.getlantern.lantern.R
import org.getlantern.lantern.event.EventHandler
import org.getlantern.lantern.model.AccountInitializationStatus
import org.getlantern.lantern.model.LanternHttpClient
import org.getlantern.lantern.model.LanternStatus
Expand Down Expand Up @@ -103,23 +104,20 @@ open class LanternService : Service(), Runnable {
private fun afterStart() {
if (LanternApp.getSession().userId().toInt() == 0) {
// create a user if no user id is stored
/*EventBus.getDefault().post(
AccountInitializationStatus(AccountInitializationStatus.Status.PROCESSING),
)*/
EventHandler.postAccountInitializationStatus(AccountInitializationStatus.Status.PROCESSING)
createUser(0)
}

if (!BuildConfig.PLAY_VERSION && !BuildConfig.DEVELOPMENT_MODE) {
// check if an update is available
autoUpdater.checkForUpdates()
}

//EventBus.getDefault().postSticky(LanternStatus(Status.ON))
EventHandler.postStatusEvent(LanternStatus(Status.ON))

// fetch latest loconf
LoConf.Companion.fetch(object : LoConfCallback {
override fun onSuccess(loconf: LoConf) {
//EventBus.getDefault().post(loconf)
EventHandler.postLoConfEvent(loconf)
}
})
}
Expand All @@ -146,9 +144,7 @@ open class LanternService : Service(), Runnable {
override fun onFailure(@Nullable throwable: Throwable?, @Nullable error: ProError?) {
if (attempts >= MAX_CREATE_USER_TRIES) {
Logger.error(TAG, "Max. number of tries made to create Pro user")
/*EventBus.getDefault().postSticky(
AccountInitializationStatus(AccountInitializationStatus.Status.FAILURE),
)*/
EventHandler.postAccountInitializationStatus(AccountInitializationStatus.Status.FAILURE)
return
}
attempts++
Expand All @@ -168,10 +164,8 @@ open class LanternService : Service(), Runnable {
if (!referral.isEmpty()) {
LanternApp.getSession().setCode(referral)
}
/*EventBus.getDefault().postSticky(LanternStatus(Status.ON))
EventBus.getDefault().postSticky(
AccountInitializationStatus(AccountInitializationStatus.Status.SUCCESS),
)*/
EventHandler.postStatusEvent(LanternStatus(Status.ON))
EventHandler.postAccountInitializationStatus(AccountInitializationStatus.Status.SUCCESS)
}
}

Expand Down

0 comments on commit 556a1f3

Please sign in to comment.