@@ -54,11 +54,11 @@ import androidx.appcompat.app.ActionBarDrawerToggle
5454import androidx.collection.MutableIntIntMap
5555import androidx.core.graphics.Insets
5656import androidx.core.view.GravityCompat
57+ import androidx.core.view.ViewCompat
5758import androidx.core.view.WindowInsetsCompat
5859import androidx.core.view.updateLayoutParams
5960import androidx.core.view.updatePadding
6061import androidx.fragment.app.Fragment
61- import com.itsaky.androidide.utils.applyBottomWindowInsetsPadding
6262import androidx.lifecycle.Lifecycle
6363import androidx.lifecycle.lifecycleScope
6464import androidx.lifecycle.repeatOnLifecycle
@@ -118,8 +118,13 @@ import com.itsaky.androidide.utils.FlashType
118118import com.itsaky.androidide.utils.InstallationResultHandler.onResult
119119import com.itsaky.androidide.utils.IntentUtils
120120import com.itsaky.androidide.utils.MemoryUsageWatcher
121+ import com.itsaky.androidide.utils.applyResponsiveAppBarInsets
122+ import com.itsaky.androidide.utils.applyImmersiveModeInsets
123+ import com.itsaky.androidide.utils.applyRootSystemInsetsAsPadding
124+ import com.itsaky.androidide.utils.applyBottomSheetAnchorForOrientation
121125import com.itsaky.androidide.utils.flashError
122126import com.itsaky.androidide.utils.flashMessage
127+ import com.itsaky.androidide.utils.getOrStoreInitialPadding
123128import com.itsaky.androidide.utils.isAtLeastR
124129import com.itsaky.androidide.utils.resolveAttr
125130import com.itsaky.androidide.viewmodel.ApkInstallationViewModel
@@ -374,7 +379,6 @@ abstract class BaseEditorActivity :
374379 private val flingVelocityThreshold by lazy { SizeUtils .dp2px(100f ) }
375380
376381 private var editorAppBarInsetTop: Int = 0
377- private var sidebarLastInsetTop: Int = 0
378382
379383 companion object {
380384 private const val TAG = " ResizePanelDebugger"
@@ -484,47 +488,22 @@ abstract class BaseEditorActivity :
484488 val imeInsets = insets.getInsets(WindowInsetsCompat .Type .ime())
485489 val systemBars = insets.getInsets(WindowInsetsCompat .Type .systemBars())
486490
487- applyStandardInsets(systemBars, insets )
491+ applyStandardInsets(systemBars)
488492
489493 applyImmersiveModeInsets(systemBars)
490494
491495 handleKeyboardInsets(imeInsets)
492496 }
493497
494- private fun applyStandardInsets (systemBars : Insets , windowInsets : WindowInsetsCompat ) {
495- val content = _binding ?.content ? : return
496- val isLandscape = resources.configuration.orientation == Configuration .ORIENTATION_LANDSCAPE
497-
498- if (isLandscape) {
499- content.editorAppBarLayout.updatePadding(top = 0 )
500- content.editorAppbarContent.updatePadding(top = systemBars.top)
501- } else {
502- content.editorAppBarLayout.updatePadding(top = systemBars.top)
503- content.editorAppbarContent.updatePadding(top = 0 )
504- }
505-
498+ private fun applyStandardInsets (systemBars : Insets ) {
506499 immersiveController?.onSystemBarInsetsChanged(systemBars.top)
507- applySidebarInsets(systemBars)
508- _binding ?.root?.applyBottomWindowInsetsPadding(windowInsets)
500+ val root = _binding ?.root ? : return
501+ val initial = root.getOrStoreInitialPadding()
502+ root.updatePadding(bottom = initial.bottom + systemBars.bottom)
509503 }
510504
511505 private fun applyImmersiveModeInsets (systemBars : Insets ) {
512- val content = _binding ?.content ? : return
513- val baseMargin = SizeUtils .dp2px(16f )
514- val isRtl = content.root.layoutDirection == View .LAYOUT_DIRECTION_RTL
515- val endInset = if (isRtl) systemBars.left else systemBars.right
516-
517- content.btnToggleTopBar.updateLayoutParams<ViewGroup .MarginLayoutParams > {
518- topMargin = baseMargin + systemBars.top
519- marginEnd = baseMargin + endInset
520- }
521-
522- content.btnToggleBottomBar.updateLayoutParams<ViewGroup .MarginLayoutParams > {
523- bottomMargin = baseMargin + systemBars.bottom
524- marginEnd = baseMargin + endInset
525- }
526-
527- content.bottomSheet.updatePadding(top = systemBars.top)
506+ _binding ?.content?.applyImmersiveModeInsets(systemBars)
528507 }
529508
530509 private fun handleKeyboardInsets (imeInsets : Insets ) {
@@ -558,13 +537,6 @@ abstract class BaseEditorActivity :
558537 editorAppBarInsetTop = insets.top
559538 }
560539
561- private fun applySidebarInsets (systemBars : Insets ) {
562- val sidebar = _binding ?.drawerSidebar ? : return
563- val baseTop = sidebar.paddingTop - sidebarLastInsetTop
564- sidebarLastInsetTop = systemBars.top
565- sidebar.updatePadding(top = baseTop + systemBars.top)
566- }
567-
568540 @Subscribe(threadMode = MAIN )
569541 open fun onInstallationResult (event : InstallationEvent .InstallationResultEvent ) {
570542 val intent = event.intent
@@ -696,14 +668,33 @@ abstract class BaseEditorActivity :
696668 override fun onConfigurationChanged (newConfig : Configuration ) {
697669 super .onConfigurationChanged(newConfig)
698670 immersiveController?.onConfigurationChanged(newConfig)
671+ window?.decorView?.let { ViewCompat .requestApplyInsets(it) }
672+ reapplySystemBarInsetsFromRoot()
673+ _binding ?.content?.applyBottomSheetAnchorForOrientation(newConfig.orientation)
699674 }
700675
676+ private fun reapplySystemBarInsetsFromRoot () {
677+ val root = _binding ?.root ? : return
678+ val rootInsets = ViewCompat .getRootWindowInsets(root)
679+ if (rootInsets == null ) {
680+ root.post { reapplySystemBarInsetsFromRoot() }
681+ return
682+ }
683+
684+ val systemBars = rootInsets.getInsets(WindowInsetsCompat .Type .systemBars())
685+ applyStandardInsets(systemBars)
686+ applyImmersiveModeInsets(systemBars)
687+ }
688+
689+
701690 private fun setupToolbar () {
702691 // Set the project name in the title TextView
703692 content.root.findViewById<TextView >(R .id.title_text)?.apply {
704693 text = editorViewModel.getProjectName()
705694 }
706695
696+ content.editorAppBarLayout.applyResponsiveAppBarInsets(content.editorAppbarContent)
697+
707698 // Set up the drawer toggle on the title toolbar (where the hamburger menu should be)
708699 content.titleToolbar.apply {
709700 val toggle =
@@ -755,7 +746,13 @@ abstract class BaseEditorActivity :
755746 val insetsTop = systemBarInsets?.top ? : 0
756747 val topInset = (insetsTop * (1f - progress)).roundToInt()
757748
758- content.editorAppbarContent.updatePadding(top = topInset)
749+ val isLandscape = resources.configuration.orientation == Configuration .ORIENTATION_LANDSCAPE
750+
751+ if (isLandscape) {
752+ content.editorAppbarContent.updatePadding(top = topInset)
753+ } else {
754+ content.editorAppBarLayout.updatePadding(top = topInset)
755+ }
759756
760757 memUsageView.chart.updateLayoutParams<ViewGroup .MarginLayoutParams > {
761758 topMargin = (insetsTop * progress).roundToInt()
@@ -1111,6 +1108,7 @@ abstract class BaseEditorActivity :
11111108 ContentTranslatingDrawerLayout .TranslationBehavior .FULL
11121109 setScrimColor(Color .TRANSPARENT )
11131110 }
1111+ drawerSidebar.applyRootSystemInsetsAsPadding(applyTop = true )
11141112 }
11151113 }
11161114
0 commit comments