Skip to content

Commit

Permalink
Release 1.20.0
Browse files Browse the repository at this point in the history
  • Loading branch information
Gematik-Entwicklung committed Feb 26, 2024
1 parent 6fdb683 commit 468b267
Show file tree
Hide file tree
Showing 285 changed files with 67,484 additions and 6,873 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
.externalNativeBuild
.cxx
repo
/artifacts

Jenkinsfile
Nightly.Jenkinsfile
Expand All @@ -29,3 +30,5 @@ technical_requirements_report.html
keystore
CODEOWNERS
local.cliactions.yaml
jenkinsfiles

14 changes: 14 additions & 0 deletions LICENSE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
Copyright (c) 2024 gematik GmbH

Licensed under the EUPL, Version 1.2 or – as soon they will be approved by
the European Commission - subsequent versions of the EUPL (the Licence);
You may not use this work except in compliance with the Licence.
You may obtain a copy of the Licence at:

https://joinup.ec.europa.eu/software/page/eupl

Unless required by applicable law or agreed to in writing, software
distributed under the Licence is distributed on an "AS IS" basis,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the Licence for the specific language governing permissions and
limitations under the Licence.
13 changes: 4 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -111,21 +111,16 @@ gradle :android:assemble(Google|Huawei)Pu(External|Internal)(Debug|Release) -Pbu

*Note: Currently the android build variant is derived from the `buildkonfig.flavor` property.*

#### APK

The resulting `.apk` can be found in e.g. `app/android/build/outputs/apk/googlePuExternal/debug/`.

Additionally, you can find the latest apk [here](https://github.com/gematik/E-Rezept-App-Android/releases/latest)

#### Visualize Test Tags

See [Visualize Test Tags](documentation/test-tags.md)

### Desktop

To build a fat JAR run:

```shell
gradle :desktop:packageUberJarForCurrentOS -Pbuildkonfig.flavor=desktopPu(External|Internal)
```

Java 15 is required to execute the JAR located in `desktop/build/compose/jars/`.

### Links Sourcecode

Expand Down
15 changes: 9 additions & 6 deletions ReleaseNotes.md
Original file line number Diff line number Diff line change
@@ -1,26 +1,30 @@
# Release 1.20.0
- Added multi-language support for privacy policy
- Update health insurance contacts
- Optimized performance
- Bug fixes

# Release 1.19.1
- Added gID (HealthID) authentication function
- Language settings can now be changed within the app, not just via the Android settings
- UX improvements
- Bug fixes

# Release 1.18.1
- Optimized performance
- Optimized performance
- UX improvements
- Bug fixes


# Release 1.17.2
- Added Demo mode function
- Added function to change the name of scanned prescriptions
- Added function to change the name of scanned prescriptions
- Increased minimum SDK version to 26 and build version to 34
- UX improvements
- Bug fixes


# Release 1.16.1
- Added Invoice correction function for private health insurance customers
- Optimized performance
- Optimized performance
- UX improvements
- Bug fixes

Expand Down Expand Up @@ -86,4 +90,3 @@

# Release 1.2.1-SRC
Codebase for SRC review

7 changes: 7 additions & 0 deletions SECURITY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Security Policy

Please submit an issue or pull request for any non critical bugs
or non critical vulnerabilities you find.

In case of a responsible disclosure, please follow instructions
on https://www.gematik.de/datensicherheit#c1227.
3 changes: 2 additions & 1 deletion app/android-mock/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ plugins {
id("com.jaredsburrows.license")
id("de.gematik.ti.erp.dependencies")
id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin")
id("de.gematik.ti.erp.gradleplugins.TechnicalRequirementsPlugin")
id("de.gematik.ti.erp.technical-requirements")
}

val VERSION_CODE: String by overriding()
Expand Down Expand Up @@ -99,6 +99,7 @@ android {

dependencies {
implementation(project(":app:features"))
implementation(project(":app:demo-mode"))
androidTestImplementation(project(":app:shared-test"))
implementation(project(":common"))
testImplementation(project(":common"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ package de.gematik.ti.erp.app.di
import de.gematik.ti.erp.app.analytics.di.analyticsModule
import de.gematik.ti.erp.app.appsecurity.appSecurityModule
import de.gematik.ti.erp.app.authentication.di.authenticationModule
import de.gematik.ti.erp.app.cardunlock.cardUnlockModule
import de.gematik.ti.erp.app.cardunlock.di.cardUnlockModule
import de.gematik.ti.erp.app.cardwall.cardWallModule
import de.gematik.ti.erp.app.idp.idpModule
import de.gematik.ti.erp.app.idp.idpUseCaseModule
Expand Down
4 changes: 3 additions & 1 deletion app/android/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@ plugins {
id("com.jaredsburrows.license")
id("de.gematik.ti.erp.dependencies")
id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin")
id("de.gematik.ti.erp.gradleplugins.TechnicalRequirementsPlugin")
id("de.gematik.ti.erp.technical-requirements")
// Release app into play-store
id("com.github.triplet.play") version "3.8.6" apply true
}

val VERSION_CODE: String by overriding()
Expand Down
3 changes: 3 additions & 0 deletions app/android/proguard-rules.pro
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,9 @@
-keep class io.realm.** { *; }
-keep class de.gematik.ti.erp.app.di.** { *; }
-keep class de.gematik.ti.erp.app.MessageConversionException
-keep class de.gematik.ti.erp.app.DomainVerifier
-keep class de.gematik.ti.erp.app.Sdk31DomainVerifier
-keep class de.gematik.ti.erp.app.OlderSdkDomainVerifier

# Serilization
-keep class kotlin.jvm.** { *; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ import android.os.Build
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.runtime.Composable
import de.gematik.ti.erp.app.BuildConfig
import de.gematik.ti.erp.app.cardwall.usecase.deviceHasNFC
import de.gematik.ti.erp.app.utils.extensions.hasNFCTerminal
import de.gematik.ti.erp.app.utils.extensions.riskyOperation
import java.util.Locale

class DefaultBuildConfigInformation : BuildConfigInformation {
Expand All @@ -34,8 +35,10 @@ class DefaultBuildConfigInformation : BuildConfigInformation {

@Composable
override fun inDarkTheme(): String = if (isSystemInDarkTheme()) DARK_THEME_ON else DARK_THEME_OFF
override fun nfcInformation(context: Context): String =
if (context.deviceHasNFC()) NFC_AVAILABLE else NFC_NOT_AVAILABLE
override fun nfcInformation(context: Context): String = riskyOperation(
block = { if (context.hasNFCTerminal()) NFC_AVAILABLE else NFC_NOT_AVAILABLE },
defaultValue = NFC_NOT_AVAILABLE
) ?: NFC_NOT_AVAILABLE

companion object {
private const val DARK_THEME_ON = "an"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,9 @@ package de.gematik.ti.erp.app.pharmacy.ui
import de.gematik.ti.erp.app.CoroutineTestRule
import de.gematik.ti.erp.app.fhir.model.PharmacyContacts
import de.gematik.ti.erp.app.pharmacy.presentation.PharmacyOrderController
import de.gematik.ti.erp.app.pharmacy.ui.model.PharmacyScreenData
import de.gematik.ti.erp.app.pharmacy.model.PharmacyScreenData
import de.gematik.ti.erp.app.pharmacy.usecase.GetOrderStateUseCase
import de.gematik.ti.erp.app.pharmacy.usecase.GetShippingContactValidationUseCase
import de.gematik.ti.erp.app.pharmacy.usecase.PharmacyOverviewUseCase
import de.gematik.ti.erp.app.pharmacy.usecase.PharmacySearchUseCase
import de.gematik.ti.erp.app.pharmacy.usecase.model.PharmacyUseCaseData
Expand Down Expand Up @@ -57,6 +58,7 @@ class PharmacySearchViewModelTest {
private lateinit var profileUseCase: ProfilesUseCase
private lateinit var getActiveProfileUseCase: GetActiveProfileUseCase
private lateinit var getOrderStateUseCase: GetOrderStateUseCase
private lateinit var getShippingContactValidationUseCase: GetShippingContactValidationUseCase

@Before
fun setUp() {
Expand All @@ -65,6 +67,7 @@ class PharmacySearchViewModelTest {
getActiveProfileUseCase = mockk()
pharmacyOverviewUseCase = mockk()
getOrderStateUseCase = mockk()
getShippingContactValidationUseCase = mockk()
every { pharmacySearchUseCase.prescriptionDetailsForOrdering(any()) } returns flowOf(orderState)
every { getActiveProfileUseCase.invoke() } returns flowOf(activeProfile)
every { profileUseCase.profiles } returns flowOf(listOf(profile))
Expand All @@ -74,6 +77,7 @@ class PharmacySearchViewModelTest {
getActiveProfileUseCase = getActiveProfileUseCase,
pharmacySearchUseCase = pharmacySearchUseCase,
getOrderStateUseCase = getOrderStateUseCase,
getShippingContactValidationUseCase = getShippingContactValidationUseCase,
scope = TestScope()
)

Expand Down
2 changes: 1 addition & 1 deletion app/demo-mode/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ plugins {
id("com.jaredsburrows.license")
id("de.gematik.ti.erp.dependencies")
id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin")
id("de.gematik.ti.erp.gradleplugins.TechnicalRequirementsPlugin")
id("de.gematik.ti.erp.technical-requirements")
}

licenseReport {
Expand Down
8 changes: 3 additions & 5 deletions app/features/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ plugins {
id("com.jaredsburrows.license")
id("de.gematik.ti.erp.dependencies")
id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin")
id("de.gematik.ti.erp.gradleplugins.TechnicalRequirementsPlugin")
id("de.gematik.ti.erp.technical-requirements")
}

licenseReport {
Expand Down Expand Up @@ -114,14 +114,12 @@ dependencies {
implementation(cameraxLifecycle)
implementation(cameraxView)
}
appCenterSdk {
implementation(appCenterAnalytics)
implementation(appCenterCrashes)
}
dependencyInjection {
compileOnly(kodeinCompose)
implementation(kodeinCompose)
implementation(kodeinViewModel)
implementation(kodeinAndroid)
implementation(kodein)
androidTestImplementation(kodeinCompose)
}
imageLoad {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,8 @@ fun DebugScreen(
profilesUseCase = instance(),
featureToggleManager = instance(),
pharmacyDirectRedeemUseCase = instance(),
getAppUpdateManagerFlagUseCase = instance(),
changeAppUpdateManagerFlagUseCase = instance(),
dispatchers = instance()
)
}
Expand Down Expand Up @@ -418,6 +420,8 @@ fun DebugScreenMain(
val modal = rememberModalBottomSheetState(ModalBottomSheetValue.Hidden)
val scope = rememberCoroutineScope()

val appUpdateManager by viewModel.appUpdateManagerState

ModalBottomSheetLayout(
sheetContent = {
EnvironmentSelector(
Expand Down Expand Up @@ -481,6 +485,27 @@ fun DebugScreenMain(
}
}
}
item {
DebugCard(
title = "App Update"
) {
Row(
modifier = Modifier.fillMaxWidth(),
verticalAlignment = Alignment.CenterVertically
) {
Text(
text = "Original app update",
modifier = Modifier
.weight(1f)
)
Switch(
modifier = Modifier.testTag(TestTag.DebugMenu.FakeAppUpdate),
checked = appUpdateManager,
onCheckedChange = { viewModel.changeAppUpdateManager(it) }
)
}
}
}
item {
DebugCard(
title = "Card Wall"
Expand Down Expand Up @@ -703,61 +728,3 @@ private fun FeatureToggles(modifier: Modifier = Modifier, viewModel: DebugSettin
}
}
}

/*@Composable
fun EnvironmentSelector(
currentSelectedEnvironment: Environment,
onSelectEnvironment: (environment: Environment) -> Unit,
onSaveEnvironment: () -> Unit
) {
var selectedEnvironment by remember { mutableStateOf(currentSelectedEnvironment) }
Column(
modifier = Modifier
.navigationBarsPadding()
.fillMaxWidth()
.selectableGroup()
) {
Text(
text = stringResource(R.string.debug_select_environment),
style = AppTheme.typography.h6,
modifier = Modifier.padding(PaddingDefaults.Medium)
)
Environment.values().forEach {
Row(
modifier = Modifier
.fillMaxWidth()
.clickable {
selectedEnvironment = it
onSelectEnvironment(it)
}
) {
Row(
modifier = Modifier.padding(
horizontal = PaddingDefaults.Medium,
vertical = PaddingDefaults.Small
),
horizontalArrangement = Arrangement.spacedBy(16.dp),
verticalAlignment = Alignment.CenterVertically
) {
RadioButton(
modifier = Modifier.size(32.dp),
selected = selectedEnvironment == it,
onClick = {
selectedEnvironment = it
onSelectEnvironment(it)
}
)
Text(it.name)
}
}
}
Row(modifier = Modifier.padding(PaddingDefaults.Medium)) {
Button(modifier = Modifier.fillMaxWidth(), onClick = { onSaveEnvironment() }) {
Text(text = stringResource(R.string.debug_save_environment))
}
Spacer(modifier = Modifier.navigationBarsPadding())
}
}
}*/
Loading

0 comments on commit 468b267

Please sign in to comment.