fun name(name: String) fun clickSearchButton() } interface SearchViewModelOutPuts : Output { fun state(): LiveData<SearchViewState> fun goResultActivity(): LiveData<String> } data class SearchViewState( val enableSearchButton: Boolean )
clickSearchButton = PublishSubject.create<Parameter>() val input = object : SearchViewModelInPuts { override fun name(name: String) = this@SearchViewModel.name.onNext(name) override fun clickSearchButton() = this@SearchViewModel.clickSearchButton.onNext(Parameter.CLICK) } private val state = MutableLiveData<SearchViewState>() private val goResultActivity = MutableLiveData<String>() val output = object : SearchViewModelOutPuts { override fun state() = state override fun goResultActivity() = goResultActivity }
fun clickUser(user: User) fun clickHomeButton() } interface MainViewModelOutPuts : Output { fun state(): LiveData<MainViewState> fun refreshListData(): LiveData<Pair<User, List<Repo>>> fun showErrorToast(): LiveData<String> fun goProfileActivity(): LiveData<String> fun finish(): LiveData<Unit> } data class MainViewState( val showLoading: Boolean, val title: String )
var userName: String val viewModel: MainViewModel by inject { parametersOf(userName) } val getUserData: GetUserData by inject() Feature("MainViewModel spec") {…} })