diff --git a/build.gradle.kts b/build.gradle.kts index 7bfcb291..cea47d09 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,3 @@ -import org.jetbrains.kotlin.gradle.plugin.KotlinExecution - plugins { alias(libs.plugins.multiplatform) alias(libs.plugins.compose) diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/Main.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/Main.kt index 22426a80..9c395279 100644 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/Main.kt +++ b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/Main.kt @@ -1,16 +1,9 @@ import androidx.compose.animation.Crossfade import androidx.compose.animation.core.animateFloatAsState -import androidx.compose.foundation.BorderStroke -import androidx.compose.foundation.background -import androidx.compose.foundation.border import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width @@ -48,7 +41,6 @@ import jp.kaleidot725.adbpad.MainState import jp.kaleidot725.adbpad.MainStateHolder import jp.kaleidot725.adbpad.domain.di.domainModule import jp.kaleidot725.adbpad.domain.model.Dialog -import jp.kaleidot725.adbpad.domain.model.Menu import jp.kaleidot725.adbpad.domain.model.UserColor import jp.kaleidot725.adbpad.domain.model.device.Device import jp.kaleidot725.adbpad.domain.model.language.Language @@ -60,15 +52,13 @@ import jp.kaleidot725.adbpad.ui.common.resource.clickableBackground import jp.kaleidot725.adbpad.ui.component.NavigationRail import jp.kaleidot725.adbpad.ui.di.stateHolderModule import jp.kaleidot725.adbpad.ui.screen.CommandScreen -import jp.kaleidot725.adbpad.ui.screen.MenuScreen import jp.kaleidot725.adbpad.ui.screen.ScreenLayout import jp.kaleidot725.adbpad.ui.screen.error.AdbErrorScreen import jp.kaleidot725.adbpad.ui.screen.menu.component.DropDownDeviceMenu -import jp.kaleidot725.adbpad.ui.screen.menu.screenshot.ScreenshotScreen -import jp.kaleidot725.adbpad.ui.screen.menu.text.TextCommandScreen +import jp.kaleidot725.adbpad.ui.screen.screenshot.ScreenshotScreen import jp.kaleidot725.adbpad.ui.screen.setting.SettingScreen import jp.kaleidot725.adbpad.ui.screen.setting.SettingStateHolder -import jp.kaleidot725.adbpad.ui.screen.version.VersionScreen +import jp.kaleidot725.adbpad.ui.screen.text.TextCommandScreen import org.jetbrains.jewel.foundation.theme.JewelTheme import org.jetbrains.jewel.intui.standalone.theme.IntUiTheme import org.jetbrains.jewel.intui.standalone.theme.darkThemeDefinition @@ -211,38 +201,78 @@ fun DecoratedWindowScope.App(mainStateHolder: MainStateHolder) { }, content = { when (state.category) { - MainCategory.Device -> { - DeviceContent(mainStateHolder, Modifier.fillMaxSize()) + MainCategory.Command -> { + val commandStateHolder = mainStateHolder.commandStateHolder + val commandState by commandStateHolder.state.collectAsState() + CommandScreen( + commands = commandState.commands, + filtered = commandState.filtered, + onClickFilter = commandStateHolder::clickTab, + canExecute = commandState.canExecuteCommand, + onExecute = { command -> + commandStateHolder.executeCommand(command) + }, + ) } - MainCategory.Version -> { - val versionStateHolder = mainStateHolder.versionStateHolder - val versionState by versionStateHolder.state.collectAsState() - - DisposableEffect(mainStateHolder) { - versionStateHolder.setup() - onDispose { versionStateHolder.dispose() } - } + MainCategory.Text -> { + val inputTextStateHolder = mainStateHolder.textCommandStateHolder + val inputTextState by inputTextStateHolder.state.collectAsState() - VersionScreen(versionState, versionStateHolder::retry, Modifier.fillMaxSize()) + TextCommandScreen( + // InputText + inputText = inputTextState.userInputText, + onTextChange = { text -> + inputTextStateHolder.updateInputText(text) + }, + isSendingInputText = inputTextState.isSendingUserInputText, + onSendInputText = { + inputTextStateHolder.sendInputText() + }, + canSendInputText = inputTextState.canSendInputText, + canSendTabKey = inputTextState.canSendTabKey, + onSendTabKey = { + inputTextStateHolder.sendTabCommand() + }, + onSaveInputText = { + inputTextStateHolder.saveInputText() + }, + canSaveInputText = inputTextState.canSaveInputText, + // Commands + commands = inputTextState.commands, + onSendCommand = { text -> + inputTextStateHolder.sendTextCommand(text) + }, + canSendCommand = inputTextState.canSendCommand, + isSendingTab = inputTextState.isSendingTab, + onDeleteCommand = { text -> + inputTextStateHolder.deleteInputText(text) + }, + ) } - } - }, - notificationArea = { - Box( - Modifier.fillMaxWidth().height(25.dp) - .padding(horizontal = 8.dp, vertical = 4.dp), - ) { - Text( - text = event.message, - color = - when (event.level) { - Event.Level.INFO -> MaterialTheme.colors.onSurface - Event.Level.WARN -> Color.Yellow - Event.Level.ERROR -> Color.Red + + MainCategory.Screenshot -> { + val screenshotStateHolder = mainStateHolder.screenshotStateHolder + val screenshotState by screenshotStateHolder.state.collectAsState() + + ScreenshotScreen( + screenshot = screenshotState.preview, + canCapture = screenshotState.canExecute, + isCapturing = screenshotState.isCapturing, + commands = screenshotState.commands, + onCopyScreenshot = { + screenshotStateHolder.copyScreenShotToClipboard() + }, + onDeleteScreenshot = { + screenshotStateHolder.deleteScreenShotToClipboard() + }, + onTakeScreenshot = { screenshot -> + screenshotStateHolder.takeScreenShot( + screenshot, + ) }, - style = MaterialTheme.typography.caption, - ) + ) + } } }, dialog = { @@ -291,112 +321,6 @@ fun DecoratedWindowScope.App(mainStateHolder: MainStateHolder) { } } -@Composable -private fun DeviceContent( - mainStateHolder: MainStateHolder, - modifier: Modifier = Modifier, -) { - val menuStateHolder = mainStateHolder.menuStateHolder - val menuState by menuStateHolder.state.collectAsState() - - val commandStateHolder = mainStateHolder.commandStateHolder - val commandState by commandStateHolder.state.collectAsState() - - val inputTextStateHolder = mainStateHolder.textCommandStateHolder - val inputTextState by inputTextStateHolder.state.collectAsState() - - val screenshotStateHolder = mainStateHolder.screenshotStateHolder - val screenshotState by screenshotStateHolder.state.collectAsState() - - Row(modifier) { - Box(Modifier.background(MaterialTheme.colors.background)) { - MenuScreen( - menus = menuState.menus, - selectedMenu = menuState.selectedMenu, - onSelectMenu = { menuStateHolder.selectMenu(it) }, - modifier = - Modifier - .width(250.dp) - .fillMaxHeight() - .padding(horizontal = 12.dp, vertical = 16.dp), - ) - } - - Spacer(Modifier.width(1.dp).fillMaxHeight().border(BorderStroke(1.dp, UserColor.getSplitterColor()))) - - Box(Modifier.background(MaterialTheme.colors.background)) { - when (menuState.selectedMenu) { - Menu.Command -> { - CommandScreen( - commands = commandState.commands, - filtered = commandState.filtered, - onClickFilter = commandStateHolder::clickTab, - canExecute = commandState.canExecuteCommand, - onExecute = { command -> - commandStateHolder.executeCommand(command) - }, - ) - } - - Menu.InputText -> { - TextCommandScreen( - // InputText - inputText = inputTextState.userInputText, - onTextChange = { text -> - inputTextStateHolder.updateInputText(text) - }, - isSendingInputText = inputTextState.isSendingUserInputText, - onSendInputText = { - inputTextStateHolder.sendInputText() - }, - canSendInputText = inputTextState.canSendInputText, - canSendTabKey = inputTextState.canSendTabKey, - onSendTabKey = { - inputTextStateHolder.sendTabCommand() - }, - onSaveInputText = { - inputTextStateHolder.saveInputText() - }, - canSaveInputText = inputTextState.canSaveInputText, - // Commands - commands = inputTextState.commands, - onSendCommand = { text -> - inputTextStateHolder.sendTextCommand(text) - }, - canSendCommand = inputTextState.canSendCommand, - isSendingTab = inputTextState.isSendingTab, - onDeleteCommand = { text -> - inputTextStateHolder.deleteInputText(text) - }, - ) - } - - Menu.Screenshot -> { - ScreenshotScreen( - screenshot = screenshotState.preview, - canCapture = screenshotState.canExecute, - isCapturing = screenshotState.isCapturing, - commands = screenshotState.commands, - onCopyScreenshot = { - screenshotStateHolder.copyScreenShotToClipboard() - }, - onDeleteScreenshot = { - screenshotStateHolder.deleteScreenShotToClipboard() - }, - onTakeScreenshot = { screenshot -> - screenshotStateHolder.takeScreenShot( - screenshot, - ) - }, - ) - } - - null -> Unit - } - } - } -} - private val LightColors = Colors( primary = UserColor.Light.PRIMARY, diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/MainCategory.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/MainCategory.kt index 1814a0fc..76574f62 100644 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/MainCategory.kt +++ b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/MainCategory.kt @@ -1,6 +1,7 @@ package jp.kaleidot725.adbpad enum class MainCategory { - Device, - Version, + Command, + Text, + Screenshot, } diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/MainState.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/MainState.kt index def0cf51..794bb920 100644 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/MainState.kt +++ b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/MainState.kt @@ -10,7 +10,7 @@ data class MainState( val isDark: Boolean = false, val size: WindowSize = WindowSize.UNKNOWN, val dialog: Dialog? = null, - val category: MainCategory = MainCategory.Device, + val category: MainCategory = MainCategory.Command, val devices: List = emptyList(), val selectedDevice: Device? = null, ) diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/MainStateHolder.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/MainStateHolder.kt index 764f0e09..1d280e33 100644 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/MainStateHolder.kt +++ b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/MainStateHolder.kt @@ -17,11 +17,9 @@ import jp.kaleidot725.adbpad.domain.usecase.window.GetWindowSizeUseCase import jp.kaleidot725.adbpad.domain.usecase.window.SaveWindowSizeUseCase import jp.kaleidot725.adbpad.ui.common.ChildStateHolder import jp.kaleidot725.adbpad.ui.common.ParentStateHolder -import jp.kaleidot725.adbpad.ui.screen.menu.MenuStateHolder -import jp.kaleidot725.adbpad.ui.screen.menu.command.CommandStateHolder -import jp.kaleidot725.adbpad.ui.screen.menu.screenshot.ScreenshotStateHolder -import jp.kaleidot725.adbpad.ui.screen.menu.text.TextCommandStateHolder -import jp.kaleidot725.adbpad.ui.screen.version.VersionStateHolder +import jp.kaleidot725.adbpad.ui.screen.command.CommandStateHolder +import jp.kaleidot725.adbpad.ui.screen.screenshot.ScreenshotStateHolder +import jp.kaleidot725.adbpad.ui.screen.text.TextCommandStateHolder import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job @@ -39,11 +37,9 @@ import kotlinx.coroutines.isActive import kotlinx.coroutines.launch class MainStateHolder( - val menuStateHolder: MenuStateHolder, val commandStateHolder: CommandStateHolder, val textCommandStateHolder: TextCommandStateHolder, val screenshotStateHolder: ScreenshotStateHolder, - val versionStateHolder: VersionStateHolder, private val getEventFlowUseCase: GetEventFlowUseCase, private val getWindowSizeUseCase: GetWindowSizeUseCase, private val saveWindowSizeUseCase: SaveWindowSizeUseCase, @@ -60,7 +56,7 @@ class MainStateHolder( private val windowSize: MutableStateFlow = MutableStateFlow(WindowSize.UNKNOWN) private val isDark: MutableStateFlow = MutableStateFlow(true) private val dialog: MutableStateFlow = MutableStateFlow(null) - private val category: MutableStateFlow = MutableStateFlow(MainCategory.Device) + private val category: MutableStateFlow = MutableStateFlow(MainCategory.Command) private var deviceJob: Job? = null private val _devices: MutableStateFlow> = MutableStateFlow(emptyList()) @@ -86,7 +82,6 @@ class MainStateHolder( private val children: List> = listOf( - menuStateHolder, commandStateHolder, textCommandStateHolder, screenshotStateHolder, diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/domain/di/DomainModule.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/domain/di/DomainModule.kt index 0b11ca5b..f251f626 100644 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/domain/di/DomainModule.kt +++ b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/domain/di/DomainModule.kt @@ -12,7 +12,6 @@ import jp.kaleidot725.adbpad.domain.usecase.device.UpdateDevicesUseCase import jp.kaleidot725.adbpad.domain.usecase.event.GetEventFlowUseCase import jp.kaleidot725.adbpad.domain.usecase.language.GetLanguageUseCase import jp.kaleidot725.adbpad.domain.usecase.language.SaveLanguageUseCase -import jp.kaleidot725.adbpad.domain.usecase.menu.GetMenuListUseCase import jp.kaleidot725.adbpad.domain.usecase.refresh.RefreshUseCase import jp.kaleidot725.adbpad.domain.usecase.screenshot.CopyScreenshotToClipboardUseCase import jp.kaleidot725.adbpad.domain.usecase.screenshot.DeleteScreenshotPreviewUseCase @@ -63,9 +62,6 @@ val domainModule = factory { GetTextCommandUseCase(get()) } - factory { - GetMenuListUseCase() - } factory { TakeScreenshotUseCase(get(), get()) } diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/domain/model/Menu.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/domain/model/Menu.kt deleted file mode 100644 index f96a3e26..00000000 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/domain/model/Menu.kt +++ /dev/null @@ -1,34 +0,0 @@ -package jp.kaleidot725.adbpad.domain.model - -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.DoubleArrow -import androidx.compose.material.icons.filled.PhotoCamera -import androidx.compose.material.icons.filled.Send -import androidx.compose.ui.graphics.vector.ImageVector -import jp.kaleidot725.adbpad.domain.model.language.Language - -interface Menu { - val title: String - val icon: ImageVector - - object Command : Menu { - override val title: String - get() = Language.menuCommandTitle - override val icon: ImageVector - get() = Icons.Default.DoubleArrow - } - - object InputText : Menu { - override val title: String - get() = Language.menuInputTextTitle - override val icon: ImageVector - get() = Icons.Default.Send - } - - object Screenshot : Menu { - override val title: String - get() = Language.menuScreenshot - override val icon: ImageVector - get() = Icons.Default.PhotoCamera - } -} diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/domain/usecase/menu/GetMenuListUseCase.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/domain/usecase/menu/GetMenuListUseCase.kt deleted file mode 100644 index bc997ebb..00000000 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/domain/usecase/menu/GetMenuListUseCase.kt +++ /dev/null @@ -1,13 +0,0 @@ -package jp.kaleidot725.adbpad.domain.usecase.menu - -import jp.kaleidot725.adbpad.domain.model.Menu - -class GetMenuListUseCase { - operator fun invoke(): List { - return listOf( - Menu.Command, - Menu.InputText, - Menu.Screenshot, - ) - } -} diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/component/AutoSizableText.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/component/AutoSizableText.kt index 707126c8..da91e542 100644 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/component/AutoSizableText.kt +++ b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/component/AutoSizableText.kt @@ -20,7 +20,7 @@ fun AutoSizableText( text: String, style: TextStyle, modifier: Modifier = Modifier, - minFontSize: TextUnit = 12.sp, + minFontSize: TextUnit = 1.sp, maxFontSize: TextUnit = 100.sp, granularityInPx: Int = 1, ) { diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/component/NavigationRail.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/component/NavigationRail.kt index bd855765..256460be 100644 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/component/NavigationRail.kt +++ b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/component/NavigationRail.kt @@ -6,9 +6,10 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Android -import androidx.compose.material.icons.filled.PhoneAndroid +import androidx.compose.material.icons.filled.DoubleArrow +import androidx.compose.material.icons.filled.PhotoCamera import androidx.compose.material.icons.filled.Settings +import androidx.compose.material.icons.filled.Textsms import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp @@ -22,22 +23,31 @@ fun NavigationRail( ) { Column(modifier = Modifier.padding(8.dp), verticalArrangement = Arrangement.spacedBy(8.dp)) { NavigationRailItem( - label = "Device", - icon = Icons.Default.PhoneAndroid, + label = "Command", + icon = Icons.Default.DoubleArrow, contentDescription = "device menu", - isSelected = category == MainCategory.Device, - onClick = { onSelectCategory(MainCategory.Device) }, + isSelected = category == MainCategory.Command, + onClick = { onSelectCategory(MainCategory.Command) }, ) NavigationRailItem( - label = "Share", - icon = Icons.Default.Android, - contentDescription = "version menu", - isSelected = category == MainCategory.Version, - onClick = { onSelectCategory(MainCategory.Version) }, + label = "Text", + icon = Icons.Default.Textsms, + contentDescription = "text menu", + isSelected = category == MainCategory.Text, + onClick = { onSelectCategory(MainCategory.Text) }, + ) + + NavigationRailItem( + label = "Screenshot", + icon = Icons.Default.PhotoCamera, + contentDescription = "screenshot menu", + isSelected = category == MainCategory.Screenshot, + onClick = { onSelectCategory(MainCategory.Screenshot) }, ) Spacer(Modifier.weight(1.0f)) + NavigationRailItem( label = "Setting", icon = Icons.Default.Settings, @@ -51,5 +61,5 @@ fun NavigationRail( @Preview @Composable private fun NavigationRail_Preview() { - NavigationRail(MainCategory.Version, {}, {}) + NavigationRail(MainCategory.Text, {}, {}) } diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/component/NavigationRailItem.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/component/NavigationRailItem.kt index 54166076..b589acba 100644 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/component/NavigationRailItem.kt +++ b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/component/NavigationRailItem.kt @@ -5,8 +5,10 @@ import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.Icon import androidx.compose.material.icons.Icons @@ -35,7 +37,8 @@ fun NavigationRailItem( Box( modifier = Modifier - .size(50.dp) + .height(50.dp) + .width(75.dp) .clip(RoundedCornerShape(8.dp)) .clickableBackground(isSelected) .clickable(onClick = onClick) diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/component/layout/ScreenLayout.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/component/layout/ScreenLayout.kt index 506a47f3..25b3ac5b 100644 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/component/layout/ScreenLayout.kt +++ b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/component/layout/ScreenLayout.kt @@ -23,7 +23,6 @@ import jp.kaleidot725.adbpad.domain.model.UserColor fun ScreenLayout( navigationRail: @Composable () -> Unit, content: @Composable () -> Unit, - notificationArea: @Composable () -> Unit, dialog: @Composable () -> Unit, modifier: Modifier = Modifier, ) { @@ -35,7 +34,6 @@ fun ScreenLayout( Box(Modifier.background(MaterialTheme.colors.background)) { content() } } Spacer(Modifier.height(1.dp).fillMaxWidth().border(BorderStroke(1.dp, UserColor.getSplitterColor()))) - Box(Modifier.background(MaterialTheme.colors.background)) { notificationArea() } } dialog() } @@ -51,9 +49,6 @@ private fun ScreenLayout_Preview() { content = { Box(Modifier.fillMaxSize().background(androidx.compose.ui.graphics.Color.Blue)) }, - notificationArea = { - Box(Modifier.fillMaxWidth().height(50.dp).background(androidx.compose.ui.graphics.Color.Green)) - }, dialog = { }, modifier = Modifier.fillMaxSize(), diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/di/StateHolderModule.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/di/StateHolderModule.kt index 6024ab7e..fb41ad00 100644 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/di/StateHolderModule.kt +++ b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/di/StateHolderModule.kt @@ -1,12 +1,10 @@ package jp.kaleidot725.adbpad.ui.di import jp.kaleidot725.adbpad.MainStateHolder -import jp.kaleidot725.adbpad.ui.screen.menu.MenuStateHolder -import jp.kaleidot725.adbpad.ui.screen.menu.command.CommandStateHolder -import jp.kaleidot725.adbpad.ui.screen.menu.screenshot.ScreenshotStateHolder -import jp.kaleidot725.adbpad.ui.screen.menu.text.TextCommandStateHolder +import jp.kaleidot725.adbpad.ui.screen.command.CommandStateHolder +import jp.kaleidot725.adbpad.ui.screen.screenshot.ScreenshotStateHolder import jp.kaleidot725.adbpad.ui.screen.setting.SettingStateHolder -import jp.kaleidot725.adbpad.ui.screen.version.VersionStateHolder +import jp.kaleidot725.adbpad.ui.screen.text.TextCommandStateHolder import org.koin.dsl.module val stateHolderModule = @@ -31,10 +29,6 @@ val stateHolderModule = ) } - factory { - MenuStateHolder(getMenuListUseCase = get()) - } - factory { ScreenshotStateHolder( takeScreenshotUseCase = get(), @@ -57,19 +51,11 @@ val stateHolderModule = ) } - factory { - VersionStateHolder( - versionRepository = get(), - ) - } - factory { MainStateHolder( - menuStateHolder = get(), commandStateHolder = get(), textCommandStateHolder = get(), screenshotStateHolder = get(), - versionStateHolder = get(), getEventFlowUseCase = get(), getWindowSizeUseCase = get(), saveWindowSizeUseCase = get(), diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/command/CommandScreen.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/command/CommandScreen.kt similarity index 87% rename from src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/command/CommandScreen.kt rename to src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/command/CommandScreen.kt index 88ed82c5..acae4290 100644 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/command/CommandScreen.kt +++ b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/command/CommandScreen.kt @@ -10,8 +10,8 @@ import androidx.compose.ui.unit.dp import jp.kaleidot725.adbpad.domain.model.command.NormalCommand import jp.kaleidot725.adbpad.domain.model.command.NormalCommandCategory import jp.kaleidot725.adbpad.domain.model.command.NormalCommandGroup -import jp.kaleidot725.adbpad.ui.screen.menu.command.component.CommandList -import jp.kaleidot725.adbpad.ui.screen.menu.command.component.CommandTab +import jp.kaleidot725.adbpad.ui.screen.command.component.CommandList +import jp.kaleidot725.adbpad.ui.screen.command.component.CommandTab @Composable fun CommandScreen( @@ -23,8 +23,9 @@ fun CommandScreen( ) { Column(modifier = Modifier.fillMaxSize()) { CommandTab( - filtered, - onClickFilter, + filtered = filtered, + onClick = onClickFilter, + modifier = Modifier.padding(horizontal = 16.dp), ) CommandList( commands = diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/command/CommandState.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/command/CommandState.kt similarity index 89% rename from src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/command/CommandState.kt rename to src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/command/CommandState.kt index f5fc1490..f0dcba9a 100644 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/command/CommandState.kt +++ b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/command/CommandState.kt @@ -1,4 +1,4 @@ -package jp.kaleidot725.adbpad.ui.screen.menu.command +package jp.kaleidot725.adbpad.ui.screen.command import jp.kaleidot725.adbpad.domain.model.command.NormalCommandCategory import jp.kaleidot725.adbpad.domain.model.command.NormalCommandGroup diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/command/CommandStateHolder.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/command/CommandStateHolder.kt similarity index 98% rename from src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/command/CommandStateHolder.kt rename to src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/command/CommandStateHolder.kt index c292f66c..e3e83c7b 100644 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/command/CommandStateHolder.kt +++ b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/command/CommandStateHolder.kt @@ -1,4 +1,4 @@ -package jp.kaleidot725.adbpad.ui.screen.menu.command +package jp.kaleidot725.adbpad.ui.screen.command import jp.kaleidot725.adbpad.domain.model.command.NormalCommand import jp.kaleidot725.adbpad.domain.model.command.NormalCommandCategory diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/command/component/CommandItem.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/command/component/CommandItem.kt similarity index 97% rename from src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/command/component/CommandItem.kt rename to src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/command/component/CommandItem.kt index b3211791..173959ec 100644 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/command/component/CommandItem.kt +++ b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/command/component/CommandItem.kt @@ -1,4 +1,4 @@ -package jp.kaleidot725.adbpad.ui.screen.menu.command.component +package jp.kaleidot725.adbpad.ui.screen.command.component import androidx.compose.desktop.ui.tooling.preview.Preview import androidx.compose.foundation.layout.Arrangement diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/command/component/CommandList.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/command/component/CommandList.kt similarity index 97% rename from src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/command/component/CommandList.kt rename to src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/command/component/CommandList.kt index 59a9ef47..6453f3ef 100644 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/command/component/CommandList.kt +++ b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/command/component/CommandList.kt @@ -1,4 +1,4 @@ -package jp.kaleidot725.adbpad.ui.screen.menu.command.component +package jp.kaleidot725.adbpad.ui.screen.command.component import androidx.compose.desktop.ui.tooling.preview.Preview import androidx.compose.foundation.background diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/command/component/CommandTab.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/command/component/CommandTab.kt similarity index 84% rename from src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/command/component/CommandTab.kt rename to src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/command/component/CommandTab.kt index 9c3caa4d..167d1e92 100644 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/command/component/CommandTab.kt +++ b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/command/component/CommandTab.kt @@ -1,16 +1,18 @@ -package jp.kaleidot725.adbpad.ui.screen.menu.command.component +package jp.kaleidot725.adbpad.ui.screen.command.component import androidx.compose.desktop.ui.tooling.preview.Preview import androidx.compose.foundation.layout.Row import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier import jp.kaleidot725.adbpad.domain.model.command.NormalCommandCategory @Composable fun CommandTab( + modifier: Modifier = Modifier, filtered: NormalCommandCategory?, onClick: (NormalCommandCategory?) -> Unit, ) { - Row { + Row(modifier) { CommandTabItem( title = "All", isSelected = filtered == null, @@ -34,5 +36,5 @@ fun CommandTab( @Preview @Composable private fun CommandTabPreview() { - CommandTab(null) {} + CommandTab(filtered = null) {} } diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/command/component/CommandTabItem.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/command/component/CommandTabItem.kt similarity index 96% rename from src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/command/component/CommandTabItem.kt rename to src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/command/component/CommandTabItem.kt index a51666dd..d70523b8 100644 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/command/component/CommandTabItem.kt +++ b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/command/component/CommandTabItem.kt @@ -1,4 +1,4 @@ -package jp.kaleidot725.adbpad.ui.screen.menu.command.component +package jp.kaleidot725.adbpad.ui.screen.command.component import androidx.compose.desktop.ui.tooling.preview.Preview import androidx.compose.foundation.background diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/MenuScreen.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/MenuScreen.kt deleted file mode 100644 index e3587109..00000000 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/MenuScreen.kt +++ /dev/null @@ -1,51 +0,0 @@ -package jp.kaleidot725.adbpad.ui.screen - -import androidx.compose.desktop.ui.tooling.preview.Preview -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.material.MaterialTheme -import androidx.compose.material.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.unit.dp -import jp.kaleidot725.adbpad.domain.model.Menu -import jp.kaleidot725.adbpad.domain.model.language.Language -import jp.kaleidot725.adbpad.ui.screen.menu.component.MenuList - -@Composable -fun MenuScreen( - menus: List, - selectedMenu: Menu?, - onSelectMenu: (Menu) -> Unit, - modifier: Modifier = Modifier, -) { - Column( - verticalArrangement = Arrangement.spacedBy(12.dp), - modifier = modifier, - ) { - Text( - text = Language.tool, - style = MaterialTheme.typography.subtitle2, - modifier = Modifier.padding(start = 8.dp), - ) - - MenuList( - menus = menus, - selectedMenu = selectedMenu, - onSelectMenu = onSelectMenu, - modifier = Modifier.fillMaxWidth().weight(weight = 0.9f, fill = true), - ) - } -} - -@Preview -@Composable -private fun MenuScreen_Preview() { - MenuScreen( - menus = listOf(Menu.Command, Menu.InputText, Menu.Screenshot), - selectedMenu = Menu.Command, - onSelectMenu = {}, - ) -} diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/MenuState.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/MenuState.kt deleted file mode 100644 index fed1aa1b..00000000 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/MenuState.kt +++ /dev/null @@ -1,8 +0,0 @@ -package jp.kaleidot725.adbpad.ui.screen.menu - -import jp.kaleidot725.adbpad.domain.model.Menu - -data class MenuState( - val menus: List = emptyList(), - val selectedMenu: Menu = Menu.Command, -) diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/MenuStateHolder.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/MenuStateHolder.kt deleted file mode 100644 index b5e320d5..00000000 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/MenuStateHolder.kt +++ /dev/null @@ -1,42 +0,0 @@ -package jp.kaleidot725.adbpad.ui.screen.menu - -import jp.kaleidot725.adbpad.domain.model.Menu -import jp.kaleidot725.adbpad.domain.usecase.menu.GetMenuListUseCase -import jp.kaleidot725.adbpad.ui.common.ChildStateHolder -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.SupervisorJob -import kotlinx.coroutines.cancel -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.SharingStarted -import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.flow.combine -import kotlinx.coroutines.flow.stateIn - -class MenuStateHolder( - private val getMenuListUseCase: GetMenuListUseCase, -) : ChildStateHolder { - private val coroutineScope: CoroutineScope = CoroutineScope(SupervisorJob() + Dispatchers.Main + Dispatchers.IO) - - private val menus: MutableStateFlow> = MutableStateFlow(emptyList()) - private val selectedMenu: MutableStateFlow = MutableStateFlow(Menu.Command) - - override val state: StateFlow = - combine(menus, selectedMenu) { menus, selectedMenu -> - MenuState(menus, selectedMenu) - }.stateIn(coroutineScope, SharingStarted.WhileSubscribed(), MenuState()) - - override fun setup() { - menus.value = getMenuListUseCase() - } - - override fun refresh() { } - - override fun dispose() { - coroutineScope.cancel() - } - - fun selectMenu(menu: Menu) { - selectedMenu.value = menu - } -} diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/component/MenuItem.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/component/MenuItem.kt deleted file mode 100644 index 24eeb7e2..00000000 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/component/MenuItem.kt +++ /dev/null @@ -1,53 +0,0 @@ -package jp.kaleidot725.adbpad.ui.screen.menu.component - -import androidx.compose.desktop.ui.tooling.preview.Preview -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.size -import androidx.compose.material.Icon -import androidx.compose.material.MaterialTheme -import androidx.compose.material.Text -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Menu -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.vector.ImageVector -import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.sp - -@Composable -fun MenuItem( - icon: ImageVector, - iconDescription: String, - text: String, - modifier: Modifier = Modifier, -) { - Row( - horizontalArrangement = Arrangement.spacedBy(12.dp), - modifier = modifier, - ) { - Icon( - imageVector = icon, - contentDescription = iconDescription, - modifier = Modifier.align(Alignment.CenterVertically).size(20.dp), - ) - - Text( - text = text, - style = MaterialTheme.typography.subtitle2, - lineHeight = 20.sp, - modifier = Modifier.align(Alignment.CenterVertically), - ) - } -} - -@Preview -@Composable -private fun MenuItem_Preview() { - MenuItem( - icon = Icons.Default.Menu, - iconDescription = "menu", - text = "MENU_TITLE", - ) -} diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/component/MenuList.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/component/MenuList.kt deleted file mode 100644 index e03fe8e4..00000000 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/component/MenuList.kt +++ /dev/null @@ -1,52 +0,0 @@ -package jp.kaleidot725.adbpad.ui.screen.menu.component - -import androidx.compose.desktop.ui.tooling.preview.Preview -import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.clip -import androidx.compose.ui.unit.dp -import jp.kaleidot725.adbpad.domain.model.Menu -import jp.kaleidot725.adbpad.ui.common.resource.clickableBackground - -@Composable -fun MenuList( - menus: List, - selectedMenu: Menu?, - onSelectMenu: (Menu) -> Unit, - modifier: Modifier = Modifier, -) { - Column(modifier = modifier, verticalArrangement = Arrangement.spacedBy(4.dp)) { - menus.forEach { menu -> - val isSelected = menu == selectedMenu - MenuItem( - icon = menu.icon, - iconDescription = "$menu Icon", - text = menu.title, - modifier = - Modifier - .fillMaxWidth() - .clip(RoundedCornerShape(8.dp)) - .clickableBackground(isSelected = isSelected) - .clickable { onSelectMenu(menu) } - .padding(horizontal = 8.dp) - .padding(vertical = 8.dp), - ) - } - } -} - -@Preview -@Composable -private fun MenuList_Preview() { - MenuList( - menus = listOf(Menu.Command, Menu.InputText, Menu.Screenshot), - selectedMenu = Menu.Command, - onSelectMenu = {}, - ) -} diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/screenshot/ScreenshotScreen.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/screenshot/ScreenshotScreen.kt similarity index 91% rename from src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/screenshot/ScreenshotScreen.kt rename to src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/screenshot/ScreenshotScreen.kt index fd0047ff..834e199a 100644 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/screenshot/ScreenshotScreen.kt +++ b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/screenshot/ScreenshotScreen.kt @@ -1,4 +1,4 @@ -package jp.kaleidot725.adbpad.ui.screen.menu.screenshot +package jp.kaleidot725.adbpad.ui.screen.screenshot import androidx.compose.desktop.ui.tooling.preview.Preview import androidx.compose.foundation.BorderStroke @@ -17,8 +17,8 @@ import androidx.compose.ui.unit.dp import jp.kaleidot725.adbpad.domain.model.UserColor import jp.kaleidot725.adbpad.domain.model.command.ScreenshotCommand import jp.kaleidot725.adbpad.domain.model.screenshot.Screenshot -import jp.kaleidot725.adbpad.ui.screen.menu.screenshot.component.ScreenshotDropDownButton -import jp.kaleidot725.adbpad.ui.screen.menu.screenshot.component.ScreenshotViewer +import jp.kaleidot725.adbpad.ui.screen.screenshot.component.ScreenshotDropDownButton +import jp.kaleidot725.adbpad.ui.screen.screenshot.component.ScreenshotViewer @Composable fun ScreenshotScreen( diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/screenshot/ScreenshotState.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/screenshot/ScreenshotState.kt similarity index 89% rename from src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/screenshot/ScreenshotState.kt rename to src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/screenshot/ScreenshotState.kt index 37ad7734..17281d3c 100644 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/screenshot/ScreenshotState.kt +++ b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/screenshot/ScreenshotState.kt @@ -1,4 +1,4 @@ -package jp.kaleidot725.adbpad.ui.screen.menu.screenshot +package jp.kaleidot725.adbpad.ui.screen.screenshot import jp.kaleidot725.adbpad.domain.model.command.ScreenshotCommand import jp.kaleidot725.adbpad.domain.model.device.Device diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/screenshot/ScreenshotStateHolder.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/screenshot/ScreenshotStateHolder.kt similarity index 98% rename from src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/screenshot/ScreenshotStateHolder.kt rename to src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/screenshot/ScreenshotStateHolder.kt index 6e0242de..c9ea1627 100644 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/screenshot/ScreenshotStateHolder.kt +++ b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/screenshot/ScreenshotStateHolder.kt @@ -1,4 +1,4 @@ -package jp.kaleidot725.adbpad.ui.screen.menu.screenshot +package jp.kaleidot725.adbpad.ui.screen.screenshot import jp.kaleidot725.adbpad.domain.model.command.ScreenshotCommand import jp.kaleidot725.adbpad.domain.model.device.Device diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/screenshot/component/ScreenshotButton.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/screenshot/component/ScreenshotButton.kt similarity index 98% rename from src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/screenshot/component/ScreenshotButton.kt rename to src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/screenshot/component/ScreenshotButton.kt index 2fb70db1..607e02e4 100644 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/screenshot/component/ScreenshotButton.kt +++ b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/screenshot/component/ScreenshotButton.kt @@ -1,4 +1,4 @@ -package jp.kaleidot725.adbpad.ui.screen.menu.screenshot.component +package jp.kaleidot725.adbpad.ui.screen.screenshot.component import androidx.compose.desktop.ui.tooling.preview.Preview import androidx.compose.foundation.background diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/screenshot/component/ScreenshotDropDownButton.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/screenshot/component/ScreenshotDropDownButton.kt similarity index 97% rename from src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/screenshot/component/ScreenshotDropDownButton.kt rename to src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/screenshot/component/ScreenshotDropDownButton.kt index a08a60f4..9c50cdfc 100644 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/screenshot/component/ScreenshotDropDownButton.kt +++ b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/screenshot/component/ScreenshotDropDownButton.kt @@ -1,4 +1,4 @@ -package jp.kaleidot725.adbpad.ui.screen.menu.screenshot.component +package jp.kaleidot725.adbpad.ui.screen.screenshot.component import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/screenshot/component/ScreenshotHeader.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/screenshot/component/ScreenshotHeader.kt similarity index 97% rename from src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/screenshot/component/ScreenshotHeader.kt rename to src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/screenshot/component/ScreenshotHeader.kt index d0443cc4..1b8b4d0a 100644 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/screenshot/component/ScreenshotHeader.kt +++ b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/screenshot/component/ScreenshotHeader.kt @@ -1,4 +1,4 @@ -package jp.kaleidot725.adbpad.ui.screen.menu.screenshot.component +package jp.kaleidot725.adbpad.ui.screen.screenshot.component import androidx.compose.desktop.ui.tooling.preview.Preview import androidx.compose.foundation.background diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/screenshot/component/ScreenshotViewer.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/screenshot/component/ScreenshotViewer.kt similarity index 98% rename from src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/screenshot/component/ScreenshotViewer.kt rename to src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/screenshot/component/ScreenshotViewer.kt index 8209e0a5..36185561 100644 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/screenshot/component/ScreenshotViewer.kt +++ b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/screenshot/component/ScreenshotViewer.kt @@ -1,4 +1,4 @@ -package jp.kaleidot725.adbpad.ui.screen.menu.screenshot.component +package jp.kaleidot725.adbpad.ui.screen.screenshot.component import androidx.compose.desktop.ui.tooling.preview.Preview import androidx.compose.foundation.BorderStroke diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/text/TextCommandScreen.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/text/TextCommandScreen.kt similarity index 92% rename from src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/text/TextCommandScreen.kt rename to src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/text/TextCommandScreen.kt index 6135d1b7..f99c234e 100644 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/text/TextCommandScreen.kt +++ b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/text/TextCommandScreen.kt @@ -1,4 +1,4 @@ -package jp.kaleidot725.adbpad.ui.screen.menu.text +package jp.kaleidot725.adbpad.ui.screen.text import androidx.compose.desktop.ui.tooling.preview.Preview import androidx.compose.foundation.layout.Box @@ -11,8 +11,8 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import jp.kaleidot725.adbpad.domain.model.command.TextCommand -import jp.kaleidot725.adbpad.ui.screen.menu.text.component.InputTextActionMenu -import jp.kaleidot725.adbpad.ui.screen.menu.text.component.TextCommandList +import jp.kaleidot725.adbpad.ui.screen.text.component.InputTextActionMenu +import jp.kaleidot725.adbpad.ui.screen.text.component.TextCommandList @Composable fun TextCommandScreen( diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/text/TextCommandState.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/text/TextCommandState.kt similarity index 92% rename from src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/text/TextCommandState.kt rename to src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/text/TextCommandState.kt index 248edc9a..e0f15025 100644 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/text/TextCommandState.kt +++ b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/text/TextCommandState.kt @@ -1,4 +1,4 @@ -package jp.kaleidot725.adbpad.ui.screen.menu.text +package jp.kaleidot725.adbpad.ui.screen.text import jp.kaleidot725.adbpad.domain.model.command.TextCommand import jp.kaleidot725.adbpad.domain.model.device.Device diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/text/TextCommandStateHolder.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/text/TextCommandStateHolder.kt similarity index 99% rename from src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/text/TextCommandStateHolder.kt rename to src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/text/TextCommandStateHolder.kt index 51dd9199..07751535 100644 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/text/TextCommandStateHolder.kt +++ b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/text/TextCommandStateHolder.kt @@ -1,4 +1,4 @@ -package jp.kaleidot725.adbpad.ui.screen.menu.text +package jp.kaleidot725.adbpad.ui.screen.text import jp.kaleidot725.adbpad.domain.model.command.TextCommand import jp.kaleidot725.adbpad.domain.model.device.Device diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/text/component/InputTextActionMenu.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/text/component/InputTextActionMenu.kt similarity index 98% rename from src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/text/component/InputTextActionMenu.kt rename to src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/text/component/InputTextActionMenu.kt index 13e950d4..ccd8ff91 100644 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/text/component/InputTextActionMenu.kt +++ b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/text/component/InputTextActionMenu.kt @@ -1,4 +1,4 @@ -package jp.kaleidot725.adbpad.ui.screen.menu.text.component +package jp.kaleidot725.adbpad.ui.screen.text.component import androidx.compose.desktop.ui.tooling.preview.Preview import androidx.compose.foundation.layout.Arrangement diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/text/component/TextCommandItem.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/text/component/TextCommandItem.kt similarity index 97% rename from src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/text/component/TextCommandItem.kt rename to src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/text/component/TextCommandItem.kt index e6577d3d..cf241f79 100644 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/text/component/TextCommandItem.kt +++ b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/text/component/TextCommandItem.kt @@ -1,4 +1,4 @@ -package jp.kaleidot725.adbpad.ui.screen.menu.text.component +package jp.kaleidot725.adbpad.ui.screen.text.component import androidx.compose.desktop.ui.tooling.preview.Preview import androidx.compose.foundation.layout.Arrangement diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/text/component/TextCommandList.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/text/component/TextCommandList.kt similarity index 97% rename from src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/text/component/TextCommandList.kt rename to src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/text/component/TextCommandList.kt index 3c629885..eaeae6c7 100644 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/menu/text/component/TextCommandList.kt +++ b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/text/component/TextCommandList.kt @@ -1,4 +1,4 @@ -package jp.kaleidot725.adbpad.ui.screen.menu.text.component +package jp.kaleidot725.adbpad.ui.screen.text.component import androidx.compose.desktop.ui.tooling.preview.Preview import androidx.compose.foundation.background diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/version/VersionScreen.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/version/VersionScreen.kt deleted file mode 100644 index 81934d84..00000000 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/version/VersionScreen.kt +++ /dev/null @@ -1,62 +0,0 @@ -package jp.kaleidot725.adbpad.ui.screen.version - -import androidx.compose.foundation.BorderStroke -import androidx.compose.foundation.background -import androidx.compose.foundation.border -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.Button -import androidx.compose.material.CircularProgressIndicator -import androidx.compose.material.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.unit.dp -import jp.kaleidot725.adbpad.domain.model.UserColor -import jp.kaleidot725.adbpad.ui.screen.version.component.VersionTable - -@Composable -fun VersionScreen( - state: VersionState, - onRetry: () -> Unit, - modifier: Modifier = Modifier, -) { - Box(modifier) { - when { - state.hasError -> { - Button( - onClick = onRetry, - modifier = Modifier.align(Alignment.Center), - ) { - Text(text = "Retry") - } - } - - state.isLoading -> { - CircularProgressIndicator( - modifier = Modifier.align(Alignment.Center), - ) - } - - else -> { - VersionTable( - versions = state.versions, - modifier = - Modifier.fillMaxSize() - .padding(16.dp) - .border( - border = BorderStroke(1.dp, UserColor.getSplitterColor()), - shape = RoundedCornerShape(4.dp), - ) - .background( - color = Color.DarkGray, - shape = RoundedCornerShape(4.dp), - ), - ) - } - } - } -} diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/version/VersionState.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/version/VersionState.kt deleted file mode 100644 index 117ff21f..00000000 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/version/VersionState.kt +++ /dev/null @@ -1,9 +0,0 @@ -package jp.kaleidot725.adbpad.ui.screen.version - -import jp.kaleidot725.adbpad.domain.model.version.Version - -data class VersionState( - val versions: List = emptyList(), - val isLoading: Boolean = true, - val hasError: Boolean = false, -) diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/version/VersionStateHolder.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/version/VersionStateHolder.kt deleted file mode 100644 index 4a8f4db5..00000000 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/version/VersionStateHolder.kt +++ /dev/null @@ -1,54 +0,0 @@ -package jp.kaleidot725.adbpad.ui.screen.version - -import jp.kaleidot725.adbpad.domain.model.version.Version -import jp.kaleidot725.adbpad.ui.common.ChildStateHolder -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.SupervisorJob -import kotlinx.coroutines.cancel -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.SharingStarted -import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.flow.combine -import kotlinx.coroutines.flow.stateIn -import kotlinx.coroutines.launch -import ui.repository.VersionRepository - -class VersionStateHolder( - private val versionRepository: VersionRepository, -) : ChildStateHolder { - private val coroutineScope: CoroutineScope = CoroutineScope(SupervisorJob() + Dispatchers.Main + Dispatchers.IO) - private val isLoading: MutableStateFlow = MutableStateFlow(true) - private val hasError: MutableStateFlow = MutableStateFlow(false) - private val versions: MutableStateFlow> = MutableStateFlow(emptyList()) - - override val state: StateFlow = - combine(versions, isLoading, hasError) { versions, isLoading, hasError -> - VersionState(versions, isLoading, hasError) - }.stateIn(coroutineScope, SharingStarted.WhileSubscribed(), VersionState(emptyList())) - - override fun setup() { - retry() - } - - override fun refresh() {} - - override fun dispose() { - coroutineScope.cancel() - } - - fun retry() { - coroutineScope.launch { - isLoading.value = true - val result = versionRepository.getVersions() - if (result != null) { - versions.value = result - isLoading.value = false - } else { - versions.value = emptyList() - hasError.value = true - isLoading.value = false - } - } - } -} diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/version/component/VersionTable.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/version/component/VersionTable.kt deleted file mode 100644 index 8ad4cf93..00000000 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/version/component/VersionTable.kt +++ /dev/null @@ -1,65 +0,0 @@ -package jp.kaleidot725.adbpad.ui.screen.version.component - -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.wrapContentHeight -import androidx.compose.material.Divider -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import jp.kaleidot725.adbpad.domain.model.version.Version - -@Composable -fun VersionTable( - versions: List, - modifier: Modifier = Modifier, -) { - Column(modifier) { - VersionTableHeader( - modifier = - Modifier - .fillMaxWidth() - .wrapContentHeight(), - ) - - Column( - modifier = Modifier.fillMaxSize(), - ) { - versions.forEach { version -> - VersionTableItem( - version = version, - color = version.apiLevel.toColor(), - modifier = - Modifier - .fillMaxWidth() - .weight(version.distributionPercentage.compensatePercentage()), - ) - Divider(color = Color.White) - } - } - } -} - -private fun Double.compensatePercentage(): Float { - return maxOf(0.05f, this.toFloat()) -} - -private fun Int.toColor(): Color { - return when (this) { - 19 -> Color(0xFFc4dac4) - 21 -> Color(0xFF72bf86) - 22 -> Color(0xFF87a9ae) - 23 -> Color(0xFFd9b138) - 24 -> Color(0xFFe15354) - 25 -> Color(0xFF63b8cc) - 26 -> Color(0xFFd38258) - 27 -> Color(0xFFff8725) - 28 -> Color(0xFFe7b528) - 29 -> Color(0xFFc4dac4) - 30 -> Color(0xFF72bf86) - 31 -> Color(0xFF87a9ae) - 33 -> Color(0xFFd9b138) - else -> Color(0xFFd9b138) - } -} diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/version/component/VersionTableHeader.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/version/component/VersionTableHeader.kt deleted file mode 100644 index 489ce2ea..00000000 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/version/component/VersionTableHeader.kt +++ /dev/null @@ -1,70 +0,0 @@ -package jp.kaleidot725.adbpad.ui.screen.version.component - -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.wrapContentHeight -import androidx.compose.material.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.unit.dp - -@Composable -fun VersionTableHeader(modifier: Modifier = Modifier) { - Row(modifier) { - Text( - text = "ANDROID PLATFORM VERSION", - style = - TextStyle( - textAlign = TextAlign.Center, - color = Color.White, - fontWeight = FontWeight.ExtraBold, - ), - modifier = - Modifier - .wrapContentHeight() - .weight(0.3f) - .align(Alignment.CenterVertically) - .alignByBaseline() - .padding(4.dp), - ) - - Text( - text = "API LEVEL", - style = - TextStyle( - textAlign = TextAlign.Center, - color = Color.White, - fontWeight = FontWeight.ExtraBold, - ), - modifier = - Modifier - .wrapContentHeight() - .weight(0.3f) - .align(Alignment.CenterVertically) - .alignByBaseline() - .padding(4.dp), - ) - - Text( - text = "CUMULATIVE DISTRIBUTION", - style = - TextStyle( - textAlign = TextAlign.Center, - color = Color.White, - fontWeight = FontWeight.ExtraBold, - ), - modifier = - Modifier - .wrapContentHeight() - .weight(0.3f) - .align(Alignment.CenterVertically) - .alignByBaseline() - .padding(4.dp), - ) - } -} diff --git a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/version/component/VersionTableItem.kt b/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/version/component/VersionTableItem.kt deleted file mode 100644 index f9d8fe13..00000000 --- a/src/jvmMain/kotlin/jp/kaleidot725/adbpad/ui/screen/version/component/VersionTableItem.kt +++ /dev/null @@ -1,143 +0,0 @@ -package jp.kaleidot725.adbpad.ui.screen.version.component - -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxHeight -import androidx.compose.foundation.layout.width -import androidx.compose.material.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.sp -import jp.kaleidot725.adbpad.domain.model.version.Version -import jp.kaleidot725.adbpad.ui.component.AutoSizableText -import kotlin.math.round - -@Composable -fun VersionTableItem( - version: Version, - color: Color, - modifier: Modifier = Modifier, -) { - Row(modifier) { - Spacer( - modifier = - Modifier - .width(12.dp) - .fillMaxHeight() - .background(color), - ) - - Box( - modifier = - Modifier - .weight(0.10f) - .fillMaxHeight() - .background(color), - ) { - AutoSizableText( - text = "${version.version}", - style = - TextStyle( - textAlign = TextAlign.Start, - color = Color.Gray, - ), - minFontSize = 8.sp, - maxFontSize = 16.sp, - modifier = Modifier.align(Alignment.CenterStart), - ) - } - - Spacer( - modifier = - Modifier - .width(4.dp) - .fillMaxHeight() - .background(color), - ) - - Box( - modifier = - Modifier - .weight(0.20f) - .fillMaxHeight() - .background(color), - ) { - AutoSizableText( - text = version.name, - style = - TextStyle( - textAlign = TextAlign.Start, - color = Color.White, - fontWeight = FontWeight.ExtraBold, - ), - minFontSize = 8.sp, - maxFontSize = 16.sp, - modifier = Modifier.align(Alignment.CenterStart), - ) - } - - Box( - modifier = - Modifier - .weight(0.30f) - .fillMaxHeight() - .background(color), - ) { - AutoSizableText( - text = "${version.apiLevel}", - style = - TextStyle( - textAlign = TextAlign.Start, - fontSize = 100.sp, - color = Color.Gray, - ), - minFontSize = 8.sp, - maxFontSize = 40.sp, - modifier = Modifier.align(Alignment.Center), - ) - } - - val textCumulativeDistribution = - if (version.cumulativeDistribution != null) { - "${version.cumulativeDistribution.format(1)}%" - } else { - "" - } - Text( - text = textCumulativeDistribution, - style = - TextStyle( - textAlign = TextAlign.End, - color = Color.White, - fontWeight = FontWeight.Bold, - ), - modifier = - Modifier - .weight(0.3f) - .fillMaxHeight() - .align(Alignment.CenterVertically) - .alignByBaseline(), - ) - - Spacer( - modifier = - Modifier - .fillMaxHeight() - .width(12.dp), - ) - } -} - -private fun Double.format(decimals: Int): String { - var multiplier = 1.0f - repeat(decimals) { multiplier *= 10 } - return (round(this * multiplier) / multiplier).toString() -}