Tochno Last without scroll view with back

This commit is contained in:
shipovnikaaa 2025-02-20 16:50:33 +03:00
parent 5b1b590358
commit 923da6b37e
6 changed files with 91 additions and 13 deletions

View File

@ -23,6 +23,12 @@ interface LoginApi {
@Query("login") login: String @Query("login") login: String
): Response<ResponseBody> ): Response<ResponseBody>
@GET("entries")
suspend fun entries(
@Header("Authorization") authHeader: String,
@Query("login") login: String
): Response<ResponseBody>
@PUT("ban") @PUT("ban")
suspend fun ban( suspend fun ban(
@Header("Authorization") authHeader: String, @Header("Authorization") authHeader: String,

View File

@ -0,0 +1,11 @@
package ru.myitschool.work.ui.main
import java.time.LocalDateTime
data class EntryClass(
val value: Long = 1,
val type:String= "",
val dateTime:String="",
val login: String =""
)

View File

@ -19,6 +19,11 @@ import ru.myitschool.work.utils.collectWhenStarted
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.google.gson.GsonBuilder
import createAuthHeader
import createRetrofit
import ru.myitschool.work.data.remote.LoginApi
import ru.myitschool.work.data.remote.PersonInfoDto
import ru.myitschool.work.utils.HistoryItem import ru.myitschool.work.utils.HistoryItem
@AndroidEntryPoint @AndroidEntryPoint
@ -28,6 +33,9 @@ class MainFragment: Fragment(R.layout.fragment_main) {
private val viewModel: MainViewModel by viewModels() private val viewModel: MainViewModel by viewModels()
private val picasso: Picasso by lazy { Picasso.get() } private val picasso: Picasso by lazy { Picasso.get() }
private val retrofit = createRetrofit("your_username", "your_password")
private val loginApi = retrofit.create(LoginApi::class.java)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
_binding = FragmentMainBinding.bind(view) _binding = FragmentMainBinding.bind(view)
@ -53,16 +61,24 @@ class MainFragment: Fragment(R.layout.fragment_main) {
binding.admin.setOnClickListener { binding.admin.setOnClickListener {
findNavController().navigate(AdminDestination(user, password)) findNavController().navigate(AdminDestination(user, password))
} }
subscribe(username, password)
} }
} }
subscribe()
} }
private fun subscribe() { private fun subscribe(username:String, password:String) {
viewModel.state.collectWhenStarted(this) { state -> viewModel.state.collectWhenStarted(this) { state ->
val recyclerView = binding.recyclerView val recyclerView = binding.recyclerView
// val authHeader = createAuthHeader(username = username, password= password)
// val info = loginApi.entries(authHeader, username)
// val personInfo = info.body()?.let { responseBody ->
// GsonBuilder().create().fromJson(responseBody.string(), PersonInfoDto::class.java)
// }
// println(info)
val examList: MutableList<HistoryItem> = ArrayList() val examList: MutableList<HistoryItem> = ArrayList()
examList.add( examList.add(
HistoryItem( HistoryItem(
@ -127,7 +143,6 @@ class MainFragment: Fragment(R.layout.fragment_main) {
recyclerView.adapter = adapter recyclerView.adapter = adapter
} }
} }
private fun setError(error: String?) { private fun setError(error: String?) {
val showError = error != null val showError = error != null
val views = listOf(binding.fullname, binding.position, binding.lastEntry, binding.photo, binding.logout) val views = listOf(binding.fullname, binding.position, binding.lastEntry, binding.photo, binding.logout)

View File

@ -1,11 +1,11 @@
package ru.myitschool.work.ui.main package ru.myitschool.work.ui.main
data class MainState( data class MainState(
val fullName: String = "", val fullName: String = "",
val photo: String = "", val photo: String = "",
val position: String = "", val position: String = "",
val lastVisit: String = "", val lastVisit: String = "",
val role: String = "", val role: String = "",
val isBanned: Boolean = false, val isBanned: Boolean = false,
val error: String? = null val error: String? = null
) )

View File

@ -1,27 +1,29 @@
package ru.myitschool.work.ui.main package ru.myitschool.work.ui.main
import android.content.Context import android.content.Context
import android.util.Log
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.google.gson.Gson
import com.google.gson.GsonBuilder import com.google.gson.GsonBuilder
import com.google.gson.reflect.TypeToken
import createAuthHeader import createAuthHeader
import createRetrofit import createRetrofit
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.update import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.serialization.json.JsonObject
import retrofit2.HttpException import retrofit2.HttpException
import ru.myitschool.work.data.remote.LoginApi
import ru.myitschool.work.data.remote.ErrorDto import ru.myitschool.work.data.remote.ErrorDto
import ru.myitschool.work.data.remote.LoginApi
import ru.myitschool.work.data.remote.PersonInfoDto import ru.myitschool.work.data.remote.PersonInfoDto
import ru.myitschool.work.di.AppModule import ru.myitschool.work.di.AppModule
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import javax.inject.Inject import javax.inject.Inject
@HiltViewModel @HiltViewModel
class MainViewModel @Inject constructor( class MainViewModel @Inject constructor(
@ApplicationContext private val context: Context, @ApplicationContext private val context: Context,
@ -79,6 +81,44 @@ class MainViewModel @Inject constructor(
} }
} }
// fun loadHistory(username: String, password : String): List<EntryClass> {
// viewModelScope.launch {
// try {
// val authHeader = createAuthHeader(username = username, password= password)
// val entries = loginApi.entries(authHeader, username)
//// val personEntries = entries.body()?.let { responseBody ->
//// GsonBuilder().create().fromJson(responseBody.string(), EntryClass::class.java)
//// }
//// val personEntries = Gson().fromJson()
//
// val gson = Gson()
// val listType = object : TypeToken<List<EntryClass>>() {}.type
// val logEntries: List<EntryClass> = gson.fromJson(entries.body()?.string() , listType)
//
//
//// return logEntries
// } catch (httpException: HttpException) {
// try {
// httpException.response()?.errorBody()?.string()?.let { errorString ->
// val gson = GsonBuilder().create()
// val errorDto = gson.fromJson(errorString, ErrorDto::class.java)
// _state.update {
// MainState(
// error = errorDto.error
// )
// }
// }
// } catch (e: Exception) {
// _state.update { MainState(error = httpException.message()) }
// }
// } catch (e: Exception) {
// _state.update { MainState(error = "Unknown error: ${e.message}") }
// }
// }
// }
fun logout(onLogout: () -> Unit) { fun logout(onLogout: () -> Unit) {
viewModelScope.launch { viewModelScope.launch {
dataStoreManager.setLastUsername("") dataStoreManager.setLastUsername("")

View File

@ -0,0 +1,6 @@
package ru.myitschool.work.ui.main
//data class mainHistory(
// val entr: Lis = "",
// val error: String? = null
//)