From 1dd484878202f853edbbc8966fb7163e7632ad90 Mon Sep 17 00:00:00 2001
From: Denis Oleynik <oleynik.denis.2009@gmail.com>
Date: Thu, 20 Feb 2025 10:31:16 +0300
Subject: [PATCH 1/2] Change visibility button for admins

---
 .../java/ru/myitschool/work/data/mapper/UserInfoMapper.kt   | 6 ++++--
 .../work/domain/profile/entities/UserInfoEntity.kt          | 4 ++++
 .../java/ru/myitschool/work/ui/profile/ProfileFragment.kt   | 6 ++++--
 .../java/ru/myitschool/work/ui/profile/ProfileViewModel.kt  | 5 ++++-
 4 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/app/src/main/java/ru/myitschool/work/data/mapper/UserInfoMapper.kt b/app/src/main/java/ru/myitschool/work/data/mapper/UserInfoMapper.kt
index 548b2dc..3e90287 100644
--- a/app/src/main/java/ru/myitschool/work/data/mapper/UserInfoMapper.kt
+++ b/app/src/main/java/ru/myitschool/work/data/mapper/UserInfoMapper.kt
@@ -14,9 +14,11 @@ class UserInfoMapper @Inject constructor() {
                 fullname = model.fullname ?: error("fullname is null"),
                 imageUrl = model.imageUrl ?: error("imageUrl is null"),
                 position = model.position ?: error("position is null"),
-                lastEntryMillis = model.lastEntry?.let { date ->
+                lastEntryMillis = model.lastEntry.let { date ->
                     simpleDateFormat.parse(date)?.time ?: error("parse lastEntry error")
-                } ?: error("lastEntry is null")
+                } ?: error("lastEntry is null"),
+                role = model.role,
+                blocked = model.blocked
             )
         }
     }
diff --git a/app/src/main/java/ru/myitschool/work/domain/profile/entities/UserInfoEntity.kt b/app/src/main/java/ru/myitschool/work/domain/profile/entities/UserInfoEntity.kt
index 46dc55f..4e7c213 100644
--- a/app/src/main/java/ru/myitschool/work/domain/profile/entities/UserInfoEntity.kt
+++ b/app/src/main/java/ru/myitschool/work/domain/profile/entities/UserInfoEntity.kt
@@ -1,8 +1,12 @@
 package ru.myitschool.work.domain.profile.entities
 
+import ru.myitschool.work.data.dto.Role
+
 class UserInfoEntity(
     val fullname: String,
     val imageUrl: String,
     val position: String,
+    val role: Role,
+    val blocked: Boolean,
     val lastEntryMillis: Long,
 )
\ No newline at end of file
diff --git a/app/src/main/java/ru/myitschool/work/ui/profile/ProfileFragment.kt b/app/src/main/java/ru/myitschool/work/ui/profile/ProfileFragment.kt
index b38f857..337ea6c 100644
--- a/app/src/main/java/ru/myitschool/work/ui/profile/ProfileFragment.kt
+++ b/app/src/main/java/ru/myitschool/work/ui/profile/ProfileFragment.kt
@@ -63,11 +63,13 @@ class ProfileFragment : Fragment(R.layout.fragment_profile) {
                     binding.lastEntry.text = state.lastEntry
                     binding.fullname.text = state.fullname
                     if (state.admin){
-                        //TODO Приделать админские штучки
                         binding.admin.visibility = View.VISIBLE
-                    }else{
+                    } else {
                         binding.admin.visibility = View.GONE
                     }
+                    if (state.blocked) {
+                        // TODO: СДЕЛАТЬ ФОН КРАСНЫМ
+                    }
                     Picasso.get()
                         .load(state.imageUrl)
                         .error(R.drawable.ic_no_img)
diff --git a/app/src/main/java/ru/myitschool/work/ui/profile/ProfileViewModel.kt b/app/src/main/java/ru/myitschool/work/ui/profile/ProfileViewModel.kt
index b4ba863..d306aaf 100644
--- a/app/src/main/java/ru/myitschool/work/ui/profile/ProfileViewModel.kt
+++ b/app/src/main/java/ru/myitschool/work/ui/profile/ProfileViewModel.kt
@@ -12,6 +12,7 @@ import kotlinx.coroutines.flow.asStateFlow
 import kotlinx.coroutines.flow.update
 import kotlinx.coroutines.launch
 import ru.myitschool.work.R
+import ru.myitschool.work.data.dto.Role
 import ru.myitschool.work.domain.auth.LogoutUseCase
 import ru.myitschool.work.domain.profile.GetUserInfoUseCase
 import ru.myitschool.work.utils.MutablePublishFlow
@@ -72,7 +73,8 @@ class ProfileViewModel @Inject constructor(
                             imageUrl = value.imageUrl,
                             position = value.position,
                             lastEntry = simpleDateFormat.format(Date(value.lastEntryMillis)),
-                            admin = true
+                            admin = value.role == Role.ADMIN,
+                            blocked = value.blocked
                         )
                     }
                 },
@@ -100,6 +102,7 @@ class ProfileViewModel @Inject constructor(
             val position: String,
             val lastEntry: String,
             val admin: Boolean,
+            val blocked: Boolean
         ) : State
     }
 

From 835ddd1afb5504d4fb57fcb2f162d009db8c4468 Mon Sep 17 00:00:00 2001
From: v228a <v228a@proton.me>
Date: Thu, 20 Feb 2025 10:44:28 +0300
Subject: [PATCH 2/2] =?UTF-8?q?AlertDialog=20=D0=BF=D1=80=D0=B8=20=D0=B2?=
 =?UTF-8?q?=D1=8B=D1=85=D0=BE=D0=B4=D0=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../work/ui/profile/ProfileFragment.kt        | 57 ++++++++++++++++++-
 .../work/ui/profile/ProfileViewModel.kt       |  9 ++-
 app/src/main/res/values-ru/strings.xml        |  6 +-
 app/src/main/res/values/strings.xml           |  2 +
 app/src/main/res/values/strings_profile.xml   |  2 +
 5 files changed, 73 insertions(+), 3 deletions(-)

diff --git a/app/src/main/java/ru/myitschool/work/ui/profile/ProfileFragment.kt b/app/src/main/java/ru/myitschool/work/ui/profile/ProfileFragment.kt
index b38f857..e559731 100644
--- a/app/src/main/java/ru/myitschool/work/ui/profile/ProfileFragment.kt
+++ b/app/src/main/java/ru/myitschool/work/ui/profile/ProfileFragment.kt
@@ -1,8 +1,15 @@
 package ru.myitschool.work.ui.profile
 
+import android.content.DialogInterface
+import android.graphics.Color
+import android.graphics.Typeface
 import android.os.Bundle
 import android.util.Log
 import android.view.View
+import android.widget.TextView
+import androidx.appcompat.app.AlertDialog
+import androidx.core.content.ContextCompat
+import androidx.core.content.res.ResourcesCompat
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.viewModels
 import androidx.navigation.fragment.findNavController
@@ -78,11 +85,59 @@ class ProfileFragment : Fragment(R.layout.fragment_profile) {
 
         viewModel.action.collectWhenStarted(this) { action ->
             when(action) {
-                is ProfileViewModel.Action.OpenLogin -> {
+                is ProfileViewModel.Action.Logout -> {
                     findNavController().navigate(LoginDestination) {
                         popUpTo<ProfileDestination> { inclusive = true }
                     }
                 }
+                is ProfileViewModel.Action.OpenLogin -> {
+
+                    val builder = AlertDialog.Builder(requireContext())
+
+                    builder.setTitle(ContextCompat.getContextForLanguage(requireContext()).getString(R.string.profile_logout_dialog));
+                    builder.setMessage(ContextCompat.getContextForLanguage(requireContext()).getString(R.string.profile_logout_text_dialog))
+                    builder.setPositiveButton(
+                        ContextCompat.getContextForLanguage(requireContext()).getString(R.string.logout),
+                        DialogInterface.OnClickListener { dialogInterface, i ->
+                            viewModel.logout()
+                             dialogInterface.dismiss()
+                        })
+                    builder.setNegativeButton(
+                        ContextCompat.getContextForLanguage(requireContext()).getString(R.string.cancel),
+                        DialogInterface.OnClickListener { dialogInterface, i ->
+                            dialogInterface.dismiss()
+
+                        })
+
+                    val dialog = builder.create()
+
+
+
+                    dialog.setOnShowListener {
+                        val titleView = dialog.findViewById<TextView>(android.R.id.title)
+                        val messageView = dialog.findViewById<TextView>(android.R.id.message)
+
+
+
+                        titleView?.setTextAppearance(R.style.Theme_UiTemplate_TextH2)
+                        messageView?.setTextAppearance(R.style.Theme_UiTemplate_TextH4)
+
+
+
+                        val positiveButton = dialog.getButton(AlertDialog.BUTTON_POSITIVE)
+                        val negativeButton = dialog.getButton(AlertDialog.BUTTON_NEGATIVE)
+
+
+                        positiveButton.setTextColor(ContextCompat.getColor(requireContext(), R.color.ErrorRed) )
+                        negativeButton.setTextColor(ContextCompat.getColor(requireContext(), R.color.AccentBlue) )
+                    }
+
+                    // Установка кнопок
+
+
+                    // Показать диалог
+                    dialog.show()
+         }
 
                 is ProfileViewModel.Action.OpenLog -> {
                     findNavController().navigate(EntryListDestination) {
diff --git a/app/src/main/java/ru/myitschool/work/ui/profile/ProfileViewModel.kt b/app/src/main/java/ru/myitschool/work/ui/profile/ProfileViewModel.kt
index b4ba863..e8523c0 100644
--- a/app/src/main/java/ru/myitschool/work/ui/profile/ProfileViewModel.kt
+++ b/app/src/main/java/ru/myitschool/work/ui/profile/ProfileViewModel.kt
@@ -37,11 +37,17 @@ class ProfileViewModel @Inject constructor(
         updateUserInfo()
     }
 
+    fun logout(){
+        viewModelScope.launch {
+            logoutUseCase.get().invoke()
+            _action.emit(Action.Logout)
 
+        }
+
+    }
 
     fun clickLogout() {
         viewModelScope.launch {
-            logoutUseCase.get().invoke()
             _action.emit(Action.OpenLogin)
         }
     }
@@ -108,6 +114,7 @@ class ProfileViewModel @Inject constructor(
         data object OpenScan : Action
         data object OpenLog : Action
         data object OpenSearch : Action
+        data object Logout : Action
     }
 
     companion object {
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 3516fe6..e79b729 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -23,4 +23,8 @@
     <string name="qr_result_status_success">Успешно</string>
     <string name="qr_result_status_cancel">Операция отменена</string>
     <string name="qr_result_status_error">Что-то пошло не так</string>
-</resources>
\ No newline at end of file
+    <string name="profile_logout_dialog">Выход</string>
+    <string name="profile_logout_text_dialog">Вы уверенны что хотите выйти из системы?</string>
+    <string name="logout">Выход</string>
+    <string name="cancel">Отмена</string>
+</resources>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 9b2b311..b0ae32e 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,4 +1,6 @@
 <resources>
     <string name="app_name">NTO Pass</string>
     <string name="entry_history">Entry History</string>
+    <string name="logout">Logout</string>
+    <string name="cancel">Cancel</string>
 </resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/strings_profile.xml b/app/src/main/res/values/strings_profile.xml
index 3f2786a..1d0f409 100644
--- a/app/src/main/res/values/strings_profile.xml
+++ b/app/src/main/res/values/strings_profile.xml
@@ -5,4 +5,6 @@
     <string name="profile_main_textview">Home</string>
     <string name="profile_admin_button">Admin panel</string>
     <string name="profile_list_button">Entry History</string>
+    <string name="profile_logout_dialog">Logout</string>
+    <string name="profile_logout_text_dialog">Are you sure you want to log out?</string>
 </resources>
\ No newline at end of file