Added bottom status bar

This commit is contained in:
Abdelilah El Aissaoui 2022-06-19 16:10:57 +02:00
parent ca32f7c551
commit 3bea4f22e8
3 changed files with 71 additions and 16 deletions

View File

@ -0,0 +1,6 @@
package app.git
data class UserInfo(
val name: String?,
val email: String?,
)

View File

@ -9,15 +9,16 @@ import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.MaterialTheme import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text import androidx.compose.material.Text
import androidx.compose.runtime.* import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.SolidColor
import androidx.compose.ui.input.pointer.PointerIcon import androidx.compose.ui.input.pointer.PointerIcon
import androidx.compose.ui.input.pointer.pointerHoverIcon import androidx.compose.ui.input.pointer.pointerHoverIcon
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import app.git.DiffEntryType import app.git.DiffEntryType
import app.theme.borderColor import app.theme.*
import app.theme.primaryTextColor
import app.ui.dialogs.NewBranchDialog import app.ui.dialogs.NewBranchDialog
import app.ui.dialogs.RebaseInteractive import app.ui.dialogs.RebaseInteractive
import app.ui.dialogs.StashWithMessageDialog import app.ui.dialogs.StashWithMessageDialog
@ -42,6 +43,7 @@ fun RepositoryOpenPage(tabViewModel: TabViewModel) {
val selectedItem by tabViewModel.selectedItem.collectAsState() val selectedItem by tabViewModel.selectedItem.collectAsState()
val blameState by tabViewModel.blameState.collectAsState() val blameState by tabViewModel.blameState.collectAsState()
val showHistory by tabViewModel.showHistory.collectAsState() val showHistory by tabViewModel.showHistory.collectAsState()
val userInfo by tabViewModel.userInfo.collectAsState()
var showNewBranchDialog by remember { mutableStateOf(false) } var showNewBranchDialog by remember { mutableStateOf(false) }
var showStashWithMessageDialog by remember { mutableStateOf(false) } var showStashWithMessageDialog by remember { mutableStateOf(false) }
@ -79,19 +81,42 @@ fun RepositoryOpenPage(tabViewModel: TabViewModel) {
Text("Rebase started externally", color = MaterialTheme.colors.primaryTextColor) Text("Rebase started externally", color = MaterialTheme.colors.primaryTextColor)
} }
} else { } else {
Menu( Column(modifier = Modifier.weight(1f)) {
modifier = Modifier Menu(
.padding(top = 4.dp, bottom = 8.dp) // Linear progress bar already take 4 additional dp for top modifier = Modifier
.fillMaxWidth(), .padding(top = 4.dp, bottom = 8.dp) // Linear progress bar already take 4 additional dp for top
menuViewModel = tabViewModel.menuViewModel, .fillMaxWidth(),
onRepositoryOpen = { menuViewModel = tabViewModel.menuViewModel,
openRepositoryDialog(tabViewModel = tabViewModel) onRepositoryOpen = {
}, openRepositoryDialog(tabViewModel = tabViewModel)
onCreateBranch = { showNewBranchDialog = true }, },
onStashWithMessage = { showStashWithMessageDialog = true }, onCreateBranch = { showNewBranchDialog = true },
) onStashWithMessage = { showStashWithMessageDialog = true },
)
RepoContent(tabViewModel, diffSelected, selectedItem, repositoryState, blameState, showHistory) RepoContent(tabViewModel, diffSelected, selectedItem, repositoryState, blameState, showHistory)
}
}
Spacer(
modifier = Modifier
.height(1.dp)
.fillMaxWidth()
.background(MaterialTheme.colors.primaryVariant.copy(alpha = 0.2f))
)
Row(
modifier = Modifier
.fillMaxWidth()
.height(32.dp)
.background(MaterialTheme.colors.surface)
.padding(horizontal = 16.dp),
verticalAlignment = Alignment.CenterVertically,
) {
Text(
text = "${userInfo.name ?: "Name not set"} <${userInfo.email?: "Email not set"}>",
color = MaterialTheme.colors.primaryTextColor,
fontSize = 12.sp,
)
} }
} }
@ -194,7 +219,7 @@ fun MainContentView(
else -> { else -> {
val diffViewModel = tabViewModel.diffViewModel val diffViewModel = tabViewModel.diffViewModel
if(diffViewModel != null) { if (diffViewModel != null) {
Diff( Diff(
diffViewModel = diffViewModel, diffViewModel = diffViewModel,
onCloseDiffView = { onCloseDiffView = {

View File

@ -19,6 +19,7 @@ import org.eclipse.jgit.blame.BlameResult
import org.eclipse.jgit.lib.Repository import org.eclipse.jgit.lib.Repository
import org.eclipse.jgit.lib.RepositoryState import org.eclipse.jgit.lib.RepositoryState
import org.eclipse.jgit.revwalk.RevCommit import org.eclipse.jgit.revwalk.RevCommit
import org.eclipse.jgit.storage.file.FileBasedConfig
import java.io.File import java.io.File
import javax.inject.Inject import javax.inject.Inject
import javax.inject.Provider import javax.inject.Provider
@ -87,6 +88,9 @@ class TabViewModel @Inject constructor(
private val _showHistory = MutableStateFlow(false) private val _showHistory = MutableStateFlow(false)
val showHistory: StateFlow<Boolean> = _showHistory val showHistory: StateFlow<Boolean> = _showHistory
private val _userInfo = MutableStateFlow(UserInfo(null, null))
val userInfo: StateFlow<UserInfo> = _userInfo
var historyViewModel: HistoryViewModel? = null var historyViewModel: HistoryViewModel? = null
private set private set
@ -181,9 +185,29 @@ class TabViewModel @Inject constructor(
printLog(TAG, "Refreshing repository state $newRepoState") printLog(TAG, "Refreshing repository state $newRepoState")
_repositoryState.value = newRepoState _repositoryState.value = newRepoState
loadConfigInfo(git)
onRepositoryStateChanged(newRepoState) onRepositoryStateChanged(newRepoState)
} }
private fun loadConfigInfo(git: Git) {
val config = git.repository.config
config.load()
val userName = config.getString("user", null, "name")
val email = config.getString("user", null, "email")
// TODO Load file-specific config
// val fcfg = FileBasedConfig((config as FileBasedConfig).file, git.repository.fs)
// fcfg.load()
// val fname = fcfg.getString("user", null, "name")
// val fmail = fcfg.getString("user", null, "email")
// println("Fname $fname\nFmail $fmail")
println(userName)
println(email)
_userInfo.value = UserInfo(userName, email)
}
private fun onRepositoryStateChanged(newRepoState: RepositoryState) { private fun onRepositoryStateChanged(newRepoState: RepositoryState) {
if (newRepoState != RepositoryState.REBASING_INTERACTIVE && rebaseInteractiveViewModel != null) { if (newRepoState != RepositoryState.REBASING_INTERACTIVE && rebaseInteractiveViewModel != null) {
rebaseInteractiveViewModel?.cancel() rebaseInteractiveViewModel?.cancel()
@ -309,7 +333,7 @@ class TabViewModel @Inject constructor(
val diffSelected = diffSelected.value val diffSelected = diffSelected.value
if (diffSelected != null) { if (diffSelected != null) {
if(diffViewModel == null) { // Initialize the view model if required if (diffViewModel == null) { // Initialize the view model if required
diffViewModel = diffViewModelProvider.get() diffViewModel = diffViewModelProvider.get()
} }