diff --git a/app/src/main/java/ru/myitschool/work/api/AccessLog.kt b/app/src/main/java/ru/myitschool/work/api/AccessLog.kt new file mode 100644 index 0000000..e4b861a --- /dev/null +++ b/app/src/main/java/ru/myitschool/work/api/AccessLog.kt @@ -0,0 +1,7 @@ +package ru.myitschool.work.api + +data class AccessLog( + val scanTime: String, + val readerId: String, + val accessType: String // "карта" или "смартфон" +) \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/ui/Main/AccessLogAdapter.kt b/app/src/main/java/ru/myitschool/work/ui/Main/AccessLogAdapter.kt new file mode 100644 index 0000000..e7e6270 --- /dev/null +++ b/app/src/main/java/ru/myitschool/work/ui/Main/AccessLogAdapter.kt @@ -0,0 +1,34 @@ +package ru.myitschool.work.ui.main + +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import ru.myitschool.work.R +import ru.myitschool.work.api.AccessLog + +class AccessLogAdapter(private val accessLogs: List) : RecyclerView.Adapter() { + + class AccessLogViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val scanTime: TextView = itemView.findViewById(R.id.scan_time) + val readerId: TextView = itemView.findViewById(R.id.reader_id) + val accessType: TextView = itemView.findViewById(R.id.access_type) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AccessLogViewHolder { + val view = LayoutInflater.from(parent.context).inflate(R.layout.item_access_log, parent, false) + return AccessLogViewHolder(view) + } + + override fun onBindViewHolder(holder: AccessLogViewHolder, position: Int) { + val log = accessLogs[position] + holder.scanTime.text = log.scanTime + holder.readerId.text = log.readerId + holder.accessType.text = log.accessType + } + + override fun getItemCount(): Int { + return accessLogs.size + } +} \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/ui/Main/MainFragment.kt b/app/src/main/java/ru/myitschool/work/ui/Main/MainFragment.kt index 6435e05..351e58f 100644 --- a/app/src/main/java/ru/myitschool/work/ui/Main/MainFragment.kt +++ b/app/src/main/java/ru/myitschool/work/ui/Main/MainFragment.kt @@ -9,6 +9,8 @@ import androidx.fragment.app.Fragment import androidx.fragment.app.setFragmentResultListener import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -16,6 +18,7 @@ import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory import ru.myitschool.work.R import ru.myitschool.work.SessionManager +import ru.myitschool.work.api.AccessLog import ru.myitschool.work.api.ApiService import ru.myitschool.work.core.Constants import ru.myitschool.work.databinding.FragmentMainBinding @@ -25,7 +28,7 @@ import java.net.URL class MainFragment : Fragment(R.layout.fragment_main) { private var _binding: FragmentMainBinding? = null - private val binding get() = _binding + private val binding get() = _binding!! private val apiService: ApiService by lazy { Retrofit.Builder() @@ -35,6 +38,9 @@ class MainFragment : Fragment(R.layout.fragment_main) { .create(ApiService::class.java) } + private lateinit var accessLogAdapter: AccessLogAdapter + private val accessLogs = mutableListOf() // Список для хранения данных проходов + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) _binding = FragmentMainBinding.bind(view) // Подключаем binding @@ -58,8 +64,13 @@ class MainFragment : Fragment(R.layout.fragment_main) { } private fun setupUI() { + // Настройка RecyclerView + binding.recyclerView.layoutManager = LinearLayoutManager(requireContext()) + accessLogAdapter = AccessLogAdapter(accessLogs) + binding.recyclerView.adapter = accessLogAdapter + // Проверяем, что binding не null, прежде чем устанавливать слушателей - binding?.apply { + binding.apply { refresh.setOnClickListener { fetchUserData() } logout.setOnClickListener { logout() } scan.setOnClickListener { navigateToQrScan() } @@ -81,6 +92,11 @@ class MainFragment : Fragment(R.layout.fragment_main) { // Обновляем UI updateUI(fullName, position, lastVisit, photoUrl) + + // Здесь вы можете добавить данные проходов в список + // Пример: + accessLogs.add(AccessLog("2024-02-31 08:31", "Считыватель 1", "карта")) + accessLogAdapter.notifyDataSetChanged() // Обновляем адаптер } } else { showError(getString(R.string.error_loading_data)) // Показываем ошибку, если данные не загрузились @@ -133,7 +149,7 @@ class MainFragment : Fragment(R.layout.fragment_main) { private fun showError(message: String?) { // Проверяем, что binding не null, прежде чем обновлять ошибку - binding?.apply { + binding.apply { if (message != null) { error.text = message error.visibility = View.VISIBLE @@ -145,8 +161,10 @@ class MainFragment : Fragment(R.layout.fragment_main) { photo.visibility = View.GONE logout.visibility = View.GONE scan.visibility = View.GONE + recyclerView.visibility = View.GONE // Скрываем RecyclerView при ошибке } else { error.visibility = View.GONE + recyclerView.visibility = View.VISIBLE // Показываем RecyclerView, если ошибки нет } } } diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml index efa4ea3..01a6a37 100644 --- a/app/src/main/res/layout/fragment_main.xml +++ b/app/src/main/res/layout/fragment_main.xml @@ -6,6 +6,7 @@ android:gravity="bottom" android:padding="16dp" android:background="@android:color/white"> + + android:visibility="visible" /> + android:visibility="visible" /> + android:visibility="visible" /> - - + android:visibility="visible" /> +