diff --git a/app/src/main/java/com/itsaky/androidide/activities/editor/BaseEditorActivity.kt b/app/src/main/java/com/itsaky/androidide/activities/editor/BaseEditorActivity.kt index 4bb33dcab0..e3f00e71f6 100644 --- a/app/src/main/java/com/itsaky/androidide/activities/editor/BaseEditorActivity.kt +++ b/app/src/main/java/com/itsaky/androidide/activities/editor/BaseEditorActivity.kt @@ -87,7 +87,6 @@ import com.itsaky.androidide.databinding.LayoutDiagnosticInfoBinding import com.itsaky.androidide.events.InstallationEvent import com.itsaky.androidide.fragments.debug.DebuggerFragment import com.itsaky.androidide.fragments.output.ShareableOutputFragment -import com.itsaky.androidide.fragments.sidebar.EditorSidebarFragment import com.itsaky.androidide.fragments.sidebar.FileTreeFragment import com.itsaky.androidide.handlers.EditorActivityLifecyclerObserver import com.itsaky.androidide.handlers.LspHandler.registerLanguageServers @@ -351,6 +350,7 @@ abstract class BaseEditorActivity : private val flingVelocityThreshold by lazy { SizeUtils.dp2px(100f) } private var editorAppBarInsetTop: Int = 0 + private var sidebarLastInsetTop: Int = 0 companion object { private const val TAG = "ResizePanelDebugger" @@ -452,15 +452,32 @@ abstract class BaseEditorActivity : override fun onApplyWindowInsets(insets: WindowInsetsCompat) { super.onApplyWindowInsets(insets) - val height = contentCardRealHeight ?: return + val imeInsets = insets.getInsets(WindowInsetsCompat.Type.ime()) + val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) - _binding?.content?.bottomSheet?.setImeVisible(imeInsets.bottom > 0) - _binding?.contentCard?.updateLayoutParams { - this.height = height - imeInsets.bottom - } + _binding?.content?.editorAppBarLayout?.updatePadding(top = systemBars.top) + applySidebarInsets(systemBars) val isImeVisible = imeInsets.bottom > 0 + _binding?.content?.bottomSheet?.setImeVisible(isImeVisible) + + _binding?.contentCard?.apply { + when { + isImeVisible -> { + contentCardRealHeight?.let { baseHeight -> + updateLayoutParams { + height = (baseHeight - imeInsets.bottom).coerceAtLeast(0) + } + } + } + else -> { + updateLayoutParams { height = ViewGroup.LayoutParams.MATCH_PARENT } + post { contentCardRealHeight = measuredHeight } + } + } + } + if (this.isImeVisible != isImeVisible) { this.isImeVisible = isImeVisible onSoftInputChanged() @@ -470,16 +487,13 @@ abstract class BaseEditorActivity : override fun onApplySystemBarInsets(insets: Insets) { super.onApplySystemBarInsets(insets) editorAppBarInsetTop = insets.top - this._binding?.apply { - (supportFragmentManager.findFragmentById(R.id.drawer_sidebar) as? EditorSidebarFragment) - ?.onApplyWindowInsets(insets) + } - content.apply { - editorAppBarLayout.updatePadding( - top = insets.top, - ) - } - } + private fun applySidebarInsets(systemBars: Insets) { + val sidebar = _binding?.drawerSidebar ?: return + val baseTop = sidebar.paddingTop - sidebarLastInsetTop + sidebarLastInsetTop = systemBars.top + sidebar.updatePadding(top = baseTop + systemBars.top) } @Subscribe(threadMode = MAIN) diff --git a/app/src/main/java/com/itsaky/androidide/fragments/sidebar/EditorSidebarFragment.kt b/app/src/main/java/com/itsaky/androidide/fragments/sidebar/EditorSidebarFragment.kt index b7298fc293..42407e2b1e 100644 --- a/app/src/main/java/com/itsaky/androidide/fragments/sidebar/EditorSidebarFragment.kt +++ b/app/src/main/java/com/itsaky/androidide/fragments/sidebar/EditorSidebarFragment.kt @@ -19,13 +19,6 @@ package com.itsaky.androidide.fragments.sidebar import android.os.Bundle import android.view.View -import android.view.ViewGroup.MarginLayoutParams -import androidx.core.graphics.Insets -import androidx.core.view.marginBottom -import androidx.core.view.marginTop -import androidx.core.view.updateLayoutParams -import androidx.core.view.updateMarginsRelative -import androidx.core.view.updatePadding import com.itsaky.androidide.activities.editor.EditorHandlerActivity import com.itsaky.androidide.databinding.FragmentEditorSidebarBinding import com.itsaky.androidide.fragments.FragmentWithBinding @@ -41,26 +34,6 @@ class EditorSidebarFragment : FragmentWithBinding( FragmentEditorSidebarBinding::inflate ) { - internal fun onApplyWindowInsets(insets: Insets) { - _binding?.apply { - title.updateLayoutParams { - updateMarginsRelative( - top = title.marginTop + insets.top, - ) - } - editorSidebarFragmentContainer.updateLayoutParams { - updateMarginsRelative( - bottom = editorSidebarFragmentContainer.marginBottom + insets.bottom, - ) - } - navigation.updatePadding( - top = navigation.paddingTop + insets.top, - bottom = navigation.paddingBottom + insets.bottom, - left = navigation.paddingLeft + insets.left, - ) - } - } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) EditorSidebarActions.setup(this) @@ -83,4 +56,4 @@ class EditorSidebarFragment : FragmentWithBinding( * Get the (nullable) binding object for this fragment. */ internal fun getBinding() = _binding -} \ No newline at end of file +}