Updated compose to 1.2.0-alpha01-dev755

This commit is contained in:
Abdelilah El Aissaoui 2022-08-22 20:42:15 +02:00
parent 07502a1ce2
commit d76fb85373
9 changed files with 89 additions and 72 deletions

View File

@ -4,10 +4,10 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins { plugins {
// Kotlin version must match compose version // Kotlin version must match compose version
kotlin("jvm") version "1.6.10" kotlin("jvm") version "1.7.0"
kotlin("kapt") version "1.6.10" kotlin("kapt") version "1.7.0"
kotlin("plugin.serialization") version "1.6.10" kotlin("plugin.serialization") version "1.7.0"
id("org.jetbrains.compose") version "1.1.1" id("org.jetbrains.compose") version "1.2.0-alpha01-dev755"
} }
// Remember to update Constants.APP_VERSION when changing this version // Remember to update Constants.APP_VERSION when changing this version
@ -29,9 +29,9 @@ dependencies {
implementation(compose.desktop.components.splitPane) implementation(compose.desktop.components.splitPane)
implementation("org.eclipse.jgit:org.eclipse.jgit:6.2.0.202206071550-r") implementation("org.eclipse.jgit:org.eclipse.jgit:6.2.0.202206071550-r")
implementation("org.apache.sshd:sshd-core:2.9.0") implementation("org.apache.sshd:sshd-core:2.9.0")
implementation("com.google.dagger:dagger:2.43") implementation("com.google.dagger:dagger:2.43.2")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.3") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.4.0")
kapt("com.google.dagger:dagger-compiler:2.43") kapt("com.google.dagger:dagger-compiler:2.43.2")
testImplementation(platform("org.junit:junit-bom:5.9.0")) testImplementation(platform("org.junit:junit-bom:5.9.0"))
testImplementation("org.junit.jupiter:junit-jupiter:5.9.0") testImplementation("org.junit.jupiter:junit-jupiter:5.9.0")
testImplementation("io.mockk:mockk:1.12.5") testImplementation("io.mockk:mockk:1.12.5")

View File

@ -6,10 +6,9 @@ import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.animation.ExperimentalAnimationApi
import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut import androidx.compose.animation.fadeOut
import androidx.compose.foundation.ContextMenuArea import androidx.compose.foundation.*
import androidx.compose.foundation.ContextMenuItem import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.interaction.collectIsHoveredAsState
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.LazyListState
import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.foundation.lazy.itemsIndexed
@ -25,7 +24,6 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.Shape import androidx.compose.ui.graphics.Shape
import androidx.compose.ui.input.key.onPreviewKeyEvent import androidx.compose.ui.input.key.onPreviewKeyEvent
import androidx.compose.ui.input.pointer.pointerMoveFilter
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
@ -45,7 +43,6 @@ import app.ui.context_menu.EntryType
import app.ui.context_menu.statusEntriesContextMenuItems import app.ui.context_menu.statusEntriesContextMenuItems
import app.viewmodels.StageStatus import app.viewmodels.StageStatus
import app.viewmodels.StatusViewModel import app.viewmodels.StatusViewModel
import kotlinx.coroutines.flow.collect
import org.eclipse.jgit.lib.RepositoryState import org.eclipse.jgit.lib.RepositoryState
@Composable @Composable
@ -216,6 +213,7 @@ fun UncommitedChanges(
}, },
onMerge = { doCommit(false) } onMerge = { doCommit(false) }
) )
repositoryState.isRebasing -> RebasingButtons( repositoryState.isRebasing -> RebasingButtons(
canContinue = staged.isNotEmpty() || unstaged.isNotEmpty(), canContinue = staged.isNotEmpty() || unstaged.isNotEmpty(),
haveConflictsBeenSolved = unstaged.isEmpty(), haveConflictsBeenSolved = unstaged.isEmpty(),
@ -226,6 +224,7 @@ fun UncommitedChanges(
onContinue = { statusViewModel.continueRebase() }, onContinue = { statusViewModel.continueRebase() },
onSkip = { statusViewModel.skipRebase() }, onSkip = { statusViewModel.skipRebase() },
) )
repositoryState.isCherryPicking -> CherryPickingButtons( repositoryState.isCherryPicking -> CherryPickingButtons(
haveConflictsBeenSolved = unstaged.isEmpty(), haveConflictsBeenSolved = unstaged.isEmpty(),
onAbort = { onAbort = {
@ -236,6 +235,7 @@ fun UncommitedChanges(
doCommit(false) doCommit(false)
} }
) )
repositoryState.isReverting -> RevertingButtons( repositoryState.isReverting -> RevertingButtons(
haveConflictsBeenSolved = unstaged.none { it.statusType == StatusType.CONFLICTING }, haveConflictsBeenSolved = unstaged.none { it.statusType == StatusType.CONFLICTING },
canCommit = commitMessage.isNotBlank(), canCommit = commitMessage.isNotBlank(),
@ -247,6 +247,7 @@ fun UncommitedChanges(
doCommit(false) doCommit(false)
} }
) )
else -> UncommitedChangesButtons( else -> UncommitedChangesButtons(
canCommit = canCommit, canCommit = canCommit,
canAmend = canAmend, canAmend = canAmend,
@ -572,22 +573,14 @@ private fun FileEntry(
onButtonClick: () -> Unit, onButtonClick: () -> Unit,
onGenerateContextMenu: (StatusEntry) -> List<ContextMenuItem>, onGenerateContextMenu: (StatusEntry) -> List<ContextMenuItem>,
) { ) {
var active by remember { mutableStateOf(false) } val hoverInteraction = remember { MutableInteractionSource() }
val isHovered by hoverInteraction.collectIsHoveredAsState()
Box( Box(
modifier = Modifier modifier = Modifier
.handMouseClickable { onClick() } .handMouseClickable { onClick() }
.fillMaxWidth() .fillMaxWidth()
.pointerMoveFilter( .hoverable(hoverInteraction)
onEnter = {
active = true
false
},
onExit = {
active = false
false
}
)
) { ) {
ContextMenuArea( ContextMenuArea(
items = { items = {
@ -635,7 +628,7 @@ private fun FileEntry(
AnimatedVisibility( AnimatedVisibility(
modifier = Modifier modifier = Modifier
.align(Alignment.CenterEnd), .align(Alignment.CenterEnd),
visible = active, visible = isHovered,
enter = fadeIn(), enter = fadeIn(),
exit = fadeOut(), exit = fadeOut(),
) { ) {

View File

@ -13,7 +13,8 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusOrder import androidx.compose.ui.focus.focusProperties
import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import app.git.CloneStatus import app.git.CloneStatus
import app.theme.outlinedTextFieldColors import app.theme.outlinedTextFieldColors
@ -43,18 +44,22 @@ fun CloneDialog(
is CloneStatus.Cloning -> { is CloneStatus.Cloning -> {
Cloning(cloneViewModel, cloneStatusValue) Cloning(cloneViewModel, cloneStatusValue)
} }
is CloneStatus.Cancelling -> { is CloneStatus.Cancelling -> {
onClose() onClose()
} }
is CloneStatus.Completed -> { is CloneStatus.Completed -> {
onOpenRepository(cloneStatusValue.repoDir) onOpenRepository(cloneStatusValue.repoDir)
onClose() onClose()
} }
is CloneStatus.Fail -> CloneInput( is CloneStatus.Fail -> CloneInput(
cloneViewModel = cloneViewModel, cloneViewModel = cloneViewModel,
onClose = onClose, onClose = onClose,
errorMessage = cloneStatusValue.reason errorMessage = cloneStatusValue.reason
) )
CloneStatus.None -> CloneInput( CloneStatus.None -> CloneInput(
cloneViewModel = cloneViewModel, cloneViewModel = cloneViewModel,
onClose = onClose, onClose = onClose,
@ -98,7 +103,8 @@ private fun CloneInput(
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.padding(vertical = 4.dp, horizontal = 8.dp) .padding(vertical = 4.dp, horizontal = 8.dp)
.focusOrder(urlFocusRequester) { .focusRequester(urlFocusRequester)
.focusProperties {
previous = cancelButtonFocusRequester previous = cancelButtonFocusRequester
next = directoryFocusRequester next = directoryFocusRequester
}, },
@ -124,7 +130,8 @@ private fun CloneInput(
modifier = Modifier modifier = Modifier
.weight(1f) .weight(1f)
.padding(end = 4.dp) .padding(end = 4.dp)
.focusOrder(directoryFocusRequester) { .focusRequester(directoryFocusRequester)
.focusProperties {
previous = urlFocusRequester previous = urlFocusRequester
next = directoryButtonFocusRequester next = directoryButtonFocusRequester
}, },
@ -148,7 +155,8 @@ private fun CloneInput(
directory = newDirectory directory = newDirectory
}, },
modifier = Modifier modifier = Modifier
.focusOrder(directoryButtonFocusRequester) { .focusRequester(directoryButtonFocusRequester)
.focusProperties {
previous = directoryFocusRequester previous = directoryFocusRequester
next = cloneButtonFocusRequester next = cloneButtonFocusRequester
} }
@ -188,7 +196,8 @@ private fun CloneInput(
TextButton( TextButton(
modifier = Modifier modifier = Modifier
.padding(end = 8.dp) .padding(end = 8.dp)
.focusOrder(cancelButtonFocusRequester) { .focusRequester(cancelButtonFocusRequester)
.focusProperties {
previous = cloneButtonFocusRequester previous = cloneButtonFocusRequester
next = urlFocusRequester next = urlFocusRequester
}, },
@ -204,7 +213,8 @@ private fun CloneInput(
cloneViewModel.clone(directory, url) cloneViewModel.clone(directory, url)
}, },
modifier = Modifier modifier = Modifier
.focusOrder(cloneButtonFocusRequester) { .focusRequester(cloneButtonFocusRequester)
.focusProperties {
previous = directoryButtonFocusRequester previous = directoryButtonFocusRequester
next = cancelButtonFocusRequester next = cancelButtonFocusRequester
}, },

View File

@ -7,10 +7,10 @@ import androidx.compose.material.Text
import androidx.compose.material.TextButton import androidx.compose.material.TextButton
import androidx.compose.runtime.* import androidx.compose.runtime.*
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusOrder import androidx.compose.ui.focus.focusProperties
import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.input.key.onPreviewKeyEvent import androidx.compose.ui.input.key.onPreviewKeyEvent
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import app.keybindings.KeybindingOption import app.keybindings.KeybindingOption
@ -35,7 +35,8 @@ fun NewBranchDialog(
) { ) {
OutlinedTextField( OutlinedTextField(
modifier = Modifier modifier = Modifier
.focusOrder(branchFieldFocusRequester) { .focusRequester(branchFieldFocusRequester)
.focusProperties {
this.next = buttonFieldFocusRequester this.next = buttonFieldFocusRequester
} }
.width(300.dp) .width(300.dp)
@ -76,7 +77,9 @@ fun NewBranchDialog(
Text("Cancel") Text("Cancel")
} }
PrimaryButton( PrimaryButton(
modifier = Modifier.focusOrder(buttonFieldFocusRequester) { modifier = Modifier
.focusRequester(buttonFieldFocusRequester)
.focusProperties {
this.previous = branchFieldFocusRequester this.previous = branchFieldFocusRequester
this.next = branchFieldFocusRequester this.next = branchFieldFocusRequester
}, },

View File

@ -8,10 +8,10 @@ import androidx.compose.material.Text
import androidx.compose.material.TextButton import androidx.compose.material.TextButton
import androidx.compose.runtime.* import androidx.compose.runtime.*
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusOrder import androidx.compose.ui.focus.focusProperties
import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.input.key.onPreviewKeyEvent import androidx.compose.ui.input.key.onPreviewKeyEvent
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import app.keybindings.KeybindingOption import app.keybindings.KeybindingOption
@ -38,7 +38,8 @@ fun NewTagDialog(
) { ) {
OutlinedTextField( OutlinedTextField(
modifier = Modifier modifier = Modifier
.focusOrder(tagFieldFocusRequester) { .focusRequester(tagFieldFocusRequester)
.focusProperties {
this.next = buttonFieldFocusRequester this.next = buttonFieldFocusRequester
} }
.width(300.dp) .width(300.dp)
@ -79,7 +80,9 @@ fun NewTagDialog(
Text("Cancel") Text("Cancel")
} }
PrimaryButton( PrimaryButton(
modifier = Modifier.focusOrder(buttonFieldFocusRequester) { modifier = Modifier
.focusRequester(buttonFieldFocusRequester)
.focusProperties {
this.previous = tagFieldFocusRequester this.previous = tagFieldFocusRequester
this.next = tagFieldFocusRequester this.next = tagFieldFocusRequester
}, },

View File

@ -10,7 +10,8 @@ import androidx.compose.runtime.*
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusOrder import androidx.compose.ui.focus.focusProperties
import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.input.key.onPreviewKeyEvent import androidx.compose.ui.input.key.onPreviewKeyEvent
import androidx.compose.ui.text.input.PasswordVisualTransformation import androidx.compose.ui.text.input.PasswordVisualTransformation
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
@ -46,7 +47,8 @@ fun PasswordDialog(
OutlinedTextField( OutlinedTextField(
modifier = Modifier modifier = Modifier
.padding(bottom = 8.dp) .padding(bottom = 8.dp)
.focusOrder(passwordFieldFocusRequester) { .focusRequester(passwordFieldFocusRequester)
.focusProperties {
this.next = buttonFieldFocusRequester this.next = buttonFieldFocusRequester
} }
.width(300.dp) .width(300.dp)
@ -88,7 +90,9 @@ fun PasswordDialog(
Text("Cancel") Text("Cancel")
} }
PrimaryButton( PrimaryButton(
modifier = Modifier.focusOrder(buttonFieldFocusRequester) { modifier = Modifier
.focusRequester(buttonFieldFocusRequester)
.focusProperties {
this.previous = passwordFieldFocusRequester this.previous = passwordFieldFocusRequester
}, },
onClick = { onClick = {

View File

@ -7,12 +7,11 @@ import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.mouseClickable import androidx.compose.foundation.onClick
import androidx.compose.material.* import androidx.compose.material.*
import androidx.compose.runtime.* import androidx.compose.runtime.*
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.input.pointer.isPrimaryPressed
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import app.git.ResetType import app.git.ResetType
import app.theme.primaryTextColor import app.theme.primaryTextColor
@ -92,13 +91,11 @@ fun RadioButtonText(
Row( Row(
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
modifier = Modifier modifier = Modifier
.mouseClickable { .onClick {
if (this.buttons.isPrimaryPressed) {
if (onClick != null) { if (onClick != null) {
onClick() onClick()
} }
} }
}
) { ) {
RadioButton( RadioButton(
selected, selected,

View File

@ -8,10 +8,10 @@ import androidx.compose.material.Text
import androidx.compose.material.TextButton import androidx.compose.material.TextButton
import androidx.compose.runtime.* import androidx.compose.runtime.*
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusOrder import androidx.compose.ui.focus.focusProperties
import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.input.key.onPreviewKeyEvent import androidx.compose.ui.input.key.onPreviewKeyEvent
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import app.keybindings.KeybindingOption import app.keybindings.KeybindingOption
@ -38,7 +38,8 @@ fun StashWithMessageDialog(
) { ) {
OutlinedTextField( OutlinedTextField(
modifier = Modifier modifier = Modifier
.focusOrder(textFieldFocusRequester) { .focusRequester(textFieldFocusRequester)
.focusProperties {
this.next = buttonFieldFocusRequester this.next = buttonFieldFocusRequester
} }
.width(300.dp) .width(300.dp)
@ -78,7 +79,9 @@ fun StashWithMessageDialog(
Text("Cancel") Text("Cancel")
} }
PrimaryButton( PrimaryButton(
modifier = Modifier.focusOrder(buttonFieldFocusRequester) { modifier = Modifier
.focusRequester(buttonFieldFocusRequester)
.focusProperties {
this.previous = textFieldFocusRequester this.previous = textFieldFocusRequester
this.next = textFieldFocusRequester this.next = textFieldFocusRequester
}, },

View File

@ -8,10 +8,10 @@ import androidx.compose.material.Text
import androidx.compose.material.TextButton import androidx.compose.material.TextButton
import androidx.compose.runtime.* import androidx.compose.runtime.*
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusOrder import androidx.compose.ui.focus.focusProperties
import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.input.key.onPreviewKeyEvent import androidx.compose.ui.input.key.onPreviewKeyEvent
import androidx.compose.ui.text.input.PasswordVisualTransformation import androidx.compose.ui.text.input.PasswordVisualTransformation
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
@ -54,7 +54,8 @@ fun UserPasswordDialog(
OutlinedTextField( OutlinedTextField(
modifier = Modifier modifier = Modifier
.focusOrder(userFieldFocusRequester) { .focusRequester(userFieldFocusRequester)
.focusProperties {
this.next = passwordFieldFocusRequester this.next = passwordFieldFocusRequester
} }
.width(300.dp) .width(300.dp)
@ -83,7 +84,8 @@ fun UserPasswordDialog(
OutlinedTextField( OutlinedTextField(
modifier = Modifier modifier = Modifier
.padding(bottom = 8.dp) .padding(bottom = 8.dp)
.focusOrder(passwordFieldFocusRequester) { .focusRequester(passwordFieldFocusRequester)
.focusProperties {
this.previous = userFieldFocusRequester this.previous = userFieldFocusRequester
this.next = buttonFieldFocusRequester this.next = buttonFieldFocusRequester
} }
@ -128,7 +130,9 @@ fun UserPasswordDialog(
Text("Cancel") Text("Cancel")
} }
PrimaryButton( PrimaryButton(
modifier = Modifier.focusOrder(buttonFieldFocusRequester) { modifier = Modifier
.focusRequester(buttonFieldFocusRequester)
.focusProperties {
this.previous = passwordFieldFocusRequester this.previous = passwordFieldFocusRequester
this.next = userFieldFocusRequester this.next = userFieldFocusRequester
}, },