Merge remote-tracking branch 'origin/main'

This commit is contained in:
Juja2025 2025-02-19 18:43:45 +03:00
commit 7149b0088a
11 changed files with 140 additions and 64 deletions

View File

@ -16,7 +16,7 @@
android:roundIcon="@mipmap/ic_launcher_round" android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/Theme.UiTemplate" android:theme="@style/Theme.UiTemplate"
tools:targetApi="31"> tools:targetApi="34">
<activity <activity
android:name=".ui.RootActivity" android:name=".ui.RootActivity"
android:exported="true"> android:exported="true">

View File

@ -19,6 +19,8 @@ import ru.myitschool.work.ui.qr.result.QrResultDestination
import ru.myitschool.work.ui.qr.result.QrResultFragment import ru.myitschool.work.ui.qr.result.QrResultFragment
import ru.myitschool.work.ui.qr.scan.QrScanDestination import ru.myitschool.work.ui.qr.scan.QrScanDestination
import ru.myitschool.work.ui.qr.scan.QrScanFragment import ru.myitschool.work.ui.qr.scan.QrScanFragment
import ru.myitschool.work.ui.searchuser.SearchUserDestination
import ru.myitschool.work.ui.searchuser.SearchUserFragment
import ru.myitschool.work.ui.splash.SplashDestination import ru.myitschool.work.ui.splash.SplashDestination
import ru.myitschool.work.ui.splash.SplashFragment import ru.myitschool.work.ui.splash.SplashFragment
@ -42,6 +44,7 @@ class RootActivity : AppCompatActivity() {
fragment<QrResultFragment, QrResultDestination>() fragment<QrResultFragment, QrResultDestination>()
fragment<QrScanFragment, QrScanDestination>() fragment<QrScanFragment, QrScanDestination>()
fragment<EntryListFragment, EntryListDestination>() fragment<EntryListFragment, EntryListDestination>()
fragment<SearchUserFragment, SearchUserDestination>()
} }
} }

View File

@ -1,14 +1,19 @@
package ru.myitschool.work.ui.entrylist.adapter package ru.myitschool.work.ui.entrylist.adapter
import android.graphics.Color import android.graphics.Color
import android.os.Build
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.AdapterView import android.widget.AdapterView
import android.widget.TextView import android.widget.TextView
import androidx.annotation.RequiresApi
import androidx.core.graphics.drawable.toDrawable import androidx.core.graphics.drawable.toDrawable
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import ru.myitschool.work.R import ru.myitschool.work.R
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
import java.util.Locale
class AdapterEntryHistory(private val datas: List<EntryHistoryEntity>) : RecyclerView class AdapterEntryHistory(private val datas: List<EntryHistoryEntity>) : RecyclerView
.Adapter<AdapterEntryHistory.MyViewHolder>() { .Adapter<AdapterEntryHistory.MyViewHolder>() {
@ -25,8 +30,12 @@ class AdapterEntryHistory(private val datas: List<EntryHistoryEntity>) : Recycle
return MyViewHolder(itemView) return MyViewHolder(itemView)
} }
@RequiresApi(Build.VERSION_CODES.O)
override fun onBindViewHolder(holder: MyViewHolder, position: Int) { override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
holder.dateText.text = datas[position].time.toString()
holder.dateText.text = LocalDateTime.parse(datas[position].time).format(DateTimeFormatter.ofPattern("d MMMM yyyy, HH:mm:ss", Locale.getDefault()))
holder.identificatorText.text = datas[position].identificator.toString() holder.identificatorText.text = datas[position].identificator.toString()
holder.typeText.text = datas[position].type.toString() holder.typeText.text = datas[position].type.toString()

View File

@ -15,6 +15,8 @@ import ru.myitschool.work.ui.entrylist.EntryListDestination
import ru.myitschool.work.ui.login.LoginDestination import ru.myitschool.work.ui.login.LoginDestination
import ru.myitschool.work.ui.qr.result.QrResultDestination import ru.myitschool.work.ui.qr.result.QrResultDestination
import ru.myitschool.work.ui.qr.scan.QrScanDestination import ru.myitschool.work.ui.qr.scan.QrScanDestination
import ru.myitschool.work.ui.searchuser.SearchUserDestination
import ru.myitschool.work.ui.searchuser.SearchUserFragment
import ru.myitschool.work.utils.collectWhenStarted import ru.myitschool.work.utils.collectWhenStarted
import ru.myitschool.work.utils.visibleOrGone import ru.myitschool.work.utils.visibleOrGone
@ -59,11 +61,12 @@ class ProfileFragment : Fragment(R.layout.fragment_profile) {
swipeRefreshLayout.isRefreshing = false swipeRefreshLayout.isRefreshing = false
binding.position.text = state.position binding.position.text = state.position
binding.lastEntry.text = state.lastEntry binding.lastEntry.text = state.lastEntry
binding.fullname.text = state.fullname
if (state.admin){ if (state.admin){
//TODO Приделать админские штучки //TODO Приделать админские штучки
binding.fullname.text = state.fullname + " admin" binding.admin.visibility = View.VISIBLE
}else{ }else{
binding.fullname.text = state.fullname binding.admin.visibility = View.GONE
} }
Picasso.get() Picasso.get()
.load(state.imageUrl) .load(state.imageUrl)
@ -94,6 +97,12 @@ class ProfileFragment : Fragment(R.layout.fragment_profile) {
} }
} }
is ProfileViewModel.Action.OpenSearch -> {
findNavController().navigate(SearchUserDestination) {
popUpTo<SearchUserFragment> { inclusive = true }
}
}
} }
} }
} }
@ -102,6 +111,7 @@ class ProfileFragment : Fragment(R.layout.fragment_profile) {
binding.logout.setOnClickListener { viewModel.clickLogout() } binding.logout.setOnClickListener { viewModel.clickLogout() }
binding.scan.setOnClickListener { viewModel.clickScan() } binding.scan.setOnClickListener { viewModel.clickScan() }
binding.entryList.setOnClickListener{ viewModel.clickLog()} binding.entryList.setOnClickListener{ viewModel.clickLog()}
binding.admin.setOnClickListener { viewModel.clickSearch() }
} }
override fun onDestroyView() { override fun onDestroyView() {

View File

@ -55,6 +55,11 @@ class ProfileViewModel @Inject constructor(
_action.emit(Action.OpenScan) _action.emit(Action.OpenScan)
} }
} }
fun clickSearch(){
viewModelScope.launch {
_action.emit(Action.OpenSearch)
}
}
fun updateUserInfo() { fun updateUserInfo() {
viewModelScope.launch { viewModelScope.launch {
@ -67,7 +72,7 @@ class ProfileViewModel @Inject constructor(
imageUrl = value.imageUrl, imageUrl = value.imageUrl,
position = value.position, position = value.position,
lastEntry = simpleDateFormat.format(Date(value.lastEntryMillis)), lastEntry = simpleDateFormat.format(Date(value.lastEntryMillis)),
admin = false admin = true
) )
} }
}, },
@ -102,6 +107,7 @@ class ProfileViewModel @Inject constructor(
data object OpenLogin : Action data object OpenLogin : Action
data object OpenScan : Action data object OpenScan : Action
data object OpenLog : Action data object OpenLog : Action
data object OpenSearch : Action
} }
companion object { companion object {

View File

@ -0,0 +1,6 @@
package ru.myitschool.work.ui.searchuser
import kotlinx.serialization.Serializable
@Serializable
data object SearchUserDestination

View File

@ -0,0 +1,28 @@
package ru.myitschool.work.ui.searchuser
import androidx.fragment.app.viewModels
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.serialization.Serializable
import ru.myitschool.work.R
@Serializable
@AndroidEntryPoint
class SearchUserFragment : Fragment(R.layout.fragment_search_user) {
companion object {
fun newInstance() = SearchUserFragment()
}
private val viewModel: SearchUserViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// TODO: Use the ViewModel
}
}

View File

@ -0,0 +1,14 @@
package ru.myitschool.work.ui.searchuser
import android.content.Context
import androidx.lifecycle.ViewModel
import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext
import javax.inject.Inject
@HiltViewModel
class SearchUserViewModel @Inject constructor(
@ApplicationContext private val context: Context,
) : ViewModel() {
// TODO: Implement the ViewModel
}

View File

@ -1,58 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp"
android:orientation="vertical">
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/floatingActionButton2"
style="@style/Theme.UiTemplate.FAB.Gray"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
android:src="@drawable/ic_back"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/text_login"
android:padding="35dp"
style="@style/Theme.UiTemplate.TextH1"
android:layout_width="wrap_content"
android:layout_marginBottom="10dp"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_gravity="center"
android:text="@string/admin_main" />
<com.google.android.material.textfield.TextInputLayout
style="@style/Theme.UiTemplate.Input"
android:id="@+id/input_username"
android:layout_marginTop="45dp"
android:layout_width="match_parent"
app:layout_constraintWidth_max="400dp"
app:layout_constraintWidth_percent="0.8"
android:layout_height="58dp">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/username"
style="@style/Theme.UiTemplate.Input.Text"
android:layout_width="match_parent"
android:layout_height="60dp"
android:inputType="text"
android:maxLines="1"
android:hint="@string/admin_input_hint">
</com.google.android.material.textfield.TextInputEditText>
</com.google.android.material.textfield.TextInputLayout>
<Button
android:id="@+id/login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/Theme.UiTemplate.Button"
android:layout_marginTop="58dp"
android:layout_gravity="center"
android:text="@string/admin_button" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,58 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp"
android:orientation="vertical">
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/floatingActionButton2"
style="@style/Theme.UiTemplate.FAB.Gray"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
android:src="@drawable/ic_back"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/text_login"
android:padding="35dp"
style="@style/Theme.UiTemplate.TextH1"
android:layout_width="wrap_content"
android:layout_marginBottom="10dp"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_gravity="center"
android:text="@string/admin_main" />
<com.google.android.material.textfield.TextInputLayout
style="@style/Theme.UiTemplate.Input"
android:id="@+id/input_username"
android:layout_marginTop="45dp"
android:layout_width="match_parent"
app:layout_constraintWidth_max="400dp"
app:layout_constraintWidth_percent="0.8"
android:layout_height="58dp">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/username"
style="@style/Theme.UiTemplate.Input.Text"
android:layout_width="match_parent"
android:layout_height="60dp"
android:inputType="text"
android:maxLines="1"
android:hint="@string/admin_input_hint">
</com.google.android.material.textfield.TextInputEditText>
</com.google.android.material.textfield.TextInputLayout>
<Button
android:id="@+id/login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/Theme.UiTemplate.Button"
android:layout_marginTop="58dp"
android:layout_gravity="center"
android:text="@string/admin_button" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -34,7 +34,7 @@ object Version {
object Android { object Android {
object Sdk { object Sdk {
const val min = 24 const val min = 28
const val compile = 34 const val compile = 34
const val target = 34 const val target = 34
} }