Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.itsaky.androidide.R
import com.itsaky.androidide.activities.PreferencesActivity
import com.itsaky.androidide.activities.editor.EditorHandlerActivity
import com.itsaky.androidide.databinding.DialogGitCredentialsBinding
import com.itsaky.androidide.databinding.FragmentGitBottomSheetBinding
import com.itsaky.androidide.fragments.git.adapter.GitFileChangeAdapter
import com.itsaky.androidide.git.core.GitCredentialsManager
Expand Down Expand Up @@ -333,6 +332,19 @@ class GitBottomSheetFragment : Fragment(R.layout.fragment_git_bottom_sheet) {
}
}

binding.btnPull.setOnClickListener {
checkUnsavedChangesAndProceed {
val username = credentialsManager.getUsername()
val token = credentialsManager.getToken()
if (!username.isNullOrBlank() && !token.isNullOrBlank()) {
viewModel.pull(username, token)
} else {
showGitCredentialsDialog(
credentialsManager = credentialsManager,
positiveButtonTextResId = R.string.pull
) { user, accessToken ->
viewModel.pull(user, accessToken)}}

binding.btnPull.apply {
setOnClickListener {
checkUnsavedChangesAndProceed {
Expand All @@ -341,37 +353,18 @@ class GitBottomSheetFragment : Fragment(R.layout.fragment_git_bottom_sheet) {
if (!username.isNullOrBlank() && !token.isNullOrBlank()) {
viewModel.pull(username, token)
} else {
showCredentialsDialog()
showGitCredentialsDialog(
credentialsManager = credentialsManager,
positiveButtonTextResId = R.string.pull
) { user, accessToken ->
viewModel.pull(user, accessToken)
}
}
}
}
setTooltipOnView(TooltipTag.GIT_PULL)
}
}

private fun showCredentialsDialog() {
val context = requireContext()
val dialogBinding = DialogGitCredentialsBinding.inflate(layoutInflater)

dialogBinding.username.setText(credentialsManager.getUsername())
dialogBinding.token.setText(credentialsManager.getToken())

MaterialAlertDialogBuilder(context)
.setTitle(R.string.git_credentials_title)
.setView(dialogBinding.root)
.setPositiveButton(R.string.pull) { _, _ ->
val username = dialogBinding.username.text?.toString()?.trim()
val token = dialogBinding.token.text?.toString()?.trim()
if (!username.isNullOrBlank() && !token.isNullOrBlank()) {
viewModel.pull(username, token)
}
}
.setNeutralButton(R.string.git_credentials_clear) { _, _ ->
credentialsManager.clearCredentials()
}
.setNegativeButton(android.R.string.cancel, null)
.show()
}
}}}

private fun refreshEditorContent(force: Boolean = false) {
val activity = requireActivity()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import androidx.recyclerview.widget.LinearLayoutManager
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.itsaky.androidide.R
import com.itsaky.androidide.databinding.DialogGitCommitHistoryBinding
import com.itsaky.androidide.databinding.DialogGitCredentialsBinding
import com.itsaky.androidide.fragments.git.adapter.GitCommitHistoryAdapter
import com.itsaky.androidide.git.core.GitCredentialsManager
import com.itsaky.androidide.git.core.models.CommitHistoryUiState
Expand Down Expand Up @@ -66,19 +65,17 @@ class GitCommitHistoryDialog : DialogFragment() {
true
}

binding.rvCommitHistory.onLongPress {
TooltipManager.showIdeCategoryTooltip(
context = binding.root.context,
anchorView = binding.root,
tag = TooltipTag.GIT_COMMIT_HISTORY
)
}

binding.rvCommitHistory.apply {
layoutManager = linearLayoutManager
addItemDecoration(dividerItemDecoration)
adapter = commitHistoryAdapter
}
onLongPress {
TooltipManager.showIdeCategoryTooltip(
context = binding.root.context,
anchorView = binding.root,
tag = TooltipTag.GIT_COMMIT_HISTORY
)
}

binding.btnBack.setOnClickListener {
dismiss()
Expand Down Expand Up @@ -117,17 +114,35 @@ class GitCommitHistoryDialog : DialogFragment() {
}

setupPushUI()
}
}}

private fun setupPushUI() {
binding.btnPush.setOnClickListener {
val username = credentialsManager.getUsername()
val token = credentialsManager.getToken()
if (!username.isNullOrBlank() && !token.isNullOrBlank()) {
viewModel.push(username, token)
} else {
showGitCredentialsDialog(
credentialsManager = credentialsManager,
positiveButtonTextResId = R.string.push
) { user, accessToken ->
viewModel.push(user, accessToken)
}}

binding.btnPush.apply {
setOnClickListener {
val username = credentialsManager.getUsername()
val token = credentialsManager.getToken()
if (!username.isNullOrBlank() && !token.isNullOrBlank()) {
viewModel.push(username, token)
} else {
showCredentialsDialog()
showGitCredentialsDialog(
credentialsManager = credentialsManager,
positiveButtonTextResId = R.string.pull
) { user, accessToken ->
viewModel.pull(user, accessToken)
}
}
}
setOnLongClickListener { view ->
Expand Down Expand Up @@ -192,30 +207,7 @@ class GitCommitHistoryDialog : DialogFragment() {
}
}

}

private fun showCredentialsDialog() {
val dialogBinding = DialogGitCredentialsBinding.inflate(layoutInflater)

dialogBinding.username.setText(credentialsManager.getUsername())
dialogBinding.token.setText(credentialsManager.getToken())

MaterialAlertDialogBuilder(requireContext())
.setTitle(R.string.git_credentials_title)
.setView(dialogBinding.root)
.setPositiveButton(R.string.push) { _, _ ->
val username = dialogBinding.username.text?.toString()?.trim()
val token = dialogBinding.token.text?.toString()?.trim()
if (!username.isNullOrBlank() && !token.isNullOrBlank()) {
viewModel.push(username, token)
}
}
.setNeutralButton(R.string.git_credentials_clear) { _, _ ->
credentialsManager.clearCredentials()
}
.setNegativeButton(android.R.string.cancel, null)
.show()
}
}}

override fun onDestroyView() {
super.onDestroyView()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package com.itsaky.androidide.fragments.git

import androidx.appcompat.app.AlertDialog
import androidx.core.widget.doAfterTextChanged
import androidx.fragment.app.Fragment
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.itsaky.androidide.R
import com.itsaky.androidide.databinding.DialogGitCredentialsBinding
import com.itsaky.androidide.git.core.GitCredentialsManager

fun Fragment.showGitCredentialsDialog(
credentialsManager: GitCredentialsManager,
positiveButtonTextResId: Int,
onPositiveClick: (username: String, token: String) -> Unit
) {
val dialogBinding = DialogGitCredentialsBinding.inflate(layoutInflater)

dialogBinding.username.setText(credentialsManager.getUsername())
dialogBinding.token.setText(credentialsManager.getToken())

val dialog = MaterialAlertDialogBuilder(requireContext())
.setTitle(R.string.git_credentials_title)
.setView(dialogBinding.root)
.setPositiveButton(positiveButtonTextResId) { _, _ ->
val username = dialogBinding.username.text?.toString()?.trim()
val token = dialogBinding.token.text?.toString()?.trim()
if (!username.isNullOrBlank() && !token.isNullOrBlank()) {
onPositiveClick(username, token)
}
}
.setNeutralButton(R.string.git_credentials_clear) { _, _ ->
credentialsManager.clearCredentials()
}
.setNegativeButton(android.R.string.cancel, null)
.create()

dialog.setOnShowListener {
val positiveButton = dialog.getButton(AlertDialog.BUTTON_POSITIVE)

val validate = {
val user = dialogBinding.username.text?.toString()?.trim()
val token = dialogBinding.token.text?.toString()?.trim()
positiveButton.isEnabled = !user.isNullOrBlank() && !token.isNullOrBlank()
}

dialogBinding.username.doAfterTextChanged { validate() }
dialogBinding.token.doAfterTextChanged { validate() }

validate()
}

dialog.show()
}
Loading