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
+1 -1
View File
@@ -16,7 +16,7 @@
android:screenOrientation="portrait" android:screenOrientation="portrait"
android:exported="false" /> android:exported="false" />
<activity <activity
android:name=".AddCardActivity" android:name=".EditCardActivity"
android:screenOrientation="portrait" android:screenOrientation="portrait"
android:exported="false" /> android:exported="false" />
<activity <activity
@@ -3,6 +3,11 @@ package ru.omni_devel.cards
import com.google.zxing.BarcodeFormat import com.google.zxing.BarcodeFormat
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
enum class EditCardAction {
ADD,
EDIT,
}
@Serializable @Serializable
class CardInfo ( class CardInfo (
val id: Int, val id: Int,
@@ -33,6 +33,20 @@ class DbHelper(val context: Context, val factory: SQLiteDatabase.CursorFactory?)
db.close() db.close()
} }
fun editCard(id: Int, name: String, codeValue: String, codeType: BarcodeFormat) {
val values = ContentValues()
values.put("name", name)
values.put("codeValue", codeValue)
values.put("codeType", codeType.name)
val db = this.writableDatabase
db.update("cards", values, "id = ?", arrayOf(id.toString()))
db.close()
}
fun getCards(): List<CardInfo> { fun getCards(): List<CardInfo> {
val db = this.readableDatabase val db = this.readableDatabase
@@ -1,10 +1,13 @@
package ru.omni_devel.cards package ru.omni_devel.cards
import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.widget.ArrayAdapter import android.widget.ArrayAdapter
import android.widget.Button import android.widget.Button
import android.widget.EditText import android.widget.EditText
import android.widget.Spinner import android.widget.Spinner
import android.widget.TextView
import android.widget.Toast
import androidx.activity.enableEdgeToEdge import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat import androidx.core.view.ViewCompat
@@ -13,7 +16,7 @@ import com.google.zxing.BarcodeFormat
import com.journeyapps.barcodescanner.ScanContract import com.journeyapps.barcodescanner.ScanContract
import com.journeyapps.barcodescanner.ScanOptions import com.journeyapps.barcodescanner.ScanOptions
class AddCardActivity : AppCompatActivity() { class EditCardActivity : AppCompatActivity() {
private lateinit var db: DbHelper private lateinit var db: DbHelper
private val barcodeLauncher = registerForActivityResult(ScanContract()) { result -> private val barcodeLauncher = registerForActivityResult(ScanContract()) { result ->
@@ -27,15 +30,19 @@ class AddCardActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
enableEdgeToEdge() enableEdgeToEdge()
setContentView(R.layout.activity_add_card) setContentView(R.layout.activity_edit_card)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -> ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets insets
} }
val actionName = intent.getStringExtra("action") ?: EditCardAction.ADD.name
val action = EditCardAction.valueOf(actionName)
db = DbHelper(this, null) db = DbHelper(this, null)
val actionLabel: TextView = findViewById(R.id.editCardActionLabel)
val cardNameInput: EditText = findViewById(R.id.cardNameInput) val cardNameInput: EditText = findViewById(R.id.cardNameInput)
val cardValueInput: EditText = findViewById(R.id.cardValueInput) val cardValueInput: EditText = findViewById(R.id.cardValueInput)
val scanCodeButton: Button = findViewById(R.id.scanCodeButton) val scanCodeButton: Button = findViewById(R.id.scanCodeButton)
@@ -46,7 +53,6 @@ class AddCardActivity : AppCompatActivity() {
val adapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, options) val adapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, options)
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
cardCodeTypeSelector.adapter = adapter cardCodeTypeSelector.adapter = adapter
setCodeType("QR_CODE")
scanCodeButton.setOnClickListener { scanCodeButton.setOnClickListener {
val options = ScanOptions() val options = ScanOptions()
@@ -61,10 +67,50 @@ class AddCardActivity : AppCompatActivity() {
val cardValue = cardValueInput.text.toString() val cardValue = cardValueInput.text.toString()
val cardCodeType = BarcodeFormat.valueOf(cardCodeTypeSelector.selectedItem.toString()) val cardCodeType = BarcodeFormat.valueOf(cardCodeTypeSelector.selectedItem.toString())
when (action) {
EditCardAction.ADD -> {
db.addCard(cardName, cardValue, cardCodeType) db.addCard(cardName, cardValue, cardCodeType)
finish() 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) { private fun setCodeType(codeTypeString: String) {
@@ -14,7 +14,6 @@ import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsCompat
import com.google.android.material.button.MaterialButton import com.google.android.material.button.MaterialButton
import kotlinx.serialization.json.Json import kotlinx.serialization.json.Json
import org.w3c.dom.Text
class MainActivity : AppCompatActivity() { class MainActivity : AppCompatActivity() {
private lateinit var cardsList: LinearLayout private lateinit var cardsList: LinearLayout
@@ -37,7 +36,11 @@ class MainActivity : AppCompatActivity() {
val syncWithWearOSButton: Button = findViewById(R.id.syncWithWearOSButton) val syncWithWearOSButton: Button = findViewById(R.id.syncWithWearOSButton)
addCardButton.setOnClickListener { addCardButton.setOnClickListener {
startActivity(Intent(this, AddCardActivity::class.java)) val intent = Intent(this, EditCardActivity::class.java)
intent.putExtra("action", EditCardAction.ADD.name)
startActivity(intent)
} }
syncWithWearOSButton.setOnClickListener { syncWithWearOSButton.setOnClickListener {
@@ -101,10 +104,21 @@ class MainActivity : AppCompatActivity() {
button.setOnLongClickListener { view -> button.setOnLongClickListener { view ->
val popup = PopupMenu(this, view) val popup = PopupMenu(this, view)
popup.menu.add("Edit")
popup.menu.add("Remove") popup.menu.add("Remove")
popup.setOnMenuItemClickListener { menuItem -> popup.setOnMenuItemClickListener { menuItem ->
when (menuItem.title) { when (menuItem.title) {
"Edit" -> {
val intent = Intent(this, EditCardActivity::class.java)
intent.putExtra("action", EditCardAction.EDIT.name)
intent.putExtra("cardId", card.id)
startActivity(intent)
true
}
"Remove" -> { "Remove" -> {
db.removeCard(card.id) db.removeCard(card.id)
renderCards() renderCards()
@@ -46,12 +46,11 @@ class ShowCardActivity : AppCompatActivity() {
if (cardInfo == null) { if (cardInfo == null) {
Toast.makeText(this, "cardInfo is null", Toast.LENGTH_LONG).show() Toast.makeText(this, "cardInfo is null", Toast.LENGTH_LONG).show()
return return
} }
val cardCodeView: ImageView = findViewById(R.id.cardCodeView) val cardCodeView: ImageView = findViewById(R.id.cardCodeView)
val cardNameElement: TextView = findViewById(R.id.cardName) val cardNameElement: TextView = findViewById(R.id.editCardActionLabel)
cardNameElement.text = cardInfo.name cardNameElement.text = cardInfo.name
@@ -5,7 +5,7 @@
android:id="@+id/main" android:id="@+id/main"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context=".AddCardActivity"> tools:context=".EditCardActivity">
<androidx.appcompat.widget.Toolbar <androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar2" android:id="@+id/toolbar2"
@@ -19,11 +19,11 @@
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<TextView <TextView
android:id="@+id/cardName" android:id="@+id/editCardActionLabel"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="16dp" android:layout_marginStart="16dp"
android:text="Adding card" android:text="Action"
android:textColor="@color/text_primary" android:textColor="@color/text_primary"
android:textSize="24sp" android:textSize="24sp"
app:layout_constraintBottom_toBottomOf="@+id/toolbar2" app:layout_constraintBottom_toBottomOf="@+id/toolbar2"
@@ -5,7 +5,7 @@
android:id="@+id/main" android:id="@+id/main"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context=".AddCardActivity"> tools:context=".EditCardActivity">
<androidx.appcompat.widget.Toolbar <androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar2" android:id="@+id/toolbar2"
@@ -19,7 +19,7 @@
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<TextView <TextView
android:id="@+id/cardName" android:id="@+id/editCardActionLabel"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="16dp" android:layout_marginStart="16dp"