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
2 changes: 1 addition & 1 deletion .github/workflows/ci_checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ jobs:
force-avd-creation: false
emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
disable-animations: true
disk-size: 8G
disk-size: 6G
script: |
adb root
mkdir -p app/build/outputs/test-artifacts
Expand Down
19 changes: 12 additions & 7 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@

### Internal

- Bump Sentry to v8.29.0
- Bump Sentry to v8.30.0
- Bump AndroidX Lifecycle to v2.10.0
- Bump AndroidX Test Runner to v1.7.0
- Bump AndroidX Test Rules to v1.7.0
- Bump AndroidX JUnit to v1.3.0
- Bump Jackson Core to v2.20.1
- Bump Jackson Core to v2.21.0
- Bump Play Services Auth to v21.5.0
- Bump Material Components to v1.12.0
- Bump Kotlin to v2.3.0
Expand All @@ -23,18 +23,18 @@
- Bump AndroidX Benchmark to v1.4.1
- Bump AndroidX Camera to v1.5.2
- Bump AndroidX Camera View to v1.5.2
- Bump dagger to v2.57.2
- Bump dagger to v2.58
- Bump UUID generator to v5.2.0
- Bump Compose BOM to v2025.12.01
- Bump Compose BOM to v2026.01.00
- Bump Sentry Android to v5.12.2
- Update GH Actions `checkout` to v6
- Update GH Actions `setup-jdk` to to v5
- Bump Gradle to v9.2.1
- Bump Mockito Kotlin to v6.1.0
- Bump Mockito Kotlin to v6.2.1
- Add helper function `diagnosedAt` to update the htn and dm diagnosed at fields in medical history
- Bump asm to v9.9.1
- Bump AGP to v8.13.2
- Bump Lint to v31.13.2
- Bump AGP to v9.0.0
- Bump Lint to v32.0.0
- Disable Ksp1 and enable Ksp2 by default
- Update GH Workflow Actions `Setup Gradle` to v5
- Bump Google Service to v4.4.4
Expand All @@ -44,6 +44,10 @@
- Bump sqlcipher to v4.12.0
- Bump GH Actions `cache` to v5
- Bump GH Actions `upload-artifacts` to v6
- Add support for Android 16
- Bump compile and target SDK to 36
- Bump AndroidX Activity to v1.12.2
- Bump Chucker to v4.3.0

### Changes

Expand Down Expand Up @@ -88,6 +92,7 @@
- Migrate new medical history screen to Jetpack Compose
- Bump AndroidX Benchmark to v1.4.0
- Bump Open CSV to v5.12.0
- Bump AndroidX Core KTX to v1.17.0

### Changes

Expand Down
1 change: 0 additions & 1 deletion app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import java.util.EnumSet

plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.parcelize)
alias(libs.plugins.sentry)
alias(libs.plugins.ksp)
Expand Down
28 changes: 12 additions & 16 deletions app/src/main/java/org/simple/clinic/main/TheActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import android.content.Intent
import android.content.res.Configuration
import android.graphics.Color
import android.os.Bundle
import android.view.WindowManager
import androidx.activity.SystemBarStyle
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
Expand All @@ -15,8 +14,8 @@ import androidx.work.WorkManager
import io.github.inflationx.viewpump.ViewPumpContextWrapper
import io.reactivex.Observable
import io.reactivex.disposables.CompositeDisposable
import org.simple.clinic.BuildConfig
import org.simple.clinic.ClinicApp
import org.simple.clinic.activity.permissions.ActivityPermissionResult
import org.simple.clinic.deeplink.DeepLinkResult
import org.simple.clinic.deeplink.OpenPatientSummary
import org.simple.clinic.deeplink.OpenPatientSummaryWithTeleconsultLog
Expand All @@ -31,15 +30,14 @@ import org.simple.clinic.home.patients.LoggedOutOnOtherDeviceDialog
import org.simple.clinic.login.applock.AppLockConfig
import org.simple.clinic.login.applock.AppLockScreenKey
import org.simple.clinic.mobius.MobiusDelegate
import org.simple.clinic.navigation.v2.ActivityResult
import org.simple.clinic.navigation.v2.History
import org.simple.clinic.navigation.v2.Router
import org.simple.clinic.navigation.v2.ScreenResultBus
import org.simple.clinic.navigation.v2.compat.wrap
import org.simple.clinic.registerorlogin.AuthenticationActivity
import org.simple.clinic.remoteconfig.UpdateRemoteConfigWorker
import org.simple.clinic.remoteconfig.UpdateRemoteConfigWorker.Companion.REMOTE_CONFIG_SYNC_WORKER
import org.simple.clinic.navigation.v2.ScreenResultBus
import org.simple.clinic.activity.permissions.ActivityPermissionResult
import org.simple.clinic.navigation.v2.ActivityResult
import org.simple.clinic.storage.MemoryValue
import org.simple.clinic.sync.DataSync
import org.simple.clinic.sync.SyncSetup
Expand All @@ -48,6 +46,7 @@ import org.simple.clinic.user.UserSession
import org.simple.clinic.util.UtcClock
import org.simple.clinic.util.disableAnimations
import org.simple.clinic.util.finishWithoutAnimations
import org.simple.clinic.util.handleBackPress
import org.simple.clinic.util.popWithParcelableResult
import org.simple.clinic.util.unsafeLazy
import org.simple.clinic.util.withLocale
Expand Down Expand Up @@ -192,18 +191,21 @@ class TheActivity : AppCompatActivity(), TheActivityUi {
navigationBarStyle = SystemBarStyle.dark(Color.TRANSPARENT)
)
super.onCreate(savedInstanceState)

handleBackPress {
if (!router.onBackPressed()) {
isEnabled = false
onBackPressedDispatcher.onBackPressed()
}
}

router.onReady(savedInstanceState)
delegate.onRestoreInstanceState(savedInstanceState)
}

@SuppressLint("CheckResult")
override fun onPostCreate(savedInstanceState: Bundle?) {
super.onPostCreate(savedInstanceState)
@Suppress("ConstantConditionIf")
if (BuildConfig.DISABLE_SCREENSHOT) {
window.setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE)
}

if (savedInstanceState == null) {
disposables.addAll(
syncSetup.run(),
Expand Down Expand Up @@ -270,12 +272,6 @@ class TheActivity : AppCompatActivity(), TheActivityUi {
screenResults.send(ActivityPermissionResult(requestCode))
}

override fun onBackPressed() {
if (!router.onBackPressed()) {
super.onBackPressed()
}
}

override fun onSaveInstanceState(outState: Bundle) {
router.onSaveInstanceState(outState)
delegate.onSaveInstanceState(outState)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,18 @@ import androidx.appcompat.app.AppCompatActivity
import io.github.inflationx.viewpump.ViewPumpContextWrapper
import io.reactivex.Observable
import org.simple.clinic.ClinicApp
import org.simple.clinic.activity.permissions.ActivityPermissionResult
import org.simple.clinic.di.InjectorProviderContextWrapper
import org.simple.clinic.empty.EmptyScreenKey
import org.simple.clinic.feature.Features
import org.simple.clinic.mobius.MobiusDelegate
import org.simple.clinic.navigation.v2.ActivityResult
import org.simple.clinic.navigation.v2.Router
import org.simple.clinic.navigation.v2.ScreenResultBus
import org.simple.clinic.navigation.v2.compat.wrap
import org.simple.clinic.registration.phone.RegistrationPhoneScreenKey
import org.simple.clinic.navigation.v2.ScreenResultBus
import org.simple.clinic.activity.permissions.ActivityPermissionResult
import org.simple.clinic.navigation.v2.ActivityResult
import org.simple.clinic.selectcountry.SelectCountryScreen
import org.simple.clinic.util.handleBackPress
import org.simple.clinic.util.unsafeLazy
import org.simple.clinic.util.withLocale
import org.simple.clinic.util.wrap
Expand Down Expand Up @@ -86,6 +87,14 @@ class AuthenticationActivity : AppCompatActivity(), AuthenticationUiActions {
navigationBarStyle = SystemBarStyle.dark(Color.TRANSPARENT)
)
super.onCreate(savedInstanceState)

handleBackPress {
if (!router.onBackPressed()) {
isEnabled = false
onBackPressedDispatcher.onBackPressed()
}
}

router.onReady(savedInstanceState)
delegate.onRestoreInstanceState(savedInstanceState)
}
Expand Down Expand Up @@ -141,12 +150,6 @@ class AuthenticationActivity : AppCompatActivity(), AuthenticationUiActions {
screenResults.send(ActivityPermissionResult(requestCode))
}

override fun onBackPressed() {
if (!router.onBackPressed()) {
super.onBackPressed()
}
}

override fun onSaveInstanceState(outState: Bundle) {
router.onSaveInstanceState(outState)
delegate.onSaveInstanceState(outState)
Expand Down
18 changes: 7 additions & 11 deletions app/src/main/java/org/simple/clinic/setup/SetupActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,12 @@ import android.content.Intent
import android.content.res.Configuration
import android.graphics.Color
import android.os.Bundle
import android.view.WindowManager
import androidx.activity.SystemBarStyle
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import io.github.inflationx.viewpump.ViewPumpContextWrapper
import io.reactivex.Observable
import org.simple.clinic.BuildConfig
import org.simple.clinic.ClinicApp
import org.simple.clinic.R
import org.simple.clinic.activity.permissions.ActivityPermissionResult
Expand All @@ -32,6 +30,7 @@ import org.simple.clinic.util.UtcClock
import org.simple.clinic.util.disableAnimations
import org.simple.clinic.util.disablePendingTransitions
import org.simple.clinic.util.finishWithoutAnimations
import org.simple.clinic.util.handleBackPress
import org.simple.clinic.util.unsafeLazy
import org.simple.clinic.util.withLocale
import org.simple.clinic.util.wrap
Expand Down Expand Up @@ -86,9 +85,12 @@ class SetupActivity : AppCompatActivity(), UiActions {
navigationBarStyle = SystemBarStyle.dark(Color.TRANSPARENT)
)
super.onCreate(savedInstanceState)
@Suppress("ConstantConditionIf")
if (BuildConfig.DISABLE_SCREENSHOT) {
window.setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE)

handleBackPress {
if (!router.onBackPressed()) {
isEnabled = false
onBackPressedDispatcher.onBackPressed()
}
}

binding = ActivitySetupBinding.inflate(layoutInflater)
Expand All @@ -114,12 +116,6 @@ class SetupActivity : AppCompatActivity(), UiActions {
super.onSaveInstanceState(outState)
}

override fun onBackPressed() {
if (!router.onBackPressed()) {
super.onBackPressed()
}
}

override fun attachBaseContext(baseContext: Context) {
setupDiGraph()

Expand Down
18 changes: 18 additions & 0 deletions app/src/main/java/org/simple/clinic/util/AndroidExtensions.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,11 @@ import android.content.Context
import android.content.Intent
import android.content.res.Configuration
import android.view.KeyEvent
import androidx.activity.OnBackPressedCallback
import androidx.annotation.AttrRes
import androidx.annotation.ColorInt
import androidx.annotation.ColorRes
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
import io.reactivex.Observable
import org.simple.clinic.feature.Feature
Expand Down Expand Up @@ -112,3 +114,19 @@ fun Context.resolveFloat(attrRes: Int, fallback: (() -> Float)? = null): Float {
a.recycle()
}
}

/**
* A reusable extension function to handle a custom back press action.
* The `onBackPressedAction` lambda tells the function what to do
* when the back button is pressed.
*/
fun AppCompatActivity.handleBackPress(
onBackPressedAction: OnBackPressedCallback.() -> Unit
) {
val onBackPressedCallback = object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
this.onBackPressedAction()
}
}
onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
}
21 changes: 6 additions & 15 deletions app/src/main/java/org/simple/clinic/widgets/BottomSheetActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,10 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.WindowManager
import androidx.appcompat.app.AppCompatActivity
import org.simple.clinic.BuildConfig
import org.simple.clinic.databinding.BottomSheetBinding
import org.simple.clinic.util.disablePendingTransitions
import org.simple.clinic.util.handleBackPress

/**
* We're using Activities as fake bottom sheets instead of BottomSheetDialog because we want
Expand All @@ -31,14 +30,13 @@ abstract class BottomSheetActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
disablePendingTransitions()
super.onCreate(savedInstanceState)
@Suppress("ConstantConditionIf")
if (BuildConfig.DISABLE_SCREENSHOT) {
window.setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE)
}

bottomSheetBinding = BottomSheetBinding.inflate(layoutInflater)
super.setContentView(bottomSheetBinding.root)

handleBackPress {
finish()
}

contentContainer.setOnClickListener {
// Swallow clicks to avoid dismissing the sheet accidentally.
}
Expand Down Expand Up @@ -77,13 +75,6 @@ abstract class BottomSheetActivity : AppCompatActivity() {
}

open fun onBackgroundClick() {
onBackPressed()
}

@Deprecated("Deprecated in Java")
override fun onBackPressed() {
super.onBackPressed()
// Routing to finish() just so that the exit animation can be played.
finish()
onBackPressedDispatcher.onBackPressed()
}
}
43 changes: 0 additions & 43 deletions app/src/test/java/org/simple/clinic/mobius/CustomFirstMatchers.kt

This file was deleted.

Loading
Loading