From a5e25d3c19dc5c2f89c6e5dea89985db1bd0a4e4 Mon Sep 17 00:00:00 2001 From: Omni Devel Date: Wed, 10 Jun 2026 11:50:09 +0300 Subject: [PATCH] feat: added editing cards feature --- mobile/src/main/AndroidManifest.xml | 2 +- .../main/java/ru/omni_devel/cards/CardInfo.kt | 5 ++ .../main/java/ru/omni_devel/cards/DbHelper.kt | 14 +++++ ...AddCardActivity.kt => EditCardActivity.kt} | 56 +++++++++++++++++-- .../java/ru/omni_devel/cards/MainActivity.kt | 18 +++++- .../ru/omni_devel/cards/ShowCardActivity.kt | 3 +- ...ty_add_card.xml => activity_edit_card.xml} | 6 +- .../main/res/layout/activity_show_card.xml | 4 +- 8 files changed, 93 insertions(+), 15 deletions(-) rename mobile/src/main/java/ru/omni_devel/cards/{AddCardActivity.kt => EditCardActivity.kt} (61%) rename mobile/src/main/res/layout/{activity_add_card.xml => activity_edit_card.xml} (96%) diff --git a/mobile/src/main/AndroidManifest.xml b/mobile/src/main/AndroidManifest.xml index b3abf57..62bae62 100644 --- a/mobile/src/main/AndroidManifest.xml +++ b/mobile/src/main/AndroidManifest.xml @@ -16,7 +16,7 @@ android:screenOrientation="portrait" android:exported="false" /> { val db = this.readableDatabase diff --git a/mobile/src/main/java/ru/omni_devel/cards/AddCardActivity.kt b/mobile/src/main/java/ru/omni_devel/cards/EditCardActivity.kt similarity index 61% rename from mobile/src/main/java/ru/omni_devel/cards/AddCardActivity.kt rename to mobile/src/main/java/ru/omni_devel/cards/EditCardActivity.kt index 59f290e..702bb16 100644 --- a/mobile/src/main/java/ru/omni_devel/cards/AddCardActivity.kt +++ b/mobile/src/main/java/ru/omni_devel/cards/EditCardActivity.kt @@ -1,10 +1,13 @@ 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 @@ -13,7 +16,7 @@ import com.google.zxing.BarcodeFormat import com.journeyapps.barcodescanner.ScanContract import com.journeyapps.barcodescanner.ScanOptions -class AddCardActivity : AppCompatActivity() { +class EditCardActivity : AppCompatActivity() { private lateinit var db: DbHelper private val barcodeLauncher = registerForActivityResult(ScanContract()) { result -> @@ -27,15 +30,19 @@ class AddCardActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() - setContentView(R.layout.activity_add_card) + 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) @@ -46,7 +53,6 @@ class AddCardActivity : AppCompatActivity() { val adapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, options) adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) cardCodeTypeSelector.adapter = adapter - setCodeType("QR_CODE") scanCodeButton.setOnClickListener { val options = ScanOptions() @@ -61,9 +67,49 @@ class AddCardActivity : AppCompatActivity() { val cardValue = cardValueInput.text.toString() val cardCodeType = BarcodeFormat.valueOf(cardCodeTypeSelector.selectedItem.toString()) - db.addCard(cardName, cardValue, cardCodeType) + when (action) { + EditCardAction.ADD -> { + 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) + } } } diff --git a/mobile/src/main/java/ru/omni_devel/cards/MainActivity.kt b/mobile/src/main/java/ru/omni_devel/cards/MainActivity.kt index 90c96f9..3b835ed 100644 --- a/mobile/src/main/java/ru/omni_devel/cards/MainActivity.kt +++ b/mobile/src/main/java/ru/omni_devel/cards/MainActivity.kt @@ -14,7 +14,6 @@ import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat import com.google.android.material.button.MaterialButton import kotlinx.serialization.json.Json -import org.w3c.dom.Text class MainActivity : AppCompatActivity() { private lateinit var cardsList: LinearLayout @@ -37,7 +36,11 @@ class MainActivity : AppCompatActivity() { val syncWithWearOSButton: Button = findViewById(R.id.syncWithWearOSButton) 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 { @@ -101,10 +104,21 @@ class MainActivity : AppCompatActivity() { button.setOnLongClickListener { view -> val popup = PopupMenu(this, view) + popup.menu.add("Edit") popup.menu.add("Remove") popup.setOnMenuItemClickListener { menuItem -> 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" -> { db.removeCard(card.id) renderCards() diff --git a/mobile/src/main/java/ru/omni_devel/cards/ShowCardActivity.kt b/mobile/src/main/java/ru/omni_devel/cards/ShowCardActivity.kt index 401a00b..1eb2d67 100644 --- a/mobile/src/main/java/ru/omni_devel/cards/ShowCardActivity.kt +++ b/mobile/src/main/java/ru/omni_devel/cards/ShowCardActivity.kt @@ -46,12 +46,11 @@ class ShowCardActivity : AppCompatActivity() { if (cardInfo == null) { Toast.makeText(this, "cardInfo is null", Toast.LENGTH_LONG).show() - return } 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 diff --git a/mobile/src/main/res/layout/activity_add_card.xml b/mobile/src/main/res/layout/activity_edit_card.xml similarity index 96% rename from mobile/src/main/res/layout/activity_add_card.xml rename to mobile/src/main/res/layout/activity_edit_card.xml index cd1e288..bbefaf4 100644 --- a/mobile/src/main/res/layout/activity_add_card.xml +++ b/mobile/src/main/res/layout/activity_edit_card.xml @@ -5,7 +5,7 @@ android:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".AddCardActivity"> + tools:context=".EditCardActivity"> + tools:context=".EditCardActivity">