Création des class pour une liste de cartes : Adapter, Fragment et ViewModel
This commit is contained in:
parent
1c04f18ec8
commit
0775eb13da
20 changed files with 92 additions and 138 deletions
|
@ -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" />
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
*/
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
package com.example.palto.data.model
|
||||
package com.example.palto.model
|
||||
import java.io.Serializable
|
||||
|
||||
/**
|
6
app/src/main/java/com/example/palto/model/Card.kt
Normal file
6
app/src/main/java/com/example/palto/model/Card.kt
Normal file
|
@ -0,0 +1,6 @@
|
|||
package com.example.palto.model
|
||||
import java.io.Serializable
|
||||
|
||||
data class Card(
|
||||
val id: String
|
||||
) : Serializable
|
|
@ -1,4 +1,4 @@
|
|||
package com.example.palto.data.model
|
||||
package com.example.palto.model
|
||||
|
||||
import java.io.Serializable
|
||||
|
|
@ -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
|
|
@ -1,4 +1,4 @@
|
|||
package com.example.palto.data.model
|
||||
package com.example.palto.model
|
||||
import java.io.Serializable
|
||||
|
||||
/**
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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")
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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() {
|
||||
/*
|
||||
|
|
|
@ -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"
|
||||
|
|
Loading…
Reference in a new issue