Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement the entryMode extension #1301

Merged
Merged
Show file tree
Hide file tree
Changes from 16 commits
Commits
Show all changes
107 commits
Select commit Hold shift + click to select a range
bf0ff03
WIP pagination flag working
aurangzaibumer Apr 18, 2022
d31b270
WIP pagination flag working for previous and next button
aurangzaibumer Apr 18, 2022
66485e3
WIP pagination flag working for previous and next button
aurangzaibumer Apr 18, 2022
1e6066d
removed default values of QuestionnaireValidation
aurangzaibumer Apr 18, 2022
b21faed
Merge branch 'master' into 1272-extend-validation-api-support
aurangzaibumer Apr 19, 2022
fdb0c9f
spotless ran
aurangzaibumer Apr 19, 2022
2d40692
Merge branch '1272-extend-validation-api-support' of https://github.c…
aurangzaibumer Apr 19, 2022
69c1c9b
Merge branch 'master' into 1272-extend-validation-api-support
aurangzaibumer Apr 19, 2022
5b661b4
Merge branch 'master' into 1272-extend-validation-api-support
aurangzaibumer Apr 19, 2022
b056606
Merge branch 'master' into 1272-extend-validation-api-support
aurangzaibumer Apr 20, 2022
398dbc9
implementation updated as per the feedback
aurangzaibumer Apr 21, 2022
188a61c
Merge branch 'master' into 1272-extend-validation-api-support
aurangzaibumer Apr 21, 2022
1187262
spotless ran
aurangzaibumer Apr 21, 2022
1040f2d
feedback incorporated related
aurangzaibumer Apr 21, 2022
180e76d
removed unused code
aurangzaibumer Apr 21, 2022
6aebfde
Merge branch 'master' into 1272-extend-validation-api-support
aurangzaibumer Apr 22, 2022
60b8fd0
comments added for the newly changes
aurangzaibumer Apr 25, 2022
bcb1ee8
Merge branch '1272-extend-validation-api-support' of https://github.c…
aurangzaibumer Apr 25, 2022
4a9af3e
Merge branch 'master' into 1272-extend-validation-api-support
aurangzaibumer Apr 25, 2022
6f79ee4
Merge branch 'master' into 1272-extend-validation-api-support
aurangzaibumer Apr 26, 2022
6bf55bc
Merge branch 'master' into 1272-extend-validation-api-support
aurangzaibumer Apr 28, 2022
75f5379
Merge branch 'master' into 1272-extend-validation-api-support
aurangzaibumer May 6, 2022
8eef091
PR feedback resolved, updated comments
aurangzaibumer May 10, 2022
ff1ff4f
added unit test cases for QuestionnaireViewModel changes
aurangzaibumer May 11, 2022
79cf2ec
added unit test cases for QuestionnaireViewModel changes
aurangzaibumer May 11, 2022
a3b4ec3
Merge branch 'master' into 1272-extend-validation-api-support
aurangzaibumer May 13, 2022
dd3f0d8
WIP replacing isErrorTriggered with validation result in questionnair…
aurangzaibumer May 18, 2022
a74275b
WIP instantiating validation from getquestionnarestate so that can be…
aurangzaibumer May 19, 2022
43bbca8
WIP handling prev & next button when required fields are written
aurangzaibumer May 23, 2022
6583a6f
Merge branch 'master' into 1272-extend-validation-api-support
aurangzaibumer May 23, 2022
21283e3
Merge remote-tracking branch 'upstream/master' into 1272-extend-valid…
aurangzaibumer May 24, 2022
7a156ae
Merge branch '1272-extend-validation-api-support' of https://github.c…
aurangzaibumer May 24, 2022
f665c5b
spotess ran after taking updates merge conflicts
aurangzaibumer May 24, 2022
0c4fa74
handling of pagination buttons based on item validation result
aurangzaibumer May 24, 2022
13b668a
handling of pagination buttons based on item validation result
aurangzaibumer May 24, 2022
4039204
handling of pagination buttons based on item validation result
aurangzaibumer May 24, 2022
b90a171
removed unused argument from canSwitchPage, added some comments on th…
aurangzaibumer May 24, 2022
ba38ae2
revert json form
aurangzaibumer May 24, 2022
18ae93a
update javadocs for QuestionnaireItemViewItem
aurangzaibumer May 24, 2022
fe79e65
update javadocs for PageChangeStrategy
aurangzaibumer May 24, 2022
e94e385
Merge branch 'master' into 1272-extend-validation-api-support
aurangzaibumer May 27, 2022
02887ad
removed page change strategy from data capture and strategy can be gi…
aurangzaibumer May 30, 2022
aef8037
Merge branch 'master' into 1272-extend-validation-api-support
aurangzaibumer May 30, 2022
2b950c6
Merge branch 'master' into 1272-extend-validation-api-support
aurangzaibumer May 30, 2022
4e722ec
code refactored, spotless ran
aurangzaibumer May 30, 2022
7cee42c
WIP highlighting errors if any when tapping next button
aurangzaibumer Jun 8, 2022
6fadcfc
Merge remote-tracking branch 'upstream/master' into 1272-extend-valid…
aurangzaibumer Jun 8, 2022
42e4699
PR feedback
aurangzaibumer Jun 16, 2022
f8ee291
Merge branch 'master' into 1272-extend-validation-api-support
aurangzaibumer Jun 16, 2022
c64c084
PR Feedback : Make Change Strtegy class and interface internal
aurangzaibumer Jun 16, 2022
4f658d6
Merge branch '1272-extend-validation-api-support' of https://github.c…
aurangzaibumer Jun 16, 2022
2e2ba17
Merge branch 'master' into 1272-extend-validation-api-support
aurangzaibumer Jun 23, 2022
916ca0c
Used an ENUM approach instead of Paging Change Strategy
aurangzaibumer Jun 29, 2022
d132957
Merge remote-tracking branch 'upstream/master' into 1272-extend-valid…
aurangzaibumer Jul 20, 2022
863dc0e
WIP show validation errors where applicable on restrict mode when tap…
aurangzaibumer Jul 20, 2022
e1b9955
Merge branch 'master' into 1272-extend-validation-api-support
aurangzaibumer Jul 20, 2022
69f8d9d
Merge branch 'master' into 1272-extend-validation-api-support
aurangzaibumer Jul 21, 2022
c598746
paginated boolean added to help showing validation errors if paginate…
aurangzaibumer Jul 21, 2022
a1b1789
Merge branch 'master' into 1272-extend-validation-api-support
aurangzaibumer Jul 21, 2022
dfc1805
Added entry mode extension support in QuestionnaireViewModel
aurangzaibumer Jul 22, 2022
0a43428
spotless ran
aurangzaibumer Jul 22, 2022
5a237ea
prior edit for previous page tap - can go back without validating cur…
aurangzaibumer Jul 22, 2022
79bc699
Merge branch 'master' into 1272-extend-validation-api-support
aurangzaibumer Jul 22, 2022
4f27d6f
Merge branch 'master' into 1272-extend-validation-api-support
aurangzaibumer Jul 25, 2022
c18e625
Revert spotless changes
aurangzaibumer Jul 25, 2022
9ce9847
feedback incorporated
aurangzaibumer Jul 26, 2022
ecf4025
spotless ran
aurangzaibumer Jul 26, 2022
7c4701f
feedback incorporated. Entry mode refactored
aurangzaibumer Jul 26, 2022
db7c5b1
Merge branch 'master' into 1272-extend-validation-api-support
aurangzaibumer Jul 27, 2022
f22ef02
unit tests refactored
aurangzaibumer Jul 27, 2022
ab1b6b8
spotless ran
aurangzaibumer Jul 27, 2022
2bb0161
Merge branch 'master' into 1272-extend-validation-api-support
aurangzaibumer Jul 27, 2022
149530f
more unit tests added to increase coverage
aurangzaibumer Jul 28, 2022
2f389a8
Merge branch '1272-extend-validation-api-support' of https://github.c…
aurangzaibumer Jul 28, 2022
c5cb03f
Merge branch 'master' into 1272-extend-validation-api-support
aurangzaibumer Jul 28, 2022
95459e2
more unit tests added to increase coverage, resolved some feedback
aurangzaibumer Jul 29, 2022
fa9c818
Update datacapture/src/main/java/com/google/android/fhir/datacapture/…
aurangzaibumer Jul 29, 2022
378a679
unit tests added for MoreQuestionnaires class
aurangzaibumer Jul 29, 2022
dccae1d
Merge branch 'master' into 1272-extend-validation-api-support
aurangzaibumer Aug 4, 2022
7cc016a
added a case when there is no entrymode defined in the questionnaire
aurangzaibumer Aug 4, 2022
d3f26d2
fixed naming convention of unit test cases
aurangzaibumer Aug 4, 2022
fb600c8
Merge branch 'master' into 1272-extend-validation-api-support
aurangzaibumer Aug 10, 2022
dadf635
resolved conflicts
aurangzaibumer Aug 10, 2022
4c4350e
spotless ran
aurangzaibumer Aug 10, 2022
6a75bc2
fixed broken tests after having PR 1532 impact
aurangzaibumer Aug 12, 2022
7ef79a1
Merge branch 'master' into 1272-extend-validation-api-support
aurangzaibumer Aug 12, 2022
c4cc3cc
separated unit test cases for next and previous page switching
aurangzaibumer Aug 12, 2022
e7ded9a
refactored unit tests for accessing view model pages
aurangzaibumer Aug 12, 2022
ad05766
added unit tests where user cannot be able to move forward without ad…
aurangzaibumer Aug 12, 2022
cf64865
Merge branch 'master' into 1272-extend-validation-api-support
aurangzaibumer Aug 12, 2022
8f4ece5
feedback covered
aurangzaibumer Aug 15, 2022
2608957
suggestion resolved
aurangzaibumer Aug 15, 2022
a642de0
Merge branch 'master' into 1272-extend-validation-api-support
aurangzaibumer Aug 15, 2022
52599f6
Merge branch 'master' into 1272-extend-validation-api-support
aurangzaibumer Aug 15, 2022
ea8dfb2
feedback incorporated, updated the unit test cases
aurangzaibumer Aug 15, 2022
ef61eea
Merge branch '1272-extend-validation-api-support' of https://github.c…
aurangzaibumer Aug 15, 2022
9631c75
Update datacapture/src/main/java/com/google/android/fhir/datacapture/…
jingtang10 Aug 16, 2022
72beb03
added a case when no entry mode is defined in the questionnaire
aurangzaibumer Aug 16, 2022
916354d
Merge branch '1272-extend-validation-api-support' of https://github.c…
aurangzaibumer Aug 16, 2022
7f2c2ba
Update datacapture/src/main/java/com/google/android/fhir/datacapture/…
aurangzaibumer Aug 16, 2022
72d6e93
Merge branch 'master' into 1272-extend-validation-api-support
aurangzaibumer Aug 19, 2022
edbadd7
Merge branch 'master' into 1272-extend-validation-api-support
aurangzaibumer Aug 19, 2022
1fce4e0
Update datacapture/src/main/java/com/google/android/fhir/datacapture/…
jingtang10 Aug 21, 2022
3a0144f
Merge branch 'master' into 1272-extend-validation-api-support
jingtang10 Aug 21, 2022
3e70103
Run spotless apply
jingtang10 Aug 21, 2022
e4b6336
Update datacapture/src/main/java/com/google/android/fhir/datacapture/…
jingtang10 Aug 21, 2022
35b7774
Remove the unnecessary getPages() function
jingtang10 Aug 21, 2022
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
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,14 @@ data class DataCaptureConfig(
* should try to include the smallest [NpmPackage] possible that contains only the resources
* needed by [StructureMap]s used by the client app.
*/
var npmPackage: NpmPackage? = null
var npmPackage: NpmPackage? = null,

/**
* Holds the current strategy that will be followed during page change events. This can be
* customized on runtime by setting the customized strategy
aurangzaibumer marked this conversation as resolved.
Show resolved Hide resolved
*/
var questionnairePageEventContext: QuestionnairePageChangeEventContext =
aurangzaibumer marked this conversation as resolved.
Show resolved Hide resolved
QuestionnairePageChangeEventContext()
) {

internal val simpleWorkerContext: SimpleWorkerContext by lazy {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/*
* Copyright 2021 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http:https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.google.android.fhir.datacapture

import com.google.android.fhir.datacapture.views.QuestionnaireItemViewItem

aurangzaibumer marked this conversation as resolved.
Show resolved Hide resolved
/*
* This Page strategy restricts user on every page when required fields are missing
*/
class DefaultPageChangeStrategy : PageChangeStrategy {
jingtang10 marked this conversation as resolved.
Show resolved Hide resolved
aurangzaibumer marked this conversation as resolved.
Show resolved Hide resolved

override fun shouldGoToPreviousPage(list: List<QuestionnaireItemViewItem>): Boolean {
return !list.any { it.isErrorTriggered }
aurangzaibumer marked this conversation as resolved.
Show resolved Hide resolved
}

override fun shouldGoToNextPage(list: List<QuestionnaireItemViewItem>): Boolean {
return !list.any { it.isErrorTriggered }
aurangzaibumer marked this conversation as resolved.
Show resolved Hide resolved
aurangzaibumer marked this conversation as resolved.
Show resolved Hide resolved
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ open class QuestionnaireFragment : Fragment() {
viewLifecycleOwner.lifecycleScope.launchWhenCreated {
viewModel.questionnaireStateFlow.collect { state ->
adapter.submitList(state.items)

viewModel.holdCurrentItemState(state.items)
if (state.pagination != null) {
paginationPreviousButton.visibility = View.VISIBLE
paginationPreviousButton.isEnabled = state.pagination.hasPreviousPage
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
/*
* Copyright 2021 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http:https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.google.android.fhir.datacapture

import com.google.android.fhir.datacapture.views.QuestionnaireItemViewItem

class QuestionnairePageChangeEventContext {
aurangzaibumer marked this conversation as resolved.
Show resolved Hide resolved
aurangzaibumer marked this conversation as resolved.
Show resolved Hide resolved
private var pageChangeStrategy: PageChangeStrategy = DefaultPageChangeStrategy()

fun setStrategy(pageChangeStrategy: PageChangeStrategy) {
this.pageChangeStrategy = pageChangeStrategy
}

// This function will be called in the QuestionnaireViewModel goToNextPage and if returns true
aurangzaibumer marked this conversation as resolved.
Show resolved Hide resolved
// then pageFlow.value will be changed.
fun pageNextEvent(list: List<QuestionnaireItemViewItem>): Boolean {
return pageChangeStrategy.shouldGoToNextPage(list)
}

// This function will be called in the QuestionnaireViewModel goToPreviousPage and if returns true
aurangzaibumer marked this conversation as resolved.
Show resolved Hide resolved
// then pageFlow.value will be changed.
fun pagePreviousEvent(list: List<QuestionnaireItemViewItem>): Boolean {
return pageChangeStrategy.shouldGoToPreviousPage(list)
}
}

interface PageChangeStrategy {
aurangzaibumer marked this conversation as resolved.
Show resolved Hide resolved
aurangzaibumer marked this conversation as resolved.
Show resolved Hide resolved
fun shouldGoToPreviousPage(list: List<QuestionnaireItemViewItem>): Boolean
aurangzaibumer marked this conversation as resolved.
Show resolved Hide resolved

fun shouldGoToNextPage(list: List<QuestionnaireItemViewItem>): Boolean
aurangzaibumer marked this conversation as resolved.
Show resolved Hide resolved
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,11 @@ internal class QuestionnaireViewModel(application: Application, state: SavedStat
AndroidViewModel(application) {
/** The current questionnaire as questions are being answered. */
internal val questionnaire: Questionnaire
lateinit var currentPageItems: List<QuestionnaireItemViewItem>
aurangzaibumer marked this conversation as resolved.
Show resolved Hide resolved

private val questionnairePageEventContext by lazy {
DataCapture.getConfiguration(getApplication()).questionnairePageEventContext
}

init {
questionnaire =
Expand Down Expand Up @@ -145,11 +150,17 @@ internal class QuestionnaireViewModel(application: Application, state: SavedStat
}

internal fun goToPreviousPage() {
pageFlow.value = pageFlow.value!!.previousPage()
if (questionnairePageEventContext.pagePreviousEvent(currentPageItems)) {
pageFlow.value = pageFlow.value!!.previousPage()
}
}

private fun getString(resId: Int) = getApplication<Application>().resources.getString(resId)

internal fun goToNextPage() {
pageFlow.value = pageFlow.value!!.nextPage()
if (questionnairePageEventContext.pageNextEvent(currentPageItems)) {
pageFlow.value = pageFlow.value!!.nextPage()
}
}

/** [QuestionnaireState] to be displayed in the UI. */
Expand Down Expand Up @@ -371,6 +382,11 @@ internal class QuestionnaireViewModel(application: Application, state: SavedStat
null
}
}

internal fun holdCurrentItemState(items: List<QuestionnaireItemViewItem>) {
aurangzaibumer marked this conversation as resolved.
Show resolved Hide resolved
// hold it on the variable that can be used when tapping next/previous page
currentPageItems = items
}
}

/** Questionnaire state for the Fragment to consume. */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,9 @@ open class QuestionnaireItemViewHolder(
delegate.questionnaireItemViewItem = questionnaireItemViewItem
delegate.bind(questionnaireItemViewItem)
delegate.setReadOnly(questionnaireItemViewItem.questionnaireItem.readOnly)
delegate.displayValidationResult(delegate.getValidationResult(itemView.context))
val validationResult = delegate.getValidationResult(itemView.context)
delegate.displayValidationResult(validationResult)
questionnaireItemViewItem.isErrorTriggered = !validationResult.isValid
}
}

Expand Down Expand Up @@ -101,7 +103,9 @@ interface QuestionnaireItemViewHolderDelegate {
*/
fun onAnswerChanged(context: Context) {
questionnaireItemViewItem.questionnaireResponseItemChangedCallback()
displayValidationResult(getValidationResult(context))
val validationResult = getValidationResult(context)
displayValidationResult(validationResult)
questionnaireItemViewItem.isErrorTriggered = !validationResult.isValid
}

/** Run the [QuestionnaireResponseItemValidator.validate] function. */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ data class QuestionnaireItemViewItem(
{
emptyList()
},
var isErrorTriggered: Boolean = false,
aurangzaibumer marked this conversation as resolved.
Show resolved Hide resolved
val questionnaireResponseItemChangedCallback: () -> Unit
) {
/**
Expand Down
3 changes: 3 additions & 0 deletions datacapture/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -97,4 +97,7 @@
<string name="time">Time</string>
<string name="select_date">Select date</string>
<string name="hyphen">-</string>
<string
name="message_fill_required_fields"
>Please fill the required fields first</string>
aurangzaibumer marked this conversation as resolved.
Show resolved Hide resolved
</resources>
Loading