Skip to content

Commit 487965b

Browse files
authored
Support window insets in screens and components (#5408)
**Story:** https://app.shortcut.com/simpledotorg/story/14618/support-window-insets-in-screens-and-components <!-- GitButler Footer Boundary Top --> --- This is **part 1 of 2 in a stack** made with GitButler: - <kbd>&nbsp;2&nbsp;</kbd> #5428 - <kbd>&nbsp;1&nbsp;</kbd> #5408 👈 <!-- GitButler Footer Boundary Bottom -->
1 parent 75bfb3a commit 487965b

File tree

61 files changed

+534
-72
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

61 files changed

+534
-72
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
- Increase lab based risk threshold to 20%
2828
- Update manifest payload to move countries to top level and add version field
2929
- Bump Open CSV to v5.11
30+
- Handle window insets when displaying app content in edge-to-edge
3031

3132
### Features
3233

app/src/main/java/org/simple/clinic/bloodsugar/history/BloodSugarHistoryScreen.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ import org.simple.clinic.summary.TYPE_PICKER_SHEET
4141
import org.simple.clinic.summary.bloodsugar.BloodSugarSummaryConfig
4242
import org.simple.clinic.util.UserClock
4343
import org.simple.clinic.util.UtcClock
44+
import org.simple.clinic.util.applyStatusBarPadding
4445
import org.simple.clinic.util.extractSuccessful
4546
import org.simple.clinic.widgets.DividerItemDecorator
4647
import org.simple.clinic.widgets.PagingItemAdapter
@@ -90,6 +91,9 @@ class BloodSugarHistoryScreen : BaseScreen<
9091
@Inject
9192
lateinit var screenKeyProvider: ScreenKeyProvider
9293

94+
private val appbar
95+
get() = binding.appbar
96+
9397
private val toolbar
9498
get() = binding.toolbar
9599

@@ -145,6 +149,7 @@ class BloodSugarHistoryScreen : BaseScreen<
145149

146150
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
147151
super.onViewCreated(view, savedInstanceState)
152+
appbar.applyStatusBarPadding()
148153

149154
openEntrySheetAfterTypeIsSelected()
150155
handleToolbarBackClick()

app/src/main/java/org/simple/clinic/bp/history/BloodPressureHistoryScreen.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import org.simple.clinic.patient.displayLetterRes
3434
import org.simple.clinic.summary.PatientSummaryConfig
3535
import org.simple.clinic.util.UserClock
3636
import org.simple.clinic.util.UtcClock
37+
import org.simple.clinic.util.applyStatusBarPadding
3738
import org.simple.clinic.widgets.DividerItemDecorator
3839
import org.simple.clinic.widgets.PagingItemAdapter
3940
import org.simple.clinic.widgets.dp
@@ -91,6 +92,9 @@ class BloodPressureHistoryScreen : BaseScreen<
9192
private val bpHistoryList
9293
get() = binding.bpHistoryList
9394

95+
private val appbar
96+
get() = binding.appbar
97+
9498
private val toolbar
9599
get() = binding.toolbar
96100

@@ -133,6 +137,7 @@ class BloodPressureHistoryScreen : BaseScreen<
133137

134138
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
135139
super.onViewCreated(view, savedInstanceState)
140+
appbar.applyStatusBarPadding()
136141

137142
setupBloodPressureHistoryList()
138143
handleToolbarBackClick()

app/src/main/java/org/simple/clinic/consent/onboarding/OnboardingConsentScreen.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import androidx.compose.foundation.layout.fillMaxSize
1414
import androidx.compose.foundation.layout.fillMaxWidth
1515
import androidx.compose.foundation.layout.padding
1616
import androidx.compose.foundation.layout.requiredHeight
17+
import androidx.compose.foundation.layout.statusBarsPadding
1718
import androidx.compose.foundation.rememberScrollState
1819
import androidx.compose.foundation.verticalScroll
1920
import androidx.compose.material.Card
@@ -136,6 +137,7 @@ private fun OnboardingConsentScreen(
136137
drawContent()
137138
}
138139
}
140+
.statusBarsPadding()
139141
) {
140142
Image(
141143
modifier = Modifier

app/src/main/java/org/simple/clinic/deniedaccess/AccessDeniedScreen.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import androidx.appcompat.app.AppCompatActivity
99
import org.simple.clinic.databinding.ScreenAccessDeniedBinding
1010
import org.simple.clinic.di.injector
1111
import org.simple.clinic.navigation.v2.fragments.BaseScreen
12+
import org.simple.clinic.util.applyStatusBarPadding
1213
import javax.inject.Inject
1314

1415
class AccessDeniedScreen : BaseScreen<
@@ -22,6 +23,9 @@ class AccessDeniedScreen : BaseScreen<
2223
@Inject
2324
lateinit var activity: AppCompatActivity
2425

26+
private val outerContainer
27+
get() = binding.outerContainer
28+
2529
private val userFullNameText
2630
get() = binding.userFullNameText
2731

@@ -37,6 +41,8 @@ class AccessDeniedScreen : BaseScreen<
3741

3842
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
3943
super.onViewCreated(view, savedInstanceState)
44+
outerContainer.applyStatusBarPadding()
45+
4046
userFullNameText.text = screenKey.fullName
4147
}
4248
}

app/src/main/java/org/simple/clinic/drugs/search/DrugsSearchScreen.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import org.simple.clinic.drugs.selection.custom.drugfrequency.country.DrugFreque
2727
import org.simple.clinic.navigation.v2.Router
2828
import org.simple.clinic.navigation.v2.ScreenKey
2929
import org.simple.clinic.navigation.v2.fragments.BaseScreen
30+
import org.simple.clinic.util.applyStatusBarPadding
3031
import org.simple.clinic.util.debounce
3132
import org.simple.clinic.widgets.PagingItemAdapter
3233
import org.simple.clinic.widgets.UiEvent
@@ -68,6 +69,9 @@ class DrugsSearchScreen : BaseScreen<
6869
)
6970
)
7071

72+
private val appbar
73+
get() = binding.drugSearchAppBar
74+
7175
private val drugSearchToolbar
7276
get() = binding.drugSearchToolbar
7377

@@ -109,6 +113,7 @@ class DrugsSearchScreen : BaseScreen<
109113
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
110114
super.onViewCreated(view, savedInstanceState)
111115

116+
appbar.applyStatusBarPadding()
112117
drugSearchToolbar.setNavigationOnClickListener {
113118
router.pop()
114119
}

app/src/main/java/org/simple/clinic/drugs/selection/EditMedicinesScreen.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ import org.simple.clinic.navigation.v2.Router
4949
import org.simple.clinic.navigation.v2.fragments.BaseScreen
5050
import org.simple.clinic.util.UserClock
5151
import org.simple.clinic.util.UtcClock
52+
import org.simple.clinic.util.applyInsetsBottomPadding
53+
import org.simple.clinic.util.applyStatusBarPadding
5254
import org.simple.clinic.util.unsafeLazy
5355
import org.simple.clinic.widgets.ItemAdapter
5456
import org.simple.clinic.widgets.UiEvent
@@ -83,12 +85,18 @@ class EditMedicinesScreen :
8385
@Inject
8486
lateinit var features: Features
8587

88+
private val appbar
89+
get() = binding.prescribeddrugsAppbar
90+
8691
private val toolbar
8792
get() = binding.prescribeddrugsToolbar
8893

8994
private val recyclerView
9095
get() = binding.prescribeddrugsRecyclerview
9196

97+
private val buttonFrame
98+
get() = binding.buttonFrame
99+
92100
private val doneButton
93101
get() = binding.prescribeddrugsDone
94102

@@ -153,7 +161,11 @@ class EditMedicinesScreen :
153161

154162
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
155163
super.onViewCreated(view, savedInstanceState)
164+
appbar.applyStatusBarPadding()
165+
buttonFrame.applyInsetsBottomPadding()
166+
156167
toolbar.setNavigationOnClickListener { router.pop() }
168+
157169
recyclerView.setHasFixedSize(false)
158170
recyclerView.layoutManager = LinearLayoutManager(requireContext())
159171

app/src/main/java/org/simple/clinic/drugs/selection/custom/CustomDrugEntrySheet.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ class CustomDrugEntrySheet : BaseBottomSheet<
8585

8686
private val saveButtonFrame
8787
get() = binding.saveButtonFrame
88-
88+
8989
private val progressIndicator
9090
get() = binding.progressIndicator
9191

app/src/main/java/org/simple/clinic/drugstockreminders/enterdrugstock/EnterDrugStockScreen.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import org.simple.clinic.di.injector
1313
import org.simple.clinic.navigation.v2.Router
1414
import org.simple.clinic.navigation.v2.ScreenKey
1515
import org.simple.clinic.navigation.v2.fragments.BaseScreen
16+
import org.simple.clinic.util.applyStatusBarPadding
1617
import javax.inject.Inject
1718

1819
class EnterDrugStockScreen : BaseScreen<
@@ -29,6 +30,9 @@ class EnterDrugStockScreen : BaseScreen<
2930
@Inject
3031
lateinit var effectHandler: EnterDrugStockEffectHandler
3132

33+
private val appbar
34+
get() = binding.appbar
35+
3236
private val toolbar
3337
get() = binding.toolbar
3438

@@ -56,6 +60,7 @@ class EnterDrugStockScreen : BaseScreen<
5660
@SuppressLint("SetJavaScriptEnabled")
5761
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
5862
super.onViewCreated(view, savedInstanceState)
63+
appbar.applyStatusBarPadding()
5964
toolbar.setNavigationOnClickListener { router.pop() }
6065

6166
webView.settings.javaScriptEnabled = true

app/src/main/java/org/simple/clinic/editpatient/EditPatientScreen.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@ import org.simple.clinic.scanid.ScanSimpleIdScreen
8484
import org.simple.clinic.scanid.ScanSimpleIdScreenKey
8585
import org.simple.clinic.util.UserClock
8686
import org.simple.clinic.util.afterTextChangedWatcher
87+
import org.simple.clinic.util.applyInsetsBottomPadding
88+
import org.simple.clinic.util.applyStatusBarPadding
8789
import org.simple.clinic.util.exhaustive
8890
import org.simple.clinic.util.resolveColor
8991
import org.simple.clinic.util.setFragmentResultListener
@@ -252,6 +254,9 @@ class EditPatientScreen : BaseScreen<
252254
private val addNHIDButton
253255
get() = binding.addNHIDButton
254256

257+
private val saveButtonFrame
258+
get() = binding.saveButtonFrame
259+
255260
private val hardwareBackPressEvents = PublishSubject.create<BackClicked>()
256261
private val hotEvents = PublishSubject.create<UiEvent>()
257262

@@ -379,6 +384,9 @@ class EditPatientScreen : BaseScreen<
379384
super.onViewCreated(view, savedInstanceState)
380385
setAdapterWhenVillageTypeAheadIsEnabled()
381386

387+
rootView.applyStatusBarPadding()
388+
saveButtonFrame.applyInsetsBottomPadding()
389+
382390
deletePatient.setOnClickListener { router.push(DeletePatientScreen.Key(screenKey.patient.uuid)) }
383391
}
384392

app/src/main/java/org/simple/clinic/editpatient/deletepatient/DeletePatientScreen.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import org.simple.clinic.navigation.v2.Router
2323
import org.simple.clinic.navigation.v2.ScreenKey
2424
import org.simple.clinic.navigation.v2.fragments.BaseScreen
2525
import org.simple.clinic.patient.DeletedReason
26+
import org.simple.clinic.util.applyStatusBarPadding
2627
import org.simple.clinic.util.unsafeLazy
2728
import org.simple.clinic.widgets.DividerItemDecorator
2829
import org.simple.clinic.widgets.ItemAdapter
@@ -44,6 +45,9 @@ class DeletePatientScreen : BaseScreen<
4445
@Inject
4546
lateinit var effectHandlerFactory: DeletePatientEffectHandler.Factory
4647

48+
private val appbar
49+
get() = binding.appbar
50+
4751
private val toolbar
4852
get() = binding.toolbar
4953

@@ -74,8 +78,9 @@ class DeletePatientScreen : BaseScreen<
7478

7579
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
7680
super.onViewCreated(view, savedInstanceState)
77-
81+
appbar.applyStatusBarPadding()
7882
toolbar.setNavigationOnClickListener { router.pop() }
83+
7984
with(deleteReasonsRecyclerView) {
8085
adapter = deleteReasonsAdapter
8186
addItemDecoration(DividerItemDecorator(requireContext(), marginStart = 56.dp, marginEnd = 16.dp))

app/src/main/java/org/simple/clinic/enterotp/EnterOtpScreen.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import org.simple.clinic.navigation.v2.Router
2828
import org.simple.clinic.navigation.v2.ScreenKey
2929
import org.simple.clinic.navigation.v2.fragments.BaseScreen
3030
import org.simple.clinic.util.UtcClock
31+
import org.simple.clinic.util.applyStatusBarPadding
3132
import org.simple.clinic.util.exhaustive
3233
import org.simple.clinic.widgets.UiEvent
3334
import org.simple.clinic.widgets.displayedChildResId
@@ -69,6 +70,9 @@ class EnterOtpScreen : BaseScreen<
6970
private val otpEntryEditText
7071
get() = binding.otpEntryEditText
7172

73+
private val enterOtpLogoContainer
74+
get() = binding.enterotpLogoContainer
75+
7276
private val backButton
7377
get() = binding.backButton
7478

@@ -141,6 +145,7 @@ class EnterOtpScreen : BaseScreen<
141145

142146
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
143147
super.onViewCreated(view, savedInstanceState)
148+
enterOtpLogoContainer.applyStatusBarPadding()
144149
backButton.setOnClickListener { goBack() }
145150
}
146151

app/src/main/java/org/simple/clinic/facilitypicker/FacilityPickerView.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import org.simple.clinic.di.injector
2525
import org.simple.clinic.facility.Facility
2626
import org.simple.clinic.facility.change.FacilityListItem
2727
import org.simple.clinic.mobius.MobiusDelegate
28+
import org.simple.clinic.util.applyStatusBarPadding
2829
import org.simple.clinic.util.unsafeLazy
2930
import org.simple.clinic.widgets.ItemAdapter
3031
import org.simple.clinic.widgets.RecyclerViewUserScrollDetector
@@ -68,6 +69,9 @@ class FacilityPickerView(
6869

6970
private var binding: ViewFacilitypickerBinding? = null
7071

72+
private val appbar
73+
get() = binding!!.appbarLayout
74+
7175
private val toolbarViewWithSearch
7276
get() = binding!!.toolbarViewWithSearch
7377

@@ -90,6 +94,7 @@ class FacilityPickerView(
9094

9195
context.injector<Injector>().inject(this)
9296

97+
appbar.applyStatusBarPadding()
9398
toolbarViewWithSearch.setNavigationOnClickListener { backClicked?.invoke() }
9499

95100
facilityRecyclerView.layoutManager = LinearLayoutManager(context)

app/src/main/java/org/simple/clinic/forgotpin/confirmpin/ForgotPinConfirmPinScreen.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import org.simple.clinic.home.HomeScreenKey
2323
import org.simple.clinic.navigation.v2.Router
2424
import org.simple.clinic.navigation.v2.ScreenKey
2525
import org.simple.clinic.navigation.v2.fragments.BaseScreen
26+
import org.simple.clinic.util.applyStatusBarPadding
2627
import org.simple.clinic.widgets.hideKeyboard
2728
import org.simple.clinic.widgets.showKeyboard
2829
import org.simple.clinic.widgets.textChanges
@@ -42,6 +43,9 @@ class ForgotPinConfirmPinScreen : BaseScreen<
4243
@Inject
4344
lateinit var router: Router
4445

46+
private val topContainer
47+
get() = binding.forgotpinConfirmpinLogoContainer
48+
4549
private val pinEntryEditText
4650
get() = binding.pinEntryEditText
4751

@@ -100,6 +104,7 @@ class ForgotPinConfirmPinScreen : BaseScreen<
100104

101105
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
102106
super.onViewCreated(view, savedInstanceState)
107+
topContainer.applyStatusBarPadding()
103108
pinEntryEditText.showKeyboard()
104109
backButton.setOnClickListener { goBack() }
105110
}

app/src/main/java/org/simple/clinic/forgotpin/createnewpin/ForgotPinCreateNewPinScreen.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import org.simple.clinic.forgotpin.confirmpin.ForgotPinConfirmPinScreen
1919
import org.simple.clinic.navigation.v2.Router
2020
import org.simple.clinic.navigation.v2.ScreenKey
2121
import org.simple.clinic.navigation.v2.fragments.BaseScreen
22+
import org.simple.clinic.util.applyStatusBarPadding
2223
import org.simple.clinic.widgets.hideKeyboard
2324
import org.simple.clinic.widgets.showKeyboard
2425
import javax.inject.Inject
@@ -37,6 +38,9 @@ class ForgotPinCreateNewPinScreen : BaseScreen<
3738
@Inject
3839
lateinit var effectHandlerFactory: ForgotPinCreateNewEffectHandler.Factory
3940

41+
private val topContainer
42+
get() = binding.logoContainer
43+
4044
private val createPinEditText
4145
get() = binding.createPinEditText
4246

@@ -86,6 +90,7 @@ class ForgotPinCreateNewPinScreen : BaseScreen<
8690

8791
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
8892
super.onViewCreated(view, savedInstanceState)
93+
topContainer.applyStatusBarPadding()
8994
createPinEditText.showKeyboard()
9095
}
9196

app/src/main/java/org/simple/clinic/home/HomeScreen.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ import org.simple.clinic.summary.OpenIntention
5252
import org.simple.clinic.summary.PatientSummaryScreenKey
5353
import org.simple.clinic.util.UtcClock
5454
import org.simple.clinic.util.exhaustive
55+
import org.simple.clinic.util.applyStatusBarPadding
5556
import org.simple.clinic.widgets.findCurrentFragment
5657
import org.simple.clinic.widgets.hideKeyboard
5758
import java.time.Instant
@@ -100,6 +101,9 @@ class HomeScreen :
100101
private val homeTabLayout
101102
get() = binding.homeTabLayout
102103

104+
private val appbar
105+
get() = binding.appbar
106+
103107
private val toolbar
104108
get() = binding.toolbar
105109

@@ -146,6 +150,8 @@ class HomeScreen :
146150

147151
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
148152
super.onViewCreated(view, savedInstanceState)
153+
appbar.applyStatusBarPadding()
154+
149155
setupToolBar()
150156
setupHelpClicks()
151157

0 commit comments

Comments
 (0)