From b757a8758f39bc2c5fc1dde426c12243f6252daa Mon Sep 17 00:00:00 2001 From: Oluwadara Abijo Date: Tue, 2 Jun 2026 13:48:36 +0100 Subject: [PATCH 1/4] fix(ADFA-4051): Handle keyboard insets properly --- .../androidide/activities/editor/BaseEditorActivity.kt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) 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 3c0dd6716a..32e75c7cfd 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 @@ -517,7 +517,7 @@ abstract class BaseEditorActivity : applyImmersiveModeInsets(systemBars) - handleKeyboardInsets(imeInsets) + handleKeyboardInsets(imeInsets, systemBars) } private fun applyStandardInsets(systemBars: Insets) { @@ -530,7 +530,7 @@ abstract class BaseEditorActivity : _binding?.content?.applyImmersiveModeInsets(systemBars) } - private fun handleKeyboardInsets(imeInsets: Insets) { + private fun handleKeyboardInsets(imeInsets: Insets, systemBars: Insets) { val isImeVisible = imeInsets.bottom > 0 _binding?.content?.bottomSheet?.setImeVisible(isImeVisible) @@ -539,7 +539,8 @@ abstract class BaseEditorActivity : isImeVisible -> { contentCardRealHeight?.let { baseHeight -> updateLayoutParams { - height = (baseHeight - imeInsets.bottom).coerceAtLeast(0) + val diff = (imeInsets.bottom - systemBars.bottom).coerceAtLeast(0) + height = (baseHeight - diff).coerceAtLeast(0) } } } From 714694a9a67e4ef925c296ebfe11fb7bd67b033d Mon Sep 17 00:00:00 2001 From: Oluwadara Abijo Date: Tue, 2 Jun 2026 14:05:08 +0100 Subject: [PATCH 2/4] feat(ADFA-4051): Always show code symbols when the keyboard is open --- .../activities/editor/BaseEditorActivity.kt | 18 ++++++++++++++---- .../activities/editor/FullscreenManager.kt | 10 ++++++++-- .../itsaky/androidide/ui/EditorBottomSheet.kt | 2 +- 3 files changed, 23 insertions(+), 7 deletions(-) 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 32e75c7cfd..5205da894e 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 @@ -75,6 +75,8 @@ import com.github.mikephil.charting.data.LineData import com.github.mikephil.charting.data.LineDataSet import com.github.mikephil.charting.formatter.IAxisValueFormatter import com.google.android.material.bottomsheet.BottomSheetBehavior +import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_COLLAPSED +import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_HIDDEN import com.google.android.material.tabs.TabLayout import com.google.android.material.tabs.TabLayout.Tab import com.itsaky.androidide.FeedbackButtonManager @@ -234,8 +236,8 @@ abstract class BaseEditorActivity : binding.editorDrawerLayout.closeDrawer(GravityCompat.START) } - bottomSheetViewModel.sheetBehaviorState != BottomSheetBehavior.STATE_COLLAPSED -> { - bottomSheetViewModel.setSheetState(sheetState = BottomSheetBehavior.STATE_COLLAPSED) + bottomSheetViewModel.sheetBehaviorState != STATE_COLLAPSED -> { + bottomSheetViewModel.setSheetState(sheetState = STATE_COLLAPSED) } binding.swipeReveal.isOpen -> { @@ -556,6 +558,14 @@ abstract class BaseEditorActivity : if (this.isImeVisible != isImeVisible) { this.isImeVisible = isImeVisible + + if (editorViewModel.isFullscreen) { + // Hide the bottom sheet if in fullscreen mode, but only collapse it if keyboard + // is open so the symbol input view is visible + val targetState = if (isImeVisible) STATE_COLLAPSED else STATE_HIDDEN + editorBottomSheet?.state = targetState + } + onSoftInputChanged() } } @@ -1054,7 +1064,7 @@ abstract class BaseEditorActivity : } open fun hideBottomSheet() { - bottomSheetViewModel.setSheetState(sheetState = BottomSheetBehavior.STATE_COLLAPSED) + bottomSheetViewModel.setSheetState(sheetState = STATE_COLLAPSED) } private fun updateBottomSheetState(state: BottomSheetViewModel.SheetState = BottomSheetViewModel.SheetState.EMPTY) { @@ -1333,7 +1343,7 @@ abstract class BaseEditorActivity : ) { bottomSheetViewModel.setSheetState(BottomSheetBehavior.STATE_EXPANDED) ThreadUtils.runOnUiThreadDelayed({ - bottomSheetViewModel.setSheetState(BottomSheetBehavior.STATE_COLLAPSED) + bottomSheetViewModel.setSheetState(STATE_COLLAPSED) app.prefManager.putBoolean(KEY_BOTTOM_SHEET_SHOWN, true) }, 1500) } diff --git a/app/src/main/java/com/itsaky/androidide/activities/editor/FullscreenManager.kt b/app/src/main/java/com/itsaky/androidide/activities/editor/FullscreenManager.kt index 763c3710dc..bb004da9bd 100644 --- a/app/src/main/java/com/itsaky/androidide/activities/editor/FullscreenManager.kt +++ b/app/src/main/java/com/itsaky/androidide/activities/editor/FullscreenManager.kt @@ -1,8 +1,10 @@ package com.itsaky.androidide.activities.editor +import android.app.Activity import android.view.View import android.view.ViewGroup import androidx.core.view.updateLayoutParams +import com.blankj.utilcode.util.KeyboardUtils import com.google.android.material.appbar.AppBarLayout import com.google.android.material.bottomsheet.BottomSheetBehavior import com.itsaky.androidide.R @@ -225,8 +227,12 @@ class FullscreenManager( appBarContent.alpha = 0f bottomSheetBehavior.isHideable = true - if (bottomSheetBehavior.state != BottomSheetBehavior.STATE_HIDDEN) { - bottomSheetBehavior.state = BottomSheetBehavior.STATE_HIDDEN + + val isKeyboardOpen = KeyboardUtils.isSoftInputVisible(contentBinding.root.context as Activity) + val targetState = if (isKeyboardOpen) BottomSheetBehavior.STATE_COLLAPSED else BottomSheetBehavior.STATE_HIDDEN + + if (bottomSheetBehavior.state != targetState) { + bottomSheetBehavior.state = targetState } editorContainer.updateLayoutParams { diff --git a/app/src/main/java/com/itsaky/androidide/ui/EditorBottomSheet.kt b/app/src/main/java/com/itsaky/androidide/ui/EditorBottomSheet.kt index c232927406..3cba9854ee 100644 --- a/app/src/main/java/com/itsaky/androidide/ui/EditorBottomSheet.kt +++ b/app/src/main/java/com/itsaky/androidide/ui/EditorBottomSheet.kt @@ -354,7 +354,7 @@ constructor( } private fun applyPeekHeight() { - behavior.peekHeight = if (isImeVisible || isSearchModeActive) 0 else collapsedHeight.toInt() + behavior.peekHeight = if (isSearchModeActive) 0 else collapsedHeight.toInt() } fun setOffsetAnchor(view: View) { From 69b436e4fcc35b4adf3fec9b634fbce97b1f5ca9 Mon Sep 17 00:00:00 2001 From: Oluwadara Abijo Date: Wed, 3 Jun 2026 11:00:00 +0100 Subject: [PATCH 3/4] fix(ADFA-4051): Remove unsafe cast --- .../androidide/activities/editor/FullscreenManager.kt | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/itsaky/androidide/activities/editor/FullscreenManager.kt b/app/src/main/java/com/itsaky/androidide/activities/editor/FullscreenManager.kt index bb004da9bd..874e90358f 100644 --- a/app/src/main/java/com/itsaky/androidide/activities/editor/FullscreenManager.kt +++ b/app/src/main/java/com/itsaky/androidide/activities/editor/FullscreenManager.kt @@ -1,6 +1,7 @@ package com.itsaky.androidide.activities.editor import android.app.Activity +import android.content.ContextWrapper import android.view.View import android.view.ViewGroup import androidx.core.view.updateLayoutParams @@ -228,9 +229,14 @@ class FullscreenManager( bottomSheetBehavior.isHideable = true - val isKeyboardOpen = KeyboardUtils.isSoftInputVisible(contentBinding.root.context as Activity) + val activity = contentBinding.root.context.let { context -> + generateSequence(context) { (it as? ContextWrapper)?.baseContext } + .filterIsInstance() + .firstOrNull() + } + val isKeyboardOpen = activity?.let { KeyboardUtils.isSoftInputVisible(it) } ?: false val targetState = if (isKeyboardOpen) BottomSheetBehavior.STATE_COLLAPSED else BottomSheetBehavior.STATE_HIDDEN - + if (bottomSheetBehavior.state != targetState) { bottomSheetBehavior.state = targetState } From 4075965acad432bffcd96849b649bbc77d5fe524 Mon Sep 17 00:00:00 2001 From: Oluwadara Abijo Date: Wed, 3 Jun 2026 11:26:15 +0100 Subject: [PATCH 4/4] fix(ADFA-4051: Ensure consistent conversion --- app/src/main/java/com/itsaky/androidide/ui/EditorBottomSheet.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/itsaky/androidide/ui/EditorBottomSheet.kt b/app/src/main/java/com/itsaky/androidide/ui/EditorBottomSheet.kt index 3cba9854ee..cb75b20da4 100644 --- a/app/src/main/java/com/itsaky/androidide/ui/EditorBottomSheet.kt +++ b/app/src/main/java/com/itsaky/androidide/ui/EditorBottomSheet.kt @@ -354,7 +354,7 @@ constructor( } private fun applyPeekHeight() { - behavior.peekHeight = if (isSearchModeActive) 0 else collapsedHeight.toInt() + behavior.peekHeight = if (isSearchModeActive) 0 else collapsedHeight.roundToInt() } fun setOffsetAnchor(view: View) {