IDesktopContext.kt 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. package org.mjdev.desktop.interfaces
  2. import androidx.compose.ui.unit.DpSize
  3. import coil3.ImageLoader
  4. import coil3.PlatformContext
  5. import kotlinx.coroutines.CoroutineScope
  6. import org.mjdev.desktop.components.controlcenter.pages.about.AboutPage
  7. import org.mjdev.desktop.components.controlcenter.pages.ai.AIPage
  8. import org.mjdev.desktop.components.controlcenter.pages.bluetooth.BluetoothSettingsPage
  9. import org.mjdev.desktop.components.controlcenter.pages.devices.DevicesPage
  10. import org.mjdev.desktop.components.controlcenter.pages.display.DisplaySettingsPage
  11. import org.mjdev.desktop.components.controlcenter.pages.ethernet.EthSettingsPage
  12. import org.mjdev.desktop.components.controlcenter.pages.main.MainSettingsPage
  13. import org.mjdev.desktop.components.controlcenter.pages.remotes.RemotesSettingsPage
  14. import org.mjdev.desktop.components.controlcenter.pages.sound.SoundSettingsPage
  15. import org.mjdev.desktop.components.controlcenter.pages.theme.ThemeSettingsPage
  16. import org.mjdev.desktop.components.controlcenter.pages.wifi.WifiSettingsPage
  17. import org.mjdev.desktop.data.Category
  18. import org.mjdev.desktop.managers.ai.IAiManager
  19. import org.mjdev.desktop.managers.apps.IAppsManager
  20. import org.mjdev.desktop.managers.connectivity.IConnectivityManager
  21. import org.mjdev.desktop.managers.os.IOSManager
  22. import org.mjdev.desktop.managers.process.IProcessManager
  23. import org.mjdev.desktop.managers.theme.IThemeManager
  24. import org.mjdev.desktop.managers.translations.ITranslator
  25. import org.mjdev.desktop.managers.base.IDelegate
  26. import org.mjdev.desktop.managers.base.ManagerCache
  27. import org.mjdev.desktop.managers.keys.IKeyManager
  28. import kotlin.reflect.KClass
  29. import kotlin.reflect.KProperty
  30. @Suppress("LeakingThis")
  31. abstract class IDesktopContext : IDisposable {
  32. open val managersCache: ManagerCache by lazy {
  33. ManagerCache(this)
  34. }
  35. open val controlCenterPages: List<IPage> = CONTROL_CENTER_PAGES
  36. open val osManager: IOSManager by this
  37. open val connectionManager: IConnectivityManager by this
  38. open val ai: IAiManager by this
  39. open val appsManager: IAppsManager by this
  40. open val themeManager: IThemeManager by this
  41. open val processManager: IProcessManager by this
  42. open val palette: IPalette by this
  43. open val translator: ITranslator by this
  44. open val keysManager: IKeyManager by this
  45. abstract var isFirstStart: Boolean
  46. abstract var isInstalled: Boolean
  47. abstract val machineName: String
  48. abstract val isLandscapeMode: Boolean
  49. abstract val appArgs: List<String>
  50. abstract val containerSize: DpSize
  51. abstract val scope: CoroutineScope
  52. abstract val currentUser: IUser
  53. abstract val imageLoader: ImageLoader? // todo manager
  54. abstract val currentLocale: ILocale
  55. abstract val theme: ITheme
  56. abstract val appCategories: List<Category>
  57. abstract val allApps: List<IApp>
  58. abstract val favoriteApps: List<IApp>
  59. open val isDebug: Boolean
  60. get() = appArgs.contains(APP_PARAM_DEBUG)
  61. abstract val platformContext: PlatformContext?
  62. abstract suspend fun open(what: Any?)
  63. abstract suspend fun logOut()
  64. abstract suspend fun restart()
  65. abstract suspend fun suspend()
  66. abstract suspend fun shutdown()
  67. abstract suspend fun login(uName: String, uPasswd: String): Boolean
  68. abstract suspend fun logout(): Boolean
  69. abstract fun createManager(cls: KClass<*>): IDelegate?
  70. companion object {
  71. const val APP_PARAM_DEBUG = "--debug"
  72. val CONTROL_CENTER_PAGES = listOf<IPage>(
  73. MainSettingsPage(),
  74. WifiSettingsPage(),
  75. EthSettingsPage(),
  76. SoundSettingsPage(),
  77. BluetoothSettingsPage(),
  78. DisplaySettingsPage(),
  79. DevicesPage(),
  80. RemotesSettingsPage(),
  81. ThemeSettingsPage(),
  82. AIPage(),
  83. AboutPage()
  84. )
  85. }
  86. inline operator fun <reified T : IDelegate> IDesktopContext.getValue(
  87. desktopContext: IDesktopContext,
  88. property: KProperty<*>
  89. ): T = managersCache.get()
  90. }