Additional UI improvements by adding cards to log and titles to commit detail

This commit is contained in:
Abdelilah El Aissaoui 2021-09-25 01:53:51 +02:00
parent c96a0201ec
commit 7ce954252e
4 changed files with 187 additions and 107 deletions

View File

@ -12,6 +12,8 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.ImageBitmap
import androidx.compose.ui.graphics.asImageBitmap
import androidx.compose.ui.res.useResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import extensions.filePath
@ -123,8 +125,22 @@ fun CommitChanges(commitDiff: Pair<RevCommit, List<DiffEntry>>, onDiffSelected:
.weight(1f, fill = true)
.padding(horizontal = 16.dp, vertical = 8.dp)
) {
Column {
Text(
modifier = Modifier
.padding(vertical = 16.dp)
.fillMaxWidth(),
text = "Files changed",
fontWeight = FontWeight.Bold,
textAlign = TextAlign.Center,
color = MaterialTheme.colors.primary,
)
Divider(modifier = Modifier.fillMaxWidth())
CommitLogChanges(diff, onDiffSelected = onDiffSelected)
}
}
}
}

View File

@ -83,7 +83,10 @@ fun RepositorySelected(gitManager: GitManager, repository: Repository) {
)
}
else -> {
DiffView(gitManager = gitManager, diffEntry = diffEntry, onCloseDiffView = { diffSelected = null })
DiffView(
gitManager = gitManager,
diffEntry = diffEntry,
onCloseDiffView = { diffSelected = null })
}
}
}
@ -175,7 +178,6 @@ fun Log(
onUncommitedChangesSelected: () -> Unit,
selectedIndex: MutableState<Int> = remember { mutableStateOf(-1) }
) {
val logStatusState = gitManager.logStatus.collectAsState()
val logStatus = logStatusState.value
@ -186,7 +188,12 @@ fun Log(
} else
listOf()
Card(
modifier = Modifier
.padding(8.dp)
.background(MaterialTheme.colors.surface)
.fillMaxSize()
) {
LazyColumn(
modifier = Modifier
.background(MaterialTheme.colors.surface)
@ -223,6 +230,7 @@ fun Log(
modifier = Modifier.padding(start = 16.dp),
color = MaterialTheme.colors.secondaryTextColor,
)
Spacer(modifier = Modifier.weight(2f))
Divider()
@ -265,3 +273,5 @@ fun Log(
}
}
}
}

View File

@ -1,3 +1,8 @@
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.ExperimentalAnimationApi
import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut
import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
@ -11,8 +16,10 @@ import androidx.compose.material.icons.filled.Close
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.RectangleShape
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import extensions.filePath
@ -20,6 +27,7 @@ import extensions.icon
import git.StageStatus
import org.eclipse.jgit.diff.DiffEntry
@OptIn(ExperimentalAnimationApi::class)
@Composable
fun UncommitedChanges(
gitManager: GitManager,
@ -37,64 +45,61 @@ fun UncommitedChanges(
var commitMessage by remember { mutableStateOf("") }
Column {
if (stageStatus is StageStatus.Loading) {
AnimatedVisibility (
visible = stageStatus is StageStatus.Loading,
enter = fadeIn(),
exit = fadeOut(),
) {
LinearProgressIndicator(modifier = Modifier.fillMaxWidth())
}
Text("Staged", fontWeight = FontWeight.Bold)
LazyColumn(modifier = Modifier.weight(5f)) {
itemsIndexed(staged) { index, diffEntry ->
FileEntry(
diffEntry = diffEntry,
icon = Icons.Default.Close,
onClick = {
onDiffEntrySelected(diffEntry)
},
onButtonClick = {
gitManager.unstage(diffEntry)
}
)
if (index < staged.size - 1) {
Divider(modifier = Modifier.fillMaxWidth())
}
}
}
Divider(modifier = Modifier.fillMaxWidth())
Text("Unstaged", fontWeight = FontWeight.Bold)
LazyColumn(modifier = Modifier.weight(5f)) {
itemsIndexed(unstaged) { index, diffEntry ->
FileEntry(
diffEntry = diffEntry,
icon = Icons.Default.Add,
onClick = {
onDiffEntrySelected(diffEntry)
},
onButtonClick = {
gitManager.stage(diffEntry)
}
)
if (index < unstaged.size - 1) {
Divider(modifier = Modifier.fillMaxWidth())
}
}
}
Column(
EntriesList(
modifier = Modifier
.padding(8.dp)
.weight(5f)
.fillMaxWidth(),
title = "Staged",
optionIcon = Icons.Default.Close,
diffEntries = staged,
onDiffEntrySelected = onDiffEntrySelected,
onDiffEntryOptionSelected = {
gitManager.unstage(it)
}
)
EntriesList(
modifier = Modifier
.padding(8.dp)
.weight(5f)
.fillMaxWidth(),
title = "Unstaged",
optionIcon = Icons.Default.Add,
diffEntries = unstaged,
onDiffEntrySelected = onDiffEntrySelected,
onDiffEntryOptionSelected = {
gitManager.stage(it)
}
)
Card(
modifier = Modifier
.padding(8.dp)
.height(192.dp)
.fillMaxWidth()
) {
Column(
modifier = Modifier
.fillMaxSize()
) {
TextField(
modifier = Modifier
.fillMaxWidth()
.weight(weight = 1f, fill = true),
value = commitMessage,
onValueChange = { commitMessage = it }
onValueChange = { commitMessage = it },
label = { Text("Write your commit message here") },
colors = TextFieldDefaults.textFieldColors(backgroundColor = MaterialTheme.colors.surface)
)
Button(
@ -103,13 +108,62 @@ fun UncommitedChanges(
onClick = {
gitManager.commit(commitMessage)
},
enabled = commitMessage.isNotEmpty()
enabled = commitMessage.isNotEmpty(),
shape = RectangleShape,
) {
Text("Commit")
}
}
}
}
}
@Composable
private fun EntriesList(
modifier: Modifier,
title: String,
optionIcon: ImageVector,
diffEntries: List<DiffEntry>,
onDiffEntrySelected: (DiffEntry) -> Unit,
onDiffEntryOptionSelected: (DiffEntry) -> Unit,
) {
Card (
modifier = modifier
) {
Column {
Text(
modifier = Modifier
.padding(vertical = 16.dp)
.fillMaxWidth(),
text = title,
fontWeight = FontWeight.Bold,
textAlign = TextAlign.Center,
color = MaterialTheme.colors.primary,
)
Divider(modifier = Modifier.fillMaxWidth())
LazyColumn(modifier = Modifier.weight(5f)) {
itemsIndexed(diffEntries) { index, diffEntry ->
FileEntry(
diffEntry = diffEntry,
icon = optionIcon,
onClick = {
onDiffEntrySelected(diffEntry)
},
onButtonClick = {
onDiffEntryOptionSelected(diffEntry)
}
)
if (index < diffEntries.size - 1) {
Divider(modifier = Modifier.fillMaxWidth())
}
}
}
}
}
}
@Composable
private fun FileEntry(diffEntry: DiffEntry, icon: ImageVector, onClick: () -> Unit, onButtonClick: () -> Unit) {

View File

@ -6,7 +6,7 @@ val primaryLight = Color(0xFF9FD1FF)
val primary = Color(0xFF0070D8)
val primaryDark = Color(0xFF014F97)
val secondary = Color(0xFFAB02E9)
val mainText = Color(0xFF202124)
val mainText = Color(0xFF212934)
val mainTextDark = Color(0xFFFFFFFF)
val secondaryText = Color(0xFF8F8F8F)
val secondaryTextDark = Color(0xFFCCCBCB)