From 9d5b898813dd882974d0b022d996f5759a2e9331 Mon Sep 17 00:00:00 2001 From: Sergejs Luhmirins Date: Thu, 10 Apr 2025 11:26:08 +0300 Subject: [PATCH 1/3] MS-969 Add helper function to apply insets to the fragment layout --- .../src/main/res/layout/fragment_main.xml | 1 - .../main/res/layout/activity_orchestrator.xml | 3 +- infra/resources/src/main/res/values/theme.xml | 1 + .../infra/uibase/view/LayoutInsets.kt | 51 +++++++++++++++++++ 4 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 infra/ui-base/src/main/java/com/simprints/infra/uibase/view/LayoutInsets.kt diff --git a/feature/dashboard/src/main/res/layout/fragment_main.xml b/feature/dashboard/src/main/res/layout/fragment_main.xml index 8cbdf5c1a0..413ec3f483 100644 --- a/feature/dashboard/src/main/res/layout/fragment_main.xml +++ b/feature/dashboard/src/main/res/layout/fragment_main.xml @@ -4,7 +4,6 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - android:fitsSystemWindows="true" android:theme="@style/Theme.Simprints"> + android:layout_height="match_parent"> false true @color/simprints_off_white + false diff --git a/infra/ui-base/src/main/java/com/simprints/infra/uibase/view/LayoutInsets.kt b/infra/ui-base/src/main/java/com/simprints/infra/uibase/view/LayoutInsets.kt new file mode 100644 index 0000000000..eaaa0eb659 --- /dev/null +++ b/infra/ui-base/src/main/java/com/simprints/infra/uibase/view/LayoutInsets.kt @@ -0,0 +1,51 @@ +package com.simprints.infra.uibase.view + +import android.view.View +import android.view.ViewGroup +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat +import androidx.core.view.children +import androidx.core.view.updatePadding +import com.google.android.material.appbar.AppBarLayout +import java.util.LinkedList + + +/** + * Automatically applies system bar inset paddings to the provided view. + * + * This function should be called on every fragment root view that is displayed to the user and has meaningful UI elements. + * Fragments that are only responsible for handling the internal navigation graph should not call this function to avoid double padding. + * + * Top padding is applied to either + * - the first instance of [AppBarLayout] if present + * - to the root view. + */ +fun applySystemBarInsets(view: View) { + ViewCompat.setOnApplyWindowInsetsListener(view) { v, insets -> + val bars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) + + val appBar = findAppBarLayout(LinkedList().apply { add(v) }) + if (appBar != null) { + appBar.updatePadding(top = bars.top) + v.updatePadding(bottom = bars.bottom) + } else { + v.updatePadding(top = bars.top, bottom = bars.bottom) + } + WindowInsetsCompat.CONSUMED + } +} + +/** + * Recursively traverse the layout and find the first instance of AppBarLayout. + */ +private tailrec fun findAppBarLayout(views: LinkedList): AppBarLayout? { + if (views.isEmpty()) return null + val currentView = views.removeFirst() + if (currentView is AppBarLayout) return currentView + if (currentView is ViewGroup) { + for (child in currentView.children) { + views.add(child) + } + } + return findAppBarLayout(views) +} From 34d534a2f8e38b273717035b5bb1d3053d9c72f8 Mon Sep 17 00:00:00 2001 From: Sergejs Luhmirins Date: Thu, 10 Apr 2025 11:26:31 +0300 Subject: [PATCH 2/3] MS-969 Apply insets in all fragments with meaningful UI elements --- .../face/capture/screens/confirmation/ConfirmationFragment.kt | 3 +++ .../face/capture/screens/livefeedback/LiveFeedbackFragment.kt | 3 +++ .../LiveFeedbackAutoCaptureFragment.kt | 2 ++ .../face/capture/screens/preparation/PreparationFragment.kt | 2 ++ .../java/com/simprints/feature/alert/screen/AlertFragment.kt | 2 ++ .../feature/consent/screens/consent/ConsentFragment.kt | 2 ++ .../feature/consent/screens/privacy/PrivacyNoticeFragment.kt | 2 ++ .../com/simprints/feature/dashboard/debug/DebugFragment.kt | 2 ++ .../java/com/simprints/feature/dashboard/main/MainFragment.kt | 2 ++ .../simprints/feature/dashboard/settings/SettingsFragment.kt | 3 +++ .../feature/dashboard/settings/about/AboutFragment.kt | 2 ++ .../settings/fingerselection/FingerSelectionFragment.kt | 2 ++ .../feature/dashboard/settings/syncinfo/SyncInfoFragment.kt | 2 ++ .../syncinfo/moduleselection/ModuleSelectionFragment.kt | 2 ++ .../feature/enrollast/screen/EnrolLastBiometricFragment.kt | 2 ++ .../com/simprints/feature/exitform/screen/ExitFormFragment.kt | 2 ++ .../feature/fetchsubject/screen/FetchSubjectFragment.kt | 4 +++- .../simprints/feature/login/screens/form/LoginFormFragment.kt | 2 ++ .../feature/login/screens/qrscanner/QrScannerFragment.kt | 2 ++ .../main/java/com/simprints/matcher/screen/MatchFragment.kt | 2 ++ .../selectagegroup/screen/SelectSubjectAgeGroupFragment.kt | 2 ++ .../feature/selectsubject/screen/SelectSubjectFragment.kt | 2 ++ .../java/com/simprints/feature/setup/screen/SetupFragment.kt | 2 ++ .../feature/troubleshooting/TroubleshootingFragment.kt | 2 ++ .../validatepool/screen/ValidateSubjectPoolFragment.kt | 2 ++ .../fingerprint/capture/screen/FingerprintCaptureFragment.kt | 2 ++ .../fingerprint/connect/screens/connect/ConnectFragment.kt | 2 ++ .../screens/issues/bluetoothoff/BluetoothOffFragment.kt | 2 ++ .../connect/screens/issues/nfcoff/NfcOffFragment.kt | 2 ++ .../connect/screens/issues/nfcpair/NfcPairFragment.kt | 2 ++ .../connect/screens/issues/scanneroff/ScannerOffFragment.kt | 2 ++ .../screens/issues/serialentrypair/SerialEntryPairFragment.kt | 2 ++ .../simprints/fingerprint/connect/screens/ota/OtaFragment.kt | 2 ++ .../connect/screens/ota/failed/OtaFailedFragment.kt | 2 ++ .../connect/screens/ota/recovery/OtaRecoveryFragment.kt | 4 +++- 35 files changed, 75 insertions(+), 2 deletions(-) diff --git a/face/capture/src/main/java/com/simprints/face/capture/screens/confirmation/ConfirmationFragment.kt b/face/capture/src/main/java/com/simprints/face/capture/screens/confirmation/ConfirmationFragment.kt index 5ac6da4682..f5f8c90e54 100644 --- a/face/capture/src/main/java/com/simprints/face/capture/screens/confirmation/ConfirmationFragment.kt +++ b/face/capture/src/main/java/com/simprints/face/capture/screens/confirmation/ConfirmationFragment.kt @@ -12,6 +12,7 @@ import com.simprints.face.capture.databinding.FragmentConfirmationBinding import com.simprints.face.capture.screens.FaceCaptureViewModel import com.simprints.infra.logging.LoggingConstants.CrashReportTag.ORCHESTRATION import com.simprints.infra.logging.Simber +import com.simprints.infra.uibase.view.applySystemBarInsets import com.simprints.infra.uibase.viewbinding.viewBinding import dagger.hilt.android.AndroidEntryPoint import javax.inject.Inject @@ -36,6 +37,8 @@ internal class ConfirmationFragment : Fragment(R.layout.fragment_confirmation) { savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) + applySystemBarInsets(view) + Simber.i("ConfirmationFragment started", tag = ORCHESTRATION) startTime = faceTimeHelper.now() diff --git a/face/capture/src/main/java/com/simprints/face/capture/screens/livefeedback/LiveFeedbackFragment.kt b/face/capture/src/main/java/com/simprints/face/capture/screens/livefeedback/LiveFeedbackFragment.kt index a4b4c90caf..55691b6269 100644 --- a/face/capture/src/main/java/com/simprints/face/capture/screens/livefeedback/LiveFeedbackFragment.kt +++ b/face/capture/src/main/java/com/simprints/face/capture/screens/livefeedback/LiveFeedbackFragment.kt @@ -33,6 +33,7 @@ import com.simprints.face.capture.screens.FaceCaptureViewModel import com.simprints.infra.logging.LoggingConstants.CrashReportTag.FACE_CAPTURE import com.simprints.infra.logging.LoggingConstants.CrashReportTag.ORCHESTRATION import com.simprints.infra.logging.Simber +import com.simprints.infra.uibase.view.applySystemBarInsets import com.simprints.infra.uibase.navigation.navigateSafely import com.simprints.infra.uibase.view.setCheckedWithLeftDrawable import com.simprints.infra.uibase.viewbinding.viewBinding @@ -76,6 +77,8 @@ internal class LiveFeedbackFragment : Fragment(R.layout.fragment_live_feedback) savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) + applySystemBarInsets(view) + Simber.i("LiveFeedbackFragment started", tag = ORCHESTRATION) initFragment() } diff --git a/face/capture/src/main/java/com/simprints/face/capture/screens/livefeedbackautocapture/LiveFeedbackAutoCaptureFragment.kt b/face/capture/src/main/java/com/simprints/face/capture/screens/livefeedbackautocapture/LiveFeedbackAutoCaptureFragment.kt index 91d4888824..4cefc2a5eb 100644 --- a/face/capture/src/main/java/com/simprints/face/capture/screens/livefeedbackautocapture/LiveFeedbackAutoCaptureFragment.kt +++ b/face/capture/src/main/java/com/simprints/face/capture/screens/livefeedbackautocapture/LiveFeedbackAutoCaptureFragment.kt @@ -32,6 +32,7 @@ import com.simprints.face.capture.models.FaceDetection import com.simprints.face.capture.screens.FaceCaptureViewModel import com.simprints.face.capture.screens.livefeedback.CropToTargetOverlayAnalyzer import com.simprints.infra.logging.Simber +import com.simprints.infra.uibase.view.applySystemBarInsets import com.simprints.infra.uibase.navigation.navigateSafely import com.simprints.infra.uibase.view.setCheckedWithLeftDrawable import com.simprints.infra.uibase.viewbinding.viewBinding @@ -75,6 +76,7 @@ internal class LiveFeedbackAutoCaptureFragment : Fragment(R.layout.fragment_live savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) + applySystemBarInsets(view) initFragment() } diff --git a/face/capture/src/main/java/com/simprints/face/capture/screens/preparation/PreparationFragment.kt b/face/capture/src/main/java/com/simprints/face/capture/screens/preparation/PreparationFragment.kt index 16eb8c4876..b11ebf96bb 100644 --- a/face/capture/src/main/java/com/simprints/face/capture/screens/preparation/PreparationFragment.kt +++ b/face/capture/src/main/java/com/simprints/face/capture/screens/preparation/PreparationFragment.kt @@ -12,6 +12,7 @@ import com.simprints.face.capture.databinding.FragmentPreparationBinding import com.simprints.face.capture.screens.FaceCaptureViewModel import com.simprints.infra.logging.LoggingConstants.CrashReportTag.ORCHESTRATION import com.simprints.infra.logging.Simber +import com.simprints.infra.uibase.view.applySystemBarInsets import com.simprints.infra.uibase.navigation.navigateSafely import com.simprints.infra.uibase.viewbinding.viewBinding import dagger.hilt.android.AndroidEntryPoint @@ -35,6 +36,7 @@ internal class PreparationFragment : Fragment(R.layout.fragment_preparation) { savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) + applySystemBarInsets(view) Simber.i("PreparationFragment started", tag = ORCHESTRATION) startTime = faceTimeHelper.now() diff --git a/feature/alert/src/main/java/com/simprints/feature/alert/screen/AlertFragment.kt b/feature/alert/src/main/java/com/simprints/feature/alert/screen/AlertFragment.kt index 68a3260388..e21b6a4f0b 100644 --- a/feature/alert/src/main/java/com/simprints/feature/alert/screen/AlertFragment.kt +++ b/feature/alert/src/main/java/com/simprints/feature/alert/screen/AlertFragment.kt @@ -21,6 +21,7 @@ import com.simprints.feature.alert.databinding.FragmentAlertBinding import com.simprints.infra.logging.LoggingConstants.CrashReportTag.ALERT import com.simprints.infra.logging.LoggingConstants.CrashReportTag.ORCHESTRATION import com.simprints.infra.logging.Simber +import com.simprints.infra.uibase.view.applySystemBarInsets import com.simprints.infra.uibase.navigation.setResult import com.simprints.infra.uibase.system.Clipboard import com.simprints.infra.uibase.view.setTextWithFallbacks @@ -39,6 +40,7 @@ internal class AlertFragment : Fragment(R.layout.fragment_alert) { savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) + applySystemBarInsets(view) Simber.i("AlertFragment started", tag = ORCHESTRATION) val config = args.alertConfiguration diff --git a/feature/consent/src/main/java/com/simprints/feature/consent/screens/consent/ConsentFragment.kt b/feature/consent/src/main/java/com/simprints/feature/consent/screens/consent/ConsentFragment.kt index 35fedbcb19..e70b22d85c 100644 --- a/feature/consent/src/main/java/com/simprints/feature/consent/screens/consent/ConsentFragment.kt +++ b/feature/consent/src/main/java/com/simprints/feature/consent/screens/consent/ConsentFragment.kt @@ -18,6 +18,7 @@ import com.simprints.feature.exitform.ExitFormContract import com.simprints.feature.exitform.ExitFormResult import com.simprints.infra.logging.LoggingConstants.CrashReportTag.ORCHESTRATION import com.simprints.infra.logging.Simber +import com.simprints.infra.uibase.view.applySystemBarInsets import com.simprints.infra.uibase.listeners.OnTabSelectedListener import com.simprints.infra.uibase.navigation.finishWithResult import com.simprints.infra.uibase.navigation.handleResult @@ -37,6 +38,7 @@ internal class ConsentFragment : Fragment(R.layout.fragment_consent) { savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) + applySystemBarInsets(view) Simber.i("ConsentFragment started", tag = ORCHESTRATION) binding.consentPrivacyNotice.paintFlags = binding.consentPrivacyNotice.paintFlags or Paint.UNDERLINE_TEXT_FLAG diff --git a/feature/consent/src/main/java/com/simprints/feature/consent/screens/privacy/PrivacyNoticeFragment.kt b/feature/consent/src/main/java/com/simprints/feature/consent/screens/privacy/PrivacyNoticeFragment.kt index 1a488f88f1..91428eda4c 100644 --- a/feature/consent/src/main/java/com/simprints/feature/consent/screens/privacy/PrivacyNoticeFragment.kt +++ b/feature/consent/src/main/java/com/simprints/feature/consent/screens/privacy/PrivacyNoticeFragment.kt @@ -12,6 +12,7 @@ import com.simprints.feature.consent.R import com.simprints.feature.consent.databinding.FragmentPrivacyBinding import com.simprints.infra.logging.LoggingConstants.CrashReportTag.ORCHESTRATION import com.simprints.infra.logging.Simber +import com.simprints.infra.uibase.view.applySystemBarInsets import com.simprints.infra.uibase.viewbinding.viewBinding import dagger.hilt.android.AndroidEntryPoint import com.simprints.infra.resources.R as IDR @@ -26,6 +27,7 @@ internal class PrivacyNoticeFragment : Fragment(R.layout.fragment_privacy) { savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) + applySystemBarInsets(view) Simber.i("PrivacyNoticeFragment started", tag = ORCHESTRATION) binding.privacyText.movementMethod = ScrollingMovementMethod() diff --git a/feature/dashboard/src/main/java/com/simprints/feature/dashboard/debug/DebugFragment.kt b/feature/dashboard/src/main/java/com/simprints/feature/dashboard/debug/DebugFragment.kt index 1ca121d97a..06b797e647 100644 --- a/feature/dashboard/src/main/java/com/simprints/feature/dashboard/debug/DebugFragment.kt +++ b/feature/dashboard/src/main/java/com/simprints/feature/dashboard/debug/DebugFragment.kt @@ -19,6 +19,7 @@ import com.simprints.infra.events.EventRepository import com.simprints.infra.eventsync.EventSyncManager import com.simprints.infra.eventsync.status.models.EventSyncWorkerState import com.simprints.infra.sync.SyncOrchestrator +import com.simprints.infra.uibase.view.applySystemBarInsets import com.simprints.infra.uibase.viewbinding.viewBinding import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.CoroutineDispatcher @@ -57,6 +58,7 @@ internal class DebugFragment : Fragment(R.layout.fragment_debug) { savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) + applySystemBarInsets(view) eventSyncManager.getLastSyncState().observe(viewLifecycleOwner) { state -> val states = diff --git a/feature/dashboard/src/main/java/com/simprints/feature/dashboard/main/MainFragment.kt b/feature/dashboard/src/main/java/com/simprints/feature/dashboard/main/MainFragment.kt index 14c6df5816..ade3f4fd28 100644 --- a/feature/dashboard/src/main/java/com/simprints/feature/dashboard/main/MainFragment.kt +++ b/feature/dashboard/src/main/java/com/simprints/feature/dashboard/main/MainFragment.kt @@ -9,6 +9,7 @@ import androidx.navigation.fragment.findNavController import com.simprints.feature.dashboard.BuildConfig import com.simprints.feature.dashboard.R import com.simprints.feature.dashboard.databinding.FragmentMainBinding +import com.simprints.infra.uibase.view.applySystemBarInsets import com.simprints.infra.uibase.navigation.navigateSafely import com.simprints.infra.uibase.viewbinding.viewBinding import dagger.hilt.android.AndroidEntryPoint @@ -23,6 +24,7 @@ internal class MainFragment : Fragment(R.layout.fragment_main) { savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) + applySystemBarInsets(view) binding.dashboardToolbar.setOnMenuItemClickListener { menuItemClicked(it) } diff --git a/feature/dashboard/src/main/java/com/simprints/feature/dashboard/settings/SettingsFragment.kt b/feature/dashboard/src/main/java/com/simprints/feature/dashboard/settings/SettingsFragment.kt index 9817732e06..25a2db2a9f 100644 --- a/feature/dashboard/src/main/java/com/simprints/feature/dashboard/settings/SettingsFragment.kt +++ b/feature/dashboard/src/main/java/com/simprints/feature/dashboard/settings/SettingsFragment.kt @@ -21,6 +21,7 @@ import com.simprints.feature.dashboard.databinding.FragmentSettingsBinding import com.simprints.feature.dashboard.settings.password.SettingsPasswordDialogFragment import com.simprints.infra.config.store.models.GeneralConfiguration import com.simprints.infra.config.store.models.GeneralConfiguration.Modality.FINGERPRINT +import com.simprints.infra.uibase.view.applySystemBarInsets import com.simprints.infra.uibase.navigation.navigateSafely import com.simprints.infra.uibase.viewbinding.viewBinding import dagger.hilt.android.AndroidEntryPoint @@ -54,6 +55,8 @@ internal class SettingsFragment : PreferenceFragmentCompat() { savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) + applySystemBarInsets(view) + binding.settingsToolbar.setNavigationOnClickListener { findNavController().popBackStack() } diff --git a/feature/dashboard/src/main/java/com/simprints/feature/dashboard/settings/about/AboutFragment.kt b/feature/dashboard/src/main/java/com/simprints/feature/dashboard/settings/about/AboutFragment.kt index 400839adcc..60cf05f8b9 100644 --- a/feature/dashboard/src/main/java/com/simprints/feature/dashboard/settings/about/AboutFragment.kt +++ b/feature/dashboard/src/main/java/com/simprints/feature/dashboard/settings/about/AboutFragment.kt @@ -19,6 +19,7 @@ import com.simprints.feature.dashboard.R import com.simprints.feature.dashboard.databinding.FragmentSettingsAboutBinding import com.simprints.feature.dashboard.settings.password.SettingsPasswordDialogFragment import com.simprints.infra.config.store.models.GeneralConfiguration.Modality.FINGERPRINT +import com.simprints.infra.uibase.view.applySystemBarInsets import com.simprints.infra.uibase.navigation.navigateSafely import com.simprints.infra.uibase.system.Clipboard import com.simprints.infra.uibase.viewbinding.viewBinding @@ -74,6 +75,7 @@ internal class AboutFragment : PreferenceFragmentCompat() { savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) + applySystemBarInsets(view) binding.settingsAboutToolbar.setNavigationOnClickListener { findNavController().popBackStack() } diff --git a/feature/dashboard/src/main/java/com/simprints/feature/dashboard/settings/fingerselection/FingerSelectionFragment.kt b/feature/dashboard/src/main/java/com/simprints/feature/dashboard/settings/fingerselection/FingerSelectionFragment.kt index bf2e9173f4..7ffbca8c74 100644 --- a/feature/dashboard/src/main/java/com/simprints/feature/dashboard/settings/fingerselection/FingerSelectionFragment.kt +++ b/feature/dashboard/src/main/java/com/simprints/feature/dashboard/settings/fingerselection/FingerSelectionFragment.kt @@ -9,6 +9,7 @@ import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager import com.simprints.feature.dashboard.R import com.simprints.feature.dashboard.databinding.FragmentFingerSelectionBinding +import com.simprints.infra.uibase.view.applySystemBarInsets import com.simprints.infra.uibase.viewbinding.viewBinding import dagger.hilt.android.AndroidEntryPoint @@ -24,6 +25,7 @@ internal class FingerSelectionFragment : Fragment(R.layout.fragment_finger_selec savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) + applySystemBarInsets(view) initRecyclerView() listenForItemChanges() diff --git a/feature/dashboard/src/main/java/com/simprints/feature/dashboard/settings/syncinfo/SyncInfoFragment.kt b/feature/dashboard/src/main/java/com/simprints/feature/dashboard/settings/syncinfo/SyncInfoFragment.kt index 500ed645c2..897e680f3d 100644 --- a/feature/dashboard/src/main/java/com/simprints/feature/dashboard/settings/syncinfo/SyncInfoFragment.kt +++ b/feature/dashboard/src/main/java/com/simprints/feature/dashboard/settings/syncinfo/SyncInfoFragment.kt @@ -18,6 +18,7 @@ import com.simprints.infra.config.store.models.ProjectConfiguration import com.simprints.infra.config.store.models.SynchronizationConfiguration import com.simprints.infra.config.store.models.canSyncDataToSimprints import com.simprints.infra.config.store.models.isEventDownSyncAllowed +import com.simprints.infra.uibase.view.applySystemBarInsets import com.simprints.infra.uibase.navigation.handleResult import com.simprints.infra.uibase.navigation.navigateSafely import com.simprints.infra.uibase.viewbinding.viewBinding @@ -39,6 +40,7 @@ internal class SyncInfoFragment : Fragment(R.layout.fragment_sync_info) { savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) + applySystemBarInsets(view) binding.selectedModulesView.adapter = moduleCountAdapter setupClickListeners() diff --git a/feature/dashboard/src/main/java/com/simprints/feature/dashboard/settings/syncinfo/moduleselection/ModuleSelectionFragment.kt b/feature/dashboard/src/main/java/com/simprints/feature/dashboard/settings/syncinfo/moduleselection/ModuleSelectionFragment.kt index bbd43f072b..38f76c186a 100644 --- a/feature/dashboard/src/main/java/com/simprints/feature/dashboard/settings/syncinfo/moduleselection/ModuleSelectionFragment.kt +++ b/feature/dashboard/src/main/java/com/simprints/feature/dashboard/settings/syncinfo/moduleselection/ModuleSelectionFragment.kt @@ -29,6 +29,7 @@ import com.simprints.feature.dashboard.settings.syncinfo.moduleselection.excepti import com.simprints.feature.dashboard.settings.syncinfo.moduleselection.repository.Module import com.simprints.feature.dashboard.settings.syncinfo.moduleselection.tools.ChipClickListener import com.simprints.feature.dashboard.settings.syncinfo.moduleselection.tools.ModuleChipHelper +import com.simprints.infra.uibase.view.applySystemBarInsets import com.simprints.infra.uibase.viewbinding.viewBinding import dagger.hilt.android.AndroidEntryPoint import com.simprints.infra.resources.R as IDR @@ -66,6 +67,7 @@ internal class ModuleSelectionFragment : savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) + applySystemBarInsets(view) configureOverlay() configureRecyclerView() diff --git a/feature/enrol-last-biometric/src/main/java/com/simprints/feature/enrollast/screen/EnrolLastBiometricFragment.kt b/feature/enrol-last-biometric/src/main/java/com/simprints/feature/enrollast/screen/EnrolLastBiometricFragment.kt index fcf0f06270..eb14dbe3e6 100644 --- a/feature/enrol-last-biometric/src/main/java/com/simprints/feature/enrollast/screen/EnrolLastBiometricFragment.kt +++ b/feature/enrol-last-biometric/src/main/java/com/simprints/feature/enrollast/screen/EnrolLastBiometricFragment.kt @@ -25,6 +25,7 @@ import com.simprints.infra.config.store.models.GeneralConfiguration.Modality import com.simprints.infra.events.event.domain.models.AlertScreenEvent import com.simprints.infra.logging.LoggingConstants.CrashReportTag.ORCHESTRATION import com.simprints.infra.logging.Simber +import com.simprints.infra.uibase.view.applySystemBarInsets import com.simprints.infra.uibase.navigation.finishWithResult import com.simprints.infra.uibase.navigation.handleResult import com.simprints.infra.uibase.navigation.navigateSafely @@ -41,6 +42,7 @@ internal class EnrolLastBiometricFragment : Fragment(R.layout.fragment_enrol_las savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) + applySystemBarInsets(view) Simber.i("EnrolLastBiometricFragment started", tag = ORCHESTRATION) findNavController().handleResult( diff --git a/feature/exit-form/src/main/java/com/simprints/feature/exitform/screen/ExitFormFragment.kt b/feature/exit-form/src/main/java/com/simprints/feature/exitform/screen/ExitFormFragment.kt index 0e9410a9b1..7582795bf1 100644 --- a/feature/exit-form/src/main/java/com/simprints/feature/exitform/screen/ExitFormFragment.kt +++ b/feature/exit-form/src/main/java/com/simprints/feature/exitform/screen/ExitFormFragment.kt @@ -16,6 +16,7 @@ import com.simprints.feature.exitform.databinding.FragmentExitFormBinding import com.simprints.infra.logging.LoggingConstants.CrashReportTag.ORCHESTRATION import com.simprints.infra.logging.Simber import com.simprints.infra.uibase.extensions.showToast +import com.simprints.infra.uibase.view.applySystemBarInsets import com.simprints.infra.uibase.listeners.TextWatcherOnChangeListener import com.simprints.infra.uibase.navigation.finishWithResult import com.simprints.infra.uibase.viewbinding.viewBinding @@ -36,6 +37,7 @@ internal class ExitFormFragment : Fragment(R.layout.fragment_exit_form) { savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) + applySystemBarInsets(view) Simber.i("ExitFormFragment started", tag = ORCHESTRATION) binding.exitFormTitle.setText(IDR.string.exit_form_title) diff --git a/feature/fetch-subject/src/main/java/com/simprints/feature/fetchsubject/screen/FetchSubjectFragment.kt b/feature/fetch-subject/src/main/java/com/simprints/feature/fetchsubject/screen/FetchSubjectFragment.kt index cfd20f7d20..25d22fd019 100644 --- a/feature/fetch-subject/src/main/java/com/simprints/feature/fetchsubject/screen/FetchSubjectFragment.kt +++ b/feature/fetch-subject/src/main/java/com/simprints/feature/fetchsubject/screen/FetchSubjectFragment.kt @@ -15,6 +15,7 @@ import com.simprints.feature.fetchsubject.FetchSubjectResult import com.simprints.feature.fetchsubject.R import com.simprints.infra.logging.LoggingConstants.CrashReportTag.ORCHESTRATION import com.simprints.infra.logging.Simber +import com.simprints.infra.uibase.view.applySystemBarInsets import com.simprints.infra.uibase.navigation.finishWithResult import com.simprints.infra.uibase.navigation.handleResult import com.simprints.infra.uibase.navigation.navigateSafely @@ -30,6 +31,7 @@ internal class FetchSubjectFragment : Fragment(R.layout.fragment_subject_fetch) savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) + applySystemBarInsets(view) Simber.i("FetchSubjectFragment started", tag = ORCHESTRATION) with(findNavController()) { @@ -62,7 +64,7 @@ internal class FetchSubjectFragment : Fragment(R.layout.fragment_subject_fetch) private fun handleFetchState(state: FetchSubjectState) = when (state) { FetchSubjectState.FoundLocal, FetchSubjectState.FoundRemote, - -> finishWithResult(true) + -> finishWithResult(true) FetchSubjectState.NotFound -> openAlert(FetchSubjectAlerts.subjectNotFoundOnline().toArgs()) FetchSubjectState.ConnectionError -> openAlert(FetchSubjectAlerts.subjectNotFoundOffline().toArgs()) diff --git a/feature/login/src/main/java/com/simprints/feature/login/screens/form/LoginFormFragment.kt b/feature/login/src/main/java/com/simprints/feature/login/screens/form/LoginFormFragment.kt index 0ddc7aa6a8..6455eecc20 100644 --- a/feature/login/src/main/java/com/simprints/feature/login/screens/form/LoginFormFragment.kt +++ b/feature/login/src/main/java/com/simprints/feature/login/screens/form/LoginFormFragment.kt @@ -42,6 +42,7 @@ import com.simprints.feature.login.tools.play.GooglePlayServicesAvailabilityChec import com.simprints.infra.logging.LoggingConstants.CrashReportTag.LOGIN import com.simprints.infra.logging.LoggingConstants.CrashReportTag.ORCHESTRATION import com.simprints.infra.logging.Simber +import com.simprints.infra.uibase.view.applySystemBarInsets import com.simprints.infra.uibase.navigation.finishWithResult import com.simprints.infra.uibase.navigation.handleResult import com.simprints.infra.uibase.navigation.navigateSafely @@ -77,6 +78,7 @@ internal class LoginFormFragment : Fragment(R.layout.fragment_login_form) { savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) + applySystemBarInsets(view) Simber.i("LoginFormFragment started", tag = ORCHESTRATION) requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner) { diff --git a/feature/login/src/main/java/com/simprints/feature/login/screens/qrscanner/QrScannerFragment.kt b/feature/login/src/main/java/com/simprints/feature/login/screens/qrscanner/QrScannerFragment.kt index cae8b44c01..e66a14293c 100644 --- a/feature/login/src/main/java/com/simprints/feature/login/screens/qrscanner/QrScannerFragment.kt +++ b/feature/login/src/main/java/com/simprints/feature/login/screens/qrscanner/QrScannerFragment.kt @@ -17,6 +17,7 @@ import com.simprints.feature.login.databinding.FragmentQrScannerBinding import com.simprints.feature.login.tools.camera.CameraHelper import com.simprints.feature.login.tools.camera.QrCodeAnalyzer import com.simprints.infra.logging.Simber +import com.simprints.infra.uibase.view.applySystemBarInsets import com.simprints.infra.uibase.navigation.finishWithResult import com.simprints.infra.uibase.viewbinding.viewBinding import dagger.hilt.android.AndroidEntryPoint @@ -50,6 +51,7 @@ internal class QrScannerFragment : Fragment(R.layout.fragment_qr_scanner) { savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) + applySystemBarInsets(view) viewLifecycleOwner.lifecycleScope.launch { viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.RESUMED) { diff --git a/feature/matcher/src/main/java/com/simprints/matcher/screen/MatchFragment.kt b/feature/matcher/src/main/java/com/simprints/matcher/screen/MatchFragment.kt index db9d10b6b2..91c7146e41 100644 --- a/feature/matcher/src/main/java/com/simprints/matcher/screen/MatchFragment.kt +++ b/feature/matcher/src/main/java/com/simprints/matcher/screen/MatchFragment.kt @@ -17,6 +17,7 @@ import com.simprints.core.tools.extentions.hasPermission import com.simprints.core.tools.extentions.permissionFromResult import com.simprints.infra.logging.LoggingConstants.CrashReportTag.ORCHESTRATION import com.simprints.infra.logging.Simber +import com.simprints.infra.uibase.view.applySystemBarInsets import com.simprints.infra.uibase.navigation.finishWithResult import com.simprints.infra.uibase.viewbinding.viewBinding import com.simprints.matcher.R @@ -51,6 +52,7 @@ internal class MatchFragment : Fragment(R.layout.fragment_matcher) { savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) + applySystemBarInsets(view) Simber.i("MatchFragment started (isFace=${args.params.isFaceMatch()})", tag = ORCHESTRATION) observeViewModel() diff --git a/feature/select-subject-age-group/src/main/java/com/simprints/feature/selectagegroup/screen/SelectSubjectAgeGroupFragment.kt b/feature/select-subject-age-group/src/main/java/com/simprints/feature/selectagegroup/screen/SelectSubjectAgeGroupFragment.kt index 6862d29858..409a6ad6d2 100644 --- a/feature/select-subject-age-group/src/main/java/com/simprints/feature/selectagegroup/screen/SelectSubjectAgeGroupFragment.kt +++ b/feature/select-subject-age-group/src/main/java/com/simprints/feature/selectagegroup/screen/SelectSubjectAgeGroupFragment.kt @@ -17,6 +17,7 @@ import com.simprints.feature.selectagegroup.databinding.FragmentAgeGroupSelectio import com.simprints.infra.config.store.models.AgeGroup import com.simprints.infra.logging.LoggingConstants.CrashReportTag.ORCHESTRATION import com.simprints.infra.logging.Simber +import com.simprints.infra.uibase.view.applySystemBarInsets import com.simprints.infra.uibase.navigation.finishWithResult import com.simprints.infra.uibase.navigation.handleResult import com.simprints.infra.uibase.navigation.navigateSafely @@ -33,6 +34,7 @@ internal class SelectSubjectAgeGroupFragment : Fragment(R.layout.fragment_age_gr savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) + applySystemBarInsets(view) Simber.i("SelectSubjectAgeGroupFragment started", tag = ORCHESTRATION) viewModel.ageGroups.observe(viewLifecycleOwner) { ageGroupsList -> diff --git a/feature/select-subject/src/main/java/com/simprints/feature/selectsubject/screen/SelectSubjectFragment.kt b/feature/select-subject/src/main/java/com/simprints/feature/selectsubject/screen/SelectSubjectFragment.kt index 3bfc41f9f1..1b02ab713c 100644 --- a/feature/select-subject/src/main/java/com/simprints/feature/selectsubject/screen/SelectSubjectFragment.kt +++ b/feature/select-subject/src/main/java/com/simprints/feature/selectsubject/screen/SelectSubjectFragment.kt @@ -10,6 +10,7 @@ import com.simprints.feature.selectsubject.R import com.simprints.feature.selectsubject.SelectSubjectResult import com.simprints.infra.logging.LoggingConstants.CrashReportTag.ORCHESTRATION import com.simprints.infra.logging.Simber +import com.simprints.infra.uibase.view.applySystemBarInsets import com.simprints.infra.uibase.navigation.finishWithResult import dagger.hilt.android.AndroidEntryPoint @@ -23,6 +24,7 @@ internal class SelectSubjectFragment : Fragment(R.layout.fragment_select_subject savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) + applySystemBarInsets(view) Simber.i("SelectSubjectFragment started", tag = ORCHESTRATION) viewModel.finish.observe(viewLifecycleOwner) { diff --git a/feature/setup/src/main/java/com/simprints/feature/setup/screen/SetupFragment.kt b/feature/setup/src/main/java/com/simprints/feature/setup/screen/SetupFragment.kt index 996ffbb7d6..e91df771e9 100644 --- a/feature/setup/src/main/java/com/simprints/feature/setup/screen/SetupFragment.kt +++ b/feature/setup/src/main/java/com/simprints/feature/setup/screen/SetupFragment.kt @@ -24,6 +24,7 @@ import com.simprints.infra.license.models.LicenseState.Started import com.simprints.infra.logging.LoggingConstants.CrashReportTag.LICENSE import com.simprints.infra.logging.LoggingConstants.CrashReportTag.ORCHESTRATION import com.simprints.infra.logging.Simber +import com.simprints.infra.uibase.view.applySystemBarInsets import com.simprints.infra.uibase.navigation.finishWithResult import com.simprints.infra.uibase.navigation.handleResult import com.simprints.infra.uibase.navigation.navigateSafely @@ -61,6 +62,7 @@ internal class SetupFragment : Fragment(R.layout.fragment_setup) { savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) + applySystemBarInsets(view) Simber.i("SetupFragment started", tag = ORCHESTRATION) findNavController().handleResult( diff --git a/feature/troubleshooting/src/main/java/com/simprints/feature/troubleshooting/TroubleshootingFragment.kt b/feature/troubleshooting/src/main/java/com/simprints/feature/troubleshooting/TroubleshootingFragment.kt index ad7dae8709..c46d431a16 100644 --- a/feature/troubleshooting/src/main/java/com/simprints/feature/troubleshooting/TroubleshootingFragment.kt +++ b/feature/troubleshooting/src/main/java/com/simprints/feature/troubleshooting/TroubleshootingFragment.kt @@ -8,6 +8,7 @@ import androidx.navigation.fragment.findNavController import com.google.android.material.tabs.TabLayoutMediator import com.simprints.core.livedata.LiveDataEventWithContentObserver import com.simprints.feature.troubleshooting.databinding.FragmentTroubleshootingBinding +import com.simprints.infra.uibase.view.applySystemBarInsets import com.simprints.infra.uibase.navigation.navigateSafely import com.simprints.infra.uibase.viewbinding.viewBinding import dagger.hilt.android.AndroidEntryPoint @@ -23,6 +24,7 @@ internal class TroubleshootingFragment : Fragment(R.layout.fragment_troubleshoot savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) + applySystemBarInsets(view) binding.troubleshootingToolbar.setNavigationOnClickListener { findNavController().popBackStack() diff --git a/feature/validate-subject-pool/src/main/java/com/simprints/feature/validatepool/screen/ValidateSubjectPoolFragment.kt b/feature/validate-subject-pool/src/main/java/com/simprints/feature/validatepool/screen/ValidateSubjectPoolFragment.kt index def8c51840..777c0e7021 100644 --- a/feature/validate-subject-pool/src/main/java/com/simprints/feature/validatepool/screen/ValidateSubjectPoolFragment.kt +++ b/feature/validate-subject-pool/src/main/java/com/simprints/feature/validatepool/screen/ValidateSubjectPoolFragment.kt @@ -14,6 +14,7 @@ import com.simprints.feature.validatepool.ValidateSubjectPoolResult import com.simprints.feature.validatepool.databinding.FragmentValidateSubjectPoolBinding import com.simprints.infra.logging.LoggingConstants.CrashReportTag.ORCHESTRATION import com.simprints.infra.logging.Simber +import com.simprints.infra.uibase.view.applySystemBarInsets import com.simprints.infra.uibase.navigation.finishWithResult import com.simprints.infra.uibase.viewbinding.viewBinding import dagger.hilt.android.AndroidEntryPoint @@ -30,6 +31,7 @@ internal class ValidateSubjectPoolFragment : Fragment(R.layout.fragment_validate savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) + applySystemBarInsets(view) Simber.i("ValidateSubjectPoolFragment started", tag = ORCHESTRATION) viewModel.state.observe(viewLifecycleOwner, LiveDataEventWithContentObserver(::renderState)) diff --git a/fingerprint/capture/src/main/java/com/simprints/fingerprint/capture/screen/FingerprintCaptureFragment.kt b/fingerprint/capture/src/main/java/com/simprints/fingerprint/capture/screen/FingerprintCaptureFragment.kt index 3f60095215..67dafb3195 100644 --- a/fingerprint/capture/src/main/java/com/simprints/fingerprint/capture/screen/FingerprintCaptureFragment.kt +++ b/fingerprint/capture/src/main/java/com/simprints/fingerprint/capture/screen/FingerprintCaptureFragment.kt @@ -44,6 +44,7 @@ import com.simprints.infra.logging.LoggingConstants.CrashReportTag.FINGER_CAPTUR import com.simprints.infra.logging.LoggingConstants.CrashReportTag.ORCHESTRATION import com.simprints.infra.logging.Simber import com.simprints.infra.uibase.extensions.showToast +import com.simprints.infra.uibase.view.applySystemBarInsets import com.simprints.infra.uibase.navigation.finishWithResult import com.simprints.infra.uibase.navigation.handleResult import com.simprints.infra.uibase.navigation.navigateSafely @@ -79,6 +80,7 @@ internal class FingerprintCaptureFragment : Fragment(R.layout.fragment_fingerpri savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) + applySystemBarInsets(view) Simber.i("FingerprintCaptureFragment started", tag = ORCHESTRATION) findNavController().handleResult( diff --git a/fingerprint/connect/src/main/java/com/simprints/fingerprint/connect/screens/connect/ConnectFragment.kt b/fingerprint/connect/src/main/java/com/simprints/fingerprint/connect/screens/connect/ConnectFragment.kt index 49536cb666..72baaba150 100644 --- a/fingerprint/connect/src/main/java/com/simprints/fingerprint/connect/screens/connect/ConnectFragment.kt +++ b/fingerprint/connect/src/main/java/com/simprints/fingerprint/connect/screens/connect/ConnectFragment.kt @@ -7,6 +7,7 @@ import androidx.fragment.app.activityViewModels import com.simprints.fingerprint.connect.R import com.simprints.fingerprint.connect.databinding.FragmentConnectBinding import com.simprints.fingerprint.connect.screens.ConnectScannerViewModel +import com.simprints.infra.uibase.view.applySystemBarInsets import com.simprints.infra.uibase.viewbinding.viewBinding internal class ConnectFragment : Fragment(R.layout.fragment_connect) { @@ -18,6 +19,7 @@ internal class ConnectFragment : Fragment(R.layout.fragment_connect) { savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) + applySystemBarInsets(view) viewModel.currentStep.observe(viewLifecycleOwner) { step -> binding.connectTitle.setText(step.messageRes) diff --git a/fingerprint/connect/src/main/java/com/simprints/fingerprint/connect/screens/issues/bluetoothoff/BluetoothOffFragment.kt b/fingerprint/connect/src/main/java/com/simprints/fingerprint/connect/screens/issues/bluetoothoff/BluetoothOffFragment.kt index e875c20ea1..9ec6ec122f 100644 --- a/fingerprint/connect/src/main/java/com/simprints/fingerprint/connect/screens/issues/bluetoothoff/BluetoothOffFragment.kt +++ b/fingerprint/connect/src/main/java/com/simprints/fingerprint/connect/screens/issues/bluetoothoff/BluetoothOffFragment.kt @@ -20,6 +20,7 @@ import com.simprints.fingerprint.connect.screens.ConnectScannerViewModel import com.simprints.fingerprint.connect.usecase.ReportAlertScreenEventUseCase import com.simprints.fingerprint.infra.scanner.component.bluetooth.ComponentBluetoothAdapter import com.simprints.infra.uibase.extensions.showToast +import com.simprints.infra.uibase.view.applySystemBarInsets import com.simprints.infra.uibase.navigation.navigateSafely import com.simprints.infra.uibase.viewbinding.viewBinding import dagger.hilt.android.AndroidEntryPoint @@ -63,6 +64,7 @@ internal class BluetoothOffFragment : Fragment(R.layout.fragment_bluetooth_off) savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) + applySystemBarInsets(view) screenReporter.reportBluetoothNotEnabled() binding.turnOnBluetoothButton.setOnClickListener { diff --git a/fingerprint/connect/src/main/java/com/simprints/fingerprint/connect/screens/issues/nfcoff/NfcOffFragment.kt b/fingerprint/connect/src/main/java/com/simprints/fingerprint/connect/screens/issues/nfcoff/NfcOffFragment.kt index 06f380242f..dae2a32660 100644 --- a/fingerprint/connect/src/main/java/com/simprints/fingerprint/connect/screens/issues/nfcoff/NfcOffFragment.kt +++ b/fingerprint/connect/src/main/java/com/simprints/fingerprint/connect/screens/issues/nfcoff/NfcOffFragment.kt @@ -12,6 +12,7 @@ import com.simprints.fingerprint.connect.R import com.simprints.fingerprint.connect.databinding.FragmentNfcOffBinding import com.simprints.fingerprint.connect.usecase.ReportAlertScreenEventUseCase import com.simprints.fingerprint.infra.scanner.NfcManager +import com.simprints.infra.uibase.view.applySystemBarInsets import com.simprints.infra.uibase.navigation.navigateSafely import com.simprints.infra.uibase.viewbinding.viewBinding import dagger.hilt.android.AndroidEntryPoint @@ -43,6 +44,7 @@ internal class NfcOffFragment : Fragment(R.layout.fragment_nfc_off) { savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) + applySystemBarInsets(view) screenReporter.reportNfcNotEnabled() if (!nfcManager.doesDeviceHaveNfcCapability()) { diff --git a/fingerprint/connect/src/main/java/com/simprints/fingerprint/connect/screens/issues/nfcpair/NfcPairFragment.kt b/fingerprint/connect/src/main/java/com/simprints/fingerprint/connect/screens/issues/nfcpair/NfcPairFragment.kt index fb40ada49a..bd401021e6 100644 --- a/fingerprint/connect/src/main/java/com/simprints/fingerprint/connect/screens/issues/nfcpair/NfcPairFragment.kt +++ b/fingerprint/connect/src/main/java/com/simprints/fingerprint/connect/screens/issues/nfcpair/NfcPairFragment.kt @@ -24,6 +24,7 @@ import com.simprints.fingerprint.infra.scanner.nfc.ComponentNfcTag import com.simprints.fingerprint.infra.scanner.tools.SerialNumberConverter import com.simprints.infra.recent.user.activity.RecentUserActivityManager import com.simprints.infra.uibase.extensions.showToast +import com.simprints.infra.uibase.view.applySystemBarInsets import com.simprints.infra.uibase.navigation.navigateSafely import com.simprints.infra.uibase.system.Vibrate import com.simprints.infra.uibase.viewbinding.viewBinding @@ -67,6 +68,7 @@ internal class NfcPairFragment : Fragment(R.layout.fragment_nfc_pair) { savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) + applySystemBarInsets(view) screenReporter.reportNfcPairing() setupScannerPhoneTappingAnimation() diff --git a/fingerprint/connect/src/main/java/com/simprints/fingerprint/connect/screens/issues/scanneroff/ScannerOffFragment.kt b/fingerprint/connect/src/main/java/com/simprints/fingerprint/connect/screens/issues/scanneroff/ScannerOffFragment.kt index f8b671a5e0..0a6e7a2a8a 100644 --- a/fingerprint/connect/src/main/java/com/simprints/fingerprint/connect/screens/issues/scanneroff/ScannerOffFragment.kt +++ b/fingerprint/connect/src/main/java/com/simprints/fingerprint/connect/screens/issues/scanneroff/ScannerOffFragment.kt @@ -12,6 +12,7 @@ import com.simprints.fingerprint.connect.R import com.simprints.fingerprint.connect.databinding.FragmentScannerOffBinding import com.simprints.fingerprint.connect.screens.ConnectScannerViewModel import com.simprints.fingerprint.connect.usecase.ReportAlertScreenEventUseCase +import com.simprints.infra.uibase.view.applySystemBarInsets import com.simprints.infra.uibase.viewbinding.viewBinding import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.delay @@ -33,6 +34,7 @@ internal class ScannerOffFragment : Fragment(R.layout.fragment_scanner_off) { savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) + applySystemBarInsets(view) screenReporter.reportScannerOff() binding.tryAgainButton.setOnClickListener { diff --git a/fingerprint/connect/src/main/java/com/simprints/fingerprint/connect/screens/issues/serialentrypair/SerialEntryPairFragment.kt b/fingerprint/connect/src/main/java/com/simprints/fingerprint/connect/screens/issues/serialentrypair/SerialEntryPairFragment.kt index 1bd60a6ccb..7b4d0fe105 100644 --- a/fingerprint/connect/src/main/java/com/simprints/fingerprint/connect/screens/issues/serialentrypair/SerialEntryPairFragment.kt +++ b/fingerprint/connect/src/main/java/com/simprints/fingerprint/connect/screens/issues/serialentrypair/SerialEntryPairFragment.kt @@ -25,6 +25,7 @@ import com.simprints.fingerprint.infra.scanner.component.bluetooth.ComponentBlue import com.simprints.fingerprint.infra.scanner.tools.SerialNumberConverter import com.simprints.infra.recent.user.activity.RecentUserActivityManager import com.simprints.infra.uibase.extensions.showToast +import com.simprints.infra.uibase.view.applySystemBarInsets import com.simprints.infra.uibase.navigation.navigateSafely import com.simprints.infra.uibase.viewbinding.viewBinding import dagger.hilt.android.AndroidEntryPoint @@ -63,6 +64,7 @@ internal class SerialEntryPairFragment : Fragment(R.layout.fragment_serial_entry savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) + applySystemBarInsets(view) screenReporter.reportSerialEntry() diff --git a/fingerprint/connect/src/main/java/com/simprints/fingerprint/connect/screens/ota/OtaFragment.kt b/fingerprint/connect/src/main/java/com/simprints/fingerprint/connect/screens/ota/OtaFragment.kt index 248696789e..44b129d697 100644 --- a/fingerprint/connect/src/main/java/com/simprints/fingerprint/connect/screens/ota/OtaFragment.kt +++ b/fingerprint/connect/src/main/java/com/simprints/fingerprint/connect/screens/ota/OtaFragment.kt @@ -15,6 +15,7 @@ import com.simprints.fingerprint.connect.R import com.simprints.fingerprint.connect.databinding.FragmentOtaBinding import com.simprints.fingerprint.connect.screens.ConnectScannerViewModel import com.simprints.fingerprint.connect.usecase.ReportAlertScreenEventUseCase +import com.simprints.infra.uibase.view.applySystemBarInsets import com.simprints.infra.uibase.navigation.navigateSafely import com.simprints.infra.uibase.viewbinding.viewBinding import dagger.hilt.android.AndroidEntryPoint @@ -39,6 +40,7 @@ internal class OtaFragment : Fragment(R.layout.fragment_ota) { savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) + applySystemBarInsets(view) screenReporter.reportOta() listenForProgress() diff --git a/fingerprint/connect/src/main/java/com/simprints/fingerprint/connect/screens/ota/failed/OtaFailedFragment.kt b/fingerprint/connect/src/main/java/com/simprints/fingerprint/connect/screens/ota/failed/OtaFailedFragment.kt index 32eb5d2d4c..a62786b2e5 100644 --- a/fingerprint/connect/src/main/java/com/simprints/fingerprint/connect/screens/ota/failed/OtaFailedFragment.kt +++ b/fingerprint/connect/src/main/java/com/simprints/fingerprint/connect/screens/ota/failed/OtaFailedFragment.kt @@ -13,6 +13,7 @@ import com.simprints.fingerprint.connect.databinding.FragmentOtaFailedBinding import com.simprints.fingerprint.connect.screens.ConnectScannerViewModel import com.simprints.fingerprint.connect.screens.ota.FetchOtaResult import com.simprints.fingerprint.connect.usecase.ReportAlertScreenEventUseCase +import com.simprints.infra.uibase.view.applySystemBarInsets import com.simprints.infra.uibase.viewbinding.viewBinding import dagger.hilt.android.AndroidEntryPoint import javax.inject.Inject @@ -42,6 +43,7 @@ internal class OtaFailedFragment : Fragment(R.layout.fragment_ota_failed) { savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) + applySystemBarInsets(view) screenReporter.reportOtaFailed() connectScannerViewModel.setBackButtonToExitWithError() diff --git a/fingerprint/connect/src/main/java/com/simprints/fingerprint/connect/screens/ota/recovery/OtaRecoveryFragment.kt b/fingerprint/connect/src/main/java/com/simprints/fingerprint/connect/screens/ota/recovery/OtaRecoveryFragment.kt index d56f2793d2..d8327d6d94 100644 --- a/fingerprint/connect/src/main/java/com/simprints/fingerprint/connect/screens/ota/recovery/OtaRecoveryFragment.kt +++ b/fingerprint/connect/src/main/java/com/simprints/fingerprint/connect/screens/ota/recovery/OtaRecoveryFragment.kt @@ -12,6 +12,7 @@ import com.simprints.fingerprint.connect.databinding.FragmentOtaRecoveryBinding import com.simprints.fingerprint.connect.screens.ota.OtaFragmentParams import com.simprints.fingerprint.connect.usecase.ReportAlertScreenEventUseCase import com.simprints.fingerprint.infra.scanner.domain.ota.OtaRecoveryStrategy +import com.simprints.infra.uibase.view.applySystemBarInsets import com.simprints.infra.uibase.navigation.navigateSafely import com.simprints.infra.uibase.viewbinding.viewBinding import dagger.hilt.android.AndroidEntryPoint @@ -36,6 +37,7 @@ internal class OtaRecoveryFragment : Fragment(R.layout.fragment_ota_recovery) { savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) + applySystemBarInsets(view) screenReporter.reportOtaRecovery() setRecoveryStrategyInstructions() @@ -55,7 +57,7 @@ internal class OtaRecoveryFragment : Fragment(R.layout.fragment_ota_recovery) { OtaRecoveryStrategy.HARD_RESET -> IDR.string.fingerprint_connect_ota_recovery_hard_reset OtaRecoveryStrategy.SOFT_RESET, OtaRecoveryStrategy.SOFT_RESET_AFTER_DELAY, - -> IDR.string.fingerprint_connect_ota_recovery_soft_reset + -> IDR.string.fingerprint_connect_ota_recovery_soft_reset }, ) } From 35b3a87703fa09a97f343809be4696ed3305e8a4 Mon Sep 17 00:00:00 2001 From: Sergejs Luhmirins Date: Thu, 10 Apr 2025 15:25:54 +0300 Subject: [PATCH 3/3] MS-969 Exclude the UI utility from code coverage results --- .../main/java/com/simprints/infra/uibase/view/LayoutInsets.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/infra/ui-base/src/main/java/com/simprints/infra/uibase/view/LayoutInsets.kt b/infra/ui-base/src/main/java/com/simprints/infra/uibase/view/LayoutInsets.kt index eaaa0eb659..0ee24ccb13 100644 --- a/infra/ui-base/src/main/java/com/simprints/infra/uibase/view/LayoutInsets.kt +++ b/infra/ui-base/src/main/java/com/simprints/infra/uibase/view/LayoutInsets.kt @@ -7,6 +7,7 @@ import androidx.core.view.WindowInsetsCompat import androidx.core.view.children import androidx.core.view.updatePadding import com.google.android.material.appbar.AppBarLayout +import com.simprints.infra.uibase.annotations.ExcludedFromGeneratedTestCoverageReports import java.util.LinkedList @@ -20,6 +21,7 @@ import java.util.LinkedList * - the first instance of [AppBarLayout] if present * - to the root view. */ +@ExcludedFromGeneratedTestCoverageReports("UI code") fun applySystemBarInsets(view: View) { ViewCompat.setOnApplyWindowInsetsListener(view) { v, insets -> val bars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) @@ -38,6 +40,7 @@ fun applySystemBarInsets(view: View) { /** * Recursively traverse the layout and find the first instance of AppBarLayout. */ +@ExcludedFromGeneratedTestCoverageReports("UI code") private tailrec fun findAppBarLayout(views: LinkedList): AppBarLayout? { if (views.isEmpty()) return null val currentView = views.removeFirst()