diff --git a/resources/src/main/res/values/strings.xml b/resources/src/main/res/values/strings.xml
index 14466f812..b04375cff 100644
--- a/resources/src/main/res/values/strings.xml
+++ b/resources/src/main/res/values/strings.xml
@@ -496,6 +496,8 @@
LinearLayout (H)
LinearLayout (V)
RelativeLayout
+ ScrollView
+ HorizontalScrollView
Clone
diff --git a/tests/test-home/.androidide/init/model.jar b/tests/test-home/.androidide/init/model.jar
index e2582a3bd..2058f59b9 100644
Binary files a/tests/test-home/.androidide/init/model.jar and b/tests/test-home/.androidide/init/model.jar differ
diff --git a/uidesigner/src/main/java/com/itsaky/androidide/uidesigner/drag/WidgetDragListener.kt b/uidesigner/src/main/java/com/itsaky/androidide/uidesigner/drag/WidgetDragListener.kt
index da7de7688..9583979f6 100644
--- a/uidesigner/src/main/java/com/itsaky/androidide/uidesigner/drag/WidgetDragListener.kt
+++ b/uidesigner/src/main/java/com/itsaky/androidide/uidesigner/drag/WidgetDragListener.kt
@@ -44,7 +44,7 @@ internal class WidgetDragListener(
private var lastY = 0f
override fun onDrag(v: View, event: DragEvent): Boolean {
- return when (event.action) {
+ when (event.action) {
DragEvent.ACTION_DRAG_STARTED -> {
val name =
@@ -53,10 +53,10 @@ internal class WidgetDragListener(
is UiWidget -> data.name
else -> throw IllegalArgumentException("A local state of UiWidget or IView is expected")
}
-
- event.clipDescription.hasMimeType(DRAGGING_WIDGET_MIME) &&
- event.localState != this.view &&
- this.view.canAcceptChild(name)
+
+ return event.clipDescription.hasMimeType(DRAGGING_WIDGET_MIME) &&
+ event.localState != view &&
+ view.canAcceptChild(name)
}
DragEvent.ACTION_DRAG_ENTERED,
DragEvent.ACTION_DRAG_LOCATION -> {
@@ -83,11 +83,11 @@ internal class WidgetDragListener(
lastX = event.x
lastY = event.y
- true
+ return true
}
DragEvent.ACTION_DRAG_EXITED -> {
view.onHighlightStateUpdated(false)
- true
+ return true
}
DragEvent.ACTION_DROP -> {
val child =
@@ -111,13 +111,13 @@ internal class WidgetDragListener(
child.includeInIndexComputation = true
}
- true
+ return true
}
DragEvent.ACTION_DRAG_ENDED -> {
this.placeholder.removeFromParent()
- true
+ return true
}
- else -> false
+ else -> return false
}
}
}
diff --git a/xml-inflater/src/main/java/com/itsaky/androidide/inflater/IViewAdapter.kt b/xml-inflater/src/main/java/com/itsaky/androidide/inflater/IViewAdapter.kt
index 14234bd3d..5c5974527 100644
--- a/xml-inflater/src/main/java/com/itsaky/androidide/inflater/IViewAdapter.kt
+++ b/xml-inflater/src/main/java/com/itsaky/androidide/inflater/IViewAdapter.kt
@@ -74,7 +74,7 @@ abstract class IViewAdapter : AbstractParser() {
* Called by the UI Designer to check if the given view group (which this adpater handles) can
* accept the child view with the given qualified name.
*/
- fun canAcceptChild(view: IViewGroup, name: String): Boolean {
+ open fun canAcceptChild(view: IViewGroup, name: String): Boolean {
return true
}
diff --git a/xml-inflater/src/main/java/com/itsaky/androidide/inflater/IViewGroup.kt b/xml-inflater/src/main/java/com/itsaky/androidide/inflater/IViewGroup.kt
index f5ccaddd6..7eb39080c 100644
--- a/xml-inflater/src/main/java/com/itsaky/androidide/inflater/IViewGroup.kt
+++ b/xml-inflater/src/main/java/com/itsaky/androidide/inflater/IViewGroup.kt
@@ -54,7 +54,7 @@ interface IViewGroup : IView, Iterable {
*/
fun canAcceptChild(name: String): Boolean {
return canModifyChildViews() &&
- ViewAdapterIndex.getAdapter(name)?.canAcceptChild(this, name) == true
+ ViewAdapterIndex.getAdapter(this.name)?.canAcceptChild(this, name) == true
}
/**