handling no internet situations
This commit is contained in:
		@@ -13,6 +13,7 @@
 | 
			
		||||
    <uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>
 | 
			
		||||
    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
 | 
			
		||||
    <uses-permission android:name="android.permission.INTERNET"/>
 | 
			
		||||
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
 | 
			
		||||
 | 
			
		||||
    <application
 | 
			
		||||
            android:allowBackup="true"
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,6 @@
 | 
			
		||||
package org.foxarmy.barcodescannerforemployees
 | 
			
		||||
 | 
			
		||||
import android.content.Context
 | 
			
		||||
import okhttp3.*
 | 
			
		||||
import okhttp3.MediaType.Companion.toMediaType
 | 
			
		||||
import okhttp3.MediaType.Companion.toMediaTypeOrNull
 | 
			
		||||
@@ -17,6 +18,28 @@ class Net {
 | 
			
		||||
    var server = "bsfe.foxarmy.org"
 | 
			
		||||
    var token = ""
 | 
			
		||||
 | 
			
		||||
    fun serverIsAvailable(context: Context): Boolean {
 | 
			
		||||
        if (!isInternetConnectionAvailable(context)) {
 | 
			
		||||
            return false
 | 
			
		||||
        }
 | 
			
		||||
        var flag = false
 | 
			
		||||
        thread {
 | 
			
		||||
            val client = OkHttpClient();
 | 
			
		||||
            val request = Request.Builder()
 | 
			
		||||
                .url("https://$server/status")
 | 
			
		||||
                .get()
 | 
			
		||||
                .build();
 | 
			
		||||
 | 
			
		||||
            try {
 | 
			
		||||
                val response = client.newCall(request).execute();
 | 
			
		||||
                flag =  response.code == 200;
 | 
			
		||||
            } catch (e: Exception) {
 | 
			
		||||
                flag = false;
 | 
			
		||||
            }
 | 
			
		||||
        }.join()
 | 
			
		||||
        return flag
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun requestProductFromOnlineDB(barcode: String): String {
 | 
			
		||||
        var response = ""
 | 
			
		||||
        thread {
 | 
			
		||||
 
 | 
			
		||||
@@ -7,10 +7,15 @@ import android.graphics.Bitmap
 | 
			
		||||
import android.graphics.BitmapFactory
 | 
			
		||||
import android.graphics.Matrix
 | 
			
		||||
import android.media.ExifInterface
 | 
			
		||||
import android.net.ConnectivityManager
 | 
			
		||||
import android.net.NetworkCapabilities
 | 
			
		||||
import android.net.Uri
 | 
			
		||||
import android.os.Build
 | 
			
		||||
import androidx.annotation.RequiresApi
 | 
			
		||||
import androidx.appcompat.app.AlertDialog
 | 
			
		||||
import androidx.core.content.FileProvider
 | 
			
		||||
import androidx.security.crypto.EncryptedSharedPreferences
 | 
			
		||||
import androidx.security.crypto.MasterKeys
 | 
			
		||||
import com.google.firebase.components.BuildConfig
 | 
			
		||||
import java.io.File
 | 
			
		||||
import java.io.FileInputStream
 | 
			
		||||
@@ -18,6 +23,7 @@ import java.io.FileOutputStream
 | 
			
		||||
import java.security.MessageDigest
 | 
			
		||||
import java.text.SimpleDateFormat
 | 
			
		||||
import java.util.*
 | 
			
		||||
import kotlin.system.exitProcess
 | 
			
		||||
 | 
			
		||||
fun convertToUnixEpochTimestamp(dateString: String): Long {
 | 
			
		||||
    val format = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
 | 
			
		||||
@@ -27,7 +33,11 @@ fun convertToUnixEpochTimestamp(dateString: String): Long {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fun getImageUri(activity: Activity, imageFile: File): Uri? {
 | 
			
		||||
    return FileProvider.getUriForFile(activity, BuildConfig.APPLICATION_ID + "." + activity.localClassName + ".provider", imageFile)
 | 
			
		||||
    return FileProvider.getUriForFile(
 | 
			
		||||
        activity,
 | 
			
		||||
        BuildConfig.APPLICATION_ID + "." + activity.localClassName + ".provider",
 | 
			
		||||
        imageFile
 | 
			
		||||
    )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@RequiresApi(Build.VERSION_CODES.R)
 | 
			
		||||
@@ -47,13 +57,13 @@ fun generateThumbnailForImage(context: Context, imageHash: String) {
 | 
			
		||||
    val orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL)
 | 
			
		||||
    val matrix = Matrix()
 | 
			
		||||
 | 
			
		||||
    when(orientation){
 | 
			
		||||
    when (orientation) {
 | 
			
		||||
        ExifInterface.ORIENTATION_ROTATE_90 -> matrix.postRotate(90F)
 | 
			
		||||
        ExifInterface.ORIENTATION_ROTATE_180 -> matrix.postRotate(180F)
 | 
			
		||||
        ExifInterface.ORIENTATION_ROTATE_270 -> matrix.postRotate(270F)
 | 
			
		||||
    }
 | 
			
		||||
    val rotated = Bitmap.createBitmap(img, 0, 0, img.width, img.height, matrix, true)
 | 
			
		||||
    val scaled = Bitmap.createScaledBitmap(rotated, rotated.width/4, rotated.height/4, true)
 | 
			
		||||
    val scaled = Bitmap.createScaledBitmap(rotated, rotated.width / 4, rotated.height / 4, true)
 | 
			
		||||
    scaled.compress(Bitmap.CompressFormat.WEBP_LOSSY, 25, FileOutputStream(thumbnailFile))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -64,8 +74,11 @@ fun String.md5(): String {
 | 
			
		||||
    return digest.toHexString()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fun stripNetWeight (netWeight: String): Double {
 | 
			
		||||
    return removeSubstringsFromString(netWeight, arrayOf("Л", "л", "мл", "Мл", "г", "Г", "кг", "Кг", "шт", "Шт", ",", " ", ".")).toDouble()
 | 
			
		||||
fun stripNetWeight(netWeight: String): Double {
 | 
			
		||||
    return removeSubstringsFromString(
 | 
			
		||||
        netWeight,
 | 
			
		||||
        arrayOf("Л", "л", "мл", "Мл", "г", "Г", "кг", "Кг", "шт", "Шт", ",", " ", ".")
 | 
			
		||||
    ).toDouble()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fun removeSubstringsFromString(text: String, toRemove: Array<String>): String {
 | 
			
		||||
@@ -99,14 +112,31 @@ fun calculateProductFreshness(dateOfProduction: Long, dateOfExpiry: Long): Doubl
 | 
			
		||||
    return lifeSpanLeft / productLifeSpan.toDouble()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fun getUnitNameById (context: Context, id: Int): String {
 | 
			
		||||
    return when(id) {
 | 
			
		||||
        0 -> { context.getString(R.string.kilogram) }
 | 
			
		||||
        1 -> { context.getString(R.string.gram) }
 | 
			
		||||
        2 -> { context.getString(R.string.liter) }
 | 
			
		||||
        3 -> { context.getString(R.string.milliliter) }
 | 
			
		||||
        4 -> { context.getString(R.string.pieces) }
 | 
			
		||||
        else -> { "" }
 | 
			
		||||
fun getUnitNameById(context: Context, id: Int): String {
 | 
			
		||||
    return when (id) {
 | 
			
		||||
        0 -> {
 | 
			
		||||
            context.getString(R.string.kilogram)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        1 -> {
 | 
			
		||||
            context.getString(R.string.gram)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        2 -> {
 | 
			
		||||
            context.getString(R.string.liter)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        3 -> {
 | 
			
		||||
            context.getString(R.string.milliliter)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        4 -> {
 | 
			
		||||
            context.getString(R.string.pieces)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        else -> {
 | 
			
		||||
            ""
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -137,4 +167,47 @@ fun bytesToHex(bytes: ByteArray): String {
 | 
			
		||||
        hexString.append(hex)
 | 
			
		||||
    }
 | 
			
		||||
    return hexString.toString()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fun isInternetConnectionAvailable(context: Context): Boolean {
 | 
			
		||||
    if (context.getSystemService(Context.CONNECTIVITY_SERVICE) == null) return false
 | 
			
		||||
    val connectivityManager =
 | 
			
		||||
        context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
 | 
			
		||||
    if (connectivityManager != null) {
 | 
			
		||||
        val capabilities =
 | 
			
		||||
            connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)
 | 
			
		||||
        if (capabilities != null) {
 | 
			
		||||
            if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
 | 
			
		||||
                return true
 | 
			
		||||
            } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
 | 
			
		||||
                return true
 | 
			
		||||
            } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET)) {
 | 
			
		||||
                return true
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fun noInternetConnectionAvailableNotification(context: Context) {
 | 
			
		||||
    AlertDialog.Builder(context)
 | 
			
		||||
        .setMessage(context.getString(R.string.no_internet_connection))
 | 
			
		||||
        .setPositiveButton(R.string.quit) { _, _ ->
 | 
			
		||||
            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
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
            sharedPreferences.edit().putString("token", "").apply()
 | 
			
		||||
            sharedPreferences.edit().putString("server", "").apply()
 | 
			
		||||
            sharedPreferences.edit().putStringSet("groups", emptySet()).apply()
 | 
			
		||||
            sharedPreferences.edit().putString("currentGroup", "").apply()
 | 
			
		||||
            exitProcess(0)
 | 
			
		||||
        }.show()
 | 
			
		||||
}
 | 
			
		||||
@@ -8,6 +8,7 @@ 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
 | 
			
		||||
 | 
			
		||||
class GroupActivity : AppCompatActivity() {
 | 
			
		||||
 | 
			
		||||
@@ -31,24 +32,28 @@ class GroupActivity : AppCompatActivity() {
 | 
			
		||||
            val groupName = binding.groupNameTextEdit.text.toString()
 | 
			
		||||
            val groupPassword = binding.groupPasswordTextEdit.text.toString()
 | 
			
		||||
            // group is set to "successful"
 | 
			
		||||
            val n = Net()
 | 
			
		||||
            n.language = sharedPreferences.getString("language", "en-US")!!
 | 
			
		||||
            n.server = sharedPreferences.getString("server", "")!!
 | 
			
		||||
            n.token = sharedPreferences.getString("token", "")!!
 | 
			
		||||
            val net = Net()
 | 
			
		||||
            net.language = sharedPreferences.getString("language", "en-US")!!
 | 
			
		||||
            net.server = sharedPreferences.getString("server", "")!!
 | 
			
		||||
            net.token = sharedPreferences.getString("token", "")!!
 | 
			
		||||
 | 
			
		||||
            val response = n.createGroup(groupName, groupPassword)
 | 
			
		||||
            val responseText = response.body!!.string()
 | 
			
		||||
 | 
			
		||||
            if (response.code == 200) {
 | 
			
		||||
                val currentGroups = sharedPreferences.getStringSet("groups", mutableSetOf())
 | 
			
		||||
                currentGroups!!.add(responseText)
 | 
			
		||||
                sharedPreferences.edit().putStringSet("groups", currentGroups).apply()
 | 
			
		||||
                sharedPreferences.edit().putString("currentGroup", responseText).apply()
 | 
			
		||||
                val intent = Intent(this, MainActivity::class.java)
 | 
			
		||||
                startActivity(intent)
 | 
			
		||||
                finish()
 | 
			
		||||
            if (!net.serverIsAvailable(this)) {
 | 
			
		||||
                noInternetConnectionAvailableNotification(this)
 | 
			
		||||
            } else {
 | 
			
		||||
                Toast.makeText(this, responseText, Toast.LENGTH_LONG).show()
 | 
			
		||||
                val response = net.createGroup(groupName, groupPassword)
 | 
			
		||||
                val responseText = response.body!!.string()
 | 
			
		||||
 | 
			
		||||
                if (response.code == 200) {
 | 
			
		||||
                    val currentGroups = sharedPreferences.getStringSet("groups", mutableSetOf())
 | 
			
		||||
                    currentGroups!!.add(responseText)
 | 
			
		||||
                    sharedPreferences.edit().putStringSet("groups", currentGroups).apply()
 | 
			
		||||
                    sharedPreferences.edit().putString("currentGroup", responseText).apply()
 | 
			
		||||
                    val intent = Intent(this, MainActivity::class.java)
 | 
			
		||||
                    startActivity(intent)
 | 
			
		||||
                    finish()
 | 
			
		||||
                } else {
 | 
			
		||||
                    Toast.makeText(this, responseText, Toast.LENGTH_LONG).show()
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -56,25 +61,29 @@ class GroupActivity : AppCompatActivity() {
 | 
			
		||||
            val groupName = binding.groupNameTextEdit.text.toString()
 | 
			
		||||
            val groupPassword = binding.groupPasswordTextEdit.text.toString()
 | 
			
		||||
 | 
			
		||||
            val n = Net()
 | 
			
		||||
            n.language = sharedPreferences.getString("language", "en-US")!!
 | 
			
		||||
            n.server = sharedPreferences.getString("server", "")!!
 | 
			
		||||
            n.token = sharedPreferences.getString("token", "")!!
 | 
			
		||||
            val net = Net()
 | 
			
		||||
            net.language = sharedPreferences.getString("language", "en-US")!!
 | 
			
		||||
            net.server = sharedPreferences.getString("server", "")!!
 | 
			
		||||
            net.token = sharedPreferences.getString("token", "")!!
 | 
			
		||||
 | 
			
		||||
            val groupId = n.getGroupId(groupName).toInt()
 | 
			
		||||
            val response = n.joinGroup(groupId, groupPassword)
 | 
			
		||||
            val responseText = response.body!!.string()
 | 
			
		||||
 | 
			
		||||
            if (response.code == 200) {
 | 
			
		||||
                val currentGroups = sharedPreferences.getStringSet("groups", mutableSetOf())
 | 
			
		||||
                currentGroups!!.add(groupId.toString())
 | 
			
		||||
                sharedPreferences.edit().putStringSet("groups", currentGroups).apply()
 | 
			
		||||
                sharedPreferences.edit().putString("currentGroup", groupId.toString()).apply()
 | 
			
		||||
                val intent = Intent(this, MainActivity::class.java)
 | 
			
		||||
                startActivity(intent)
 | 
			
		||||
                finish()
 | 
			
		||||
            if (!net.serverIsAvailable(this)) {
 | 
			
		||||
                noInternetConnectionAvailableNotification(this)
 | 
			
		||||
            } else {
 | 
			
		||||
                Toast.makeText(this, responseText, Toast.LENGTH_LONG).show()
 | 
			
		||||
                val groupId = net.getGroupId(groupName).toInt()
 | 
			
		||||
                val response = net.joinGroup(groupId, groupPassword)
 | 
			
		||||
                val responseText = response.body!!.string()
 | 
			
		||||
 | 
			
		||||
                if (response.code == 200) {
 | 
			
		||||
                    val currentGroups = sharedPreferences.getStringSet("groups", mutableSetOf())
 | 
			
		||||
                    currentGroups!!.add(groupId.toString())
 | 
			
		||||
                    sharedPreferences.edit().putStringSet("groups", currentGroups).apply()
 | 
			
		||||
                    sharedPreferences.edit().putString("currentGroup", groupId.toString()).apply()
 | 
			
		||||
                    val intent = Intent(this, MainActivity::class.java)
 | 
			
		||||
                    startActivity(intent)
 | 
			
		||||
                    finish()
 | 
			
		||||
                } else {
 | 
			
		||||
                    Toast.makeText(this, responseText, Toast.LENGTH_LONG).show()
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -10,6 +10,7 @@ import androidx.security.crypto.MasterKeys
 | 
			
		||||
import org.foxarmy.barcodescannerforemployees.Net
 | 
			
		||||
import org.foxarmy.barcodescannerforemployees.R
 | 
			
		||||
import org.foxarmy.barcodescannerforemployees.databinding.ActivityLoginBinding
 | 
			
		||||
import org.foxarmy.barcodescannerforemployees.noInternetConnectionAvailableNotification
 | 
			
		||||
import org.foxarmy.barcodescannerforemployees.parseArray
 | 
			
		||||
import org.json.JSONObject
 | 
			
		||||
 | 
			
		||||
@@ -40,31 +41,35 @@ class LoginActivity : AppCompatActivity() {
 | 
			
		||||
            val language = resources.getStringArray(R.array.languages)[binding.languageSpinner.selectedItemPosition]
 | 
			
		||||
            sharedPreferences.edit().putString("language", language).apply()
 | 
			
		||||
 | 
			
		||||
            val n = Net()
 | 
			
		||||
            n.language = sharedPreferences.getString("language", "en-US")!!
 | 
			
		||||
            n.server = server
 | 
			
		||||
            val net = Net()
 | 
			
		||||
            net.language = sharedPreferences.getString("language", "en-US")!!
 | 
			
		||||
            net.server = server
 | 
			
		||||
 | 
			
		||||
            val response = n.login(username, password)
 | 
			
		||||
            val responseText = response.body!!.string()
 | 
			
		||||
            if (response.code != 200) {
 | 
			
		||||
                Toast.makeText(this, responseText, Toast.LENGTH_SHORT).show()
 | 
			
		||||
            if (!net.serverIsAvailable(this)) {
 | 
			
		||||
                noInternetConnectionAvailableNotification(this)
 | 
			
		||||
            } else {
 | 
			
		||||
                val json = JSONObject(responseText)
 | 
			
		||||
                sharedPreferences.edit().putString("token", json["token"].toString()).apply()
 | 
			
		||||
                n.token = json["token"].toString()
 | 
			
		||||
                sharedPreferences.edit().putInt("userId", json["id"].toString().toInt()).apply()
 | 
			
		||||
                sharedPreferences.edit().putString("server", server).apply()
 | 
			
		||||
                val response = net.login(username, password)
 | 
			
		||||
                val responseText = response.body!!.string()
 | 
			
		||||
                if (response.code != 200) {
 | 
			
		||||
                    Toast.makeText(this, responseText, Toast.LENGTH_SHORT).show()
 | 
			
		||||
                } else {
 | 
			
		||||
                    val json = JSONObject(responseText)
 | 
			
		||||
                    sharedPreferences.edit().putString("token", json["token"].toString()).apply()
 | 
			
		||||
                    net.token = json["token"].toString()
 | 
			
		||||
                    sharedPreferences.edit().putInt("userId", json["id"].toString().toInt()).apply()
 | 
			
		||||
                    sharedPreferences.edit().putString("server", server).apply()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                val r = n.getMyGroups().body!!.string()
 | 
			
		||||
                val myGroups = parseArray(r).map { a -> a.toString()}
 | 
			
		||||
                    val r = net.getMyGroups().body!!.string()
 | 
			
		||||
                    val myGroups = parseArray(r).map { a -> a.toString()}
 | 
			
		||||
 | 
			
		||||
                sharedPreferences.edit().putStringSet("groups", myGroups.toSet()).apply()
 | 
			
		||||
                sharedPreferences.edit().putString("currentGroup", myGroups[0]).apply()
 | 
			
		||||
                    sharedPreferences.edit().putStringSet("groups", myGroups.toSet()).apply()
 | 
			
		||||
                    sharedPreferences.edit().putString("currentGroup", myGroups[0]).apply()
 | 
			
		||||
 | 
			
		||||
                val intent = Intent(this, MainActivity::class.java)
 | 
			
		||||
                startActivity(intent)
 | 
			
		||||
                finish()
 | 
			
		||||
                    val intent = Intent(this, MainActivity::class.java)
 | 
			
		||||
                    startActivity(intent)
 | 
			
		||||
                    finish()
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -76,22 +81,27 @@ class LoginActivity : AppCompatActivity() {
 | 
			
		||||
            sharedPreferences.edit().putString("language", language).apply()
 | 
			
		||||
            sharedPreferences.edit().putString("server", server).apply()
 | 
			
		||||
 | 
			
		||||
            val n = Net()
 | 
			
		||||
            n.language = language
 | 
			
		||||
            n.server = server
 | 
			
		||||
            val response = n.registerAccount(username, password);
 | 
			
		||||
            val responseText = response.body!!.string()
 | 
			
		||||
            if (response.code != 200) {
 | 
			
		||||
                Toast.makeText(this, responseText, Toast.LENGTH_SHORT).show();
 | 
			
		||||
            } else {
 | 
			
		||||
                sharedPreferences.edit().putInt("userId", responseText.toInt()).apply()
 | 
			
		||||
                val token = JSONObject(n.login(username, password).body!!.string())["token"].toString()
 | 
			
		||||
                sharedPreferences.edit().putString("token", token).apply()
 | 
			
		||||
            val net = Net()
 | 
			
		||||
            net.language = language
 | 
			
		||||
            net.server = server
 | 
			
		||||
 | 
			
		||||
                sharedPreferences.edit().putString("server", server).apply()
 | 
			
		||||
                val intent = Intent(this, GroupActivity::class.java)
 | 
			
		||||
                startActivity(intent)
 | 
			
		||||
                finish()
 | 
			
		||||
            if (!net.serverIsAvailable(this)) {
 | 
			
		||||
                noInternetConnectionAvailableNotification(this)
 | 
			
		||||
            } else {
 | 
			
		||||
                val response = net.registerAccount(username, password);
 | 
			
		||||
                val responseText = response.body!!.string()
 | 
			
		||||
                if (response.code != 200) {
 | 
			
		||||
                    Toast.makeText(this, responseText, Toast.LENGTH_SHORT).show();
 | 
			
		||||
                } else {
 | 
			
		||||
                    sharedPreferences.edit().putInt("userId", responseText.toInt()).apply()
 | 
			
		||||
                    val token = JSONObject(net.login(username, password).body!!.string())["token"].toString()
 | 
			
		||||
                    sharedPreferences.edit().putString("token", token).apply()
 | 
			
		||||
 | 
			
		||||
                    sharedPreferences.edit().putString("server", server).apply()
 | 
			
		||||
                    val intent = Intent(this, GroupActivity::class.java)
 | 
			
		||||
                    startActivity(intent)
 | 
			
		||||
                    finish()
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -16,10 +16,7 @@ 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.Net
 | 
			
		||||
import org.foxarmy.barcodescannerforemployees.R
 | 
			
		||||
import org.foxarmy.barcodescannerforemployees.ViewPagerAdapter
 | 
			
		||||
import org.foxarmy.barcodescannerforemployees.convertToUnixEpochTimestamp
 | 
			
		||||
import org.foxarmy.barcodescannerforemployees.*
 | 
			
		||||
import org.foxarmy.barcodescannerforemployees.database.AbstractProductDAO
 | 
			
		||||
import org.foxarmy.barcodescannerforemployees.database.CategoryDAO
 | 
			
		||||
import org.foxarmy.barcodescannerforemployees.database.DBStorageController
 | 
			
		||||
@@ -60,9 +57,16 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
 | 
			
		||||
        actionBarDrawerToggle!!.syncState()
 | 
			
		||||
        binding.navView.setNavigationItemSelectedListener(this)
 | 
			
		||||
 | 
			
		||||
        // to make the Navigation drawer icon always appear on the action bar
 | 
			
		||||
        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()
 | 
			
		||||
@@ -78,8 +82,6 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
 | 
			
		||||
                "StorageFragment" -> {
 | 
			
		||||
                    val addAbstractProductIntent = Intent(this, AddAbstractProductActivity::class.java)
 | 
			
		||||
                    val extras = Bundle()
 | 
			
		||||
                    // I reuse the same stuff for editing and adding new product.
 | 
			
		||||
                    // if abstractProduct == null, it means that we need to create new object
 | 
			
		||||
                    extras.putParcelable("abstractProduct", null)
 | 
			
		||||
                    extras.putString("action", "new")
 | 
			
		||||
                    addAbstractProductIntent.putExtras(extras)
 | 
			
		||||
@@ -104,7 +106,14 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        synchronize()
 | 
			
		||||
        val net = Net()
 | 
			
		||||
        net.server = sharedPreferences.getString("server", "")!!
 | 
			
		||||
 | 
			
		||||
        if (!net.serverIsAvailable(this)) {
 | 
			
		||||
            noInternetConnectionAvailableNotification(this)
 | 
			
		||||
        } else {
 | 
			
		||||
            synchronize()
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun synchronize() {
 | 
			
		||||
 
 | 
			
		||||
@@ -31,8 +31,7 @@ class NavigatorActivity : Activity() {
 | 
			
		||||
        if (!isAuthenticated()) {
 | 
			
		||||
            intent = Intent(this, LoginActivity::class.java);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
        startActivity(intent);
 | 
			
		||||
        finish();
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -114,6 +114,9 @@
 | 
			
		||||
    <string name="image_compress_factor">Степень сжатия изображения</string>
 | 
			
		||||
    <string name="current_group">Текущая группа</string>
 | 
			
		||||
    <string name="cancel">Отмена</string>
 | 
			
		||||
    <string name="no_internet_connection">No internet connection available. Please, connect to a network.</string>
 | 
			
		||||
    <string name="ok">Ok</string>
 | 
			
		||||
    <string name="logout">Log out</string>
 | 
			
		||||
    <string-array name="languages">
 | 
			
		||||
        <item>en-US</item>
 | 
			
		||||
        <item>ru-RU</item>
 | 
			
		||||
 
 | 
			
		||||
@@ -112,6 +112,9 @@
 | 
			
		||||
    <string name="image_compress_factor">Image compression factor</string>
 | 
			
		||||
    <string name="current_group">Current group</string>
 | 
			
		||||
    <string name="cancel">Cancel</string>
 | 
			
		||||
    <string name="no_internet_connection">No internet connection available. Please, connect to a network.</string>
 | 
			
		||||
    <string name="ok">Ok</string>
 | 
			
		||||
    <string name="logout">Log out</string>
 | 
			
		||||
    <string-array name="languages">
 | 
			
		||||
        <item>en-US</item>
 | 
			
		||||
        <item>ru-RU</item>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user