From 17599e04daf42d693d42a033b6059f97daa6b4e8 Mon Sep 17 00:00:00 2001 From: Hal Eisen Date: Fri, 19 Dec 2025 18:09:47 -0800 Subject: [PATCH 1/8] Expand the ribbon slider to a new position and make it as wide as the app --- .../activities/editor/BaseEditorActivity.kt | 73 +++++++++++------ .../androidide/ui/CompactMaterialToolbar.kt | 78 ++++++++++++++++++ app/src/main/res/layout/content_editor.xml | 32 +++++++- .../com/itsaky/androidide/ui/CustomToolbar.kt | 35 ++++---- common/src/main/res/layout/custom_toolbar.xml | 80 +++++-------------- 5 files changed, 194 insertions(+), 104 deletions(-) create mode 100644 app/src/main/java/com/itsaky/androidide/ui/CompactMaterialToolbar.kt 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 0913b2998a..62d77a1c85 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 @@ -477,6 +477,9 @@ abstract class BaseEditorActivity : top = insets.top, ) customToolbar.setContentInsetsRelative(0, 0) + customToolbar.setPadding(0, 0, 0, 0) + titleToolbar.setContentInsetsRelative(0, 0) + titleToolbar.setPadding(0, 0, 0, 0) } } } @@ -595,13 +598,32 @@ abstract class BaseEditorActivity : } private fun setupToolbar() { - content.customToolbar.apply { - setTitleText(editorViewModel.getProjectName()) - + // Set the project name in the title TextView + content.root.findViewById(R.id.title_text)?.apply { + text = editorViewModel.getProjectName() + // Remove any internal padding that might come from the style + setPadding(paddingLeft, 0, paddingRight, 0) + } + + // Set up the drawer toggle on the title toolbar (where the hamburger menu should be) + content.titleToolbar.apply { + setContentInsetsRelative(0, 0) + setPadding(0, 0, 0, 0) + // Also remove padding from all child views + post { + for (i in 0 until childCount) { + val child = getChildAt(i) + if (child is android.widget.TextView) { + // Keep only the top padding we set in XML (8dp) + // Remove any other padding that might be added + } + } + } + val toggle = object : ActionBarDrawerToggle( this@BaseEditorActivity, binding.editorDrawerLayout, - content.customToolbar, + this, string.app_name, string.app_name ) { @@ -617,11 +639,27 @@ abstract class BaseEditorActivity : drawerToggle = toggle binding.editorDrawerLayout.addDrawerListener(toggle) toggle.syncState() - setOnNavIconLongClickListener { - showTooltip(tag = TooltipTag.EDITOR_TOOLBAR_NAV_ICON) + + // Set up long click listener for tooltip on the navigation icon + post { + var navButton: android.widget.ImageButton? = null + for (i in 0 until childCount) { + val child = getChildAt(i) + if (child is android.widget.ImageButton && child.contentDescription == navigationContentDescription) { + navButton = child + break + } + } + navButton?.apply { + // Remove top padding to align with TextView + setPadding(paddingLeft, 0, paddingRight, paddingBottom) + setOnLongClickListener { + showTooltip(tag = TooltipTag.EDITOR_TOOLBAR_NAV_ICON) + true + } + } } } - } private fun onSwipeRevealDragProgress(progress: Float) { @@ -951,25 +989,8 @@ abstract class BaseEditorActivity : } private fun setupDrawers() { - val toggle = object : ActionBarDrawerToggle( - this, - binding.editorDrawerLayout, - content.customToolbar, - string.app_name, - string.app_name - ) { - override fun onDrawerOpened(drawerView: View) { - super.onDrawerOpened(drawerView) - // Hide the keyboard when the drawer opens. - closeKeyboard() - // Dismiss autocomplete and other editor windows - provideCurrentEditor()?.editor?.ensureWindowsDismissed() - } - } - - - binding.editorDrawerLayout.addDrawerListener(toggle) - toggle.syncState() + // Note: Drawer toggle is now set up in setupToolbar() on the title toolbar + // This method only sets up the drawer layout behavior binding.apply { editorDrawerLayout.apply { childId = contentCard.id diff --git a/app/src/main/java/com/itsaky/androidide/ui/CompactMaterialToolbar.kt b/app/src/main/java/com/itsaky/androidide/ui/CompactMaterialToolbar.kt new file mode 100644 index 0000000000..35f65d3c54 --- /dev/null +++ b/app/src/main/java/com/itsaky/androidide/ui/CompactMaterialToolbar.kt @@ -0,0 +1,78 @@ +package com.itsaky.androidide.ui + +import android.content.Context +import android.util.AttributeSet +import android.view.View +import android.view.View.MeasureSpec +import android.widget.TextView +import com.google.android.material.appbar.MaterialToolbar + +/** + * A MaterialToolbar that removes all internal padding to allow precise control + * of spacing. This is used for the title toolbar to eliminate wasted vertical space. + */ +class CompactMaterialToolbar @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : MaterialToolbar(context, attrs, defStyleAttr) { + + init { + // Remove all padding + setPadding(0, 0, 0, 0) + setContentInsetsRelative(0, 0) + } + + override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { + // First, measure children to get their desired height + super.onMeasure(widthMeasureSpec, heightMeasureSpec) + + // Find the TextView child (title_text) + var textViewHeight = 0 + for (i in 0 until childCount) { + val child = getChildAt(i) + if (child is TextView) { + textViewHeight = child.measuredHeight + break + } + } + + // If we found a TextView, force the toolbar height to match it exactly + if (textViewHeight > 0) { + val width = MeasureSpec.getSize(widthMeasureSpec) + setMeasuredDimension(width, textViewHeight) + } + } + + override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) { + super.onLayout(changed, l, t, r, b) + // Ensure padding is still 0 after layout + setPadding(0, 0, 0, 0) + setContentInsetsRelative(0, 0) + + // Find the TextView and navigation icon, then align them at the top + var textView: TextView? = null + var navButton: View? = null + + for (i in 0 until childCount) { + val child = getChildAt(i) + when { + child is TextView -> textView = child + child is android.widget.ImageButton && child.contentDescription == navigationContentDescription -> navButton = child + } + } + + // If we have both, align the navigation icon with the TextView at the top + if (textView != null && navButton != null) { + val textViewTop = textView.top + val navButtonHeight = navButton.height + navButton.layout( + navButton.left, + textViewTop, + navButton.right, + textViewTop + navButtonHeight + ) + } + } +} + diff --git a/app/src/main/res/layout/content_editor.xml b/app/src/main/res/layout/content_editor.xml index 96cb2ad14b..be243b572c 100644 --- a/app/src/main/res/layout/content_editor.xml +++ b/app/src/main/res/layout/content_editor.xml @@ -31,10 +31,40 @@ android:fitsSystemWindows="false" app:layout_behavior="com.google.android.material.appbar.AppBarLayout$Behavior"> + + + + + + + android:layout_height="wrap_content" + android:layout_marginTop="4dp" + android:layout_marginBottom="0dp" + android:minHeight="0dp" + android:paddingTop="0dp" + android:paddingBottom="0dp" /> + android:layout_height="wrap_content" + android:minHeight="0dp" + android:paddingTop="0dp" + android:paddingBottom="0dp"> - + android:layout_height="match_parent" + android:scrollbars="horizontal" + android:fillViewport="true" + android:paddingTop="0dp" + android:paddingBottom="0dp"> - - - - - - - - - - - + android:gravity="center_vertical" + android:orientation="horizontal" + android:paddingStart="8dp" + android:paddingEnd="8dp" + android:paddingTop="0dp" + android:paddingBottom="0dp" + android:minHeight="0dp" /> + From 64fb225a2fc54327c613016eeacbaba2fc2a95c6 Mon Sep 17 00:00:00 2001 From: Hal Eisen Date: Mon, 22 Dec 2025 12:09:51 -0800 Subject: [PATCH 2/8] Remove spurious post child loop --- .../androidide/activities/editor/BaseEditorActivity.kt | 10 ---------- 1 file changed, 10 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 62d77a1c85..2d82c78c95 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 @@ -609,16 +609,6 @@ abstract class BaseEditorActivity : content.titleToolbar.apply { setContentInsetsRelative(0, 0) setPadding(0, 0, 0, 0) - // Also remove padding from all child views - post { - for (i in 0 until childCount) { - val child = getChildAt(i) - if (child is android.widget.TextView) { - // Keep only the top padding we set in XML (8dp) - // Remove any other padding that might be added - } - } - } val toggle = object : ActionBarDrawerToggle( this@BaseEditorActivity, From 2b02416bf139f6d47f167d570db3e110a7bbca10 Mon Sep 17 00:00:00 2001 From: Hal Eisen Date: Mon, 22 Dec 2025 12:23:11 -0800 Subject: [PATCH 3/8] Fixed problem where build/install button was being treated like the file tree open hamburger menu --- .../androidide/ui/CompactMaterialToolbar.kt | 26 +++---------------- .../com/itsaky/androidide/ui/CustomToolbar.kt | 23 +++++++++++++--- 2 files changed, 22 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/com/itsaky/androidide/ui/CompactMaterialToolbar.kt b/app/src/main/java/com/itsaky/androidide/ui/CompactMaterialToolbar.kt index 35f65d3c54..033f880c8e 100644 --- a/app/src/main/java/com/itsaky/androidide/ui/CompactMaterialToolbar.kt +++ b/app/src/main/java/com/itsaky/androidide/ui/CompactMaterialToolbar.kt @@ -50,29 +50,9 @@ class CompactMaterialToolbar @JvmOverloads constructor( setPadding(0, 0, 0, 0) setContentInsetsRelative(0, 0) - // Find the TextView and navigation icon, then align them at the top - var textView: TextView? = null - var navButton: View? = null - - for (i in 0 until childCount) { - val child = getChildAt(i) - when { - child is TextView -> textView = child - child is android.widget.ImageButton && child.contentDescription == navigationContentDescription -> navButton = child - } - } - - // If we have both, align the navigation icon with the TextView at the top - if (textView != null && navButton != null) { - val textViewTop = textView.top - val navButtonHeight = navButton.height - navButton.layout( - navButton.left, - textViewTop, - navButton.right, - textViewTop + navButtonHeight - ) - } + // Don't manually reposition the navigation button here as it can interfere + // with touch handling. The alignment is handled in BaseEditorActivity by + // setting padding on the navigation button. } } diff --git a/common/src/main/java/com/itsaky/androidide/ui/CustomToolbar.kt b/common/src/main/java/com/itsaky/androidide/ui/CustomToolbar.kt index 93203ddb92..93054b13da 100644 --- a/common/src/main/java/com/itsaky/androidide/ui/CustomToolbar.kt +++ b/common/src/main/java/com/itsaky/androidide/ui/CustomToolbar.kt @@ -54,21 +54,36 @@ class CustomToolbar @JvmOverloads constructor( tooltipText = hint setImageDrawable(icon) addCircleRipple() + // Remove any default padding from ImageButton + setPadding(0, 0, 0, 0) // Set layout params for width and height layoutParams = LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT ).apply { - // Add margin to the right for spacing between items except for last item - if (shouldAddMargin) { - marginEnd = resources.getDimensionPixelSize(R.dimen.toolbar_item_spacing) - } + // Apply uniform spacing to all buttons for consistent appearance + // Use a smaller spacing value for tighter button layout + marginEnd = resources.getDimensionPixelSize(R.dimen.toolbar_item_spacing) / 2 } setOnClickListener { onClick() } setOnLongClickListener { onLongClick() true } + // Prevent DrawerLayout from intercepting touch events on this button + setOnTouchListener { view, event -> + when (event.action) { + android.view.MotionEvent.ACTION_DOWN -> { + // Request that parent views (like DrawerLayout) don't intercept touch events + parent?.requestDisallowInterceptTouchEvent(true) + } + android.view.MotionEvent.ACTION_UP, android.view.MotionEvent.ACTION_CANCEL -> { + // Allow parent to intercept again after the touch is done + parent?.requestDisallowInterceptTouchEvent(false) + } + } + false // Don't consume the event, let the click/long-click listeners handle it + } } binding.menuContainer.addView(item) } From 3205b8648b6bb021594f082f12eab3d03f46682a Mon Sep 17 00:00:00 2001 From: Hal Eisen Date: Mon, 22 Dec 2025 13:38:42 -0800 Subject: [PATCH 4/8] Remove spurious TextView interaction --- .../androidide/ui/CompactMaterialToolbar.kt | 25 +------------------ 1 file changed, 1 insertion(+), 24 deletions(-) diff --git a/app/src/main/java/com/itsaky/androidide/ui/CompactMaterialToolbar.kt b/app/src/main/java/com/itsaky/androidide/ui/CompactMaterialToolbar.kt index 033f880c8e..1742436eb3 100644 --- a/app/src/main/java/com/itsaky/androidide/ui/CompactMaterialToolbar.kt +++ b/app/src/main/java/com/itsaky/androidide/ui/CompactMaterialToolbar.kt @@ -2,9 +2,7 @@ package com.itsaky.androidide.ui import android.content.Context import android.util.AttributeSet -import android.view.View import android.view.View.MeasureSpec -import android.widget.TextView import com.google.android.material.appbar.MaterialToolbar /** @@ -24,24 +22,8 @@ class CompactMaterialToolbar @JvmOverloads constructor( } override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { - // First, measure children to get their desired height + // Let the toolbar size itself naturally based on its children super.onMeasure(widthMeasureSpec, heightMeasureSpec) - - // Find the TextView child (title_text) - var textViewHeight = 0 - for (i in 0 until childCount) { - val child = getChildAt(i) - if (child is TextView) { - textViewHeight = child.measuredHeight - break - } - } - - // If we found a TextView, force the toolbar height to match it exactly - if (textViewHeight > 0) { - val width = MeasureSpec.getSize(widthMeasureSpec) - setMeasuredDimension(width, textViewHeight) - } } override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) { @@ -49,10 +31,5 @@ class CompactMaterialToolbar @JvmOverloads constructor( // Ensure padding is still 0 after layout setPadding(0, 0, 0, 0) setContentInsetsRelative(0, 0) - - // Don't manually reposition the navigation button here as it can interfere - // with touch handling. The alignment is handled in BaseEditorActivity by - // setting padding on the navigation button. } } - From e1695ed014a89534c0b0c6ddfea5ea2e61fc43b4 Mon Sep 17 00:00:00 2001 From: Hal Eisen Date: Mon, 29 Dec 2025 19:15:40 -0800 Subject: [PATCH 5/8] Apply John's patch; rename CustomToolbar to ProjectActionsToolbar --- .gitignore | 3 ++- .../activities/editor/BaseEditorActivity.kt | 9 ++----- .../editor/EditorHandlerActivity.kt | 6 ++--- .../editor/ProjectHandlerActivity.kt | 2 +- .../androidide/ui/CompactMaterialToolbar.kt | 6 ----- app/src/main/res/layout/activity_editor.xml | 2 +- app/src/main/res/layout/content_editor.xml | 5 ++-- ...tomToolbar.kt => ProjectActionsToolbar.kt} | 27 ++++++------------- ...oolbar.xml => project_actions_toolbar.xml} | 2 ++ 9 files changed, 22 insertions(+), 40 deletions(-) rename common/src/main/java/com/itsaky/androidide/ui/{CustomToolbar.kt => ProjectActionsToolbar.kt} (79%) rename common/src/main/res/layout/{custom_toolbar.xml => project_actions_toolbar.xml} (97%) diff --git a/.gitignore b/.gitignore index 2dcf1a8ec5..5daf39bb8f 100755 --- a/.gitignore +++ b/.gitignore @@ -147,6 +147,7 @@ gradle-plugin/bin/ logger/bin/ lookup/bin/ shared/bin/ +llama-api/bin/ subprojects/**/bin/ testing/**/bin/ @@ -154,4 +155,4 @@ testing/**/bin/ .checksum/ # assets files -assets/ \ No newline at end of file +assets/ 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 2d82c78c95..5cf533ef18 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 @@ -476,10 +476,7 @@ abstract class BaseEditorActivity : editorAppBarLayout.updatePadding( top = insets.top, ) - customToolbar.setContentInsetsRelative(0, 0) - customToolbar.setPadding(0, 0, 0, 0) - titleToolbar.setContentInsetsRelative(0, 0) - titleToolbar.setPadding(0, 0, 0, 0) + projectActionsToolbar.setContentInsetsRelative(0, 0) } } } @@ -601,8 +598,6 @@ abstract class BaseEditorActivity : // Set the project name in the title TextView content.root.findViewById(R.id.title_text)?.apply { text = editorViewModel.getProjectName() - // Remove any internal padding that might come from the style - setPadding(paddingLeft, 0, paddingRight, 0) } // Set up the drawer toggle on the title toolbar (where the hamburger menu should be) @@ -1289,7 +1284,7 @@ abstract class BaseEditorActivity : private fun showTooltip(tag: String) { TooltipManager.showIdeCategoryTooltip( context = this, - anchorView = content.customToolbar, + anchorView = content.projectActionsToolbar, tag = tag, ) } diff --git a/app/src/main/java/com/itsaky/androidide/activities/editor/EditorHandlerActivity.kt b/app/src/main/java/com/itsaky/androidide/activities/editor/EditorHandlerActivity.kt index f92cc51179..4686d144fd 100644 --- a/app/src/main/java/com/itsaky/androidide/activities/editor/EditorHandlerActivity.kt +++ b/app/src/main/java/com/itsaky/androidide/activities/editor/EditorHandlerActivity.kt @@ -305,7 +305,7 @@ open class EditorHandlerActivity : fun prepareOptionsMenu() { val registry = getInstance() as DefaultActionsRegistry val data = createToolbarActionData() - content.customToolbar.clearMenu() + content.projectActionsToolbar.clearMenu() val actions = getInstance().getActions(EDITOR_TOOLBAR) actions.onEachIndexed { index, entry -> @@ -319,14 +319,14 @@ open class EditorHandlerActivity : alpha = if (action.enabled) 255 else 76 } - content.customToolbar.addMenuItem( + content.projectActionsToolbar.addMenuItem( icon = action.icon, hint = action.label, onClick = { if (action.enabled) registry.executeAction(action, data) }, onLongClick = { TooltipManager.showIdeCategoryTooltip( context = this, - anchorView = content.customToolbar, + anchorView = content.projectActionsToolbar, tag = action.retrieveTooltipTag(false), ) }, diff --git a/app/src/main/java/com/itsaky/androidide/activities/editor/ProjectHandlerActivity.kt b/app/src/main/java/com/itsaky/androidide/activities/editor/ProjectHandlerActivity.kt index 358fd2451a..02faaa901c 100644 --- a/app/src/main/java/com/itsaky/androidide/activities/editor/ProjectHandlerActivity.kt +++ b/app/src/main/java/com/itsaky/androidide/activities/editor/ProjectHandlerActivity.kt @@ -120,7 +120,7 @@ abstract class ProjectHandlerActivity : BaseEditorActivity() { val registry = getInstance() as DefaultActionsRegistry return FindActionDialog( - anchor = content.customToolbar.findViewById(R.id.menu_container), + anchor = content.projectActionsToolbar.findViewById(R.id.menu_container), context = this, actionData = actionData, shouldShowFindInFileAction = shouldHideFindInFileAction, diff --git a/app/src/main/java/com/itsaky/androidide/ui/CompactMaterialToolbar.kt b/app/src/main/java/com/itsaky/androidide/ui/CompactMaterialToolbar.kt index 1742436eb3..166eba83be 100644 --- a/app/src/main/java/com/itsaky/androidide/ui/CompactMaterialToolbar.kt +++ b/app/src/main/java/com/itsaky/androidide/ui/CompactMaterialToolbar.kt @@ -15,12 +15,6 @@ class CompactMaterialToolbar @JvmOverloads constructor( defStyleAttr: Int = 0 ) : MaterialToolbar(context, attrs, defStyleAttr) { - init { - // Remove all padding - setPadding(0, 0, 0, 0) - setContentInsetsRelative(0, 0) - } - override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { // Let the toolbar size itself naturally based on its children super.onMeasure(widthMeasureSpec, heightMeasureSpec) diff --git a/app/src/main/res/layout/activity_editor.xml b/app/src/main/res/layout/activity_editor.xml index 4de51ad7ab..b4249318ae 100755 --- a/app/src/main/res/layout/activity_editor.xml +++ b/app/src/main/res/layout/activity_editor.xml @@ -26,7 +26,7 @@ android:id="@+id/swipe_reveal" android:layout_width="match_parent" android:layout_height="match_parent" - app:dragHandle="@id/custom_toolbar"> + app:dragHandle="@id/project_actions_toolbar"> - diff --git a/common/src/main/java/com/itsaky/androidide/ui/CustomToolbar.kt b/common/src/main/java/com/itsaky/androidide/ui/ProjectActionsToolbar.kt similarity index 79% rename from common/src/main/java/com/itsaky/androidide/ui/CustomToolbar.kt rename to common/src/main/java/com/itsaky/androidide/ui/ProjectActionsToolbar.kt index 93054b13da..70bac35f66 100644 --- a/common/src/main/java/com/itsaky/androidide/ui/CustomToolbar.kt +++ b/common/src/main/java/com/itsaky/androidide/ui/ProjectActionsToolbar.kt @@ -10,38 +10,26 @@ import android.widget.ImageButton import android.widget.LinearLayout import com.google.android.material.appbar.MaterialToolbar import com.itsaky.androidide.common.R -import com.itsaky.androidide.common.databinding.CustomToolbarBinding +import com.itsaky.androidide.common.databinding.ProjectActionsToolbarBinding -class CustomToolbar @JvmOverloads constructor( +class ProjectActionsToolbar @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, var onNavIconLongClick: (() -> Unit)? = null ) : MaterialToolbar(context, attrs) { init { - // Navigation icon is no longer used in CustomToolbar + // Navigation icon is no longer used in ProjectActionsToolbar // It's now handled by the title toolbar // Remove any navigation icon that might be set navigationIcon = null } - private val binding: CustomToolbarBinding = - CustomToolbarBinding.inflate(LayoutInflater.from(context), this, true) - - init { - // Remove all padding from the root toolbar - setPadding(0, 0, 0, 0) - // Remove all padding from the menu container - binding.menuContainer.setPadding(0, 0, 0, 0) - // Also set padding on the HorizontalScrollView - binding.horizontalScrollView.setPadding(0, 0, 0, 0) - } + private val binding: ProjectActionsToolbarBinding = + ProjectActionsToolbarBinding.inflate(LayoutInflater.from(context), this, true) @Deprecated("Title is now displayed separately. Use the title_text TextView in content_editor.xml instead.") - fun setTitleText(title: String) { - // Title is now handled separately in content_editor.xml - // This method is kept for backward compatibility but does nothing - } + fun setTitleText(title: String) = Unit fun addMenuItem( icon: Drawable?, @@ -104,4 +92,5 @@ class CustomToolbar @JvmOverloads constructor( fun setOnNavIconLongClickListener(listener: (() -> Unit)?) { this.onNavIconLongClick = listener } -} \ No newline at end of file +} + diff --git a/common/src/main/res/layout/custom_toolbar.xml b/common/src/main/res/layout/project_actions_toolbar.xml similarity index 97% rename from common/src/main/res/layout/custom_toolbar.xml rename to common/src/main/res/layout/project_actions_toolbar.xml index 02fa3aea9e..0088cf3d07 100644 --- a/common/src/main/res/layout/custom_toolbar.xml +++ b/common/src/main/res/layout/project_actions_toolbar.xml @@ -18,6 +18,7 @@ android:scrollbars="horizontal" android:fillViewport="true" android:paddingTop="0dp" + android:paddingHorizontal="10dp" android:paddingBottom="0dp"> + From 3a76cd00c3cd358e8f8c4aa4b259af3a9b12c96c Mon Sep 17 00:00:00 2001 From: Hal Eisen Date: Tue, 6 Jan 2026 10:01:10 -0800 Subject: [PATCH 6/8] Remove unneeded code --- .../androidide/activities/editor/BaseEditorActivity.kt | 1 - .../com/itsaky/androidide/ui/CompactMaterialToolbar.kt | 7 ------- .../java/com/itsaky/androidide/ui/ProjectActionsToolbar.kt | 2 -- 3 files changed, 10 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 5cf533ef18..60ae9f6707 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 @@ -603,7 +603,6 @@ abstract class BaseEditorActivity : // Set up the drawer toggle on the title toolbar (where the hamburger menu should be) content.titleToolbar.apply { setContentInsetsRelative(0, 0) - setPadding(0, 0, 0, 0) val toggle = object : ActionBarDrawerToggle( this@BaseEditorActivity, diff --git a/app/src/main/java/com/itsaky/androidide/ui/CompactMaterialToolbar.kt b/app/src/main/java/com/itsaky/androidide/ui/CompactMaterialToolbar.kt index 166eba83be..1627ac1293 100644 --- a/app/src/main/java/com/itsaky/androidide/ui/CompactMaterialToolbar.kt +++ b/app/src/main/java/com/itsaky/androidide/ui/CompactMaterialToolbar.kt @@ -19,11 +19,4 @@ class CompactMaterialToolbar @JvmOverloads constructor( // Let the toolbar size itself naturally based on its children super.onMeasure(widthMeasureSpec, heightMeasureSpec) } - - override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) { - super.onLayout(changed, l, t, r, b) - // Ensure padding is still 0 after layout - setPadding(0, 0, 0, 0) - setContentInsetsRelative(0, 0) - } } diff --git a/common/src/main/java/com/itsaky/androidide/ui/ProjectActionsToolbar.kt b/common/src/main/java/com/itsaky/androidide/ui/ProjectActionsToolbar.kt index 70bac35f66..45379f2729 100644 --- a/common/src/main/java/com/itsaky/androidide/ui/ProjectActionsToolbar.kt +++ b/common/src/main/java/com/itsaky/androidide/ui/ProjectActionsToolbar.kt @@ -42,8 +42,6 @@ class ProjectActionsToolbar @JvmOverloads constructor( tooltipText = hint setImageDrawable(icon) addCircleRipple() - // Remove any default padding from ImageButton - setPadding(0, 0, 0, 0) // Set layout params for width and height layoutParams = LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, From 0184354b5653c044720f6dc971b47d8547d28552 Mon Sep 17 00:00:00 2001 From: Hal Eisen Date: Tue, 6 Jan 2026 10:24:32 -0800 Subject: [PATCH 7/8] Remove CompactMaterialToolbar --- .../androidide/ui/CompactMaterialToolbar.kt | 22 ------------------- app/src/main/res/layout/content_editor.xml | 4 ++-- 2 files changed, 2 insertions(+), 24 deletions(-) delete mode 100644 app/src/main/java/com/itsaky/androidide/ui/CompactMaterialToolbar.kt diff --git a/app/src/main/java/com/itsaky/androidide/ui/CompactMaterialToolbar.kt b/app/src/main/java/com/itsaky/androidide/ui/CompactMaterialToolbar.kt deleted file mode 100644 index 1627ac1293..0000000000 --- a/app/src/main/java/com/itsaky/androidide/ui/CompactMaterialToolbar.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.itsaky.androidide.ui - -import android.content.Context -import android.util.AttributeSet -import android.view.View.MeasureSpec -import com.google.android.material.appbar.MaterialToolbar - -/** - * A MaterialToolbar that removes all internal padding to allow precise control - * of spacing. This is used for the title toolbar to eliminate wasted vertical space. - */ -class CompactMaterialToolbar @JvmOverloads constructor( - context: Context, - attrs: AttributeSet? = null, - defStyleAttr: Int = 0 -) : MaterialToolbar(context, attrs, defStyleAttr) { - - override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { - // Let the toolbar size itself naturally based on its children - super.onMeasure(widthMeasureSpec, heightMeasureSpec) - } -} diff --git a/app/src/main/res/layout/content_editor.xml b/app/src/main/res/layout/content_editor.xml index 543012f691..02124f7d02 100644 --- a/app/src/main/res/layout/content_editor.xml +++ b/app/src/main/res/layout/content_editor.xml @@ -31,7 +31,7 @@ android:fitsSystemWindows="false" app:layout_behavior="com.google.android.material.appbar.AppBarLayout$Behavior"> - - + Date: Tue, 6 Jan 2026 10:29:20 -0800 Subject: [PATCH 8/8] Removed redundant setContentInsetsRelative(0,0) calls --- .../itsaky/androidide/activities/editor/BaseEditorActivity.kt | 3 --- 1 file changed, 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 60ae9f6707..c754e798da 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 @@ -476,7 +476,6 @@ abstract class BaseEditorActivity : editorAppBarLayout.updatePadding( top = insets.top, ) - projectActionsToolbar.setContentInsetsRelative(0, 0) } } } @@ -602,8 +601,6 @@ abstract class BaseEditorActivity : // Set up the drawer toggle on the title toolbar (where the hamburger menu should be) content.titleToolbar.apply { - setContentInsetsRelative(0, 0) - val toggle = object : ActionBarDrawerToggle( this@BaseEditorActivity, binding.editorDrawerLayout,