Skip to content

Commit

Permalink
Handle navigation inside activity
Browse files Browse the repository at this point in the history
  • Loading branch information
LukaKordic committed Jul 29, 2019
1 parent 9e8f374 commit 4970195
Show file tree
Hide file tree
Showing 12 changed files with 24 additions and 55 deletions.
2 changes: 1 addition & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ dependencies {

//di
implementation "org.koin:koin-android:$koinVersion"
implementation "org.koin:koin-android-viewmodel:$koinVersion"
implementation "org.koin:koin-androidx-viewmodel:$koinVersion"

//arhitecture components
implementation "android.arch.lifecycle:viewmodel:$architectureComponents"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ package com.cobeisfresh.template.di

import com.cobeisfresh.template.ui.weather.presentation.WeatherViewModel
import com.cobeisfresh.template.ui.welcome.presentation.WelcomeViewModel
import org.koin.android.viewmodel.dsl.viewModel
import org.koin.androidx.viewmodel.dsl.viewModel
import org.koin.dsl.module

val presentationModule = module {
viewModel { WeatherViewModel(get()) }
viewModel { WelcomeViewModel()}
viewModel { WelcomeViewModel() }
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,8 @@ package com.cobeisfresh.template.routing

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.FragmentActivity
import com.cobeisfresh.template.R
import com.cobeisfresh.template.common.extensions.showFragment
import com.cobeisfresh.template.ui.base.BaseActivity
import com.cobeisfresh.template.ui.weather.view.activities.WeatherActivity
import com.cobeisfresh.template.ui.weather.view.fragments.WeatherDetailsFragment
import java.io.Serializable

class AppNavigator(private val activity: AppCompatActivity) : Navigator {
Expand All @@ -16,14 +12,13 @@ class AppNavigator(private val activity: AppCompatActivity) : Navigator {
const val SCREEN_TYPE = "screen_type"
}

override fun showWeather() = navigateTo(getIntent<WeatherActivity>().apply {
override fun showWeatherActivity() = navigateTo(getIntent<WeatherActivity>().apply {
putExtra(SCREEN_TYPE, ScreenType.WEATHER)
})

private fun navigateTo(intent: Intent) = activity.startActivity(intent)

private inline fun <reified T : BaseActivity> getIntent() = Intent(activity, T::class.java)

}

enum class ScreenType : Serializable {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@ package com.cobeisfresh.template.routing

interface Navigator {

fun showWeather()
fun showWeatherActivity()

}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@ import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.cobeisfresh.template.common.DEFAULT_CITY_NAME
import com.cobeisfresh.template.routing.AppNavigator
import com.cobeisfresh.template.ui.base.NavigatorViewModel
import com.cobeisfresh.template.ui.base.ViewState
import com.example.domain.interaction.weather.GetWeatherUseCase
import com.example.domain.model.WeatherInfo
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@ package com.cobeisfresh.template.ui.weather.view.fragments
import com.cobeisfresh.template.R
import com.cobeisfresh.template.ui.base.BaseFragment

class WeatherDetailsFragment: BaseFragment() {
class WeatherDetailsFragment : BaseFragment() {

override fun viewReady() {}

override fun getLayout() = R.layout.fragment_weather_details

companion object{
fun newInstance() = WeatherDetailsFragment()
companion object {
fun newInstance() = WeatherDetailsFragment()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,23 @@ import com.cobeisfresh.template.common.extensions.onClick
import com.cobeisfresh.template.common.extensions.subscribe
import com.cobeisfresh.template.ui.base.BaseFragment
import com.cobeisfresh.template.ui.base.ViewState
import com.cobeisfresh.template.ui.base.ViewState.Status
import com.cobeisfresh.template.ui.base.ViewState.Status.*
import com.cobeisfresh.template.ui.weather.presentation.WeatherViewModel
import com.example.domain.model.WeatherInfo
import kotlinx.android.synthetic.main.fragment_weather.*
import org.koin.android.viewmodel.ext.android.viewModel
import org.koin.androidx.viewmodel.ext.android.viewModel

class WeatherFragment : BaseFragment() {

private val viewModel: WeatherViewModel by viewModel()

override fun getLayout() = R.layout.fragment_weather

override fun viewReady() {
viewModel.getWeatherForLocation()
subscribeToData()

getWeather.onClick {
weatherActivityContainer.hideKeyboard()
viewModel.getWeatherForLocation(cityInput.text.toString())
Expand All @@ -27,18 +32,16 @@ class WeatherFragment : BaseFragment() {
showWeatherDetails.onClick { activity?.run { appFragmentNavigator.showWeatherDetails(this) } }
}

override fun getLayout() = R.layout.fragment_weather

private fun subscribeToData() {
viewModel.weatherLiveData.subscribe(this, ::handleViewState)
}

private fun handleViewState(viewState: ViewState<WeatherInfo>) {
with(viewState) {
when (status) {
ViewState.Status.LOADING -> showLoading(weatherLoadingProgress)
ViewState.Status.SUCCESS -> data?.run(::showWeatherData)
ViewState.Status.ERROR -> {
LOADING -> showLoading(weatherLoadingProgress)
SUCCESS -> data?.run(::showWeatherData)
ERROR -> {
hideLoading(weatherLoadingProgress)
showError(error?.message, weatherActivityContainer)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,7 @@
package com.cobeisfresh.template.ui.welcome.presentation

import com.cobeisfresh.template.routing.AppNavigator
import com.cobeisfresh.template.ui.base.NavigatorViewModel
import androidx.lifecycle.ViewModel

class WelcomeViewModel : ViewModel() {

class WelcomeViewModel : NavigatorViewModel() {

fun proceedToNextScreen() {
appNavigator.showWeather()
}

override fun initAppNavigator(appNavigator: AppNavigator) {
this.appNavigator = appNavigator
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,16 @@ import android.os.Bundle
import com.cobeisfresh.template.R
import com.cobeisfresh.template.common.extensions.onClick
import com.cobeisfresh.template.ui.base.BaseActivity
import com.cobeisfresh.template.ui.welcome.presentation.WelcomeViewModel
import kotlinx.android.synthetic.main.activity_welcome.*
import org.koin.android.viewmodel.ext.android.viewModel

class WelcomeActivity : BaseActivity() {

private val viewModel by viewModel<WelcomeViewModel>()

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_welcome)
viewModel.initAppNavigator(appNavigator)

nextScreen.onClick {
viewModel.proceedToNextScreen()
appNavigator.showWeatherActivity()
finish()
}
}
Expand Down
2 changes: 1 addition & 1 deletion data/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -52,5 +52,5 @@ dependencies {

//di
implementation "org.koin:koin-android:$koinVersion"
implementation "org.koin:koin-android-viewmodel:$koinVersion"
implementation "org.koin:koin-androidx-viewmodel:$koinVersion"
}
2 changes: 1 addition & 1 deletion domain/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -47,5 +47,5 @@ dependencies {

//di
implementation "org.koin:koin-android:$koinVersion"
implementation "org.koin:koin-android-viewmodel:$koinVersion"
implementation "org.koin:koin-androidx-viewmodel:$koinVersion"
}

0 comments on commit 4970195

Please sign in to comment.