Sfoglia il codice sorgente

Moved repositories to app class (refactoring)

Vadik Sirekanyan 2 anni fa
parent
commit
b4d15c7d9b

+ 14 - 1
app/src/main/java/org/sirekanyan/outline/App.kt

@@ -3,7 +3,15 @@ package org.sirekanyan.outline
 import android.app.Application
 import android.content.Context
 import app.cash.sqldelight.driver.android.AndroidSqliteDriver
+import org.sirekanyan.outline.api.OutlineApi
+import org.sirekanyan.outline.db.DebugDao
+import org.sirekanyan.outline.db.DebugDaoImpl
+import org.sirekanyan.outline.db.KeyDao
+import org.sirekanyan.outline.db.KeyValueDao
 import org.sirekanyan.outline.db.OutlineDatabase
+import org.sirekanyan.outline.db.ServerDao
+import org.sirekanyan.outline.repository.KeyRepository
+import org.sirekanyan.outline.repository.ServerRepository
 
 fun Context.app(): App =
     applicationContext as App
@@ -17,9 +25,14 @@ fun isPlayFlavor(): Boolean =
 
 class App : Application() {
 
-    val database: OutlineDatabase by lazy {
+    private val api by lazy { OutlineApi() }
+    private val database by lazy {
         OutlineDatabase(AndroidSqliteDriver(OutlineDatabase.Schema, this, "outline.db"))
     }
+    val serverRepository by lazy { ServerRepository(api, ServerDao(database)) }
+    val keyRepository by lazy { KeyRepository(api, KeyDao(database)) }
+    val prefsDao by lazy { KeyValueDao(database) }
+    val debugDao: DebugDao by lazy { DebugDaoImpl(database) }
 
     override fun attachBaseContext(base: Context?) {
         super.attachBaseContext(base)

+ 3 - 10
app/src/main/java/org/sirekanyan/outline/MainState.kt

@@ -23,13 +23,9 @@ import kotlinx.coroutines.plus
 import kotlinx.coroutines.withContext
 import kotlinx.parcelize.IgnoredOnParcel
 import kotlinx.parcelize.Parcelize
-import org.sirekanyan.outline.api.OutlineApi
 import org.sirekanyan.outline.api.model.Key
 import org.sirekanyan.outline.api.model.Server
 import org.sirekanyan.outline.db.KeyValueDao
-import org.sirekanyan.outline.db.rememberKeyDao
-import org.sirekanyan.outline.db.rememberKeyValueDao
-import org.sirekanyan.outline.db.rememberServerDao
 import org.sirekanyan.outline.ext.logError
 import org.sirekanyan.outline.ext.showToast
 import org.sirekanyan.outline.feature.keys.KeysErrorState
@@ -68,12 +64,9 @@ fun rememberMainState(): MainState {
     val search = rememberSearchState()
     val page = rememberSaveable { mutableStateOf<Page>(HelloPage) }
     val dialog = rememberSaveable { mutableStateOf<Dialog?>(null) }
-    val api = remember { OutlineApi() }
-    val dao = rememberServerDao()
-    val prefs = rememberKeyValueDao()
-    val cache = rememberKeyDao()
-    val servers = remember { ServerRepository(api, dao) }
-    val keys = remember { KeyRepository(api, cache) }
+    val prefs = remember { context.app().prefsDao }
+    val servers = remember { context.app().serverRepository }
+    val keys = remember { context.app().keyRepository }
     return remember { MainState(scope + supervisor, servers, keys, search, page, dialog, prefs) }
 }
 

+ 0 - 11
app/src/main/java/org/sirekanyan/outline/db/DebugDao.kt

@@ -1,16 +1,5 @@
 package org.sirekanyan.outline.db
 
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.remember
-import androidx.compose.ui.platform.LocalContext
-import org.sirekanyan.outline.app
-
-@Composable
-fun rememberDebugDao(): DebugDao {
-    val database = LocalContext.current.app().database
-    return remember { DebugDaoImpl(database) }
-}
-
 interface DebugDao {
     fun reset()
 }

+ 0 - 10
app/src/main/java/org/sirekanyan/outline/db/KeyDao.kt

@@ -1,22 +1,12 @@
 package org.sirekanyan.outline.db
 
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.remember
-import androidx.compose.ui.platform.LocalContext
 import app.cash.sqldelight.Query
 import app.cash.sqldelight.coroutines.asFlow
 import kotlinx.coroutines.flow.Flow
 import org.sirekanyan.outline.api.model.Server
-import org.sirekanyan.outline.app
 import org.sirekanyan.outline.db.model.KeyEntity
 import org.sirekanyan.outline.db.model.KeyWithServerEntity
 
-@Composable
-fun rememberKeyDao(): KeyDao {
-    val database = LocalContext.current.app().database
-    return remember { KeyDao(database) }
-}
-
 class KeyDao(database: OutlineDatabase) {
 
     private val queries = database.keyEntityQueries

+ 0 - 10
app/src/main/java/org/sirekanyan/outline/db/KeyValueDao.kt

@@ -1,21 +1,11 @@
 package org.sirekanyan.outline.db
 
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.remember
-import androidx.compose.ui.platform.LocalContext
 import app.cash.sqldelight.coroutines.asFlow
 import app.cash.sqldelight.coroutines.mapToOneNotNull
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.flow.Flow
 import kotlinx.coroutines.flow.map
 import kotlinx.coroutines.withContext
-import org.sirekanyan.outline.app
-
-@Composable
-fun rememberKeyValueDao(): KeyValueDao {
-    val database = LocalContext.current.app().database
-    return remember { KeyValueDao(database) }
-}
 
 class KeyValueDao(database: OutlineDatabase) {
 

+ 0 - 10
app/src/main/java/org/sirekanyan/outline/db/ServerDao.kt

@@ -1,20 +1,10 @@
 package org.sirekanyan.outline.db
 
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.remember
-import androidx.compose.ui.platform.LocalContext
 import app.cash.sqldelight.Query
 import app.cash.sqldelight.coroutines.asFlow
 import kotlinx.coroutines.flow.Flow
-import org.sirekanyan.outline.app
 import org.sirekanyan.outline.db.model.ServerEntity
 
-@Composable
-fun rememberServerDao(): ServerDao {
-    val database = LocalContext.current.app().database
-    return remember { ServerDao(database) }
-}
-
 class ServerDao(private val database: OutlineDatabase) {
 
     private val queries = database.serverEntityQueries

+ 3 - 2
app/src/main/java/org/sirekanyan/outline/ui/DrawerContent.kt

@@ -27,6 +27,7 @@ import androidx.compose.material3.Text
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.LaunchedEffect
 import androidx.compose.runtime.getValue
+import androidx.compose.runtime.remember
 import androidx.compose.runtime.rememberCoroutineScope
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.vector.ImageVector
@@ -40,7 +41,7 @@ import org.sirekanyan.outline.HelloPage
 import org.sirekanyan.outline.MainState
 import org.sirekanyan.outline.R
 import org.sirekanyan.outline.SelectedPage
-import org.sirekanyan.outline.db.rememberDebugDao
+import org.sirekanyan.outline.app
 import org.sirekanyan.outline.ext.rememberFlowAsState
 import org.sirekanyan.outline.isDebugBuild
 import org.sirekanyan.outline.isPlayFlavor
@@ -119,7 +120,7 @@ private fun DrawerSheetContent(state: MainState, insets: PaddingValues) {
             Divider(Modifier.padding(vertical = 8.dp))
             val context = LocalContext.current
             if (isDebugBuild()) {
-                val debugDao = rememberDebugDao()
+                val debugDao = remember { context.app().debugDao }
                 val scope = rememberCoroutineScope()
                 DrawerItem(
                     icon = Icons.Default.Warning,