Skip to content

Commit

Permalink
MBL-810: DeeplinkViewModel.kt to Jetpack ViewModel and RxJava2.2 (#1924)
Browse files Browse the repository at this point in the history
* Migrate to rxjava 2

* continue migration

* update tests

* more tests

* Fix tests

* linter

* Fix test

* add connectivity status check

---------

Co-authored-by: Isabel Martin <arkariang@gmail.com>
Co-authored-by: mtgriego <matthew.t.griego@gmail.com>
  • Loading branch information
3 people committed Jan 10, 2024
1 parent 62ce953 commit 97e6b10
Show file tree
Hide file tree
Showing 3 changed files with 239 additions and 281 deletions.
72 changes: 43 additions & 29 deletions app/src/main/java/com/kickstarter/ui/activities/DeepLinkActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,27 +7,37 @@ import android.os.Build
import android.os.Bundle
import android.view.View
import android.view.animation.AnticipateInterpolator
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import com.kickstarter.R
import com.kickstarter.libs.BaseActivity
import com.kickstarter.libs.RefTag
import com.kickstarter.libs.qualifiers.RequiresActivityViewModel
import com.kickstarter.libs.rx.transformers.Transformers
import com.kickstarter.libs.utils.ApplicationUtils
import com.kickstarter.libs.utils.ThirdPartyEventValues
import com.kickstarter.libs.utils.UrlUtils.commentId
import com.kickstarter.libs.utils.UrlUtils.refTag
import com.kickstarter.libs.utils.UrlUtils.saveFlag
import com.kickstarter.libs.utils.extensions.addToDisposable
import com.kickstarter.libs.utils.extensions.getEnvironment
import com.kickstarter.libs.utils.extensions.getProjectIntent
import com.kickstarter.libs.utils.extensions.path
import com.kickstarter.ui.IntentKey
import com.kickstarter.ui.extensions.setUpConnectivityStatusCheck
import com.kickstarter.ui.extensions.startPreLaunchProjectActivity
import com.kickstarter.viewmodels.DeepLinkViewModel
import rx.android.schedulers.AndroidSchedulers
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.CompositeDisposable

class DeepLinkActivity : AppCompatActivity() {

private lateinit var viewModelFactory: DeepLinkViewModel.Factory
private val viewModel: DeepLinkViewModel.DeepLinkViewModel by viewModels { viewModelFactory }

private var disposables = CompositeDisposable()

@RequiresActivityViewModel(DeepLinkViewModel.ViewModel::class)
class DeepLinkActivity : BaseActivity<DeepLinkViewModel.ViewModel?>() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setUpConnectivityStatusCheck(lifecycle)

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
splashScreen.setSplashScreenTheme(R.style.SplashTheme)
splashScreen.setOnExitAnimationListener { splashScreenView ->
Expand All @@ -42,64 +52,63 @@ class DeepLinkActivity : BaseActivity<DeepLinkViewModel.ViewModel?>() {
}
}

// - initialized on super will never be null within OnCreate context
val viewModel = requireNotNull(this.viewModel)
this.getEnvironment()?.let {
viewModelFactory = DeepLinkViewModel.Factory(it, intent = intent)
}

viewModel.outputs.startBrowser()
.compose(bindToLifecycle())
.compose(Transformers.observeForUI())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { url: String -> startBrowser(url) }
.addToDisposable(disposables)

viewModel.outputs.startDiscoveryActivity()
.compose(bindToLifecycle())
.compose(Transformers.observeForUI())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { startDiscoveryActivity() }
.addToDisposable(disposables)

viewModel.outputs.startProjectActivity()
.compose(bindToLifecycle())
.compose(Transformers.observeForUI())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { uri: Uri -> startProjectActivity(uri) }
.addToDisposable(disposables)

viewModel.outputs.startProjectActivityToSave()
.compose(bindToLifecycle())
.compose(Transformers.observeForUI())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { startProjectActivityForSave(it) }
.addToDisposable(disposables)

viewModel.outputs.startProjectActivityForComment()
.compose(bindToLifecycle())
.compose(Transformers.observeForUI())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { startProjectActivityForComment(it) }
.addToDisposable(disposables)

viewModel.outputs.startProjectActivityForUpdate()
.compose(bindToLifecycle())
.compose(Transformers.observeForUI())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { startProjectActivityForUpdate(it) }
.addToDisposable(disposables)

viewModel.outputs.startProjectActivityForCommentToUpdate()
.compose(bindToLifecycle())
.compose(Transformers.observeForUI())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { startProjectActivityForCommentToUpdate(it) }
.addToDisposable(disposables)

viewModel.outputs.startProjectActivityForCheckout()
.compose(bindToLifecycle())
.compose(Transformers.observeForUI())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { uri: Uri ->
startProjectActivityForCheckout(
uri
)
}
}.addToDisposable(disposables)

viewModel.outputs.finishDeeplinkActivity()
.compose(bindToLifecycle())
.compose(Transformers.observeForUI())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { finish() }
.addToDisposable(disposables)

viewModel.outputs.startPreLaunchProjectActivity()
.compose(bindToLifecycle())
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
startPreLaunchProjectActivity(it, "DEEPLINK")
}
}.addToDisposable(disposables)
}

private fun projectIntent(uri: Uri): Intent {
Expand Down Expand Up @@ -183,4 +192,9 @@ class DeepLinkActivity : BaseActivity<DeepLinkViewModel.ViewModel?>() {
ApplicationUtils.openUrlExternally(this, url)
finish()
}

override fun onDestroy() {
disposables.clear()
super.onDestroy()
}
}
Loading

0 comments on commit 97e6b10

Please sign in to comment.