Skip to content

Commit

Permalink
Improve the concept
Browse files Browse the repository at this point in the history
Improve the Data & Domain Layers\nIntroduce the new buses for ViewModel\nAddress the Navigation Library Issues.
  • Loading branch information
arthur3486 committed Aug 26, 2019
1 parent 24b3c62 commit 90aacaf
Show file tree
Hide file tree
Showing 134 changed files with 1,844 additions and 1,212 deletions.
15 changes: 14 additions & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ apply from: "../common/utils.gradle"
apply from: "../common/dependencies.gradle"

android {
buildToolsVersion "29.0.0"
buildToolsVersion "29.0.2"
compileSdkVersion rootProject.compileSdk

defaultConfig {
Expand Down Expand Up @@ -61,6 +61,15 @@ android {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}

kotlinOptions {
jvmTarget = "1.8"
}

compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}

dependencies {
Expand All @@ -87,12 +96,16 @@ dependencies {

implementation rxJavaDependencies
implementation rxBusDependencies

implementation commonsDependencies
implementation commonsDataDependencies
implementation commonsRxJavaDependencies

implementation adapsterDependencies

implementation project(":data")
implementation project(":domain")
implementation project(":marvel-api")//TODO
implementation project(":imageloading")
implementation project(":imageloading-glide")
implementation project(":mvvm")
Expand Down
Binary file modified app/release/app-release.apk
Binary file not shown.
25 changes: 7 additions & 18 deletions app/src/main/java/com/arthurivanets/sample/BaseApplication.kt
Original file line number Diff line number Diff line change
Expand Up @@ -16,28 +16,22 @@

package com.arthurivanets.sample

import android.app.Activity
import androidx.fragment.app.Fragment
import androidx.multidex.MultiDexApplication
import com.arthurivanets.dagger.androidx.AndroidXHasSupportFragmentInjector
import com.arthurivanets.sample.di.components.AppDependenciesComponent
import com.arthurivanets.sample.di.components.DaggerAppDependenciesComponent
import dagger.android.AndroidInjector
import dagger.android.DispatchingAndroidInjector
import dagger.android.HasActivityInjector
import dagger.android.HasAndroidInjector
import javax.inject.Inject

abstract class BaseApplication : MultiDexApplication(), HasActivityInjector, AndroidXHasSupportFragmentInjector {
abstract class BaseApplication : MultiDexApplication(), HasAndroidInjector {


lateinit var dependenciesComponent : AppDependenciesComponent
private set

@Inject
lateinit var activityDispatchingAndroidInjector : DispatchingAndroidInjector<Activity>


@Inject
lateinit var fragmentDispatchingAndroidInjector : DispatchingAndroidInjector<Fragment>
lateinit var activityDispatchingAndroidInjector : DispatchingAndroidInjector<Any>


final override fun onCreate() {
Expand Down Expand Up @@ -66,18 +60,13 @@ abstract class BaseApplication : MultiDexApplication(), HasActivityInjector, And
protected open fun onInit() {
//
}


final override fun activityInjector() : AndroidInjector<Activity> {
final override fun androidInjector() : AndroidInjector<Any> {
return activityDispatchingAndroidInjector
}


final override fun supportFragmentInjector() : AndroidInjector<Fragment> {
return fragmentDispatchingAndroidInjector
}


final override fun onTrimMemory(level : Int) {
super.onTrimMemory(level)

Expand Down
16 changes: 5 additions & 11 deletions app/src/main/java/com/arthurivanets/sample/MarvelApplication.kt
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,7 @@ package com.arthurivanets.sample

import android.os.Looper
import android.util.Log
import com.arthurivanets.sample.data.api.MarvelApi
import com.arthurivanets.sample.data.api.util.RequestAuthorizer
import com.arthurivanets.marvelapi.MarvelApi
import io.reactivex.android.plugins.RxAndroidPlugins
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.plugins.RxJavaPlugins
Expand All @@ -40,15 +39,10 @@ class MarvelApplication : BaseApplication() {


private fun initMarvelApi() {
MarvelApi.INSTANCE.apply {
setAuthorizer(
RequestAuthorizer(
publicKey = BuildConfig.API_PUBLIC_KEY,
privateKey = BuildConfig.API_PRIVATE_KEY
)
)
enableDebugging()
}
MarvelApi.INSTANCE.init(
publicKey = BuildConfig.API_PUBLIC_KEY,
privateKey = BuildConfig.API_PRIVATE_KEY
)
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,10 @@ import com.arthurivanets.sample.ui.base.BaseFragment
/**
*
*/
abstract class BaseViewPagerAdapter(fragmentManager : FragmentManager) : FragmentPagerAdapter(fragmentManager), CanHandleBackPressEvents {
abstract class BaseViewPagerAdapter(fragmentManager : FragmentManager) : FragmentPagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT), CanHandleBackPressEvents {


protected val fragmentManager : FragmentManager = fragmentManager
protected val fragmentList = ArrayList<BaseFragment<*, *>>()
private val fragmentList = ArrayList<BaseFragment<*, *>>()


fun addFragment(fragment : BaseFragment<*, *>) {
Expand All @@ -47,16 +46,11 @@ abstract class BaseViewPagerAdapter(fragmentManager : FragmentManager) : Fragmen
}


override fun getItemId(position : Int) : Long {
return position.toLong()
}


override fun getCount() : Int {
return fragmentList.size
}


override fun onBackPressed() : Boolean {
for(fragment in fragmentList) {
if(fragment.onBackPressed()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package com.arthurivanets.sample.di.modules.fragments

import com.arthurivanets.commons.rx.schedulers.SchedulerProvider
import com.arthurivanets.mvvm.util.provideViewModel
import com.arthurivanets.sample.domain.repositories.characters.CharactersRepository
import com.arthurivanets.sample.ui.characters.info.CharacterInfoFragment
Expand All @@ -33,18 +34,26 @@ class CharactersModule {

@Provides
fun provideCharactersViewModel(fragment : CharactersFragment,
charactersRepository : CharactersRepository) : CharactersViewModel {
charactersRepository : CharactersRepository,
schedulerProvider : SchedulerProvider) : CharactersViewModel {
return fragment.provideViewModel {
CharactersViewModelImpl(charactersRepository)
CharactersViewModelImpl(
charactersRepository = charactersRepository,
schedulerProvider = schedulerProvider
)
}
}


@Provides
fun provideCharacterInfoViewModel(fragment : CharacterInfoFragment,
charactersRepository : CharactersRepository) : CharacterInfoViewModel {
charactersRepository : CharactersRepository,
schedulerProvider : SchedulerProvider) : CharacterInfoViewModel {
return fragment.provideViewModel {
CharacterInfoViewModelImpl(charactersRepository)
CharacterInfoViewModelImpl(
charactersRepository = charactersRepository,
schedulerProvider = schedulerProvider
)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package com.arthurivanets.sample.di.modules.fragments

import com.arthurivanets.commons.rx.schedulers.SchedulerProvider
import com.arthurivanets.mvvm.util.provideViewModel
import com.arthurivanets.sample.domain.repositories.comics.ComicsRepository
import com.arthurivanets.sample.ui.comics.info.ComicsInfoFragment
Expand All @@ -33,18 +34,26 @@ class ComicsModule {

@Provides
fun provideComicsViewModel(fragment : ComicsFragment,
comicsRepository : ComicsRepository) : ComicsViewModel {
comicsRepository : ComicsRepository,
schedulerProvider : SchedulerProvider) : ComicsViewModel {
return fragment.provideViewModel {
ComicsViewModelImpl(comicsRepository)
ComicsViewModelImpl(
comicsRepository = comicsRepository,
schedulerProvider = schedulerProvider
)
}
}


@Provides
fun provideComicsInfoViewModel(fragment : ComicsInfoFragment,
comicsRepository : ComicsRepository) : ComicsInfoViewModel {
comicsRepository : ComicsRepository,
schedulerProvider : SchedulerProvider) : ComicsInfoViewModel {
return fragment.provideViewModel {
ComicsInfoViewModelImpl(comicsRepository)
ComicsInfoViewModelImpl(
comicsRepository = comicsRepository,
schedulerProvider = schedulerProvider
)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package com.arthurivanets.sample.di.modules.fragments

import com.arthurivanets.commons.rx.schedulers.SchedulerProvider
import com.arthurivanets.mvvm.util.provideViewModel
import com.arthurivanets.sample.domain.repositories.events.EventsRepository
import com.arthurivanets.sample.ui.events.info.EventInfoFragment
Expand All @@ -33,18 +34,26 @@ class EventsModule {

@Provides
fun provideEventsViewModel(fragment : EventsFragment,
eventsRepository : EventsRepository) : EventsViewModel {
eventsRepository : EventsRepository,
schedulerProvider : SchedulerProvider) : EventsViewModel {
return fragment.provideViewModel {
EventsViewModelImpl(eventsRepository)
EventsViewModelImpl(
eventsRepository = eventsRepository,
schedulerProvider = schedulerProvider
)
}
}


@Provides
fun provideEventInfoViewModel(fragment : EventInfoFragment,
eventsRepository : EventsRepository) : EventInfoViewModel {
eventsRepository : EventsRepository,
schedulerProvider : SchedulerProvider) : EventInfoViewModel {
return fragment.provideViewModel {
EventInfoViewModelImpl(eventsRepository)
EventInfoViewModelImpl(
eventsRepository = eventsRepository,
schedulerProvider = schedulerProvider
)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@

package com.arthurivanets.sample.di.modules.general

import com.arthurivanets.commons.rx.schedulers.DefaultSchedulerProvider
import com.arthurivanets.commons.rx.schedulers.SchedulerProvider
import com.arthurivanets.sample.imageloading.ImageLoader
import com.arthurivanets.sample.imageloading.glide.GlideImageLoader
import dagger.Module
Expand All @@ -29,6 +31,12 @@ class UtilitiesModule {
fun provideImageLoader() : ImageLoader {
return GlideImageLoader()
}


@Provides
fun provideSchedulerProvider() : SchedulerProvider {
return DefaultSchedulerProvider()
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,7 @@
package com.arthurivanets.sample.ui.base

import androidx.databinding.ViewDataBinding
import com.arthurivanets.dagger.androidx.AndroidXHasSupportFragmentInjector
import com.arthurivanets.mvvm.BaseViewModel
import com.arthurivanets.mvvm.navigation.dagger.MvvmActivity

abstract class BaseActivity<VDB : ViewDataBinding, VM : BaseViewModel> : MvvmActivity<VDB, VM>(), AndroidXHasSupportFragmentInjector
abstract class BaseActivity<VDB : ViewDataBinding, VM : BaseViewModel> : MvvmActivity<VDB, VM>()
Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,16 @@

package com.arthurivanets.sample.ui.base

import androidx.databinding.ObservableField
import com.arthurivanets.mvvm.AbstractViewModel
import com.arthurivanets.mvvm.util.get
import com.arthurivanets.mvvm.events.ViewState

abstract class AbstractDataLoadingViewModel : AbstractViewModel(), DataLoadingViewModel {


override val loadingStateHolder = ObservableField(false)

override var isLoading : Boolean
set(value) = loadingStateHolder.set(value)
get() = loadingStateHolder.get(false)
sealed class GeneralViewStates<T>(payload : T? = null) : ViewState<T>(payload) {

class Idle<T>(payload : T? = null) : GeneralViewStates<T>(payload)

class Loading<T>(payload : T? = null) : GeneralViewStates<T>(payload)

class Success<T>(payload : T? = null) : GeneralViewStates<T>(payload)

class Error<T>(payload : T? = null) : GeneralViewStates<T>(payload)

}
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,19 @@
* limitations under the License.
*/

package com.arthurivanets.sample.ui.events.info
package com.arthurivanets.sample.ui.base

import com.arthurivanets.mvvm.events.ViewModelEvent
import com.arthurivanets.mvvm.events.Route
import com.arthurivanets.sample.domain.entities.Character
import com.arthurivanets.sample.domain.entities.Comics
import com.arthurivanets.sample.domain.entities.Event

sealed class EventInfoViewModelEvents<T>(data : T? = null) : ViewModelEvent<T>(data) {
class OpenComicsInfoScreen(comics : Comics) : EventInfoViewModelEvents<Comics>(comics)
sealed class MarvelRoutes<T>(payload : T? = null) : Route<T>(payload) {

class CharacterInfoScreen(character : Character) : MarvelRoutes<Character>(character)

class OpenCharacterInfoScreen(character : Character) : EventInfoViewModelEvents<Character>(character)
class ComicsInfoScreen(comics : Comics) : MarvelRoutes<Comics>(comics)

class EventInfoScreen(event : Event) : MarvelRoutes<Event>(event)

}
Loading

0 comments on commit 90aacaf

Please sign in to comment.