Skip to content

Commit

Permalink
Merge pull request #16 from merklol/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
merklol committed Mar 29, 2021
2 parents 17521e0 + a3c7b19 commit 9aa5432
Show file tree
Hide file tree
Showing 18 changed files with 92 additions and 75 deletions.
10 changes: 6 additions & 4 deletions demo/demoapp/build.gradle
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply plugin: 'dagger.hilt.android.plugin'

android {
compileSdkVersion 29
buildToolsVersion "29.0.3"
compileSdkVersion 30

defaultConfig {
applicationId "com.maximcode.demoapp"
minSdkVersion 23
targetSdkVersion 29
targetSdkVersion 30
versionCode 1
versionName "1.0"

Expand All @@ -33,6 +31,10 @@ android {
jvmTarget = "1.8"
}

buildFeatures {
viewBinding true
}

adbOptions {
installOptions '-g', '-r'
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,10 @@ import com.maximcode.rxmvi.logger.RxMviLogger
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.components.ApplicationComponent
import dagger.hilt.components.SingletonComponent

@Module
@InstallIn(ApplicationComponent::class)
@InstallIn(SingletonComponent::class)
class MainModule {
@Provides
fun provideStore(): Store<CounterState> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,16 +29,18 @@ import androidx.activity.viewModels
import com.jakewharton.rxbinding4.view.clicks
import com.maximcode.rxmvi.view.RxMviActivity
import com.maximcode.demoapp.R
import com.maximcode.demoapp.databinding.ActivityCounterBinding
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.android.synthetic.main.activity_counter.*

@AndroidEntryPoint
class CounterActivity : RxMviActivity<CounterState, CounterViewModel>() {
private lateinit var binding: ActivityCounterBinding
override val viewModel: CounterViewModel by viewModels()

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_counter)
binding = ActivityCounterBinding.inflate(layoutInflater)
setContentView(binding.root)
bindActions()
}

Expand All @@ -49,35 +51,35 @@ class CounterActivity : RxMviActivity<CounterState, CounterViewModel>() {
}

private fun bindActions() {
viewModel.incrementCounter(incBtnView.clicks())
viewModel.decrementCounter(decBtnView.clicks())
viewModel.showHint(showHintBtnView.clicks())
viewModel.incrementCounter(binding.incBtnView.clicks())
viewModel.decrementCounter(binding.decBtnView.clicks())
viewModel.showHint(binding.showHintBtnView.clicks())
}

private fun renderHint(state: CounterState) {
when {
state.isHintDisplayed -> {
showHintBtnView.text = getString(R.string.hide_hint_btn)
hintView.visibility = View.VISIBLE
binding.showHintBtnView.text = getString(R.string.hide_hint_btn)
binding.hintView.visibility = View.VISIBLE
}

!state.isHintDisplayed -> {
showHintBtnView.text = getString(R.string.show_hint_btn)
hintView.visibility = View.GONE
binding. showHintBtnView.text = getString(R.string.show_hint_btn)
binding.hintView.visibility = View.GONE
}
}
}

private fun renderCounter(state: CounterState) {
when {
state.isCalculating -> {
progressView.visibility = View.VISIBLE
counterGroup.visibility = View.GONE
binding.progressView.visibility = View.VISIBLE
binding.counterGroup.visibility = View.GONE
}
else -> {
progressView.visibility = View.GONE
counterGroup.visibility = View.VISIBLE
counterView.text = state.result.toString()
binding.progressView.visibility = View.GONE
binding.counterGroup.visibility = View.VISIBLE
binding.counterView.text = state.result.toString()
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,16 @@
*/
package com.maximcode.demoapp.main

import androidx.hilt.lifecycle.ViewModelInject
import com.maximcode.rxmvi.core.store.Store
import com.maximcode.rxmvi.utils.plusAssign
import com.maximcode.rxmvi.view.RxMviViewModel
import dagger.hilt.android.lifecycle.HiltViewModel
import io.reactivex.rxjava3.core.Observable
import io.reactivex.rxjava3.disposables.CompositeDisposable
import javax.inject.Inject

class CounterViewModel @ViewModelInject constructor(
@HiltViewModel
class CounterViewModel @Inject constructor(
private val store: Store<CounterState>): RxMviViewModel<CounterState>(store) {

override val disposables = CompositeDisposable()
Expand Down
10 changes: 6 additions & 4 deletions demo/demoapp2/build.gradle
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply plugin: 'dagger.hilt.android.plugin'

android {
compileSdkVersion 29
buildToolsVersion "29.0.3"
compileSdkVersion 30

defaultConfig {
applicationId "com.maximcode.demoapp2"
minSdkVersion 23
targetSdkVersion 29
targetSdkVersion 30
versionCode 1
versionName "1.0"

Expand All @@ -32,6 +30,10 @@ android {
kotlinOptions {
jvmTarget = "1.8"
}

buildFeatures {
viewBinding true
}
}

dependencies {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,13 @@ import com.maximcode.rxmvi.core.store.createStore
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.components.ApplicationComponent
import dagger.hilt.components.SingletonComponent
import hu.akarnokd.rxjava3.retrofit.RxJava3CallAdapterFactory
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory

@Module
@InstallIn(ApplicationComponent::class)
@InstallIn(SingletonComponent::class)
class PostsModule {

@Provides
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,44 +27,45 @@ import android.os.Bundle
import android.view.View
import androidx.activity.viewModels
import androidx.recyclerview.widget.LinearLayoutManager
import com.maximcode.demoapp2.R
import com.maximcode.demoapp2.databinding.ActivityPostsBinding
import com.maximcode.demoapp2.recyclerview.RVAdapter
import com.maximcode.demoapp2.recyclerview.RVMarginDecoration
import com.maximcode.rxmvi.view.RxMviActivity
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.android.synthetic.main.activity_posts.*

@AndroidEntryPoint
class PostsActivity : RxMviActivity<PostsState, PostsViewModel>() {
private lateinit var binding: ActivityPostsBinding
override val viewModel: PostsViewModel by viewModels()

private val adapter = RVAdapter()

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_posts)
binding = ActivityPostsBinding.inflate(layoutInflater)
setContentView(binding.root)
setRecyclerView()

viewModel.loadPosts()
}

override fun render(state: PostsState) {
when {
state.loading -> progressView.visibility = View.VISIBLE
state.loading -> binding.progressView.visibility = View.VISIBLE
state.loaded -> {
if(state.error != null) {
errorView.text = state.error.message
errorView.visibility = View.VISIBLE
binding.errorView.text = state.error.message
binding.errorView.visibility = View.VISIBLE
}
progressView.visibility = View.GONE
binding.progressView.visibility = View.GONE
adapter.addPosts(state.posts)
}
}
}

private fun setRecyclerView() {
recyclerView.layoutManager = LinearLayoutManager(this)
recyclerView.adapter = adapter
recyclerView.addItemDecoration(RVMarginDecoration(this, 16, 16))
binding.recyclerView.layoutManager = LinearLayoutManager(this)
binding.recyclerView.adapter = adapter
binding.recyclerView.addItemDecoration(RVMarginDecoration(this, 16, 16))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,15 @@
*/
package com.maximcode.demoapp2.posts

import androidx.hilt.lifecycle.ViewModelInject
import com.maximcode.rxmvi.core.store.Store
import com.maximcode.rxmvi.utils.plusAssign
import com.maximcode.rxmvi.view.RxMviViewModel
import dagger.hilt.android.lifecycle.HiltViewModel
import io.reactivex.rxjava3.disposables.CompositeDisposable
import javax.inject.Inject

class PostsViewModel @ViewModelInject constructor(
@HiltViewModel
class PostsViewModel @Inject constructor(
private val store: Store<PostsState>): RxMviViewModel<PostsState>(store) {

override val disposables = CompositeDisposable()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,26 +24,23 @@
package com.maximcode.demoapp2.recyclerview

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.maximcode.demoapp2.R
import com.maximcode.demoapp2.databinding.RecyclerviewItemBinding
import com.maximcode.demoapp2.dto.Post
import kotlinx.android.synthetic.main.recyclerview_item.view.*

class RVAdapter(private val posts: MutableList<Post> = mutableListOf()): RecyclerView.Adapter<RVAdapter.Holder>() {

class Holder(itemView: View) : RecyclerView.ViewHolder(itemView) {
class Holder(private val binding: RecyclerviewItemBinding) : RecyclerView.ViewHolder(binding.root) {
fun bind(post: Post) {
itemView.titleView.text = post.title
itemView.bodyView.text = post.body
binding.titleView.text = post.title
binding.bodyView.text = post.body
}
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
return Holder(
LayoutInflater.from(parent.context)
.inflate(R.layout.recyclerview_item, parent, false)
RecyclerviewItemBinding.inflate(LayoutInflater.from(parent.context), parent, false)
)
}

Expand Down
10 changes: 6 additions & 4 deletions demo/demoapp3/build.gradle
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply plugin: 'dagger.hilt.android.plugin'

android {
compileSdkVersion 29
buildToolsVersion "29.0.3"
compileSdkVersion 30

defaultConfig {
applicationId "com.maximcode.demoapp3"
minSdkVersion 23
targetSdkVersion 29
targetSdkVersion 30
versionCode 1
versionName "1.0"

Expand All @@ -32,6 +30,10 @@ android {
kotlinOptions {
jvmTarget = "1.8"
}

buildFeatures {
viewBinding true
}
}

dependencies {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,10 @@ import com.maximcode.rxmvi.core.store.createStore
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.components.ApplicationComponent
import dagger.hilt.components.SingletonComponent

@Module
@InstallIn(ApplicationComponent::class)
@InstallIn(SingletonComponent::class)
class AppModule {
@Provides
fun provideStore(): Store<MainState> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,23 +25,24 @@ package com.maximcode.demoapp3.main

import android.os.Bundle
import androidx.activity.viewModels
import com.maximcode.demoapp3.R
import com.maximcode.rxmvi.view.RxMviActivity
import com.jakewharton.rxbinding4.view.clicks
import com.maximcode.demoapp3.databinding.ActivityMainBinding
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.android.synthetic.main.activity_main.*

@AndroidEntryPoint
class MainActivity : RxMviActivity<MainState, MainViewModel>() {
private lateinit var binding: ActivityMainBinding
override val viewModel: MainViewModel by viewModels()

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
viewModel.showMessage(btnView.clicks())
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
viewModel.showMessage(binding.btnView.clicks())
}

override fun render(state: MainState) {
myTextView.text = state.message
binding.myTextView.text = state.message
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,16 @@
*/
package com.maximcode.demoapp3.main

import androidx.hilt.lifecycle.ViewModelInject
import com.maximcode.rxmvi.core.store.Store
import com.maximcode.rxmvi.utils.plusAssign
import com.maximcode.rxmvi.view.RxMviViewModel
import dagger.hilt.android.lifecycle.HiltViewModel
import io.reactivex.rxjava3.core.Observable
import io.reactivex.rxjava3.disposables.CompositeDisposable
import javax.inject.Inject

class MainViewModel@ViewModelInject constructor(
@HiltViewModel
class MainViewModel@Inject constructor(
private val store: Store<MainState>): RxMviViewModel<MainState>(store) {

override val disposables = CompositeDisposable()
Expand Down
Loading

0 comments on commit 9aa5432

Please sign in to comment.