initial commit

This commit is contained in:
2026-06-09 12:27:04 +03:00
commit 0e9cbcccfe
67 changed files with 1797 additions and 0 deletions
@@ -0,0 +1,48 @@
package ru.omni_devel.cards
import android.os.Bundle
import android.widget.ArrayAdapter
import android.widget.Button
import android.widget.EditText
import android.widget.Spinner
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
class AddCardActivity : AppCompatActivity() {
private lateinit var db: DbHelper
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContentView(R.layout.activity_add_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
}
db = DbHelper(this, null)
val cardNameInput: EditText = findViewById(R.id.cardNameInput)
val cardValueInput: EditText = findViewById(R.id.cardValueInput)
val cardCodeTypeSelector: Spinner = findViewById(R.id.cardCodeTypeSelector)
val saveCardButton: Button = findViewById(R.id.saveCardButton)
val options = CodeType.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
saveCardButton.setOnClickListener {
val cardName = cardNameInput.text.toString()
val cardValue = cardValueInput.text.toString()
val cardCodeType = CodeType.valueOf(cardCodeTypeSelector.selectedItem.toString())
db.addCard(cardName, cardValue, cardCodeType)
finish()
}
}
}
@@ -0,0 +1,13 @@
package ru.omni_devel.cards
enum class CodeType {
QR,
BAR,
}
class CardInfo (
val id: Int,
val name: String,
val codeValue: String,
val codeType: CodeType,
)
@@ -0,0 +1,55 @@
package ru.omni_devel.cards
import android.content.ContentValues
import android.content.Context
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper
class DbHelper(val context: Context, val factory: SQLiteDatabase.CursorFactory?) : SQLiteOpenHelper(context, "omni_cards", factory, 1) {
override fun onCreate(db: SQLiteDatabase?) {
db!!.execSQL("CREATE TABLE IF NOT EXISTS cards (id SERIAL PRIMARY KEY, name TEXT, codeType TEXT, codeValue TEXT)")
}
override fun onUpgrade(
db: SQLiteDatabase?,
p1: Int,
p2: Int
) {
db!!.execSQL("DROP TABLE IF EXISTS cards")
}
fun addCard(name: String, codeValue: String, codeType: CodeType) {
val values = ContentValues()
values.put("name", name)
values.put("codeValue", codeValue)
values.put("codeType", codeType.name)
val db = this.writableDatabase
db.insert("cards", null, values)
db.close()
}
fun getCards(): List<CardInfo> {
val db = this.readableDatabase
val cursor = db.rawQuery("SELECT * FROM cards", null)
val cards = mutableListOf<CardInfo>()
while (cursor.moveToNext()) {
cards.add(CardInfo(
id = cursor.getInt(cursor.getColumnIndexOrThrow("id")),
name = cursor.getString(cursor.getColumnIndexOrThrow("name")),
codeType = CodeType.valueOf(cursor.getString(cursor.getColumnIndexOrThrow("codeType"))),
codeValue = cursor.getString(cursor.getColumnIndexOrThrow("codeValue"))
))
}
cursor.close()
db.close()
return cards
}
}
@@ -0,0 +1,78 @@
package ru.omni_devel.cards
import android.content.Intent
import android.os.Bundle
import android.widget.Button
import android.widget.LinearLayout
import android.widget.TextView
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.google.android.material.button.MaterialButton
import org.w3c.dom.Text
class MainActivity : AppCompatActivity() {
private lateinit var cardsList: LinearLayout
private lateinit var db: DbHelper
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContentView(R.layout.activity_main)
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
}
db = DbHelper(this, null)
cardsList = findViewById(R.id.cardsList)
val addCardButton: Button = findViewById(R.id.addCardButton)
addCardButton.setOnClickListener {
startActivity(Intent(this, AddCardActivity::class.java))
}
}
override fun onResume() {
super.onResume()
renderCards()
}
private fun renderCards() {
val cards = db.getCards()
cardsList.removeAllViews()
if (cards.isEmpty()) {
val text = TextView(this)
val params = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT
)
text.text = "Add a card to get started"
text.layoutParams = params
cardsList.addView(text)
} else {
for (card in cards) {
val button = MaterialButton(this)
val params = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT
)
params.setMargins(16, 4, 16, 4)
button.text = card.name
button.layoutParams = params
button.cornerRadius = (12 * resources.displayMetrics.density).toInt()
cardsList.addView(button)
}
}
}
}