Création des class pour une liste de cartes : Adapter, Fragment et ViewModel

This commit is contained in:
biloute02 2023-12-23 22:28:56 +01:00
parent 1c04f18ec8
commit 0775eb13da
20 changed files with 92 additions and 138 deletions

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.NFC" />

View file

@ -1,14 +1,11 @@
package com.example.palto
import android.app.Activity
import android.nfc.NfcAdapter
import android.nfc.Tag
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import java.net.URL
class PaltoActivity : AppCompatActivity() {
private var nfcAdapter: NfcAdapter? = null

View file

@ -1,9 +1,5 @@
package com.example.palto.data.local
import com.example.palto.data.Result
import com.example.palto.data.model.LoggedInUser
import java.io.IOException
/**
* Class that handles authentication w/ login credentials and retrieves user information.
*/

View file

@ -1,9 +1,10 @@
package com.example.palto.data.network
import com.example.palto.data.Result
import com.example.palto.data.model.LoggedInUser
import com.example.palto.data.model.Tokens
import com.example.palto.model.LoggedInUser
import com.example.palto.model.Tokens
import java.io.IOException
import java.util.UUID
/**
* Class that handles API calls.
@ -43,7 +44,7 @@ class ServerDataSource {
): Result<LoggedInUser> {
try {
val fakeUser = LoggedInUser(
java.util.UUID.randomUUID().toString(),
UUID.randomUUID().toString(),
"dede",
"Lucie",
"Doe",

View file

@ -1,9 +1,6 @@
package com.example.palto.data.repository
import com.example.palto.data.Result
import com.example.palto.data.network.ServerDataSource
import com.example.palto.data.model.LoggedInUser
import com.example.palto.data.model.Tokens
/**
*

View file

@ -2,8 +2,7 @@ package com.example.palto.data.repository
import com.example.palto.data.Result
import com.example.palto.data.network.ServerDataSource
import com.example.palto.data.model.LoggedInUser
import com.example.palto.data.model.Tokens
import com.example.palto.model.LoggedInUser
/**
* Class that requests authentication and user information from the remote data source and

View file

@ -0,0 +1,10 @@
package com.example.palto.data.repository
import com.example.palto.data.network.ServerDataSource
/**
*
*/
class SessionRepository(val dataSource: ServerDataSource) {
// private val cards
}

View file

@ -1,9 +1,7 @@
package com.example.palto.data.repository
import com.example.palto.data.Result
import com.example.palto.data.network.ServerDataSource
import com.example.palto.data.model.LoggedInUser
import com.example.palto.data.model.Tokens
import com.example.palto.model.Tokens
/**
* Class that requests authentication and user information from the remote data source and

View file

@ -1,4 +1,4 @@
package com.example.palto.data.model
package com.example.palto.model
import java.io.Serializable
/**

View file

@ -0,0 +1,6 @@
package com.example.palto.model
import java.io.Serializable
data class Card(
val id: String
) : Serializable

View file

@ -1,4 +1,4 @@
package com.example.palto.data.model
package com.example.palto.model
import java.io.Serializable

View file

@ -1,9 +1,9 @@
package com.example.palto.data.model
package com.example.palto.model
import java.io.Serializable
/**
* Data class that captures tokens for logged in users retrieved from LoginRepository
*/
data class StudentCard(
data class Session(
val id: String
) : Serializable

View file

@ -1,4 +1,4 @@
package com.example.palto.data.model
package com.example.palto.model
import java.io.Serializable
/**

View file

@ -4,19 +4,22 @@ import androidx.recyclerview.widget.RecyclerView
import android.view.LayoutInflater
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import com.example.palto.model.Card
import com.example.palto.ui.attendanceList.placeholder.PlaceholderContent.PlaceholderItem
import com.example.palto.databinding.FragmentAttendanceItemBinding
/**
* [RecyclerView.Adapter] that can display a [PlaceholderItem].
* TODO: Replace the implementation with code for your data type.
*
*/
class AttendanceListAdapter(
private val values: List<PlaceholderItem>
) : RecyclerView.Adapter<AttendanceListAdapter.ViewHolder>() {
class AttendanceListAdapter :
ListAdapter<Card, AttendanceListAdapter.ViewHolder>(CardDiffCallback) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
): ViewHolder {
return ViewHolder(
FragmentAttendanceItemBinding.inflate(
@ -28,20 +31,28 @@ class AttendanceListAdapter(
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val item = values[position]
holder.idView.text = item.id
holder.contentView.text = item.content
val item = getItem(position)
holder.cardId.text = item.id
//holder.contentView.text = item.content
}
override fun getItemCount(): Int = values.size
inner class ViewHolder(binding: FragmentAttendanceItemBinding) :
RecyclerView.ViewHolder(binding.root) {
val idView: TextView = binding.itemNumber
val contentView: TextView = binding.content
inner class ViewHolder(
binding: FragmentAttendanceItemBinding
) : RecyclerView.ViewHolder(binding.root) {
val cardId: TextView = binding.cardId
override fun toString(): String {
return super.toString() + " '" + contentView.text + "'"
return super.toString() + " '" + cardId.text + "'"
}
}
}
object CardDiffCallback : DiffUtil.ItemCallback<Card>() {
override fun areItemsTheSame(oldItem: Card, newItem: Card): Boolean {
return oldItem == newItem
}
override fun areContentsTheSame(oldItem: Card, newItem: Card): Boolean {
return oldItem.id == newItem.id
}
}

View file

@ -9,7 +9,7 @@ import android.view.View
import android.view.ViewGroup
import androidx.navigation.navGraphViewModels
import com.example.palto.R
import com.example.palto.ui.attendanceList.placeholder.PlaceholderContent
import com.example.palto.databinding.FragmentAttendanceListBinding
/**
* A fragment representing a list of attendances.
@ -20,14 +20,19 @@ class AttendanceListFragment : Fragment() {
navGraphViewModels(R.id.nav_graph)
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val view = inflater.inflate(R.layout.fragment_attendance_list, container, false)
if (view is RecyclerView) {
view.layoutManager = LinearLayoutManager(context)
view.adapter = AttendanceListAdapter(PlaceholderContent.ITEMS)
val binding = FragmentAttendanceListBinding.inflate(inflater, container, false)
val adapter = AttendanceListAdapter()
binding.list.adapter = adapter
attendanceListViewModel.cardsLiveData.observe(viewLifecycleOwner) {
it -> adapter.submitList(it)
}
return view
return binding.root
}
}

View file

@ -1,34 +1,38 @@
package com.example.palto.ui.attendanceList
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import com.example.palto.data.network.ServerDataSource
import com.example.palto.data.repository.AttendanceRepository
import com.example.palto.data.repository.LoginRepository
import com.example.palto.model.Card
import kotlin.random.Random
class AttendanceListViewModel(
private val attendanceRepository: AttendanceRepository
) : ViewModel() {
/*
private val _loginForm = MutableLiveData<LoginFormState>()
val loginFormState: LiveData<LoginFormState> = _loginForm
private val _loginResult = MutableLiveData<LoginResult>()
val loginResult: LiveData<LoginResult> = _loginResult
*/
private val cardsList: MutableList<Card> = mutableListOf()
val cardsLiveData: LiveData<List<Card>> = MutableLiveData(cardsList)
class AttendanceListViewModelFactory : ViewModelProvider.Factory {
fun insertCard(cardId: String) {
val card = Card(cardId)
cardsList.add(card)
}
}
//@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(AttendanceListViewModel::class.java)) {
return AttendanceListViewModel(
attendanceRepository = AttendanceRepository(
dataSource = ServerDataSource()
)
) as T
}
throw IllegalArgumentException("Unknown ViewModel class")
class AttendanceListViewModelFactory : ViewModelProvider.Factory {
//@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(AttendanceListViewModel::class.java)) {
return AttendanceListViewModel(
attendanceRepository = AttendanceRepository(
dataSource = ServerDataSource()
)
) as T
}
throw IllegalArgumentException("Unknown ViewModel class")
}
}

View file

@ -1,57 +0,0 @@
package com.example.palto.ui.attendanceList.placeholder
import java.util.ArrayList
import java.util.HashMap
/**
* Helper class for providing sample content for user interfaces created by
* Android template wizards.
*
* TODO: Replace all uses of this class before publishing your app.
*/
object PlaceholderContent {
/**
* An array of sample (placeholder) items.
*/
val ITEMS: MutableList<PlaceholderItem> = ArrayList()
/**
* A map of sample (placeholder) items, by ID.
*/
val ITEM_MAP: MutableMap<String, PlaceholderItem> = HashMap()
private val COUNT = 25
init {
// Add some sample items.
for (i in 1..COUNT) {
addItem(createPlaceholderItem(i))
}
}
private fun addItem(item: PlaceholderItem) {
ITEMS.add(item)
ITEM_MAP.put(item.id, item)
}
private fun createPlaceholderItem(position: Int): PlaceholderItem {
return PlaceholderItem(position.toString(), "Item " + position, makeDetails(position))
}
private fun makeDetails(position: Int): String {
val builder = StringBuilder()
builder.append("Details about Item: ").append(position)
for (i in 0..position - 1) {
builder.append("\nMore details information here.")
}
return builder.toString()
}
/**
* A placeholder item representing a piece of content.
*/
data class PlaceholderItem(val id: String, val content: String, val details: String) {
override fun toString(): String = content
}
}

View file

@ -6,7 +6,6 @@ import androidx.lifecycle.ViewModel
import android.util.Patterns
import androidx.lifecycle.ViewModelProvider
import com.example.palto.data.repository.LoginRepository
import com.example.palto.data.Result
import com.example.palto.R
import com.example.palto.data.network.ServerDataSource

View file

@ -1,13 +1,7 @@
package com.example.palto.ui.sessionList
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import android.util.Patterns
import com.example.palto.data.repository.LoginRepository
import com.example.palto.data.Result
import com.example.palto.R
class SessionListViewModel(private val loginRepository: LoginRepository) : ViewModel() {
/*

View file

@ -5,14 +5,7 @@
android:orientation="horizontal">
<TextView
android:id="@+id/item_number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/text_margin"
android:textAppearance="?attr/textAppearanceListItem" />
<TextView
android:id="@+id/content"
android:id="@+id/card_̤id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/text_margin"