diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 78a728f..61da587 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,5 +1,6 @@ - diff --git a/app/src/main/java/com/example/palto/PaltoActivity.kt b/app/src/main/java/com/example/palto/PaltoActivity.kt index bbfb52c..1df8c28 100644 --- a/app/src/main/java/com/example/palto/PaltoActivity.kt +++ b/app/src/main/java/com/example/palto/PaltoActivity.kt @@ -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 diff --git a/app/src/main/java/com/example/palto/data/local/LocalDataSource.kt b/app/src/main/java/com/example/palto/data/local/LocalDataSource.kt index 8d8c245..d05487e 100644 --- a/app/src/main/java/com/example/palto/data/local/LocalDataSource.kt +++ b/app/src/main/java/com/example/palto/data/local/LocalDataSource.kt @@ -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. */ diff --git a/app/src/main/java/com/example/palto/data/network/ServerDataSource.kt b/app/src/main/java/com/example/palto/data/network/ServerDataSource.kt index ad7d664..8c68892 100644 --- a/app/src/main/java/com/example/palto/data/network/ServerDataSource.kt +++ b/app/src/main/java/com/example/palto/data/network/ServerDataSource.kt @@ -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 { try { val fakeUser = LoggedInUser( - java.util.UUID.randomUUID().toString(), + UUID.randomUUID().toString(), "dede", "Lucie", "Doe", diff --git a/app/src/main/java/com/example/palto/data/repository/AttendanceRepository.kt b/app/src/main/java/com/example/palto/data/repository/AttendanceRepository.kt index e17bba6..13a8631 100644 --- a/app/src/main/java/com/example/palto/data/repository/AttendanceRepository.kt +++ b/app/src/main/java/com/example/palto/data/repository/AttendanceRepository.kt @@ -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 /** * diff --git a/app/src/main/java/com/example/palto/data/repository/LoginRepository.kt b/app/src/main/java/com/example/palto/data/repository/LoginRepository.kt index ef52975..ad61888 100644 --- a/app/src/main/java/com/example/palto/data/repository/LoginRepository.kt +++ b/app/src/main/java/com/example/palto/data/repository/LoginRepository.kt @@ -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 diff --git a/app/src/main/java/com/example/palto/data/repository/SessionRepository.kt b/app/src/main/java/com/example/palto/data/repository/SessionRepository.kt new file mode 100644 index 0000000..3b4b4a7 --- /dev/null +++ b/app/src/main/java/com/example/palto/data/repository/SessionRepository.kt @@ -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 +} \ No newline at end of file diff --git a/app/src/main/java/com/example/palto/data/repository/TokensRepository.kt b/app/src/main/java/com/example/palto/data/repository/TokensRepository.kt index 0351fc0..184f04c 100644 --- a/app/src/main/java/com/example/palto/data/repository/TokensRepository.kt +++ b/app/src/main/java/com/example/palto/data/repository/TokensRepository.kt @@ -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 diff --git a/app/src/main/java/com/example/palto/data/model/Attendance.kt b/app/src/main/java/com/example/palto/model/Attendance.kt similarity index 84% rename from app/src/main/java/com/example/palto/data/model/Attendance.kt rename to app/src/main/java/com/example/palto/model/Attendance.kt index a73a6f7..1288725 100644 --- a/app/src/main/java/com/example/palto/data/model/Attendance.kt +++ b/app/src/main/java/com/example/palto/model/Attendance.kt @@ -1,4 +1,4 @@ -package com.example.palto.data.model +package com.example.palto.model import java.io.Serializable /** diff --git a/app/src/main/java/com/example/palto/model/Card.kt b/app/src/main/java/com/example/palto/model/Card.kt new file mode 100644 index 0000000..fade8d9 --- /dev/null +++ b/app/src/main/java/com/example/palto/model/Card.kt @@ -0,0 +1,6 @@ +package com.example.palto.model +import java.io.Serializable + +data class Card( + val id: String +) : Serializable \ No newline at end of file diff --git a/app/src/main/java/com/example/palto/data/model/LoggedInUser.kt b/app/src/main/java/com/example/palto/model/LoggedInUser.kt similarity index 88% rename from app/src/main/java/com/example/palto/data/model/LoggedInUser.kt rename to app/src/main/java/com/example/palto/model/LoggedInUser.kt index ff8cbee..6f60811 100644 --- a/app/src/main/java/com/example/palto/data/model/LoggedInUser.kt +++ b/app/src/main/java/com/example/palto/model/LoggedInUser.kt @@ -1,4 +1,4 @@ -package com.example.palto.data.model +package com.example.palto.model import java.io.Serializable diff --git a/app/src/main/java/com/example/palto/data/model/StudentCard.kt b/app/src/main/java/com/example/palto/model/Session.kt similarity index 72% rename from app/src/main/java/com/example/palto/data/model/StudentCard.kt rename to app/src/main/java/com/example/palto/model/Session.kt index 3fd21dc..8a6827f 100644 --- a/app/src/main/java/com/example/palto/data/model/StudentCard.kt +++ b/app/src/main/java/com/example/palto/model/Session.kt @@ -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 \ No newline at end of file diff --git a/app/src/main/java/com/example/palto/data/model/Tokens.kt b/app/src/main/java/com/example/palto/model/Tokens.kt similarity index 84% rename from app/src/main/java/com/example/palto/data/model/Tokens.kt rename to app/src/main/java/com/example/palto/model/Tokens.kt index 6fffdeb..fa90475 100644 --- a/app/src/main/java/com/example/palto/data/model/Tokens.kt +++ b/app/src/main/java/com/example/palto/model/Tokens.kt @@ -1,4 +1,4 @@ -package com.example.palto.data.model +package com.example.palto.model import java.io.Serializable /** diff --git a/app/src/main/java/com/example/palto/ui/attendanceList/AttendanceListAdapter.kt b/app/src/main/java/com/example/palto/ui/attendanceList/AttendanceListAdapter.kt index 501ecaf..565422c 100644 --- a/app/src/main/java/com/example/palto/ui/attendanceList/AttendanceListAdapter.kt +++ b/app/src/main/java/com/example/palto/ui/attendanceList/AttendanceListAdapter.kt @@ -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 -) : RecyclerView.Adapter() { +class AttendanceListAdapter : + ListAdapter(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() { + override fun areItemsTheSame(oldItem: Card, newItem: Card): Boolean { + return oldItem == newItem + } + + override fun areContentsTheSame(oldItem: Card, newItem: Card): Boolean { + return oldItem.id == newItem.id + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/palto/ui/attendanceList/AttendanceListFragment.kt b/app/src/main/java/com/example/palto/ui/attendanceList/AttendanceListFragment.kt index 108aac1..598ef9e 100644 --- a/app/src/main/java/com/example/palto/ui/attendanceList/AttendanceListFragment.kt +++ b/app/src/main/java/com/example/palto/ui/attendanceList/AttendanceListFragment.kt @@ -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 } } \ No newline at end of file diff --git a/app/src/main/java/com/example/palto/ui/attendanceList/AttendanceListViewModel.kt b/app/src/main/java/com/example/palto/ui/attendanceList/AttendanceListViewModel.kt index fef9be7..5e366d2 100644 --- a/app/src/main/java/com/example/palto/ui/attendanceList/AttendanceListViewModel.kt +++ b/app/src/main/java/com/example/palto/ui/attendanceList/AttendanceListViewModel.kt @@ -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() - val loginFormState: LiveData = _loginForm - private val _loginResult = MutableLiveData() - val loginResult: LiveData = _loginResult - */ + private val cardsList: MutableList = mutableListOf() + val cardsLiveData: LiveData> = MutableLiveData(cardsList) - class AttendanceListViewModelFactory : ViewModelProvider.Factory { + fun insertCard(cardId: String) { + val card = Card(cardId) + cardsList.add(card) + } +} - //@Suppress("UNCHECKED_CAST") - override fun create(modelClass: Class): 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 create(modelClass: Class): T { + if (modelClass.isAssignableFrom(AttendanceListViewModel::class.java)) { + return AttendanceListViewModel( + attendanceRepository = AttendanceRepository( + dataSource = ServerDataSource() + ) + ) as T } + throw IllegalArgumentException("Unknown ViewModel class") } } \ No newline at end of file diff --git a/app/src/main/java/com/example/palto/ui/attendanceList/placeholder/PlaceholderContent.kt b/app/src/main/java/com/example/palto/ui/attendanceList/placeholder/PlaceholderContent.kt deleted file mode 100644 index 50fc373..0000000 --- a/app/src/main/java/com/example/palto/ui/attendanceList/placeholder/PlaceholderContent.kt +++ /dev/null @@ -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 = ArrayList() - - /** - * A map of sample (placeholder) items, by ID. - */ - val ITEM_MAP: MutableMap = 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 - } -} \ No newline at end of file diff --git a/app/src/main/java/com/example/palto/ui/login/LoginViewModel.kt b/app/src/main/java/com/example/palto/ui/login/LoginViewModel.kt index 4cb896d..99ea964 100644 --- a/app/src/main/java/com/example/palto/ui/login/LoginViewModel.kt +++ b/app/src/main/java/com/example/palto/ui/login/LoginViewModel.kt @@ -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 diff --git a/app/src/main/java/com/example/palto/ui/sessionList/SessionListViewModel.kt b/app/src/main/java/com/example/palto/ui/sessionList/SessionListViewModel.kt index 09235e6..d127a36 100644 --- a/app/src/main/java/com/example/palto/ui/sessionList/SessionListViewModel.kt +++ b/app/src/main/java/com/example/palto/ui/sessionList/SessionListViewModel.kt @@ -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() { /* diff --git a/app/src/main/res/layout/fragment_attendance_item.xml b/app/src/main/res/layout/fragment_attendance_item.xml index 1877568..b975c33 100644 --- a/app/src/main/res/layout/fragment_attendance_item.xml +++ b/app/src/main/res/layout/fragment_attendance_item.xml @@ -5,14 +5,7 @@ android:orientation="horizontal"> - -