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