feat: added editing cards feature

This commit is contained in:
2026-06-10 11:50:09 +03:00
parent ab4dffd877
commit a5e25d3c19
8 changed files with 93 additions and 15 deletions
@@ -0,0 +1,124 @@
package ru.omni_devel.cards
import android.content.Intent
import android.os.Bundle
import android.widget.ArrayAdapter
import android.widget.Button
import android.widget.EditText
import android.widget.Spinner
import android.widget.TextView
import android.widget.Toast
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.google.zxing.BarcodeFormat
import com.journeyapps.barcodescanner.ScanContract
import com.journeyapps.barcodescanner.ScanOptions
class EditCardActivity : AppCompatActivity() {
private lateinit var db: DbHelper
private val barcodeLauncher = registerForActivityResult(ScanContract()) { result ->
if (result.contents != null) {
setCodeType(result.formatName)
findViewById<EditText>(R.id.cardValueInput).setText(result.contents)
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContentView(R.layout.activity_edit_card)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}
val actionName = intent.getStringExtra("action") ?: EditCardAction.ADD.name
val action = EditCardAction.valueOf(actionName)
db = DbHelper(this, null)
val actionLabel: TextView = findViewById(R.id.editCardActionLabel)
val cardNameInput: EditText = findViewById(R.id.cardNameInput)
val cardValueInput: EditText = findViewById(R.id.cardValueInput)
val scanCodeButton: Button = findViewById(R.id.scanCodeButton)
val cardCodeTypeSelector: Spinner = findViewById(R.id.cardCodeTypeSelector)
val saveCardButton: Button = findViewById(R.id.saveCardButton)
val options = BarcodeFormat.entries.map { it.name }
val adapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, options)
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
cardCodeTypeSelector.adapter = adapter
scanCodeButton.setOnClickListener {
val options = ScanOptions()
options.setPrompt("Scan code")
options.setBeepEnabled(false)
options.setOrientationLocked(false)
barcodeLauncher.launch(options)
}
saveCardButton.setOnClickListener {
val cardName = cardNameInput.text.toString()
val cardValue = cardValueInput.text.toString()
val cardCodeType = BarcodeFormat.valueOf(cardCodeTypeSelector.selectedItem.toString())
when (action) {
EditCardAction.ADD -> {
db.addCard(cardName, cardValue, cardCodeType)
finish()
}
EditCardAction.EDIT -> {
val cardId = intent.getIntExtra("cardId", -1)
db.editCard(cardId, cardName, cardValue, cardCodeType)
val intent = Intent(this, ShowCardActivity::class.java)
intent.putExtra("cardId", cardId)
startActivity(intent)
finish()
}
}
}
when (action) {
EditCardAction.ADD -> {
setCodeType("QR_CODE")
actionLabel.text = "Adding card"
}
EditCardAction.EDIT -> {
val cardId = intent.getIntExtra("cardId", -1)
val cardInfo = db.getCard(cardId)
if (cardInfo == null) {
Toast.makeText(this, "cardInfo is null", Toast.LENGTH_LONG).show()
return
}
actionLabel.text = "Editing card"
cardNameInput.setText(cardInfo.name)
cardValueInput.setText(cardInfo.codeValue)
setCodeType(cardInfo.codeType.name)
}
}
}
private fun setCodeType(codeTypeString: String) {
val codeTypes = BarcodeFormat.entries.map { it.name }
val codeTypeIndex = codeTypes.indexOf(codeTypeString)
if (codeTypeIndex >= 0) {
findViewById<Spinner>(R.id.cardCodeTypeSelector).setSelection(codeTypeIndex)
}
}
}