added ability to delete abstract products
This commit is contained in:
parent
609544c387
commit
9d52a81923
|
@ -1,5 +1,11 @@
|
|||
package org.foxarmy.barcodescannerforemployees
|
||||
|
||||
class AbstractProduct constructor(name:String, netWeight: Double, imageFile: String, type: Int) {
|
||||
class AbstractProduct(
|
||||
public var id: Int,
|
||||
public var name: String,
|
||||
public var netWeight: Double,
|
||||
public var imageHash: String,
|
||||
public var category: Int
|
||||
) {
|
||||
|
||||
}
|
|
@ -4,6 +4,8 @@ import android.content.Context
|
|||
import android.database.sqlite.SQLiteDatabase
|
||||
import android.database.sqlite.SQLiteOpenHelper
|
||||
import android.provider.BaseColumns
|
||||
import android.util.Log
|
||||
import java.io.File
|
||||
|
||||
object ProductContract {
|
||||
object ProductEntry : BaseColumns {
|
||||
|
@ -57,8 +59,44 @@ class DBStorageController(context: Context) : SQLiteOpenHelper(context, DATABASE
|
|||
TODO("Not yet implemented")
|
||||
}
|
||||
|
||||
public fun eraseAbstractProduct(db: SQLiteDatabase, id: Int, context: Context) {
|
||||
val projection = arrayOf(BaseColumns._ID,
|
||||
ProductContract.ProductEntry.IMAGE_FILENAME
|
||||
)
|
||||
|
||||
// val cursor = db.query(ProductContract.ProductEntry.TABLE_NAME, projection, null, , null, null, null)
|
||||
val selection = "${BaseColumns._ID} = ?"
|
||||
val selectionArgs = arrayOf(id.toString())
|
||||
val cursor = db.query(
|
||||
ProductContract.ProductEntry.TABLE_NAME,
|
||||
projection,
|
||||
selection,
|
||||
selectionArgs,
|
||||
null,
|
||||
null,
|
||||
null
|
||||
)
|
||||
// val cursor = db.rawQuery("SELECT image_filename FROM ${ProductContract.ProductEntry.TABLE_NAME} WHERE ${BaseColumns._ID}=$id", null)
|
||||
var imageHash: String = ""
|
||||
|
||||
with (cursor) {
|
||||
while(moveToNext()) {
|
||||
val productId = getInt(getColumnIndexOrThrow(BaseColumns._ID))
|
||||
val productImageHash = getString(getColumnIndexOrThrow(ProductContract.ProductEntry.IMAGE_FILENAME))
|
||||
imageHash = productImageHash
|
||||
}
|
||||
}
|
||||
Log.d("QWERTYUIOP", "Deleting image with hash: $imageHash and $id")
|
||||
val picturesDir = File(context.filesDir, "pictures")
|
||||
val thumbnailsDir = File(context.cacheDir, "thumbnails")
|
||||
|
||||
File(picturesDir, "$imageHash.png").delete()
|
||||
File(thumbnailsDir, "$imageHash.webp").delete()
|
||||
Log.d("QWERTYUIOP", BaseColumns._ID + "=" + id)
|
||||
db.delete(ProductContract.ProductEntry.TABLE_NAME, BaseColumns._ID + "=" + id, null)
|
||||
}
|
||||
|
||||
companion object {
|
||||
// If you change the database schema, you must increment the database version.
|
||||
const val DATABASE_VERSION = 1
|
||||
const val DATABASE_NAME = "database.db"
|
||||
}
|
||||
|
|
|
@ -2,16 +2,22 @@ package org.foxarmy.barcodescannerforemployees.activities
|
|||
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.view.children
|
||||
import androidx.gridlayout.widget.GridLayout
|
||||
import androidx.navigation.findNavController
|
||||
import androidx.navigation.ui.AppBarConfiguration
|
||||
import androidx.navigation.ui.navigateUp
|
||||
import androidx.navigation.ui.setupActionBarWithNavController
|
||||
import org.foxarmy.barcodescannerforemployees.DBStorageController
|
||||
import org.foxarmy.barcodescannerforemployees.R
|
||||
import org.foxarmy.barcodescannerforemployees.databinding.ActivityStorageBinding
|
||||
import org.foxarmy.barcodescannerforemployees.fragments.StorageFragment
|
||||
import org.foxarmy.barcodescannerforemployees.views.AbstractProductView
|
||||
|
||||
class StorageActivity : AppCompatActivity() {
|
||||
|
||||
|
@ -47,6 +53,21 @@ class StorageActivity : AppCompatActivity() {
|
|||
R.id.action_settings -> {
|
||||
true
|
||||
}
|
||||
R.id.action_delete -> {
|
||||
// if there's no selected items, write a toast about it, otherwise delete those items.
|
||||
val storageFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment_content_storage)?.childFragmentManager!!.fragments[0] as StorageFragment
|
||||
val amountOfViews = storageFragment.view?.findViewById<GridLayout>(R.id.contentGridLayout)?.childCount
|
||||
|
||||
for (view: AbstractProductView in storageFragment.view?.findViewById<GridLayout>(R.id.contentGridLayout)?.children!!.iterator() as Iterator<AbstractProductView>) {
|
||||
val db = DBStorageController(this)
|
||||
if (view.isProductSelected) {
|
||||
db.eraseAbstractProduct(db.writableDatabase , view.product.id, this)
|
||||
Log.d("QWERTYUIOP", "Removing ${view.product.id}")
|
||||
}
|
||||
}
|
||||
storageFragment.updateContent()
|
||||
true
|
||||
}
|
||||
else -> super.onOptionsItemSelected(item)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,7 +2,6 @@ package org.foxarmy.barcodescannerforemployees.fragments
|
|||
|
||||
import android.os.Bundle
|
||||
import android.provider.BaseColumns
|
||||
import android.util.Log
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
|
@ -18,6 +17,8 @@ import org.foxarmy.barcodescannerforemployees.views.AbstractProductView
|
|||
*/
|
||||
class StorageFragment : Fragment() {
|
||||
|
||||
public var test_value = 1
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
}
|
||||
|
@ -33,10 +34,10 @@ class StorageFragment : Fragment() {
|
|||
override fun onResume() {
|
||||
super.onResume()
|
||||
|
||||
refillWithContent()
|
||||
updateContent()
|
||||
}
|
||||
|
||||
public fun refillWithContent() {
|
||||
public fun updateContent() {
|
||||
|
||||
val grv = getView()?.findViewById<GridLayout>(R.id.contentGridLayout)
|
||||
grv?.removeAllViews()
|
||||
|
@ -52,26 +53,21 @@ class StorageFragment : Fragment() {
|
|||
|
||||
with (cursor) {
|
||||
while(moveToNext()) {
|
||||
val productId = getInt(getColumnIndexOrThrow(BaseColumns._ID))
|
||||
val productName = getString(getColumnIndexOrThrow(ProductContract.ProductEntry.PRODUCT_NAME))
|
||||
val netWeight = getDouble(getColumnIndexOrThrow(ProductContract.ProductEntry.PRODUCT_NET_WEIGHT))
|
||||
val productImageHash = getString(getColumnIndexOrThrow(ProductContract.ProductEntry.IMAGE_FILENAME))
|
||||
|
||||
val product = AbstractProduct(productId, productName, netWeight, productImageHash, 1)
|
||||
|
||||
generateThumbnailForImage(context!!, productImageHash)
|
||||
|
||||
val abstractProduct = AbstractProductView(
|
||||
requireActivity(),
|
||||
requireContext(),
|
||||
productImageHash,
|
||||
productName,
|
||||
netWeight,
|
||||
1
|
||||
product
|
||||
)
|
||||
grv?.addView(abstractProduct)
|
||||
|
||||
abstractProduct.setOnClickListener {
|
||||
Log.d("QWERTYUIOP", "Clicked view")
|
||||
}
|
||||
// getView()?.findViewById<GridView>(R.id.contentGridLayout)?
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -79,6 +75,6 @@ class StorageFragment : Fragment() {
|
|||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
refillWithContent()
|
||||
updateContent()
|
||||
}
|
||||
}
|
|
@ -4,7 +4,6 @@ import android.app.Activity
|
|||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.LayoutInflater
|
||||
import android.widget.ImageView
|
||||
import android.widget.LinearLayout
|
||||
|
@ -12,6 +11,7 @@ import android.widget.TextView
|
|||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.content.ContextCompat.startActivity
|
||||
import org.foxarmy.barcodescannerforemployees.AbstractProduct
|
||||
import org.foxarmy.barcodescannerforemployees.R
|
||||
import org.foxarmy.barcodescannerforemployees.activities.FullscreenActivity
|
||||
import org.foxarmy.barcodescannerforemployees.getImageUri
|
||||
|
@ -24,9 +24,12 @@ class AbstractProductView: LinearLayout {
|
|||
private var netWeightField: TextView
|
||||
private var categoryField: TextView
|
||||
private var unitField: TextView
|
||||
public var product: AbstractProduct
|
||||
var isProductSelected = false
|
||||
|
||||
constructor(activity: Activity, context: Context, productImageHash: String, productName: String, netWeight: Double, category: Int) : super(context) {
|
||||
constructor(activity: Activity, context: Context, product: AbstractProduct) : super(context) {
|
||||
|
||||
this.product = product
|
||||
|
||||
val inflater:LayoutInflater = activity.layoutInflater
|
||||
inflater.inflate(R.layout.abstract_product_view, this)
|
||||
|
@ -40,14 +43,13 @@ class AbstractProductView: LinearLayout {
|
|||
|
||||
val thumbnailsDir = File(context.cacheDir, "thumbnails")
|
||||
thumbnailsDir.mkdirs()
|
||||
val imageUri = getImageUri(activity, File(thumbnailsDir, "$productImageHash.webp"))
|
||||
val imageUri = getImageUri(activity, File(thumbnailsDir, "${product.imageHash}.webp"))
|
||||
productPicture.setImageURI(imageUri)
|
||||
productPicture.rotation = 90f
|
||||
productPicture.setOnClickListener {
|
||||
Log.d("QWERTYUIOP", productImageHash)
|
||||
val fullscreenIntent = Intent(activity, FullscreenActivity::class.java)
|
||||
val extras = Bundle()
|
||||
extras.putString("imagehash", productImageHash)
|
||||
extras.putString("imagehash", product.imageHash)
|
||||
fullscreenIntent.putExtras(extras)
|
||||
startActivity(context, fullscreenIntent, extras)
|
||||
}
|
||||
|
@ -56,8 +58,8 @@ class AbstractProductView: LinearLayout {
|
|||
|
||||
}
|
||||
|
||||
productNameField.text = productName
|
||||
netWeightField.text = netWeight.toString()
|
||||
productNameField.text = product.name
|
||||
netWeightField.text = product.netWeight.toString()
|
||||
|
||||
//TODO: category and units
|
||||
|
||||
|
|
|
@ -6,5 +6,5 @@
|
|||
android:title="@string/action_settings"
|
||||
android:orderInCategory="100"
|
||||
app:showAsAction="never"/>
|
||||
<item android:title="Delete item..." android:id="@+id/action_delete"/>
|
||||
<item android:id="@+id/action_delete" android:title="@string/delete_menu"/>
|
||||
</menu>
|
|
@ -53,4 +53,5 @@
|
|||
libero vel nunc consequat, quis tincidunt nisl eleifend. Cras bibendum enim a justo luctus vestibulum. Fusce
|
||||
dictum libero quis erat maximus, vitae volutpat diam dignissim.
|
||||
</string>
|
||||
<string name="delete_menu">Delete item(s)...</string>
|
||||
</resources>
|
Loading…
Reference in New Issue