diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 2cd1a62ff..c36eba060 100755
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -49,6 +49,9 @@
android:launchMode="singleTop"
android:configChanges="orientation|screenSize|uiMode"
android:windowSoftInputMode="adjustResize" />
+
diff --git a/app/src/main/assets/data/arm64-v8a/bootstrap.zip b/app/src/main/assets/data/arm64-v8a/bootstrap.zip
index 4df76dedc..952343793 100644
Binary files a/app/src/main/assets/data/arm64-v8a/bootstrap.zip and b/app/src/main/assets/data/arm64-v8a/bootstrap.zip differ
diff --git a/app/src/main/assets/data/armeabi-v7a/bootstrap.zip b/app/src/main/assets/data/armeabi-v7a/bootstrap.zip
index a2fd0c834..af0b3103c 100644
Binary files a/app/src/main/assets/data/armeabi-v7a/bootstrap.zip and b/app/src/main/assets/data/armeabi-v7a/bootstrap.zip differ
diff --git a/app/src/main/java/com/itsaky/androidide/EditorActivity.java b/app/src/main/java/com/itsaky/androidide/EditorActivity.java
index a81d43f64..6ef5b6d62 100755
--- a/app/src/main/java/com/itsaky/androidide/EditorActivity.java
+++ b/app/src/main/java/com/itsaky/androidide/EditorActivity.java
@@ -704,7 +704,9 @@ public class EditorActivity extends IDEActivity
}
}
- public void previewLayout() {}
+ public void previewLayout() {
+ startActivity(new Intent(this, UIDesignerActivity.class));
+ }
public boolean saveAll(boolean notify) {
return saveAll(notify, false);
diff --git a/app/src/main/java/com/itsaky/androidide/UIDesignerActivity.kt b/app/src/main/java/com/itsaky/androidide/UIDesignerActivity.kt
index a6afe6f68..33facf490 100644
--- a/app/src/main/java/com/itsaky/androidide/UIDesignerActivity.kt
+++ b/app/src/main/java/com/itsaky/androidide/UIDesignerActivity.kt
@@ -17,8 +17,13 @@
package com.itsaky.androidide
+import android.os.Bundle
import android.view.View
+import androidx.constraintlayout.widget.ConstraintLayout
+import androidx.core.view.updateLayoutParams
+import com.blankj.utilcode.util.SizeUtils
import com.itsaky.androidide.app.IDEActivity
+import com.itsaky.androidide.databinding.ActivityUiDesignerBinding
/**
* The UI Designer activity allows the user to design XML layouts with a drag-n-drop interface.
@@ -26,8 +31,21 @@ import com.itsaky.androidide.app.IDEActivity
* @author Akash Yadav
*/
class UIDesignerActivity : IDEActivity() {
-
+
+ private var binding: ActivityUiDesignerBinding? = null
+
override fun bindLayout(): View {
- TODO("Not yet implemented")
+ this.binding = ActivityUiDesignerBinding.inflate(layoutInflater)
+ this.binding!!.root.childId = this.binding!!.container.id
+ return this.binding!!.root
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ binding = null
}
}
diff --git a/app/src/main/java/com/itsaky/androidide/fragments/BaseFragment.kt b/app/src/main/java/com/itsaky/androidide/fragments/BaseFragment.kt
index fe6374911..f3fc7940f 100755
--- a/app/src/main/java/com/itsaky/androidide/fragments/BaseFragment.kt
+++ b/app/src/main/java/com/itsaky/androidide/fragments/BaseFragment.kt
@@ -27,12 +27,12 @@ import com.itsaky.toaster.Toaster.Type.ERROR
import com.itsaky.toaster.toast
import java.io.File
-open class BaseFragment : Fragment() {
+open class BaseFragment @JvmOverloads constructor(contentLayoutId: Int = 0) : Fragment(contentLayoutId) {
private var callback: OnDirectoryPickedCallback? = null
private val allowedAuthorities =
setOf(ANDROID_DOCS_AUTHORITY, ANDROIDIDE_DOCS_AUTHORITY, TERMUX_DOCS_AUTHORITY)
-
+
companion object {
const val ANDROID_DOCS_AUTHORITY = "com.android.externalstorage.documents"
const val ANDROIDIDE_DOCS_AUTHORITY = "com.itsaky.androidide.documents"
diff --git a/app/src/main/java/com/itsaky/androidide/fragments/WidgetsListFragment.kt b/app/src/main/java/com/itsaky/androidide/fragments/WidgetsListFragment.kt
new file mode 100644
index 000000000..82b52e5cf
--- /dev/null
+++ b/app/src/main/java/com/itsaky/androidide/fragments/WidgetsListFragment.kt
@@ -0,0 +1,48 @@
+/*
+ * This file is part of AndroidIDE.
+ *
+ * AndroidIDE is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * AndroidIDE is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with AndroidIDE. If not, see .
+ */
+
+package com.itsaky.androidide.fragments
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import com.itsaky.androidide.databinding.FragmentUiWidgetsBinding
+
+/**
+ * A fragment that shows the list of widgets available to use in the UI designer.
+ *
+ * @author Akash Yadav
+ */
+class WidgetsListFragment : BaseFragment() {
+
+ private var binding: FragmentUiWidgetsBinding? = null
+
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+ this.binding = FragmentUiWidgetsBinding.inflate(inflater, container, false)
+ return this.binding!!.root
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ }
+
+ override fun onDestroyView() {
+ super.onDestroyView()
+ binding = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_editor.xml b/app/src/main/res/layout/activity_editor.xml
index edd35bfa4..ad244556c 100755
--- a/app/src/main/res/layout/activity_editor.xml
+++ b/app/src/main/res/layout/activity_editor.xml
@@ -17,7 +17,7 @@
android:id="@+id/editor_appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:background="@color/primaryDarkColor"
+ android:backgroundTint="@color/primaryDarkColor"
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$Behavior">
-
-
+
+ android:layout_height="match_parent"
+ android:animateLayoutChanges="true"
+ tools:ignore="DuplicateIncludedIds"
+ tools:openDrawer="start">
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/fragment_ui_widgets.xml b/app/src/main/res/layout/fragment_ui_widgets.xml
new file mode 100644
index 000000000..1811d4cf3
--- /dev/null
+++ b/app/src/main/res/layout/fragment_ui_widgets.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_ui_widgets_item.xml b/app/src/main/res/layout/fragment_ui_widgets_item.xml
new file mode 100644
index 000000000..7251cd3b3
--- /dev/null
+++ b/app/src/main/res/layout/fragment_ui_widgets_item.xml
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/layout_divider_horizontal.xml b/app/src/main/res/layout/layout_divider_horizontal.xml
new file mode 100644
index 000000000..c300bc067
--- /dev/null
+++ b/app/src/main/res/layout/layout_divider_horizontal.xml
@@ -0,0 +1,32 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/layout_run_tasks_category.xml b/app/src/main/res/layout/layout_run_tasks_category.xml
index 6dd5f844a..621c88df8 100644
--- a/app/src/main/res/layout/layout_run_tasks_category.xml
+++ b/app/src/main/res/layout/layout_run_tasks_category.xml
@@ -21,17 +21,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content">
-
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/test-home/.androidide/init/model.jar b/tests/test-home/.androidide/init/model.jar
index 67f886cb1..5fcf1a357 100644
Binary files a/tests/test-home/.androidide/init/model.jar and b/tests/test-home/.androidide/init/model.jar differ