Skip to content

Commit

Permalink
final commit
Browse files Browse the repository at this point in the history
  • Loading branch information
vukan-markovic committed Jan 22, 2021
1 parent 9a3db47 commit 201d265
Show file tree
Hide file tree
Showing 36 changed files with 134 additions and 78 deletions.
6 changes: 6 additions & 0 deletions .idea/dictionaries/Win7.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 3 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ android {

buildTypes {
release {
minifyEnabled false
shrinkResources false
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
Expand All @@ -40,6 +40,7 @@ android {
}

dependencies {
//noinspection DifferentStdlibGradleVersion
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'androidx.core:core-ktx:1.3.2'
implementation 'androidx.appcompat:appcompat:1.2.0'
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/java/vukan/com/euprava/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import android.view.ViewGroup
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.app.AppCompatDelegate
import androidx.core.content.ContextCompat
import androidx.drawerlayout.widget.DrawerLayout
import androidx.navigation.findNavController
Expand Down Expand Up @@ -76,6 +75,7 @@ class MainActivity : AppCompatActivity(), DrawerNavigation, ToastListener {
with(Toast(applicationContext)) {
setGravity(Gravity.CENTER_VERTICAL, 0, 0)
duration = Toast.LENGTH_LONG
@Suppress("DEPRECATION")
view = layout
show()
}
Expand Down
5 changes: 2 additions & 3 deletions app/src/main/java/vukan/com/euprava/data/Database.kt
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ class Database {

fun getDoctorExaminations(
doctorID: String,
callback: KFunction1<ArrayList<Examination>, Unit>
callback: KFunction1<List<Examination>, Unit>
) {
val examinations = ArrayList<Examination>()

Expand Down Expand Up @@ -173,8 +173,7 @@ class Database {
institutionID = institutionID,
name = document.getString("name").toString(),
address = document.getString("address").toString(),
place = document.getString("place").toString(),
workingTime = document.getString("workingTime").toString()
place = document.getString("place").toString()
)
)
}
Expand Down
7 changes: 3 additions & 4 deletions app/src/main/java/vukan/com/euprava/data/Repository.kt
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ class Repository {
private val database: Database = Database()
private val userID: String = FirebaseAuth.getInstance().currentUser?.uid.toString()
private val examinations: MutableLiveData<List<Examination>> = MutableLiveData()
private val doctorExaminations: MutableLiveData<ArrayList<Examination>> = MutableLiveData()
private val doctorExaminations: MutableLiveData<List<Examination>> = MutableLiveData()
private val doctor: MutableLiveData<Doctor> = MutableLiveData()
private val databaseUser: MutableLiveData<User> = MutableLiveData()
private val doctors: MutableLiveData<List<Doctor>> = MutableLiveData()
Expand All @@ -24,7 +24,6 @@ class Repository {

fun addExamination(doctorID: String, doctorName: String, dateTime: Timestamp) {
database.addExamination(doctorID, doctorName, userID, dateTime)

}

fun getExaminations(): MutableLiveData<List<Examination>> {
Expand All @@ -37,9 +36,9 @@ class Repository {
return doctors
}

fun getDoctorExaminations(doctorID: String): ArrayList<Examination>? {
fun getDoctorExaminations(doctorID: String): MutableLiveData<List<Examination>> {
database.getDoctorExaminations(doctorID, doctorExaminations::setValue)
return doctorExaminations.value
return doctorExaminations
}

fun getDoctor(doctorID: String): MutableLiveData<Doctor> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,5 @@ data class Institution(
val institutionID: String,
val name: String,
val place: String,
val address: String,
val workingTime: String
val address: String
)
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
package vukan.com.euprava.ui.adapters

import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.navigation.Navigation
import androidx.recyclerview.widget.RecyclerView
import vukan.com.euprava.R
import vukan.com.euprava.data.model.Doctor
import vukan.com.euprava.databinding.ChosenDoctorItemBinding
import vukan.com.euprava.ui.doctor.ChosenDoctorFragmentDirections

class DoctorAdapter(listener: DoctorItemClickListener) :
class DoctorAdapter(listener: DoctorItemClickListener, private val context: Context) :
RecyclerView.Adapter<DoctorAdapter.DoctorViewHolder>() {
private var doctors: List<Doctor> = ArrayList()
private var institution: String = ""
Expand All @@ -35,7 +37,9 @@ class DoctorAdapter(listener: DoctorItemClickListener) :
holder.viewBinding.doctorName.text = it
}

holder.viewBinding.institutionName.text = institution
holder.viewBinding.institutionName.text =
context.getString(R.string.institution_name, institution)

holder.viewBinding.doctorSpecialization.text = doctors[position].specialization

holder.viewBinding.choseTerm.setOnClickListener {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
package vukan.com.euprava.ui.adapters

import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import vukan.com.euprava.R
import vukan.com.euprava.data.model.Examination
import vukan.com.euprava.databinding.ExaminationItemBinding
import java.text.SimpleDateFormat
import java.util.*
import kotlin.collections.ArrayList

class ExaminationAdapter(listener: ExaminationItemClickListener) :
class ExaminationAdapter(listener: ExaminationItemClickListener, private val context: Context) :
RecyclerView.Adapter<ExaminationAdapter.ExaminationViewHolder>() {

private var examinations: List<Examination> = ArrayList()
Expand All @@ -35,9 +37,28 @@ class ExaminationAdapter(listener: ExaminationItemClickListener) :
override fun onBindViewHolder(holder: ExaminationViewHolder, position: Int) {
holder.viewBinding.doctorName.text = examinations[position].doctorName
val date = examinations[position].dateTime?.toDate()
val cal = Calendar.getInstance()

if (date != null) {
holder.viewBinding.examinationDate.text = sfdDate.format(date)
cal.time = date
var dayOfWeek = ""

when (cal.get(Calendar.DAY_OF_WEEK)) {
1 -> dayOfWeek = context.getString(R.string.sunday)
2 -> dayOfWeek = context.getString(R.string.monday)
3 -> dayOfWeek = context.getString(R.string.tuesday)
4 -> dayOfWeek = context.getString(R.string.wednesday)
5 -> dayOfWeek = context.getString(R.string.thursday)
6 -> dayOfWeek = context.getString(R.string.friday)
7 -> dayOfWeek = context.getString(R.string.saturday)
}

holder.viewBinding.examinationDate.text =
context.getString(
R.string.examination_date_day,
sfdDate.format(date), dayOfWeek
)

holder.viewBinding.examinationTime.text = sfdTime.format(date)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ class ChosenDoctorFragment : Fragment(), SwipeRefreshLayout.OnRefreshListener,
(activity as DrawerNavigation).setDrawerEnabled(true)
binding.recyclerViewDoctor.setHasFixedSize(true)
binding.recyclerViewDoctor.layoutManager = LinearLayoutManager(context)
adapter = DoctorAdapter(this)
adapter = DoctorAdapter(this, requireContext())
binding.recyclerViewDoctor.adapter = adapter
binding.swipeContainer.setOnRefreshListener(this)

Expand Down Expand Up @@ -84,14 +84,13 @@ class ChosenDoctorFragment : Fragment(), SwipeRefreshLayout.OnRefreshListener,

chosenDoctorViewModel.getInstitution(institutionID)
.observe(viewLifecycleOwner) { institution ->
if (flag) {
if (flag && institution.institutionID == institutionID) {
AlertDialog.Builder(requireContext())
.setTitle(getString(R.string.institution))
.setMessage(
"Naziv: " + institution.name + "\n" +
"Mesto: " + institution.place + "\n" +
"Adresa: " + institution.address + "\n" +
"Radno vreme: " + institution.workingTime
"Adresa: " + institution.address
)
.setPositiveButton(android.R.string.ok, null)
.setIcon(R.drawable.ic_hospital)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ class ExaminationTimer(
private lateinit var mTimePicker: TimePicker

companion object {
private const val TIME_PICKER_INTERVAL = 15
private const val TIME_PICKER_INTERVAL = 30
}

override fun updateTime(hourOfDay: Int, minuteOfHour: Int) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,18 +14,21 @@ import com.google.firebase.Timestamp
import vukan.com.euprava.DrawerNavigation
import vukan.com.euprava.R
import vukan.com.euprava.ToastListener
import vukan.com.euprava.data.model.Examination
import vukan.com.euprava.databinding.FragmentSchedulingExaminationBinding
import java.text.SimpleDateFormat
import java.util.*

import kotlin.collections.ArrayList

class SchedulingExaminationFragment : Fragment() {
private val schedulingExaminationViewModel by viewModels<SchedulingExaminationViewModel>()
private lateinit var binding: FragmentSchedulingExaminationBinding
private var isDataValid: Boolean = false
private var sfdDateTime = SimpleDateFormat("dd-MM-yyyy, HH:mm", Locale.getDefault())
private var sfdDate = SimpleDateFormat("dd-MM-yyyy", Locale.getDefault())
private var sfdTime = SimpleDateFormat("HH:mm", Locale.getDefault())
private var doctorName: String = ""
private var doctorExaminations: List<Examination> = ArrayList()

companion object {
private val calendar = Calendar.getInstance()
Expand Down Expand Up @@ -54,7 +57,11 @@ class SchedulingExaminationFragment : Fragment() {
super.onViewCreated(view, savedInstanceState)
(activity as DrawerNavigation).setDrawerEnabled(true)
val doctorID = SchedulingExaminationFragmentArgs.fromBundle(requireArguments()).doctorId

schedulingExaminationViewModel.getDoctorExaminations(doctorID)
.observe(viewLifecycleOwner) { examinations ->
doctorExaminations = examinations
}

schedulingExaminationViewModel.getDoctor(doctorID).observe(viewLifecycleOwner) { doctor ->
doctorName = getString(R.string.doctor_name_surname, doctor.name, doctor.surname)
Expand All @@ -74,14 +81,19 @@ class SchedulingExaminationFragment : Fragment() {
binding.timePicker.isEnabled = false
binding.timePicker.isClickable = false
} else {
binding.examinationDate.text = sfdDate.format(dateTime.toDate())
binding.examinationDate.text =
getString(R.string.examination_date, sfdDate.format(dateTime.toDate()))

binding.timePicker.isEnabled = true
binding.timePicker.isClickable = true
}

if (state.timeError != null && state.timeError != 0)
(activity as ToastListener).show(getString(state.timeError))
else binding.examinationTime.text = sfdTime.format(dateTime.toDate())

if (isDataValid)
binding.examinationTime.text =
getString(R.string.examination_time, sfdTime.format(dateTime.toDate()))
})

val date = OnDateSetListener { _, year, monthOfYear, dayOfMonth ->
Expand Down Expand Up @@ -126,10 +138,13 @@ class SchedulingExaminationFragment : Fragment() {
val minute: Int = calendar.get(Calendar.MINUTE)
val timePicker = ExaminationTimer(
context, { _, selectedHour, selectedMinute ->
calendar.set(Calendar.HOUR, selectedHour)
calendar.set(Calendar.HOUR_OF_DAY, selectedHour)
calendar.set(Calendar.MINUTE, selectedMinute)
dateTime = Timestamp(calendar.time)
schedulingExaminationViewModel.checkTime(dateTime.toString())
schedulingExaminationViewModel.checkTime(
sfdDateTime.format(dateTime.toDate()),
doctorExaminations
)
}, hour, minute, true
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,16 @@ import vukan.com.euprava.R
import vukan.com.euprava.data.Repository
import vukan.com.euprava.data.model.Doctor
import vukan.com.euprava.data.model.Examination
import java.text.SimpleDateFormat
import java.util.*

class SchedulingExaminationViewModel : ViewModel() {
private val repo: Repository = Repository()
private val _form = MutableLiveData<ExaminationState>()
private var examinations: ArrayList<Examination>? = null
val formState: LiveData<ExaminationState> = _form
private var timeError: Int? = 0
private var dateError: Int? = 0
private var sfdDateTime = SimpleDateFormat("dd-MM-yyyy, HH:mm", Locale.getDefault())

fun checkDate(day: Int) {
if (day == 1 || day == 7) {
Expand All @@ -28,8 +30,8 @@ class SchedulingExaminationViewModel : ViewModel() {
}
}

fun checkTime(time: String) {
if (!isTermFree(time)) {
fun checkTime(time: String, examinations: List<Examination>) {
if (!isTermFree(time, examinations)) {
timeError = R.string.invalid_term
setFormState()
} else {
Expand All @@ -39,9 +41,10 @@ class SchedulingExaminationViewModel : ViewModel() {
}
}

private fun isTermFree(time: String): Boolean {
examinations?.forEach {
if (it.dateTime.toString() == time) return false
private fun isTermFree(time: String, examinations: List<Examination>): Boolean {
examinations.forEach {
val date = it.dateTime?.toDate()
if (date != null && sfdDateTime.format(date) == time) return false
}

return true
Expand All @@ -65,7 +68,7 @@ class SchedulingExaminationViewModel : ViewModel() {
return repo.getDoctor(doctorID)
}

fun getDoctorExaminations(doctorID: String) {
examinations = repo.getDoctorExaminations(doctorID)
fun getDoctorExaminations(doctorID: String): MutableLiveData<List<Examination>> {
return repo.getDoctorExaminations(doctorID)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ class HomeFragment : Fragment(), SwipeRefreshLayout.OnRefreshListener,

binding.recyclerViewHome.setHasFixedSize(true)
binding.recyclerViewHome.layoutManager = LinearLayoutManager(context)
adapter = ExaminationAdapter(this)
adapter = ExaminationAdapter(this, requireContext())
binding.recyclerViewHome.adapter = adapter
binding.swipeContainer.setOnRefreshListener(this)

Expand Down
2 changes: 1 addition & 1 deletion app/src/main/res/drawable/ic_arrow_back.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:fillColor="@color/white"
android:pathData="M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z" />
</vector>
Loading

0 comments on commit 201d265

Please sign in to comment.