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.Text
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.SolidColor
import androidx.compose.ui.input.pointer.PointerIcon
import androidx.compose.ui.input.pointer.pointerHoverIcon
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import app.git.DiffEntryType
import app.theme.borderColor
import app.theme.primaryTextColor
import app.theme.*
import app.ui.dialogs.NewBranchDialog
import app.ui.dialogs.RebaseInteractive
import app.ui.dialogs.StashWithMessageDialog
@ -42,6 +43,7 @@ fun RepositoryOpenPage(tabViewModel: TabViewModel) {
val selectedItem by tabViewModel.selectedItem.collectAsState()
val blameState by tabViewModel.blameState.collectAsState()
val showHistory by tabViewModel.showHistory.collectAsState()
val userInfo by tabViewModel.userInfo.collectAsState()
var showNewBranchDialog by remember { mutableStateOf(false) }
var showStashWithMessageDialog by remember { mutableStateOf(false) }
@ -79,6 +81,7 @@ fun RepositoryOpenPage(tabViewModel: TabViewModel) {
Text("Rebase started externally", color = MaterialTheme.colors.primaryTextColor)
}
} else {
Column(modifier = Modifier.weight(1f)) {
Menu(
modifier = Modifier
.padding(top = 4.dp, bottom = 8.dp) // Linear progress bar already take 4 additional dp for top
@ -93,6 +96,28 @@ fun RepositoryOpenPage(tabViewModel: TabViewModel) {
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 -> {
val diffViewModel = tabViewModel.diffViewModel
if(diffViewModel != null) {
if (diffViewModel != null) {
Diff(
diffViewModel = diffViewModel,
onCloseDiffView = {

View File

@ -19,6 +19,7 @@ import org.eclipse.jgit.blame.BlameResult
import org.eclipse.jgit.lib.Repository
import org.eclipse.jgit.lib.RepositoryState
import org.eclipse.jgit.revwalk.RevCommit
import org.eclipse.jgit.storage.file.FileBasedConfig
import java.io.File
import javax.inject.Inject
import javax.inject.Provider
@ -87,6 +88,9 @@ class TabViewModel @Inject constructor(
private val _showHistory = MutableStateFlow(false)
val showHistory: StateFlow<Boolean> = _showHistory
private val _userInfo = MutableStateFlow(UserInfo(null, null))
val userInfo: StateFlow<UserInfo> = _userInfo
var historyViewModel: HistoryViewModel? = null
private set
@ -181,9 +185,29 @@ class TabViewModel @Inject constructor(
printLog(TAG, "Refreshing repository state $newRepoState")
_repositoryState.value = newRepoState
loadConfigInfo(git)
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) {
if (newRepoState != RepositoryState.REBASING_INTERACTIVE && rebaseInteractiveViewModel != null) {
rebaseInteractiveViewModel?.cancel()
@ -309,7 +333,7 @@ class TabViewModel @Inject constructor(
val diffSelected = diffSelected.value
if (diffSelected != null) {
if(diffViewModel == null) { // Initialize the view model if required
if (diffViewModel == null) { // Initialize the view model if required
diffViewModel = diffViewModelProvider.get()
}