Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
7c8c15c
feat: Add HMIS 105 Vaccine & Malaria Report feature
Vinald Mar 16, 2026
c303c6e
crush fix
Vinald Mar 16, 2026
e4b35cf
fix the button bug
Vinald Apr 16, 2026
b7c687f
loading the vaccines count
Vinald Apr 17, 2026
eb66aa7
second year
Vinald Apr 17, 2026
27f0a68
Merge branch 'vrvu' into hmis105report
Vinald Apr 17, 2026
8b45b15
mapping dose names to match those in the hmis105 report
Vinald Apr 17, 2026
84f6790
Merge branch 'hmis105report' of github.com:ConnectForLife/vxnaid into…
Vinald Apr 17, 2026
0e72fb4
strings fix
Vinald Apr 17, 2026
744f4e2
strings fix
Vinald Apr 17, 2026
6ca8f5e
improvement in the tablet portrait view
Vinald Apr 17, 2026
a05a41e
mobile view of the hmis105 report
Vinald Apr 18, 2026
e32af08
tablet screens for the hmis105 report
Vinald Apr 18, 2026
cd66e32
data persistence during screen orientation
Vinald Apr 18, 2026
dac2af5
making the download button appear on tablet screens
Vinald Apr 18, 2026
9a8b907
download button logic to save an excel file
Vinald Apr 18, 2026
bdac6cc
hmis105 report button in landscape mode
Vinald Apr 18, 2026
00203ef
improving the visibilty of the content
Vinald Apr 18, 2026
088c7be
string resources
Vinald Apr 18, 2026
64735d9
report query
Vinald Apr 20, 2026
c7b34e6
report query
Vinald Apr 20, 2026
c568bf6
report query
Vinald Apr 20, 2026
3222d8c
fix making the counts tally with the web reports
Vinald Apr 20, 2026
056c2e7
code cleanup
Vinald Apr 20, 2026
ead7388
fix: Address code review comments for HMIS 105 Report (#280)
Vinald Apr 20, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,10 @@
android:name="com.jnj.vaccinetracker.reportsoverview.vaccinesoverview.activity.VaccinesOverviewFlowActivity"
android:windowSoftInputMode="adjustResize" />

<activity
android:name="com.jnj.vaccinetracker.reportsoverview.hmis105.activity.Hmis105FlowActivity"
android:windowSoftInputMode="adjustResize" />

<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.provider"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@ import com.jnj.vaccinetracker.register.dialogs.MultipleVisitsDialog
import com.jnj.vaccinetracker.register.dialogs.TransferClinicDialog
import com.jnj.vaccinetracker.register.dialogs.UpdateParticipantSuccessfulDialog
import com.jnj.vaccinetracker.reportsoverview.childrenoverview.activity.ReportsOverviewFlowActivity
import com.jnj.vaccinetracker.reportsoverview.hmis105.activity.Hmis105FlowActivity
import com.jnj.vaccinetracker.reportsoverview.hmis105.screens.Hmis105ReportFragment
import com.jnj.vaccinetracker.reportsoverview.vaccinesoverview.activity.VaccinesOverviewFlowActivity
import com.jnj.vaccinetracker.reportsoverview.vaccinesoverview.screens.VaccinesOverviewFragment
import com.jnj.vaccinetracker.visit.dialog.DialogScheduleMissingSubstances
Expand Down Expand Up @@ -314,4 +316,10 @@ interface AndroidModule {
@ContributesAndroidInjector
fun bindVRerunSetupWarningDialog(): RerunSetupWarningDialog

@ContributesAndroidInjector
fun bindHmis105FlowActivity(): Hmis105FlowActivity

@ContributesAndroidInjector
fun bindHmis105ReportFragment(): Hmis105ReportFragment

}
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import com.jnj.vaccinetracker.visitsoverview.model.VisitsOverviewViewModel
import com.jnj.vaccinetracker.reportsoverview.childrenoverview.model.RegisteredParticipantsViewModel
import com.jnj.vaccinetracker.reportsoverview.childrenoverview.model.ReportsOverviewViewModel
import com.jnj.vaccinetracker.reportsoverview.vaccinesoverview.model.VaccinesOverviewViewModel
import com.jnj.vaccinetracker.reportsoverview.hmis105.model.Hmis105ViewModel
import dagger.Binds
import dagger.Module
import dagger.multibindings.IntoMap
Expand Down Expand Up @@ -214,4 +215,9 @@ interface ViewModelModule {
@IntoMap
@ViewModelKey(ReportsOverviewViewModel::class)
fun bindReportsOverviewViewModel(model: ReportsOverviewViewModel): ViewModel

@Binds
@IntoMap
@ViewModelKey(Hmis105ViewModel::class)
fun bindHmis105ViewModel(model: Hmis105ViewModel): ViewModel
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import androidx.databinding.DataBindingUtil
import com.jnj.vaccinetracker.R
import com.jnj.vaccinetracker.common.ui.BaseFragment
import com.jnj.vaccinetracker.databinding.FragmentReportsOverviewBinding
import com.jnj.vaccinetracker.reportsoverview.hmis105.activity.Hmis105FlowActivity
import com.jnj.vaccinetracker.reportsoverview.vaccinesoverview.screens.VaccinesOverviewFragment

class ReportsOverviewFragment : BaseFragment() {
Expand All @@ -32,6 +33,10 @@ class ReportsOverviewFragment : BaseFragment() {
navigateToRegisteredChildrenReport()
}

binding.btnHmis105Report.setOnClickListener {
navigateToHmis105Report()
}

return binding.root
}

Expand Down Expand Up @@ -71,4 +76,9 @@ class ReportsOverviewFragment : BaseFragment() {
.addToBackStack(null)
.commit()
}

@RequiresApi(Build.VERSION_CODES.Q)
private fun navigateToHmis105Report() {
startActivity(Hmis105FlowActivity.create(requireContext()))
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.jnj.vaccinetracker.reportsoverview.hmis105.activity

import android.content.Context
import android.content.Intent
import android.os.Build
import android.os.Bundle
import androidx.annotation.RequiresApi
import androidx.databinding.DataBindingUtil
import com.jnj.vaccinetracker.R
import com.jnj.vaccinetracker.common.ui.BaseActivity
import com.jnj.vaccinetracker.databinding.ActivityFlowBinding
import com.jnj.vaccinetracker.reportsoverview.hmis105.screens.Hmis105ReportFragment

@RequiresApi(Build.VERSION_CODES.Q)
class Hmis105FlowActivity : BaseActivity() {

companion object {
fun create(context: Context): Intent = Intent(context, Hmis105FlowActivity::class.java)
}

private lateinit var binding: ActivityFlowBinding

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_flow)
binding.lifecycleOwner = this

if (savedInstanceState == null) {
val fragment = Hmis105ReportFragment()
supportFragmentManager.beginTransaction()
.add(R.id.fragment_container, fragment)
.commit()
}
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
package com.jnj.vaccinetracker.reportsoverview.hmis105.adapters

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import com.jnj.vaccinetracker.databinding.ItemHmis105ReportRowBinding
import com.jnj.vaccinetracker.reportsoverview.hmis105.dto.Hmis105ReportDTO

class Hmis105Adapter : ListAdapter<Hmis105ReportDTO, Hmis105Adapter.ViewHolder>(DiffCallback) {

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val inflater = LayoutInflater.from(parent.context)
val binding = ItemHmis105ReportRowBinding.inflate(inflater, parent, false)
return ViewHolder(binding)
}

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val item = getItem(position)
holder.bind(item)
}

inner class ViewHolder(private val binding: ItemHmis105ReportRowBinding) : RecyclerView.ViewHolder(binding.root) {
fun bind(report: Hmis105ReportDTO) {
binding.textViewDoses.text = report.doses
if (isSectionHeader(report)) {
setNumericViewsVisibility(View.GONE)
binding.textViewUnder1Static.text = ""
binding.textViewUnder1Outreach.text = ""
binding.textView1to4Static.text = ""
binding.textView1to4Outreach.text = ""
binding.textView5to14Static.text = ""
binding.textView5to14Outreach.text = ""
binding.textViewTotal.text = ""
} else {
setNumericViewsVisibility(View.VISIBLE)
binding.textViewUnder1Static.text = report.under1Static.toString()
binding.textViewUnder1Outreach.text = report.under1Outreach.toString()
binding.textView1to4Static.text = report.age1to4Static.toString()
binding.textView1to4Outreach.text = report.age1to4Outreach.toString()
binding.textView5to14Static.text = report.age5to14Static.toString()
binding.textView5to14Outreach.text = report.age5to14Outreach.toString()
binding.textViewTotal.text = report.total.toString()
}
}

private fun setNumericViewsVisibility(visibility: Int) {
binding.textViewUnder1Static.visibility = visibility
binding.textViewUnder1Outreach.visibility = visibility
binding.textView1to4Static.visibility = visibility
binding.textView1to4Outreach.visibility = visibility
binding.textView5to14Static.visibility = visibility
binding.textView5to14Outreach.visibility = visibility
binding.textViewTotal.visibility = visibility
}

private fun isSectionHeader(report: Hmis105ReportDTO): Boolean {
return report.under1Static == 0 &&
report.under1Outreach == 0 &&
report.age1to4Static == 0 &&
report.age1to4Outreach == 0 &&
report.age5to14Static == 0 &&
report.age5to14Outreach == 0 &&
report.total == 0 &&
report.doses == report.doses.uppercase()
}
Comment thread
Vinald marked this conversation as resolved.
}

companion object DiffCallback : DiffUtil.ItemCallback<Hmis105ReportDTO>() {
override fun areItemsTheSame(
oldItem: Hmis105ReportDTO,
newItem: Hmis105ReportDTO
): Boolean = oldItem.doses == newItem.doses

override fun areContentsTheSame(
oldItem: Hmis105ReportDTO,
newItem: Hmis105ReportDTO
): Boolean = oldItem == newItem
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.jnj.vaccinetracker.reportsoverview.hmis105.dto

data class Hmis105ReportDTO(
val doses: String,
val under1Static: Int = 0,
val under1Outreach: Int = 0,
val age1to4Static: Int = 0,
val age1to4Outreach: Int = 0,
val age5to14Static: Int = 0,
val age5to14Outreach: Int = 0,
val total: Int = 0
)

Loading