some ui improvements
This commit is contained in:
parent
153506fc83
commit
1d7050c687
|
@ -3,6 +3,7 @@ package org.foxarmy.barcodescannerforemployees
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.ContextWrapper
|
import android.content.ContextWrapper
|
||||||
|
import android.content.SharedPreferences
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
import android.graphics.BitmapFactory
|
import android.graphics.BitmapFactory
|
||||||
import android.graphics.Matrix
|
import android.graphics.Matrix
|
||||||
|
@ -197,13 +198,7 @@ fun noInternetConnectionAvailableNotification(context: Context) {
|
||||||
exitProcess(0)
|
exitProcess(0)
|
||||||
}
|
}
|
||||||
.setNeutralButton(R.string.logout) { _, _ ->
|
.setNeutralButton(R.string.logout) { _, _ ->
|
||||||
val sharedPreferences = EncryptedSharedPreferences.create(
|
val sharedPreferences = getPreferences(context)
|
||||||
"sensitive",
|
|
||||||
MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC),
|
|
||||||
context,
|
|
||||||
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
|
|
||||||
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
|
|
||||||
)
|
|
||||||
|
|
||||||
sharedPreferences.edit().putString("token", "").apply()
|
sharedPreferences.edit().putString("token", "").apply()
|
||||||
sharedPreferences.edit().putString("server", "").apply()
|
sharedPreferences.edit().putString("server", "").apply()
|
||||||
|
@ -212,4 +207,14 @@ fun noInternetConnectionAvailableNotification(context: Context) {
|
||||||
exitProcess(0)
|
exitProcess(0)
|
||||||
}.show()
|
}.show()
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getPreferences(context: Context): SharedPreferences {
|
||||||
|
return EncryptedSharedPreferences.create(
|
||||||
|
"sensitive",
|
||||||
|
MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC),
|
||||||
|
context,
|
||||||
|
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
|
||||||
|
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
|
||||||
|
)
|
||||||
}
|
}
|
|
@ -4,8 +4,6 @@ import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.security.crypto.EncryptedSharedPreferences
|
|
||||||
import androidx.security.crypto.MasterKeys
|
|
||||||
import org.foxarmy.barcodescannerforemployees.Net
|
import org.foxarmy.barcodescannerforemployees.Net
|
||||||
import org.foxarmy.barcodescannerforemployees.R
|
import org.foxarmy.barcodescannerforemployees.R
|
||||||
import org.foxarmy.barcodescannerforemployees.databinding.ActivityAccountSettingsBinding
|
import org.foxarmy.barcodescannerforemployees.databinding.ActivityAccountSettingsBinding
|
||||||
|
@ -21,15 +19,7 @@ class AccountSettingsActivity : AppCompatActivity() {
|
||||||
|
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
|
|
||||||
val masterKeyAlias = MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC)
|
val sharedPreferences = org.foxarmy.barcodescannerforemployees.getPreferences(this)
|
||||||
|
|
||||||
val sharedPreferences = EncryptedSharedPreferences.create(
|
|
||||||
"sensitive",
|
|
||||||
masterKeyAlias,
|
|
||||||
applicationContext,
|
|
||||||
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
|
|
||||||
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
|
|
||||||
)
|
|
||||||
|
|
||||||
val net = Net()
|
val net = Net()
|
||||||
|
|
||||||
|
|
|
@ -17,8 +17,6 @@ import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.core.widget.addTextChangedListener
|
import androidx.core.widget.addTextChangedListener
|
||||||
import androidx.security.crypto.EncryptedSharedPreferences
|
|
||||||
import androidx.security.crypto.MasterKeys
|
|
||||||
import com.journeyapps.barcodescanner.ScanContract
|
import com.journeyapps.barcodescanner.ScanContract
|
||||||
import com.journeyapps.barcodescanner.ScanIntentResult
|
import com.journeyapps.barcodescanner.ScanIntentResult
|
||||||
import com.journeyapps.barcodescanner.ScanOptions
|
import com.journeyapps.barcodescanner.ScanOptions
|
||||||
|
@ -33,7 +31,6 @@ import java.io.FileOutputStream
|
||||||
import java.nio.file.Files
|
import java.nio.file.Files
|
||||||
import java.nio.file.StandardCopyOption
|
import java.nio.file.StandardCopyOption
|
||||||
import kotlin.concurrent.thread
|
import kotlin.concurrent.thread
|
||||||
import kotlin.math.abs
|
|
||||||
|
|
||||||
class AddAbstractProductActivity : AppCompatActivity() {
|
class AddAbstractProductActivity : AppCompatActivity() {
|
||||||
private lateinit var imageView: ImageView
|
private lateinit var imageView: ImageView
|
||||||
|
@ -66,13 +63,7 @@ class AddAbstractProductActivity : AppCompatActivity() {
|
||||||
|
|
||||||
setContentView(R.layout.fragment_add_abstract_product)
|
setContentView(R.layout.fragment_add_abstract_product)
|
||||||
|
|
||||||
sharedPreferences = EncryptedSharedPreferences.create(
|
sharedPreferences = getPreferences(this)
|
||||||
"sensitive",
|
|
||||||
MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC),
|
|
||||||
applicationContext,
|
|
||||||
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
|
|
||||||
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
|
|
||||||
)
|
|
||||||
|
|
||||||
val dbHelper = DBStorageController(this, sharedPreferences.getString("currentGroup", "offline")!!)
|
val dbHelper = DBStorageController(this, sharedPreferences.getString("currentGroup", "offline")!!)
|
||||||
DAO = AbstractProductDAO(dbHelper)
|
DAO = AbstractProductDAO(dbHelper)
|
||||||
|
|
|
@ -6,8 +6,6 @@ import android.os.Bundle
|
||||||
import android.widget.Button
|
import android.widget.Button
|
||||||
import android.widget.EditText
|
import android.widget.EditText
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.security.crypto.EncryptedSharedPreferences
|
|
||||||
import androidx.security.crypto.MasterKeys
|
|
||||||
import org.foxarmy.barcodescannerforemployees.Net
|
import org.foxarmy.barcodescannerforemployees.Net
|
||||||
import org.foxarmy.barcodescannerforemployees.R
|
import org.foxarmy.barcodescannerforemployees.R
|
||||||
import org.foxarmy.barcodescannerforemployees.database.CategoryDAO
|
import org.foxarmy.barcodescannerforemployees.database.CategoryDAO
|
||||||
|
@ -24,13 +22,7 @@ class AddCategoryActivity : Activity() {
|
||||||
|
|
||||||
setContentView(R.layout.activity_add_category)
|
setContentView(R.layout.activity_add_category)
|
||||||
|
|
||||||
sharedPreferences = EncryptedSharedPreferences.create(
|
sharedPreferences = org.foxarmy.barcodescannerforemployees.getPreferences(this)
|
||||||
"sensitive",
|
|
||||||
MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC),
|
|
||||||
applicationContext,
|
|
||||||
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
|
|
||||||
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
|
|
||||||
)
|
|
||||||
|
|
||||||
val dbHelper = DBStorageController(this, sharedPreferences.getString("currentGroup", "offline")!!)
|
val dbHelper = DBStorageController(this, sharedPreferences.getString("currentGroup", "offline")!!)
|
||||||
DAO = CategoryDAO(dbHelper)
|
DAO = CategoryDAO(dbHelper)
|
||||||
|
|
|
@ -13,8 +13,6 @@ import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.core.widget.addTextChangedListener
|
import androidx.core.widget.addTextChangedListener
|
||||||
import androidx.security.crypto.EncryptedSharedPreferences
|
|
||||||
import androidx.security.crypto.MasterKeys
|
|
||||||
import com.journeyapps.barcodescanner.ScanContract
|
import com.journeyapps.barcodescanner.ScanContract
|
||||||
import com.journeyapps.barcodescanner.ScanIntentResult
|
import com.journeyapps.barcodescanner.ScanIntentResult
|
||||||
import com.journeyapps.barcodescanner.ScanOptions
|
import com.journeyapps.barcodescanner.ScanOptions
|
||||||
|
@ -61,13 +59,7 @@ class AddProductActivity : AppCompatActivity() {
|
||||||
|
|
||||||
setContentView(R.layout.fragment_add_product)
|
setContentView(R.layout.fragment_add_product)
|
||||||
|
|
||||||
sharedPreferences = EncryptedSharedPreferences.create(
|
sharedPreferences = org.foxarmy.barcodescannerforemployees.getPreferences(this)
|
||||||
"sensitive",
|
|
||||||
MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC),
|
|
||||||
applicationContext,
|
|
||||||
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
|
|
||||||
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
|
|
||||||
)
|
|
||||||
|
|
||||||
val dbHelper = DBStorageController(this, sharedPreferences.getString("currentGroup", "offline")!!)
|
val dbHelper = DBStorageController(this, sharedPreferences.getString("currentGroup", "offline")!!)
|
||||||
productDAO = ProductDAO(dbHelper)
|
productDAO = ProductDAO(dbHelper)
|
||||||
|
|
|
@ -7,8 +7,6 @@ import android.os.Bundle
|
||||||
import android.widget.LinearLayout
|
import android.widget.LinearLayout
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.security.crypto.EncryptedSharedPreferences
|
|
||||||
import androidx.security.crypto.MasterKeys
|
|
||||||
import org.foxarmy.barcodescannerforemployees.R
|
import org.foxarmy.barcodescannerforemployees.R
|
||||||
import org.foxarmy.barcodescannerforemployees.database.DBStorageController
|
import org.foxarmy.barcodescannerforemployees.database.DBStorageController
|
||||||
import org.foxarmy.barcodescannerforemployees.database.ProductDAO
|
import org.foxarmy.barcodescannerforemployees.database.ProductDAO
|
||||||
|
@ -26,13 +24,7 @@ class ExpiryCalendarActivity : AppCompatActivity() {
|
||||||
|
|
||||||
setContentView(R.layout.fragment_expiry_dates)
|
setContentView(R.layout.fragment_expiry_dates)
|
||||||
|
|
||||||
sharedPreferences = EncryptedSharedPreferences.create(
|
sharedPreferences = org.foxarmy.barcodescannerforemployees.getPreferences(this)
|
||||||
"sensitive",
|
|
||||||
MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC),
|
|
||||||
applicationContext,
|
|
||||||
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
|
|
||||||
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
|
|
||||||
)
|
|
||||||
|
|
||||||
val dbHelper = DBStorageController(this, sharedPreferences.getString("currentGroup", "database")!!)
|
val dbHelper = DBStorageController(this, sharedPreferences.getString("currentGroup", "database")!!)
|
||||||
productDAO = ProductDAO(dbHelper)
|
productDAO = ProductDAO(dbHelper)
|
||||||
|
|
|
@ -15,10 +15,7 @@ import java.io.File
|
||||||
|
|
||||||
class FullscreenActivity : Activity() {
|
class FullscreenActivity : Activity() {
|
||||||
|
|
||||||
private lateinit var binding: ActivityFullscreenBinding
|
|
||||||
private lateinit var fullscreenImageView: ImageView
|
private lateinit var fullscreenImageView: ImageView
|
||||||
private lateinit var fullscreenContentControls: LinearLayout
|
|
||||||
private val hideHandler = Handler(Looper.myLooper()!!)
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
|
@ -4,8 +4,6 @@ import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.security.crypto.EncryptedSharedPreferences
|
|
||||||
import androidx.security.crypto.MasterKeys
|
|
||||||
import org.foxarmy.barcodescannerforemployees.Net
|
import org.foxarmy.barcodescannerforemployees.Net
|
||||||
import org.foxarmy.barcodescannerforemployees.databinding.ActivityGroupBinding
|
import org.foxarmy.barcodescannerforemployees.databinding.ActivityGroupBinding
|
||||||
import org.foxarmy.barcodescannerforemployees.noInternetConnectionAvailableNotification
|
import org.foxarmy.barcodescannerforemployees.noInternetConnectionAvailableNotification
|
||||||
|
@ -20,13 +18,7 @@ class GroupActivity : AppCompatActivity() {
|
||||||
binding = ActivityGroupBinding.inflate(layoutInflater)
|
binding = ActivityGroupBinding.inflate(layoutInflater)
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
|
|
||||||
val sharedPreferences = EncryptedSharedPreferences.create(
|
val sharedPreferences = org.foxarmy.barcodescannerforemployees.getPreferences(this)
|
||||||
"sensitive",
|
|
||||||
MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC),
|
|
||||||
applicationContext,
|
|
||||||
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
|
|
||||||
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
|
|
||||||
)
|
|
||||||
|
|
||||||
binding.createGroupButton.setOnClickListener {
|
binding.createGroupButton.setOnClickListener {
|
||||||
val groupName = binding.groupNameTextEdit.text.toString()
|
val groupName = binding.groupNameTextEdit.text.toString()
|
||||||
|
|
|
@ -5,8 +5,6 @@ import android.os.Bundle
|
||||||
import android.widget.ArrayAdapter
|
import android.widget.ArrayAdapter
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.security.crypto.EncryptedSharedPreferences
|
|
||||||
import androidx.security.crypto.MasterKeys
|
|
||||||
import org.foxarmy.barcodescannerforemployees.Net
|
import org.foxarmy.barcodescannerforemployees.Net
|
||||||
import org.foxarmy.barcodescannerforemployees.R
|
import org.foxarmy.barcodescannerforemployees.R
|
||||||
import org.foxarmy.barcodescannerforemployees.databinding.ActivityLoginBinding
|
import org.foxarmy.barcodescannerforemployees.databinding.ActivityLoginBinding
|
||||||
|
@ -26,13 +24,7 @@ class LoginActivity : AppCompatActivity() {
|
||||||
|
|
||||||
fillUpLanguagesSpinner()
|
fillUpLanguagesSpinner()
|
||||||
|
|
||||||
val sharedPreferences = EncryptedSharedPreferences.create(
|
val sharedPreferences = org.foxarmy.barcodescannerforemployees.getPreferences(this)
|
||||||
"sensitive",
|
|
||||||
MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC),
|
|
||||||
applicationContext,
|
|
||||||
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
|
|
||||||
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
|
|
||||||
)
|
|
||||||
|
|
||||||
binding.loginButton.setOnClickListener {
|
binding.loginButton.setOnClickListener {
|
||||||
val server = binding.serverTextEdit.text.toString()
|
val server = binding.serverTextEdit.text.toString()
|
||||||
|
|
|
@ -15,8 +15,6 @@ import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.drawerlayout.widget.DrawerLayout
|
import androidx.drawerlayout.widget.DrawerLayout
|
||||||
import androidx.security.crypto.EncryptedSharedPreferences
|
|
||||||
import androidx.security.crypto.MasterKeys
|
|
||||||
import androidx.viewpager.widget.ViewPager
|
import androidx.viewpager.widget.ViewPager
|
||||||
import com.google.android.material.navigation.NavigationView
|
import com.google.android.material.navigation.NavigationView
|
||||||
import org.foxarmy.barcodescannerforemployees.*
|
import org.foxarmy.barcodescannerforemployees.*
|
||||||
|
@ -44,6 +42,9 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
|
||||||
private var actionBarDrawerToggle: ActionBarDrawerToggle? = null
|
private var actionBarDrawerToggle: ActionBarDrawerToggle? = null
|
||||||
private lateinit var ws: WebSocketClient
|
private lateinit var ws: WebSocketClient
|
||||||
|
|
||||||
|
var selectionMode = false
|
||||||
|
private var selectedAmount = 0
|
||||||
|
|
||||||
private lateinit var sharedPreferences: SharedPreferences
|
private lateinit var sharedPreferences: SharedPreferences
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
@ -52,18 +53,18 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
|
||||||
binding = ActivityMainBinding.inflate(layoutInflater)
|
binding = ActivityMainBinding.inflate(layoutInflater)
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
|
|
||||||
sharedPreferences = EncryptedSharedPreferences.create(
|
sharedPreferences = getPreferences(this)
|
||||||
"sensitive",
|
|
||||||
MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC),
|
|
||||||
applicationContext,
|
|
||||||
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
|
|
||||||
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
|
|
||||||
)
|
|
||||||
|
|
||||||
setSupportActionBar(binding.toolbar)
|
setSupportActionBar(binding.toolbar)
|
||||||
setupViewPager(binding.tabViewpager)
|
setupViewPager(binding.tabViewpager)
|
||||||
binding.tabTablayout.setupWithViewPager(binding.tabViewpager)
|
binding.tabTablayout.setupWithViewPager(binding.tabViewpager)
|
||||||
|
|
||||||
|
binding.tabTablayout.setOnDragListener { _, _ ->
|
||||||
|
selectionMode = false
|
||||||
|
selectedAmount = 0
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
drawerLayout = binding.drawerLayout
|
drawerLayout = binding.drawerLayout
|
||||||
actionBarDrawerToggle = ActionBarDrawerToggle(this, drawerLayout, R.string.nav_open, R.string.nav_close)
|
actionBarDrawerToggle = ActionBarDrawerToggle(this, drawerLayout, R.string.nav_open, R.string.nav_close)
|
||||||
|
|
||||||
|
@ -73,14 +74,6 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
|
||||||
|
|
||||||
supportActionBar!!.setDisplayHomeAsUpEnabled(true)
|
supportActionBar!!.setDisplayHomeAsUpEnabled(true)
|
||||||
|
|
||||||
val sharedPreferences = EncryptedSharedPreferences.create(
|
|
||||||
"sensitive",
|
|
||||||
MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC),
|
|
||||||
applicationContext,
|
|
||||||
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
|
|
||||||
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
|
|
||||||
)
|
|
||||||
|
|
||||||
binding.expiryCalendarFab.setOnClickListener { _ ->
|
binding.expiryCalendarFab.setOnClickListener { _ ->
|
||||||
val expiryCalendarIntent = Intent(this, ExpiryCalendarActivity::class.java)
|
val expiryCalendarIntent = Intent(this, ExpiryCalendarActivity::class.java)
|
||||||
val extras = Bundle()
|
val extras = Bundle()
|
||||||
|
@ -88,7 +81,7 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
|
||||||
ContextCompat.startActivity(this, expiryCalendarIntent, extras)
|
ContextCompat.startActivity(this, expiryCalendarIntent, extras)
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.newElementFab.setOnClickListener { view ->
|
binding.newElementFab.setOnClickListener { _ ->
|
||||||
val currentPosition = binding.tabTablayout.selectedTabPosition
|
val currentPosition = binding.tabTablayout.selectedTabPosition
|
||||||
val fragment = adapter.getItem(currentPosition)
|
val fragment = adapter.getItem(currentPosition)
|
||||||
|
|
||||||
|
@ -499,4 +492,17 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
|
||||||
val storageFragment = fragment as StorageFragment
|
val storageFragment = fragment as StorageFragment
|
||||||
storageFragment.filterByCategory(id)
|
storageFragment.filterByCategory(id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun addSelection() {
|
||||||
|
selectionMode = true
|
||||||
|
selectedAmount ++
|
||||||
|
}
|
||||||
|
|
||||||
|
fun removeSelection() {
|
||||||
|
selectedAmount --
|
||||||
|
if (selectedAmount <= 0) {
|
||||||
|
selectedAmount = 0
|
||||||
|
selectionMode = false
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -1,11 +1,10 @@
|
||||||
package org.foxarmy.barcodescannerforemployees.activities
|
package org.foxarmy.barcodescannerforemployees.activities
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.content.SharedPreferences
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.security.crypto.EncryptedSharedPreferences
|
|
||||||
import androidx.security.crypto.MasterKeys
|
|
||||||
import org.foxarmy.barcodescannerforemployees.Net
|
import org.foxarmy.barcodescannerforemployees.Net
|
||||||
import org.foxarmy.barcodescannerforemployees.databinding.ActivityManageGroupBinding
|
import org.foxarmy.barcodescannerforemployees.databinding.ActivityManageGroupBinding
|
||||||
import org.foxarmy.barcodescannerforemployees.parseArray
|
import org.foxarmy.barcodescannerforemployees.parseArray
|
||||||
|
@ -14,6 +13,7 @@ import org.foxarmy.barcodescannerforemployees.views.GroupMemberView
|
||||||
class ManageGroupActivity : AppCompatActivity(){
|
class ManageGroupActivity : AppCompatActivity(){
|
||||||
private lateinit var binding: ActivityManageGroupBinding
|
private lateinit var binding: ActivityManageGroupBinding
|
||||||
private var isAdmin: Boolean = true
|
private var isAdmin: Boolean = true
|
||||||
|
private lateinit var sharedPreferences: SharedPreferences
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
@ -23,15 +23,7 @@ class ManageGroupActivity : AppCompatActivity(){
|
||||||
|
|
||||||
val groupId = intent.extras!!.getInt("groupId")
|
val groupId = intent.extras!!.getInt("groupId")
|
||||||
|
|
||||||
val masterKeyAlias = MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC)
|
sharedPreferences = org.foxarmy.barcodescannerforemployees.getPreferences(this)
|
||||||
|
|
||||||
val sharedPreferences = EncryptedSharedPreferences.create(
|
|
||||||
"sensitive",
|
|
||||||
masterKeyAlias,
|
|
||||||
applicationContext,
|
|
||||||
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
|
|
||||||
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
|
|
||||||
)
|
|
||||||
|
|
||||||
val net = Net()
|
val net = Net()
|
||||||
|
|
||||||
|
@ -56,14 +48,6 @@ class ManageGroupActivity : AppCompatActivity(){
|
||||||
}
|
}
|
||||||
|
|
||||||
fun amIAnAdminIn(groupId: Int): Boolean {
|
fun amIAnAdminIn(groupId: Int): Boolean {
|
||||||
val sharedPreferences = EncryptedSharedPreferences.create(
|
|
||||||
"sensitive",
|
|
||||||
MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC),
|
|
||||||
applicationContext,
|
|
||||||
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
|
|
||||||
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
|
|
||||||
)
|
|
||||||
|
|
||||||
val net = Net()
|
val net = Net()
|
||||||
|
|
||||||
net.token = sharedPreferences.getString("token", "")!!
|
net.token = sharedPreferences.getString("token", "")!!
|
||||||
|
|
|
@ -5,8 +5,6 @@ import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.widget.LinearLayout
|
import android.widget.LinearLayout
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.security.crypto.EncryptedSharedPreferences
|
|
||||||
import androidx.security.crypto.MasterKeys
|
|
||||||
import org.foxarmy.barcodescannerforemployees.Net
|
import org.foxarmy.barcodescannerforemployees.Net
|
||||||
import org.foxarmy.barcodescannerforemployees.R
|
import org.foxarmy.barcodescannerforemployees.R
|
||||||
import org.foxarmy.barcodescannerforemployees.databinding.ActivityMyGroupsBinding
|
import org.foxarmy.barcodescannerforemployees.databinding.ActivityMyGroupsBinding
|
||||||
|
@ -22,13 +20,7 @@ class MyGroupsActivity : AppCompatActivity(){
|
||||||
binding = ActivityMyGroupsBinding.inflate(layoutInflater)
|
binding = ActivityMyGroupsBinding.inflate(layoutInflater)
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
|
|
||||||
val sharedPreferences = EncryptedSharedPreferences.create(
|
val sharedPreferences = org.foxarmy.barcodescannerforemployees.getPreferences(this)
|
||||||
"sensitive",
|
|
||||||
MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC),
|
|
||||||
applicationContext,
|
|
||||||
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
|
|
||||||
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
|
|
||||||
)
|
|
||||||
|
|
||||||
val net = Net()
|
val net = Net()
|
||||||
|
|
||||||
|
|
|
@ -4,8 +4,6 @@ import android.app.Activity
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import androidx.security.crypto.EncryptedSharedPreferences
|
|
||||||
import androidx.security.crypto.MasterKeys
|
|
||||||
|
|
||||||
class NavigatorActivity : Activity() {
|
class NavigatorActivity : Activity() {
|
||||||
|
|
||||||
|
@ -14,13 +12,7 @@ class NavigatorActivity : Activity() {
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
sharedPreferences = EncryptedSharedPreferences.create(
|
sharedPreferences = org.foxarmy.barcodescannerforemployees.getPreferences(this)
|
||||||
"sensitive",
|
|
||||||
MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC),
|
|
||||||
applicationContext,
|
|
||||||
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
|
|
||||||
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
|
|
||||||
)
|
|
||||||
|
|
||||||
var intent = Intent(this, MainActivity::class.java)
|
var intent = Intent(this, MainActivity::class.java)
|
||||||
|
|
||||||
|
|
|
@ -6,8 +6,6 @@ import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.ArrayAdapter
|
import android.widget.ArrayAdapter
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.security.crypto.EncryptedSharedPreferences
|
|
||||||
import androidx.security.crypto.MasterKeys
|
|
||||||
import org.foxarmy.barcodescannerforemployees.Net
|
import org.foxarmy.barcodescannerforemployees.Net
|
||||||
import org.foxarmy.barcodescannerforemployees.databinding.ActivitySettingsBinding
|
import org.foxarmy.barcodescannerforemployees.databinding.ActivitySettingsBinding
|
||||||
|
|
||||||
|
@ -21,13 +19,7 @@ class SettingsActivity : AppCompatActivity() {
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
sharedPreferences = EncryptedSharedPreferences.create(
|
sharedPreferences = org.foxarmy.barcodescannerforemployees.getPreferences(this)
|
||||||
"sensitive",
|
|
||||||
MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC),
|
|
||||||
applicationContext,
|
|
||||||
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
|
|
||||||
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
|
|
||||||
)
|
|
||||||
|
|
||||||
myGroups = sharedPreferences.getStringSet("groups", emptySet())!!.toList()
|
myGroups = sharedPreferences.getStringSet("groups", emptySet())!!.toList()
|
||||||
currentGroup = sharedPreferences.getString("currentGroup", "offline")!!
|
currentGroup = sharedPreferences.getString("currentGroup", "offline")!!
|
||||||
|
|
|
@ -11,13 +11,12 @@ import android.widget.Toast
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.core.view.children
|
import androidx.core.view.children
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.security.crypto.EncryptedSharedPreferences
|
|
||||||
import androidx.security.crypto.MasterKeys
|
|
||||||
import org.foxarmy.barcodescannerforemployees.Net
|
import org.foxarmy.barcodescannerforemployees.Net
|
||||||
import org.foxarmy.barcodescannerforemployees.R
|
import org.foxarmy.barcodescannerforemployees.R
|
||||||
import org.foxarmy.barcodescannerforemployees.activities.AddCategoryActivity
|
import org.foxarmy.barcodescannerforemployees.activities.AddCategoryActivity
|
||||||
import org.foxarmy.barcodescannerforemployees.database.CategoryDAO
|
import org.foxarmy.barcodescannerforemployees.database.CategoryDAO
|
||||||
import org.foxarmy.barcodescannerforemployees.database.DBStorageController
|
import org.foxarmy.barcodescannerforemployees.database.DBStorageController
|
||||||
|
import org.foxarmy.barcodescannerforemployees.getPreferences
|
||||||
import org.foxarmy.barcodescannerforemployees.views.CategoryView
|
import org.foxarmy.barcodescannerforemployees.views.CategoryView
|
||||||
|
|
||||||
class CategoriesFragment : Fragment() {
|
class CategoriesFragment : Fragment() {
|
||||||
|
@ -28,13 +27,7 @@ class CategoriesFragment : Fragment() {
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
sharedPreferences = EncryptedSharedPreferences.create(
|
sharedPreferences = getPreferences(requireContext())
|
||||||
"sensitive",
|
|
||||||
MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC),
|
|
||||||
requireContext(),
|
|
||||||
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
|
|
||||||
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
|
|
||||||
)
|
|
||||||
|
|
||||||
prepareDatabaseConnection()
|
prepareDatabaseConnection()
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,14 +14,13 @@ import androidx.core.content.ContextCompat
|
||||||
import androidx.core.view.children
|
import androidx.core.view.children
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.gridlayout.widget.GridLayout
|
import androidx.gridlayout.widget.GridLayout
|
||||||
import androidx.security.crypto.EncryptedSharedPreferences
|
|
||||||
import androidx.security.crypto.MasterKeys
|
|
||||||
import org.foxarmy.barcodescannerforemployees.Net
|
import org.foxarmy.barcodescannerforemployees.Net
|
||||||
import org.foxarmy.barcodescannerforemployees.R
|
import org.foxarmy.barcodescannerforemployees.R
|
||||||
import org.foxarmy.barcodescannerforemployees.activities.AddProductActivity
|
import org.foxarmy.barcodescannerforemployees.activities.AddProductActivity
|
||||||
import org.foxarmy.barcodescannerforemployees.database.DBStorageController
|
import org.foxarmy.barcodescannerforemployees.database.DBStorageController
|
||||||
import org.foxarmy.barcodescannerforemployees.database.ProductDAO
|
import org.foxarmy.barcodescannerforemployees.database.ProductDAO
|
||||||
import org.foxarmy.barcodescannerforemployees.databinding.FragmentShelfBinding
|
import org.foxarmy.barcodescannerforemployees.databinding.FragmentShelfBinding
|
||||||
|
import org.foxarmy.barcodescannerforemployees.getPreferences
|
||||||
import org.foxarmy.barcodescannerforemployees.views.ProductView
|
import org.foxarmy.barcodescannerforemployees.views.ProductView
|
||||||
import kotlin.concurrent.thread
|
import kotlin.concurrent.thread
|
||||||
|
|
||||||
|
@ -38,16 +37,9 @@ class ShelfFragment : Fragment() {
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
sharedPreferences = EncryptedSharedPreferences.create(
|
sharedPreferences = getPreferences(requireContext())
|
||||||
"sensitive",
|
|
||||||
MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC),
|
|
||||||
requireContext(),
|
|
||||||
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
|
|
||||||
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
|
|
||||||
)
|
|
||||||
|
|
||||||
prepareDatabaseConnection()
|
prepareDatabaseConnection()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
|
|
|
@ -10,8 +10,6 @@ import android.widget.*
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.core.view.children
|
import androidx.core.view.children
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.security.crypto.EncryptedSharedPreferences
|
|
||||||
import androidx.security.crypto.MasterKeys
|
|
||||||
import org.foxarmy.barcodescannerforemployees.Net
|
import org.foxarmy.barcodescannerforemployees.Net
|
||||||
import org.foxarmy.barcodescannerforemployees.R
|
import org.foxarmy.barcodescannerforemployees.R
|
||||||
import org.foxarmy.barcodescannerforemployees.activities.AddAbstractProductActivity
|
import org.foxarmy.barcodescannerforemployees.activities.AddAbstractProductActivity
|
||||||
|
@ -20,6 +18,7 @@ import org.foxarmy.barcodescannerforemployees.database.AbstractProductDAO
|
||||||
import org.foxarmy.barcodescannerforemployees.database.DBStorageController
|
import org.foxarmy.barcodescannerforemployees.database.DBStorageController
|
||||||
import org.foxarmy.barcodescannerforemployees.databinding.FragmentStorageBinding
|
import org.foxarmy.barcodescannerforemployees.databinding.FragmentStorageBinding
|
||||||
import org.foxarmy.barcodescannerforemployees.generateThumbnailForImage
|
import org.foxarmy.barcodescannerforemployees.generateThumbnailForImage
|
||||||
|
import org.foxarmy.barcodescannerforemployees.getPreferences
|
||||||
import org.foxarmy.barcodescannerforemployees.views.AbstractProductView
|
import org.foxarmy.barcodescannerforemployees.views.AbstractProductView
|
||||||
import kotlin.concurrent.thread
|
import kotlin.concurrent.thread
|
||||||
|
|
||||||
|
@ -39,13 +38,7 @@ class StorageFragment : Fragment() {
|
||||||
): View {
|
): View {
|
||||||
binding = FragmentStorageBinding.inflate(inflater)
|
binding = FragmentStorageBinding.inflate(inflater)
|
||||||
|
|
||||||
sharedPreferences = EncryptedSharedPreferences.create(
|
sharedPreferences = getPreferences(requireContext())
|
||||||
"sensitive",
|
|
||||||
MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC),
|
|
||||||
requireContext(),
|
|
||||||
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
|
|
||||||
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
|
|
||||||
)
|
|
||||||
|
|
||||||
prepareDatabaseConnection()
|
prepareDatabaseConnection()
|
||||||
|
|
||||||
|
|
|
@ -16,17 +16,15 @@ import androidx.core.content.ContextCompat
|
||||||
import androidx.core.content.ContextCompat.startActivity
|
import androidx.core.content.ContextCompat.startActivity
|
||||||
import androidx.security.crypto.EncryptedSharedPreferences
|
import androidx.security.crypto.EncryptedSharedPreferences
|
||||||
import androidx.security.crypto.MasterKeys
|
import androidx.security.crypto.MasterKeys
|
||||||
import org.foxarmy.barcodescannerforemployees.R
|
import org.foxarmy.barcodescannerforemployees.*
|
||||||
import org.foxarmy.barcodescannerforemployees.activities.FullscreenActivity
|
import org.foxarmy.barcodescannerforemployees.activities.FullscreenActivity
|
||||||
|
import org.foxarmy.barcodescannerforemployees.activities.MainActivity
|
||||||
import org.foxarmy.barcodescannerforemployees.database.CategoryDAO
|
import org.foxarmy.barcodescannerforemployees.database.CategoryDAO
|
||||||
import org.foxarmy.barcodescannerforemployees.database.DBStorageController
|
import org.foxarmy.barcodescannerforemployees.database.DBStorageController
|
||||||
import org.foxarmy.barcodescannerforemployees.dataclasses.AbstractProduct
|
import org.foxarmy.barcodescannerforemployees.dataclasses.AbstractProduct
|
||||||
import org.foxarmy.barcodescannerforemployees.getActivity
|
|
||||||
import org.foxarmy.barcodescannerforemployees.getImageUri
|
|
||||||
import org.foxarmy.barcodescannerforemployees.getUnitNameById
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
class AbstractProductView: LinearLayout {
|
class AbstractProductView : LinearLayout {
|
||||||
private var productLayout: ConstraintLayout? = null
|
private var productLayout: ConstraintLayout? = null
|
||||||
private var productPicture: ImageView? = null
|
private var productPicture: ImageView? = null
|
||||||
private var productNameField: TextView? = null
|
private var productNameField: TextView? = null
|
||||||
|
@ -42,16 +40,10 @@ class AbstractProductView: LinearLayout {
|
||||||
|
|
||||||
constructor(context: Context, a: AttributeSet) : super(context, a) {
|
constructor(context: Context, a: AttributeSet) : super(context, a) {
|
||||||
activity = getActivity(context)!!
|
activity = getActivity(context)!!
|
||||||
val inflater:LayoutInflater = activity.layoutInflater
|
val inflater: LayoutInflater = activity.layoutInflater
|
||||||
inflater.inflate(R.layout.abstract_product_view, this)
|
inflater.inflate(R.layout.abstract_product_view, this)
|
||||||
|
|
||||||
sharedPreferences = EncryptedSharedPreferences.create(
|
sharedPreferences = getPreferences(context)
|
||||||
"sensitive",
|
|
||||||
MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC),
|
|
||||||
context,
|
|
||||||
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
|
|
||||||
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
|
|
||||||
)
|
|
||||||
|
|
||||||
val dbHelper = DBStorageController(context, sharedPreferences.getString("currentGroup", "database")!!)
|
val dbHelper = DBStorageController(context, sharedPreferences.getString("currentGroup", "database")!!)
|
||||||
categoryDAO = CategoryDAO(dbHelper)
|
categoryDAO = CategoryDAO(dbHelper)
|
||||||
|
@ -60,7 +52,7 @@ class AbstractProductView: LinearLayout {
|
||||||
constructor(activity: Activity, context: Context, abstractProduct: AbstractProduct) : super(context) {
|
constructor(activity: Activity, context: Context, abstractProduct: AbstractProduct) : super(context) {
|
||||||
this.abstractProduct = abstractProduct
|
this.abstractProduct = abstractProduct
|
||||||
this.activity = activity
|
this.activity = activity
|
||||||
val inflater:LayoutInflater = activity.layoutInflater
|
val inflater: LayoutInflater = activity.layoutInflater
|
||||||
inflater.inflate(R.layout.abstract_product_view, this)
|
inflater.inflate(R.layout.abstract_product_view, this)
|
||||||
|
|
||||||
sharedPreferences = EncryptedSharedPreferences.create(
|
sharedPreferences = EncryptedSharedPreferences.create(
|
||||||
|
@ -76,7 +68,7 @@ class AbstractProductView: LinearLayout {
|
||||||
update()
|
update()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun init () {
|
private fun init() {
|
||||||
productLayout = findViewById(R.id.productLayout)
|
productLayout = findViewById(R.id.productLayout)
|
||||||
productPicture = findViewById(R.id.productPicture)
|
productPicture = findViewById(R.id.productPicture)
|
||||||
productNameField = findViewById(R.id.productNameView)
|
productNameField = findViewById(R.id.productNameView)
|
||||||
|
@ -84,30 +76,8 @@ class AbstractProductView: LinearLayout {
|
||||||
categoryField = findViewById(R.id.categoryView)
|
categoryField = findViewById(R.id.categoryView)
|
||||||
unitField = findViewById(R.id.unitView)
|
unitField = findViewById(R.id.unitView)
|
||||||
|
|
||||||
|
setUpClicks()
|
||||||
productPicture!!.setOnClickListener {
|
|
||||||
val fullscreenIntent = Intent(activity, FullscreenActivity::class.java)
|
|
||||||
val extras = Bundle()
|
|
||||||
extras.putString("imagehash", abstractProduct.imageHash)
|
|
||||||
fullscreenIntent.putExtras(extras)
|
|
||||||
startActivity(context, fullscreenIntent, extras)
|
|
||||||
}
|
|
||||||
|
|
||||||
productLayout!!.setOnClickListener {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
unitField?.text = getUnitNameById(context, abstractProduct.unit)
|
unitField?.text = getUnitNameById(context, abstractProduct.unit)
|
||||||
|
|
||||||
productLayout!!.setOnLongClickListener {
|
|
||||||
isProductSelected = !isProductSelected
|
|
||||||
this.background = ContextCompat.getDrawable(context, if (isProductSelected) R.drawable.outline_selected else R.drawable.outline)
|
|
||||||
true
|
|
||||||
}
|
|
||||||
|
|
||||||
productNameField!!.setOnClickListener {
|
|
||||||
Toast.makeText(activity, productNameField!!.text, Toast.LENGTH_SHORT).show()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun update() {
|
fun update() {
|
||||||
|
@ -117,10 +87,120 @@ class AbstractProductView: LinearLayout {
|
||||||
thumbnailsDir.mkdirs()
|
thumbnailsDir.mkdirs()
|
||||||
val imageUri = getImageUri(activity, File(thumbnailsDir, "${abstractProduct.imageHash}.webp"))
|
val imageUri = getImageUri(activity, File(thumbnailsDir, "${abstractProduct.imageHash}.webp"))
|
||||||
productPicture!!.setImageURI(imageUri)
|
productPicture!!.setImageURI(imageUri)
|
||||||
// productPicture!!.rotation = 90f
|
|
||||||
|
|
||||||
productNameField!!.text = abstractProduct.name
|
productNameField!!.text = abstractProduct.name
|
||||||
netWeightField!!.text = abstractProduct.netWeight.toString()
|
netWeightField!!.text = abstractProduct.netWeight.toString()
|
||||||
categoryField!!.text = categoryDAO.getCategoryNameById(abstractProduct.category)
|
categoryField!!.text = categoryDAO.getCategoryNameById(abstractProduct.category)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private fun setUpClicks() {
|
||||||
|
productLayout!!.setOnLongClickListener { onAnyLongClick() }
|
||||||
|
productNameField!!.setOnLongClickListener { onNameLongClick() }
|
||||||
|
productPicture!!.setOnLongClickListener { onImageLongClick() }
|
||||||
|
netWeightField!!.setOnLongClickListener { onAnyLongClick() }
|
||||||
|
categoryField!!.setOnLongClickListener { onAnyLongClick() }
|
||||||
|
unitField!!.setOnLongClickListener { onAnyLongClick() }
|
||||||
|
|
||||||
|
productLayout!!.setOnClickListener { onAnyClick() }
|
||||||
|
netWeightField!!.setOnClickListener { onAnyClick() }
|
||||||
|
categoryField!!.setOnClickListener { onAnyClick() }
|
||||||
|
unitField!!.setOnClickListener { onAnyClick() }
|
||||||
|
productPicture!!.setOnClickListener { onImageLongClick() }
|
||||||
|
productNameField!!.setOnClickListener { onNameLongClick() }
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun onAnyClick(): Boolean {
|
||||||
|
if (activity !is MainActivity) return false
|
||||||
|
val mainActivity = activity as MainActivity
|
||||||
|
|
||||||
|
if (mainActivity.selectionMode) {
|
||||||
|
isProductSelected = !isProductSelected
|
||||||
|
|
||||||
|
if (isProductSelected) {
|
||||||
|
mainActivity.addSelection()
|
||||||
|
} else {
|
||||||
|
mainActivity.removeSelection()
|
||||||
|
}
|
||||||
|
|
||||||
|
this.background = ContextCompat.getDrawable(
|
||||||
|
context,
|
||||||
|
if (isProductSelected) R.drawable.outline_selected else R.drawable.outline
|
||||||
|
)
|
||||||
|
return true
|
||||||
|
} else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun onAnyLongClick(): Boolean {
|
||||||
|
if (activity !is MainActivity) return false
|
||||||
|
val mainActivity = activity as MainActivity
|
||||||
|
|
||||||
|
if (mainActivity.selectionMode) {
|
||||||
|
isProductSelected = !isProductSelected
|
||||||
|
|
||||||
|
if (isProductSelected) {
|
||||||
|
mainActivity.addSelection()
|
||||||
|
} else {
|
||||||
|
mainActivity.removeSelection()
|
||||||
|
}
|
||||||
|
|
||||||
|
this.background = ContextCompat.getDrawable(
|
||||||
|
context,
|
||||||
|
if (isProductSelected) R.drawable.outline_selected else R.drawable.outline
|
||||||
|
)
|
||||||
|
return true
|
||||||
|
} else {
|
||||||
|
mainActivity.addSelection()
|
||||||
|
|
||||||
|
isProductSelected = !isProductSelected
|
||||||
|
|
||||||
|
this.background = ContextCompat.getDrawable(
|
||||||
|
context,
|
||||||
|
if (isProductSelected) R.drawable.outline_selected else R.drawable.outline
|
||||||
|
)
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun onImageLongClick(): Boolean {
|
||||||
|
if (activity !is MainActivity) {
|
||||||
|
val fullscreenIntent = Intent(activity, FullscreenActivity::class.java)
|
||||||
|
val extras = Bundle()
|
||||||
|
extras.putString("imagehash", abstractProduct.imageHash)
|
||||||
|
fullscreenIntent.putExtras(extras)
|
||||||
|
startActivity(context, fullscreenIntent, extras)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
val mainActivity = activity as MainActivity
|
||||||
|
|
||||||
|
if (mainActivity.selectionMode) {
|
||||||
|
return onAnyLongClick()
|
||||||
|
} else {
|
||||||
|
val fullscreenIntent = Intent(activity, FullscreenActivity::class.java)
|
||||||
|
val extras = Bundle()
|
||||||
|
extras.putString("imagehash", abstractProduct.imageHash)
|
||||||
|
fullscreenIntent.putExtras(extras)
|
||||||
|
startActivity(context, fullscreenIntent, extras)
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun onNameLongClick(): Boolean {
|
||||||
|
if (activity !is MainActivity) {
|
||||||
|
Toast.makeText(activity, productNameField!!.text, Toast.LENGTH_SHORT).show()
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
val mainActivity = activity as MainActivity
|
||||||
|
|
||||||
|
if (mainActivity.selectionMode) {
|
||||||
|
return onAnyLongClick()
|
||||||
|
} else {
|
||||||
|
Toast.makeText(activity, productNameField!!.text, Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -7,16 +7,16 @@ import android.view.LayoutInflater
|
||||||
import android.widget.LinearLayout
|
import android.widget.LinearLayout
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.security.crypto.EncryptedSharedPreferences
|
|
||||||
import androidx.security.crypto.MasterKeys
|
|
||||||
import org.foxarmy.barcodescannerforemployees.R
|
import org.foxarmy.barcodescannerforemployees.R
|
||||||
import org.foxarmy.barcodescannerforemployees.activities.MainActivity
|
import org.foxarmy.barcodescannerforemployees.activities.MainActivity
|
||||||
import org.foxarmy.barcodescannerforemployees.database.AbstractProductDAO
|
import org.foxarmy.barcodescannerforemployees.database.AbstractProductDAO
|
||||||
import org.foxarmy.barcodescannerforemployees.database.DBStorageController
|
import org.foxarmy.barcodescannerforemployees.database.DBStorageController
|
||||||
import org.foxarmy.barcodescannerforemployees.dataclasses.Category
|
import org.foxarmy.barcodescannerforemployees.dataclasses.Category
|
||||||
|
import org.foxarmy.barcodescannerforemployees.getPreferences
|
||||||
|
|
||||||
class CategoryView : LinearLayout {
|
class CategoryView : LinearLayout {
|
||||||
var category: Category
|
var category: Category
|
||||||
|
|
||||||
val categoryName: TextView
|
val categoryName: TextView
|
||||||
val amountOfProducts: TextView
|
val amountOfProducts: TextView
|
||||||
var isCategorySelected = false
|
var isCategorySelected = false
|
||||||
|
@ -27,13 +27,7 @@ class CategoryView : LinearLayout {
|
||||||
constructor(activity: Activity, context: Context, category: Category) : super(context) {
|
constructor(activity: Activity, context: Context, category: Category) : super(context) {
|
||||||
this.category = category
|
this.category = category
|
||||||
|
|
||||||
sharedPreferences = EncryptedSharedPreferences.create(
|
sharedPreferences = getPreferences(context)
|
||||||
"sensitive",
|
|
||||||
MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC),
|
|
||||||
context,
|
|
||||||
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
|
|
||||||
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
|
|
||||||
)
|
|
||||||
|
|
||||||
val dbHelper = DBStorageController(context, sharedPreferences.getString("currentGroup", "database")!!)
|
val dbHelper = DBStorageController(context, sharedPreferences.getString("currentGroup", "database")!!)
|
||||||
abstractProductDAO = AbstractProductDAO(dbHelper)
|
abstractProductDAO = AbstractProductDAO(dbHelper)
|
||||||
|
@ -41,7 +35,7 @@ class CategoryView : LinearLayout {
|
||||||
val inflater: LayoutInflater = activity.layoutInflater
|
val inflater: LayoutInflater = activity.layoutInflater
|
||||||
inflater.inflate(R.layout.category_view, this)
|
inflater.inflate(R.layout.category_view, this)
|
||||||
|
|
||||||
this.background = ContextCompat.getDrawable(context, if (isCategorySelected) R.drawable.outline_selected else R.drawable.outline)
|
updateStroke()
|
||||||
|
|
||||||
categoryName = findViewById(R.id.categoryNameTextView)
|
categoryName = findViewById(R.id.categoryNameTextView)
|
||||||
amountOfProducts = findViewById(R.id.amountOfProducts)
|
amountOfProducts = findViewById(R.id.amountOfProducts)
|
||||||
|
@ -49,13 +43,45 @@ class CategoryView : LinearLayout {
|
||||||
categoryName.text = category.name
|
categoryName.text = category.name
|
||||||
amountOfProducts.text = abstractProductDAO.getAmountOfAbstractProductsInCategory(category.id).toString()
|
amountOfProducts.text = abstractProductDAO.getAmountOfAbstractProductsInCategory(category.id).toString()
|
||||||
|
|
||||||
setOnLongClickListener {
|
setUpClicks()
|
||||||
isCategorySelected = !isCategorySelected
|
}
|
||||||
this.background = ContextCompat.getDrawable(context, if (isCategorySelected) R.drawable.outline_selected else R.drawable.outline)
|
|
||||||
true
|
private fun setUpClicks() {
|
||||||
}
|
categoryName.setOnClickListener { onCategoryClick() }
|
||||||
setOnClickListener {
|
amountOfProducts.setOnClickListener { onCategoryClick() }
|
||||||
(activity as MainActivity).filterAbstractProductsByCategory(category.id)
|
|
||||||
|
categoryName.setOnLongClickListener { onAnyLongClick() }
|
||||||
|
amountOfProducts.setOnLongClickListener { onAnyLongClick() }
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun onCategoryClick(): Boolean {
|
||||||
|
if (context !is MainActivity) return false
|
||||||
|
val mainActivity = context as MainActivity
|
||||||
|
|
||||||
|
if (mainActivity.selectionMode) return onAnyLongClick()
|
||||||
|
else (context as MainActivity).filterAbstractProductsByCategory(category.id)
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun onAnyLongClick(): Boolean {
|
||||||
|
if (context !is MainActivity) return false
|
||||||
|
val mainActivity = context as MainActivity
|
||||||
|
|
||||||
|
isCategorySelected = !isCategorySelected
|
||||||
|
updateStroke()
|
||||||
|
|
||||||
|
if (mainActivity.selectionMode) {
|
||||||
|
if (isCategorySelected) mainActivity.addSelection()
|
||||||
|
else mainActivity.removeSelection()
|
||||||
|
} else {
|
||||||
|
mainActivity.addSelection()
|
||||||
}
|
}
|
||||||
|
return true
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun updateStroke() {
|
||||||
|
this.background = ContextCompat.getDrawable(context, if (isCategorySelected) R.drawable.outline_selected else R.drawable.outline)
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -7,12 +7,11 @@ import android.view.LayoutInflater
|
||||||
import android.widget.LinearLayout
|
import android.widget.LinearLayout
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.security.crypto.EncryptedSharedPreferences
|
|
||||||
import androidx.security.crypto.MasterKeys
|
|
||||||
import org.foxarmy.barcodescannerforemployees.R
|
import org.foxarmy.barcodescannerforemployees.R
|
||||||
import org.foxarmy.barcodescannerforemployees.activities.ExpiryCalendarActivity
|
import org.foxarmy.barcodescannerforemployees.activities.ExpiryCalendarActivity
|
||||||
import org.foxarmy.barcodescannerforemployees.database.DBStorageController
|
import org.foxarmy.barcodescannerforemployees.database.DBStorageController
|
||||||
import org.foxarmy.barcodescannerforemployees.database.ProductDAO
|
import org.foxarmy.barcodescannerforemployees.database.ProductDAO
|
||||||
|
import org.foxarmy.barcodescannerforemployees.getPreferences
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
|
|
||||||
class ExpiryGroupView : LinearLayout {
|
class ExpiryGroupView : LinearLayout {
|
||||||
|
@ -24,13 +23,7 @@ class ExpiryGroupView : LinearLayout {
|
||||||
|
|
||||||
constructor(activity: Activity, context: Context, representingDate: Long) : super(context) {
|
constructor(activity: Activity, context: Context, representingDate: Long) : super(context) {
|
||||||
|
|
||||||
sharedPreferences = EncryptedSharedPreferences.create(
|
sharedPreferences = getPreferences(context)
|
||||||
"sensitive",
|
|
||||||
MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC),
|
|
||||||
context,
|
|
||||||
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
|
|
||||||
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
|
|
||||||
)
|
|
||||||
|
|
||||||
val dbHelper = DBStorageController(context, sharedPreferences.getString("currentGroup", "database")!!)
|
val dbHelper = DBStorageController(context, sharedPreferences.getString("currentGroup", "database")!!)
|
||||||
productDAO = ProductDAO(dbHelper)
|
productDAO = ProductDAO(dbHelper)
|
||||||
|
|
|
@ -13,6 +13,7 @@ import android.view.LayoutInflater
|
||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
import android.widget.LinearLayout
|
import android.widget.LinearLayout
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
|
import android.widget.Toast
|
||||||
import androidx.annotation.RequiresApi
|
import androidx.annotation.RequiresApi
|
||||||
import androidx.constraintlayout.widget.ConstraintLayout
|
import androidx.constraintlayout.widget.ConstraintLayout
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
|
@ -21,29 +22,26 @@ import androidx.core.graphics.blue
|
||||||
import androidx.core.graphics.green
|
import androidx.core.graphics.green
|
||||||
import androidx.core.graphics.red
|
import androidx.core.graphics.red
|
||||||
import androidx.core.math.MathUtils.clamp
|
import androidx.core.math.MathUtils.clamp
|
||||||
import androidx.security.crypto.EncryptedSharedPreferences
|
import org.foxarmy.barcodescannerforemployees.*
|
||||||
import androidx.security.crypto.MasterKeys
|
|
||||||
import org.foxarmy.barcodescannerforemployees.R
|
|
||||||
import org.foxarmy.barcodescannerforemployees.activities.FullscreenActivity
|
import org.foxarmy.barcodescannerforemployees.activities.FullscreenActivity
|
||||||
import org.foxarmy.barcodescannerforemployees.calculateProductFreshness
|
import org.foxarmy.barcodescannerforemployees.activities.MainActivity
|
||||||
import org.foxarmy.barcodescannerforemployees.database.AbstractProductDAO
|
import org.foxarmy.barcodescannerforemployees.database.AbstractProductDAO
|
||||||
import org.foxarmy.barcodescannerforemployees.database.CategoryDAO
|
import org.foxarmy.barcodescannerforemployees.database.CategoryDAO
|
||||||
import org.foxarmy.barcodescannerforemployees.database.DBStorageController
|
import org.foxarmy.barcodescannerforemployees.database.DBStorageController
|
||||||
import org.foxarmy.barcodescannerforemployees.dataclasses.AbstractProduct
|
import org.foxarmy.barcodescannerforemployees.dataclasses.AbstractProduct
|
||||||
import org.foxarmy.barcodescannerforemployees.dataclasses.Product
|
import org.foxarmy.barcodescannerforemployees.dataclasses.Product
|
||||||
import org.foxarmy.barcodescannerforemployees.getActivity
|
|
||||||
import org.foxarmy.barcodescannerforemployees.getImageUri
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.text.DecimalFormat
|
import java.text.DecimalFormat
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import kotlin.concurrent.thread
|
import kotlin.concurrent.thread
|
||||||
|
|
||||||
class ProductView: LinearLayout {
|
class ProductView : LinearLayout {
|
||||||
var product: Product = Product()
|
var product: Product = Product()
|
||||||
var isProductSelected = false
|
var isProductSelected = false
|
||||||
private var activity: Activity
|
private var activity: Activity
|
||||||
|
|
||||||
|
private lateinit var productLayout: ConstraintLayout
|
||||||
private lateinit var productImageView: ImageView
|
private lateinit var productImageView: ImageView
|
||||||
private lateinit var productNameTextView: TextView
|
private lateinit var productNameTextView: TextView
|
||||||
private lateinit var productNetWeightTextView: TextView
|
private lateinit var productNetWeightTextView: TextView
|
||||||
|
@ -63,13 +61,7 @@ class ProductView: LinearLayout {
|
||||||
constructor(context: Context, a: AttributeSet) : super(context, a) {
|
constructor(context: Context, a: AttributeSet) : super(context, a) {
|
||||||
activity = getActivity(context)!!
|
activity = getActivity(context)!!
|
||||||
|
|
||||||
sharedPreferences = EncryptedSharedPreferences.create(
|
sharedPreferences = getPreferences(context)
|
||||||
"sensitive",
|
|
||||||
MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC),
|
|
||||||
context,
|
|
||||||
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
|
|
||||||
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
|
|
||||||
)
|
|
||||||
|
|
||||||
val dbHelper = DBStorageController(context, sharedPreferences.getString("currentGroup", "offline")!!)
|
val dbHelper = DBStorageController(context, sharedPreferences.getString("currentGroup", "offline")!!)
|
||||||
abstractProductDAO = AbstractProductDAO(dbHelper)
|
abstractProductDAO = AbstractProductDAO(dbHelper)
|
||||||
|
@ -86,18 +78,13 @@ class ProductView: LinearLayout {
|
||||||
val inflater: LayoutInflater = activity.layoutInflater
|
val inflater: LayoutInflater = activity.layoutInflater
|
||||||
inflater.inflate(R.layout.product_view, this)
|
inflater.inflate(R.layout.product_view, this)
|
||||||
|
|
||||||
sharedPreferences = EncryptedSharedPreferences.create(
|
sharedPreferences = getPreferences(context)
|
||||||
"sensitive",
|
|
||||||
MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC),
|
|
||||||
context,
|
|
||||||
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
|
|
||||||
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
|
|
||||||
)
|
|
||||||
|
|
||||||
val dbHelper = DBStorageController(context, sharedPreferences.getString("currentGroup", "offline")!!)
|
val dbHelper = DBStorageController(context, sharedPreferences.getString("currentGroup", "offline")!!)
|
||||||
abstractProductDAO = AbstractProductDAO(dbHelper)
|
abstractProductDAO = AbstractProductDAO(dbHelper)
|
||||||
categoryDAO = CategoryDAO(dbHelper)
|
categoryDAO = CategoryDAO(dbHelper)
|
||||||
|
|
||||||
|
productLayout = findViewById(R.id.productLayout)
|
||||||
productImageView = findViewById(R.id.productPicture)
|
productImageView = findViewById(R.id.productPicture)
|
||||||
productNameTextView = findViewById(R.id.productNameView)
|
productNameTextView = findViewById(R.id.productNameView)
|
||||||
productNetWeightTextView = findViewById(R.id.productNetWeightView)
|
productNetWeightTextView = findViewById(R.id.productNetWeightView)
|
||||||
|
@ -106,68 +93,152 @@ class ProductView: LinearLayout {
|
||||||
productLifeSpan = findViewById(R.id.dateSpan)
|
productLifeSpan = findViewById(R.id.dateSpan)
|
||||||
productFreshnessTextView = findViewById(R.id.freshnessPercentTextView)
|
productFreshnessTextView = findViewById(R.id.freshnessPercentTextView)
|
||||||
|
|
||||||
findViewById<ConstraintLayout>(R.id.productLayout).setOnLongClickListener {
|
setUpClicks()
|
||||||
isProductSelected = !isProductSelected
|
|
||||||
updateStroke()
|
|
||||||
true
|
|
||||||
}
|
|
||||||
|
|
||||||
productImageView.setOnClickListener {
|
|
||||||
val fullscreenIntent = Intent(activity, FullscreenActivity::class.java)
|
|
||||||
val extras = Bundle()
|
|
||||||
val abstractProduct = abstractProductDAO.findAbstractProductById(product.abstractProductId)
|
|
||||||
extras.putString("imagehash", abstractProduct!!.imageHash)
|
|
||||||
fullscreenIntent.putExtras(extras)
|
|
||||||
startActivity(context, fullscreenIntent, extras)
|
|
||||||
}
|
|
||||||
|
|
||||||
update()
|
update()
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequiresApi(Build.VERSION_CODES.O)
|
@RequiresApi(Build.VERSION_CODES.O)
|
||||||
fun update () {
|
private fun setUpClicks() {
|
||||||
val linkedAbstractProduct: AbstractProduct = abstractProductDAO.findAbstractProductById(product.abstractProductId) ?: return
|
productLayout.setOnLongClickListener { onAnyLongClick() }
|
||||||
|
productImageView.setOnLongClickListener { onImageLongClick() }
|
||||||
|
productNameTextView.setOnLongClickListener { onNameLongClick() }
|
||||||
|
productNetWeightTextView.setOnLongClickListener { onAnyLongClick() }
|
||||||
|
productAmountTextView.setOnLongClickListener { onAnyLongClick() }
|
||||||
|
productCategoryView.setOnLongClickListener { onAnyLongClick() }
|
||||||
|
productLifeSpan.setOnLongClickListener { onAnyLongClick() }
|
||||||
|
productFreshnessTextView.setOnLongClickListener { onAnyLongClick() }
|
||||||
|
|
||||||
|
productLayout.setOnClickListener { onAnyClick() }
|
||||||
|
productImageView.setOnClickListener { onImageLongClick() }
|
||||||
|
productNameTextView.setOnClickListener { onNameLongClick() }
|
||||||
|
productNetWeightTextView.setOnClickListener { onAnyClick() }
|
||||||
|
productAmountTextView.setOnClickListener { onAnyClick() }
|
||||||
|
productCategoryView.setOnClickListener { onAnyClick() }
|
||||||
|
productLifeSpan.setOnClickListener { onAnyClick() }
|
||||||
|
productFreshnessTextView.setOnClickListener { onAnyClick() }
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequiresApi(Build.VERSION_CODES.O)
|
||||||
|
private fun onAnyClick(): Boolean {
|
||||||
|
if (activity !is MainActivity) return false
|
||||||
|
val mainActivity = activity as MainActivity
|
||||||
|
|
||||||
|
if (mainActivity.selectionMode) {
|
||||||
|
isProductSelected = !isProductSelected
|
||||||
|
|
||||||
|
if (isProductSelected) mainActivity.addSelection()
|
||||||
|
else mainActivity.removeSelection()
|
||||||
|
|
||||||
|
updateStroke()
|
||||||
|
|
||||||
|
return true
|
||||||
|
} else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequiresApi(Build.VERSION_CODES.O)
|
||||||
|
private fun onAnyLongClick(): Boolean {
|
||||||
|
if (activity !is MainActivity) return false
|
||||||
|
val mainActivity = activity as MainActivity
|
||||||
|
|
||||||
|
isProductSelected = !isProductSelected
|
||||||
|
updateStroke()
|
||||||
|
|
||||||
|
if (mainActivity.selectionMode) {
|
||||||
|
if (isProductSelected) mainActivity.addSelection()
|
||||||
|
else mainActivity.removeSelection()
|
||||||
|
} else {
|
||||||
|
mainActivity.addSelection()
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun onNameLongClick(): Boolean {
|
||||||
|
if (activity !is MainActivity) {
|
||||||
|
Toast.makeText(activity, productNameTextView.text, Toast.LENGTH_SHORT).show()
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
val mainActivity = activity as MainActivity
|
||||||
|
|
||||||
|
if (mainActivity.selectionMode) return onAnyLongClick()
|
||||||
|
else Toast.makeText(activity, productNameTextView.text, Toast.LENGTH_SHORT).show()
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun onImageLongClick(): Boolean {
|
||||||
|
val abstractProduct = abstractProductDAO.findAbstractProductById(product.abstractProductId)
|
||||||
|
|
||||||
|
if (activity !is MainActivity) {
|
||||||
|
val fullscreenIntent = Intent(activity, FullscreenActivity::class.java)
|
||||||
|
val extras = Bundle()
|
||||||
|
extras.putString("imagehash", abstractProduct!!.imageHash)
|
||||||
|
fullscreenIntent.putExtras(extras)
|
||||||
|
startActivity(context, fullscreenIntent, extras)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
val mainActivity = activity as MainActivity
|
||||||
|
|
||||||
|
if (mainActivity.selectionMode) {
|
||||||
|
return onAnyLongClick()
|
||||||
|
} else {
|
||||||
|
val fullscreenIntent = Intent(activity, FullscreenActivity::class.java)
|
||||||
|
val extras = Bundle()
|
||||||
|
extras.putString("imagehash", abstractProduct!!.imageHash)
|
||||||
|
fullscreenIntent.putExtras(extras)
|
||||||
|
startActivity(context, fullscreenIntent, extras)
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequiresApi(Build.VERSION_CODES.O)
|
||||||
|
fun update() {
|
||||||
|
val linkedAbstractProduct: AbstractProduct =
|
||||||
|
abstractProductDAO.findAbstractProductById(product.abstractProductId) ?: return
|
||||||
|
|
||||||
val thumbnailsDir = File(activity.cacheDir, "thumbnails")
|
val thumbnailsDir = File(activity.cacheDir, "thumbnails")
|
||||||
thumbnailsDir.mkdirs()
|
thumbnailsDir.mkdirs()
|
||||||
val pictureFile = File(thumbnailsDir, "${linkedAbstractProduct.imageHash}.webp")
|
val pictureFile = File(thumbnailsDir, "${linkedAbstractProduct.imageHash}.webp")
|
||||||
val imageUri = getImageUri(activity, pictureFile)
|
val imageUri = getImageUri(activity, pictureFile)
|
||||||
productImageView.setImageURI(imageUri)
|
productImageView.setImageURI(imageUri)
|
||||||
// productImageView.rotation = 90f
|
|
||||||
|
|
||||||
productNameTextView.text = linkedAbstractProduct.name
|
productNameTextView.text = linkedAbstractProduct.name
|
||||||
productNetWeightTextView.text = linkedAbstractProduct.netWeight.toString()
|
productNetWeightTextView.text = linkedAbstractProduct.netWeight.toString()
|
||||||
productAmountTextView.text = product.amount.toString()
|
productAmountTextView.text = product.amount.toString()
|
||||||
productCategoryView.text = categoryDAO.getCategoryNameById(linkedAbstractProduct.category)
|
productCategoryView.text = categoryDAO.getCategoryNameById(linkedAbstractProduct.category)
|
||||||
productLifeSpan.text = "${SimpleDateFormat("dd.MM.yyyy").format(Date(product.dateOfProduction*1000))}-${SimpleDateFormat("dd.MM.yyyy").format(Date(product.dateOfExpiry*1000))}"
|
productLifeSpan.text = "${SimpleDateFormat("dd.MM.yyyy").format(Date(product.dateOfProduction * 1000))}-${
|
||||||
|
SimpleDateFormat("dd.MM.yyyy").format(Date(product.dateOfExpiry * 1000))
|
||||||
|
}"
|
||||||
productFreshnessTextView.text =
|
productFreshnessTextView.text =
|
||||||
if (product.freshness == Double.NEGATIVE_INFINITY || product.freshness == Double.POSITIVE_INFINITY || product.freshness < 0) {
|
if (product.freshness == Double.NEGATIVE_INFINITY || product.freshness == Double.POSITIVE_INFINITY || product.freshness < 0) {
|
||||||
context.getString(R.string.expired)
|
context.getString(R.string.expired)
|
||||||
} else {
|
} else {
|
||||||
"${DecimalFormat("#.#").format(product.freshness*100)}%"
|
"${DecimalFormat("#.#").format(product.freshness * 100)}%"
|
||||||
}
|
}
|
||||||
|
|
||||||
updateStroke()
|
updateStroke()
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequiresApi(Build.VERSION_CODES.O)
|
@RequiresApi(Build.VERSION_CODES.O)
|
||||||
fun updateStroke() {
|
fun updateStroke() {
|
||||||
if (isProductSelected) {
|
if (isProductSelected) {
|
||||||
this.background = ContextCompat.getDrawable(context, R.drawable.outline_selected)
|
this.background = ContextCompat.getDrawable(context, R.drawable.outline_selected)
|
||||||
} else {
|
} else {
|
||||||
if (product.id != 0) {
|
if (product.id != 0) {
|
||||||
thread {
|
thread {
|
||||||
this.outline = GradientDrawable()
|
this.outline = GradientDrawable()
|
||||||
backgroundColor = evaluateColor()
|
backgroundColor = evaluateColor()
|
||||||
strokeColor = darkenColor(backgroundColor, 0.25) // (backgroundColor and 0xfefefe ) shr 1
|
strokeColor = darkenColor(backgroundColor, 0.25) // (backgroundColor and 0xfefefe ) shr 1
|
||||||
this.outline.setColor(backgroundColor)
|
this.outline.setColor(backgroundColor)
|
||||||
this.outline.setStroke(4, strokeColor)
|
this.outline.setStroke(4, strokeColor)
|
||||||
this.outline.alpha = 84
|
this.outline.alpha = 84
|
||||||
this.background = outline
|
this.background = outline
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
this.background = ContextCompat.getDrawable(context, R.drawable.outline)
|
this.background = ContextCompat.getDrawable(context, R.drawable.outline)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -178,13 +249,15 @@ class ProductView: LinearLayout {
|
||||||
}
|
}
|
||||||
|
|
||||||
fun calculateFreshnessGradient(percentage: Double): Int {
|
fun calculateFreshnessGradient(percentage: Double): Int {
|
||||||
val startColor = ContextCompat.getColor(context, if (percentage > 0.5) R.color.full_freshness else R.color.half_freshness)
|
val startColor =
|
||||||
val endColor = ContextCompat.getColor(context, if (percentage > 0.5) R.color.half_freshness else R.color.expired_freshness)
|
ContextCompat.getColor(context, if (percentage > 0.5) R.color.full_freshness else R.color.half_freshness)
|
||||||
|
val endColor =
|
||||||
|
ContextCompat.getColor(context, if (percentage > 0.5) R.color.half_freshness else R.color.expired_freshness)
|
||||||
|
|
||||||
val gradientPosition = 1 - if (percentage > 0.5) (percentage - 0.5) * 2 else percentage * 2
|
val gradientPosition = 1 - if (percentage > 0.5) (percentage - 0.5) * 2 else percentage * 2
|
||||||
|
|
||||||
val red = clamp((startColor.red + gradientPosition * (endColor.red - startColor.red )).toInt(), 0, 255)
|
val red = clamp((startColor.red + gradientPosition * (endColor.red - startColor.red)).toInt(), 0, 255)
|
||||||
val green = clamp((startColor.green + gradientPosition * (endColor.green - startColor.green)).toInt(), 0, 255)
|
val green = clamp((startColor.green + gradientPosition * (endColor.green - startColor.green)).toInt(), 0, 255)
|
||||||
val blue = clamp((startColor.blue + gradientPosition * (endColor.blue - startColor.blue)).toInt(), 0, 255)
|
val blue = clamp((startColor.blue + gradientPosition * (endColor.blue - startColor.blue)).toInt(), 0, 255)
|
||||||
|
|
||||||
var redHex = Integer.toHexString(red)
|
var redHex = Integer.toHexString(red)
|
||||||
|
@ -194,7 +267,7 @@ class ProductView: LinearLayout {
|
||||||
if (greenHex.length == 1) greenHex = "0$greenHex"
|
if (greenHex.length == 1) greenHex = "0$greenHex"
|
||||||
|
|
||||||
var blueHex = Integer.toHexString(blue)
|
var blueHex = Integer.toHexString(blue)
|
||||||
if (blueHex.length == 1 ) blueHex = "0$blueHex"
|
if (blueHex.length == 1) blueHex = "0$blueHex"
|
||||||
|
|
||||||
|
|
||||||
val colorString = "#$redHex$greenHex$blueHex"
|
val colorString = "#$redHex$greenHex$blueHex"
|
||||||
|
@ -202,7 +275,7 @@ class ProductView: LinearLayout {
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequiresApi(Build.VERSION_CODES.O)
|
@RequiresApi(Build.VERSION_CODES.O)
|
||||||
fun darkenColor(color: Int, darkPercent: Double) : Int {
|
fun darkenColor(color: Int, darkPercent: Double): Int {
|
||||||
val c = Color.valueOf(color)
|
val c = Color.valueOf(color)
|
||||||
|
|
||||||
val red = c.red() * (1 - darkPercent)
|
val red = c.red() * (1 - darkPercent)
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent" android:id="@+id/productLayout" android:outlineProvider="bounds"
|
android:layout_height="match_parent" android:id="@+id/productLayout" android:outlineProvider="bounds"
|
||||||
android:background="#00FFFEFE" android:clickable="true">
|
android:background="#00FFFEFE" android:clickable="true" android:translationZ="0sp">
|
||||||
<ImageView
|
<ImageView
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="200dp" app:srcCompat="@android:drawable/ic_menu_gallery"
|
android:layout_height="200dp" app:srcCompat="@android:drawable/ic_menu_gallery"
|
||||||
|
|
Loading…
Reference in New Issue