/* * Copyright © 2014-2020 The Android Password Store Authors. All Rights Reserved. * SPDX-License-Identifier: GPL-3.0-only */ package com.zeapo.pwdstore.git import android.os.Bundle import android.os.Handler import android.util.Patterns import androidx.core.os.postDelayed import androidx.lifecycle.lifecycleScope import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.snackbar.Snackbar import com.zeapo.pwdstore.R import com.zeapo.pwdstore.databinding.ActivityGitConfigBinding import com.zeapo.pwdstore.git.config.GitSettings import com.zeapo.pwdstore.utils.PasswordRepository import com.zeapo.pwdstore.utils.viewBinding import kotlinx.coroutines.launch import org.eclipse.jgit.lib.Constants class GitConfigActivity : BaseGitActivity() { private val binding by viewBinding(ActivityGitConfigBinding::inflate) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(binding.root) supportActionBar?.setDisplayHomeAsUpEnabled(true) if (GitSettings.authorName.isEmpty()) binding.gitUserName.requestFocus() else binding.gitUserName.setText(GitSettings.authorName) binding.gitUserEmail.setText(GitSettings.authorEmail) val repo = PasswordRepository.getRepository(PasswordRepository.getRepositoryDirectory()) if (repo != null) { try { val objectId = repo.resolve(Constants.HEAD) val ref = repo.getRef("refs/heads/${GitSettings.branch}") val head = if (ref.objectId.equals(objectId)) ref.name else "DETACHED" binding.gitCommitHash.text = String.format("%s (%s)", objectId.abbreviate(8).name(), head) // enable the abort button only if we're rebasing val isRebasing = repo.repositoryState.isRebasing binding.gitAbortRebase.isEnabled = isRebasing binding.gitAbortRebase.alpha = if (isRebasing) 1.0f else 0.5f } catch (ignored: Exception) { } } binding.gitAbortRebase.setOnClickListener { lifecycleScope.launch { launchGitOperation(BREAK_OUT_OF_DETACHED) } } binding.gitResetToRemote.setOnClickListener { lifecycleScope.launch { launchGitOperation(REQUEST_RESET) } } binding.saveButton.setOnClickListener { val email = binding.gitUserEmail.text.toString().trim() val name = binding.gitUserName.text.toString().trim() if (!email.matches(Patterns.EMAIL_ADDRESS.toRegex())) { MaterialAlertDialogBuilder(this) .setMessage(getString(R.string.invalid_email_dialog_text)) .setPositiveButton(getString(R.string.dialog_ok), null) .show() } else { GitSettings.authorEmail = email GitSettings.authorName = name PasswordRepository.setGitAuthorEmail(email) PasswordRepository.setGitAuthorName(name) Snackbar.make(binding.root, getString(R.string.git_server_config_save_success), Snackbar.LENGTH_SHORT).show() Handler().postDelayed(500) { finish() } } } } }