A visual, drag-and-drop editor for Android XML layouts, running on-device
+
Version 1.0.0 · Author: App Dev for All · Package: org.appdevforall.codeonthego.layouteditor
+
+
+
+
+
+
+
1. Executive Overview
+
+ Layout Editor is a Code on the Go plugin that builds Android XML layouts
+ visually. Open a layout XML file, tap the Layout Editor action
+ in the editor toolbar, and the plugin opens a full-screen editor where you drag
+ widgets onto a canvas, arrange the view hierarchy, set attributes through typed
+ dialogs, and preview the result at different device sizes.
+
+
+ The editor was extracted from the host IDE into a standalone plugin so the host
+ APK stays smaller and its build stays shorter. The plugin carries its own copy
+ of every resource and library it needs, and it links only against the stable
+ plugin-api contract, never host-internal modules.
+
+
+ The plugin implements four extension interfaces (IPlugin,
+ UIExtension, DocumentationExtension,
+ BuildStatusListener) and consumes five host services for the editor,
+ project model, build system, UI, and tooltips.
+
+
+
+
+
+
2. Core Functionality
+
+
The Layout Editor action
+
+ The plugin contributes one editor-toolbar action via
+ UIExtension.getToolbarActions(). It is content-aware: it is enabled
+ only when the open file is a layout XML file (an .xml file inside a
+ directory whose name starts with layout) and the last Gradle sync
+ did not fail. The action sits in the preview slot, the position the host's former
+ built-in Preview Layout action used. Tapping it opens the editor full-screen
+ through IdeUIService.openPluginScreen().
+
+
+
Editor surfaces
+
+
+
Surface
What it does
+
+
+
Design
Renders the layout the way it looks at runtime.
+
Blueprint
Shows a wireframe outline of each view's bounds, which makes spacing and nesting easier to read.
+
Palette
Groups the available widgets (Common, Text, Buttons, Widgets, Layouts, Containers). Drag an item onto the canvas to add it.
+
Component tree
Shows the view hierarchy as a tree. Tap a node to select it, long-press for information about it.
+
Attributes
Add or remove attributes on the selected view and edit their values through typed dialogs.
+
Resource Manager
Browse and edit the project's colors, strings, drawables, and fonts.
+
Device size
Preview the layout at different device dimensions and orientations.
+
XML view
Read the generated XML for the current layout.
+
+
+
+
Editing attributes
+
+ Each attribute opens the dialog that fits its format: color, dimension, size,
+ number, string, boolean, enum, flag, id, and view reference. Required attributes
+ such as layout_width and layout_height cannot be
+ removed. Saving writes the edited hierarchy back to the layout XML file.
+
+
+
Documentation on demand
+
+ Every control, palette item, and attribute carries a tooltip. Long-press it to
+ read a short description, with a button through to the IDE's fuller
+ documentation. The entries come from the plugin's
+ DocumentationExtension.
+
The full-screen editor screen: canvas, palette, component tree, toolbar, and navigation drawer.
extends Fragment
+
DesignEditor
The drag-and-drop canvas. Inflates the layout, adds and removes views, and routes selection to the attribute editors.
None
+
ResourceManagerFragment
Browses and edits the project's colors, strings, drawables, and fonts.
extends Fragment
+
Attribute dialogs (editor/dialogs)
Typed editors, one per attribute format (color, dimension, enum, flag, and so on).
None
+
LayoutEditorDocs / PluginDialogContext
Serve long-press tooltips, and wrap the plugin context so dialogs have a valid window token.
None
+
+
+
+
Edit pipeline
+
+ open layout/*.xml + tap the Layout Editor action
+ |
+ v
+ LayoutEditorState.set(target layout) (openPluginScreen carries no Bundle)
+ |
+ v
+ IdeUIService.openPluginScreen ──> LayoutEditorFragment
+ |
+ v
+ DesignEditor inflates the layout with the plugin inflater
+ |
+ v
+ drag from palette / select on canvas / edit in the component tree
+ |
+ v
+ typed attribute dialog ──> caller applies the value to the live View
+ |
+ v
+ save ──> layout XML written back to the file
+
+ Why the plugin inflater and dialog wrapper. A plugin has its own
+ resource namespace, so plugin-inflated XML is inflated with the plugin's own
+ inflater (PluginFragmentHelper.getPluginInflater) to make
+ ?attr/ and app: attributes resolve against the plugin
+ theme. Dialogs are shown through PluginDialogContext, which pairs the
+ host activity (for the window token) with the plugin context (for resources and
+ theme).
+
+
+
Build configuration
+
+
Setting
Value
+
Gradle plugin
com.itsaky.androidide.plugins.build
+
Compile / Target SDK
34
+
Min SDK
26
+
Java / Kotlin target
17
+
View binding
Enabled
+
Plugin API
compileOnly via ../libs/plugin-api.jar
+
Output format
.cgp package
+
+
+
+
+
+
4. Integration Points
+
+ Layout Editor implements four extension interfaces and consumes five host
+ services, all through plugin-api.
+
+
+
4.1 Plugin lifecycle (IPlugin)
+
+ initialize() stores the PluginContext;
+ activate() registers a build-status listener;
+ deactivate() and dispose() unregister it. The editor and
+ its sub-screens open full-screen through
+ IdeUIService.openPluginScreen().
+
+
+
4.2 Toolbar action and enablement (UIExtension)
+
+ getToolbarActions() contributes the Layout Editor action with an
+ isEnabledProvider that enables it only when a layout XML file is open
+ and the last sync succeeded. The action uses the preview-slot order so it takes
+ the same position the built-in Preview Layout action used. No
+ getHiddenToolbarActionIds() is needed, because the host's built-in
+ action was removed when the editor became a plugin.
+
+
+
4.3 Host services consumed
+
+
+
Service
Used for
+
+
+
IdeEditorService
Read the current file to decide whether the action is enabled and which layout to open.
+
IdeProjectService
Resolve the current project and its resource directories for the Resource Manager.
+
IdeBuildService
Subscribe to build status so a failed sync disables the action.
+
IdeUIService
openPluginScreen(): present the editor and its sub-screens full-screen.
+
IdeTooltipService
Show the long-press documentation tooltips.
+
+
+
+
4.4 Build-status tracking (BuildStatusListener)
+
+ onBuildStarted() and onBuildFinished() clear the
+ failed-sync flag; onBuildFailed() sets it. The action's enable rule
+ reads the flag, so the editor does not open against a project that failed to
+ sync.
+
+
+
4.5 Documentation (DocumentationExtension)
+
+ getTooltipCategory() returns the plugin's tooltip category, and
+ getTooltipEntries() provides the toolbar-action tooltip, the
+ editor-control tooltips, and one entry per widget and attribute (loaded from
+ assets/tooltips.json). Tooltip buttons link into the IDE's
+ documentation through direct paths, so the plugin does not bundle its own
+ documentation pages.
+
cd layout-editor
+./gradlew clean assemblePluginDebug # or assemblePlugin for release
+
+ Produces layout-editor/build/plugin/layout-editor-debug.cgp, the
+ bundle you sideload into Code on the Go.
+
+
+ Always clean first. The plugin builder copies the
+ built APK to the .cgp and then deletes the source APK, so an
+ incremental build can pick up an empty artifact.
+
+
+
Installation
+
+
Open Preferences → Plugin Manager → +.
+
Select the layout-editor-debug.cgp file.
+
The IDE discovers LayoutEditorPlugin via manifest metadata and activates it.
+
+
+
Using the plugin
+
+
Open a layout XML file (under a layout resource directory).
+
Tap the Layout Editor action in the editor toolbar.
+
Drag widgets from the palette, select views on the canvas or in the component tree, and edit their attributes.
+
Open the Resource Manager to edit colors, strings, drawables, and fonts.
+
Save to write the layout back. Long-press any control for its tooltip; this page is the full reference.
Smaller, faster host. Moving the editor out of the host shrinks the APK and shortens the build.
+
Visual editing on device. Build and adjust layouts without hand-writing XML.
+
Content-aware entry point. The action is enabled only for layout XML files, and only when the project synced.
+
Built-in guidance. Long-press documentation on every control, palette item, and attribute.
+
Self-contained. The plugin carries its own resources and libraries and links only against plugin-api.
+
Reference for a multi-screen UI plugin. Shows how to port a feature with several screens onto openPluginScreen().
+
+
+
+
+
+
7. Attribution & License
+
+ Layout Editor is an open-source example plugin for Code on the Go. Its source is
+ licensed per the surrounding plugin-examples repository (see
+ LICENSE at the repo root).
+
+
+
The bundled libraries (Material Components, Glide, the color picker, the code editor, and others) are used under their respective open-source licenses.
+
The plugin makes no network calls. Parsing, editing, and saving happen on-device.
+
+
+
+
+
+
+
diff --git a/layout-editor/proguard-rules.pro b/layout-editor/proguard-rules.pro
new file mode 100644
index 00000000..83e37e37
--- /dev/null
+++ b/layout-editor/proguard-rules.pro
@@ -0,0 +1 @@
+# Layout Editor plugin — no minification (release uses isMinifyEnabled = false).
diff --git a/layout-editor/settings.gradle.kts b/layout-editor/settings.gradle.kts
new file mode 100644
index 00000000..8b717726
--- /dev/null
+++ b/layout-editor/settings.gradle.kts
@@ -0,0 +1,32 @@
+pluginManagement {
+ repositories {
+ google()
+ mavenCentral()
+ gradlePluginPortal()
+ }
+}
+
+buildscript {
+ repositories {
+ google()
+ mavenCentral()
+ gradlePluginPortal()
+ }
+ dependencies {
+ classpath(files("../libs/plugin-api.jar"))
+ classpath(files("../libs/gradle-plugin.jar"))
+ classpath("com.android.tools.build:gradle:8.8.2")
+ classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:2.3.0")
+ }
+}
+
+dependencyResolutionManagement {
+ repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
+ repositories {
+ google()
+ mavenCentral()
+ maven { url = uri("https://jitpack.io") }
+ }
+}
+
+rootProject.name = "layout-editor"
diff --git a/layout-editor/src/main/AndroidManifest.xml b/layout-editor/src/main/AndroidManifest.xml
new file mode 100644
index 00000000..b036b882
--- /dev/null
+++ b/layout-editor/src/main/AndroidManifest.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/layout-editor/src/main/assets/attributes/attributes.json b/layout-editor/src/main/assets/attributes/attributes.json
new file mode 100644
index 00000000..f72c8db2
--- /dev/null
+++ b/layout-editor/src/main/assets/attributes/attributes.json
@@ -0,0 +1,738 @@
+{
+ "android.view.View": [
+ {
+ "name": "android:id",
+ "methodName": "setId",
+ "className": "ViewCaller",
+ "attributeName": "android:id",
+ "argumentType": "id"
+ },
+ {
+ "name": "android:layout_width",
+ "methodName": "setLayoutWidth",
+ "className": "ViewCaller",
+ "attributeName": "android:layout_width",
+ "argumentType": "size",
+ "canDelete": "false"
+ },
+ {
+ "name": "android:layout_height",
+ "methodName": "setLayoutHeight",
+ "className": "ViewCaller",
+ "attributeName": "android:layout_height",
+ "argumentType": "size",
+ "canDelete": "false"
+ },
+ {
+ "name": "android:alpha",
+ "methodName": "setAlpha",
+ "className": "ViewCaller",
+ "attributeName": "android:alpha",
+ "argumentType": "float"
+ },
+ {
+ "name": "android:background",
+ "methodName": "setBackground",
+ "className": "ViewCaller",
+ "attributeName": "android:background",
+ "argumentType": "color|drawable"
+ },
+ {
+ "name": "android:foreground",
+ "methodName": "setForeground",
+ "className": "ViewCaller",
+ "attributeName": "android:foreground",
+ "argumentType": "color|drawable"
+ },
+ {
+ "name": "android:elevation",
+ "methodName": "setElevation",
+ "className": "ViewCaller",
+ "attributeName": "android:elevation",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ },
+ {
+ "name": "android:padding",
+ "methodName": "setPadding",
+ "className": "ViewCaller",
+ "attributeName": "android:padding",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ },
+ {
+ "name": "android:paddingLeft",
+ "methodName": "setPaddingLeft",
+ "className": "ViewCaller",
+ "attributeName": "android:paddingLeft",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ },
+ {
+ "name": "android:paddingRight",
+ "methodName": "setPaddingRight",
+ "className": "ViewCaller",
+ "attributeName": "android:paddingRight",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ },
+ {
+ "name": "android:paddingTop",
+ "methodName": "setPaddingTop",
+ "className": "ViewCaller",
+ "attributeName": "android:paddingTop",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ },
+ {
+ "name": "android:paddingBottom",
+ "methodName": "setPaddingBottom",
+ "className": "ViewCaller",
+ "attributeName": "android:paddingBottom",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ },
+ {
+ "name": "android:rotation",
+ "methodName": "setRotation",
+ "className": "ViewCaller",
+ "attributeName": "android:rotation",
+ "argumentType": "float"
+ },
+ {
+ "name": "android:rotationX",
+ "methodName": "setRotationX",
+ "className": "ViewCaller",
+ "attributeName": "android:rotationX",
+ "argumentType": "float"
+ },
+ {
+ "name": "android:rotationY",
+ "methodName": "setRotationY",
+ "className": "ViewCaller",
+ "attributeName": "android:rotationY",
+ "argumentType": "float"
+ },
+ {
+ "name": "android:translationX",
+ "methodName": "setTranslationX",
+ "className": "ViewCaller",
+ "attributeName": "android:translationX",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ },
+ {
+ "name": "android:translationY",
+ "methodName": "setTranslationY",
+ "className": "ViewCaller",
+ "attributeName": "android:translationY",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ },
+ {
+ "name": "android:translationZ",
+ "methodName": "setTranslationZ",
+ "className": "ViewCaller",
+ "attributeName": "android:translationZ",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ },
+ {
+ "name": "android:scaleX",
+ "methodName": "setScaleX",
+ "className": "ViewCaller",
+ "attributeName": "android:scaleX",
+ "argumentType": "float"
+ },
+ {
+ "name": "android:scaleY",
+ "methodName": "setScaleY",
+ "className": "ViewCaller",
+ "attributeName": "android:scaleY",
+ "argumentType": "float"
+ },
+ {
+ "name": "android:enabled",
+ "methodName": "setEnabled",
+ "className": "ViewCaller",
+ "attributeName": "android:enabled",
+ "argumentType": "boolean"
+ },
+ {
+ "name": "android:visibility",
+ "methodName": "setVisibility",
+ "className": "ViewCaller",
+ "attributeName": "android:visibility",
+ "argumentType": "enum",
+ "arguments": [
+ "visible",
+ "invisible",
+ "gone"
+ ],
+ "defaultValue": "-1"
+ }
+ ],
+ "android.widget.LinearLayout": [
+ {
+ "name": "android:gravity",
+ "methodName": "setGravity",
+ "className": "LinearLayoutCaller",
+ "attributeName": "android:gravity",
+ "argumentType": "flag",
+ "arguments": [
+ "left",
+ "right",
+ "top",
+ "bottom",
+ "center",
+ "center_horizontal",
+ "center_vertical",
+ "fill",
+ "fill_horizontal",
+ "fill_vertical",
+ "clip_horizontal",
+ "clip_vertical",
+ "start",
+ "end"
+ ],
+ "defaultValue": "-1"
+ },
+ {
+ "name": "android:orientation",
+ "methodName": "setOrientation",
+ "className": "LinearLayoutCaller",
+ "attributeName": "android:orientation",
+ "argumentType": "enum",
+ "arguments": [
+ "horizontal",
+ "vertical"
+ ],
+ "defaultValue": "-1"
+ },
+ {
+ "name": "android:weightSum",
+ "methodName": "setWeightSum",
+ "className": "layouts.LinearLayoutCaller",
+ "attributeName": "android:weightSum",
+ "argumentType": "float"
+ }
+ ],
+ "androidx.cardview.widget.CardView": [
+ {
+ "name": "app:cardElevation",
+ "methodName": "setCardElevation",
+ "className": "CardViewCaller",
+ "attributeName": "app:cardElevation",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ },
+ {
+ "name": "app:cardCornerRadius",
+ "methodName": "setCardCornerRadius",
+ "className": "CardViewCaller",
+ "attributeName": "app:cardCornerRadius",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ },
+ {
+ "name": "app:cardBackgroundColor",
+ "methodName": "setCardBackgroundColor",
+ "className": "CardViewCaller",
+ "attributeName": "app:cardBackgroundColor",
+ "argumentType": "color"
+ },
+ {
+ "name": "app:cardUseCompatPadding",
+ "methodName": "setCardUseCompatPadding",
+ "className": "CardViewCaller",
+ "attributeName": "app:cardUseCompatPadding",
+ "argumentType": "boolean",
+ "defaultValue": "false"
+ }
+ ],
+ "android.widget.TextView": [
+ {
+ "name": "android:text",
+ "methodName": "setText",
+ "className": "text.TextViewCaller",
+ "attributeName": "android:text",
+ "argumentType": "text|string"
+ },
+ {
+ "name": "android:textSize",
+ "methodName": "setTextSize",
+ "className": "text.TextViewCaller",
+ "attributeName": "android:textSize",
+ "argumentType": "dimension",
+ "dimensionUnit": "sp"
+ },
+ {
+ "name": "android:textColor",
+ "methodName": "setTextColor",
+ "className": "text.TextViewCaller",
+ "attributeName": "android:textColor",
+ "argumentType": "color"
+ },
+ {
+ "name": "android:textStyle",
+ "methodName": "setTextStyle",
+ "className": "text.TextViewCaller",
+ "attributeName": "android:textStyle",
+ "argumentType": "enum",
+ "arguments": [
+ "normal",
+ "bold",
+ "italic",
+ "bold|italic"
+ ],
+ "defaultValue": "-1"
+ },
+ {
+ "name": "android:gravity",
+ "methodName": "setGravity",
+ "className": "text.TextViewCaller",
+ "attributeName": "android:gravity",
+ "argumentType": "flag",
+ "arguments": [
+ "left",
+ "right",
+ "top",
+ "bottom",
+ "center",
+ "center_horizontal",
+ "center_vertical",
+ "fill",
+ "fill_horizontal",
+ "fill_vertical",
+ "clip_horizontal",
+ "clip_vertical",
+ "start",
+ "end"
+ ],
+ "defaultValue": "-1"
+ }
+ ],
+ "android.widget.CheckedTextView": [
+ {
+ "name": "android:checkMark",
+ "methodName": "setCheckMark",
+ "className": "text.TextViewCaller",
+ "attributeName": "android:checkMark",
+ "argumentType": "drawable"
+ },
+ {
+ "name": "android:checked",
+ "methodName": "setChecked",
+ "className": "text.TextViewCaller",
+ "attributeName": "android:checked",
+ "argumentType": "boolean"
+ }
+ ],
+ "android.widget.AutoCompleteTextView": [
+ {
+ "name": "android:completionHint",
+ "methodName": "setCompletionHint",
+ "className": "text.AutoCompleteTextViewCaller",
+ "attributeName": "android:completionHint",
+ "argumentType": "string|text"
+ },
+ {
+ "name": "android:dropDownHeight",
+ "methodName": "setDropDownHeight",
+ "className": "text.AutoCompleteTextViewCaller",
+ "attributeName": "android:dropDownHeight",
+ "argumentType": "size"
+ },
+ {
+ "name": "android:dropDownHorizontalOffset",
+ "methodName": "setDropDownHorizontalOffset",
+ "className": "text.AutoCompleteTextViewCaller",
+ "attributeName": "android:dropDownHorizontalOffset",
+ "argumentType": "float"
+ },
+ {
+ "name": "android:dropDownVerticalOffset",
+ "methodName": "setDropDownVerticalOffset",
+ "className": "text.AutoCompleteTextViewCaller",
+ "attributeName": "android:dropDownVerticalOffset",
+ "argumentType": "float"
+ },
+ {
+ "name": "android:dropDownWidth",
+ "methodName": "setDropDownWidth",
+ "className": "text.AutoCompleteTextViewCaller",
+ "attributeName": "android:dropDownWidth",
+ "argumentType": "size"
+ },
+ {
+ "name": "android:popupBackground",
+ "methodName": "setDropDownBackgroundResource",
+ "className": "text.AutoCompleteTextViewCaller",
+ "attributeName": "android:popupBackground",
+ "argumentType": "color"
+ },
+ {
+ "name": "android:completionThreshold",
+ "methodName": "setThreshold",
+ "className": "text.AutoCompleteTextViewCaller",
+ "attributeName": "android:completionThreshold",
+ "argumentType": "int"
+ }
+ ],
+ "android.widget.EditText": [
+ {
+ "name": "android:hint",
+ "methodName": "setHint",
+ "className": "text.EditTextCaller",
+ "attributeName": "android:hint",
+ "argumentType": "text|string"
+ },
+ {
+ "name": "android:inputType",
+ "methodName": "setInputType",
+ "className": "text.EditTextCaller",
+ "attributeName": "android:inputType",
+ "argumentType": "flag",
+ "arguments": [
+ "date",
+ "datetime",
+ "none",
+ "number",
+ "numberDecimal",
+ "numberSigned",
+ "numberPassword",
+ "phone",
+ "text",
+ "textAutoComplete",
+ "textAutoCorrect",
+ "textCapCharacters",
+ "textCapSentences",
+ "textCapWords",
+ "textEmailAddress",
+ "textEmailSubject",
+ "textEnableTextConversionSuggestions",
+ "textFilter",
+ "textImeMultiLine",
+ "textLongMessage",
+ "textMultiLine",
+ "textNoSuggestions",
+ "textPassword",
+ "textPersonName",
+ "textPhonetic",
+ "textPostalAddress",
+ "textShortMessage",
+ "textUri",
+ "textVisiblePassword",
+ "textWebEditText",
+ "textWebEmailAddress",
+ "textWebPassword",
+ "time"
+ ],
+ "defaultValue": "-1"
+ },
+ {
+ "name": "android:textColorHint",
+ "methodName": "setHintTextColor",
+ "className": "text.EditTextCaller",
+ "attributeName": "android:textColorHint",
+ "argumentType": "color"
+ },
+ {
+ "name": "android:singleLine",
+ "methodName": "setSingleLine",
+ "className": "text.EditTextCaller",
+ "attributeName": "android:singleLine",
+ "argumentType": "boolean"
+ }
+ ],
+ "android.widget.ImageView": [
+ {
+ "name": "android:src",
+ "methodName": "setImage",
+ "className": "ImageViewCaller",
+ "attributeName": "android:src",
+ "argumentType": "drawable"
+ },
+ {
+ "name": "android:scaleType",
+ "methodName": "setScaleType",
+ "className": "ImageViewCaller",
+ "attributeName": "android:scaleType",
+ "argumentType": "enum",
+ "arguments": [
+ "fitXY",
+ "fitStart",
+ "fitCenter",
+ "fitEnd",
+ "center",
+ "centerCrop",
+ "centerInside"
+ ],
+ "defaultValue": "-1"
+ },
+ {
+ "name": "android:tint",
+ "methodName": "setTint",
+ "className": "ImageViewCaller",
+ "attributeName": "android:tint",
+ "argumentType": "color"
+ }
+ ],
+ "androidx.appcompat.widget.AppCompatImageView": [
+ {
+ "name": "android:src",
+ "methodName": "setImage",
+ "className": "ImageViewCaller",
+ "attributeName": "android:src",
+ "argumentType": "drawable"
+ },
+ {
+ "name": "app:srcCompat",
+ "methodName": "setImage",
+ "className": "ImageViewCaller",
+ "attributeName": "app:srcCompat",
+ "argumentType": "drawable"
+ },
+ {
+ "name": "android:scaleType",
+ "methodName": "setScaleType",
+ "className": "ImageViewCaller",
+ "attributeName": "android:scaleType",
+ "argumentType": "enum",
+ "arguments": [
+ "fitXY",
+ "fitStart",
+ "fitCenter",
+ "fitEnd",
+ "center",
+ "centerCrop",
+ "centerInside"
+ ],
+ "defaultValue": "-1"
+ },
+ {
+ "name": "android:tint",
+ "methodName": "setTint",
+ "className": "ImageViewCaller",
+ "attributeName": "android:tint",
+ "argumentType": "color"
+ }
+ ],
+ "com.google.android.material.floatingactionbutton.FloatingActionButton": [
+ {
+ "name": "app:background",
+ "methodName": "setBackgroundColor",
+ "className": "FABCaller",
+ "attributeName": "app:background",
+ "argumentType": "color"
+ },
+ {
+ "name": "app:fabSize",
+ "methodName": "setSize",
+ "className": "FABCaller",
+ "attributeName": "app:fabSize",
+ "argumentType": "enum",
+ "arguments": [
+ "auto",
+ "mini",
+ "normal"
+ ],
+ "defaultValue": "-1"
+ },
+ {
+ "name": "app:fabCustomSize",
+ "methodName": "setCustomSize",
+ "className": "FABCaller",
+ "attributeName": "app:fabCustomSize",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ },
+ {
+ "name": "app:elevation",
+ "methodName": "setCompatElevation",
+ "className": "FABCaller",
+ "attributeName": "app:elevation",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ }
+ ],
+ "android.widget.Switch": [
+ {
+ "name": "android:checked",
+ "methodName": "setChecked",
+ "className": "SwitchCaller",
+ "attributeName": "android:checked",
+ "argumentType": "boolean"
+ }
+ ],
+ "androidx.appcompat.widget.SwitchCompat": [
+ {
+ "name": "android:checked",
+ "methodName": "setChecked",
+ "className": "SwitchCaller",
+ "attributeName": "android:checked",
+ "argumentType": "boolean"
+ }
+ ],
+ "android.widget.ProgressBar": [
+ {
+ "name": "android:progress",
+ "methodName": "setProgress",
+ "className": "ProgressBarCaller",
+ "attributeName": "android:progress",
+ "argumentType": "int"
+ },
+ {
+ "name": "android:max",
+ "methodName": "setMax",
+ "className": "ProgressBarCaller",
+ "attributeName": "android:max",
+ "argumentType": "int"
+ },
+ {
+ "name": "android:indeterminate",
+ "methodName": "setIndeterminate",
+ "className": "ProgressBarCaller",
+ "attributeName": "android:indeterminate",
+ "argumentType": "boolean"
+ }
+ ],
+ "android.widget.ScrollView": [
+ {
+ "name": "android:fillViewport",
+ "methodName": "setFillViewport",
+ "className": "containers.ScrollViewCaller",
+ "attributeName": "android:fillViewport",
+ "argumentType": "boolean"
+ }
+ ],
+ "android.widget.FrameLayout": [
+ {
+ "name": "android:foregroundGravity",
+ "methodName": "setForegroundGravity",
+ "className": "layouts.FrameLayoutCaller",
+ "attributeName": "android:foregroundGravity",
+ "argumentType": "flag",
+ "arguments": [
+ "left",
+ "right",
+ "top",
+ "bottom",
+ "center",
+ "center_horizontal",
+ "center_vertical",
+ "fill",
+ "fill_horizontal",
+ "fill_vertical",
+ "clip_horizontal",
+ "clip_vertical",
+ "start",
+ "end"
+ ],
+ "defaultValue": "-1"
+ },
+ {
+ "name": "android:measureAllChildren",
+ "methodName": "setMeasureAllChildren",
+ "className": "layouts.FrameLayoutCaller",
+ "attributeName": "android:measureAllChildren",
+ "argumentType": "boolean"
+ }
+ ],
+ "com.google.android.material.textfield.TextInputEditText": [
+ {
+ "name": "android:hint",
+ "methodName": "setHint",
+ "className": "text.TextInputEditTextCaller",
+ "attributeName": "android:hint",
+ "argumentType": "text|string"
+ },
+ {
+ "name": "android:inputType",
+ "methodName": "setInputType",
+ "className": "text.TextInputEditTextCaller",
+ "attributeName": "android:inputType",
+ "argumentType": "flag",
+ "arguments": [
+ "date",
+ "datetime",
+ "none",
+ "number",
+ "numberDecimal",
+ "numberSigned",
+ "numberPassword",
+ "phone",
+ "text",
+ "textAutoComplete",
+ "textAutoCorrect",
+ "textCapCharacters",
+ "textCapSentences",
+ "textCapWords",
+ "textEmailAddress",
+ "textEmailSubject",
+ "textEnableTextConversionSuggestions",
+ "textFilter",
+ "textImeMultiLine",
+ "textLongMessage",
+ "textMultiLine",
+ "textNoSuggestions",
+ "textPassword",
+ "textPersonName",
+ "textPhonetic",
+ "textPostalAddress",
+ "textShortMessage",
+ "textUri",
+ "textVisiblePassword",
+ "textWebEditText",
+ "textWebEmailAddress",
+ "textWebPassword",
+ "time"
+ ],
+ "defaultValue": "-1"
+ },
+ {
+ "name": "android:textColorHint",
+ "methodName": "setHintTextColor",
+ "className": "text.TextInputEditTextCaller",
+ "attributeName": "android:textColorHint",
+ "argumentType": "color"
+ },
+ {
+ "name": "android:singleLine",
+ "methodName": "setSingleLine",
+ "className": "text.TextInputEditTextCaller",
+ "attributeName": "android:singleLine",
+ "argumentType": "boolean"
+ }
+ ],
+ "com.google.android.material.textfield.TextInputLayout": [
+ {
+ "name": "android:hint",
+ "methodName": "setHint",
+ "className": "text.TextInputLayoutCaller",
+ "attributeName": "android:hint",
+ "argumentType": "text|string"
+ },
+ {
+ "name": "app:hintEnabled",
+ "methodName": "setHintEnabled",
+ "className": "text.TextInputLayoutCaller",
+ "attributeName": "app:hintEnabled",
+ "argumentType": "boolean"
+ },
+ {
+ "name": "app:errorEnabled",
+ "methodName": "setErrorEnabled",
+ "className": "text.TextInputLayoutCaller",
+ "attributeName": "app:errorEnabled",
+ "argumentType": "boolean"
+ },
+ {
+ "name": "app:counterEnabled",
+ "methodName": "setCounterEnabled",
+ "className": "text.TextInputLayoutCaller",
+ "attributeName": "app:counterEnabled",
+ "argumentType": "boolean"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/layout-editor/src/main/assets/attributes/parent_attributes.json b/layout-editor/src/main/assets/attributes/parent_attributes.json
new file mode 100644
index 00000000..5a7deb67
--- /dev/null
+++ b/layout-editor/src/main/assets/attributes/parent_attributes.json
@@ -0,0 +1,532 @@
+{
+ "android.widget.LinearLayout": [
+ {
+ "name": "android:layout_weight",
+ "methodName": "setLayoutWeight",
+ "className": "parentcallers.LinearLayoutCaller",
+ "attributeName": "android:layout_weight",
+ "argumentType": "float"
+ },
+ {
+ "name": "android:layout_margin",
+ "methodName": "setLayoutMargin",
+ "className": "parentcallers.LinearLayoutCaller",
+ "attributeName": "android:layout_margin",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ },
+ {
+ "name": "android:layout_marginLeft",
+ "methodName": "setLayoutMarginLeft",
+ "className": "parentcallers.LinearLayoutCaller",
+ "attributeName": "android:layout_marginLeft",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ },
+ {
+ "name": "android:layout_marginRight",
+ "methodName": "setLayoutMarginRight",
+ "className": "parentcallers.LinearLayoutCaller",
+ "attributeName": "android:layout_marginRight",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ },
+ {
+ "name": "android:layout_marginTop",
+ "methodName": "setLayoutMarginTop",
+ "className": "parentcallers.LinearLayoutCaller",
+ "attributeName": "android:layout_marginTop",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ },
+ {
+ "name": "android:layout_marginBottom",
+ "methodName": "setLayoutMarginBottom",
+ "className": "parentcallers.LinearLayoutCaller",
+ "attributeName": "android:layout_marginBottom",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ }
+ ],
+ "android.widget.FrameLayout": [
+ {
+ "name": "android:layout_gravity",
+ "methodName": "setLayoutGravity",
+ "className": "parentcallers.FrameLayoutCaller",
+ "attributeName": "android:layout_gravity",
+ "argumentType": "flag",
+ "arguments": [
+ "left",
+ "right",
+ "top",
+ "bottom",
+ "center",
+ "center_horizontal",
+ "center_vertical",
+ "fill",
+ "fill_horizontal",
+ "fill_vertical",
+ "clip_horizontal",
+ "clip_vertical",
+ "start",
+ "end"
+ ],
+ "defaultValue": "-1"
+ },
+ {
+ "name": "android:layout_margin",
+ "methodName": "setLayoutMargin",
+ "className": "parentcallers.FrameLayoutCaller",
+ "attributeName": "android:layout_margin",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ },
+ {
+ "name": "android:layout_marginLeft",
+ "methodName": "setLayoutMarginLeft",
+ "className": "parentcallers.FrameLayoutCaller",
+ "attributeName": "android:layout_marginLeft",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ },
+ {
+ "name": "android:layout_marginRight",
+ "methodName": "setLayoutMarginRight",
+ "className": "parentcallers.FrameLayoutCaller",
+ "attributeName": "android:layout_marginRight",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ },
+ {
+ "name": "android:layout_marginTop",
+ "methodName": "setLayoutMarginTop",
+ "className": "parentcallers.FrameLayoutCaller",
+ "attributeName": "android:layout_marginTop",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ },
+ {
+ "name": "android:layout_marginBottom",
+ "methodName": "setLayoutMarginBottom",
+ "className": "parentcallers.FrameLayoutCaller",
+ "attributeName": "android:layout_marginBottom",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ }
+ ],
+ "android.widget.RelativeLayout": [
+ {
+ "name": "android:layout_centerHorizontal",
+ "methodName": "setLayoutCenterHorizontal",
+ "className": "parentcallers.RelativeLayoutCaller",
+ "attributeName": "android:layout_centerHorizontal",
+ "argumentType": "boolean",
+ "defaultValue": "false"
+ },
+ {
+ "name": "android:layout_centerVertical",
+ "methodName": "setLayoutCenterVertical",
+ "className": "parentcallers.RelativeLayoutCaller",
+ "attributeName": "android:layout_centerVertical",
+ "argumentType": "boolean",
+ "defaultValue": "false"
+ },
+ {
+ "name": "android:layout_centerInParent",
+ "methodName": "setLayoutCenterInParent",
+ "className": "parentcallers.RelativeLayoutCaller",
+ "attributeName": "android:layout_centerInParent",
+ "argumentType": "boolean",
+ "defaultValue": "false"
+ },
+ {
+ "name": "android:layout_below",
+ "methodName": "setLayoutBelow",
+ "className": "parentcallers.RelativeLayoutCaller",
+ "attributeName": "android:layout_below",
+ "argumentType": "view",
+ "defaultValue": "-1"
+ },
+ {
+ "name": "android:layout_above",
+ "methodName": "setLayoutAbove",
+ "className": "parentcallers.RelativeLayoutCaller",
+ "attributeName": "android:layout_above",
+ "argumentType": "view",
+ "defaultValue": "-1"
+ },
+ {
+ "name": "android:layout_toLeftOf",
+ "methodName": "setLayoutToLeftOf",
+ "className": "parentcallers.RelativeLayoutCaller",
+ "attributeName": "android:layout_toLeftOf",
+ "argumentType": "view",
+ "defaultValue": "-1"
+ },
+ {
+ "name": "android:layout_toRightOf",
+ "methodName": "setLayoutToRightOf",
+ "className": "parentcallers.RelativeLayoutCaller",
+ "attributeName": "android:layout_toRightOf",
+ "argumentType": "view",
+ "defaultValue": "-1"
+ },
+ {
+ "name": "android:layout_alignLeft",
+ "methodName": "setLayoutAlignLeft",
+ "className": "parentcallers.RelativeLayoutCaller",
+ "attributeName": "android:layout_alignLeft",
+ "argumentType": "view",
+ "defaultValue": "-1"
+ },
+ {
+ "name": "android:layout_alignRight",
+ "methodName": "setLayoutAlignRight",
+ "className": "parentcallers.RelativeLayoutCaller",
+ "attributeName": "android:layout_alignRight",
+ "argumentType": "view",
+ "defaultValue": "-1"
+ },
+ {
+ "name": "android:layout_alignTop",
+ "methodName": "setLayoutAlignTop",
+ "className": "parentcallers.RelativeLayoutCaller",
+ "attributeName": "android:layout_alignTop",
+ "argumentType": "view",
+ "defaultValue": "-1"
+ },
+ {
+ "name": "android:layout_alignBottom",
+ "methodName": "setLayoutAlignBottom",
+ "className": "parentcallers.RelativeLayoutCaller",
+ "attributeName": "android:layout_alignBottom",
+ "argumentType": "view",
+ "defaultValue": "-1"
+ },
+ {
+ "name": "android:layout_alignParentLeft",
+ "methodName": "setLayoutAlignParentLeft",
+ "className": "parentcallers.RelativeLayoutCaller",
+ "attributeName": "android:layout_alignParentLeft",
+ "argumentType": "boolean",
+ "defaultValue": "false"
+ },
+ {
+ "name": "android:layout_alignParentRight",
+ "methodName": "setLayoutAlignParentRight",
+ "className": "parentcallers.RelativeLayoutCaller",
+ "attributeName": "android:layout_alignParentRight",
+ "argumentType": "boolean",
+ "defaultValue": "false"
+ },
+ {
+ "name": "android:layout_alignParentTop",
+ "methodName": "setLayoutAlignParentTop",
+ "className": "parentcallers.RelativeLayoutCaller",
+ "attributeName": "android:layout_alignParentTop",
+ "argumentType": "boolean",
+ "defaultValue": "false"
+ },
+ {
+ "name": "android:layout_alignParentBottom",
+ "methodName": "setLayoutAlignParentBottom",
+ "className": "parentcallers.RelativeLayoutCaller",
+ "attributeName": "android:layout_alignParentBottom",
+ "argumentType": "boolean",
+ "defaultValue": "false"
+ },
+ {
+ "name": "android:layout_alignBaseline",
+ "methodName": "setLayoutAlignBaseline",
+ "className": "parentcallers.RelativeLayoutCaller",
+ "attributeName": "android:layout_alignBaseline",
+ "argumentType": "view",
+ "defaultValue": "-1"
+ },
+ {
+ "name": "android:layout_margin",
+ "methodName": "setLayoutMargin",
+ "className": "parentcallers.RelativeLayoutCaller",
+ "attributeName": "android:layout_margin",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ },
+ {
+ "name": "android:layout_marginLeft",
+ "methodName": "setLayoutMarginLeft",
+ "className": "parentcallers.RelativeLayoutCaller",
+ "attributeName": "android:layout_marginLeft",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ },
+ {
+ "name": "android:layout_marginRight",
+ "methodName": "setLayoutMarginRight",
+ "className": "parentcallers.RelativeLayoutCaller",
+ "attributeName": "android:layout_marginRight",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ },
+ {
+ "name": "android:layout_marginTop",
+ "methodName": "setLayoutMarginTop",
+ "className": "parentcallers.RelativeLayoutCaller",
+ "attributeName": "android:layout_marginTop",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ },
+ {
+ "name": "android:layout_marginBottom",
+ "methodName": "setLayoutMarginBottom",
+ "className": "parentcallers.RelativeLayoutCaller",
+ "attributeName": "android:layout_marginBottom",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ }
+ ],
+ "androidx.constraintlayout.widget.ConstraintLayout": [
+ {
+ "name": "app:layout_constraintLeft_toLeftOf",
+ "methodName": "setLeftToLeft",
+ "className": "layouts.ConstraintLayoutCaller",
+ "attributeName": "app:layout_constraintLeft_toLeftOf",
+ "argumentType": "view",
+ "constant": "parent",
+ "defaultValue": "-1"
+ },
+ {
+ "name": "app:layout_constraintLeft_toRightOf",
+ "methodName": "setLeftToRight",
+ "className": "layouts.ConstraintLayoutCaller",
+ "attributeName": "app:layout_constraintLeft_toRightOf",
+ "argumentType": "view",
+ "constant": "parent",
+ "defaultValue": "-1"
+ },
+ {
+ "name": "app:layout_constraintRight_toLeftOf",
+ "methodName": "setRightToLeft",
+ "className": "layouts.ConstraintLayoutCaller",
+ "attributeName": "app:layout_constraintRight_toLeftOf",
+ "argumentType": "view",
+ "constant": "parent",
+ "defaultValue": "-1"
+ },
+ {
+ "name": "app:layout_constraintRight_toRightOf",
+ "methodName": "setRightToRight",
+ "className": "layouts.ConstraintLayoutCaller",
+ "attributeName": "app:layout_constraintRight_toRightOf",
+ "argumentType": "view",
+ "constant": "parent",
+ "defaultValue": "-1"
+ },
+ {
+ "name": "app:layout_constraintTop_toTopOf",
+ "methodName": "setTopToTop",
+ "className": "layouts.ConstraintLayoutCaller",
+ "attributeName": "app:layout_constraintTop_toTopOf",
+ "argumentType": "view",
+ "constant": "parent",
+ "defaultValue": "-1"
+ },
+ {
+ "name": "app:layout_constraintTop_toBottomOf",
+ "methodName": "setTopToBottom",
+ "className": "layouts.ConstraintLayoutCaller",
+ "attributeName": "app:layout_constraintTop_toBottomOf",
+ "argumentType": "view",
+ "constant": "parent",
+ "defaultValue": "-1"
+ },
+ {
+ "name": "app:layout_constraintBottom_toTopOf",
+ "methodName": "setBottomToTop",
+ "className": "layouts.ConstraintLayoutCaller",
+ "attributeName": "app:layout_constraintBottom_toTopOf",
+ "argumentType": "view",
+ "constant": "parent",
+ "defaultValue": "-1"
+ },
+ {
+ "name": "app:layout_constraintBottom_toBottomOf",
+ "methodName": "setBottomToBottom",
+ "className": "layouts.ConstraintLayoutCaller",
+ "attributeName": "app:layout_constraintBottom_toBottomOf",
+ "argumentType": "view",
+ "constant": "parent",
+ "defaultValue": "-1"
+ },
+ {
+ "name": "app:layout_constraintBaseline_toBaselineOf",
+ "methodName": "setBaselineToBaseline",
+ "className": "layouts.ConstraintLayoutCaller",
+ "attributeName": "app:layout_constraintBaseline_toBaselineOf",
+ "argumentType": "view",
+ "constant": "parent",
+ "defaultValue": "-1"
+ },
+ {
+ "name": "app:layout_constraintStart_toStartOf",
+ "methodName": "setStartToStart",
+ "className": "layouts.ConstraintLayoutCaller",
+ "attributeName": "app:layout_constraintStart_toStartOf",
+ "argumentType": "view",
+ "constant": "parent",
+ "defaultValue": "-1"
+ },
+ {
+ "name": "app:layout_constraintStart_toEndOf",
+ "methodName": "setStartToEnd",
+ "className": "layouts.ConstraintLayoutCaller",
+ "attributeName": "app:layout_constraintStart_toEndOf",
+ "argumentType": "view",
+ "constant": "parent",
+ "defaultValue": "-1"
+ },
+ {
+ "name": "app:layout_constraintEnd_toStartOf",
+ "methodName": "setEndToStart",
+ "className": "layouts.ConstraintLayoutCaller",
+ "attributeName": "app:layout_constraintEnd_toStartOf",
+ "argumentType": "view",
+ "constant": "parent",
+ "defaultValue": "-1"
+ },
+ {
+ "name": "app:layout_constraintEnd_toEndOf",
+ "methodName": "setEndToEnd",
+ "className": "layouts.ConstraintLayoutCaller",
+ "attributeName": "app:layout_constraintEnd_toEndOf",
+ "argumentType": "view",
+ "constant": "parent",
+ "defaultValue": "-1"
+ },
+ {
+ "name": "android:layout_marginLeft",
+ "methodName": "setLayoutMarginLeft",
+ "className": "layouts.ConstraintLayoutCaller",
+ "attributeName": "android:layout_marginLeft",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ },
+ {
+ "name": "android:layout_marginRight",
+ "methodName": "setLayoutMarginRight",
+ "className": "layouts.ConstraintLayoutCaller",
+ "attributeName": "android:layout_marginRight",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ },
+ {
+ "name": "android:layout_marginTop",
+ "methodName": "setLayoutMarginTop",
+ "className": "layouts.ConstraintLayoutCaller",
+ "attributeName": "android:layout_marginTop",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ },
+ {
+ "name": "android:layout_marginBottom",
+ "methodName": "setLayoutMarginBottom",
+ "className": "layouts.ConstraintLayoutCaller",
+ "attributeName": "android:layout_marginBottom",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ },
+ {
+ "name": "android:layout_marginStart",
+ "methodName": "setLayoutMarginStart",
+ "className": "layouts.ConstraintLayoutCaller",
+ "attributeName": "android:layout_marginStart",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ },
+ {
+ "name": "android:layout_marginEnd",
+ "methodName": "setLayoutMarginEnd",
+ "className": "layouts.ConstraintLayoutCaller",
+ "attributeName": "android:layout_marginEnd",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ },
+ {
+ "name": "app:layout_marginBaseline",
+ "methodName": "setLayoutMarginBaseline",
+ "className": "layouts.ConstraintLayoutCaller",
+ "attributeName": "app:layout_marginBaseline",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ },
+ {
+ "name": "app:layout_goneMarginLeft",
+ "methodName": "setLayoutGoneMarginLeft",
+ "className": "layouts.ConstraintLayoutCaller",
+ "attributeName": "app:layout_goneMarginLeft",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ },
+ {
+ "name": "app:layout_goneMarginRight",
+ "methodName": "setLayoutGoneMarginRight",
+ "className": "layouts.ConstraintLayoutCaller",
+ "attributeName": "app:layout_goneMarginRight",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ },
+ {
+ "name": "app:layout_goneMarginTop",
+ "methodName": "setLayoutGoneMarginTop",
+ "className": "layouts.ConstraintLayoutCaller",
+ "attributeName": "app:layout_goneMarginTop",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ },
+ {
+ "name": "app:layout_goneMarginBottom",
+ "methodName": "setLayoutGoneMarginBottom",
+ "className": "layouts.ConstraintLayoutCaller",
+ "attributeName": "app:layout_goneMarginBottom",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ },
+ {
+ "name": "app:layout_goneMarginStart",
+ "methodName": "setLayoutGoneMarginStart",
+ "className": "layouts.ConstraintLayoutCaller",
+ "attributeName": "app:layout_goneMarginStart",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ },
+ {
+ "name": "app:layout_goneMarginEnd",
+ "methodName": "setLayoutGoneMarginEnd",
+ "className": "layouts.ConstraintLayoutCaller",
+ "attributeName": "app:layout_goneMarginEnd",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ },
+ {
+ "name": "app:layout_goneMarginBaseline",
+ "methodName": "setLayoutGoneMarginBaseline",
+ "className": "layouts.ConstraintLayoutCaller",
+ "attributeName": "app:layout_goneMarginBaseline",
+ "argumentType": "dimension",
+ "dimensionUnit": "dp"
+ },
+ {
+ "name": "app:layout_constraintHorizontal_bias",
+ "methodName": "setHorizontalBias",
+ "className": "layouts.ConstraintLayoutCaller",
+ "attributeName": "app:layout_constraintHorizontal_bias",
+ "argumentType": "float"
+ },
+ {
+ "name": "app:layout_constraintVertical_bias",
+ "methodName": "setVerticalBias",
+ "className": "layouts.ConstraintLayoutCaller",
+ "attributeName": "app:layout_constraintVertical_bias",
+ "argumentType": "float"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/layout-editor/src/main/assets/colors.xml b/layout-editor/src/main/assets/colors.xml
new file mode 100644
index 00000000..fc802bd7
--- /dev/null
+++ b/layout-editor/src/main/assets/colors.xml
@@ -0,0 +1,3 @@
+
+ #4CAF50
+
\ No newline at end of file
diff --git a/layout-editor/src/main/assets/default_font.ttf b/layout-editor/src/main/assets/default_font.ttf
new file mode 100644
index 00000000..973e658e
Binary files /dev/null and b/layout-editor/src/main/assets/default_font.ttf differ
diff --git a/layout-editor/src/main/assets/default_image.png b/layout-editor/src/main/assets/default_image.png
new file mode 100644
index 00000000..aa0f4681
Binary files /dev/null and b/layout-editor/src/main/assets/default_image.png differ
diff --git a/layout-editor/src/main/assets/editor/textmate/abyss.json b/layout-editor/src/main/assets/editor/textmate/abyss.json
new file mode 100644
index 00000000..24ae2408
--- /dev/null
+++ b/layout-editor/src/main/assets/editor/textmate/abyss.json
@@ -0,0 +1,223 @@
+{
+ "name": "Abyss",
+ "settings": [{
+ "settings": {
+ "background": "#000c18",
+ "caret": "#ddbb88",
+ "foreground": "#6688cc",
+ "invisibles": "#002040",
+ "lineHighlight": "#082050",
+ "selection": "#770811",
+ "guide": "#002952"
+ }
+ }, {
+ "scope": ["meta.embedded", "source.groovy.embedded"],
+ "settings": {
+ "foreground": "#6688cc"
+ }
+ }, {
+ "name": "Comment",
+ "scope": "comment",
+ "settings": {
+ "foreground": "#384887"
+ }
+ }, {
+ "name": "String",
+ "scope": "string",
+ "settings": {
+ "foreground": "#22aa44"
+ }
+ }, {
+ "name": "Number",
+ "scope": "constant.numeric",
+ "settings": {
+ "foreground": "#f280d0"
+ }
+ }, {
+ "name": "Built-in constant",
+ "scope": "constant.language",
+ "settings": {
+ "foreground": "#f280d0"
+ }
+ }, {
+ "name": "User-defined constant",
+ "scope": ["constant.character", "constant.other"],
+ "settings": {
+ "foreground": "#f280d0"
+ }
+ }, {
+ "name": "Variable",
+ "scope": "variable",
+ "settings": {
+ "fontStyle": ""
+ }
+ }, {
+ "name": "Keyword",
+ "scope": "keyword",
+ "settings": {
+ "foreground": "#225588"
+ }
+ }, {
+ "name": "Storage",
+ "scope": "storage",
+ "settings": {
+ "fontStyle": "",
+ "foreground": "#225588"
+ }
+ }, {
+ "name": "Storage type",
+ "scope": "storage.type",
+ "settings": {
+ "fontStyle": "italic",
+ "foreground": "#9966b8"
+ }
+ }, {
+ "name": "Class name",
+ "scope": ["entity.name.class", "entity.name.type", "entity.name.namespace", "entity.name.scope-resolution"],
+ "settings": {
+ "fontStyle": "underline",
+ "foreground": "#ffeebb"
+ }
+ }, {
+ "name": "Inherited class",
+ "scope": "entity.other.inherited-class",
+ "settings": {
+ "fontStyle": "italic underline",
+ "foreground": "#ddbb88"
+ }
+ }, {
+ "name": "Function name",
+ "scope": "entity.name.function",
+ "settings": {
+ "fontStyle": "",
+ "foreground": "#ddbb88"
+ }
+ }, {
+ "name": "Function argument",
+ "scope": "variable.parameter",
+ "settings": {
+ "fontStyle": "italic",
+ "foreground": "#2277ff"
+ }
+ }, {
+ "name": "Tag name",
+ "scope": "entity.name.tag",
+ "settings": {
+ "fontStyle": "",
+ "foreground": "#225588"
+ }
+ }, {
+ "name": "Tag attribute",
+ "scope": "entity.other.attribute-name",
+ "settings": {
+ "fontStyle": "",
+ "foreground": "#ddbb88"
+ }
+ }, {
+ "name": "Library function",
+ "scope": "support.function",
+ "settings": {
+ "fontStyle": "",
+ "foreground": "#9966b8"
+ }
+ }, {
+ "name": "Library constant",
+ "scope": "support.constant",
+ "settings": {
+ "fontStyle": "",
+ "foreground": "#9966b8"
+ }
+ }, {
+ "name": "Library class/type",
+ "scope": ["support.type", "support.class"],
+ "settings": {
+ "fontStyle": "italic",
+ "foreground": "#9966b8"
+ }
+ }, {
+ "name": "Library variable",
+ "scope": "support.other.variable",
+ "settings": {
+ "fontStyle": ""
+ }
+ }, {
+ "name": "Invalid",
+ "scope": "invalid",
+ "settings": {
+ "fontStyle": "",
+ "foreground": "#A22D44"
+ }
+ }, {
+ "name": "Invalid deprecated",
+ "scope": "invalid.deprecated",
+ "settings": {
+ "foreground": "#A22D44"
+ }
+ }, {
+ "name": "diff: header",
+ "scope": ["meta.diff", "meta.diff.header"],
+ "settings": {
+ "fontStyle": "italic",
+ "foreground": "#E0EDDD"
+ }
+ }, {
+ "name": "diff: deleted",
+ "scope": "markup.deleted",
+ "settings": {
+ "fontStyle": "",
+ "foreground": "#dc322f"
+ }
+ }, {
+ "name": "diff: changed",
+ "scope": "markup.changed",
+ "settings": {
+ "fontStyle": "",
+ "foreground": "#cb4b16"
+ }
+ }, {
+ "name": "diff: inserted",
+ "scope": "markup.inserted",
+ "settings": {
+ "foreground": "#219186"
+ }
+ }, {
+ "name": "Markup Quote",
+ "scope": "markup.quote",
+ "settings": {
+ "foreground": "#22aa44"
+ }
+ }, {
+ "name": "Markup Styling",
+ "scope": ["markup.bold", "markup.italic"],
+ "settings": {
+ "foreground": "#22aa44"
+ }
+ }, {
+ "name": "Markup: Strong",
+ "scope": "markup.bold",
+ "settings": {
+ "fontStyle": "bold"
+ }
+ }, {
+ "name": "Markup: Emphasis",
+ "scope": "markup.italic",
+ "settings": {
+ "fontStyle": "italic"
+ }
+ }, {
+ "name": "Markup Inline",
+ "scope": "markup.inline.raw",
+ "settings": {
+ "fontStyle": "",
+ "foreground": "#9966b8"
+ }
+ }, {
+ "name": "Markup Headings",
+ "scope": ["markup.heading", "markup.heading.setext"],
+ "settings": {
+ "fontStyle": "bold",
+ "foreground": "#6688cc"
+ }
+ }]
+
+}
\ No newline at end of file
diff --git a/layout-editor/src/main/assets/editor/textmate/darcula.json b/layout-editor/src/main/assets/editor/textmate/darcula.json
new file mode 100644
index 00000000..7c07f8d1
--- /dev/null
+++ b/layout-editor/src/main/assets/editor/textmate/darcula.json
@@ -0,0 +1,465 @@
+{
+ "name": "darcula",
+ "settings": [{
+ "settings": {
+ "background": "#242424",
+ "foreground": "#cccccc",
+ "lineHighlight": "#2B2B2B",
+ "selection": "#214283",
+ "highlightedDelimetersForeground": "#57f6c0"
+ }
+ },
+ {
+ "name": "Comment",
+ "scope": "comment",
+ "settings": {
+ "foreground": "#707070"
+ }
+ },
+ {
+ "name": "Operator Keywords",
+ "scope": "keyword.operator,keyword.operator.logical,keyword.operator.relational,keyword.operator.assignment,keyword.operator.comparison,keyword.operator.ternary,keyword.operator.arithmetic,keyword.operator.spread",
+ "settings": {
+ "foreground": "#CCCCCC"
+ }
+ },
+ {
+ "name": "Strings",
+ "scope": "string,string.character.escape,string.template.quoted,string.template.quoted.punctuation,string.template.quoted.punctuation.single,string.template.quoted.punctuation.double,string.type.declaration.annotation,string.template.quoted.punctuation.tag",
+ "settings": {
+ "foreground": "#6A8759"
+ }
+ },
+ {
+ "name": "String Interpolation Begin and End",
+ "scope": "punctuation.definition.template-expression.begin,punctuation.definition.template-expression.end",
+ "settings": {
+ "foreground": "#CC8242"
+ }
+ },
+ {
+ "name": "String Interpolation Body",
+ "scope": "expression.string,meta.template.expression",
+ "settings": {
+ "foreground": "#CCCCCC"
+ }
+ },
+ {
+ "name": "Number",
+ "scope": "constant.numeric",
+ "settings": {
+ "foreground": "#7A9EC2"
+ }
+ },
+ {
+ "name": "Built-in constant",
+ "scope": "constant.language,variable.language",
+ "settings": {
+ "foreground": "#CC8242"
+ }
+ },
+ {
+ "name": "User-defined constant",
+ "scope": "constant.character, constant.other",
+ "settings": {
+ "foreground": "#9E7BB0"
+ }
+ },
+ {
+ "name": "Keyword",
+ "scope": "keyword,keyword.operator.new,keyword.operator.delete,keyword.operator.static,keyword.operator.this,keyword.operator.expression",
+ "settings": {
+ "foreground": "#CC8242"
+ }
+ },
+ {
+ "name": "Types, Class Types",
+ "scope": "entity.name.type,meta.return.type,meta.type.annotation,meta.type.parameters,support.type.primitive",
+ "settings": {
+ "foreground": "#7A9EC2"
+ }
+ },
+ {
+ "name": "Storage type",
+ "scope": "storage,storage.type,storage.modifier,storage.arrow",
+ "settings": {
+ "foreground": "#CC8242"
+ }
+ },
+ {
+ "name": "Class constructor",
+ "scope": "class.instance.constructor,new.expr entity.name.type",
+ "settings": {
+ "foreground": "#FFC66D"
+ }
+ },
+ {
+ "name": "Function",
+ "scope": "support.function, entity.name.function",
+ "settings": {
+ "foreground": "#FFC66D"
+ }
+ },
+ {
+ "name": "Function Types",
+ "scope": "annotation.meta.ts, annotation.meta.tsx",
+ "settings": {
+ "foreground": "#CCCCCC"
+ }
+ },
+ {
+ "name": "Function Argument",
+ "scope": "variable.parameter, operator.rest.parameters",
+ "settings": {
+ "foreground": "#CCCCCC"
+ }
+ },
+ {
+ "name": "Variable, Property",
+ "scope": "variable.property,variable.other.property,variable.other.object.property,variable.object.property,support.variable.property",
+ "settings": {
+ "foreground": "#9E7BB0"
+ }
+ },
+ {
+ "name": "Module Name",
+ "scope": "quote.module",
+ "settings": {
+ "foreground": "#6A8759"
+ }
+ },
+ {
+ "name": "Markup Headings",
+ "scope": "markup.heading",
+ "settings": {
+ "foreground": "#CC8242"
+ }
+ },
+ {
+ "name": "Tag name",
+ "scope": "punctuation.definition.tag.html, punctuation.definition.tag.begin, punctuation.definition.tag.end, entity.name.tag",
+ "settings": {
+ "foreground": "#FFC66D"
+ }
+ },
+ {
+ "name": "Tag attribute",
+ "scope": "entity.other.attribute-name",
+ "settings": {
+ "foreground": "#CCCCCC"
+ }
+ },
+ {
+ "name": "Object Keys",
+ "scope": "meta.object-literal.key",
+ "settings": {
+ "foreground": "#9E7BB0"
+ }
+ },
+ {
+ "name": "TypeScript Class Modifiers",
+ "scope": "storage.modifier.ts",
+ "settings": {
+ "foreground": "#CC8242"
+ }
+ },
+ {
+ "name": "TypeScript Type Casting",
+ "scope": "ts.cast.expr,ts.meta.entity.class.method.new.expr.cast,ts.meta.entity.type.name.new.expr.cast,ts.meta.entity.type.name.var-single-variable.annotation,tsx.cast.expr,tsx.meta.entity.class.method.new.expr.cast,tsx.meta.entity.type.name.new.expr.cast,tsx.meta.entity.type.name.var-single-variable.annotation",
+ "settings": {
+ "foreground": "#7A9EC2"
+ }
+ },
+ {
+ "name": "TypeScript Type Declaration",
+ "scope": "ts.meta.type.support,ts.meta.type.entity.name,ts.meta.class.inherited-class,tsx.meta.type.support,tsx.meta.type.entity.name,tsx.meta.class.inherited-class,type-declaration,enum-declaration",
+ "settings": {
+ "foreground": "#7A9EC2"
+ }
+ },
+ {
+ "name": "TypeScript Method Declaration",
+ "scope": "function-declaration,method-declaration,method-overload-declaration,type-fn-type-parameters",
+ "settings": {
+ "foreground": "#FFC66D"
+ }
+ },
+ {
+ "name": "Documentation Block",
+ "scope": "comment.block.documentation",
+ "settings": {
+ "foreground": "#6A8759"
+ }
+ },
+ {
+ "name": "Documentation Highlight (JSDoc)",
+ "scope": "storage.type.class.jsdoc",
+ "settings": {
+ "foreground": "#CC8242"
+ }
+ },
+ {
+ "name": "Import-Export-All (*) Keyword",
+ "scope": "constant.language.import-export-all",
+ "settings": {
+ "foreground": "#CCCCCC"
+ }
+ },
+ {
+ "name": "Object Key Seperator",
+ "scope": "objectliteral.key.separator, punctuation.separator.key-value",
+ "settings": {
+ "foreground": "#CCCCCC"
+ }
+ },
+ {
+ "name": "Regex",
+ "scope": "regex",
+ "settings": {
+ "fontStyle": " italic"
+ }
+ },
+ {
+ "name": "Typescript Namespace",
+ "scope": "ts.meta.entity.name.namespace,tsx.meta.entity.name.namespace",
+ "settings": {
+ "foreground": "#CCCCCC"
+ }
+ },
+ {
+ "name": "Regex Character-class",
+ "scope": "regex.character-class",
+ "settings": {
+ "foreground": "#CCCCCC"
+ }
+ },
+ {
+ "name": "Class Name",
+ "scope": "entity.name.type.class",
+ "settings": {
+ "foreground": "#CCCCCC"
+ }
+ },
+ {
+ "name": "Class Inheritances",
+ "scope": "entity.other.inherited-class",
+ "settings": {
+ "foreground": "#7A9EC2"
+ }
+ },
+ {
+ "name": "Documentation Entity",
+ "scope": "entity.name.type.instance.jsdoc",
+ "settings": {
+ "foreground": "#FFC66D"
+ }
+ },
+ {
+ "name": "YAML entity",
+ "scope": "yaml.entity.name,yaml.string.entity.name",
+ "settings": {
+ "foreground": "#CC8242"
+ }
+ },
+ {
+ "name": "YAML string value",
+ "scope": "yaml.string.out",
+ "settings": {
+ "foreground": "#CCCCCC"
+ }
+ },
+ {
+ "name": "Ignored (Exceptions Rules)",
+ "scope": "meta.brace.square.ts,block.support.module,block.support.type.module,block.support.function.variable,punctuation.definition.typeparameters.begin,punctuation.definition.typeparameters.end",
+ "settings": {
+ "foreground": "#CCCCCC"
+ }
+ },
+ {
+ "name": "Regex",
+ "scope": "string.regexp",
+ "settings": {
+ "foreground": "#CC8242"
+ }
+ },
+ {
+ "name": "Regex Group/Set",
+ "scope": "punctuation.definition.group.regexp,punctuation.definition.character-class.regexp",
+ "settings": {
+ "foreground": "#FFC66D"
+ }
+ },
+ {
+ "name": "Regex Character Class",
+ "scope": "constant.other.character-class.regexp, constant.character.escape.ts",
+ "settings": {
+ "foreground": "#CCCCCC"
+ }
+ },
+ {
+ "name": "Regex Or Operator",
+ "scope": "expr.regex.or.operator",
+ "settings": {
+ "foreground": "#CCCCCC"
+ }
+ },
+ {
+ "name": "Tag string",
+ "scope": "string.template.tag,string.template.punctuation.tag,string.quoted.punctuation.tag,string.quoted.embedded.tag, string.quoted.double.tag",
+ "settings": {
+ "foreground": "#6A8759"
+ }
+ },
+ {
+ "name": "Tag function parenthesis",
+ "scope": "tag.punctuation.begin.arrow.parameters.embedded,tag.punctuation.end.arrow.parameters.embedded",
+ "settings": {
+ "foreground": "#CCCCCC"
+ }
+ },
+ {
+ "name": "Object-literal key class",
+ "scope": "object-literal.object.member.key.field.other,object-literal.object.member.key.accessor,object-literal.object.member.key.array.brace.square",
+ "settings": {
+ "foreground": "#CCCCCC"
+ }
+ },
+ {
+ "name": "CSS Property-value",
+ "scope": "property-list.property-value,property-list.constant",
+ "settings": {
+ "foreground": "#A5C261"
+ }
+ },
+ {
+ "name": "CSS Property variable",
+ "scope": "support.type.property-name.variable.css,support.type.property-name.variable.scss,variable.scss",
+ "settings": {
+ "foreground": "#7A9EC2"
+ }
+ },
+ {
+ "name": "CSS Property entity",
+ "scope": "entity.other.attribute-name.class.css,entity.other.attribute-name.class.scss,entity.other.attribute-name.parent-selector-suffix.css,entity.other.attribute-name.parent-selector-suffix.scss",
+ "settings": {
+ "foreground": "#FFC66D"
+ }
+ },
+ {
+ "name": "CSS Property-value",
+ "scope": "property-list.property-value.rgb-value, keyword.other.unit.css,keyword.other.unit.scss",
+ "settings": {
+ "foreground": "#7A9EC2"
+ }
+ },
+ {
+ "name": "CSS Property-value function",
+ "scope": "property-list.property-value.function",
+ "settings": {
+ "foreground": "#FFC66D"
+ }
+ },
+ {
+ "name": "CSS constant variables",
+ "scope": "support.constant.property-value.css,support.constant.property-value.scss",
+ "settings": {
+ "foreground": "#A5C261"
+ }
+ },
+ {
+ "name": "CSS Tag",
+ "scope": "css.entity.name.tag,scss.entity.name.tag",
+ "settings": {
+ "foreground": "#CC8242"
+ }
+ },
+ {
+ "name": "CSS ID, Selector",
+ "scope": "meta.selector.css, entity.attribute-name.id, entity.other.attribute-name.pseudo-class.css,entity.other.attribute-name.pseudo-element.css",
+ "settings": {
+ "foreground": "#FFC66D"
+ }
+ },
+ {
+ "name": "CSS Keyword",
+ "scope": "keyword.scss,keyword.css",
+ "settings": {
+ "foreground": "#CC8242"
+ }
+ },
+ {
+ "name": "Triple-slash Directive Tag",
+ "scope": "triple-slash.tag",
+ "settings": {
+ "foreground": "#CCCCCC",
+ "fontStyle": "italic"
+ }
+ },
+ {
+ "scope": "token.info-token",
+ "settings": {
+ "foreground": "#6796e6"
+ }
+ },
+ {
+ "scope": "token.warn-token",
+ "settings": {
+ "foreground": "#cd9731"
+ }
+ },
+ {
+ "scope": "token.error-token",
+ "settings": {
+ "foreground": "#f44747"
+ }
+ },
+ {
+ "scope": "token.debug-token",
+ "settings": {
+ "foreground": "#b267e6"
+ }
+ },
+ {
+ "name": "Python operators",
+ "scope": "keyword.operator.logical.python",
+ "settings": {
+ "foreground": "#CC8242"
+ }
+ },
+ {
+ "name": "Dart class type",
+ "scope": "support.class.dart",
+ "settings": {
+ "foreground": "#CC8242"
+ }
+ },
+ {
+ "name": "PHP variables",
+ "scope": ["variable.language.php", "variable.other.php"],
+ "settings": {
+ "foreground": "#9E7BB0"
+ }
+ },
+ {
+ "name": "Perl specific",
+ "scope": ["variable.other.readwrite.perl"],
+ "settings": {
+ "foreground": "#9E7BB0"
+ }
+ },
+ {
+ "name": "PHP variables",
+ "scope": ["variable.other.property.php"],
+ "settings": {
+ "foreground": "#CC8242"
+ }
+ },
+ {
+ "name": "PHP variables",
+ "scope": ["support.variable.property.php"],
+ "settings": {
+ "foreground": "#FFC66D"
+ }
+ }
+ ]
+}
diff --git a/layout-editor/src/main/assets/editor/textmate/default.json b/layout-editor/src/main/assets/editor/textmate/default.json
new file mode 100644
index 00000000..73eb60e2
--- /dev/null
+++ b/layout-editor/src/main/assets/editor/textmate/default.json
@@ -0,0 +1,60 @@
+{
+ "name": "Tomorrow-Night-XML",
+ "author": "Vivek",
+ "version": "1.0",
+ "settings": [
+ {
+ "name": "Tag",
+ "scope": "entity.name.tag",
+ "settings": {
+ "fontStyle": "bold",
+ "foreground": "#F92672"
+ }
+ },
+ {
+ "name": "Attribute names",
+ "scope": "entity.other.attribute-name",
+ "settings": {
+ "foreground": "#A6E22E"
+ }
+ },
+ {
+ "name": "Attribute values",
+ "scope": "string.quoted",
+ "settings": {
+ "fontStyle": "italic",
+ "foreground": "#E6DB74"
+ }
+ },
+ {
+ "name": "Comments",
+ "scope": "comment.block",
+ "settings": {
+ "fontStyle": "italic",
+ "foreground": "#75715E"
+ }
+ },
+ {
+ "name": "CDATA",
+ "scope": "string.unquoted.cdata.xml",
+ "settings": {
+ "foreground": "#66D9EF"
+ }
+ },
+ {
+ "name": "Namespace Tag",
+ "scope": "entity.name.namespace.xml",
+ "settings": {
+ "fontStyle": "bold",
+ "foreground": "#AE81FF"
+ }
+ },
+ {
+ "name": "Default Text",
+ "scope": "text.xml",
+ "settings": {
+ "foreground": "#F8F8F2"
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/layout-editor/src/main/assets/editor/textmate/languages.json b/layout-editor/src/main/assets/editor/textmate/languages.json
new file mode 100644
index 00000000..50770b0f
--- /dev/null
+++ b/layout-editor/src/main/assets/editor/textmate/languages.json
@@ -0,0 +1,10 @@
+{
+ "languages": [
+ {
+ "grammar": "editor/textmate/xml/syntaxes/xml.tmLanguage.json",
+ "name": "xml",
+ "scopeName": "text.xml",
+ "languageConfiguration": "editor/textmate/xml/language-configuration.json"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/layout-editor/src/main/assets/editor/textmate/quietlight.json b/layout-editor/src/main/assets/editor/textmate/quietlight.json
new file mode 100644
index 00000000..9b8bec18
--- /dev/null
+++ b/layout-editor/src/main/assets/editor/textmate/quietlight.json
@@ -0,0 +1,542 @@
+{
+ "name": "Quiet Light",
+ "tokenColors": [
+ {
+ "settings": {
+ "foreground": "#333333"
+ }
+ },
+ {
+ "scope": [
+ "meta.embedded",
+ "source.groovy.embedded"
+ ],
+ "settings": {
+ "foreground": "#333333"
+ }
+ },
+ {
+ "name": "Comments",
+ "scope": [
+ "comment",
+ "punctuation.definition.comment"
+ ],
+ "settings": {
+ "fontStyle": "italic",
+ "foreground": "#AAAAAA"
+ }
+ },
+ {
+ "name": "Comments: Preprocessor",
+ "scope": "comment.block.preprocessor",
+ "settings": {
+ "fontStyle": "",
+ "foreground": "#AAAAAA"
+ }
+ },
+ {
+ "name": "Comments: Documentation",
+ "scope": [
+ "comment.documentation",
+ "comment.block.documentation",
+ "comment.block.documentation punctuation.definition.comment "
+ ],
+ "settings": {
+ "foreground": "#448C27"
+ }
+ },
+ {
+ "name": "Invalid",
+ "scope": "invalid",
+ "settings": {
+ "foreground": "#cd3131"
+ }
+ },
+ {
+ "name": "Invalid - Illegal",
+ "scope": "invalid.illegal",
+ "settings": {
+ "foreground": "#660000"
+ }
+ },
+ {
+ "name": "Operators",
+ "scope": "keyword.operator",
+ "settings": {
+ "foreground": "#777777"
+ }
+ },
+ {
+ "name": "Keywords",
+ "scope": [
+ "keyword",
+ "storage"
+ ],
+ "settings": {
+ "foreground": "#4B69C6"
+ }
+ },
+ {
+ "name": "Types",
+ "scope": [
+ "storage.type",
+ "support.type"
+ ],
+ "settings": {
+ "foreground": "#7A3E9D"
+ }
+ },
+ {
+ "name": "Language Constants",
+ "scope": [
+ "constant.language",
+ "support.constant",
+ "variable.language"
+ ],
+ "settings": {
+ "foreground": "#9C5D27"
+ }
+ },
+ {
+ "name": "Variables",
+ "scope": [
+ "variable",
+ "support.variable"
+ ],
+ "settings": {
+ "foreground": "#7A3E9D"
+ }
+ },
+ {
+ "name": "Functions",
+ "scope": [
+ "entity.name.function",
+ "support.function"
+ ],
+ "settings": {
+ "fontStyle": "bold",
+ "foreground": "#AA3731"
+ }
+ },
+ {
+ "name": "Classes",
+ "scope": [
+ "entity.name.type",
+ "entity.name.namespace",
+ "entity.name.scope-resolution",
+ "entity.other.inherited-class",
+ "support.class"
+ ],
+ "settings": {
+ "fontStyle": "bold",
+ "foreground": "#7A3E9D"
+ }
+ },
+ {
+ "name": "Exceptions",
+ "scope": "entity.name.exception",
+ "settings": {
+ "foreground": "#660000"
+ }
+ },
+ {
+ "name": "Sections",
+ "scope": "entity.name.section",
+ "settings": {
+ "fontStyle": "bold"
+ }
+ },
+ {
+ "name": "Numbers, Characters",
+ "scope": [
+ "constant.numeric",
+ "constant.character",
+ "constant"
+ ],
+ "settings": {
+ "foreground": "#9C5D27"
+ }
+ },
+ {
+ "name": "Strings",
+ "scope": "string",
+ "settings": {
+ "foreground": "#448C27"
+ }
+ },
+ {
+ "name": "Strings: Escape Sequences",
+ "scope": "constant.character.escape",
+ "settings": {
+ "foreground": "#777777"
+ }
+ },
+ {
+ "name": "Strings: Regular Expressions",
+ "scope": "string.regexp",
+ "settings": {
+ "foreground": "#4B69C6"
+ }
+ },
+ {
+ "name": "Strings: Symbols",
+ "scope": "constant.other.symbol",
+ "settings": {
+ "foreground": "#9C5D27"
+ }
+ },
+ {
+ "name": "Punctuation",
+ "scope": "punctuation",
+ "settings": {
+ "foreground": "#777777"
+ }
+ },
+ {
+ "name": "HTML: Doctype Declaration",
+ "scope": [
+ "meta.tag.sgml.doctype",
+ "meta.tag.sgml.doctype string",
+ "meta.tag.sgml.doctype entity.name.tag",
+ "meta.tag.sgml punctuation.definition.tag.html"
+ ],
+ "settings": {
+ "foreground": "#AAAAAA"
+ }
+ },
+ {
+ "name": "HTML: Tags",
+ "scope": [
+ "meta.tag",
+ "punctuation.definition.tag.html",
+ "punctuation.definition.tag.begin.html",
+ "punctuation.definition.tag.end.html"
+ ],
+ "settings": {
+ "foreground": "#91B3E0"
+ }
+ },
+ {
+ "name": "HTML: Tag Names",
+ "scope": "entity.name.tag",
+ "settings": {
+ "foreground": "#4B69C6"
+ }
+ },
+ {
+ "name": "HTML: Attribute Names",
+ "scope": [
+ "meta.tag entity.other.attribute-name",
+ "entity.other.attribute-name.html"
+ ],
+ "settings": {
+ "fontStyle": "italic",
+ "foreground": "#8190A0"
+ }
+ },
+ {
+ "name": "HTML: Entities",
+ "scope": [
+ "constant.character.entity",
+ "punctuation.definition.entity"
+ ],
+ "settings": {
+ "foreground": "#9C5D27"
+ }
+ },
+ {
+ "name": "CSS: Selectors",
+ "scope": [
+ "meta.selector",
+ "meta.selector entity",
+ "meta.selector entity punctuation",
+ "entity.name.tag.css"
+ ],
+ "settings": {
+ "foreground": "#7A3E9D"
+ }
+ },
+ {
+ "name": "CSS: Property Names",
+ "scope": [
+ "meta.property-name",
+ "support.type.property-name"
+ ],
+ "settings": {
+ "foreground": "#9C5D27"
+ }
+ },
+ {
+ "name": "CSS: Property Values",
+ "scope": [
+ "meta.property-value",
+ "meta.property-value constant.other",
+ "support.constant.property-value"
+ ],
+ "settings": {
+ "foreground": "#448C27"
+ }
+ },
+ {
+ "name": "CSS: Important Keyword",
+ "scope": "keyword.other.important",
+ "settings": {
+ "fontStyle": "bold"
+ }
+ },
+ {
+ "name": "Markup: Changed",
+ "scope": "markup.changed",
+ "settings": {
+ "foreground": "#000000"
+ }
+ },
+ {
+ "name": "Markup: Deletion",
+ "scope": "markup.deleted",
+ "settings": {
+ "foreground": "#000000"
+ }
+ },
+ {
+ "name": "Markup: Emphasis",
+ "scope": "markup.italic",
+ "settings": {
+ "fontStyle": "italic"
+ }
+ },
+ {
+ "scope": "markup.strikethrough",
+ "settings": {
+ "fontStyle": "strikethrough"
+ }
+ },
+ {
+ "name": "Markup: Error",
+ "scope": "markup.error",
+ "settings": {
+ "foreground": "#660000"
+ }
+ },
+ {
+ "name": "Markup: Insertion",
+ "scope": "markup.inserted",
+ "settings": {
+ "foreground": "#000000"
+ }
+ },
+ {
+ "name": "Markup: Link",
+ "scope": "meta.link",
+ "settings": {
+ "foreground": "#4B69C6"
+ }
+ },
+ {
+ "name": "Markup: Output",
+ "scope": [
+ "markup.output",
+ "markup.raw"
+ ],
+ "settings": {
+ "foreground": "#777777"
+ }
+ },
+ {
+ "name": "Markup: Prompt",
+ "scope": "markup.prompt",
+ "settings": {
+ "foreground": "#777777"
+ }
+ },
+ {
+ "name": "Markup: Heading",
+ "scope": "markup.heading",
+ "settings": {
+ "foreground": "#AA3731"
+ }
+ },
+ {
+ "name": "Markup: Strong",
+ "scope": "markup.bold",
+ "settings": {
+ "fontStyle": "bold"
+ }
+ },
+ {
+ "name": "Markup: Traceback",
+ "scope": "markup.traceback",
+ "settings": {
+ "foreground": "#660000"
+ }
+ },
+ {
+ "name": "Markup: Underline",
+ "scope": "markup.underline",
+ "settings": {
+ "fontStyle": "underline"
+ }
+ },
+ {
+ "name": "Markup Quote",
+ "scope": "markup.quote",
+ "settings": {
+ "foreground": "#7A3E9D"
+ }
+ },
+ {
+ "name": "Markup Lists",
+ "scope": "markup.list",
+ "settings": {
+ "foreground": "#4B69C6"
+ }
+ },
+ {
+ "name": "Markup Styling",
+ "scope": [
+ "markup.bold",
+ "markup.italic"
+ ],
+ "settings": {
+ "foreground": "#448C27"
+ }
+ },
+ {
+ "name": "Markup Inline",
+ "scope": "markup.inline.raw",
+ "settings": {
+ "fontStyle": "",
+ "foreground": "#9C5D27"
+ }
+ },
+ {
+ "name": "Extra: Diff Range",
+ "scope": [
+ "meta.diff.range",
+ "meta.diff.index",
+ "meta.separator"
+ ],
+ "settings": {
+ "foreground": "#434343"
+ }
+ },
+ {
+ "name": "Extra: Diff From",
+ "scope": [
+ "meta.diff.header.from-file",
+ "punctuation.definition.from-file.diff"
+ ],
+ "settings": {
+ "foreground": "#4B69C6"
+ }
+ },
+ {
+ "name": "Extra: Diff To",
+ "scope": [
+ "meta.diff.header.to-file",
+ "punctuation.definition.to-file.diff"
+ ],
+ "settings": {
+ "foreground": "#4B69C6"
+ }
+ },
+ {
+ "name": "diff: deleted",
+ "scope": "markup.deleted.diff",
+ "settings": {
+ "foreground": "#C73D20"
+ }
+ },
+ {
+ "name": "diff: changed",
+ "scope": "markup.changed.diff",
+ "settings": {
+ "foreground": "#9C5D27"
+ }
+ },
+ {
+ "name": "diff: inserted",
+ "scope": "markup.inserted.diff",
+ "settings": {
+ "foreground": "#448C27"
+ }
+ },
+ {
+ "name": "JSX: Tags",
+ "scope": [
+ "punctuation.definition.tag.js",
+ "punctuation.definition.tag.begin.js",
+ "punctuation.definition.tag.end.js"
+ ],
+ "settings": {
+ "foreground": "#91B3E0"
+ }
+ },
+ {
+ "name": "JSX: InnerText",
+ "scope": "meta.jsx.children.js",
+ "settings": {
+ "foreground": "#333333ff"
+ }
+ }
+ ],
+ "colors": {
+ "focusBorder": "#A6B39B",
+ "pickerGroup.foreground": "#A6B39B",
+ "pickerGroup.border": "#749351",
+ "list.activeSelectionForeground": "#6c6c6c",
+ "quickInputList.focusBackground": "#CADEB9",
+ "list.hoverBackground": "#e0e0e0",
+ "list.activeSelectionBackground": "#c4d9b1",
+ "list.inactiveSelectionBackground": "#d3dbcd",
+ "list.highlightForeground": "#9769dc",
+ "selection.background": "#C9D0D9",
+ "editor.background": "#F5F5F5",
+ "editorWhitespace.foreground": "#AAAAAA",
+ "editor.lineHighlightBackground": "#E4F6D4",
+ "editorLineNumber.activeForeground": "#9769dc",
+ "editor.selectionBackground": "#C9D0D9",
+ "minimap.selectionHighlight": "#C9D0D9",
+ "panel.background": "#F5F5F5",
+ "sideBar.background": "#F2F2F2",
+ "sideBarSectionHeader.background": "#ede8ef",
+ "editorLineNumber.foreground": "#6D705B",
+ "editorCursor.foreground": "#54494B",
+ "inputOption.activeBorder": "#adafb7",
+ "dropdown.background": "#F5F5F5",
+ "editor.findMatchBackground": "#BF9CAC",
+ "editor.findMatchHighlightBackground": "#edc9d8",
+ "peekViewEditor.matchHighlightBackground": "#C2DFE3",
+ "peekViewTitle.background": "#F2F8FC",
+ "peekViewEditor.background": "#F2F8FC",
+ "peekViewResult.background": "#F2F8FC",
+ "peekView.border": "#705697",
+ "peekViewResult.matchHighlightBackground": "#93C6D6",
+ "tab.lastPinnedBorder": "#c9d0d9",
+ "statusBar.background": "#705697",
+ "welcomePage.tileBackground": "#f0f0f7",
+ "statusBar.noFolderBackground": "#705697",
+ "statusBar.debuggingBackground": "#705697",
+ "statusBarItem.remoteBackground": "#4e3c69",
+ "ports.iconRunningProcessForeground": "#749351",
+ "activityBar.background": "#EDEDF5",
+ "activityBar.foreground": "#705697",
+ "activityBarBadge.background": "#705697",
+ "titleBar.activeBackground": "#c4b7d7",
+ "button.background": "#705697",
+ "editorGroup.dropBackground": "#C9D0D988",
+ "inputValidation.infoBorder": "#4ec1e5",
+ "inputValidation.infoBackground": "#f2fcff",
+ "inputValidation.warningBackground": "#fffee2",
+ "inputValidation.warningBorder": "#ffe055",
+ "inputValidation.errorBackground": "#ffeaea",
+ "inputValidation.errorBorder": "#f1897f",
+ "errorForeground": "#f1897f",
+ "badge.background": "#705697AA",
+ "progressBar.background": "#705697",
+ "walkThrough.embeddedEditorBackground": "#00000014",
+ "editorIndentGuide.background": "#aaaaaa60",
+ "editorIndentGuide.activeBackground": "#777777b0"
+ },
+ "semanticHighlighting": true
+}
\ No newline at end of file
diff --git a/layout-editor/src/main/assets/editor/textmate/solarized_drak.json b/layout-editor/src/main/assets/editor/textmate/solarized_drak.json
new file mode 100644
index 00000000..b0de1a5d
--- /dev/null
+++ b/layout-editor/src/main/assets/editor/textmate/solarized_drak.json
@@ -0,0 +1,421 @@
+{
+ "name": "Solarized (dark)",
+ "tokenColors": [
+ {
+ "settings": {
+ "foreground": "#839496"
+ }
+ },
+ {
+ "scope": [
+ "meta.embedded",
+ "source.groovy.embedded"
+ ],
+ "settings": {
+ "foreground": "#839496"
+ }
+ },
+ {
+ "name": "Comment",
+ "scope": "comment",
+ "settings": {
+ "fontStyle": "italic",
+ "foreground": "#586E75"
+ }
+ },
+ {
+ "name": "String",
+ "scope": "string",
+ "settings": {
+ "foreground": "#2AA198"
+ }
+ },
+ {
+ "name": "Regexp",
+ "scope": "string.regexp",
+ "settings": {
+ "foreground": "#DC322F"
+ }
+ },
+ {
+ "name": "Number",
+ "scope": "constant.numeric",
+ "settings": {
+ "foreground": "#D33682"
+ }
+ },
+ {
+ "name": "Variable",
+ "scope": [
+ "variable.language",
+ "variable.other"
+ ],
+ "settings": {
+ "foreground": "#268BD2"
+ }
+ },
+ {
+ "name": "Keyword",
+ "scope": "keyword",
+ "settings": {
+ "foreground": "#859900"
+ }
+ },
+ {
+ "name": "Storage",
+ "scope": "storage",
+ "settings": {
+ "fontStyle": "bold",
+ "foreground": "#93A1A1"
+ }
+ },
+ {
+ "name": "Class name",
+ "scope": [
+ "entity.name.class",
+ "entity.name.type",
+ "entity.name.namespace",
+ "entity.name.scope-resolution"
+ ],
+ "settings": {
+ "fontStyle": "",
+ "foreground": "#CB4B16"
+ }
+ },
+ {
+ "name": "Function name",
+ "scope": "entity.name.function",
+ "settings": {
+ "foreground": "#268BD2"
+ }
+ },
+ {
+ "name": "Variable start",
+ "scope": "punctuation.definition.variable",
+ "settings": {
+ "foreground": "#859900"
+ }
+ },
+ {
+ "name": "Embedded code markers",
+ "scope": [
+ "punctuation.section.embedded.begin",
+ "punctuation.section.embedded.end"
+ ],
+ "settings": {
+ "foreground": "#DC322F"
+ }
+ },
+ {
+ "name": "Built-in constant",
+ "scope": [
+ "constant.language",
+ "meta.preprocessor"
+ ],
+ "settings": {
+ "foreground": "#B58900"
+ }
+ },
+ {
+ "name": "Support.construct",
+ "scope": [
+ "support.function.construct",
+ "keyword.other.new"
+ ],
+ "settings": {
+ "foreground": "#CB4B16"
+ }
+ },
+ {
+ "name": "User-defined constant",
+ "scope": [
+ "constant.character",
+ "constant.other"
+ ],
+ "settings": {
+ "foreground": "#CB4B16"
+ }
+ },
+ {
+ "name": "Inherited class",
+ "scope": "entity.other.inherited-class",
+ "settings": {
+ "foreground": "#6C71C4"
+ }
+ },
+ {
+ "name": "Function argument",
+ "scope": "variable.parameter",
+ "settings": {}
+ },
+ {
+ "name": "Tag name",
+ "scope": "entity.name.tag",
+ "settings": {
+ "foreground": "#268BD2"
+ }
+ },
+ {
+ "name": "Tag start/end",
+ "scope": "punctuation.definition.tag",
+ "settings": {
+ "foreground": "#586E75"
+ }
+ },
+ {
+ "name": "Tag attribute",
+ "scope": "entity.other.attribute-name",
+ "settings": {
+ "foreground": "#93A1A1"
+ }
+ },
+ {
+ "name": "Library function",
+ "scope": "support.function",
+ "settings": {
+ "foreground": "#268BD2"
+ }
+ },
+ {
+ "name": "Continuation",
+ "scope": "punctuation.separator.continuation",
+ "settings": {
+ "foreground": "#DC322F"
+ }
+ },
+ {
+ "name": "Library constant",
+ "scope": [
+ "support.constant",
+ "support.variable"
+ ],
+ "settings": {}
+ },
+ {
+ "name": "Library class/type",
+ "scope": [
+ "support.type",
+ "support.class"
+ ],
+ "settings": {
+ "foreground": "#859900"
+ }
+ },
+ {
+ "name": "Library Exception",
+ "scope": "support.type.exception",
+ "settings": {
+ "foreground": "#CB4B16"
+ }
+ },
+ {
+ "name": "Library variable",
+ "scope": "support.other.variable",
+ "settings": {}
+ },
+ {
+ "name": "Invalid",
+ "scope": "invalid",
+ "settings": {
+ "foreground": "#DC322F"
+ }
+ },
+ {
+ "name": "diff: header",
+ "scope": [
+ "meta.diff",
+ "meta.diff.header"
+ ],
+ "settings": {
+ "fontStyle": "italic",
+ "foreground": "#268BD2"
+ }
+ },
+ {
+ "name": "diff: deleted",
+ "scope": "markup.deleted",
+ "settings": {
+ "fontStyle": "",
+ "foreground": "#DC322F"
+ }
+ },
+ {
+ "name": "diff: changed",
+ "scope": "markup.changed",
+ "settings": {
+ "fontStyle": "",
+ "foreground": "#CB4B16"
+ }
+ },
+ {
+ "name": "diff: inserted",
+ "scope": "markup.inserted",
+ "settings": {
+ "foreground": "#859900"
+ }
+ },
+ {
+ "name": "Markup Quote",
+ "scope": "markup.quote",
+ "settings": {
+ "foreground": "#859900"
+ }
+ },
+ {
+ "name": "Markup Lists",
+ "scope": "markup.list",
+ "settings": {
+ "foreground": "#B58900"
+ }
+ },
+ {
+ "name": "Markup Styling",
+ "scope": [
+ "markup.bold",
+ "markup.italic"
+ ],
+ "settings": {
+ "foreground": "#D33682"
+ }
+ },
+ {
+ "name": "Markup: Strong",
+ "scope": "markup.bold",
+ "settings": {
+ "fontStyle": "bold"
+ }
+ },
+ {
+ "name": "Markup: Emphasis",
+ "scope": "markup.italic",
+ "settings": {
+ "fontStyle": "italic"
+ }
+ },
+ {
+ "scope": "markup.strikethrough",
+ "settings": {
+ "fontStyle": "strikethrough"
+ }
+ },
+ {
+ "name": "Markup Inline",
+ "scope": "markup.inline.raw",
+ "settings": {
+ "fontStyle": "",
+ "foreground": "#2AA198"
+ }
+ },
+ {
+ "name": "Markup Headings",
+ "scope": "markup.heading",
+ "settings": {
+ "fontStyle": "bold",
+ "foreground": "#268BD2"
+ }
+ },
+ {
+ "name": "Markup Setext Header",
+ "scope": "markup.heading.setext",
+ "settings": {
+ "fontStyle": "",
+ "foreground": "#268BD2"
+ }
+ }
+ ],
+ "colors": {
+ "focusBorder": "#2AA19899",
+ "selection.background": "#2AA19899",
+ "input.background": "#003847",
+ "input.foreground": "#93A1A1",
+ "input.placeholderForeground": "#93A1A1AA",
+ "inputOption.activeBorder": "#2AA19899",
+ "inputValidation.infoBorder": "#363b5f",
+ "inputValidation.infoBackground": "#052730",
+ "inputValidation.warningBackground": "#5d5938",
+ "inputValidation.warningBorder": "#9d8a5e",
+ "inputValidation.errorBackground": "#571b26",
+ "inputValidation.errorBorder": "#a92049",
+ "errorForeground": "#ffeaea",
+ "badge.background": "#047aa6",
+ "progressBar.background": "#047aa6",
+ "dropdown.background": "#00212B",
+ "dropdown.border": "#2AA19899",
+ "button.background": "#2AA19899",
+ "list.activeSelectionBackground": "#005A6F",
+ "quickInputList.focusBackground": "#005A6F",
+ "list.hoverBackground": "#004454AA",
+ "list.inactiveSelectionBackground": "#00445488",
+ "list.dropBackground": "#00445488",
+ "list.highlightForeground": "#1ebcc5",
+ "editor.background": "#002B36",
+ "editor.foreground": "#839496",
+ "editorWidget.background": "#00212B",
+ "editorCursor.foreground": "#D30102",
+ "editorWhitespace.foreground": "#93A1A180",
+ "editor.lineHighlightBackground": "#073642",
+ "editorLineNumber.activeForeground": "#949494",
+ "editor.selectionBackground": "#274642",
+ "minimap.selectionHighlight": "#274642",
+ "editorIndentGuide.background": "#93A1A180",
+ "editorIndentGuide.activeBackground": "#C3E1E180",
+ "editorHoverWidget.background": "#004052",
+ "editorMarkerNavigationError.background": "#AB395B",
+ "editorMarkerNavigationWarning.background": "#5B7E7A",
+ "editor.selectionHighlightBackground": "#005A6FAA",
+ "editor.wordHighlightBackground": "#004454AA",
+ "editor.wordHighlightStrongBackground": "#005A6FAA",
+ "editorBracketHighlight.foreground1": "#cdcdcdff",
+ "editorBracketHighlight.foreground2": "#b58900ff",
+ "editorBracketHighlight.foreground3": "#d33682ff",
+ "peekViewResult.background": "#00212B",
+ "peekViewEditor.background": "#10192c",
+ "peekViewTitle.background": "#00212B",
+ "peekView.border": "#2b2b4a",
+ "peekViewEditor.matchHighlightBackground": "#7744AA40",
+ "titleBar.activeBackground": "#002C39",
+ "editorGroup.border": "#00212B",
+ "editorGroup.dropBackground": "#2AA19844",
+ "editorGroupHeader.tabsBackground": "#004052",
+ "tab.activeForeground": "#d6dbdb",
+ "tab.activeBackground": "#002B37",
+ "tab.inactiveForeground": "#93A1A1",
+ "tab.inactiveBackground": "#004052",
+ "tab.border": "#003847",
+ "tab.lastPinnedBorder": "#2AA19844",
+ "activityBar.background": "#003847",
+ "panel.border": "#2b2b4a",
+ "sideBar.background": "#00212B",
+ "sideBarTitle.foreground": "#93A1A1",
+ "statusBar.foreground": "#93A1A1",
+ "statusBar.background": "#00212B",
+ "statusBar.debuggingBackground": "#00212B",
+ "statusBar.noFolderBackground": "#00212B",
+ "statusBarItem.remoteBackground": "#2AA19899",
+ "ports.iconRunningProcessForeground": "#369432",
+ "statusBarItem.prominentBackground": "#003847",
+ "statusBarItem.prominentHoverBackground": "#003847",
+ "debugToolBar.background": "#00212B",
+ "debugExceptionWidget.background": "#00212B",
+ "debugExceptionWidget.border": "#AB395B",
+ "pickerGroup.foreground": "#2AA19899",
+ "pickerGroup.border": "#2AA19899",
+ "terminal.ansiBlack": "#073642",
+ "terminal.ansiRed": "#dc322f",
+ "terminal.ansiGreen": "#859900",
+ "terminal.ansiYellow": "#b58900",
+ "terminal.ansiBlue": "#268bd2",
+ "terminal.ansiMagenta": "#d33682",
+ "terminal.ansiCyan": "#2aa198",
+ "terminal.ansiWhite": "#eee8d5",
+ "terminal.ansiBrightBlack": "#002b36",
+ "terminal.ansiBrightRed": "#cb4b16",
+ "terminal.ansiBrightGreen": "#586e75",
+ "terminal.ansiBrightYellow": "#657b83",
+ "terminal.ansiBrightBlue": "#839496",
+ "terminal.ansiBrightMagenta": "#6c71c4",
+ "terminal.ansiBrightCyan": "#93a1a1",
+ "terminal.ansiBrightWhite": "#fdf6e3"
+ },
+ "semanticHighlighting": true
+}
\ No newline at end of file
diff --git a/layout-editor/src/main/assets/editor/textmate/xml/language-configuration.json b/layout-editor/src/main/assets/editor/textmate/xml/language-configuration.json
new file mode 100644
index 00000000..934eb6b5
--- /dev/null
+++ b/layout-editor/src/main/assets/editor/textmate/xml/language-configuration.json
@@ -0,0 +1,104 @@
+{
+ "comments": {
+ "blockComment": [
+ ""
+ ]
+ },
+ "brackets": [
+ [
+ ""
+ ],
+ [
+ "<",
+ ">"
+ ],
+ [
+ "{",
+ "}"
+ ],
+ [
+ "(",
+ ")"
+ ]
+ ],
+ "autoClosingPairs": [
+ {
+ "open": "{",
+ "close": "}"
+ },
+ {
+ "open": "[",
+ "close": "]"
+ },
+ {
+ "open": "(",
+ "close": ")"
+ },
+ {
+ "open": "\"",
+ "close": "\"",
+ "notIn": [
+ "string"
+ ]
+ },
+ {
+ "open": "'",
+ "close": "'",
+ "notIn": [
+ "string"
+ ]
+ },
+ {
+ "open": "",
+ "notIn": [
+ "comment",
+ "string"
+ ]
+ },
+ {
+ "open": "",
+ "notIn": [
+ "comment",
+ "string"
+ ]
+ }
+ ],
+ "surroundingPairs": [
+ {
+ "open": "'",
+ "close": "'"
+ },
+ {
+ "open": "\"",
+ "close": "\""
+ },
+ {
+ "open": "{",
+ "close": "}"
+ },
+ {
+ "open": "[",
+ "close": "]"
+ },
+ {
+ "open": "(",
+ "close": ")"
+ },
+ {
+ "open": "<",
+ "close": ">"
+ }
+ ],
+ "colorizedBracketPairs": [],
+ "folding": {
+ "markers": {
+ "start": "^\\s*",
+ "end": "^\\s*"
+ }
+ },
+ "wordPattern": "(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)"
+}
\ No newline at end of file
diff --git a/layout-editor/src/main/assets/editor/textmate/xml/syntaxes/xml.tmLanguage.json b/layout-editor/src/main/assets/editor/textmate/xml/syntaxes/xml.tmLanguage.json
new file mode 100644
index 00000000..181a9822
--- /dev/null
+++ b/layout-editor/src/main/assets/editor/textmate/xml/syntaxes/xml.tmLanguage.json
@@ -0,0 +1,389 @@
+{
+ "information_for_contributors": [
+ "This file has been converted from https://github.com/atom/language-xml/blob/master/grammars/xml.cson",
+ "If you want to provide a fix or improvement, please create a pull request against the original repository.",
+ "Once accepted there, we are happy to receive an update request."
+ ],
+ "version": "https://github.com/atom/language-xml/commit/7bc75dfe779ad5b35d9bf4013d9181864358cb49",
+ "name": "XML",
+ "scopeName": "text.xml",
+ "patterns": [
+ {
+ "begin": "(<\\?)\\s*([-_a-zA-Z0-9]+)",
+ "captures": {
+ "1": {
+ "name": "punctuation.definition.tag.xml"
+ },
+ "2": {
+ "name": "entity.name.tag.xml"
+ }
+ },
+ "end": "(\\?>)",
+ "name": "meta.tag.preprocessor.xml",
+ "patterns": [
+ {
+ "match": " ([a-zA-Z-]+)",
+ "name": "entity.other.attribute-name.xml"
+ },
+ {
+ "include": "#doublequotedString"
+ },
+ {
+ "include": "#singlequotedString"
+ }
+ ]
+ },
+ {
+ "begin": "()",
+ "name": "meta.tag.sgml.doctype.xml",
+ "patterns": [
+ {
+ "include": "#internalSubset"
+ }
+ ]
+ },
+ {
+ "include": "#comments"
+ },
+ {
+ "begin": "(<)((?:([-_a-zA-Z0-9]+)(:))?([-_a-zA-Z0-9:]+))(?=(\\s[^>]*)?>\\2>)",
+ "beginCaptures": {
+ "1": {
+ "name": "punctuation.definition.tag.xml"
+ },
+ "2": {
+ "name": "entity.name.tag.xml"
+ },
+ "3": {
+ "name": "entity.name.tag.namespace.xml"
+ },
+ "4": {
+ "name": "punctuation.separator.namespace.xml"
+ },
+ "5": {
+ "name": "entity.name.tag.localname.xml"
+ }
+ },
+ "end": "(>)()((?:([-_a-zA-Z0-9]+)(:))?([-_a-zA-Z0-9:]+))(>)",
+ "endCaptures": {
+ "1": {
+ "name": "punctuation.definition.tag.xml"
+ },
+ "2": {
+ "name": "punctuation.definition.tag.xml"
+ },
+ "3": {
+ "name": "entity.name.tag.xml"
+ },
+ "4": {
+ "name": "entity.name.tag.namespace.xml"
+ },
+ "5": {
+ "name": "punctuation.separator.namespace.xml"
+ },
+ "6": {
+ "name": "entity.name.tag.localname.xml"
+ },
+ "7": {
+ "name": "punctuation.definition.tag.xml"
+ }
+ },
+ "name": "meta.tag.no-content.xml",
+ "patterns": [
+ {
+ "include": "#tagStuff"
+ }
+ ]
+ },
+ {
+ "begin": "(?)(?:([-\\w\\.]+)((:)))?([-\\w\\.:]+)",
+ "captures": {
+ "1": {
+ "name": "punctuation.definition.tag.xml"
+ },
+ "2": {
+ "name": "entity.name.tag.namespace.xml"
+ },
+ "3": {
+ "name": "entity.name.tag.xml"
+ },
+ "4": {
+ "name": "punctuation.separator.namespace.xml"
+ },
+ "5": {
+ "name": "entity.name.tag.localname.xml"
+ }
+ },
+ "end": "(/?>)",
+ "name": "meta.tag.xml",
+ "patterns": [
+ {
+ "include": "#tagStuff"
+ }
+ ]
+ },
+ {
+ "include": "#entity"
+ },
+ {
+ "include": "#bare-ampersand"
+ },
+ {
+ "begin": "<%@",
+ "beginCaptures": {
+ "0": {
+ "name": "punctuation.section.embedded.begin.xml"
+ }
+ },
+ "end": "%>",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.section.embedded.end.xml"
+ }
+ },
+ "name": "source.java-props.embedded.xml",
+ "patterns": [
+ {
+ "match": "page|include|taglib",
+ "name": "keyword.other.page-props.xml"
+ }
+ ]
+ },
+ {
+ "begin": "<%[!=]?(?!--)",
+ "beginCaptures": {
+ "0": {
+ "name": "punctuation.section.embedded.begin.xml"
+ }
+ },
+ "end": "(?!--)%>",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.section.embedded.end.xml"
+ }
+ },
+ "name": "source.java.embedded.xml",
+ "patterns": [
+ {
+ "include": "source.java"
+ }
+ ]
+ },
+ {
+ "begin": "",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.string.end.xml"
+ }
+ },
+ "name": "string.unquoted.cdata.xml"
+ }
+ ],
+ "repository": {
+ "EntityDecl": {
+ "begin": "()",
+ "patterns": [
+ {
+ "include": "#doublequotedString"
+ },
+ {
+ "include": "#singlequotedString"
+ }
+ ]
+ },
+ "bare-ampersand": {
+ "match": "&",
+ "name": "invalid.illegal.bad-ampersand.xml"
+ },
+ "doublequotedString": {
+ "begin": "\"",
+ "beginCaptures": {
+ "0": {
+ "name": "punctuation.definition.string.begin.xml"
+ }
+ },
+ "end": "\"",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.string.end.xml"
+ }
+ },
+ "name": "string.quoted.double.xml",
+ "patterns": [
+ {
+ "include": "#entity"
+ },
+ {
+ "include": "#bare-ampersand"
+ }
+ ]
+ },
+ "entity": {
+ "captures": {
+ "1": {
+ "name": "punctuation.definition.constant.xml"
+ },
+ "3": {
+ "name": "punctuation.definition.constant.xml"
+ }
+ },
+ "match": "(&)([:a-zA-Z_][:a-zA-Z0-9_.-]*|#[0-9]+|#x[0-9a-fA-F]+)(;)",
+ "name": "constant.character.entity.xml"
+ },
+ "internalSubset": {
+ "begin": "(\\[)",
+ "captures": {
+ "1": {
+ "name": "punctuation.definition.constant.xml"
+ }
+ },
+ "end": "(\\])",
+ "name": "meta.internalsubset.xml",
+ "patterns": [
+ {
+ "include": "#EntityDecl"
+ },
+ {
+ "include": "#parameterEntity"
+ },
+ {
+ "include": "#comments"
+ }
+ ]
+ },
+ "parameterEntity": {
+ "captures": {
+ "1": {
+ "name": "punctuation.definition.constant.xml"
+ },
+ "3": {
+ "name": "punctuation.definition.constant.xml"
+ }
+ },
+ "match": "(%)([:a-zA-Z_][:a-zA-Z0-9_.-]*)(;)",
+ "name": "constant.character.parameter-entity.xml"
+ },
+ "singlequotedString": {
+ "begin": "'",
+ "beginCaptures": {
+ "0": {
+ "name": "punctuation.definition.string.begin.xml"
+ }
+ },
+ "end": "'",
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.string.end.xml"
+ }
+ },
+ "name": "string.quoted.single.xml",
+ "patterns": [
+ {
+ "include": "#entity"
+ },
+ {
+ "include": "#bare-ampersand"
+ }
+ ]
+ },
+ "tagStuff": {
+ "patterns": [
+ {
+ "captures": {
+ "1": {
+ "name": "entity.other.attribute-name.namespace.xml"
+ },
+ "2": {
+ "name": "entity.other.attribute-name.xml"
+ },
+ "3": {
+ "name": "punctuation.separator.namespace.xml"
+ },
+ "4": {
+ "name": "entity.other.attribute-name.localname.xml"
+ }
+ },
+ "match": "(?:^|\\s+)(?:([-\\w.]+)((:)))?([-\\w.:]+)\\s*="
+ },
+ {
+ "include": "#doublequotedString"
+ },
+ {
+ "include": "#singlequotedString"
+ }
+ ]
+ },
+ "comments": {
+ "patterns": [
+ {
+ "begin": "<%--",
+ "captures": {
+ "0": {
+ "name": "punctuation.definition.comment.xml"
+ }
+ },
+ "end": "--%>",
+ "name": "comment.block.xml"
+ },
+ {
+ "begin": "",
+ "name": "comment.block.xml",
+ "patterns": [
+ {
+ "begin": "--(?!>)",
+ "captures": {
+ "0": {
+ "name": "invalid.illegal.bad-comments-or-CDATA.xml"
+ }
+ },
+ "end": "",
+ "name": "comment.block.xml"
+ }
+ ]
+ }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/layout-editor/src/main/assets/icon_day.png b/layout-editor/src/main/assets/icon_day.png
new file mode 100644
index 00000000..bfaa9441
Binary files /dev/null and b/layout-editor/src/main/assets/icon_day.png differ
diff --git a/layout-editor/src/main/assets/icon_night.png b/layout-editor/src/main/assets/icon_night.png
new file mode 100644
index 00000000..bfaa9441
Binary files /dev/null and b/layout-editor/src/main/assets/icon_night.png differ
diff --git a/layout-editor/src/main/assets/palette/buttons.json b/layout-editor/src/main/assets/palette/buttons.json
new file mode 100644
index 00000000..5ad9420f
--- /dev/null
+++ b/layout-editor/src/main/assets/palette/buttons.json
@@ -0,0 +1,81 @@
+[
+ {
+ "name": "Button",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.buttons.ButtonDesign",
+ "iconName": "ic_palette_button",
+ "defaultAttributes": {
+ "android:text": "Button"
+ }
+ },
+ {
+ "name": "ImageButton",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.buttons.ImageButtonDesign",
+ "iconName": "ic_palette_image_button",
+ "defaultAttributes": {
+ "android:src": "@drawable/ic_launcher_round"
+ }
+ },
+ {
+ "name": "ChipGroup",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.buttons.ChipGroupDesign",
+ "iconName": "ic_palette_chip_group",
+ "defaultAttributes": {
+ "android:layout_width": "match_parent",
+ "android:padding": "8dp"
+ }
+ },
+ {
+ "name": "Chip",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.buttons.ChipDesign",
+ "iconName": "ic_palette_chip",
+ "defaultAttributes": {
+ "android:text": "Chip"
+ }
+ },
+ {
+ "name": "CheckBox",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.buttons.CheckBoxDesign",
+ "iconName": "ic_palette_check_box",
+ "defaultAttributes": {
+ "android:text": "CheckBox"
+ }
+ },
+ {
+ "name": "RadioGroup",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.buttons.RadioGroupDesign",
+ "iconName": "ic_palette_radio_group",
+ "defaultAttributes": {
+ "android:layout_width": "match_parent",
+ "android:padding": "8dp"
+ }
+ },
+ {
+ "name": "RadioButton",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.buttons.RadioButtonDesign",
+ "iconName": "ic_palette_radio_button",
+ "defaultAttributes": {
+ "android:text": "RadioButton"
+ }
+ },
+ {
+ "name": "ToggleButton",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.buttons.ToggleButtonDesign",
+ "iconName": "ic_palette_toggle_button",
+ "defaultAttributes": {
+ "android:text": "ToggleButton"
+ }
+ },
+ {
+ "name": "Switch",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.buttons.SwitchDesign",
+ "iconName": "ic_palette_switch",
+ "defaultAttributes": {
+ "android:text": "Switch"
+ }
+ },
+ {
+ "name": "FloatingActionButton",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.buttons.FloatingActionButtonDesign",
+ "iconName": "ic_palette_floating_action_button"
+ }
+]
\ No newline at end of file
diff --git a/layout-editor/src/main/assets/palette/common.json b/layout-editor/src/main/assets/palette/common.json
new file mode 100644
index 00000000..46f546aa
--- /dev/null
+++ b/layout-editor/src/main/assets/palette/common.json
@@ -0,0 +1,85 @@
+[
+ {
+ "name": "LinearLayout (H)",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.layouts.LinearLayoutDesign",
+ "iconName": "ic_palette_linear_layout_horz",
+ "defaultAttributes": {
+ "android:layout_width": "match_parent",
+ "android:orientation": "horizontal",
+ "android:padding": "8dp"
+ }
+ },
+ {
+ "name": "LinearLayout (V)",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.layouts.LinearLayoutDesign",
+ "iconName": "ic_palette_linear_layout_vert",
+ "defaultAttributes": {
+ "android:layout_height": "match_parent",
+ "android:orientation": "vertical",
+ "android:padding": "8dp"
+ }
+ },
+ {
+ "name": "ScrollView (unable to scroll in the editor)",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.containers.ScrollViewDesign",
+ "iconName": "ic_palette_scroll_view",
+ "defaultAttributes": {
+ "android:layout_height": "match_parent",
+ "android:layout_width": "match_parent",
+ "android:padding": "8dp"
+ }
+ },
+ {
+ "name": "HorizontalScrollView (unable to scroll in the editor)",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.containers.HorizontalScrollViewDesign",
+ "iconName": "ic_palette_scroll_view",
+ "defaultAttributes": {
+ "android:layout_height": "match_parent",
+ "android:layout_width": "match_parent",
+ "android:padding": "8dp"
+ }
+ },
+ {
+ "name": "TextView",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.text.TextViewDesign",
+ "iconName": "ic_palette_text_view",
+ "defaultAttributes": {
+ "android:text": "TextView"
+ }
+ },
+ {
+ "name": "Button",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.buttons.ButtonDesign",
+ "iconName": "ic_palette_button",
+ "defaultAttributes": {
+ "android:text": "Button"
+ }
+ },
+ {
+ "name": "ImageView",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.widgets.ImageViewDesign",
+ "iconName": "ic_palette_image_view",
+ "defaultAttributes": {
+ "android:layout_width": "48dp",
+ "android:layout_height": "48dp",
+ "android:src": "@drawable/ic_launcher_round"
+ }
+ },
+ {
+ "name": "Switch",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.buttons.SwitchDesign",
+ "iconName": "ic_palette_switch",
+ "defaultAttributes": {
+ "android:text": "Switch"
+ }
+ },
+ {
+ "name": "RecyclerView",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.containers.RecyclerViewDesign",
+ "iconName": "ic_palette_recycler_view",
+ "defaultAttributes": {
+ "android:layout_width":"match_parent",
+ "android:layout_height":"100dp"
+ }
+ }
+]
\ No newline at end of file
diff --git a/layout-editor/src/main/assets/palette/containers.json b/layout-editor/src/main/assets/palette/containers.json
new file mode 100644
index 00000000..6b8e8630
--- /dev/null
+++ b/layout-editor/src/main/assets/palette/containers.json
@@ -0,0 +1,155 @@
+[
+ {
+ "name": "Spinner",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.containers.SpinnerDesign",
+ "iconName": "ic_palette_spinner"
+ },
+ {
+ "name": "RecyclerView",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.containers.RecyclerViewDesign",
+ "iconName": "ic_palette_recycler_view",
+ "defaultAttributes": {
+ "android:layout_width":"match_parent",
+ "android:layout_height":"100dp"
+ }
+ },
+ {
+ "name": "ScrollView (unable to scroll in the editor)",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.containers.ScrollViewDesign",
+ "iconName": "ic_palette_scroll_view",
+ "defaultAttributes": {
+ "android:layout_width":"match_parent",
+ "android:layout_height":"match_parent",
+ "android:padding": "8dp"
+ }
+ },
+ {
+ "name": "HorizontalScrollView (unable to scroll in the editor)",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.containers.HorizontalScrollViewDesign",
+ "iconName": "ic_palette_horizontal_scroll_view",
+ "defaultAttributes": {
+ "android:layout_width":"match_parent",
+ "android:layout_height":"match_parent",
+ "android:padding": "8dp"
+ }
+ },
+ {
+ "name": "NestedScrollView (unable to scroll in the editor)",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.containers.NestedScrollViewDesign",
+ "iconName": "ic_palette_nested_scroll_view",
+ "defaultAttributes": {
+ "android:layout_width":"match_parent",
+ "android:layout_height":"match_parent",
+ "android:padding": "8dp"
+ }
+ },
+ {
+ "name": "ViewPager",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.containers.ViewPagerDesign",
+ "iconName": "ic_palette_view_pager",
+ "defaultAttributes": {
+ "android:layout_width":"match_parent",
+ "android:layout_height":"match_parent"
+ }
+ },
+ {
+ "name": "CardView",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.containers.CardViewDesign",
+ "iconName": "ic_palette_card_view",
+ "defaultAttributes": {
+ "android:layout_width":"match_parent"
+ }
+ },
+ {
+ "name": "AppBarLayout",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.containers.AppBarLayoutDesign",
+ "iconName": "ic_palette_app_bar_layout",
+ "defaultAttributes": {
+ "android:layout_width":"match_parent"
+ }
+ },
+ {
+ "name": "BottomAppBar",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.containers.BottomAppBarDesign",
+ "iconName": "ic_palette_bottom_app_bar",
+ "defaultAttributes": {
+ "android:layout_width":"match_parent",
+ "android:gravity":"bottom"
+ }
+ },
+ {
+ "name": "NavigationView",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.containers.NavigationViewDesign",
+ "iconName": "ic_palette_navigation_view",
+ "defaultAttributes": {
+ "android:layout_width":"100dp"
+ }
+ },
+ {
+ "name": "BottomNavigationView",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.containers.BottomNavigationViewDesign",
+ "iconName": "ic_palette_bottom_navigation_view",
+ "defaultAttributes": {
+ "android:layout_width":"match_parent",
+ "android:gravity":"bottom"
+ }
+ },
+ {
+ "name": "Toolbar",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.containers.ToolbarDesign",
+ "iconName": "ic_palette_toolbar",
+ "defaultAttributes": {
+ "android:layout_width":"match_parent"
+ }
+ },
+ {
+ "name": "MaterialToolbar",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.containers.MaterialToolbarDesign",
+ "iconName": "ic_palette_toolbar",
+ "defaultAttributes": {
+ "android:layout_width":"match_parent"
+ }
+ },
+ {
+ "name": "TabLayout",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.containers.TabLayoutDesign",
+ "iconName": "ic_palette_tab_layout",
+ "defaultAttributes": {
+ "android:layout_width":"match_parent"
+ }
+ },
+ {
+ "name": "TabItem",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.containers.TabItemDesign",
+ "iconName": "ic_palette_tab_item",
+ "defaultAttributes": {
+ "android:layout_height":"match_parent"
+ }
+ },
+ {
+ "name": "ListView (old, use RecyclerView instead)",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.legacy.ListViewDesign",
+ "iconName": "ic_palette_list_view",
+ "defaultAttributes": {
+ "android:layout_width":"match_parent",
+ "android:layout_height":"100dp"
+ }
+ },
+ {
+ "name": "TabHost (old, use TabLayout + ViewPager2 instead)",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.legacy.TabHostDesign",
+ "iconName": "ic_palette_tab_host",
+ "defaultAttributes": {
+ "android:layout_width":"match_parent"
+ }
+ },
+ {
+ "name": "GridView (old, use RecyclerView + GridLayoutManager instead)",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.legacy.GridViewDesign",
+ "iconName": "ic_palette_grid_view",
+ "defaultAttributes": {
+ "android:layout_width":"match_parent",
+ "android:layout_height":"100dp"
+ }
+ }
+]
\ No newline at end of file
diff --git a/layout-editor/src/main/assets/palette/layouts.json b/layout-editor/src/main/assets/palette/layouts.json
new file mode 100644
index 00000000..85763176
--- /dev/null
+++ b/layout-editor/src/main/assets/palette/layouts.json
@@ -0,0 +1,103 @@
+[
+ {
+ "name": "RelativeLayout",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.layouts.RelativeLayoutDesign",
+ "iconName": "ic_palette_relative_layout",
+ "defaultAttributes": {
+ "android:layout_width": "match_parent",
+ "android:padding": "8dp"
+ }
+ },
+ {
+ "name": "ConstraintLayout",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.layouts.ConstraintLayoutDesign",
+ "iconName": "ic_palette_constraint_layout",
+ "defaultAttributes": {
+ "android:layout_width": "match_parent",
+ "android:padding": "8dp"
+ }
+ },
+ {
+ "name": "LinearLayout (H)",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.layouts.LinearLayoutDesign",
+ "iconName": "ic_palette_linear_layout_horz",
+ "defaultAttributes": {
+ "android:layout_width": "match_parent",
+ "android:orientation": "horizontal",
+ "android:padding": "8dp"
+ }
+ },
+ {
+ "name": "LinearLayout (V)",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.layouts.LinearLayoutDesign",
+ "iconName": "ic_palette_linear_layout_vert",
+ "defaultAttributes": {
+ "android:layout_height": "match_parent",
+ "android:orientation": "vertical",
+ "android:padding": "8dp"
+ }
+ },
+ {
+ "name": "FrameLayout",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.layouts.FrameLayoutDesign",
+ "iconName": "ic_palette_frame_layout",
+ "defaultAttributes": {
+ "android:layout_width": "match_parent",
+ "android:padding": "8dp"
+ }
+ },
+ {
+ "name": "TableLayout",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.layouts.TableLayoutDesign",
+ "iconName": "ic_palette_table_layout",
+ "defaultAttributes": {
+ "android:layout_width": "match_parent",
+ "android:padding": "8dp"
+ }
+ },
+ {
+ "name": "TableRow",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.layouts.TableRowDesign",
+ "iconName": "ic_palette_table_row",
+ "defaultAttributes": {
+ "android:layout_width": "match_parent",
+ "android:padding": "8dp"
+ }
+ },
+ {
+ "name": "Space",
+ "className": "android.widget.Space",
+ "iconName": "ic_palette_space",
+ "defaultAttributes": {
+ "android:layout_width": "match_parent",
+ "android:padding": "8dp"
+ }
+ },
+ {
+ "name": "GridLayout (old, use ConstraintLayout instead)",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.legacy.GridLayoutDesign",
+ "iconName": "ic_palette_grid_layout",
+ "defaultAttributes": {
+ "android:layout_width":"match_parent"
+ }
+ },
+ {
+ "name": "CoordinatorLayout",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.layouts.CoordinatorLayoutDesign",
+ "iconName": "ic_palette_coordinator_layout",
+ "defaultAttributes": {
+ "android:layout_width": "match_parent",
+ "android:padding": "8dp"
+ }
+ },
+ {
+ "name": "DrawerLayout",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.layouts.DrawerLayoutDesign",
+ "iconName": "ic_palette_drawer_layout",
+ "defaultAttributes": {
+ "android:layout_width": "match_parent",
+ "android:layout_height": "match_parent",
+ "android:padding": "8dp"
+ }
+ }
+]
\ No newline at end of file
diff --git a/layout-editor/src/main/assets/palette/text.json b/layout-editor/src/main/assets/palette/text.json
new file mode 100644
index 00000000..370e177b
--- /dev/null
+++ b/layout-editor/src/main/assets/palette/text.json
@@ -0,0 +1,161 @@
+[
+ {
+ "name": "TextView",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.text.TextViewDesign",
+ "iconName": "ic_palette_text_view",
+ "defaultAttributes": {
+ "android:text": "@string/default_string"
+ }
+ },
+ {
+ "name": "Plain Text",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.text.EditTextDesign",
+ "iconName": "ic_palette_edit_text",
+ "defaultAttributes": {
+ "android:hint": "Plain Text",
+ "android:inputType":"text"
+ }
+ },
+ {
+ "name": "Password",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.text.EditTextDesign",
+ "iconName": "ic_palette_password_textfield",
+ "defaultAttributes": {
+ "android:hint": "Password",
+ "android:inputType":"textPassword"
+ }
+ },
+ {
+ "name": "Password (Numeric)",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.text.EditTextDesign",
+ "iconName": "ic_palette_password_numeric_textfield",
+ "defaultAttributes": {
+ "android:hint": "Password (Numeric)",
+ "android:inputType":"numberPassword"
+ }
+ },
+ {
+ "name": "E-mail",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.text.EditTextDesign",
+ "iconName": "ic_palette_email_textfield",
+ "defaultAttributes": {
+ "android:hint": "E-mail",
+ "android:inputType":"textEmailAddress"
+ }
+ },
+ {
+ "name": "Phone",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.text.EditTextDesign",
+ "iconName": "ic_palette_phone_textfield",
+ "defaultAttributes": {
+ "android:hint": "Phone",
+ "android:inputType":"phone"
+ }
+ },
+ {
+ "name": "Postal Address",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.text.EditTextDesign",
+ "iconName": "ic_palette_postal_address_textfield",
+ "defaultAttributes": {
+ "android:hint": "Postal Address",
+ "android:inputType":"textPostalAddress"
+ }
+ },
+ {
+ "name": "Multiline Text",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.text.EditTextDesign",
+ "iconName": "ic_palette_textfield_multiline",
+ "defaultAttributes": {
+ "android:hint": "Multiline Text",
+ "android:inputType":"textMultiLine"
+ }
+ },
+ {
+ "name": "Time",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.text.EditTextDesign",
+ "iconName": "ic_palette_time_textfield",
+ "defaultAttributes": {
+ "android:hint": "Time",
+ "android:inputType":"time"
+ }
+ },
+ {
+ "name": "Date",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.text.EditTextDesign",
+ "iconName": "ic_palette_date_textfield",
+ "defaultAttributes": {
+ "android:hint": "Date",
+ "android:inputType":"date"
+ }
+ },
+ {
+ "name": "Number",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.text.EditTextDesign",
+ "iconName": "ic_palette_number_textfield",
+ "defaultAttributes": {
+ "android:hint": "Number",
+ "android:inputType":"number"
+ }
+ },
+ {
+ "name": "Number (Signed)",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.text.EditTextDesign",
+ "iconName": "ic_palette_number_signed_textfield",
+ "defaultAttributes": {
+ "android:hint": "Number (Signed)",
+ "android:inputType":"numberSigned"
+ }
+ },
+ {
+ "name": "Number (Decimal)",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.text.EditTextDesign",
+ "iconName": "ic_palette_number_decimal_textfield",
+ "defaultAttributes": {
+ "android:hint": "Number (Decimal)",
+ "android:inputType":"numberDecimal"
+ }
+ },
+ {
+ "name": "AutoCompleteTextView",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.text.AutoCompleteTextViewDesign",
+ "iconName": "ic_palette_auto_complete_text_view",
+ "defaultAttributes": {
+ "android:hint": "AutoCompleteTextView"
+ }
+ },
+ {
+ "name": "MultiAutoCompleteTextView",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.text.MultiAutoCompleteTextViewDesign",
+ "iconName": "ic_palette_multi_auto_complete_text_view",
+ "defaultAttributes": {
+ "android:hint": "MultiAutoCompleteTextView"
+ }
+ },
+ {
+ "name": "CheckedTextView",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.text.CheckedTextViewDesign",
+ "iconName": "ic_palette_checked_text_view",
+ "defaultAttributes": {
+ "android:text": "CheckedTextView"
+ }
+ },
+ {
+ "name": "TextInputLayout",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.text.TextInputLayoutDesign",
+ "iconName": "ic_palette_linear_layout_vert",
+ "defaultAttributes": {
+ "android:layout_width": "match_parent",
+ "android:layout_height": "wrap_content"
+ }
+ },
+ {
+ "name": "TextInputEditText",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.text.TextInputEditTextDesign",
+ "iconName": "ic_palette_edit_text",
+ "defaultAttributes": {
+ "android:layout_width": "match_parent",
+ "android:layout_height": "wrap_content",
+ "android:inputType": "text"
+ }
+ }
+]
\ No newline at end of file
diff --git a/layout-editor/src/main/assets/palette/widgets.json b/layout-editor/src/main/assets/palette/widgets.json
new file mode 100644
index 00000000..a15b4070
--- /dev/null
+++ b/layout-editor/src/main/assets/palette/widgets.json
@@ -0,0 +1,118 @@
+[
+ {
+ "name": "View",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.widgets.ViewDesign",
+ "iconName": "ic_palette_view",
+ "defaultAttributes": {
+ "android:layout_width": "match_parent",
+ "android:layout_height": "30dp",
+ "android:padding": "8dp"
+ }
+ },
+ {
+ "name": "ImageView",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.widgets.ImageViewDesign",
+ "iconName": "ic_palette_image_view",
+ "defaultAttributes": {
+ "android:layout_width": "48dp",
+ "android:layout_height": "48dp",
+ "android:src": "@drawable/ic_launcher_round"
+ }
+ },
+ {
+ "name": "WebView",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.widgets.WebViewDesign",
+ "iconName": "ic_palette_web_view",
+ "defaultAttributes": {
+ "android:layout_width": "match_parent",
+ "android:layout_height": "200dp"
+ }
+ },
+ {
+ "name": "VideoView",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.widgets.VideoViewDesign",
+ "iconName": "ic_palette_video_view",
+ "defaultAttributes": {
+ "android:layout_width": "match_parent",
+ "android:layout_height": "200dp"
+ }
+ },
+ {
+ "name": "CalendarView",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.widgets.CalendarViewDesign",
+ "iconName": "ic_palette_calendar_view",
+ "defaultAttributes": {
+ "android:layout_width": "match_parent"
+ }
+ },
+ {
+ "name": "Text Clock",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.widgets.TextClockDesign",
+ "iconName": "ic_palette_text_clock",
+ "defaultAttributes": {
+ "android:textSize": "20sp"
+ }
+ },
+ {
+ "name": "ProgressBar",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.widgets.ProgressBarDesign",
+ "iconName": "ic_palette_progress_bar",
+ "defaultAttributes": {
+ "android:layout_width": "match_parent"
+ }
+ },
+ {
+ "name": "ProgressBar (Horizontal)",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.widgets.ProgressBarDesign",
+ "iconName": "ic_palette_progress_bar_horizontal",
+ "defaultAttributes": {
+ "android:layout_width": "match_parent"
+ }
+ },
+ {
+ "name": "SeekBar",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.widgets.SeekBarDesign",
+ "iconName": "ic_palette_seek_bar",
+ "defaultAttributes": {
+ "android:layout_width": "match_parent"
+ }
+ },
+ {
+ "name": "SeekBar (Discrete)",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.widgets.SeekBarDesign",
+ "iconName": "ic_palette_seek_bar_discrete",
+ "defaultAttributes": {
+ "android:layout_width": "match_parent"
+ }
+ },
+ {
+ "name": "RatingBar",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.widgets.RatingBarDesign",
+ "iconName": "ic_palette_rating_bar"
+ },
+ {
+ "name": "SearchView",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.widgets.SearchViewDesign",
+ "iconName": "ic_palette_search_view",
+ "defaultAttributes": {
+ "android:layout_width": "match_parent"
+ }
+ },
+ {
+ "name": "TextureView",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.widgets.TextureViewDesign",
+ "iconName": "ic_palette_texture_view",
+ "defaultAttributes": {
+ "android:layout_width": "match_parent"
+ }
+ },
+ {
+ "name": "SurfaceView",
+ "className": "org.appdevforall.codeonthego.layouteditor.editor.palette.widgets.SurfaceViewDesign",
+ "iconName": "ic_palette_surface_view",
+ "defaultAttributes": {
+ "android:layout_width": "match_parent",
+ "android:layout_height": "200dp"
+ }
+ }
+]
\ No newline at end of file
diff --git a/layout-editor/src/main/assets/strings.xml b/layout-editor/src/main/assets/strings.xml
new file mode 100644
index 00000000..3dc9e613
--- /dev/null
+++ b/layout-editor/src/main/assets/strings.xml
@@ -0,0 +1,3 @@
+
+ Hello World!
+
\ No newline at end of file
diff --git a/layout-editor/src/main/assets/tooltips.json b/layout-editor/src/main/assets/tooltips.json
new file mode 100644
index 00000000..6ec133c1
--- /dev/null
+++ b/layout-editor/src/main/assets/tooltips.json
@@ -0,0 +1,800 @@
+[
+ {
+ "tag": "android.content.Context",
+ "summary": "Interface to global information about an application environment.",
+ "detail": "Interface to global information about an application environment. This is an abstract class whose implementation is provided by the Android system. It allows access to application-specific resources and classes, as well as up-calls for application-level operations such as launching activities, broadcasting and receiving intents, etc.",
+ "uri": "a/android/content/Context.html",
+ "label": "View full documentation"
+ },
+ {
+ "tag": "android.view.SurfaceView",
+ "summary": "Provides a dedicated drawing surface embedded inside of a view hierarchy.",
+ "detail": "Provides a dedicated drawing surface embedded inside of a view hierarchy. You can control the format of this surface and, if you like, its size; the SurfaceView takes care of placing the surface at the correct location on the screen The surface is Z ordered so that it is behind the window holding its SurfaceView; the SurfaceView punches a hole in its window to allow its surface to be displayed. The view hierarchy will take care of correctly compositing with the Surface any siblings of the Surfac...",
+ "uri": "a/android/view/SurfaceView.html",
+ "label": "View full documentation"
+ },
+ {
+ "tag": "android.view.TextureView",
+ "summary": "A TextureView can be used to display a content stream, such as that coming from a camera preview, a video, or an OpenGL scene.",
+ "detail": "A TextureView can be used to display a content stream, such as that coming from a camera preview, a video, or an OpenGL scene. The content stream can come from the application's process as well as a remote process. TextureView can only be used in a hardware accelerated window. When rendered in software, TextureView will draw nothing. TextureView vs. SurfaceView Capabilities TextureView SurfaceView Supports View alpha X U+ Supports rotations X Supports clipping X HDR support Limited (on Android T...",
+ "uri": "a/android/view/TextureView.html",
+ "label": "View full documentation"
+ },
+ {
+ "tag": "android.view.View",
+ "summary": "This class represents the basic building block for user interface components.",
+ "detail": "This class represents the basic building block for user interface components. A View occupies a rectangular area on the screen and is responsible for drawing and event handling. View is the base class for widgets, which are used to create interactive UI components (buttons, text fields, etc.). The ViewGroup subclass is the base class for layouts, which are invisible containers that hold other Views (or other ViewGroups) and define their layout properties. Developer Guides For information about u...",
+ "uri": "a/android/view/View.html",
+ "label": "View full documentation"
+ },
+ {
+ "tag": "android.webkit.WebView",
+ "summary": "A View that displays web pages.",
+ "detail": "A View that displays web pages. Basic usage In most cases, we recommend using a standard web browser, like Chrome, to deliver content to the user. To learn more about web browsers, read the guide on invoking a browser with an intent. WebView objects allow you to display web content as part of your activity layout, but lack some of the features of fully-developed browsers. A WebView is useful when you need increased control over the UI and advanced configuration options that will allow you to emb...",
+ "uri": "a/android/webkit/WebView.html",
+ "label": "View full documentation"
+ },
+ {
+ "tag": "android.widget.AutoCompleteTextView",
+ "summary": "An editable text view that shows completion suggestions automatically while the user is typing.",
+ "detail": "An editable text view that shows completion suggestions automatically while the user is typing. The list of suggestions is displayed in a drop down menu from which the user can choose an item to replace the content of the edit box with. The drop down can be dismissed at any time by pressing the back key or, if no item is selected in the drop down, by pressing the enter/dpad center key. The list of suggestions is obtained from a data adapter and appears only after a given number of characters def...",
+ "uri": "a/android/widget/AutoCompleteTextView.html",
+ "label": "View full documentation"
+ },
+ {
+ "tag": "android.widget.Button",
+ "summary": "A user interface element the user can tap or click to perform an action.",
+ "detail": "A user interface element the user can tap or click to perform an action. To display a button in an activity, add a button to the activity's layout XML file: To specify an action when the button is pressed, set a click listener on the button object in the corresponding activity code: public class MyActivity extends Activity { protected void onCreate(...",
+ "uri": "a/android/widget/Button.html",
+ "label": "View full documentation"
+ },
+ {
+ "tag": "android.widget.CalendarView",
+ "summary": "This class is a calendar widget for displaying and selecting dates.",
+ "detail": "This class is a calendar widget for displaying and selecting dates. The range of dates supported by this calendar is configurable. The exact appearance and interaction model of this widget may vary between OS versions and themes (e.g. Holo versus Material), but in general a user can select a date by tapping on it and can scroll or fling the calendar to a desired date. Summary Nested classes interface CalendarView.OnDateChangeListener The callback used to indicate the user changes the date. XML a...",
+ "uri": "a/android/widget/CalendarView.html",
+ "label": "View full documentation"
+ },
+ {
+ "tag": "android.widget.CheckBox",
+ "summary": "A checkbox is a specific type of two-states button that can be either checked or unchecked.",
+ "detail": "A checkbox is a specific type of two-states button that can be either checked or unchecked. A example usage of a checkbox inside your activity would be the following: public class MyActivity extends Activity { protected void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.content_layout_id); final CheckBox checkBox = (CheckBox) findViewById(R.id.checkbox_id); if (checkBox.isChecked()) { checkBox.setChecked(false); } } } See the Checkboxes guide. XML attributes See Compo...",
+ "uri": "a/android/widget/CheckBox.html",
+ "label": "View full documentation"
+ },
+ {
+ "tag": "android.widget.CheckedTextView",
+ "summary": "An extension to TextView that supports the Checkable interface and displays.",
+ "detail": "An extension to TextView that supports the Checkable interface and displays. This is useful when used in a ListView where the setChoiceMode has been set to something other than CHOICE_MODE_NONE. Summary XML attributes android:checkMark Drawable used for the check mark graphic. android:checkMarkTint Tint to apply to the check mark. android:checkMarkTintMode Blending mode used to apply the check mark tint. android:checked Indicates the initial checked state of this text. Inherited XML attributes F...",
+ "uri": "a/android/widget/CheckedTextView.html",
+ "label": "View full documentation"
+ },
+ {
+ "tag": "android.widget.EditText",
+ "summary": "A user interface element for entering and modifying text.",
+ "detail": "A user interface element for entering and modifying text. When you define an edit text widget, you must specify the R.styleable.TextView_inputType attribute. For example, for plain text input set inputType to \"text\": Choosing the input type configures the keyboard type that is shown, acceptable characters, and appearance of the edit text. For example, i...",
+ "uri": "a/android/widget/EditText.html",
+ "label": "View full documentation"
+ },
+ {
+ "tag": "android.widget.FrameLayout",
+ "summary": "FrameLayout is designed to block out an area on the screen to display a single item.",
+ "detail": "FrameLayout is designed to block out an area on the screen to display a single item. Generally, FrameLayout should be used to hold a single child view, because it can be difficult to organize child views in a way that's scalable to different screen sizes without the children overlapping each other. You can, however, add multiple children to a FrameLayout and control their position within the FrameLayout by assigning gravity to each child, using the android:layout_gravity attribute. Child views a...",
+ "uri": "a/android/widget/FrameLayout.html",
+ "label": "View full documentation"
+ },
+ {
+ "tag": "android.widget.GridLayout",
+ "summary": "A layout that places its children in a rectangular grid.",
+ "detail": "A layout that places its children in a rectangular grid. The grid is composed of a set of infinitely thin lines that separate the viewing area into cells. Throughout the API, grid lines are referenced by grid indices. A grid with N columns has N + 1 grid indices that run from 0 through N inclusive. Regardless of how GridLayout is configured, grid index 0 is fixed to the leading edge of the container and grid index N is fixed to its trailing edge (after padding is taken into account). Row and Col...",
+ "uri": "a/android/widget/GridLayout.html",
+ "label": "View full documentation"
+ },
+ {
+ "tag": "android.widget.GridView",
+ "summary": "A view that shows items in two-dimensional scrolling grid.",
+ "detail": "A view that shows items in two-dimensional scrolling grid. The items in the grid come from the ListAdapter associated with this view. See the Grid View guide.",
+ "uri": "a/android/widget/GridView.html",
+ "label": "View full documentation"
+ },
+ {
+ "tag": "android.widget.HorizontalScrollView",
+ "summary": "Layout container for a view hierarchy that can be scrolled by the user, allowing it to be larger than the physical display.",
+ "detail": "Layout container for a view hierarchy that can be scrolled by the user, allowing it to be larger than the physical display. A HorizontalScrollView is a FrameLayout, meaning you should place one child in it containing the entire contents to scroll; this child may itself be a layout manager with a complex hierarchy of objects. A child that is often used is a LinearLayout in a horizontal orientation, presenting a horizontal array of top-level items that the user can scroll through. The TextView cla...",
+ "uri": "a/android/widget/HorizontalScrollView.html",
+ "label": "View full documentation"
+ },
+ {
+ "tag": "android.widget.ImageButton",
+ "summary": "Displays a button with an image (instead of text) that can be pressed or clicked by the user.",
+ "detail": "Displays a button with an image (instead of text) that can be pressed or clicked by the user. By default, an ImageButton looks like a regular Button, with the standard button background that changes color during different button states. The image on the surface of the button is defined either by the android:src attribute in the XML element or by the ImageView.setImageResource(int) method. To remove the standard button background image, define your own background image or set the ba...",
+ "uri": "a/android/widget/ImageButton.html",
+ "label": "View full documentation"
+ },
+ {
+ "tag": "android.widget.ImageView",
+ "summary": "Displays image resources, for example Bitmap or Drawable resources.",
+ "detail": "Displays image resources, for example Bitmap or Drawable resources. ImageView is also commonly used to apply tints to an image and handle image scaling. The following XML snippet is a common example of using an ImageView to display an image resource:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/layout-editor/src/main/res/drawable/ic_linear_vertical.xml b/layout-editor/src/main/res/drawable/ic_linear_vertical.xml
new file mode 100644
index 00000000..011acf36
--- /dev/null
+++ b/layout-editor/src/main/res/drawable/ic_linear_vertical.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/drawable/ic_preview_layout.xml b/layout-editor/src/main/res/drawable/ic_preview_layout.xml
new file mode 100644
index 00000000..f4119a4b
--- /dev/null
+++ b/layout-editor/src/main/res/drawable/ic_preview_layout.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/layout-editor/src/main/res/drawable/ic_progress_check.xml b/layout-editor/src/main/res/drawable/ic_progress_check.xml
new file mode 100644
index 00000000..f6a763e8
--- /dev/null
+++ b/layout-editor/src/main/res/drawable/ic_progress_check.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/drawable/ic_radiobox_marked.xml b/layout-editor/src/main/res/drawable/ic_radiobox_marked.xml
new file mode 100644
index 00000000..58e2f312
--- /dev/null
+++ b/layout-editor/src/main/res/drawable/ic_radiobox_marked.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/drawable/ic_radiogroup.xml b/layout-editor/src/main/res/drawable/ic_radiogroup.xml
new file mode 100644
index 00000000..0e1430f2
--- /dev/null
+++ b/layout-editor/src/main/res/drawable/ic_radiogroup.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/drawable/ic_relative_layout_outline.xml b/layout-editor/src/main/res/drawable/ic_relative_layout_outline.xml
new file mode 100644
index 00000000..56eb3a76
--- /dev/null
+++ b/layout-editor/src/main/res/drawable/ic_relative_layout_outline.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/drawable/ic_search.xml b/layout-editor/src/main/res/drawable/ic_search.xml
new file mode 100644
index 00000000..390774bb
--- /dev/null
+++ b/layout-editor/src/main/res/drawable/ic_search.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/layout-editor/src/main/res/drawable/ic_seekbar.xml b/layout-editor/src/main/res/drawable/ic_seekbar.xml
new file mode 100644
index 00000000..e2116774
--- /dev/null
+++ b/layout-editor/src/main/res/drawable/ic_seekbar.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/drawable/ic_textview.xml b/layout-editor/src/main/res/drawable/ic_textview.xml
new file mode 100644
index 00000000..603b6013
--- /dev/null
+++ b/layout-editor/src/main/res/drawable/ic_textview.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/drawable/ic_toggle_switch.xml b/layout-editor/src/main/res/drawable/ic_toggle_switch.xml
new file mode 100644
index 00000000..0488e5de
--- /dev/null
+++ b/layout-editor/src/main/res/drawable/ic_toggle_switch.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/drawable/image_broken.xml b/layout-editor/src/main/res/drawable/image_broken.xml
new file mode 100644
index 00000000..77fa647a
--- /dev/null
+++ b/layout-editor/src/main/res/drawable/image_broken.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/drawable/image_filter_center_focus.xml b/layout-editor/src/main/res/drawable/image_filter_center_focus.xml
new file mode 100644
index 00000000..8cc7a364
--- /dev/null
+++ b/layout-editor/src/main/res/drawable/image_filter_center_focus.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/drawable/image_outline.xml b/layout-editor/src/main/res/drawable/image_outline.xml
new file mode 100644
index 00000000..f99da1a7
--- /dev/null
+++ b/layout-editor/src/main/res/drawable/image_outline.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/drawable/information.xml b/layout-editor/src/main/res/drawable/information.xml
new file mode 100644
index 00000000..b0bdf2e1
--- /dev/null
+++ b/layout-editor/src/main/res/drawable/information.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/drawable/menu.xml b/layout-editor/src/main/res/drawable/menu.xml
new file mode 100644
index 00000000..2d9b5dec
--- /dev/null
+++ b/layout-editor/src/main/res/drawable/menu.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/drawable/palette_advanced.xml b/layout-editor/src/main/res/drawable/palette_advanced.xml
new file mode 100644
index 00000000..05a96b3a
--- /dev/null
+++ b/layout-editor/src/main/res/drawable/palette_advanced.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/drawable/palette_outline.xml b/layout-editor/src/main/res/drawable/palette_outline.xml
new file mode 100644
index 00000000..e584cefd
--- /dev/null
+++ b/layout-editor/src/main/res/drawable/palette_outline.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/drawable/plus.xml b/layout-editor/src/main/res/drawable/plus.xml
new file mode 100644
index 00000000..ff301507
--- /dev/null
+++ b/layout-editor/src/main/res/drawable/plus.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/drawable/redo_variant.xml b/layout-editor/src/main/res/drawable/redo_variant.xml
new file mode 100644
index 00000000..9c0076a3
--- /dev/null
+++ b/layout-editor/src/main/res/drawable/redo_variant.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/drawable/rounded_rect.xml b/layout-editor/src/main/res/drawable/rounded_rect.xml
new file mode 100644
index 00000000..72b647b3
--- /dev/null
+++ b/layout-editor/src/main/res/drawable/rounded_rect.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/drawable/shape.xml b/layout-editor/src/main/res/drawable/shape.xml
new file mode 100644
index 00000000..60bdd1ae
--- /dev/null
+++ b/layout-editor/src/main/res/drawable/shape.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/drawable/shape_outline.xml b/layout-editor/src/main/res/drawable/shape_outline.xml
new file mode 100644
index 00000000..0123e6e3
--- /dev/null
+++ b/layout-editor/src/main/res/drawable/shape_outline.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/drawable/share_variant.xml b/layout-editor/src/main/res/drawable/share_variant.xml
new file mode 100644
index 00000000..4a647bc8
--- /dev/null
+++ b/layout-editor/src/main/res/drawable/share_variant.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/drawable/source_merge.xml b/layout-editor/src/main/res/drawable/source_merge.xml
new file mode 100644
index 00000000..36922a75
--- /dev/null
+++ b/layout-editor/src/main/res/drawable/source_merge.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/drawable/transparent.png b/layout-editor/src/main/res/drawable/transparent.png
new file mode 100644
index 00000000..84daafbf
Binary files /dev/null and b/layout-editor/src/main/res/drawable/transparent.png differ
diff --git a/layout-editor/src/main/res/drawable/transparent_background.xml b/layout-editor/src/main/res/drawable/transparent_background.xml
new file mode 100644
index 00000000..838534f6
--- /dev/null
+++ b/layout-editor/src/main/res/drawable/transparent_background.xml
@@ -0,0 +1,6 @@
+
+
+
diff --git a/layout-editor/src/main/res/drawable/undo_variant.xml b/layout-editor/src/main/res/drawable/undo_variant.xml
new file mode 100644
index 00000000..cb3faa8b
--- /dev/null
+++ b/layout-editor/src/main/res/drawable/undo_variant.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/drawable/view_type.xml b/layout-editor/src/main/res/drawable/view_type.xml
new file mode 100644
index 00000000..dc180fa8
--- /dev/null
+++ b/layout-editor/src/main/res/drawable/view_type.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/drawable/xml.xml b/layout-editor/src/main/res/drawable/xml.xml
new file mode 100644
index 00000000..2e066756
--- /dev/null
+++ b/layout-editor/src/main/res/drawable/xml.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/font/jetbrains_mono_regular.ttf b/layout-editor/src/main/res/font/jetbrains_mono_regular.ttf
new file mode 100644
index 00000000..8da8aa40
Binary files /dev/null and b/layout-editor/src/main/res/font/jetbrains_mono_regular.ttf differ
diff --git a/layout-editor/src/main/res/font/poppins_regular.ttf b/layout-editor/src/main/res/font/poppins_regular.ttf
new file mode 100644
index 00000000..9f0c71b7
Binary files /dev/null and b/layout-editor/src/main/res/font/poppins_regular.ttf differ
diff --git a/layout-editor/src/main/res/font/source_sans_pro_regular.ttf b/layout-editor/src/main/res/font/source_sans_pro_regular.ttf
new file mode 100644
index 00000000..98e85797
Binary files /dev/null and b/layout-editor/src/main/res/font/source_sans_pro_regular.ttf differ
diff --git a/layout-editor/src/main/res/font/ubuntu_regular.ttf b/layout-editor/src/main/res/font/ubuntu_regular.ttf
new file mode 100644
index 00000000..f98a2dab
Binary files /dev/null and b/layout-editor/src/main/res/font/ubuntu_regular.ttf differ
diff --git a/layout-editor/src/main/res/layout/activity_crash.xml b/layout-editor/src/main/res/layout/activity_crash.xml
new file mode 100644
index 00000000..1a434aab
--- /dev/null
+++ b/layout-editor/src/main/res/layout/activity_crash.xml
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/layout/activity_drawable_manager.xml b/layout-editor/src/main/res/layout/activity_drawable_manager.xml
new file mode 100644
index 00000000..afa40604
--- /dev/null
+++ b/layout-editor/src/main/res/layout/activity_drawable_manager.xml
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/layout-editor/src/main/res/layout/activity_editor.xml b/layout-editor/src/main/res/layout/activity_editor.xml
new file mode 100644
index 00000000..5d1cd610
--- /dev/null
+++ b/layout-editor/src/main/res/layout/activity_editor.xml
@@ -0,0 +1,164 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/layout-editor/src/main/res/layout/activity_help.xml b/layout-editor/src/main/res/layout/activity_help.xml
new file mode 100644
index 00000000..7caf6c2f
--- /dev/null
+++ b/layout-editor/src/main/res/layout/activity_help.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/layout-editor/src/main/res/layout/activity_layout_editor.xml b/layout-editor/src/main/res/layout/activity_layout_editor.xml
new file mode 100644
index 00000000..c5f96e65
--- /dev/null
+++ b/layout-editor/src/main/res/layout/activity_layout_editor.xml
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/layout-editor/src/main/res/layout/activity_preview_drawable.xml b/layout-editor/src/main/res/layout/activity_preview_drawable.xml
new file mode 100644
index 00000000..6d044bbd
--- /dev/null
+++ b/layout-editor/src/main/res/layout/activity_preview_drawable.xml
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/layout-editor/src/main/res/layout/activity_preview_layout.xml b/layout-editor/src/main/res/layout/activity_preview_layout.xml
new file mode 100644
index 00000000..93de36df
--- /dev/null
+++ b/layout-editor/src/main/res/layout/activity_preview_layout.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/layout/activity_resource_manager.xml b/layout-editor/src/main/res/layout/activity_resource_manager.xml
new file mode 100644
index 00000000..c6db09b8
--- /dev/null
+++ b/layout-editor/src/main/res/layout/activity_resource_manager.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/layout-editor/src/main/res/layout/activity_show_x_m_l.xml b/layout-editor/src/main/res/layout/activity_show_x_m_l.xml
new file mode 100644
index 00000000..aefc1001
--- /dev/null
+++ b/layout-editor/src/main/res/layout/activity_show_x_m_l.xml
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/layout-editor/src/main/res/layout/dialog_available_attributes.xml b/layout-editor/src/main/res/layout/dialog_available_attributes.xml
new file mode 100644
index 00000000..fe0ed562
--- /dev/null
+++ b/layout-editor/src/main/res/layout/dialog_available_attributes.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/layout/dialog_select_dpis.xml b/layout-editor/src/main/res/layout/dialog_select_dpis.xml
new file mode 100644
index 00000000..66db0135
--- /dev/null
+++ b/layout-editor/src/main/res/layout/dialog_select_dpis.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/layout-editor/src/main/res/layout/fragment_layout_editor.xml b/layout-editor/src/main/res/layout/fragment_layout_editor.xml
new file mode 100644
index 00000000..4e4fbc73
--- /dev/null
+++ b/layout-editor/src/main/res/layout/fragment_layout_editor.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/layout-editor/src/main/res/layout/fragment_resources.xml b/layout-editor/src/main/res/layout/fragment_resources.xml
new file mode 100644
index 00000000..221b5205
--- /dev/null
+++ b/layout-editor/src/main/res/layout/fragment_resources.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/layout-editor/src/main/res/layout/layout_boolean_dialog.xml b/layout-editor/src/main/res/layout/layout_boolean_dialog.xml
new file mode 100644
index 00000000..1da74636
--- /dev/null
+++ b/layout-editor/src/main/res/layout/layout_boolean_dialog.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
diff --git a/layout-editor/src/main/res/layout/layout_color_dialog.xml b/layout-editor/src/main/res/layout/layout_color_dialog.xml
new file mode 100644
index 00000000..4e5a26f8
--- /dev/null
+++ b/layout-editor/src/main/res/layout/layout_color_dialog.xml
@@ -0,0 +1,194 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/layout-editor/src/main/res/layout/layout_color_dialog_flag.xml b/layout-editor/src/main/res/layout/layout_color_dialog_flag.xml
new file mode 100644
index 00000000..28548e43
--- /dev/null
+++ b/layout-editor/src/main/res/layout/layout_color_dialog_flag.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/layout/layout_color_item.xml b/layout-editor/src/main/res/layout/layout_color_item.xml
new file mode 100644
index 00000000..f5bccd59
--- /dev/null
+++ b/layout-editor/src/main/res/layout/layout_color_item.xml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/layout-editor/src/main/res/layout/layout_drawable_grid_item.xml b/layout-editor/src/main/res/layout/layout_drawable_grid_item.xml
new file mode 100644
index 00000000..70f85775
--- /dev/null
+++ b/layout-editor/src/main/res/layout/layout_drawable_grid_item.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/layout/layout_drawable_item.xml b/layout-editor/src/main/res/layout/layout_drawable_item.xml
new file mode 100644
index 00000000..203241aa
--- /dev/null
+++ b/layout-editor/src/main/res/layout/layout_drawable_item.xml
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/layout-editor/src/main/res/layout/layout_font_item.xml b/layout-editor/src/main/res/layout/layout_font_item.xml
new file mode 100644
index 00000000..b8f34ee7
--- /dev/null
+++ b/layout-editor/src/main/res/layout/layout_font_item.xml
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/layout-editor/src/main/res/layout/layout_font_item_dialog.xml b/layout-editor/src/main/res/layout/layout_font_item_dialog.xml
new file mode 100644
index 00000000..ec9f0506
--- /dev/null
+++ b/layout-editor/src/main/res/layout/layout_font_item_dialog.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/layout-editor/src/main/res/layout/layout_navigation_header.xml b/layout-editor/src/main/res/layout/layout_navigation_header.xml
new file mode 100644
index 00000000..3aa46beb
--- /dev/null
+++ b/layout-editor/src/main/res/layout/layout_navigation_header.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
diff --git a/layout-editor/src/main/res/layout/layout_palette_item.xml b/layout-editor/src/main/res/layout/layout_palette_item.xml
new file mode 100644
index 00000000..a0b94f7f
--- /dev/null
+++ b/layout-editor/src/main/res/layout/layout_palette_item.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/layout/layout_preview_drawable.xml b/layout-editor/src/main/res/layout/layout_preview_drawable.xml
new file mode 100644
index 00000000..fcf654f5
--- /dev/null
+++ b/layout-editor/src/main/res/layout/layout_preview_drawable.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
diff --git a/layout-editor/src/main/res/layout/layout_project_layout_item.xml b/layout-editor/src/main/res/layout/layout_project_layout_item.xml
new file mode 100644
index 00000000..d1e46cfa
--- /dev/null
+++ b/layout-editor/src/main/res/layout/layout_project_layout_item.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/layout/layout_select_dpi_item.xml b/layout-editor/src/main/res/layout/layout_select_dpi_item.xml
new file mode 100644
index 00000000..e0b7226f
--- /dev/null
+++ b/layout-editor/src/main/res/layout/layout_select_dpi_item.xml
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/layout-editor/src/main/res/layout/layout_size_dialog.xml b/layout-editor/src/main/res/layout/layout_size_dialog.xml
new file mode 100644
index 00000000..ee8e00bb
--- /dev/null
+++ b/layout-editor/src/main/res/layout/layout_size_dialog.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/layout/layout_structure_view_item.xml b/layout-editor/src/main/res/layout/layout_structure_view_item.xml
new file mode 100644
index 00000000..065d70d5
--- /dev/null
+++ b/layout-editor/src/main/res/layout/layout_structure_view_item.xml
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/layout-editor/src/main/res/layout/layout_values_item.xml b/layout-editor/src/main/res/layout/layout_values_item.xml
new file mode 100644
index 00000000..f420fcb3
--- /dev/null
+++ b/layout-editor/src/main/res/layout/layout_values_item.xml
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/layout/layout_values_item_dialog.xml b/layout-editor/src/main/res/layout/layout_values_item_dialog.xml
new file mode 100644
index 00000000..48a845d8
--- /dev/null
+++ b/layout-editor/src/main/res/layout/layout_values_item_dialog.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/layout-editor/src/main/res/layout/list_project_file.xml b/layout-editor/src/main/res/layout/list_project_file.xml
new file mode 100644
index 00000000..32630b3b
--- /dev/null
+++ b/layout-editor/src/main/res/layout/list_project_file.xml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/layout-editor/src/main/res/layout/preference_switch_style.xml b/layout-editor/src/main/res/layout/preference_switch_style.xml
new file mode 100644
index 00000000..fbae8da4
--- /dev/null
+++ b/layout-editor/src/main/res/layout/preference_switch_style.xml
@@ -0,0 +1,9 @@
+
+
diff --git a/layout-editor/src/main/res/layout/show_attribute_item.xml b/layout-editor/src/main/res/layout/show_attribute_item.xml
new file mode 100644
index 00000000..05fc6ebf
--- /dev/null
+++ b/layout-editor/src/main/res/layout/show_attribute_item.xml
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/layout-editor/src/main/res/layout/show_attributes_dialog.xml b/layout-editor/src/main/res/layout/show_attributes_dialog.xml
new file mode 100644
index 00000000..7e4f18d7
--- /dev/null
+++ b/layout-editor/src/main/res/layout/show_attributes_dialog.xml
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/layout-editor/src/main/res/layout/textinputlayout.xml b/layout-editor/src/main/res/layout/textinputlayout.xml
new file mode 100644
index 00000000..d31b1db9
--- /dev/null
+++ b/layout-editor/src/main/res/layout/textinputlayout.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/menu/menu_device_size.xml b/layout-editor/src/main/res/menu/menu_device_size.xml
new file mode 100644
index 00000000..aafeb256
--- /dev/null
+++ b/layout-editor/src/main/res/menu/menu_device_size.xml
@@ -0,0 +1,16 @@
+
+
diff --git a/layout-editor/src/main/res/menu/menu_drawable.xml b/layout-editor/src/main/res/menu/menu_drawable.xml
new file mode 100644
index 00000000..1d03c79d
--- /dev/null
+++ b/layout-editor/src/main/res/menu/menu_drawable.xml
@@ -0,0 +1,16 @@
+
+
diff --git a/layout-editor/src/main/res/menu/menu_editor.xml b/layout-editor/src/main/res/menu/menu_editor.xml
new file mode 100644
index 00000000..5c83f643
--- /dev/null
+++ b/layout-editor/src/main/res/menu/menu_editor.xml
@@ -0,0 +1,86 @@
+
+
diff --git a/layout-editor/src/main/res/menu/menu_font.xml b/layout-editor/src/main/res/menu/menu_font.xml
new file mode 100644
index 00000000..75c96a17
--- /dev/null
+++ b/layout-editor/src/main/res/menu/menu_font.xml
@@ -0,0 +1,12 @@
+
+
diff --git a/layout-editor/src/main/res/menu/menu_layout_file_options.xml b/layout-editor/src/main/res/menu/menu_layout_file_options.xml
new file mode 100644
index 00000000..89f768a8
--- /dev/null
+++ b/layout-editor/src/main/res/menu/menu_layout_file_options.xml
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/menu/menu_project_file_options.xml b/layout-editor/src/main/res/menu/menu_project_file_options.xml
new file mode 100644
index 00000000..813444b1
--- /dev/null
+++ b/layout-editor/src/main/res/menu/menu_project_file_options.xml
@@ -0,0 +1,16 @@
+
+
diff --git a/layout-editor/src/main/res/menu/menu_resource_manager.xml b/layout-editor/src/main/res/menu/menu_resource_manager.xml
new file mode 100644
index 00000000..cd33152e
--- /dev/null
+++ b/layout-editor/src/main/res/menu/menu_resource_manager.xml
@@ -0,0 +1,22 @@
+
+
diff --git a/layout-editor/src/main/res/menu/menu_values.xml b/layout-editor/src/main/res/menu/menu_values.xml
new file mode 100644
index 00000000..135d330d
--- /dev/null
+++ b/layout-editor/src/main/res/menu/menu_values.xml
@@ -0,0 +1,12 @@
+
+
diff --git a/layout-editor/src/main/res/menu/menu_view_type.xml b/layout-editor/src/main/res/menu/menu_view_type.xml
new file mode 100644
index 00000000..f66be375
--- /dev/null
+++ b/layout-editor/src/main/res/menu/menu_view_type.xml
@@ -0,0 +1,12 @@
+
+
diff --git a/layout-editor/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/layout-editor/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 00000000..345888d2
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-hdpi/ic_launcher.png b/layout-editor/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 00000000..d7b1dd98
Binary files /dev/null and b/layout-editor/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/layout-editor/src/main/res/mipmap-hdpi/ic_launcher_background.png b/layout-editor/src/main/res/mipmap-hdpi/ic_launcher_background.png
new file mode 100644
index 00000000..4b2d3f25
Binary files /dev/null and b/layout-editor/src/main/res/mipmap-hdpi/ic_launcher_background.png differ
diff --git a/layout-editor/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/layout-editor/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..c38d468b
Binary files /dev/null and b/layout-editor/src/main/res/mipmap-hdpi/ic_launcher_foreground.png differ
diff --git a/layout-editor/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png b/layout-editor/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png
new file mode 100644
index 00000000..17ed1580
Binary files /dev/null and b/layout-editor/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png differ
diff --git a/layout-editor/src/main/res/mipmap-mdpi/ic_launcher.png b/layout-editor/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 00000000..eb187334
Binary files /dev/null and b/layout-editor/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/layout-editor/src/main/res/mipmap-mdpi/ic_launcher_background.png b/layout-editor/src/main/res/mipmap-mdpi/ic_launcher_background.png
new file mode 100644
index 00000000..179cc6a9
Binary files /dev/null and b/layout-editor/src/main/res/mipmap-mdpi/ic_launcher_background.png differ
diff --git a/layout-editor/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/layout-editor/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..37b6039c
Binary files /dev/null and b/layout-editor/src/main/res/mipmap-mdpi/ic_launcher_foreground.png differ
diff --git a/layout-editor/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png b/layout-editor/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png
new file mode 100644
index 00000000..5279ae62
Binary files /dev/null and b/layout-editor/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png differ
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_button.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_button.xml
new file mode 100644
index 00000000..20803056
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_button.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_button_2.png b/layout-editor/src/main/res/mipmap-xhdpi/ic_button_2.png
new file mode 100644
index 00000000..040475f0
Binary files /dev/null and b/layout-editor/src/main/res/mipmap-xhdpi/ic_button_2.png differ
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_card.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_card.xml
new file mode 100644
index 00000000..25bab598
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_card.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_checkbox_marked.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_checkbox_marked.xml
new file mode 100644
index 00000000..646f2670
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_checkbox_marked.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_constraint.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_constraint.xml
new file mode 100644
index 00000000..791196e5
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_constraint.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_coordinator.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_coordinator.xml
new file mode 100644
index 00000000..213f9302
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_coordinator.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_cursor_text.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_cursor_text.xml
new file mode 100644
index 00000000..a1590429
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_cursor_text.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_edittext.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_edittext.xml
new file mode 100644
index 00000000..837c0ef7
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_edittext.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_fab.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_fab.xml
new file mode 100644
index 00000000..5acd6555
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_fab.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_frame.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_frame.xml
new file mode 100644
index 00000000..703c598c
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_frame.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_image_outline.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_image_outline.xml
new file mode 100644
index 00000000..f99da1a7
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_image_outline.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_launcher.png b/layout-editor/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 00000000..bfaa9441
Binary files /dev/null and b/layout-editor/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_launcher_background.png b/layout-editor/src/main/res/mipmap-xhdpi/ic_launcher_background.png
new file mode 100644
index 00000000..51c90d02
Binary files /dev/null and b/layout-editor/src/main/res/mipmap-xhdpi/ic_launcher_background.png differ
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/layout-editor/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..1db3fb4e
Binary files /dev/null and b/layout-editor/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png differ
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png b/layout-editor/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png
new file mode 100644
index 00000000..d03c8612
Binary files /dev/null and b/layout-editor/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png differ
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_linear_horizontal.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_linear_horizontal.xml
new file mode 100644
index 00000000..011acf36
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_linear_horizontal.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_linear_vertical.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_linear_vertical.xml
new file mode 100644
index 00000000..5e68373a
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_linear_vertical.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_ad_view.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_ad_view.xml
new file mode 100644
index 00000000..05312e9d
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_ad_view.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_adapter_view_flipper.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_adapter_view_flipper.xml
new file mode 100644
index 00000000..02242dd2
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_adapter_view_flipper.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_analog_clock.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_analog_clock.xml
new file mode 100644
index 00000000..ced0f38b
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_analog_clock.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_app_bar_layout.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_app_bar_layout.xml
new file mode 100644
index 00000000..0b057db0
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_app_bar_layout.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_auto_complete_text_view.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_auto_complete_text_view.xml
new file mode 100644
index 00000000..18837fe2
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_auto_complete_text_view.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_barrier_horizontal.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_barrier_horizontal.xml
new file mode 100644
index 00000000..531e353c
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_barrier_horizontal.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_barrier_vertical.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_barrier_vertical.xml
new file mode 100644
index 00000000..1831e9d2
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_barrier_vertical.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_bottom_app_bar.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_bottom_app_bar.xml
new file mode 100644
index 00000000..14724ec5
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_bottom_app_bar.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_bottom_navigation_view.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_bottom_navigation_view.xml
new file mode 100644
index 00000000..16235931
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_bottom_navigation_view.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_button.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_button.xml
new file mode 100644
index 00000000..e3f6465b
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_button.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_calendar_view.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_calendar_view.xml
new file mode 100644
index 00000000..2445f961
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_calendar_view.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_card_view.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_card_view.xml
new file mode 100644
index 00000000..ed101022
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_card_view.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_check_box.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_check_box.xml
new file mode 100644
index 00000000..c394bfd4
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_check_box.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_checked_text_view.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_checked_text_view.xml
new file mode 100644
index 00000000..25bf610a
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_checked_text_view.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_chip.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_chip.xml
new file mode 100644
index 00000000..f01ea32f
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_chip.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_chip_group.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_chip_group.xml
new file mode 100644
index 00000000..e38ac739
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_chip_group.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_chronometer.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_chronometer.xml
new file mode 100644
index 00000000..c4692397
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_chronometer.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_collapsing_toolbar_layout.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_collapsing_toolbar_layout.xml
new file mode 100644
index 00000000..345aa5e3
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_collapsing_toolbar_layout.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_constraint_layout.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_constraint_layout.xml
new file mode 100644
index 00000000..1b547edf
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_constraint_layout.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_coordinator_layout.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_coordinator_layout.xml
new file mode 100644
index 00000000..e31c5960
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_coordinator_layout.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_custom_view.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_custom_view.xml
new file mode 100644
index 00000000..0d61589e
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_custom_view.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_date_picker.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_date_picker.xml
new file mode 100644
index 00000000..f0735aa1
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_date_picker.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_date_textfield.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_date_textfield.xml
new file mode 100644
index 00000000..e887fc36
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_date_textfield.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_drawer_layout.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_drawer_layout.xml
new file mode 100644
index 00000000..a9288159
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_drawer_layout.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_edit_text.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_edit_text.xml
new file mode 100644
index 00000000..b93f4a49
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_edit_text.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_email_textfield.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_email_textfield.xml
new file mode 100644
index 00000000..b93f4a49
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_email_textfield.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_expandable_list_view.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_expandable_list_view.xml
new file mode 100644
index 00000000..b7064ab9
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_expandable_list_view.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_floating_action_button.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_floating_action_button.xml
new file mode 100644
index 00000000..1376a964
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_floating_action_button.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_fragment.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_fragment.xml
new file mode 100644
index 00000000..f3a93574
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_fragment.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_frame_layout.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_frame_layout.xml
new file mode 100644
index 00000000..fb3418b8
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_frame_layout.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_grid_layout.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_grid_layout.xml
new file mode 100644
index 00000000..f2e68dde
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_grid_layout.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_grid_layout_compat.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_grid_layout_compat.xml
new file mode 100644
index 00000000..21affadc
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_grid_layout_compat.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_grid_view.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_grid_view.xml
new file mode 100644
index 00000000..f2e68dde
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_grid_view.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_guideline_horizontal.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_guideline_horizontal.xml
new file mode 100644
index 00000000..8b98e246
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_guideline_horizontal.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_guideline_vertical.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_guideline_vertical.xml
new file mode 100644
index 00000000..56a6570a
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_guideline_vertical.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_horizontal_divider.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_horizontal_divider.xml
new file mode 100644
index 00000000..d7f1a989
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_horizontal_divider.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_horizontal_scroll_view.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_horizontal_scroll_view.xml
new file mode 100644
index 00000000..d1f6d3fc
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_horizontal_scroll_view.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_image_button.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_image_button.xml
new file mode 100644
index 00000000..19758b08
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_image_button.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_image_switcher.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_image_switcher.xml
new file mode 100644
index 00000000..db1262b2
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_image_switcher.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_image_view.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_image_view.xml
new file mode 100644
index 00000000..1595fc7b
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_image_view.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_include.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_include.xml
new file mode 100644
index 00000000..adca2f88
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_include.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_linear_layout_horz.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_linear_layout_horz.xml
new file mode 100644
index 00000000..ed88a794
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_linear_layout_horz.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_linear_layout_vert.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_linear_layout_vert.xml
new file mode 100644
index 00000000..e72d689d
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_linear_layout_vert.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_list_view.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_list_view.xml
new file mode 100644
index 00000000..50a6ca45
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_list_view.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_map_fragment.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_map_fragment.xml
new file mode 100644
index 00000000..bd80588c
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_map_fragment.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_map_view.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_map_view.xml
new file mode 100644
index 00000000..bd80588c
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_map_view.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_menu.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_menu.xml
new file mode 100644
index 00000000..cd84a135
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_menu.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_merge.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_merge.xml
new file mode 100644
index 00000000..19f2c596
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_merge.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_multi_auto_complete_text_view.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_multi_auto_complete_text_view.xml
new file mode 100644
index 00000000..06de5285
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_multi_auto_complete_text_view.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_nav_host_fragment.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_nav_host_fragment.xml
new file mode 100644
index 00000000..6be5ae89
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_nav_host_fragment.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_navigation_view.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_navigation_view.xml
new file mode 100644
index 00000000..ffa6052b
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_navigation_view.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_nested_scroll_view.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_nested_scroll_view.xml
new file mode 100644
index 00000000..984ece13
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_nested_scroll_view.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_number_decimal_textfield.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_number_decimal_textfield.xml
new file mode 100644
index 00000000..b93f4a49
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_number_decimal_textfield.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_number_picker.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_number_picker.xml
new file mode 100644
index 00000000..dea32a0a
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_number_picker.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_number_signed_textfield.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_number_signed_textfield.xml
new file mode 100644
index 00000000..b93f4a49
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_number_signed_textfield.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_number_textfield.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_number_textfield.xml
new file mode 100644
index 00000000..b93f4a49
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_number_textfield.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_password_numeric_textfield.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_password_numeric_textfield.xml
new file mode 100644
index 00000000..b93f4a49
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_password_numeric_textfield.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_password_textfield.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_password_textfield.xml
new file mode 100644
index 00000000..b93f4a49
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_password_textfield.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_phone_textfield.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_phone_textfield.xml
new file mode 100644
index 00000000..b93f4a49
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_phone_textfield.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_postal_address_textfield.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_postal_address_textfield.xml
new file mode 100644
index 00000000..b93f4a49
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_postal_address_textfield.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_progress_bar.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_progress_bar.xml
new file mode 100644
index 00000000..28399e86
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_progress_bar.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_progress_bar_horizontal.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_progress_bar_horizontal.xml
new file mode 100644
index 00000000..e345d222
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_progress_bar_horizontal.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_quick_contact_badge.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_quick_contact_badge.xml
new file mode 100644
index 00000000..9d7df61b
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_quick_contact_badge.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_radio_button.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_radio_button.xml
new file mode 100644
index 00000000..6b2a1e19
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_radio_button.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_radio_group.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_radio_group.xml
new file mode 100644
index 00000000..6b2a1e19
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_radio_group.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_rating_bar.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_rating_bar.xml
new file mode 100644
index 00000000..d30d97ec
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_rating_bar.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_recycler_view.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_recycler_view.xml
new file mode 100644
index 00000000..50a6ca45
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_recycler_view.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_relative_layout.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_relative_layout.xml
new file mode 100644
index 00000000..3b426684
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_relative_layout.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_request_focus.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_request_focus.xml
new file mode 100644
index 00000000..040e325c
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_request_focus.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_scroll_view.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_scroll_view.xml
new file mode 100644
index 00000000..984ece13
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_scroll_view.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_search_view.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_search_view.xml
new file mode 100644
index 00000000..0c158379
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_search_view.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_seek_bar.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_seek_bar.xml
new file mode 100644
index 00000000..a347677c
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_seek_bar.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_seek_bar_discrete.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_seek_bar_discrete.xml
new file mode 100644
index 00000000..09beeb21
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_seek_bar_discrete.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_space.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_space.xml
new file mode 100644
index 00000000..d6bc801e
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_space.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_spinner.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_spinner.xml
new file mode 100644
index 00000000..961b20cb
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_spinner.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_stack_view.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_stack_view.xml
new file mode 100644
index 00000000..dc2e2141
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_stack_view.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_surface_view.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_surface_view.xml
new file mode 100644
index 00000000..d18386d9
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_surface_view.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_switch.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_switch.xml
new file mode 100644
index 00000000..8c536c42
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_switch.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_tab_host.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_tab_host.xml
new file mode 100644
index 00000000..c87e0090
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_tab_host.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_tab_item.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_tab_item.xml
new file mode 100644
index 00000000..c87e0090
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_tab_item.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_tab_layout.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_tab_layout.xml
new file mode 100644
index 00000000..37f0db11
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_tab_layout.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_tab_widget.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_tab_widget.xml
new file mode 100644
index 00000000..c87e0090
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_tab_widget.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_table_layout.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_table_layout.xml
new file mode 100644
index 00000000..6923f90d
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_table_layout.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_table_row.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_table_row.xml
new file mode 100644
index 00000000..f981552a
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_table_row.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_text_clock.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_text_clock.xml
new file mode 100644
index 00000000..ced0f38b
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_text_clock.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_text_input_layout.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_text_input_layout.xml
new file mode 100644
index 00000000..b93f4a49
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_text_input_layout.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_text_switcher.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_text_switcher.xml
new file mode 100644
index 00000000..d0daa1ee
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_text_switcher.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_text_view.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_text_view.xml
new file mode 100644
index 00000000..7388b61c
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_text_view.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_textfield.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_textfield.xml
new file mode 100644
index 00000000..b93f4a49
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_textfield.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_textfield_multiline.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_textfield_multiline.xml
new file mode 100644
index 00000000..b93f4a49
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_textfield_multiline.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_texture_view.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_texture_view.xml
new file mode 100644
index 00000000..e26bb95a
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_texture_view.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_time_picker.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_time_picker.xml
new file mode 100644
index 00000000..31916ccb
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_time_picker.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_time_textfield.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_time_textfield.xml
new file mode 100644
index 00000000..b93f4a49
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_time_textfield.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_toggle_button.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_toggle_button.xml
new file mode 100644
index 00000000..4aca3b91
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_toggle_button.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_toolbar.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_toolbar.xml
new file mode 100644
index 00000000..345aa5e3
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_toolbar.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_unknown_view.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_unknown_view.xml
new file mode 100644
index 00000000..3729867c
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_unknown_view.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_vertical_divider.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_vertical_divider.xml
new file mode 100644
index 00000000..448ef0d1
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_vertical_divider.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_video_view.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_video_view.xml
new file mode 100644
index 00000000..d49bd743
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_video_view.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_view.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_view.xml
new file mode 100644
index 00000000..7c1bf8ff
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_view.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_view_animator.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_view_animator.xml
new file mode 100644
index 00000000..863ef54f
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_view_animator.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_view_flipper.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_view_flipper.xml
new file mode 100644
index 00000000..1892371d
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_view_flipper.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_view_pager.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_view_pager.xml
new file mode 100644
index 00000000..87b1b9de
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_view_pager.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_view_stub.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_view_stub.xml
new file mode 100644
index 00000000..f9a5c959
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_view_stub.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_view_switcher.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_view_switcher.xml
new file mode 100644
index 00000000..9d646fff
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_view_switcher.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_web_view.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_web_view.xml
new file mode 100644
index 00000000..3af3f71a
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_palette_web_view.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_progress_check.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_progress_check.xml
new file mode 100644
index 00000000..f6a763e8
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_progress_check.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_radiobox_marked.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_radiobox_marked.xml
new file mode 100644
index 00000000..58e2f312
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_radiobox_marked.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_radiogroup.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_radiogroup.xml
new file mode 100644
index 00000000..0e1430f2
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_radiogroup.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_relative_layout_outline.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_relative_layout_outline.xml
new file mode 100644
index 00000000..56eb3a76
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_relative_layout_outline.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_seekbar.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_seekbar.xml
new file mode 100644
index 00000000..e2116774
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_seekbar.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_textview.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_textview.xml
new file mode 100644
index 00000000..603b6013
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_textview.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xhdpi/ic_toggle_switch.xml b/layout-editor/src/main/res/mipmap-xhdpi/ic_toggle_switch.xml
new file mode 100644
index 00000000..0488e5de
--- /dev/null
+++ b/layout-editor/src/main/res/mipmap-xhdpi/ic_toggle_switch.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/mipmap-xxhdpi/ic_launcher.png b/layout-editor/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 00000000..59d9dc79
Binary files /dev/null and b/layout-editor/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/layout-editor/src/main/res/mipmap-xxhdpi/ic_launcher_background.png b/layout-editor/src/main/res/mipmap-xxhdpi/ic_launcher_background.png
new file mode 100644
index 00000000..c7292b5e
Binary files /dev/null and b/layout-editor/src/main/res/mipmap-xxhdpi/ic_launcher_background.png differ
diff --git a/layout-editor/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/layout-editor/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..e85a7253
Binary files /dev/null and b/layout-editor/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png differ
diff --git a/layout-editor/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png b/layout-editor/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png
new file mode 100644
index 00000000..b57baeb1
Binary files /dev/null and b/layout-editor/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png differ
diff --git a/layout-editor/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/layout-editor/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 00000000..d860a598
Binary files /dev/null and b/layout-editor/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/layout-editor/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png b/layout-editor/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png
new file mode 100644
index 00000000..88ae2558
Binary files /dev/null and b/layout-editor/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png differ
diff --git a/layout-editor/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/layout-editor/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..3d99fa77
Binary files /dev/null and b/layout-editor/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png differ
diff --git a/layout-editor/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png b/layout-editor/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png
new file mode 100644
index 00000000..8647c63b
Binary files /dev/null and b/layout-editor/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png differ
diff --git a/layout-editor/src/main/res/values-in/strings.xml b/layout-editor/src/main/res/values-in/strings.xml
new file mode 100644
index 00000000..4ba18df7
--- /dev/null
+++ b/layout-editor/src/main/res/values-in/strings.xml
@@ -0,0 +1,178 @@
+
+ TENTANG
+ Preferensi
+ Tentang
+ Buka laci navigasi
+ Tutup laci navigasi
+ Proyek telah disimpan.
+ Proyek baru
+ Layout telah disimpan
+ Gagal menyimpan layout
+ Layout baru
+ Layout kosong! Tambahkan tampilan sebelum menyimpan…
+ Tambah baru
+ Hapus
+ Salin
+ Pengelola Drawable
+ Pratinjau XML
+ Klik ikon + untuk membuat proyek baru.
+ Izin diberikan…
+ Izin ditolak…
+ Pratinjau Layout
+ Telah disalin ke papan klip
+ Apakah Anda yakin ingin menghapus proyek ini?
+ Apakah Anda yakin ingin menghapus layout ini?
+ Hapus proyek
+ Buat proyek
+ Hapus layout
+ Buat layout
+ Ya
+ Tidak
+ Ubah nama
+ Batal
+ Buat
+ Masukkan nama proyek baru
+ Ubah nama proyek
+ Masukkan nama layout baru
+ Ubah nama Layout
+ Nama saat ini tidak tersedia!
+ Kolom ini tidak boleh kosong!
+ Opsi
+ Hapus drawable
+ Hapus font
+ Apakah Anda yakin ingin menghapus drawable ini?
+ Apakah Anda yakin ingin menghapus font ini?
+ Masukkan nama baru
+ Tambah drawable
+ Tambah
+ Hanya huruf kecil (a–z) dan angka!
+ Anda tidak dapat mengubah nama %1$s yang sudah ditentukan secara default…
+ Anda tidak dapat menghapus %1$s yang sudah ditentukan secara default…
+ Fitur ini belum tersedia. Akan segera tersedia.
+ Tidak ada…
+ Tambahkan beberapa widget
+ Catatan
+ Oke
+ Aplikasi crash (rusak)
+ Tutup
+ Tutup aplikasi
+ Urung
+ Ulang
+ Simpan
+ Tampilkan struktur
+ Keluar
+ Tampilkan XML
+ Simpan XML
+ Hapus tampilan
+ Apakah Anda yakin ingin menghapus tampilan ini?
+ Layout ini tidak mendukung %1$s di dalam %2$s. Pindahkan ke induk yang lain.
+ %1$s di dalam %2$s mungkin berperilaku tidak seperti yang diharapkan di editor.
+ Pilih tipe argumen
+ Pilih tipe drawable
+ Gelap
+ Terang
+ Otomatis
+ Ini akan menutup aplikasi beserta semua tugasnya!
+ Ekspor Layout
+ Data yang diterima tidak valid.
+ Pilih file dari Penyimpanan Utama.
+ Huruf pertama tidak boleh berisi angka!
+ Nama tersebut tidak boleh mengandung spasi.
+ Konfirmasi
+ Konfirmasi
+ Apakah Anda yakin ingin menyimpan proyek ini?
+ Jangan simpan
+ Pengelola Resources
+ Font
+ String
+ Drawable
+ Color
+ Edit XML
+ Pratinjau Drawable
+ Ubah nama Drawable
+ Salin nama
+ Impor
+ Skema Warna
+ Warna baru
+ Hapus warna
+ Apakah Anda yakin ingin menghapus %1$s?
+ Pilih warna
+ Edit warna
+ Warna tidak valid
+ Nama wajib diisi
+ Pilih
+ Palette
+ Common
+ Texts
+ Buttons
+ Widgets
+ Layouts
+ Containers
+ Google
+ Legacy
+ Pratinjau Drawable
+ Ekspor sebagai Gambar
+ Tambah font
+ Ubah nama font
+ Desain
+ Blueprint
+ Kecil
+ Sedang
+ Besar
+ Nama tidak valid
+ ¯\\_(ツ)_/¯
+ Nama tersebut tidak boleh mengandung simbol.
+ Simpan layout
+ Apakah Anda yakin ingin menyimpan layout ini?
+ Apakah Anda yakin ingin mengekspor layout atau gambar?
+ Nilai
+ Nama
+ Simpan perubahan
+ Apakah Anda yakin ingin menyimpan perubahan pada layout?
+ Simpan perubahan dan keluar
+ Batalkan perubahan dan keluar
+ Batalkan dan tetap di Editor Layout
+ Gagal memuat font %1$s. File kosong atau tidak valid.
+ Gagal menambahkan font. File kosong atau rusak.
+ Gagal memuat daftar file.
+
+
+ File yang dipilih bukan file layout XML Android
+ Gagal memuat palet
+ Gagal menginisialisasi palet
+ Gagal memuat layout
+ Anda tidak dapat menghapus layout utama.
+ Diimpor!
+ Gagal mengimpor!
+ Berhasil!
+ Gagal menyimpan!
+ Tambahkan beberapa tampilan…
+ Telah disimpan ke galeri.
+ Gagal menyimpan…
+ Dimuat!
+ Palette
+ Layouts
+ Buat layout baru
+ Tipe tampilan
+ Ukuran
+ *Perlu diperhatikan bahwa proses impor akan gagal jika Anda mencoba mengimpor file layout dengan tampilan yang berbeda dari set tampilan LayoutEditor!
+ layout_new
+
+ Kunci API Gemini
+ Simpan kunci
+ Hapus
+ Edit
+ Kunci API Gemini telah disimpan di %s
+
+ Agen AI
+ Obrolan baru
+ Histori
+ Pengaturan AI
+ Tutup
+ Kunci API telah disimpan.
+
+ Kunci API telah dihapus.
+ Kunci API tidak boleh kosong.
+ Kunci API telah disimpan dengan aman.
+ ••••••••••••••••••••
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/values-night/themes.xml b/layout-editor/src/main/res/values-night/themes.xml
new file mode 100644
index 00000000..af4a3f70
--- /dev/null
+++ b/layout-editor/src/main/res/values-night/themes.xml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/values-pt-rBR/strings.xml b/layout-editor/src/main/res/values-pt-rBR/strings.xml
new file mode 100644
index 00000000..e0c95fb8
--- /dev/null
+++ b/layout-editor/src/main/res/values-pt-rBR/strings.xml
@@ -0,0 +1,65 @@
+
+ SOBRE
+ Preferências
+ Sobre
+ Abra a gaveta de navegação
+ Fechar gaveta de navegação
+ Projeto salvo.
+ Novo projeto
+ Projeto vazio! Adicionar uma visualização antes de salvar…
+ Adicionar novo
+ Excluir
+ Copiar
+ Gerenciador de drawable
+ Visualização XML
+ Clique no ícone + para criar um novo projeto.
+ Permissão garantida…
+ Permissão negada…
+ Visualizar o Layout
+ Copiado para a área de transferência
+ Tem certeza de que deseja excluir o projeto?
+ Excluir projeto
+ Criar projeto
+ Sim
+ Não
+ Renomear
+ Cancelar
+ Criar
+ Digite o novo nome do projeto
+ Renomear projeto
+ O nome atual não está disponível!
+ O campo não pode estar vazio!
+ Opções
+ Comum
+ Remover drawable
+ Deseja remover os drawables?
+ Digite o novo nome
+ Adicionar drawable
+ Adicionar
+ Apenas letras minúsculas (a-z) e números!
+ Este recurso ainda não está disponível. Estará disponível em breve.
+ Nada…
+ Adicionar alguns widgets
+ Ok
+ O aplicativo travou
+ Fechar
+ Fechar aplicativo
+ Desfazer
+ refazer
+ Salvar
+ Mostrar estrutura
+ Mostrar xml
+ Salvar xml
+ Excluir visualização
+ Deseja excluir a visualização?
+ Selecione o tipo de argumento
+ Escuro
+ Claro
+ Auto
+ Tema
+ Exportar Layout
+ ¯\\_(ツ)_/¯
+ Você deseja exportar layout ou imagem
+
diff --git a/layout-editor/src/main/res/values-ru/strings.xml b/layout-editor/src/main/res/values-ru/strings.xml
new file mode 100644
index 00000000..7baff8b8
--- /dev/null
+++ b/layout-editor/src/main/res/values-ru/strings.xml
@@ -0,0 +1,105 @@
+
+ О ПРИЛОЖЕНИИ
+ Настройки
+ О приложении
+ Открыть блок навигации
+ Закрыть блок навигации
+ Проект сохранен.
+ Новый проект
+ Проект пуст! Добавьте обзор перед сохранением…
+ Добавить новый
+ Удаление
+ Копирование
+ Управление отрисовкой
+ Предпросмотр XML
+ Клик + значок для создания нового проекта.
+ Разрешение предоставлено…
+ Разрешения нет…
+ Просмотр макета
+ Скопировано в буфер
+ Удалить проект? Вы уверены?
+ Удалить проект
+ Создать проект
+ Да
+ Нет
+ Переименовать
+ Отменить
+ Создать
+ Введите имя нового проекта
+ Переименовать проект
+ Текущее имя недоступно!
+ Поле не может быть пустым!
+ Возможности
+ Удалить отрисовку
+ Удалить шрифт
+ Удалить отрисовку?
+ Удалить шрифт?
+ Введите новое имя
+ Добавить отрисовку
+ Добавить
+ Только строчные буквы(a-z) и цифры!
+ Нельзя удалить по уиолчанию %1$s…
+ Эта функция пока не доступна, скоро будет.
+ Ничего…
+ Добавить виджеты
+ Ок
+ Аварийное завершение
+ Закрыть
+ Закрыть приложение
+ Вернуть
+ Заново
+ Сохранить
+ Показать структуру
+ Показать XML
+ Сохранить XML
+ Удаление представлния
+ Удалить представление?
+ Выбор типа аргумента
+ Выбор типа отрисовки
+ Темная
+ Светлая
+ Авто
+ Тема
+ Экспорт макета
+ Интент вернул некорректные данные.
+ Выберите файл из основного хранилища.
+ Первый символ не должен быть цифрой!
+ Имя не может содержать пробелы.
+ Подтверждение
+ Сохранить проект?
+ Не сохранять
+ Менеджер ресурсов
+ Шрифт
+ Строка
+ Отрисовка
+ Цвет
+ Правка XML
+ Предпросмотр отрисовки
+ Переименовать отрисовку
+ Копия имени
+ Импорт
+ цветовой схемы
+ Выбор
+ Палитра
+ Общее
+ Текст
+ Кнопки
+ Виджеты
+ Макеты
+ Контейнеры
+ Гугл
+ Наследование
+ Смотреть Отрисовку
+ Экспорт картинки
+ Добавить шрифт
+ Переименовать шрифт
+ Дизайн
+ Чертеж
+ Малый
+ Средний
+ Большой
+ ¯\\_(ツ)_/¯
+ Вы хотите экспортировать макет или изображение?
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/values-tr/strings.xml b/layout-editor/src/main/res/values-tr/strings.xml
new file mode 100644
index 00000000..8876059f
--- /dev/null
+++ b/layout-editor/src/main/res/values-tr/strings.xml
@@ -0,0 +1,119 @@
+
+ HAKKINDA
+ Tercihler
+ Hakkında
+ Gezinme çekmecesini aç
+ Gezinme çekmecesini kapat
+ Proje kaydedildi.
+ Yeni proje
+ Düzen Kaydedildi
+ Yeni Düzen
+ Düzen boş! Kaydetmeden önce bir görünüm ekle…
+ Yeni ekle
+ Sil
+ Kopyala
+ Çizilebilir Yönetici
+ XML Önizlemesi
+ Yeni bir proje oluşturmak için + simgesine tıklayın.
+ İzin verildi…
+ İzin reddedildi…
+ Düzeni Önizle
+ Panoya kopyalandı
+ Projeyi kaldırmak istediğinizden emin misiniz?
+ Düzeni kaldırmak istediğinizden emin misiniz?
+ Projeyi sil
+ Proje oluştur
+ Düzeni Sil
+ Düzen oluştur
+ Evet
+ Hayır
+ Yeniden adlandır
+ İptal
+ Oluştur
+ Yeni proje adı girin
+ Projeyi yeniden adlandır
+ Yeni düzen adı girin
+ Düzeni Yeniden Adlandır
+ Geçerli ad kullanılamıyor!
+ Alan boş bırakılamaz!
+ Seçenekler
+ Çizilebiliri kaldır
+ Yazı tipini kaldır
+ Çizilebiliri kaldırmak istiyor musunuz?
+ Yazı tipini kaldırmak istiyor musunuz?
+ Yeni ad girin
+ Çizilebilir ekle
+ Ekle
+ Yalnızca küçük harfler (a-z) ve sayılar!
+ Varsayılan %1$s öğesini yeniden adlandıramazsınız…
+ Varsayılan %1$s\'ı silemezsiniz…
+ Bu özellik henüz mevcut değil. Yakında hazır olacak.
+ Boş…
+ Bazı widget\'lar ekleyin
+ Not
+ Tamam
+ Uygulama çöktü
+ Kapat
+ Uygulamayı kapat
+ Geri al
+ Yinele
+ Kaydet
+ Yapıyı göster
+ XML göster
+ XML olarak kaydet
+ Görünümü sil
+ Görünümü kaldırmak istiyor musunuz?
+ Bağımsız değişken türünü seçin
+ Çizilebilir türü seçin
+ Koyu
+ Açık
+ Otomatik
+ Bu, uygulamayı tüm görevlerle kapatacak!.
+ Düzeni Dışa Aktar
+ Intent tarafından döndürülen Geçersiz Veri.
+ Birincil Depolama\'dan dosya seçin.
+ İlk harf bir sayı olmamalıdır!
+ Ad boşluk içermemelidir.
+ Onayla
+ Onay
+ Bu projeyi kaydetmek istiyor musunuz?
+ Kaydetme
+ Kaynaklar Yöneticisi
+ Yazı tipi
+ Dizi
+ Çizilebilir
+ Renk
+ XML\'i düzenle
+ Çizilebilir Önizleme
+ Çizilebiliri Yeniden Adlandır
+ Adı Kopyala
+ İçe Aktar
+ Renk uyumu
+ Seç
+ Palet
+ Yaygın
+ Metinler
+ Butonlar
+ Widget\'lar
+ Düzenler
+ Kaplar
+ Google
+ Miras
+ Çizilebilir Önizleme
+ Görüntü Olarak Dışa Aktar
+ Yazı tipi ekle
+ Yazı tipini yeniden adlandır
+ Tasarım
+ Taslak
+ Küçük
+ Orta
+ Büyük
+ Geçersiz İsim
+ ¯\\_(ツ)_/¯
+ Ad sembol içermemelidir.
+ Düzeni kaydet
+ Düzeni kaydetmek istiyor musunuz?
+ Düzeni mi yoksa görüntüyü mi dışa aktarmak istiyorsunuz?
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/values-zh-rCN/strings.xml b/layout-editor/src/main/res/values-zh-rCN/strings.xml
new file mode 100644
index 00000000..c121df42
--- /dev/null
+++ b/layout-editor/src/main/res/values-zh-rCN/strings.xml
@@ -0,0 +1,119 @@
+
+ 关于
+ 偏好
+ 关于
+ 打开导航抽屉
+ 关闭导航抽屉
+ 项目已保存。
+ 新项目
+ 布局已保存
+ 新布局
+ 布局是空的!请在保存前添加视图…
+ 添加新的
+ 删除
+ 复制
+ 绘制资源管理
+ XML 预览
+ 点击 + 图标创建一个新项目
+ 已授予权限…
+ 没有权限…
+ 预览布局
+ 已复制到剪贴板
+ 确定要删除这个项目吗?
+ 确定要删除这个布局吗?
+ 删除项目
+ 创建项目
+ 删除布局
+ 创建布局
+ 是的
+ 不了
+ 重命名
+ 取消
+ 创建
+ 输入新项目名称
+ 重命名项目
+ 输入新布局名称
+ 重命名布局
+ 当前名称不可用!
+ 字段不能为空!
+ 选项
+ 删除drawable
+ 删除字体
+ 您想删除绘制资源吗?
+ 您想删除字体吗?
+ 输入新名称
+ 添加绘制资源
+ 添加
+ 仅限小写字母 (a-z) 和数字!
+ 无法重命名默认的 %1$s…
+ 无法删除默认的 %1$s…
+ 此功能尚不可用。即将推出。
+ 啥都没有…
+ 添加一些小部件
+ 注意
+ 好的
+ 程序崩溃了):
+ 关闭
+ 关闭程序
+ 撤消
+ 重做
+ 保存
+ 显示结构
+ 显示 XML
+ 保存 XML
+ 删除视图
+ 您想删除视图吗?
+ 选择参数类型
+ 选择绘制资源类型
+ 暗色
+ 亮色
+ 自动
+ 这将关闭包含所有任务的应用程序!
+ 导出布局
+ Intent 返回的数据无效。
+ 从内部存储中选择文件。
+ 第一个字符不能是数字!
+ 这个名称不能包含空格。
+ 确认
+ 确认
+ 您想保存该项目吗?
+ 不保存
+ 资源管理
+ 字体
+ 字符串
+ Drawable
+ 颜色
+ 编辑XML
+ 绘制资源预览
+ 重命名绘制资源
+ 复制名字
+ 导入
+ 配色方案
+ 选择
+ 调色板
+ 常规
+ 文本
+ 按钮
+ 部件
+ 布局
+ 容器
+ Google
+ Legacy
+ 预览绘制资源
+ 导出为图像
+ 添加字体
+ 重命名字体
+ 设计
+ 蓝图
+ 小
+ 中
+ 大
+ 名称无效
+ ¯\\_(ツ)_/¯
+ 这个名字不能包含符号。
+ 保存布局
+ 您想保存布局吗?
+ 您要导出布局还是图像
+
diff --git a/layout-editor/src/main/res/values-zh-rTW/strings.xml b/layout-editor/src/main/res/values-zh-rTW/strings.xml
new file mode 100644
index 00000000..5d9f8edf
--- /dev/null
+++ b/layout-editor/src/main/res/values-zh-rTW/strings.xml
@@ -0,0 +1,23 @@
+
+ 關於
+ 偏好設定
+ 關於
+ 開啟導航欄
+ 關閉導航欄
+ 專案已儲存。
+ 新增專案
+ 專案是空的! 請於儲存前添加視圖…
+ 新增
+ 刪除
+ 複製
+ 繪圖管理器
+ 點擊 + 圖示創建一個新專案。
+ 已准許權限…
+ 沒有權限…
+ 預覽佈局
+ 已複製到剪貼簿
+ ¯\\_(ツ)_/¯
+ 您要匯出佈局還是圖像
+
diff --git a/layout-editor/src/main/res/values/arrays.xml b/layout-editor/src/main/res/values/arrays.xml
new file mode 100644
index 00000000..a8b391dc
--- /dev/null
+++ b/layout-editor/src/main/res/values/arrays.xml
@@ -0,0 +1,13 @@
+
+
+ @string/theme_light
+ @string/theme_dark
+ @string/theme_auto
+
+
+
+ 1
+ 2
+ -1
+
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/values/colors.xml b/layout-editor/src/main/res/values/colors.xml
new file mode 100644
index 00000000..fe1f99ff
--- /dev/null
+++ b/layout-editor/src/main/res/values/colors.xml
@@ -0,0 +1,64 @@
+
+
+ #666666
+ #555555
+ #FFFFFF
+ #E0E0E0
+ #1A1A1A
+ #666666
+ #FFFFFF
+ #E8E8E8
+ #1A1A1A
+ #666666
+ #FFFFFF
+ #E8E8E8
+ #1A1A1A
+ #B3261E
+ #FFFFFF
+ #F9DEDC
+ #410E0B
+ #79747E
+ #FFFFFF
+ #1C1B1F
+ #FFFFFF
+ #1C1B1F
+ #E7E0EC
+ #49454F
+ #313033
+ #F4EFF4
+ #AAAAAA
+ #000000
+ #555555
+ #CAC4D0
+ #000000
+ #AAAAAA
+ #1A1A1A
+ #404040
+ #E8E8E8
+ #999999
+ #1A1A1A
+ #4A4A4A
+ #E8E8E8
+ #AAAAAA
+ #1A1A1A
+ #333333
+ #E8E8E8
+ #F2B8B5
+ #601410
+ #8C1D18
+ #F9DEDC
+ #938F99
+ #1C1B1F
+ #E6E1E5
+ #1C1B1F
+ #E6E1E5
+ #49454F
+ #CAC4D0
+ #E6E1E5
+ #313033
+ #555555
+ #000000
+ #AAAAAA
+ #49454F
+ #000000
+
diff --git a/layout-editor/src/main/res/values/dimens.xml b/layout-editor/src/main/res/values/dimens.xml
new file mode 100644
index 00000000..ef6925a9
--- /dev/null
+++ b/layout-editor/src/main/res/values/dimens.xml
@@ -0,0 +1,10 @@
+
+ 8dp
+ 16dp
+
+ 16dp
+ 16dp
+ 8dp
+ 176dp
+ 16dp
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/values/strings.xml b/layout-editor/src/main/res/values/strings.xml
new file mode 100644
index 00000000..4cc7be01
--- /dev/null
+++ b/layout-editor/src/main/res/values/strings.xml
@@ -0,0 +1,224 @@
+
+ ABOUT
+ Layout Editor
+ Layout Editor
+ Preview Unavailable
+ Could not create a root view. The XML is empty or missing a valid top-level element.
+ OK
+ Add
+ Delete
+ More options
+ Send feedback
+ Back to Code on the Go
+ %1$s: %2$s
+ Created
+ Modified
+ Unable to delete file
+ Error
+ Help
+ http://localhost:6174/i/layout-top.html
+ Loading project…
+ Error opening project.
+ Unable to rename file
+ We could not place %1$s inside %2$s. Check the view hierarchy.
+ We could not open this layout. %1$s
+ We could not open this layout XML. %1$s
+ We could not read this layout XML. %1$s
+ %1$s can have only one direct child. Wrap your views in a container like LinearLayout or ConstraintLayout.
+ Code on the Go
+ Could not save the font file. Please try again.
+ Unsupported color format: %s
+ Preferences
+ About
+ Open navigation drawer
+ Close navigation drawer
+ Project saved.
+ New project
+ Layout Saved
+ Failed to save layout
+ New Layout
+ Layout empty! Add a view before saving…
+ Add new
+ Delete
+ Copy
+ Drawable Manager
+ XML Preview
+ Click + icon to create a new project.
+ Permission granted…
+ Permission denied…
+ Preview Layout
+ Copied to clipboard
+ Are you sure want to remove the project?
+ Are you sure, want to remove the layout?
+ Delete project
+ Create project
+ Delete Layout
+ Create layout
+ Yes
+ No
+ Rename
+ Cancel
+ Create
+ Enter new project name
+ Rename project
+ Enter new layout name
+ Rename Layout
+ Current name is unavailable!
+ Field cannot be empty!
+ Options
+ Remove drawable
+ Remove font
+ Do you want to remove the drawable?
+ Do you want to remove the font?
+ Enter new name
+ Add drawable
+ Add
+ Only small letters(a-z) and numbers!
+ You cannot rename the default %1$s…
+ You cannot delete the default %1$s…
+ This feature is not available yet. Will be available soon.
+ Nothing…
+ Add some widgets
+ Note
+ Okay
+ App crashed
+ Close
+ Close app
+ Undo
+ Redo
+ Save
+ Show structure
+ Exit
+ Show XML
+ Save XML
+ Delete view
+ Do you want to remove the view?
+ This layout doesn’t support %1$s inside %2$s. Move it to another parent.
+ %1$s inside %2$s may behave unexpectedly in the editor.
+ Select argument type
+ Select drawable type
+ Dark
+ Light
+ Auto
+ This will close the application with all tasks!
+ Export Layout
+ Invalid Data returned by Intent.
+ Select file from Primary Storage.
+ The first letter must not be a number!
+ The name must not contain spaces.
+ Confirm
+ Confirmation
+ Do you want to save this project?
+ Don\'t Save
+ Resources Manager
+ Font
+ String
+ Drawable
+ Color
+ Edit XML
+ Drawable Preview
+ Rename Drawable
+ Copy Name
+ Import
+ Color Scheme
+ New Color
+ Remove Color
+ Do you want to remove %1$s?
+ Choose Color
+ Edit Color
+ Remove String
+ Do you want to remove %1$s?
+ Edit String
+ New String
+ Choose layout
+ Enter custom HEX code
+ Enter string value
+ Enter drawable name
+ Enter string name
+ Enter dimension value
+ Enter %1$s value
+ Invalid Alpha value
+ Invalid Red value
+ Invalid Green value
+ Invalid Blue value
+ Invalid HEX value
+ No Drawable found
+ No string found
+ Invalid color
+ Name required
+ Select
+ Palette
+ Common
+ Texts
+ Buttons
+ Widgets
+ Layouts
+ Containers
+ Google
+ Legacy
+ Preview Drawable
+ Export as Image
+ Add font
+ Rename font
+ Design
+ Blueprint
+ Small
+ Medium
+ Large
+ Invalid Name
+ ¯\\_(ツ)_/¯
+ The name must not contain symbols.
+ Save layout
+ Do you want to save the layout?
+ Do you want to export layout or image?
+ Value
+ Name
+ Save Changes
+ Do you want to save changes to the layout?
+ Save changes and exit
+ Discard changes and exit
+ Cancel and stay in Layout Editor
+ Failed to load font %1$s. File is empty or invalid.
+ Failed to add font. The file is empty or corrupt.
+ Failed to load file list.
+
+
+ Selected file is not an Android XML layout file
+ Failed to load palette
+ Failed to initialize palette
+ Failed to load layouts
+ You can\'t delete main layout.
+ Imported!
+ Failed to import!
+ Success!
+ Failed to save!
+ Add some views…
+ Saved to gallery.
+ Failed to save…
+ Loaded!
+ Palette
+ Layouts
+ Create new layout
+ View Type
+ Size
+ *Be aware it will fail to import when you try to import the layout file with view, different from LayoutEditor view set!
+ layout_new
+
+ Gemini API Key
+ Save Key
+ Clear
+ Edit
+ Gemini API Key saved on %s
+
+ AI Agent
+ New Chat
+ History
+ AI Settings
+ Close
+ API Key is saved.
+
+ API Key cleared.
+ API Key cannot be empty.
+ API Key saved securely.
+ ••••••••••••••••••••
+
\ No newline at end of file
diff --git a/layout-editor/src/main/res/values/styles.xml b/layout-editor/src/main/res/values/styles.xml
new file mode 100644
index 00000000..e18f3d69
--- /dev/null
+++ b/layout-editor/src/main/res/values/styles.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/layout-editor/src/main/res/values/themes.xml b/layout-editor/src/main/res/values/themes.xml
new file mode 100644
index 00000000..b43637a1
--- /dev/null
+++ b/layout-editor/src/main/res/values/themes.xml
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file