From f84302e4a2baaa533930d612f18662313e18d67b Mon Sep 17 00:00:00 2001
From: Universall <universall@server.com>
Date: Thu, 20 Feb 2025 16:17:24 +0300
Subject: [PATCH] Qr scan access controll

---
 .../displaynone/acss/ui/scan/QrScanFragment.kt  | 17 +++++++++++++++++
 app/src/main/res/layout/fragment_qr_scan.xml    | 12 ++++++++++++
 app/src/main/res/values-en/strings-en.xml       |  1 +
 app/src/main/res/values-ru/strings-ru.xml       |  2 +-
 app/src/main/res/values/strings.xml             |  1 +
 5 files changed, 32 insertions(+), 1 deletion(-)

diff --git a/app/src/main/java/com/displaynone/acss/ui/scan/QrScanFragment.kt b/app/src/main/java/com/displaynone/acss/ui/scan/QrScanFragment.kt
index 190afe9..4550fce 100644
--- a/app/src/main/java/com/displaynone/acss/ui/scan/QrScanFragment.kt
+++ b/app/src/main/java/com/displaynone/acss/ui/scan/QrScanFragment.kt
@@ -16,6 +16,8 @@ import androidx.fragment.app.viewModels
 import androidx.navigation.NavController
 import androidx.navigation.fragment.findNavController
 import com.displaynone.acss.R
+import com.displaynone.acss.components.auth.models.user.UserServiceST
+import com.displaynone.acss.components.auth.models.user.repository.dto.UserDTO
 import com.displaynone.acss.databinding.FragmentQrScanBinding
 import com.displaynone.acss.util.collectWhenStarted
 import com.displaynone.acss.util.visibleOrGone
@@ -49,10 +51,25 @@ class QrScanFragment : Fragment(R.layout.fragment_qr_scan) {
         binding.close.setOnClickListener { viewModel.close() }
     }
 
+    private fun updateUIAccessDenied() {
+        binding.loading.visibleOrGone(false)
+        binding.viewFinder.visibleOrGone(false)
+        binding.close.visibleOrGone(false)
+        binding.error.visibleOrGone(true)
+        binding.error.text = requireContext().getString(R.string.access_denied)
+    }
+
     private fun subscribe() {
+        val user: UserDTO? = UserServiceST.getInstance().getUserDTO()
+        if (user == null || user.isACSBlocked) {
+            updateUIAccessDenied()
+            return
+        }
+
         viewModel.state.collectWhenStarted(this) { state ->
             binding.loading.visibleOrGone(state is QrScanViewModel.State.Loading)
             binding.viewFinder.visibleOrGone(state is QrScanViewModel.State.Scan)
+
             if (!isCameraInit && state is QrScanViewModel.State.Scan) {
                 startCamera()
                 isCameraInit = true
diff --git a/app/src/main/res/layout/fragment_qr_scan.xml b/app/src/main/res/layout/fragment_qr_scan.xml
index a52eb71..95ed14b 100644
--- a/app/src/main/res/layout/fragment_qr_scan.xml
+++ b/app/src/main/res/layout/fragment_qr_scan.xml
@@ -4,6 +4,18 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent">
 
+    <TextView
+        android:id="@+id/error"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_margin="15dp"
+        android:background="?android:attr/colorBackground"
+        android:gravity="center"
+        android:letterSpacing="0.05"
+        android:textColor="?attr/colorOnBackground"
+        android:textSize="24sp"
+        android:visibility="gone" />
+
     <androidx.camera.view.PreviewView
         android:id="@+id/viewFinder"
         android:layout_width="0dp"
diff --git a/app/src/main/res/values-en/strings-en.xml b/app/src/main/res/values-en/strings-en.xml
index f979947..c6cc7ff 100644
--- a/app/src/main/res/values-en/strings-en.xml
+++ b/app/src/main/res/values-en/strings-en.xml
@@ -35,5 +35,6 @@
     <string name="error_404">Error: Requested resource not found</string>
     <string name="error_500">Server error: Try again later</string>
     <string name="error_unknown">Неизвестная ошибка (%s)</string>
+    <string name="access_denied">Access denied</string>
 
 </resources>
\ No newline at end of file
diff --git a/app/src/main/res/values-ru/strings-ru.xml b/app/src/main/res/values-ru/strings-ru.xml
index e9a5b1c..2f90354 100644
--- a/app/src/main/res/values-ru/strings-ru.xml
+++ b/app/src/main/res/values-ru/strings-ru.xml
@@ -36,7 +36,7 @@
  <string name="error_login_too_short">Логин должен содержать не менее 3 символов</string>
  <string name="error_login_starts_with_digit">Логин в систему не может начинаться с цифры</string>
  <string name="error_login_invalid_characters">Логин может содержать только буквы, цифры и символы подчеркивания</string>
-
+    <string name="access_denied">Доступ запрещён</string>
 
 
 </resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index faa86ad..948f94d 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -38,4 +38,5 @@
     <string name="error_404">Error: Requested resource not found</string>
     <string name="error_500">Server error: Try again later</string>
     <string name="error_unknown">Неизвестная ошибка (%s)</string>
+    <string name="access_denied">Access denied</string>
 </resources>
\ No newline at end of file