Ver código fonte

code improvements

milan jurkulák 2 anos atrás
pai
commit
aecb262836

+ 2 - 2
src/main/kotlin/eu/mjdev/desktop/components/appsmenu/AppsMenu.kt

@@ -24,8 +24,8 @@ import eu.mjdev.desktop.components.sliding.VisibilityState.Companion.rememberVis
 import eu.mjdev.desktop.data.App
 import eu.mjdev.desktop.data.Category
 import eu.mjdev.desktop.extensions.Compose.launchedEffect
-import eu.mjdev.desktop.helpers.Animations.AppsMenuEnterAnimation
-import eu.mjdev.desktop.helpers.Animations.AppsMenuExitAnimation
+import eu.mjdev.desktop.helpers.animation.Animations.AppsMenuEnterAnimation
+import eu.mjdev.desktop.helpers.animation.Animations.AppsMenuExitAnimation
 import eu.mjdev.desktop.provider.DesktopProvider
 import eu.mjdev.desktop.provider.DesktopProvider.Companion.LocalDesktop
 import eu.mjdev.desktop.windows.ChromeWindow

+ 5 - 7
src/main/kotlin/eu/mjdev/desktop/components/controlcenter/ControlCenter.kt

@@ -20,13 +20,13 @@ import androidx.compose.ui.input.pointer.isSecondaryPressed
 import androidx.compose.ui.unit.DpSize
 import androidx.compose.ui.unit.dp
 import androidx.compose.ui.window.WindowPosition
-import eu.mjdev.desktop.components.controlcenter.ControlCenterPage.Companion.rememberControlCenterScope
+import eu.mjdev.desktop.components.controlcenter.ControlCenterPage.ControlCenterPageScope
 import eu.mjdev.desktop.components.sliding.SlidingMenu
 import eu.mjdev.desktop.components.sliding.VisibilityState
 import eu.mjdev.desktop.components.sliding.VisibilityState.Companion.rememberVisibilityState
 import eu.mjdev.desktop.extensions.Modifier.rightShadow
-import eu.mjdev.desktop.helpers.Animations.ControlCenterEnterAnimation
-import eu.mjdev.desktop.helpers.Animations.ControlCenterExitAnimation
+import eu.mjdev.desktop.helpers.animation.Animations.ControlCenterEnterAnimation
+import eu.mjdev.desktop.helpers.animation.Animations.ControlCenterExitAnimation
 import eu.mjdev.desktop.provider.DesktopProvider
 import eu.mjdev.desktop.provider.DesktopProvider.Companion.LocalDesktop
 import eu.mjdev.desktop.windows.ChromeWindow
@@ -50,7 +50,6 @@ fun ControlCenter(
     val backgroundColor by remember { api.currentUser.theme.backgroundColorState }
     val backgroundAlpha by remember { api.currentUser.theme.controlCenterBackgroundAlphaState }
     val backgroundInvoker = remember { { backgroundColor } }
-    val cscope = rememberControlCenterScope(backgroundInvoker, api)
     val controlCenterExpandedWidth by remember { api.currentUser.theme.controlCenterExpandedWidthState }
     val controlCenterDividerWidth by remember { api.currentUser.theme.controlCenterDividerWidthState }
     val controlCenterIconColor by remember { api.currentUser.theme.controlCenterIconColorState }
@@ -58,7 +57,7 @@ fun ControlCenter(
     val pages by remember { api.controlCenterPagesState }
     val pagesFiltered = remember(pages) {
         derivedStateOf {
-            pages.filter { p -> p.condition.invoke(cscope) }
+            pages.filter { p -> p.condition.invoke(api) }
         }
     }
     ChromeWindow(
@@ -76,7 +75,6 @@ fun ControlCenter(
             onFocusChange(focused)
         }
     ) {
-
         SlidingMenu(
             modifier = Modifier.fillMaxHeight(),
             orientation = Horizontal,
@@ -160,7 +158,7 @@ fun ControlCenter(
                                             ),
                                     ) {
                                         with(pagesFiltered.value[pagerState.value]) {
-                                            content(cscope)
+                                            content(ControlCenterPageScope(api, backgroundInvoker, cache))
                                         }
                                     }
                                 }

+ 8 - 22
src/main/kotlin/eu/mjdev/desktop/components/controlcenter/ControlCenterPage.kt

@@ -4,21 +4,24 @@ import androidx.compose.material.icons.Icons
 import androidx.compose.material.icons.filled.Settings
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.DisallowComposableCalls
-import androidx.compose.runtime.remember
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.vector.ImageVector
+import eu.mjdev.desktop.components.controlcenter.ControlCenterPage.ControlCenterPageScope.PageCache
 import eu.mjdev.desktop.provider.DesktopProvider
 
 @Suppress("UNCHECKED_CAST")
 class ControlCenterPage(
     val icon: ImageVector = Icons.Filled.Settings,
     val name: String = "",
-    val condition: ControlCenterPageScope.() -> Boolean = { true },
-    val content: @Composable ControlCenterPageScope.() -> Unit = {}
+    val condition: DesktopProvider.() -> Boolean = { true },
+    private val saver: IControlCenterPageDataSaver? = null,
+    val cache: PageCache = PageCache(saver),
+    val content: @Composable ControlCenterPageScope.() -> Unit = {},
 ) {
     class ControlCenterPageScope(
+        val api: DesktopProvider,
         private val backgroundColorInvoker: () -> Color,
-        val api: DesktopProvider
+        private val cache: PageCache
     ) {
         val scope
             get() = api.scope
@@ -26,8 +29,6 @@ class ControlCenterPage(
         val backgroundColor
             get() = backgroundColorInvoker()
 
-        private val cache = PageCache()
-
         @Composable
         fun <T> remember(
             calculation: @DisallowComposableCalls () -> T
@@ -35,7 +36,7 @@ class ControlCenterPage(
 
         @Suppress("unused")
         class PageCache(
-            private val saver: IDataSaver? = null
+            private val saver: IControlCenterPageDataSaver? = null
         ) : HashMap<Int, Any>() {
             init {
                 saver?.load()?.onEach { (t, u) -> this[t] = u }
@@ -59,19 +60,4 @@ class ControlCenterPage(
             }
         }
     }
-
-    interface IDataSaver {
-        fun save(data: Map<Int, Any>)
-        fun load(): Map<Int, Any>
-    }
-
-    companion object {
-        @Composable
-        fun rememberControlCenterScope(
-            backgroundColor: () -> Color,
-            api: DesktopProvider
-        ) = remember(backgroundColor, api) {
-            ControlCenterPageScope(backgroundColor, api)
-        }
-    }
 }

+ 6 - 0
src/main/kotlin/eu/mjdev/desktop/components/controlcenter/IControlCenterPageDataSaver.kt

@@ -0,0 +1,6 @@
+package eu.mjdev.desktop.components.controlcenter
+
+interface IControlCenterPageDataSaver {
+    fun save(data: Map<Int, Any>)
+    fun load(): Map<Int, Any>
+}

+ 5 - 1
src/main/kotlin/eu/mjdev/desktop/components/controlcenter/pages/AIPage.kt

@@ -22,6 +22,7 @@ import kotlinx.coroutines.launch
 fun AIPage() = ControlCenterPage(
     icon = Icons.Filled.Campaign,
     name = "AI",
+    condition = { ai.isAvailable() }
 ) {
     val questionsList = remember { mutableStateListOf<Pair<String, String>>() }
     val request = remember { mutableStateOf("") }
@@ -94,7 +95,10 @@ fun AIPage() = ControlCenterPage(
                     shape = RoundedCornerShape(8.dp),
                     colors = TextFieldDefaults.outlinedTextFieldColors(
                         backgroundColor = Color.White.copy(alpha = 0.1f),
-                        textColor = Color.White.copy(alpha = 0.9f)
+                        textColor = Color.White.copy(alpha = 0.9f),
+                        cursorColor = Color.White,
+                        focusedBorderColor = Color.White,
+                        unfocusedBorderColor = Color.Black
                     )
                 )
             }

+ 1 - 1
src/main/kotlin/eu/mjdev/desktop/components/controlcenter/pages/BluetoothSettingsPage.kt

@@ -11,7 +11,7 @@ import eu.mjdev.desktop.components.controlcenter.ControlCenterPage
 fun BluetoothSettingsPage() = ControlCenterPage(
     icon = Icons.Filled.Bluetooth,
     name = "Bluetooth",
-    condition = { api.connection.isBthAdapterAvailable }
+    condition = { connection.isBthAdapterAvailable }
 ) {
     Box(
         modifier = Modifier.fillMaxSize()

+ 1 - 1
src/main/kotlin/eu/mjdev/desktop/components/controlcenter/pages/EthSettingsPage.kt

@@ -11,7 +11,7 @@ import eu.mjdev.desktop.components.controlcenter.ControlCenterPage
 fun EthSettingsPage() = ControlCenterPage(
     icon = Icons.Filled.SettingsEthernet,
     name = "Ethernet",
-    condition = { api.connection.isEthAdapterAvailable }
+    condition = { connection.isEthAdapterAvailable }
 ) {
     Box(
         modifier = Modifier.fillMaxSize()

+ 1 - 1
src/main/kotlin/eu/mjdev/desktop/components/controlcenter/pages/WifiSettingsPage.kt

@@ -11,7 +11,7 @@ import eu.mjdev.desktop.components.controlcenter.ControlCenterPage
 fun WifiSettingsPage() = ControlCenterPage(
     icon = Icons.Filled.Wifi,
     name = "Wifi",
-    condition = { api.connection.isWifiAdapterAvailable }
+    condition = { connection.isWifiAdapterAvailable }
 ) {
     Box(
         modifier = Modifier.fillMaxSize()

+ 2 - 2
src/main/kotlin/eu/mjdev/desktop/components/desktoppanel/DesktopPanel.kt

@@ -29,8 +29,8 @@ import eu.mjdev.desktop.components.sliding.VisibilityState.Companion.rememberVis
 import eu.mjdev.desktop.data.App
 import eu.mjdev.desktop.extensions.Compose.height
 import eu.mjdev.desktop.extensions.Modifier.topShadow
-import eu.mjdev.desktop.helpers.Animations.DesktopPanelEnterAnimation
-import eu.mjdev.desktop.helpers.Animations.DesktopPanelExitAnimation
+import eu.mjdev.desktop.helpers.animation.Animations.DesktopPanelEnterAnimation
+import eu.mjdev.desktop.helpers.animation.Animations.DesktopPanelExitAnimation
 import eu.mjdev.desktop.provider.DesktopProvider
 import eu.mjdev.desktop.provider.DesktopProvider.Companion.LocalDesktop
 import eu.mjdev.desktop.windows.ChromeWindow

+ 1 - 1
src/main/kotlin/eu/mjdev/desktop/helpers/Animations.kt → src/main/kotlin/eu/mjdev/desktop/helpers/animation/Animations.kt

@@ -1,4 +1,4 @@
-package eu.mjdev.desktop.helpers
+package eu.mjdev.desktop.helpers.animation
 
 import androidx.compose.animation.*
 

+ 2 - 1
src/main/kotlin/eu/mjdev/desktop/provider/AIProvider.kt

@@ -14,7 +14,8 @@ class AIProvider(
     val scope: CoroutineScope,
     var pluginAI: IAIPlugin = AiPluginNull(scope),
     val pluginSTT: ISTTPlugin = STTPluginNull(scope),
-    val pluginTTS: TTSPlugin = TTSPluginMain(scope)
+    val pluginTTS: TTSPlugin = TTSPluginMain(scope),
+    val isAvailable: () -> Boolean = { pluginAI !is AiPluginNull }
 ) {
     fun ask(
         question: String,