diff --git a/.idea/codeStyleSettings.xml b/.idea/codeStyleSettings.xml index f61acbe5..7e0bedfd 100644 --- a/.idea/codeStyleSettings.xml +++ b/.idea/codeStyleSettings.xml @@ -38,17 +38,27 @@ + + + + + + diff --git a/app/build.gradle b/app/build.gradle index f0ff4322..cd409af1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -159,6 +159,11 @@ android { enabled = true } + kapt { + // NonExistentClass Errorを無視 + correctErrorTypes = true + } + lintOptions { textReport true textOutput 'stdout' diff --git a/app/src/main/kotlin/com/ayatk/biblio/App.kt b/app/src/main/kotlin/com/ayatk/biblio/App.kt index 1ae1d995..bb94b280 100644 --- a/app/src/main/kotlin/com/ayatk/biblio/App.kt +++ b/app/src/main/kotlin/com/ayatk/biblio/App.kt @@ -4,7 +4,6 @@ package com.ayatk.biblio -import com.ayatk.biblio.di.AppModule import com.ayatk.biblio.di.DaggerAppComponent import com.crashlytics.android.Crashlytics import com.squareup.leakcanary.LeakCanary @@ -21,12 +20,12 @@ open class App : DaggerApplication() { initLeakCanary() } - override fun applicationInjector(): AndroidInjector - = DaggerAppComponent - .builder() - .application(this) - .appModule(AppModule(this)) - .build() + override fun applicationInjector(): AndroidInjector { + return DaggerAppComponent + .builder() + .application(this) + .build() + } private fun initLeakCanary() { if (LeakCanary.isInAnalyzerProcess(this)) { diff --git a/app/src/main/kotlin/com/ayatk/biblio/data/dao/OrmaDatabaseWrapper.kt b/app/src/main/kotlin/com/ayatk/biblio/data/dao/OrmaDatabaseWrapper.kt deleted file mode 100644 index 61de5af5..00000000 --- a/app/src/main/kotlin/com/ayatk/biblio/data/dao/OrmaDatabaseWrapper.kt +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (c) 2016-2017 Aya Tokikaze. All Rights Reserved. - */ - -package com.ayatk.biblio.data.dao - -import android.content.Context -import com.ayatk.biblio.model.OrmaDatabase -import com.github.gfx.android.orma.AccessThreadConstraint - -class OrmaDatabaseWrapper(context: Context) { - val db: OrmaDatabase = OrmaDatabase.builder(context) - .writeOnMainThread(AccessThreadConstraint.FATAL) - .readOnMainThread(AccessThreadConstraint.FATAL) - .build() -} diff --git a/app/src/main/kotlin/com/ayatk/biblio/data/narou/NarouClient.kt b/app/src/main/kotlin/com/ayatk/biblio/data/narou/NarouClient.kt index 40629d23..5a3bca0c 100644 --- a/app/src/main/kotlin/com/ayatk/biblio/data/narou/NarouClient.kt +++ b/app/src/main/kotlin/com/ayatk/biblio/data/narou/NarouClient.kt @@ -29,7 +29,8 @@ class NarouClient private val htmlUtil: HtmlUtil, private val narouApiService: NarouApiService, @Named("Narou") private val narouService: NarouService, - @Named("Narou18") private val narou18Service: NarouService) { + @Named("Narou18") private val narou18Service: NarouService +) { fun getNovel(query: Map): Single> { return narouApiService.getNovel(query) @@ -84,7 +85,8 @@ class NarouClient = narouService.getSSPage(ncode).map { htmlUtil.parsePage(ncode, it, 1) } private fun convertNarouNovelToNovel( - narouNovels: List, publisher: Publisher): List { + narouNovels: List, publisher: Publisher + ): List { return narouNovels.map { Novel( publisher = publisher, diff --git a/app/src/main/kotlin/com/ayatk/biblio/di/AppComponent.kt b/app/src/main/kotlin/com/ayatk/biblio/di/AppComponent.kt index 3871c198..1ae772fd 100644 --- a/app/src/main/kotlin/com/ayatk/biblio/di/AppComponent.kt +++ b/app/src/main/kotlin/com/ayatk/biblio/di/AppComponent.kt @@ -4,6 +4,7 @@ package com.ayatk.biblio.di +import android.app.Application import com.ayatk.biblio.App import com.ayatk.biblio.ui.UiModule import dagger.BindsInstance @@ -17,6 +18,7 @@ import javax.inject.Singleton modules = arrayOf( AndroidSupportInjectionModule::class, AppModule::class, + RepositoryModule::class, HttpClientModule::class, UiModule::class ) @@ -26,9 +28,7 @@ interface AppComponent : AndroidInjector { @Component.Builder interface Builder { @BindsInstance - fun application(application: App): Builder - - fun appModule(appModule: AppModule): Builder + fun application(application: Application): Builder fun build(): AppComponent } diff --git a/app/src/main/kotlin/com/ayatk/biblio/di/AppModule.kt b/app/src/main/kotlin/com/ayatk/biblio/di/AppModule.kt index 7ec70f20..5490b65e 100644 --- a/app/src/main/kotlin/com/ayatk/biblio/di/AppModule.kt +++ b/app/src/main/kotlin/com/ayatk/biblio/di/AppModule.kt @@ -7,13 +7,14 @@ package com.ayatk.biblio.di import android.app.Application import android.content.Context import android.net.ConnectivityManager -import com.ayatk.biblio.data.dao.OrmaDatabaseWrapper import com.ayatk.biblio.data.narou.entity.enums.BigGenre import com.ayatk.biblio.data.narou.entity.enums.Genre import com.ayatk.biblio.data.narou.service.NarouApiService import com.ayatk.biblio.data.narou.service.NarouService import com.ayatk.biblio.data.narou.util.HtmlUtil -import com.ayatk.biblio.pref.DefaultPrefsWrapper +import com.ayatk.biblio.model.OrmaDatabase +import com.ayatk.biblio.pref.DefaultPrefs +import com.github.gfx.android.orma.AccessThreadConstraint import com.google.gson.Gson import com.google.gson.GsonBuilder import com.google.gson.JsonDeserializer @@ -28,11 +29,7 @@ import javax.inject.Named import javax.inject.Singleton @Module -class AppModule(val application: Application) { - - @Provides - @Singleton - fun provideApplicationContext(): Application = application +class AppModule { @Provides fun provideConnectivityManager(application: Application): ConnectivityManager @@ -40,13 +37,17 @@ class AppModule(val application: Application) { @Singleton @Provides - fun provideDefaultPrefs(application: Application): DefaultPrefsWrapper - = DefaultPrefsWrapper(application) + fun provideDefaultPrefs(application: Application): DefaultPrefs + = DefaultPrefs.get(application) @Singleton @Provides - fun provideOrmaDatabase(application: Application): OrmaDatabaseWrapper - = OrmaDatabaseWrapper(application) + fun provideOrmaDatabase(application: Application): OrmaDatabase { + return OrmaDatabase.builder(application) + .writeOnMainThread(AccessThreadConstraint.FATAL) + .readOnMainThread(AccessThreadConstraint.FATAL) + .build() + } @Singleton @Provides diff --git a/app/src/main/kotlin/com/ayatk/biblio/di/RepositoryModule.kt b/app/src/main/kotlin/com/ayatk/biblio/di/RepositoryModule.kt new file mode 100644 index 00000000..bf3188e7 --- /dev/null +++ b/app/src/main/kotlin/com/ayatk/biblio/di/RepositoryModule.kt @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2016-2017. Aya Tokikaze. All Rights Reserved. + */ + +package com.ayatk.biblio.di + +import com.ayatk.biblio.repository.library.LibraryDataSource +import com.ayatk.biblio.repository.library.LibraryLocalDataSource +import com.ayatk.biblio.repository.library.LibraryRepository +import com.ayatk.biblio.repository.novel.NovelBodyDataSource +import com.ayatk.biblio.repository.novel.NovelBodyLocalDataSource +import com.ayatk.biblio.repository.novel.NovelBodyRemoteDataSource +import com.ayatk.biblio.repository.novel.NovelBodyRepository +import com.ayatk.biblio.repository.novel.NovelDataSource +import com.ayatk.biblio.repository.novel.NovelLocalDataSource +import com.ayatk.biblio.repository.novel.NovelRemoteDataSource +import com.ayatk.biblio.repository.novel.NovelRepository +import com.ayatk.biblio.repository.novel.NovelTableDataSource +import com.ayatk.biblio.repository.novel.NovelTableLocalDataSource +import com.ayatk.biblio.repository.novel.NovelTableRemoteDataSource +import com.ayatk.biblio.repository.novel.NovelTableRepository +import dagger.Module +import dagger.Provides +import javax.inject.Singleton + +@Module +class RepositoryModule { + + @Singleton + @Provides + fun provideLibraryRepository(localDataSource: LibraryLocalDataSource): LibraryDataSource + = LibraryRepository(localDataSource) + + @Singleton + @Provides + fun provideNovelBodyRepository( + local: NovelBodyLocalDataSource, + remote: NovelBodyRemoteDataSource + ): NovelBodyDataSource = NovelBodyRepository(local, remote) + + @Singleton + @Provides + fun provideNovelRepository( + local: NovelLocalDataSource, + remote: NovelRemoteDataSource + ): NovelDataSource = NovelRepository(local, remote) + + @Singleton + @Provides + fun provideNovelTableRepository( + local: NovelTableLocalDataSource, + remote: NovelTableRemoteDataSource + ): NovelTableDataSource = NovelTableRepository(local, remote) +} diff --git a/app/src/main/kotlin/com/ayatk/biblio/pref/DefaultPrefsWrapper.kt b/app/src/main/kotlin/com/ayatk/biblio/pref/DefaultPrefsWrapper.kt deleted file mode 100644 index 1c1048ba..00000000 --- a/app/src/main/kotlin/com/ayatk/biblio/pref/DefaultPrefsWrapper.kt +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright (c) 2016-2017. Aya Tokikaze. All Rights Reserved. - */ - -package com.ayatk.biblio.pref - -import android.content.Context - -/** - * Dagger2でクリーンビルドするとkaptの順番で死ぬのでラップする - */ -class DefaultPrefsWrapper(context: Context) { - val prefs: DefaultPrefs = DefaultPrefs.get(context) -} diff --git a/app/src/main/kotlin/com/ayatk/biblio/repository/library/LibraryLocalDataSource.kt b/app/src/main/kotlin/com/ayatk/biblio/repository/library/LibraryLocalDataSource.kt index d2089f5f..f6fdf772 100644 --- a/app/src/main/kotlin/com/ayatk/biblio/repository/library/LibraryLocalDataSource.kt +++ b/app/src/main/kotlin/com/ayatk/biblio/repository/library/LibraryLocalDataSource.kt @@ -4,9 +4,9 @@ package com.ayatk.biblio.repository.library -import com.ayatk.biblio.data.dao.OrmaDatabaseWrapper import com.ayatk.biblio.model.Library import com.ayatk.biblio.model.Novel +import com.ayatk.biblio.model.OrmaDatabase import com.github.gfx.android.orma.annotation.OnConflict import io.reactivex.Completable import io.reactivex.Maybe @@ -16,17 +16,17 @@ import io.reactivex.schedulers.Schedulers import javax.inject.Inject class LibraryLocalDataSource -@Inject constructor(private val orma: OrmaDatabaseWrapper) : LibraryDataSource { +@Inject constructor(private val orma: OrmaDatabase) : LibraryDataSource { override fun findAll(): Single> { - return orma.db.selectFromLibrary() + return orma.selectFromLibrary() .executeAsObservable() .toList() .subscribeOn(Schedulers.io()) } override fun find(novel: Novel): Maybe { - return orma.db.selectFromLibrary() + return orma.selectFromLibrary() .novelEq(novel) .executeAsObservable() .firstElement() @@ -34,35 +34,35 @@ class LibraryLocalDataSource } override fun save(library: Library): Completable { - return orma.db.transactionAsCompletable { - if (orma.db.relationOfNovel().codeEq(library.novel.code).isEmpty) { - orma.db.relationOfNovel().inserter().execute(library.novel) + return orma.transactionAsCompletable { + if (orma.relationOfNovel().codeEq(library.novel.code).isEmpty) { + orma.relationOfNovel().inserter().execute(library.novel) } - orma.db.relationOfLibrary().inserter(OnConflict.REPLACE).execute(library) + orma.relationOfLibrary().inserter(OnConflict.REPLACE).execute(library) }.subscribeOn(Schedulers.io()) } override fun saveAll(libraries: List): Completable { - return orma.db.transactionAsCompletable { + return orma.transactionAsCompletable { libraries.forEach { library -> - if (orma.db.relationOfNovel().selector().codeEq(library.novel.code).isEmpty) { - orma.db.relationOfNovel().inserter().execute(library.novel) + if (orma.relationOfNovel().selector().codeEq(library.novel.code).isEmpty) { + orma.relationOfNovel().inserter().execute(library.novel) } - orma.db.relationOfLibrary().inserter(OnConflict.REPLACE).execute(library) + orma.relationOfLibrary().inserter(OnConflict.REPLACE).execute(library) } }.subscribeOn(Schedulers.io()) } override fun updateAllAsync(novels: List) { - orma.db.transactionAsCompletable { - novels.forEach { orma.db.relationOfLibrary().upsert(Library(novel = it)) } + orma.transactionAsCompletable { + novels.forEach { orma.relationOfLibrary().upsert(Library(novel = it)) } } .subscribeOn(Schedulers.io()) .subscribe() } override fun delete(novel: Novel): Single { - return orma.db.relationOfLibrary() + return orma.relationOfLibrary() .deleter() .novelEq(novel) .executeAsSingle() diff --git a/app/src/main/kotlin/com/ayatk/biblio/repository/library/LibraryRepository.kt b/app/src/main/kotlin/com/ayatk/biblio/repository/library/LibraryRepository.kt index bb229735..56770030 100644 --- a/app/src/main/kotlin/com/ayatk/biblio/repository/library/LibraryRepository.kt +++ b/app/src/main/kotlin/com/ayatk/biblio/repository/library/LibraryRepository.kt @@ -9,12 +9,8 @@ import com.ayatk.biblio.model.Novel import io.reactivex.Completable import io.reactivex.Maybe import io.reactivex.Single -import javax.inject.Inject -import javax.inject.Singleton -@Singleton -class LibraryRepository -@Inject constructor(private val localDataSource: LibraryLocalDataSource) : LibraryDataSource { +class LibraryRepository(private val localDataSource: LibraryLocalDataSource) : LibraryDataSource { private var cachedLibrary = emptyMap() diff --git a/app/src/main/kotlin/com/ayatk/biblio/repository/novel/NovelBodyLocalDataSource.kt b/app/src/main/kotlin/com/ayatk/biblio/repository/novel/NovelBodyLocalDataSource.kt index c5793d74..b49eae11 100644 --- a/app/src/main/kotlin/com/ayatk/biblio/repository/novel/NovelBodyLocalDataSource.kt +++ b/app/src/main/kotlin/com/ayatk/biblio/repository/novel/NovelBodyLocalDataSource.kt @@ -4,19 +4,19 @@ package com.ayatk.biblio.repository.novel -import com.ayatk.biblio.data.dao.OrmaDatabaseWrapper import com.ayatk.biblio.model.Novel import com.ayatk.biblio.model.NovelBody +import com.ayatk.biblio.model.OrmaDatabase import io.reactivex.Completable import io.reactivex.Single import io.reactivex.schedulers.Schedulers import javax.inject.Inject class NovelBodyLocalDataSource -@Inject constructor(private val orma: OrmaDatabaseWrapper) : NovelBodyDataSource { +@Inject constructor(private val orma: OrmaDatabase) : NovelBodyDataSource { override fun find(novel: Novel, page: Int): Single> { - return orma.db.selectFromNovelBody() + return orma.selectFromNovelBody() .novelEq(novel) .pageEq(page) .executeAsObservable() @@ -25,13 +25,13 @@ class NovelBodyLocalDataSource } override fun save(novelBody: NovelBody): Completable { - return orma.db.transactionAsCompletable { - orma.db.insertIntoNovelBody(novelBody) + return orma.transactionAsCompletable { + orma.insertIntoNovelBody(novelBody) }.subscribeOn(Schedulers.io()) } override fun deleteAll(novel: Novel): Single { - return orma.db.deleteFromNovelBody() + return orma.deleteFromNovelBody() .novelEq(novel) .executeAsSingle() .subscribeOn(Schedulers.io()) diff --git a/app/src/main/kotlin/com/ayatk/biblio/repository/novel/NovelBodyRepository.kt b/app/src/main/kotlin/com/ayatk/biblio/repository/novel/NovelBodyRepository.kt index 0230a458..88372dbd 100644 --- a/app/src/main/kotlin/com/ayatk/biblio/repository/novel/NovelBodyRepository.kt +++ b/app/src/main/kotlin/com/ayatk/biblio/repository/novel/NovelBodyRepository.kt @@ -9,10 +9,8 @@ import com.ayatk.biblio.model.NovelBody import io.reactivex.Completable import io.reactivex.Single import io.reactivex.rxkotlin.toSingle -import javax.inject.Inject -class NovelBodyRepository -@Inject constructor( +class NovelBodyRepository( private val localDataSource: NovelBodyLocalDataSource, private val remoteDataSource: NovelBodyRemoteDataSource ) : NovelBodyDataSource { diff --git a/app/src/main/kotlin/com/ayatk/biblio/repository/novel/NovelLocalDataSource.kt b/app/src/main/kotlin/com/ayatk/biblio/repository/novel/NovelLocalDataSource.kt index 48945e70..ba61ba95 100644 --- a/app/src/main/kotlin/com/ayatk/biblio/repository/novel/NovelLocalDataSource.kt +++ b/app/src/main/kotlin/com/ayatk/biblio/repository/novel/NovelLocalDataSource.kt @@ -4,8 +4,8 @@ package com.ayatk.biblio.repository.novel -import com.ayatk.biblio.data.dao.OrmaDatabaseWrapper import com.ayatk.biblio.model.Novel +import com.ayatk.biblio.model.OrmaDatabase import com.ayatk.biblio.model.enums.Publisher import io.reactivex.Completable import io.reactivex.Maybe @@ -14,10 +14,10 @@ import io.reactivex.schedulers.Schedulers import javax.inject.Inject class NovelLocalDataSource -@Inject constructor(private val orma: OrmaDatabaseWrapper) : NovelDataSource { +@Inject constructor(private val orma: OrmaDatabase) : NovelDataSource { override fun findAll(codes: List, publisher: Publisher): Single> { - return orma.db.selectFromNovel() + return orma.selectFromNovel() .publisherEq(publisher) .executeAsObservable() .toList() @@ -25,7 +25,7 @@ class NovelLocalDataSource } override fun find(code: String, publisher: Publisher): Maybe { - return orma.db.selectFromNovel() + return orma.selectFromNovel() .codeEq(code) .publisherEq(publisher) .executeAsObservable() @@ -34,13 +34,13 @@ class NovelLocalDataSource } override fun save(novel: Novel): Completable { - return orma.db.transactionAsCompletable { - orma.db.relationOfNovel().upsert(novel) + return orma.transactionAsCompletable { + orma.relationOfNovel().upsert(novel) }.subscribeOn(Schedulers.io()) } override fun delete(code: String) { - orma.db.relationOfNovel() + orma.relationOfNovel() .deleter() .codeEq(code) .execute() diff --git a/app/src/main/kotlin/com/ayatk/biblio/repository/novel/NovelTableLocalDataSource.kt b/app/src/main/kotlin/com/ayatk/biblio/repository/novel/NovelTableLocalDataSource.kt index 0024099e..8a70dbd9 100644 --- a/app/src/main/kotlin/com/ayatk/biblio/repository/novel/NovelTableLocalDataSource.kt +++ b/app/src/main/kotlin/com/ayatk/biblio/repository/novel/NovelTableLocalDataSource.kt @@ -4,9 +4,9 @@ package com.ayatk.biblio.repository.novel -import com.ayatk.biblio.data.dao.OrmaDatabaseWrapper import com.ayatk.biblio.model.Novel import com.ayatk.biblio.model.NovelTable +import com.ayatk.biblio.model.OrmaDatabase import io.reactivex.Completable import io.reactivex.Maybe import io.reactivex.Single @@ -14,10 +14,10 @@ import io.reactivex.schedulers.Schedulers import javax.inject.Inject class NovelTableLocalDataSource -@Inject constructor(val orma: OrmaDatabaseWrapper) : NovelTableDataSource { +@Inject constructor(val orma: OrmaDatabase) : NovelTableDataSource { override fun findAll(novel: Novel): Single> { - return orma.db.selectFromNovelTable() + return orma.selectFromNovelTable() .novelEq(novel) .executeAsObservable() .toList() @@ -25,7 +25,7 @@ class NovelTableLocalDataSource } override fun find(novel: Novel, page: Int): Maybe { - return orma.db.selectFromNovelTable() + return orma.selectFromNovelTable() .novelEq(novel) .page(page.toLong()) .executeAsObservable() @@ -34,15 +34,15 @@ class NovelTableLocalDataSource } override fun save(novelTables: List): Completable { - return orma.db.transactionAsCompletable { + return orma.transactionAsCompletable { novelTables.map { - orma.db.relationOfNovelTable().upsert(it) + orma.relationOfNovelTable().upsert(it) } }.subscribeOn(Schedulers.io()) } override fun delete(novel: Novel): Single { - return orma.db.relationOfNovelTable() + return orma.relationOfNovelTable() .deleter() .novelEq(novel) .executeAsSingle() diff --git a/app/src/main/kotlin/com/ayatk/biblio/ui/body/NovelBodyActivity.kt b/app/src/main/kotlin/com/ayatk/biblio/ui/body/NovelBodyActivity.kt index c61de6f7..d9a14ea5 100644 --- a/app/src/main/kotlin/com/ayatk/biblio/ui/body/NovelBodyActivity.kt +++ b/app/src/main/kotlin/com/ayatk/biblio/ui/body/NovelBodyActivity.kt @@ -60,8 +60,10 @@ class NovelBodyActivity : DaggerAppCompatActivity() { EventBus.getDefault().post(NovelBodySelectedEvent(position)) } - override fun onPageScrolled(position: Int, positionOffset: Float, - positionOffsetPixels: Int) { + override fun onPageScrolled( + position: Int, positionOffset: Float, + positionOffsetPixels: Int + ) { } override fun onPageScrollStateChanged(pos: Int) {} diff --git a/app/src/main/kotlin/com/ayatk/biblio/ui/body/NovelBodyFragment.kt b/app/src/main/kotlin/com/ayatk/biblio/ui/body/NovelBodyFragment.kt index 68061144..dd476b3c 100644 --- a/app/src/main/kotlin/com/ayatk/biblio/ui/body/NovelBodyFragment.kt +++ b/app/src/main/kotlin/com/ayatk/biblio/ui/body/NovelBodyFragment.kt @@ -33,8 +33,10 @@ class NovelBodyFragment : DaggerFragment() { arguments?.getInt(BUNDLE_ARGS_NOVEL_PAGE) ?: 1 } - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, - savedInstanceState: Bundle?): View? { + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { binding = FragmentNovelBodyBinding.inflate(inflater, container, false) binding.viewModel = viewModel diff --git a/app/src/main/kotlin/com/ayatk/biblio/ui/body/NovelBodyViewModel.kt b/app/src/main/kotlin/com/ayatk/biblio/ui/body/NovelBodyViewModel.kt index 693ba86b..1683fde1 100644 --- a/app/src/main/kotlin/com/ayatk/biblio/ui/body/NovelBodyViewModel.kt +++ b/app/src/main/kotlin/com/ayatk/biblio/ui/body/NovelBodyViewModel.kt @@ -9,24 +9,25 @@ import android.databinding.Bindable import com.ayatk.biblio.BR import com.ayatk.biblio.model.Novel import com.ayatk.biblio.model.NovelBody -import com.ayatk.biblio.repository.novel.NovelBodyRepository +import com.ayatk.biblio.repository.novel.NovelBodyDataSource import com.ayatk.biblio.ui.ViewModel import javax.inject.Inject class NovelBodyViewModel @Inject constructor( - private val repository: NovelBodyRepository + private val novelBodyDataSource: NovelBodyDataSource ) : BaseObservable(), ViewModel { @Bindable var novelBody: NovelBody = NovelBody() fun start(novel: Novel, page: Int) { - repository.find(novel, page) + novelBodyDataSource.find(novel, page) .subscribe( { novelBody = it.first() notifyPropertyChanged(BR.novelBody) }, + // TODO: 2017/11/26 エラーを握りつぶしマン {} ) } diff --git a/app/src/main/kotlin/com/ayatk/biblio/ui/detail/info/NovelInfoFragment.kt b/app/src/main/kotlin/com/ayatk/biblio/ui/detail/info/NovelInfoFragment.kt index daa6e2eb..88b647a3 100644 --- a/app/src/main/kotlin/com/ayatk/biblio/ui/detail/info/NovelInfoFragment.kt +++ b/app/src/main/kotlin/com/ayatk/biblio/ui/detail/info/NovelInfoFragment.kt @@ -10,7 +10,7 @@ import android.view.View import android.view.ViewGroup import com.ayatk.biblio.databinding.FragmentNovelInfoBinding import com.ayatk.biblio.model.Novel -import com.ayatk.biblio.repository.library.LibraryRepository +import com.ayatk.biblio.repository.library.LibraryDataSource import com.ayatk.biblio.ui.util.helper.Navigator import dagger.android.support.DaggerFragment import org.parceler.Parcels @@ -24,25 +24,19 @@ class NovelInfoFragment : DaggerFragment() { lateinit var navigator: Navigator @Inject - lateinit var libraryRepository: LibraryRepository + lateinit var libraryDataSource: LibraryDataSource private val novel: Novel by lazy { - Parcels.unwrap( - arguments?.getParcelable( - BUNDLE_ARGS_NOVEL - ) - ) + Parcels.unwrap(arguments?.getParcelable(BUNDLE_ARGS_NOVEL)) } private lateinit var viewModel: NovelInfoViewModel - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, - savedInstanceState: Bundle?): View? { + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? + ): View? { binding = FragmentNovelInfoBinding.inflate(inflater, container, false) - viewModel = NovelInfoViewModel( - navigator, libraryRepository, - novel - ) + viewModel = NovelInfoViewModel(navigator, libraryDataSource, novel) binding.viewModel = viewModel return binding.root diff --git a/app/src/main/kotlin/com/ayatk/biblio/ui/detail/info/NovelInfoViewModel.kt b/app/src/main/kotlin/com/ayatk/biblio/ui/detail/info/NovelInfoViewModel.kt index 9358c520..0123fea4 100644 --- a/app/src/main/kotlin/com/ayatk/biblio/ui/detail/info/NovelInfoViewModel.kt +++ b/app/src/main/kotlin/com/ayatk/biblio/ui/detail/info/NovelInfoViewModel.kt @@ -13,7 +13,7 @@ import android.view.inputmethod.InputMethodManager import com.ayatk.biblio.BR import com.ayatk.biblio.model.Library import com.ayatk.biblio.model.Novel -import com.ayatk.biblio.repository.library.LibraryRepository +import com.ayatk.biblio.repository.library.LibraryDataSource import com.ayatk.biblio.ui.ViewModel import com.ayatk.biblio.ui.util.helper.Navigator import com.ayatk.biblio.util.DateFormat @@ -21,7 +21,7 @@ import mabbas007.tagsedittext.TagsEditText class NovelInfoViewModel( private val navigator: Navigator, - private val libraryRepository: LibraryRepository, + private val libraryDataSource: LibraryDataSource, val novel: Novel ) : BaseObservable(), ViewModel { @@ -59,7 +59,7 @@ class NovelInfoViewModel( fun url(): String = novel.publisher.url + novel.code.toLowerCase() fun start() { - libraryRepository.find(novel) + libraryDataSource.find(novel) .subscribe( { library -> tags = library.tag @@ -76,6 +76,7 @@ class NovelInfoViewModel( navigator.navigateToWebPage("http://ncode.syosetu.com/" + novel.code.toLowerCase()) } + // TODO: 2017/11/26 context持ってるのでFragmentに移動させる fun onClickUserTag(context: Context) { val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager @@ -87,7 +88,7 @@ class NovelInfoViewModel( .setTitle("タグの追加") .setView(editView) .setPositiveButton("OK") { _, _ -> - libraryRepository.save(Library(novel = novel, tag = editView.tags)).subscribe() + libraryDataSource.save(Library(novel = novel, tag = editView.tags)).subscribe() tags = editView.tags notifyPropertyChanged(BR.tags) imm.hideSoftInputFromWindow(editView.windowToken, 0) @@ -97,7 +98,7 @@ class NovelInfoViewModel( } .create() - libraryRepository.find(novel) + libraryDataSource.find(novel) .subscribe({ library -> editView.setTags(*library.tag.toTypedArray()) }) dialog.show() diff --git a/app/src/main/kotlin/com/ayatk/biblio/ui/detail/table/NovelTableFragment.kt b/app/src/main/kotlin/com/ayatk/biblio/ui/detail/table/NovelTableFragment.kt index ec54ce6c..e350e0a9 100644 --- a/app/src/main/kotlin/com/ayatk/biblio/ui/detail/table/NovelTableFragment.kt +++ b/app/src/main/kotlin/com/ayatk/biblio/ui/detail/table/NovelTableFragment.kt @@ -37,8 +37,10 @@ class NovelTableFragment : DaggerFragment() { ) } - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, - savedInstanceState: Bundle?): View? { + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { binding = FragmentNovelTableBinding.inflate(inflater, container, false) binding.viewModel = viewModel initRecyclerView() @@ -74,7 +76,8 @@ class NovelTableFragment : DaggerFragment() { } private inner class TableAdapter constructor( - context: Context, list: ObservableList) : + context: Context, list: ObservableList + ) : ObservableListRecyclerAdapter>( context, list ) { @@ -84,7 +87,8 @@ class NovelTableFragment : DaggerFragment() { } override fun onCreateViewHolder( - parent: ViewGroup, viewType: Int): BindingHolder + parent: ViewGroup, viewType: Int + ): BindingHolder = BindingHolder(context, parent, layout.view_table_item) override fun onBindViewHolder(holder: BindingHolder, position: Int) { diff --git a/app/src/main/kotlin/com/ayatk/biblio/ui/home/bookmark/BookmarkFragment.kt b/app/src/main/kotlin/com/ayatk/biblio/ui/home/bookmark/BookmarkFragment.kt index 37f1df99..1ada8bb8 100644 --- a/app/src/main/kotlin/com/ayatk/biblio/ui/home/bookmark/BookmarkFragment.kt +++ b/app/src/main/kotlin/com/ayatk/biblio/ui/home/bookmark/BookmarkFragment.kt @@ -15,8 +15,10 @@ class BookmarkFragment : DaggerFragment() { lateinit var binding: FragmentBookmarkBinding - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, - savedInstanceState: Bundle?): View? { + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { binding = FragmentBookmarkBinding.inflate(inflater, container, false) return binding.root } diff --git a/app/src/main/kotlin/com/ayatk/biblio/ui/home/library/LibraryFragment.kt b/app/src/main/kotlin/com/ayatk/biblio/ui/home/library/LibraryFragment.kt index 9fbc22b4..f06f74bd 100644 --- a/app/src/main/kotlin/com/ayatk/biblio/ui/home/library/LibraryFragment.kt +++ b/app/src/main/kotlin/com/ayatk/biblio/ui/home/library/LibraryFragment.kt @@ -27,8 +27,10 @@ class LibraryFragment : DaggerFragment() { @Inject lateinit var viewModel: LibraryViewModel - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, - savedInstanceState: Bundle?): View? { + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { binding = FragmentLibraryBinding.inflate(inflater, container, false) binding.viewModel = viewModel @@ -64,7 +66,8 @@ class LibraryFragment : DaggerFragment() { } private inner class LibraryAdapter constructor( - context: Context, list: ObservableList) : + context: Context, list: ObservableList + ) : ObservableListRecyclerAdapter>( context, list ) { @@ -74,7 +77,8 @@ class LibraryFragment : DaggerFragment() { } override fun onCreateViewHolder( - parent: ViewGroup, viewType: Int): BindingHolder + parent: ViewGroup, viewType: Int + ): BindingHolder = BindingHolder(context, parent, R.layout.view_library_item) override fun onBindViewHolder(holder: BindingHolder, position: Int) { diff --git a/app/src/main/kotlin/com/ayatk/biblio/ui/home/library/LibraryViewModel.kt b/app/src/main/kotlin/com/ayatk/biblio/ui/home/library/LibraryViewModel.kt index d96438c5..a87f36ae 100644 --- a/app/src/main/kotlin/com/ayatk/biblio/ui/home/library/LibraryViewModel.kt +++ b/app/src/main/kotlin/com/ayatk/biblio/ui/home/library/LibraryViewModel.kt @@ -11,8 +11,8 @@ import android.view.View import com.ayatk.biblio.BR import com.ayatk.biblio.model.Library import com.ayatk.biblio.model.enums.Publisher -import com.ayatk.biblio.pref.DefaultPrefsWrapper -import com.ayatk.biblio.repository.library.LibraryRepository +import com.ayatk.biblio.pref.DefaultPrefs +import com.ayatk.biblio.repository.library.LibraryDataSource import com.ayatk.biblio.repository.novel.NovelRepository import com.ayatk.biblio.repository.novel.NovelTableRepository import com.ayatk.biblio.ui.ViewModel @@ -25,10 +25,10 @@ import javax.inject.Inject class LibraryViewModel @Inject constructor( private val navigator: Navigator, - private val libraryRepository: LibraryRepository, + private val libraryDataSource: LibraryDataSource, private val novelRepository: NovelRepository, private val novelTableRepository: NovelTableRepository, - private val defaultPrefsWrapper: DefaultPrefsWrapper + private val defaultPrefs: DefaultPrefs ) : BaseObservable(), ViewModel { companion object { @@ -57,14 +57,14 @@ class LibraryViewModel @Inject constructor( } private fun loadLibraries(): Single> { - return libraryRepository.findAll() + return libraryDataSource.findAll() // 最終更新日時順でソート .map({ libraries -> libraries.sortedByDescending { (_, novel) -> novel.lastUpdateDate } }) } private fun convertToViewModel(libraries: List): List { return libraries.map { library -> - LibraryItemViewModel(navigator, library, defaultPrefsWrapper.prefs) + LibraryItemViewModel(navigator, library, defaultPrefs) } } diff --git a/app/src/main/kotlin/com/ayatk/biblio/ui/home/ranking/RankingFragment.kt b/app/src/main/kotlin/com/ayatk/biblio/ui/home/ranking/RankingFragment.kt index 13e91499..ebbcc653 100644 --- a/app/src/main/kotlin/com/ayatk/biblio/ui/home/ranking/RankingFragment.kt +++ b/app/src/main/kotlin/com/ayatk/biblio/ui/home/ranking/RankingFragment.kt @@ -15,8 +15,10 @@ class RankingFragment : DaggerFragment() { lateinit var binding: FragmentRankingBinding - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, - savedInstanceState: Bundle?): View? { + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { binding = FragmentRankingBinding.inflate(inflater, container, false) return binding.root } diff --git a/app/src/main/kotlin/com/ayatk/biblio/ui/search/SearchActivity.kt b/app/src/main/kotlin/com/ayatk/biblio/ui/search/SearchActivity.kt index 762b9db3..e0d40c8f 100644 --- a/app/src/main/kotlin/com/ayatk/biblio/ui/search/SearchActivity.kt +++ b/app/src/main/kotlin/com/ayatk/biblio/ui/search/SearchActivity.kt @@ -150,17 +150,20 @@ class SearchActivity : DaggerAppCompatActivity() { } private inner class SearchResultAdapter constructor( - context: Context, list: ObservableList) : + context: Context, list: ObservableList + ) : ObservableListRecyclerAdapter>( context, list ) { override fun onCreateViewHolder( - parent: ViewGroup, viewType: Int): BindingHolder + parent: ViewGroup, viewType: Int + ): BindingHolder = BindingHolder(context, parent, layout.view_search_result_item) override fun onBindViewHolder( - holder: BindingHolder, position: Int) { + holder: BindingHolder, position: Int + ) { holder.binding.apply { viewModel = getItem(position) executePendingBindings() diff --git a/app/src/main/kotlin/com/ayatk/biblio/ui/search/SearchResultItemViewModel.kt b/app/src/main/kotlin/com/ayatk/biblio/ui/search/SearchResultItemViewModel.kt index e36b268b..138d02be 100644 --- a/app/src/main/kotlin/com/ayatk/biblio/ui/search/SearchResultItemViewModel.kt +++ b/app/src/main/kotlin/com/ayatk/biblio/ui/search/SearchResultItemViewModel.kt @@ -11,7 +11,7 @@ import com.ayatk.biblio.BR import com.ayatk.biblio.model.Library import com.ayatk.biblio.model.Novel import com.ayatk.biblio.model.enums.NovelState -import com.ayatk.biblio.repository.library.LibraryRepository +import com.ayatk.biblio.repository.library.LibraryDataSource import com.ayatk.biblio.ui.ViewModel import com.ayatk.biblio.util.DateFormat import io.reactivex.rxkotlin.subscribeBy @@ -20,7 +20,8 @@ import timber.log.Timber class SearchResultItemViewModel( libraries: List, val novel: Novel, - private val libraryRepository: LibraryRepository) : BaseObservable(), ViewModel { + private val libraryDataSource: LibraryDataSource +) : BaseObservable(), ViewModel { @Bindable var downloadVisibility: Int = View.VISIBLE @@ -42,7 +43,7 @@ class SearchResultItemViewModel( } fun View.onClickAddLibrary() { - libraryRepository.save(Library(novel = novel, tag = listOf())) + libraryDataSource.save(Library(novel = novel, tag = listOf())) .doOnSubscribe { downloadVisibility = View.GONE notifyPropertyChanged(BR.downloadVisibility) diff --git a/app/src/main/kotlin/com/ayatk/biblio/ui/search/SearchViewModel.kt b/app/src/main/kotlin/com/ayatk/biblio/ui/search/SearchViewModel.kt index 3786dfd4..474ee7b3 100644 --- a/app/src/main/kotlin/com/ayatk/biblio/ui/search/SearchViewModel.kt +++ b/app/src/main/kotlin/com/ayatk/biblio/ui/search/SearchViewModel.kt @@ -11,7 +11,7 @@ import com.ayatk.biblio.data.narou.NarouClient import com.ayatk.biblio.data.narou.util.QueryBuilder import com.ayatk.biblio.model.Library import com.ayatk.biblio.model.Novel -import com.ayatk.biblio.repository.library.LibraryRepository +import com.ayatk.biblio.repository.library.LibraryDataSource import com.ayatk.biblio.ui.ViewModel import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.CompositeDisposable @@ -21,10 +21,11 @@ import javax.inject.Inject class SearchViewModel @Inject constructor( private val narouClient: NarouClient, - private val libraryRepository: LibraryRepository) : ViewModel { + private val libraryDataSource: LibraryDataSource +) : ViewModel { init { - libraryRepository.findAll() + libraryDataSource.findAll() .subscribeOn(Schedulers.io()) .subscribe( { libraries -> this.libraries = libraries }, @@ -73,7 +74,7 @@ class SearchViewModel @Inject constructor( private fun convertToViewModel(novels: List): List { return novels.map { novel -> - SearchResultItemViewModel(libraries, novel, libraryRepository) + SearchResultItemViewModel(libraries, novel, libraryDataSource) } } } diff --git a/app/src/main/kotlin/com/ayatk/biblio/ui/util/customview/ObservableListRecyclerAdapter.kt b/app/src/main/kotlin/com/ayatk/biblio/ui/util/customview/ObservableListRecyclerAdapter.kt index a77403c7..8b1708dc 100644 --- a/app/src/main/kotlin/com/ayatk/biblio/ui/util/customview/ObservableListRecyclerAdapter.kt +++ b/app/src/main/kotlin/com/ayatk/biblio/ui/util/customview/ObservableListRecyclerAdapter.kt @@ -21,22 +21,26 @@ abstract class ObservableListRecyclerAdapter( } override fun onItemRangeChanged( - contributorViewModels: ObservableList, i: Int, i1: Int) { + contributorViewModels: ObservableList, i: Int, i1: Int + ) { notifyItemRangeChanged(i, i1) } override fun onItemRangeInserted( - contributorViewModels: ObservableList, i: Int, i1: Int) { + contributorViewModels: ObservableList, i: Int, i1: Int + ) { notifyItemRangeInserted(i, i1) } override fun onItemRangeMoved( - contributorViewModels: ObservableList, i: Int, i1: Int, i2: Int) { + contributorViewModels: ObservableList, i: Int, i1: Int, i2: Int + ) { notifyItemMoved(i, i1) } override fun onItemRangeRemoved( - contributorViewModels: ObservableList, i: Int, i1: Int) { + contributorViewModels: ObservableList, i: Int, i1: Int + ) { notifyItemRangeRemoved(i, i1) } }