Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
102 changes: 98 additions & 4 deletions RELEASE.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,101 @@
# Release notes - Android App for DHIS2 - 3.4.0.1
# Release notes - Android App for DHIS2 - 3.4.1

This patch release includes a hotfix.
### Bug

## Bugs fixed
[ANDROAPP-6516](https://dhis2.atlassian.net/browse/ANDROAPP-6516) Values in events and program stages not being updated when syncing with server from them

* [ANDROAPP-7634](https://dhis2.atlassian.net/browse/ANDROAPP-7634) SMS module is accidentally enabled when ASWA is installed
[ANDROAPP-6611](https://dhis2.atlassian.net/browse/ANDROAPP-6611) Synchronization does not automatically start on re-connection

[ANDROAPP-7238](https://dhis2.atlassian.net/browse/ANDROAPP-7238) Analytics configured with data type int in web show 1 decimal in app

[ANDROAPP-7287](https://dhis2.atlassian.net/browse/ANDROAPP-7287) Flicker when no teis in tei list

[ANDROAPP-7352](https://dhis2.atlassian.net/browse/ANDROAPP-7352) Delete TEI/Delete Enrollment is not showing in the menu with the ALL authority

[ANDROAPP-7364](https://dhis2.atlassian.net/browse/ANDROAPP-7364) Server URL not well formed error

[ANDROAPP-7398](https://dhis2.atlassian.net/browse/ANDROAPP-7398) Wrong Snackbar color

[ANDROAPP-7406](https://dhis2.atlassian.net/browse/ANDROAPP-7406) Cards are not always displayed in map view

[ANDROAPP-7412](https://dhis2.atlassian.net/browse/ANDROAPP-7412) Offline Biometric Login is not accessible

[ANDROAPP-7431](https://dhis2.atlassian.net/browse/ANDROAPP-7431) username does not trim trailing white spaces

[ANDROAPP-7439](https://dhis2.atlassian.net/browse/ANDROAPP-7439) Custom label \(at least enrollment\) is not displayed when editing a TE

[ANDROAPP-7446](https://dhis2.atlassian.net/browse/ANDROAPP-7446) Incorrect flow to create TEI: Display front page list and Allow user to create a TEI without searching

[ANDROAPP-7458](https://dhis2.atlassian.net/browse/ANDROAPP-7458) Cannot select lower options in large option sets with checkbox or radio button configuration

[ANDROAPP-7499](https://dhis2.atlassian.net/browse/ANDROAPP-7499) New Network Status Provider does not handle VPNs and local connections

[ANDROAPP-7520](https://dhis2.atlassian.net/browse/ANDROAPP-7520) SSO: Logout does not end IdP session

[ANDROAPP-7523](https://dhis2.atlassian.net/browse/ANDROAPP-7523) Cursor moves to the end when updating value

[ANDROAPP-7527](https://dhis2.atlassian.net/browse/ANDROAPP-7527) NullPointerException: The callable returned a null value

[ANDROAPP-7528](https://dhis2.atlassian.net/browse/ANDROAPP-7528) ApplicationNotResponding: ANR

[ANDROAPP-7531](https://dhis2.atlassian.net/browse/ANDROAPP-7531) Program rule: not triggered unless selection is made in option set

[ANDROAPP-7532](https://dhis2.atlassian.net/browse/ANDROAPP-7532) \[ANR\] In TeiDashboard with displayAnalytics\(\)

[ANDROAPP-7533](https://dhis2.atlassian.net/browse/ANDROAPP-7533) Working list results fluctuating and loading inconsistently

[ANDROAPP-7541](https://dhis2.atlassian.net/browse/ANDROAPP-7541) AppTheme color not changing text colors

[ANDROAPP-7544](https://dhis2.atlassian.net/browse/ANDROAPP-7544) \[Mobile-UI\] When the DateTime input has focus a small section of the supporting Text background color is shown

[ANDROAPP-7546](https://dhis2.atlassian.net/browse/ANDROAPP-7546) Error when assigning more than one option to multi-select field in the Android capture app

[ANDROAPP-7564](https://dhis2.atlassian.net/browse/ANDROAPP-7564) Description of assigned \(disabled\) data elements are not shown in the android capture

[ANDROAPP-7565](https://dhis2.atlassian.net/browse/ANDROAPP-7565) Crash - toggle between orientation in events

[ANDROAPP-7566](https://dhis2.atlassian.net/browse/ANDROAPP-7566) Numeric value type in search screen does not allow decimals

[ANDROAPP-7567](https://dhis2.atlassian.net/browse/ANDROAPP-7567) Unsupported fields are visible in search screen

[ANDROAPP-7568](https://dhis2.atlassian.net/browse/ANDROAPP-7568) Polygons are not correctly stored in the device

[ANDROAPP-7572](https://dhis2.atlassian.net/browse/ANDROAPP-7572) New events use enrollment OU instead of ownership OU after TEI transfer

[ANDROAPP-7574](https://dhis2.atlassian.net/browse/ANDROAPP-7574) Crash whilst sync \(could not replicate\)

[ANDROAPP-7582](https://dhis2.atlassian.net/browse/ANDROAPP-7582) Unable to close bottomsheet in very long org unit list

[ANDROAPP-7588](https://dhis2.atlassian.net/browse/ANDROAPP-7588) Sync message not consistent when offline

[ANDROAPP-7590](https://dhis2.atlassian.net/browse/ANDROAPP-7590) Sync error due to program rules the assign value of calculated value

[ANDROAPP-7601](https://dhis2.atlassian.net/browse/ANDROAPP-7601) Change orientation: Main content area goes blank/white

[ANDROAPP-7603](https://dhis2.atlassian.net/browse/ANDROAPP-7603) Allow screenshots and screen sharing in Training APK

[ANDROAPP-7613](https://dhis2.atlassian.net/browse/ANDROAPP-7613) IllegalArgumentException: Can't represent a width of 0 and height of 276000 in Constraints

[ANDROAPP-7614](https://dhis2.atlassian.net/browse/ANDROAPP-7614) IllegalStateException: No database is currently activated.

[ANDROAPP-7619](https://dhis2.atlassian.net/browse/ANDROAPP-7619) \[ANR\] Home filters

[ANDROAPP-7632](https://dhis2.atlassian.net/browse/ANDROAPP-7632) Conscrypt crashing for API 37

[ANDROAPP-7635](https://dhis2.atlassian.net/browse/ANDROAPP-7635) Cannot access TEI as it is marked incorrectly as online

[ANDROAPP-7637](https://dhis2.atlassian.net/browse/ANDROAPP-7637) Programs tab appears when analytics is not configured

[ANDROAPP-7646](https://dhis2.atlassian.net/browse/ANDROAPP-7646) Local search results is not returned if remote request fails

[ANDROAPP-7647](https://dhis2.atlassian.net/browse/ANDROAPP-7647) Past results are not cleared when a new search is made

[ANDROAPP-7658](https://dhis2.atlassian.net/browse/ANDROAPP-7658) Program Rule Errors do not prevent syncing of data

[ANDROAPP-7661](https://dhis2.atlassian.net/browse/ANDROAPP-7661) Race condition to sync images using granular sync

[ANDROAPP-7668](https://dhis2.atlassian.net/browse/ANDROAPP-7668) Images/files \(FileResource\) sometimes not downloaded during granular sync — subsequent edit uploads an empty image Data Element overwriting the image in server

[ANDROAPP-7674](https://dhis2.atlassian.net/browse/ANDROAPP-7674) Crash opening map in tablet from teidashboard

[ANDROAPP-7694](https://dhis2.atlassian.net/browse/ANDROAPP-7694) App crash on logout and \(occasionally\) delete account
9 changes: 6 additions & 3 deletions app/src/androidTest/java/org/dhis2/common/BaseRobot.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import androidx.compose.ui.test.junit4.ComposeContentTestRule
import androidx.compose.ui.test.onNodeWithText
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.FailureHandler
import androidx.test.espresso.IdlingResourceTimeoutException
import androidx.test.espresso.NoMatchingViewException
import androidx.test.espresso.UiController
import androidx.test.espresso.ViewAction
Expand Down Expand Up @@ -130,9 +131,11 @@ open class BaseRobot {

} catch (e: Exception) {

if (tries == maxTries) {
throw e
}
if (tries == maxTries) throw e
// Retrying on idling timeouts blocks ~26s per attempt and leaves
// IdlingResourceRegistry's internal callback registered, corrupting state
// for subsequent tests. Fail fast so Espresso cleans up normally.
if (e is IdlingResourceTimeoutException || e.cause is IdlingResourceTimeoutException) throw e
sleep(waitMillisPerTry)
}

Expand Down
6 changes: 6 additions & 0 deletions app/src/androidTest/java/org/dhis2/usescases/BaseTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package org.dhis2.usescases
import android.content.Context
import android.os.Build
import androidx.test.espresso.IdlingRegistry
import androidx.test.espresso.idling.CountingIdlingResource
import androidx.test.espresso.intent.Intents
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.rule.GrantPermissionRule
Expand Down Expand Up @@ -132,6 +133,11 @@ open class BaseTest {
}

private fun unregisterCountingIdlingResource() {
idlingResources.filterIsInstance<CountingIdlingResource>().forEach { resource ->
while (!resource.isIdleNow) {
resource.decrement()
}
}
IdlingResourceProvider.idlingResource = NoOpIdlingResource
IdlingRegistry.getInstance()
.unregister(*idlingResources.toTypedArray())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import org.dhis2.usescases.teidashboard.robot.noteRobot
import org.dhis2.usescases.teidashboard.robot.teiDashboardRobot
import org.hisp.dhis.android.core.mockwebserver.ResponseController
import org.junit.Assume
import org.junit.Ignore
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
Expand Down Expand Up @@ -200,6 +201,7 @@ class TeiDashboardTest : BaseTest() {
prepareTeiOpenedForReferralProgrammeAndLaunchActivity(rule)

teiDashboardRobot(composeTestRule) {
waitUntilActivityVisible<TeiDashboardMobileActivity>()
clickOnMenuMoreOptions()
clickOnTimelineEvents()
clickOnFab()
Expand Down Expand Up @@ -233,6 +235,7 @@ class TeiDashboardTest : BaseTest() {
prepareTeiOpenedWithNoPreviousEventProgrammeAndLaunchActivity(rule)

teiDashboardRobot(composeTestRule) {
waitUntilActivityVisible<TeiDashboardMobileActivity>()
clickOnMenuMoreOptions()
clickOnTimelineEvents()
clickOnFab()
Expand All @@ -259,6 +262,7 @@ class TeiDashboardTest : BaseTest() {

val babyPostNatal = "Baby Postnatal"
teiDashboardRobot(composeTestRule) {
waitUntilActivityVisible<TeiDashboardMobileActivity>()
clickOnMenuMoreOptions()
clickOnTimelineEvents()
clickOnEventWithTitle(babyPostNatal)
Expand Down Expand Up @@ -335,6 +339,7 @@ class TeiDashboardTest : BaseTest() {
prepareTeiToEnrollToOtherProgramAndLaunchActivity(rule)

teiDashboardRobot(composeTestRule) {
waitUntilActivityVisible<TeiDashboardMobileActivity>()
clickOnMenuMoreOptions()
clickOnTimelineEvents()
clickOnMenuMoreOptions()
Expand Down Expand Up @@ -365,6 +370,7 @@ class TeiDashboardTest : BaseTest() {
}


@Ignore("Default analytics have been removed. We need to add some analytics to the database")
@Test
fun shouldShowAnalytics() {
mockWebServerRobot.addResponse(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,8 @@ class TeiDashboardRobot(val composeTestRule: ComposeTestRule) : BaseRobot() {
composeTestRule.onNodeWithText(timelineLabel).performClick()
} catch (e: NoMatchingViewException) {
checkIfGroupedEventsIsVisible()
} finally {
composeTestRule.waitForIdle()
}
}
}
Expand Down
Loading