Skip to content

Commit 849cbae

Browse files
committed
fix(editor): remove persistent space obscuring Find in File dialog
Adjust action container margins dynamically based on IME visibility to save screen real estate.
1 parent 2c9224e commit 849cbae

3 files changed

Lines changed: 69 additions & 66 deletions

File tree

app/src/main/res/layout/content_editor.xml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,7 @@
108108
<ViewFlipper
109109
android:id="@+id/editor_container"
110110
android:layout_width="match_parent"
111-
android:layout_height="match_parent"
112-
android:layout_marginBottom="@dimen/editor_sheet_collapsed_height" />
111+
android:layout_height="match_parent" />
113112

114113
<androidx.constraintlayout.widget.ConstraintLayout
115114
android:id="@+id/no_editor_layout"

editor/src/main/java/com/itsaky/androidide/editor/ui/EditorSearchLayout.kt

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import android.widget.PopupMenu
3131
import android.widget.PopupWindow
3232
import androidx.core.view.ViewCompat
3333
import androidx.core.view.WindowInsetsCompat
34+
import androidx.core.view.updateLayoutParams
3435
import com.itsaky.androidide.editor.databinding.LayoutFindInFileBinding
3536
import com.itsaky.androidide.editor.ui.ReplaceAction.doReplace
3637
import com.itsaky.androidide.idetooltips.TooltipManager
@@ -49,17 +50,16 @@ import java.util.regex.Pattern
4950
*/
5051
@SuppressLint("ViewConstructor") // Always created dynamically
5152
class EditorSearchLayout(context: Context, val editor: IDEEditor) : FrameLayout(context) {
53+
private val collapsedSheetMargin =
54+
context.resources.getDimensionPixelSize(R.dimen.editor_sheet_peek_height)
5255

5356
private var searchInputTextWatcher: TextWatcher? = null
5457
private var searchOptions = SearchOptions(true, false)
55-
private val findInFileBinding: LayoutFindInFileBinding
56-
private val optionsMenu: PopupMenu
57-
58-
private var isSearching = false
58+
private val findInFileBinding: LayoutFindInFileBinding = LayoutFindInFileBinding.inflate(LayoutInflater.from(context))
59+
private val optionsMenu: PopupMenu
5960

6061
init {
61-
findInFileBinding = LayoutFindInFileBinding.inflate(LayoutInflater.from(context))
62-
findInFileBinding.prev.setOnClickListener(::onSearchActionClick)
62+
findInFileBinding.prev.setOnClickListener(::onSearchActionClick)
6363
findInFileBinding.next.setOnClickListener(::onSearchActionClick)
6464
findInFileBinding.replace.setOnClickListener(::onSearchActionClick)
6565
findInFileBinding.close.setOnClickListener(::onSearchActionClick)
@@ -115,6 +115,10 @@ class EditorSearchLayout(context: Context, val editor: IDEEditor) : FrameLayout(
115115
true
116116
}
117117
}
118+
ViewCompat.setOnApplyWindowInsetsListener(findInFileBinding.root) { _, insets ->
119+
updateActionsBottomMargin(insets.isVisible(WindowInsetsCompat.Type.ime()))
120+
insets
121+
}
118122

119123
addView(
120124
findInFileBinding.root,
@@ -269,7 +273,7 @@ class EditorSearchLayout(context: Context, val editor: IDEEditor) : FrameLayout(
269273
try {
270274
Pattern.compile(it)
271275
it
272-
} catch (error: Throwable) {
276+
} catch (_: Throwable) {
273277
""
274278
}
275279
} else {
@@ -282,4 +286,10 @@ class EditorSearchLayout(context: Context, val editor: IDEEditor) : FrameLayout(
282286
}
283287
}
284288
}
289+
290+
private fun updateActionsBottomMargin(isImeVisible: Boolean) {
291+
findInFileBinding.actionsContainer.updateLayoutParams<MarginLayoutParams> {
292+
bottomMargin = if (isImeVisible) 0 else collapsedSheetMargin
293+
}
294+
}
285295
}

editor/src/main/res/layout/layout_find_in_file.xml

Lines changed: 51 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -62,68 +62,62 @@
6262
app:layout_constraintTop_toTopOf="@id/search_input" />
6363

6464

65-
<com.google.android.material.button.MaterialButton
66-
android:id="@+id/prev"
67-
style="@style/Widget.Material3.Button.TextButton"
65+
<LinearLayout
66+
android:id="@+id/actions_container"
6867
android:layout_width="0dp"
69-
android:layout_height="40dp"
70-
android:text="@string/previous"
71-
android:textAllCaps="true"
72-
android:minWidth="0dp"
73-
android:paddingHorizontal="4dp"
74-
app:layout_constraintEnd_toStartOf="@+id/next"
75-
app:layout_constraintHorizontal_weight="0.25"
68+
android:layout_height="wrap_content"
69+
android:layout_marginBottom="0dp"
70+
android:orientation="horizontal"
71+
android:weightSum="4"
72+
app:layout_constraintBottom_toBottomOf="parent"
73+
app:layout_constraintEnd_toEndOf="parent"
7674
app:layout_constraintStart_toStartOf="parent"
77-
app:layout_constraintTop_toBottomOf="@+id/search_input"
78-
app:layout_constraintBottom_toBottomOf="parent" />
75+
app:layout_constraintTop_toBottomOf="@id/search_input">
7976

77+
<com.google.android.material.button.MaterialButton
78+
android:id="@+id/prev"
79+
style="@style/Widget.Material3.Button.TextButton"
80+
android:layout_width="0dp"
81+
android:layout_height="40dp"
82+
android:layout_weight="1"
83+
android:minWidth="0dp"
84+
android:paddingHorizontal="4dp"
85+
android:text="@string/previous"
86+
android:textAllCaps="true" />
8087

81-
<com.google.android.material.button.MaterialButton
82-
android:id="@+id/next"
83-
style="@style/Widget.Material3.Button.TextButton"
84-
android:layout_width="0dp"
85-
android:layout_height="40dp"
86-
android:text="@string/next"
87-
android:textAllCaps="true"
88-
android:minWidth="0dp"
89-
android:paddingHorizontal="4dp"
90-
app:layout_constraintEnd_toStartOf="@+id/replace"
91-
app:layout_constraintHorizontal_bias="0.5"
92-
app:layout_constraintHorizontal_weight="0.25"
93-
app:layout_constraintStart_toEndOf="@+id/prev"
94-
app:layout_constraintTop_toBottomOf="@+id/search_input"
95-
app:layout_constraintBottom_toBottomOf="parent" />
88+
<com.google.android.material.button.MaterialButton
89+
android:id="@+id/next"
90+
style="@style/Widget.Material3.Button.TextButton"
91+
android:layout_width="0dp"
92+
android:layout_height="40dp"
93+
android:layout_weight="1"
94+
android:minWidth="0dp"
95+
android:paddingHorizontal="4dp"
96+
android:text="@string/next"
97+
android:textAllCaps="true" />
9698

97-
<com.google.android.material.button.MaterialButton
98-
android:id="@+id/replace"
99-
style="@style/Widget.Material3.Button.TextButton"
100-
android:layout_width="0dp"
101-
android:layout_height="40dp"
102-
android:text="@string/replace"
103-
android:textAllCaps="true"
104-
android:minWidth="0dp"
105-
android:paddingHorizontal="4dp"
106-
app:layout_constraintEnd_toStartOf="@+id/close"
107-
app:layout_constraintHorizontal_bias="0.5"
108-
app:layout_constraintHorizontal_weight="0.25"
109-
app:layout_constraintStart_toEndOf="@+id/next"
110-
app:layout_constraintTop_toBottomOf="@+id/search_input"
111-
app:layout_constraintBottom_toBottomOf="parent" />
99+
<com.google.android.material.button.MaterialButton
100+
android:id="@+id/replace"
101+
style="@style/Widget.Material3.Button.TextButton"
102+
android:layout_width="0dp"
103+
android:layout_height="40dp"
104+
android:layout_weight="1"
105+
android:minWidth="0dp"
106+
android:paddingHorizontal="4dp"
107+
android:text="@string/replace"
108+
android:textAllCaps="true" />
112109

113-
<com.google.android.material.button.MaterialButton
114-
android:id="@+id/close"
115-
style="@style/Widget.Material3.Button.TextButton"
116-
android:layout_width="0dp"
117-
android:layout_height="40dp"
118-
android:text="@string/btn_close"
119-
android:textAllCaps="true"
120-
android:minWidth="0dp"
121-
android:paddingHorizontal="4dp"
122-
app:layout_constraintEnd_toEndOf="parent"
123-
app:layout_constraintHorizontal_bias="0.5"
124-
app:layout_constraintHorizontal_weight="0.25"
125-
app:layout_constraintStart_toEndOf="@+id/replace"
126-
app:layout_constraintTop_toBottomOf="@+id/search_input"
127-
app:layout_constraintBottom_toBottomOf="parent" />
110+
<com.google.android.material.button.MaterialButton
111+
android:id="@+id/close"
112+
style="@style/Widget.Material3.Button.TextButton"
113+
android:layout_width="0dp"
114+
android:layout_height="40dp"
115+
android:layout_weight="1"
116+
android:minWidth="0dp"
117+
android:paddingHorizontal="4dp"
118+
android:text="@string/btn_close"
119+
android:textAllCaps="true" />
120+
121+
</LinearLayout>
128122

129123
</androidx.constraintlayout.widget.ConstraintLayout>

0 commit comments

Comments
 (0)