From 50da2955e8ec865ef0e53436375e876053d63978 Mon Sep 17 00:00:00 2001 From: leca Date: Mon, 16 Sep 2024 03:00:34 +0300 Subject: [PATCH] Some UI --- app/src/main/AndroidManifest.xml | 2 +- ...oductFragment.kt => AddProductFragment.kt} | 52 ++++++++++++--- .../DBStorageController.kt | 39 ++++++++++++ .../MainActivity.kt | 38 +++++++++-- ...econdFragment.kt => MainScreenFragment.kt} | 2 +- .../barcodescannerforemployees/Parser.kt | 1 + .../StorageController.kt | 28 --------- .../StorageFragment.kt | 27 ++++++++ .../main/res/layout/add_product_fragment.xml | 63 +++++++++++++++---- app/src/main/res/layout/fragment_second.xml | 2 +- app/src/main/res/layout/fragment_storage.xml | 12 ++++ app/src/main/res/navigation/nav_graph.xml | 19 +++--- app/src/main/res/values/strings.xml | 5 ++ 13 files changed, 227 insertions(+), 63 deletions(-) rename app/src/main/java/org/foxarmy/barcodescannerforemployees/{addProductFragment.kt => AddProductFragment.kt} (53%) create mode 100644 app/src/main/java/org/foxarmy/barcodescannerforemployees/DBStorageController.kt rename app/src/main/java/org/foxarmy/barcodescannerforemployees/{SecondFragment.kt => MainScreenFragment.kt} (96%) delete mode 100644 app/src/main/java/org/foxarmy/barcodescannerforemployees/StorageController.kt create mode 100644 app/src/main/java/org/foxarmy/barcodescannerforemployees/StorageFragment.kt create mode 100644 app/src/main/res/layout/fragment_storage.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7109216..243c2f8 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,7 +1,7 @@ - + { + if (resultCode == Activity.RESULT_OK && data != null) { + binding.imageView.setImageBitmap(data.extras?.get("data") as Bitmap) + } + } + } + } + + val requestPermissionLauncher = registerForActivityResult( + ActivityResultContracts.RequestPermission() + ) { isGranted -> + if (isGranted) { + val cameraIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) + startActivityForResult(cameraIntent, 200) + } else { + Toast.makeText( + requireContext(), + "I need permission for camera in order to take a picture!", + Toast.LENGTH_LONG + ).show() + } + } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + binding.takePictureButton.setOnClickListener { + requestPermissionLauncher.launch(android.Manifest.permission.CAMERA) + } + binding.scanButton.setOnClickListener { -// findNavController().navigate(R.id.action_FirstFragment_to_SecondFragment) -// Toast.makeText(requireContext(), "Test", Toast.LENGTH_LONG).show() val options = GmsBarcodeScannerOptions.Builder() .setBarcodeFormats( - Barcode.FORMAT_EAN_13) + Barcode.FORMAT_EAN_13 + ) .build() val scanner = GmsBarcodeScanning.getClient(requireContext()) scanner.startScan() .addOnSuccessListener { barcode -> - // Task completed successfully - //Toast.makeText(requireContext(), barcode.rawValue, Toast.LENGTH_LONG).show() binding.productName.setText(barcode.rawValue) } .addOnFailureListener { e -> - Toast.makeText(requireContext(), "Failed to scan barcode. Please, try again", Toast.LENGTH_LONG).show() + Toast.makeText( + requireContext(), + "Failed to scan barcode. Please, try again or enter data manually", + Toast.LENGTH_LONG + ).show() } } } diff --git a/app/src/main/java/org/foxarmy/barcodescannerforemployees/DBStorageController.kt b/app/src/main/java/org/foxarmy/barcodescannerforemployees/DBStorageController.kt new file mode 100644 index 0000000..45ca8ad --- /dev/null +++ b/app/src/main/java/org/foxarmy/barcodescannerforemployees/DBStorageController.kt @@ -0,0 +1,39 @@ +package org.foxarmy.barcodescannerforemployees + +import android.content.Context +import android.database.sqlite.SQLiteDatabase +import android.database.sqlite.SQLiteOpenHelper +import android.provider.BaseColumns + +object ProductContract { + object ProductEntry :BaseColumns { + const val TABLE_NAME = "products" + const val PRODUCT_NAME = "name" + const val PRODUCT_NET_WEIGHT = "net_weight" + const val IMAGE_FILENAME = "image_filename" + } +} + +const val SQL_CREATE_ENTRIES = + "CREATE TABLE ${ProductContract.ProductEntry.TABLE_NAME} (" + + "${BaseColumns._ID} INTEGER PRIMARY KEY," + + "${ProductContract.ProductEntry.PRODUCT_NAME} TEXT," + + "${ProductContract.ProductEntry.PRODUCT_NET_WEIGHT} TEXT" + + "${ProductContract.ProductEntry.IMAGE_FILENAME} TEXT)" + +class DBStorageController(context: Context) : SQLiteOpenHelper (context, DATABASE_NAME, null, DATABASE_VERSION) { + + override fun onCreate(db: SQLiteDatabase) { + db.execSQL(SQL_CREATE_ENTRIES) + } + + override fun onUpgrade(p0: SQLiteDatabase?, p1: Int, p2: Int) { + TODO("Not yet implemented") + } + + companion object { + // If you change the database schema, you must increment the database version. + const val DATABASE_VERSION = 1 + const val DATABASE_NAME = "FeedReader.db" + } +} \ No newline at end of file diff --git a/app/src/main/java/org/foxarmy/barcodescannerforemployees/MainActivity.kt b/app/src/main/java/org/foxarmy/barcodescannerforemployees/MainActivity.kt index 026da17..21a23e7 100644 --- a/app/src/main/java/org/foxarmy/barcodescannerforemployees/MainActivity.kt +++ b/app/src/main/java/org/foxarmy/barcodescannerforemployees/MainActivity.kt @@ -1,15 +1,14 @@ package org.foxarmy.barcodescannerforemployees import android.os.Bundle -import com.google.android.material.snackbar.Snackbar +import android.provider.BaseColumns +import android.view.Menu +import android.view.MenuItem import androidx.appcompat.app.AppCompatActivity import androidx.navigation.findNavController import androidx.navigation.ui.AppBarConfiguration import androidx.navigation.ui.navigateUp import androidx.navigation.ui.setupActionBarWithNavController -import android.view.Menu -import android.view.MenuItem -import android.widget.Toast import org.foxarmy.barcodescannerforemployees.databinding.ActivityMainBinding class MainActivity : AppCompatActivity() { @@ -20,6 +19,34 @@ class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + val dbHelper = DBStorageController(applicationContext) +// val db = dbHelper.writableDatabase +// +// val values = ContentValues().apply { +// put(ProductContract.ProductEntry.PRODUCT_NAME, "Имя продукта") +// put(ProductContract.ProductEntry.PRODUCT_NET_WEIGHT, "0г") +// put(ProductContract.ProductEntry.IMAGE_FILENAME, "image.png") +// } +// +// val netRowId = db?.insert(ProductContract.ProductEntry.TABLE_NAME, null, values) + + val db2 = dbHelper.readableDatabase + + val projection = arrayOf(BaseColumns._ID, ProductContract.ProductEntry.PRODUCT_NAME, ProductContract.ProductEntry.PRODUCT_NET_WEIGHT, ProductContract.ProductEntry.IMAGE_FILENAME) + + val selection = "${ProductContract.ProductEntry.PRODUCT_NAME} = ?" + val selectionArgs = arrayOf("Имя продукта") + + val cursor = db2.query( + ProductContract.ProductEntry.TABLE_NAME, + null, + selection, + selectionArgs, + null, + null, + null + ) + binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) @@ -33,7 +60,8 @@ class MainActivity : AppCompatActivity() { // Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) // .setAction("Action", null) // .setAnchorView(R.id.add_product_fab).show() - Toast.makeText(applicationContext, "Test", Toast.LENGTH_SHORT) +// Toast.makeText(applicationContext, "Test", Toast.LENGTH_SHORT).show() + navController.navigate(R.id.AddProductFragment) } } diff --git a/app/src/main/java/org/foxarmy/barcodescannerforemployees/SecondFragment.kt b/app/src/main/java/org/foxarmy/barcodescannerforemployees/MainScreenFragment.kt similarity index 96% rename from app/src/main/java/org/foxarmy/barcodescannerforemployees/SecondFragment.kt rename to app/src/main/java/org/foxarmy/barcodescannerforemployees/MainScreenFragment.kt index 0d087cb..a6e63fc 100644 --- a/app/src/main/java/org/foxarmy/barcodescannerforemployees/SecondFragment.kt +++ b/app/src/main/java/org/foxarmy/barcodescannerforemployees/MainScreenFragment.kt @@ -11,7 +11,7 @@ import org.foxarmy.barcodescannerforemployees.databinding.FragmentSecondBinding /** * A simple [Fragment] subclass as the second destination in the navigation. */ -class SecondFragment : Fragment() { +class MainScreenFragment : Fragment() { private var _binding: FragmentSecondBinding? = null diff --git a/app/src/main/java/org/foxarmy/barcodescannerforemployees/Parser.kt b/app/src/main/java/org/foxarmy/barcodescannerforemployees/Parser.kt index 12fe481..d30dc4a 100644 --- a/app/src/main/java/org/foxarmy/barcodescannerforemployees/Parser.kt +++ b/app/src/main/java/org/foxarmy/barcodescannerforemployees/Parser.kt @@ -41,4 +41,5 @@ fun main () { val p = Parser("""\""", """\<\/table\>""", """[ёЁ\u0401\u0451\u0410-\u044f\d\w\s]{16,}""") p.parse(Requester("https://barcode-list.ru", "barcode/RU/Поиск.htm?barcode=4680036915828", ).request("4680036915828")) // println(Requester("https://barcode-list.ru", "barcode/RU/Поиск.htm?barcode=4680036915828", ).request("4680036915828")) + } \ No newline at end of file diff --git a/app/src/main/java/org/foxarmy/barcodescannerforemployees/StorageController.kt b/app/src/main/java/org/foxarmy/barcodescannerforemployees/StorageController.kt deleted file mode 100644 index be757ba..0000000 --- a/app/src/main/java/org/foxarmy/barcodescannerforemployees/StorageController.kt +++ /dev/null @@ -1,28 +0,0 @@ -package org.foxarmy.barcodescannerforemployees - -import android.content.Context -import android.provider.BaseColumns - -object ProductContract { - object ProductEntry :BaseColumns { - const val TABLE_NAME = "products" - const val PRODUCT_NAME = "name" - const val PRODUCT_NET_WEIGHT = "net_weight" - const val IMAGE_FILENAME = "image_filename" - } -} - -class StorageController(context: Context) { - val context = context - - fun initStorage() { - val productContract = ProductContract - val SQL_CREATE_ENTRIES = - "CREATE TABLE ${ProductContract.ProductEntry.TABLE_NAME} (" + - "${BaseColumns._ID} INTEGER PRIMARY KEY," + - "${ProductContract.ProductEntry.PRODUCT_NAME} TEXT," + - "${ProductContract.ProductEntry.PRODUCT_NET_WEIGHT} TEXT" + - "${ProductContract.ProductEntry.IMAGE_FILENAME} TEXT)" - - } -} \ No newline at end of file diff --git a/app/src/main/java/org/foxarmy/barcodescannerforemployees/StorageFragment.kt b/app/src/main/java/org/foxarmy/barcodescannerforemployees/StorageFragment.kt new file mode 100644 index 0000000..b550406 --- /dev/null +++ b/app/src/main/java/org/foxarmy/barcodescannerforemployees/StorageFragment.kt @@ -0,0 +1,27 @@ +package org.foxarmy.barcodescannerforemployees + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment + +/** + * A simple [Fragment] subclass. + * Use the [StorageFragment.newInstance] factory method to + * create an instance of this fragment. + */ +class StorageFragment : Fragment() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + } + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_storage, container, false) + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/add_product_fragment.xml b/app/src/main/res/layout/add_product_fragment.xml index 87dbd13..7744486 100644 --- a/app/src/main/res/layout/add_product_fragment.xml +++ b/app/src/main/res/layout/add_product_fragment.xml @@ -5,29 +5,66 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".addProductFragment"> + tools:context=".AddProductFragment">