From 1ff9ad69817c6937f3fed535a1630bb77f738118 Mon Sep 17 00:00:00 2001 From: Gouri Panda Date: Tue, 6 Dec 2022 01:16:03 +0530 Subject: [PATCH] Replaced with UI link code and added dagger code --- .../org/kiwix/kiwixmobile/core/data/Repository.kt | 3 ++- .../core/data/local/KiwixRoomDatabase.kt | 15 ++++++++++++++- .../core/di/components/CoreComponent.kt | 2 ++ .../core/di/modules/ApplicationModule.kt | 4 ++++ .../kiwixmobile/core/di/modules/DatabaseModule.kt | 13 +++++++++++++ .../core/search/viewmodel/SearchViewModel.kt | 3 ++- .../viewmodel/effects/DeleteRecentSearch.kt | 3 ++- .../viewmodel/effects/SaveSearchToRecents.kt | 5 +++-- 8 files changed, 42 insertions(+), 6 deletions(-) diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/data/Repository.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/data/Repository.kt index 2aaf489cb..f84ce5536 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/data/Repository.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/data/Repository.kt @@ -28,6 +28,7 @@ import org.kiwix.kiwixmobile.core.dao.NewBookmarksDao import org.kiwix.kiwixmobile.core.dao.NewLanguagesDao import org.kiwix.kiwixmobile.core.dao.NewNoteDao import org.kiwix.kiwixmobile.core.dao.NewRecentSearchDao +import org.kiwix.kiwixmobile.core.dao.NewRecentSearchRoomDao import org.kiwix.kiwixmobile.core.di.qualifiers.IO import org.kiwix.kiwixmobile.core.di.qualifiers.MainThread import org.kiwix.kiwixmobile.core.extensions.HeaderizableList @@ -57,7 +58,7 @@ class Repository @Inject internal constructor( private val historyDao: HistoryDao, private val notesDao: NewNoteDao, private val languageDao: NewLanguagesDao, - private val recentSearchDao: NewRecentSearchDao, + private val recentSearchDao: NewRecentSearchRoomDao, private val zimReaderContainer: ZimReaderContainer ) : DataSource { diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/data/local/KiwixRoomDatabase.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/data/local/KiwixRoomDatabase.kt index 728e72e92..604f48d3f 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/data/local/KiwixRoomDatabase.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/data/local/KiwixRoomDatabase.kt @@ -19,11 +19,20 @@ package org.kiwix.kiwixmobile.core.data.local import android.content.Context +import androidx.room.Database import androidx.room.Room import androidx.room.RoomDatabase +import io.objectbox.BoxStore +import io.objectbox.kotlin.boxFor +import org.kiwix.kiwixmobile.core.dao.NewRecentSearchRoomDao +import org.kiwix.kiwixmobile.core.dao.entities.RecentSearchRoomEntity +import javax.inject.Inject @Suppress("UnnecessaryAbstractClass") +@Database(entities = [RecentSearchRoomEntity::class], version = 19) abstract class KiwixRoomDatabase : RoomDatabase() { + abstract fun newRecentSearchRoomDao(): NewRecentSearchRoomDao + @Inject lateinit var boxStore: BoxStore companion object { private var db: KiwixRoomDatabase? = null @@ -33,7 +42,7 @@ abstract class KiwixRoomDatabase : RoomDatabase() { ?: Room.databaseBuilder(context, KiwixRoomDatabase::class.java, "KiwixRoom.db") // We have already database name called kiwix.db in order to avoid complexity we named as // kiwixRoom.db - .build() + .build().also(KiwixRoomDatabase::migrateRecentSearch) } } @@ -41,4 +50,8 @@ abstract class KiwixRoomDatabase : RoomDatabase() { db = null } } + + fun migrateRecentSearch() { + newRecentSearchRoomDao().migrationToRoomInsert(boxStore.boxFor()) + } } diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/di/components/CoreComponent.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/di/components/CoreComponent.kt index 8edb9a8ab..91c4876c9 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/di/components/CoreComponent.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/di/components/CoreComponent.kt @@ -33,6 +33,7 @@ import org.kiwix.kiwixmobile.core.dao.NewBookmarksDao import org.kiwix.kiwixmobile.core.dao.NewLanguagesDao import org.kiwix.kiwixmobile.core.dao.NewNoteDao import org.kiwix.kiwixmobile.core.dao.NewRecentSearchDao +import org.kiwix.kiwixmobile.core.dao.NewRecentSearchRoomDao import org.kiwix.kiwixmobile.core.data.DataModule import org.kiwix.kiwixmobile.core.data.DataSource import org.kiwix.kiwixmobile.core.data.local.dao.BookDao @@ -91,6 +92,7 @@ interface CoreComponent { fun noteDao(): NewNoteDao fun newLanguagesDao(): NewLanguagesDao fun recentSearchDao(): NewRecentSearchDao + fun recentSearchRoomDao(): NewRecentSearchRoomDao fun newBookmarksDao(): NewBookmarksDao fun connectivityManager(): ConnectivityManager fun context(): Context diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/di/modules/ApplicationModule.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/di/modules/ApplicationModule.kt index cf5460579..9679d03dd 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/di/modules/ApplicationModule.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/di/modules/ApplicationModule.kt @@ -23,12 +23,14 @@ import android.app.NotificationManager import android.content.Context import android.net.ConnectivityManager import android.os.storage.StorageManager +import androidx.room.Room import dagger.Module import dagger.Provides import io.reactivex.Scheduler import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.schedulers.Schedulers import org.kiwix.kiwixmobile.core.NightModeConfig +import org.kiwix.kiwixmobile.core.data.local.KiwixRoomDatabase import org.kiwix.kiwixmobile.core.di.qualifiers.Computation import org.kiwix.kiwixmobile.core.di.qualifiers.IO import org.kiwix.kiwixmobile.core.di.qualifiers.MainThread @@ -96,4 +98,6 @@ class ApplicationModule { @Singleton fun provideConnectivityManager(context: Context): ConnectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager + + } diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/di/modules/DatabaseModule.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/di/modules/DatabaseModule.kt index 8f9b957a1..ed0ec817f 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/di/modules/DatabaseModule.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/di/modules/DatabaseModule.kt @@ -31,6 +31,7 @@ import org.kiwix.kiwixmobile.core.dao.NewLanguagesDao import org.kiwix.kiwixmobile.core.dao.NewNoteDao import org.kiwix.kiwixmobile.core.dao.NewRecentSearchDao import org.kiwix.kiwixmobile.core.dao.entities.MyObjectBox +import org.kiwix.kiwixmobile.core.data.local.KiwixRoomDatabase import javax.inject.Singleton @Module @@ -72,4 +73,16 @@ open class DatabaseModule { newBookDao: NewBookDao ): FetchDownloadDao = FetchDownloadDao(boxStore.boxFor(), newBookDao) + + @Singleton + @Provides + fun provideYourDatabase( + context: Context + ) = + KiwixRoomDatabase.getInstance(context = context)// The reason we can construct a database for the repo + + @Singleton + @Provides + fun provideYourDao(db: KiwixRoomDatabase) = db.newRecentSearchRoomDao() + } diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/search/viewmodel/SearchViewModel.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/search/viewmodel/SearchViewModel.kt index cadad92bc..84f9d79d7 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/search/viewmodel/SearchViewModel.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/search/viewmodel/SearchViewModel.kt @@ -34,6 +34,7 @@ import kotlinx.coroutines.launch import org.kiwix.kiwixmobile.core.R import org.kiwix.kiwixmobile.core.base.SideEffect import org.kiwix.kiwixmobile.core.dao.NewRecentSearchDao +import org.kiwix.kiwixmobile.core.dao.NewRecentSearchRoomDao import org.kiwix.kiwixmobile.core.reader.ZimReaderContainer import org.kiwix.kiwixmobile.core.search.adapter.SearchListItem import org.kiwix.kiwixmobile.core.search.viewmodel.Action.ActivityResultReceived @@ -63,7 +64,7 @@ import javax.inject.Inject @OptIn(ExperimentalCoroutinesApi::class) class SearchViewModel @Inject constructor( - private val recentSearchDao: NewRecentSearchDao, + private val recentSearchDao: NewRecentSearchRoomDao, private val zimReaderContainer: ZimReaderContainer, private val searchResultGenerator: SearchResultGenerator ) : ViewModel() { diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/search/viewmodel/effects/DeleteRecentSearch.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/search/viewmodel/effects/DeleteRecentSearch.kt index 694cd66f0..920af0977 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/search/viewmodel/effects/DeleteRecentSearch.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/search/viewmodel/effects/DeleteRecentSearch.kt @@ -21,11 +21,12 @@ package org.kiwix.kiwixmobile.core.search.viewmodel.effects import androidx.appcompat.app.AppCompatActivity import org.kiwix.kiwixmobile.core.base.SideEffect import org.kiwix.kiwixmobile.core.dao.NewRecentSearchDao +import org.kiwix.kiwixmobile.core.dao.NewRecentSearchRoomDao import org.kiwix.kiwixmobile.core.search.adapter.SearchListItem data class DeleteRecentSearch( private val searchListItem: SearchListItem, - private val recentSearchDao: NewRecentSearchDao + private val recentSearchDao: NewRecentSearchRoomDao ) : SideEffect { override fun invokeWith(activity: AppCompatActivity) { recentSearchDao.deleteSearchString(searchListItem.value) diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/search/viewmodel/effects/SaveSearchToRecents.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/search/viewmodel/effects/SaveSearchToRecents.kt index 178ae4c4f..e81193e72 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/search/viewmodel/effects/SaveSearchToRecents.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/search/viewmodel/effects/SaveSearchToRecents.kt @@ -21,14 +21,15 @@ package org.kiwix.kiwixmobile.core.search.viewmodel.effects import androidx.appcompat.app.AppCompatActivity import org.kiwix.kiwixmobile.core.base.SideEffect import org.kiwix.kiwixmobile.core.dao.NewRecentSearchDao +import org.kiwix.kiwixmobile.core.dao.NewRecentSearchRoomDao import org.kiwix.kiwixmobile.core.search.adapter.SearchListItem data class SaveSearchToRecents( - private val recentSearchDao: NewRecentSearchDao, + private val recentSearchDao: NewRecentSearchRoomDao, private val searchListItem: SearchListItem, private val id: String? ) : SideEffect { override fun invokeWith(activity: AppCompatActivity) { - id?.let { recentSearchDao.saveSearch(searchListItem.value, it) } + id?.let { recentSearchDao.saveSearch(searchListItem.value, it.toLong()) } } }