Skip to content

Commit

Permalink
repeated group style. (google#2571)
Browse files Browse the repository at this point in the history
* repeated group style.

* rename string variable name

* Address review comments.

---------

Co-authored-by: Santosh Pingle <[email protected]>
  • Loading branch information
santosh-pingle and Santosh Pingle authored Jun 19, 2024
1 parent bf83f85 commit 541f69d
Show file tree
Hide file tree
Showing 12 changed files with 115 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,5 +32,6 @@ internal sealed interface QuestionnaireAdapterItem {
val onDeleteClicked: () -> Unit,
/** Responses nested under this header. */
val responses: List<QuestionnaireResponse.QuestionnaireResponseItemComponent>,
val title: String,
) : QuestionnaireAdapterItem
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ package com.google.android.fhir.datacapture

import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
Expand All @@ -43,6 +42,7 @@ import com.google.android.fhir.datacapture.views.factories.QuantityViewHolderFac
import com.google.android.fhir.datacapture.views.factories.QuestionnaireItemDialogSelectViewHolderFactory
import com.google.android.fhir.datacapture.views.factories.QuestionnaireItemViewHolder
import com.google.android.fhir.datacapture.views.factories.RadioGroupViewHolderFactory
import com.google.android.fhir.datacapture.views.factories.RepeatedGroupHeaderItemViewHolder
import com.google.android.fhir.datacapture.views.factories.SliderViewHolderFactory
import org.hl7.fhir.r4.model.Questionnaire.QuestionnaireItemType

Expand All @@ -64,7 +64,9 @@ internal class QuestionnaireEditAdapter(
ViewHolder.QuestionHolder(onCreateViewHolderQuestion(parent = parent, subtype = subtype))
ViewType.Type.REPEATED_GROUP_HEADER -> {
ViewHolder.RepeatedGroupHeaderHolder(
parent.inflate(R.layout.repeated_group_instance_header_view),
RepeatedGroupHeaderItemViewHolder(
parent.inflate(R.layout.repeated_group_instance_header_view),
),
)
}
}
Expand Down Expand Up @@ -118,8 +120,7 @@ internal class QuestionnaireEditAdapter(
}
is QuestionnaireAdapterItem.RepeatedGroupHeader -> {
holder as ViewHolder.RepeatedGroupHeaderHolder
holder.header.text = "Group ${item.index + 1}"
holder.delete.setOnClickListener { item.onDeleteClicked() }
holder.viewHolder.bind(item)
}
}
}
Expand Down Expand Up @@ -266,10 +267,8 @@ internal class QuestionnaireEditAdapter(
internal sealed class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
class QuestionHolder(val holder: QuestionnaireItemViewHolder) : ViewHolder(holder.itemView)

class RepeatedGroupHeaderHolder(itemView: View) : ViewHolder(itemView) {
val header: TextView = itemView.findViewById(R.id.repeated_group_instance_header_title)
val delete: View = itemView.findViewById(R.id.repeated_group_instance_header_delete_button)
}
class RepeatedGroupHeaderHolder(val viewHolder: RepeatedGroupHeaderItemViewHolder) :
ViewHolder(viewHolder.itemView)
}

internal companion object {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -845,6 +845,7 @@ internal class QuestionnaireViewModel(application: Application, state: SavedStat
index = index,
onDeleteClicked = { viewModelScope.launch { question.item.removeAnswerAt(index) } },
responses = nestedResponseItemList,
title = question.item.questionText?.toString() ?: "",
),
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,11 @@ internal object GroupViewHolderFactory :

override fun bind(questionnaireViewItem: QuestionnaireViewItem) {
header.bind(questionnaireViewItem)
addItemButton.text =
context.getString(
R.string.add_repeated_group_item,
questionnaireViewItem.questionText ?: "",
)
addItemButton.visibility =
if (questionnaireViewItem.questionnaireItem.repeats) View.VISIBLE else View.GONE
addItemButton.setOnClickListener {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,10 @@ package com.google.android.fhir.datacapture.views.factories
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.annotation.LayoutRes
import androidx.recyclerview.widget.RecyclerView
import com.google.android.fhir.datacapture.QuestionnaireAdapterItem
import com.google.android.fhir.datacapture.R
import com.google.android.fhir.datacapture.views.MediaView
import com.google.android.fhir.datacapture.views.QuestionnaireViewItem
Expand Down Expand Up @@ -70,6 +72,30 @@ class QuestionnaireItemViewHolder(
}
}

/** The [RecyclerView.ViewHolder] for [QuestionnaireAdapterItem.RepeatedGroupHeader]. */
internal class RepeatedGroupHeaderItemViewHolder(
itemView: View,
) : RecyclerView.ViewHolder(itemView) {

private val header: TextView
private val delete: View

init {
header = itemView.findViewById(R.id.repeated_group_instance_header_title)
delete = itemView.findViewById(R.id.repeated_group_instance_header_delete_button)
}

fun bind(repeatedGroupHeader: QuestionnaireAdapterItem.RepeatedGroupHeader) {
header.text =
header.context.getString(
R.string.repeated_group_title,
"${repeatedGroupHeader.index + 1}",
repeatedGroupHeader.title,
)
delete.setOnClickListener { repeatedGroupHeader.onDeleteClicked() }
}
}

/**
* Delegate for [QuestionnaireItemViewHolder].
*
Expand Down
13 changes: 13 additions & 0 deletions datacapture/src/main/res/drawable/add_24px.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<vector
xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal"
>
<path
android:fillColor="@android:color/white"
android:pathData="M440,520L200,520L200,440L440,440L440,200L520,200L520,440L760,440L760,520L520,520L520,760L440,760L440,520Z"
/>
</vector>
13 changes: 13 additions & 0 deletions datacapture/src/main/res/drawable/delete_24px.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<vector
xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal"
>
<path
android:fillColor="@android:color/white"
android:pathData="M280,520L680,520L680,440L280,440L280,520ZM480,880Q397,880 324,848.5Q251,817 197,763Q143,709 111.5,636Q80,563 80,480Q80,397 111.5,324Q143,251 197,197Q251,143 324,111.5Q397,80 480,80Q563,80 636,111.5Q709,143 763,197Q817,251 848.5,324Q880,397 880,480Q880,563 848.5,636Q817,709 763,763Q709,817 636,848.5Q563,880 480,880ZM480,800Q614,800 707,707Q800,614 800,480Q800,346 707,253Q614,160 480,160Q346,160 253,253Q160,346 160,480Q160,614 253,707Q346,800 480,800ZM480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Z"
/>
</vector>
3 changes: 1 addition & 2 deletions datacapture/src/main/res/layout/group_header_view.xml
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,10 @@

<com.google.android.material.button.MaterialButton
android:id="@+id/add_item"
style="?attr/questionnaireAddRepeatedGroupButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:orientation="vertical"
android:text="@string/group_header_add_item_button"
/>

</LinearLayout>
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,12 @@
android:layout_height="wrap_content"
android:layout_weight="1"
/>
<ImageView
<com.google.android.material.button.MaterialButton
android:id="@+id/repeated_group_instance_header_delete_button"
style="?attr/questionnaireDeleteRepeatedGroupButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/padding_between_text_and_icon"
android:src="@drawable/ic_delete"
android:layout_gravity="center_horizontal"
android:text="@string/delete"
/>
</LinearLayout>
8 changes: 8 additions & 0 deletions datacapture/src/main/res/values/attrs.xml
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,14 @@
<!-- Style for edit button. -->
<attr name="questionnaireEditButtonStyle" format="reference" />

<!-- Style for Add another repeated group item button. -->
<attr name="questionnaireAddRepeatedGroupButtonStyle" format="reference" />
<!-- Style for Delete repeated group item button. -->
<attr
name="questionnaireDeleteRepeatedGroupButtonStyle"
format="reference"
/>

<!-- Style for validation error dialog title text in modal view. -->
<attr name="questionnaireValidationDialogTitleStyle" format="reference" />

Expand Down
2 changes: 2 additions & 0 deletions datacapture/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -137,4 +137,6 @@
<string name="required">Required</string>
<string name="required_text_and_new_line">Required\n</string>
<string name="space_asterisk">\u0020\u002a</string>
<string name="repeated_group_title">%1$s. %2$s</string>
<string name="add_repeated_group_item">Add %1$s</string>
</resources>
34 changes: 34 additions & 0 deletions datacapture/src/main/res/values/styles.xml
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,14 @@
name="questionnaireEditButtonStyle"
>@style/Questionnaire.EditButtonStyle
</item>
<item
name="questionnaireAddRepeatedGroupButtonStyle"
>@style/Questionnaire.AddRepeatedGroupButtonStyle
</item>
<item
name="questionnaireDeleteRepeatedGroupButtonStyle"
>@style/Questionnaire.DeleteRepeatedGroupButtonStyle
</item>
<item name="questionnaireDialogButtonStyle">
@style/Widget.Material3.Button.TextButton.Dialog
</item>
Expand Down Expand Up @@ -385,6 +393,32 @@
<item name="android:textAllCaps">false</item>
</style>

<style
name="Questionnaire.AddRepeatedGroupButtonStyle"
parent="Widget.Material3.Button.OutlinedButton"
>
<item name="android:textAllCaps">false</item>
<item name="cornerRadius">4dp</item>
<item name="icon">@drawable/add_24px</item>
<item
name="strokeColor"
>@color/m3_text_button_foreground_color_selector</item>
<item name="android:paddingLeft">@dimen/m3_btn_text_btn_padding_left</item>
</style>

<style
name="Questionnaire.DeleteRepeatedGroupButtonStyle"
parent="Widget.Material3.Button.OutlinedButton"
>
<item name="android:textAllCaps">false</item>
<item name="android:textColor">@color/mtrl_error</item>
<item name="cornerRadius">4dp</item>
<item name="icon">@drawable/delete_24px</item>
<item name="strokeColor">@color/mtrl_error</item>
<item name="android:paddingLeft">@dimen/m3_btn_text_btn_padding_left</item>
<item name="iconTint">@color/mtrl_error</item>
</style>

<style
name="Questionnaire.SubmitButtonStyle"
parent="Widget.Material3.Button"
Expand Down

0 comments on commit 541f69d

Please sign in to comment.