forked from omni/OmniCards
feat: added editing cards feature
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user