diff --git a/.idea/kotlinScripting.xml b/.idea/kotlinScripting.xml
new file mode 100644
index 0000000..a6fe551
--- /dev/null
+++ b/.idea/kotlinScripting.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sample/build.gradle b/sample/build.gradle
deleted file mode 100644
index 45bb519..0000000
--- a/sample/build.gradle
+++ /dev/null
@@ -1,23 +0,0 @@
-apply plugin: 'com.android.application'
-apply plugin: 'kotlin-android'
-apply plugin: 'kotlin-android-extensions'
-
-android {
- compileSdkVersion(Vers.androidCompileSdk)
- defaultConfig {
- applicationId "pl.mareklangiewicz.sandboxui"
- minSdkVersion(Vers.androidMinSdk)
- targetSdkVersion(Vers.androidTargetSdk)
- versionCode 1
- versionName "1.0"
- }
- buildTypes {
- release {
- minifyEnabled false
- }
- }
-}
-
-dependencies {
- implementation("com.github.langara:SandboxUi:c0d533b39a")
-}
diff --git a/sample/build.gradle.kts b/sample/build.gradle.kts
new file mode 100644
index 0000000..d20fb93
--- /dev/null
+++ b/sample/build.gradle.kts
@@ -0,0 +1,20 @@
+plugins {
+ id("com.android.application")
+ kotlin("android")
+ kotlin("android.extensions")
+}
+
+android {
+ compileSdkVersion(Vers.androidCompileSdk)
+ defaultConfig {
+ applicationId = "pl.mareklangiewicz.sandboxui"
+ minSdkVersion(21)
+ targetSdkVersion(Vers.androidTargetSdk)
+ versionCode = 1
+ versionName = "1.0"
+ }
+}
+
+dependencies {
+ implementation(project(":sandboxui"))
+}
diff --git a/sample/src/main/java/pl/mareklangiewicz/sandboxui/MainActivity.kt b/sample/src/main/java/pl/mareklangiewicz/sandboxui/MainActivity.kt
index a536579..684b35e 100644
--- a/sample/src/main/java/pl/mareklangiewicz/sandboxui/MainActivity.kt
+++ b/sample/src/main/java/pl/mareklangiewicz/sandboxui/MainActivity.kt
@@ -2,11 +2,13 @@ package pl.mareklangiewicz.sandboxui
import android.annotation.SuppressLint
import android.graphics.Color
-import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
+import android.view.View
+import androidx.appcompat.app.AppCompatActivity
import splitties.toast.toast
import splitties.views.backgroundColor
import splitties.views.dsl.core.*
+import kotlin.math.absoluteValue
import kotlin.random.Random
class MainActivity : AppCompatActivity() {
@@ -19,17 +21,18 @@ class MainActivity : AppCompatActivity() {
add(textView { text = "Text 1 $i" }, lParams())
}
val view2 = verticalLayout {
- for (i in 1..7)
- add(textView { text = "Text 2 $i" }, lParams())
+ for (i in 1..7) add(textView { text = "Text 2 $i" }, lParams())
+ addbox(textView { text = "nested"}) {
+ action("change nested text") { text = "nested ${randomHash()}"}
+ }
}
- val box1 = SandboxUi(this, view1).apply {
- action("xxx") { toast("xxx") }
- action("yyy") { toast("yyy") }
+ val box1 = sandbox(view1) {
+ action("toast xxx") { toast("xxx") }
+ action("toast yyy") { toast("yyy") }
+ action("add random hash") { add(randomHashTextView(), lParams(matchParent)) }
}
- val box2 = SandboxUi(this, view2).apply {
- action("change color") {
- view2.backgroundColor = getRandomColor()
- }
+ val box2 = sandbox(view2) {
+ action("change color") { backgroundColor = getRandomColor() }
}
val boxes = horizontalLayout {
add(box1.root, lParams(0, weight = 1f))
@@ -40,3 +43,6 @@ class MainActivity : AppCompatActivity() {
}
private fun getRandomColor() = Color.rgb(Random.nextInt(255), Random.nextInt(255), Random.nextInt(255))
+
+private fun randomHash() = Random.nextInt().hashCode().absoluteValue.toString(16)
+private fun View.randomHashTextView() = textView { text = randomHash() }
diff --git a/sandboxui/build.gradle.kts b/sandboxui/build.gradle.kts
index 7d97bd1..888c64d 100644
--- a/sandboxui/build.gradle.kts
+++ b/sandboxui/build.gradle.kts
@@ -4,16 +4,16 @@ plugins {
kotlin("android.extensions")
}
group = "com.github.langara.sandboxui"
-version = "0.0.1"
+version = "0.0.2"
android {
compileSdkVersion(Vers.androidCompileSdk)
defaultConfig {
- minSdkVersion(Vers.androidMinSdk)
+ minSdkVersion(21)
targetSdkVersion(Vers.androidTargetSdk)
- versionCode = 100
- versionName = "0.0.1"
+ versionCode = 200
+ versionName = "0.0.2"
}
}
diff --git a/sandboxui/src/main/java/pl/mareklangiewicz/sandboxui/SandboxUi.kt b/sandboxui/src/main/java/pl/mareklangiewicz/sandboxui/SandboxUi.kt
index 30cc1cf..150641b 100644
--- a/sandboxui/src/main/java/pl/mareklangiewicz/sandboxui/SandboxUi.kt
+++ b/sandboxui/src/main/java/pl/mareklangiewicz/sandboxui/SandboxUi.kt
@@ -3,19 +3,22 @@ package pl.mareklangiewicz.sandboxui
import android.annotation.SuppressLint
import android.content.Context
import android.view.View
+import android.widget.LinearLayout
import android.widget.PopupMenu
import androidx.core.view.isVisible
import splitties.dimensions.dip
-import splitties.resources.color
import splitties.resources.drawable
-import splitties.views.backgroundColor
import splitties.views.dsl.core.*
import splitties.views.onClick
import splitties.views.padding
import splitties.views.textColorResource
@SuppressLint("SetTextI18n")
-class SandboxUi(override val ctx: Context, val content: View, name: String = content::class.simpleName ?: "") : Ui {
+class SandboxUi(
+ override val ctx: Context,
+ val content: Content,
+ name: String = content::class.simpleName ?: ""
+) : Ui {
private val nameView = label(name)
private val eyeView = label("\u2609")
@@ -28,27 +31,26 @@ class SandboxUi(override val ctx: Context, val content: View, name: String = con
}
private val contentFrameView = frameLayout {
- foreground = drawable(R.drawable.sandbox_ui_border)
+ background = drawable(R.drawable.sandbox_ui_back)
add(content, lParams(matchParent, matchParent))
}
override val root = verticalLayout {
- backgroundColor = color(R.color.amber_500)
- foreground = drawable(R.drawable.sandbox_ui_border)
+ background = drawable(R.drawable.sandbox_ui_back)
padding = dip(4)
add(headerView, lParams(matchParent))
add(contentFrameView, lParams(matchParent, matchParent))
}
- private val actions = mutableListOf Unit>>()
+ private val actions = mutableListOf Unit>>()
- fun action(name: String, block: () -> Unit) {
+ fun action(name: String, block: Content.() -> Unit) {
menu.menu.add(0, actions.size, actions.size, name)
actions += name to block
}
private val menu = PopupMenu(ctx, dotsView).apply {
- setOnMenuItemClickListener { actions[it.order].second(); true }
+ setOnMenuItemClickListener { actions[it.order].second.invoke(content); true }
}
init {
@@ -58,5 +60,34 @@ class SandboxUi(override val ctx: Context, val content: View, name: String = con
}
}
-private fun Ui.label(text: String) =
- textView { this.text = text; padding = dip(4); textColorResource = android.R.color.black }
+fun Context.sandbox(
+ content: Content,
+ name: String = content::class.simpleName ?: "",
+ initBox: SandboxUi.() -> Unit = {}
+) = SandboxUi(this, content, name).apply(initBox)
+
+fun View.sandbox(
+ content: Content,
+ name: String = content::class.simpleName ?: "",
+ initBox: SandboxUi.() -> Unit = {}
+) = context.sandbox(content, name, initBox)
+
+fun Ui.sandbox(
+ content: Content,
+ name: String = content::class.simpleName ?: "",
+ initBox: SandboxUi.() -> Unit = {}
+) = ctx.sandbox(content, name, initBox)
+
+fun LinearLayout.addbox(
+ content: Content,
+ name: String = content::class.simpleName ?: "",
+ initBox: SandboxUi.() -> Unit = {}
+) = sandbox(content, name, initBox).also { add(it.root, lParams(matchParent)) }
+
+
+private fun Ui.label(text: String) = textView {
+ this.text = text
+ isSingleLine = true
+ padding = dip(4)
+ textColorResource = android.R.color.black
+}
diff --git a/sandboxui/src/main/res/drawable/sandbox_ui_border.xml b/sandboxui/src/main/res/drawable/sandbox_ui_back.xml
similarity index 56%
rename from sandboxui/src/main/res/drawable/sandbox_ui_border.xml
rename to sandboxui/src/main/res/drawable/sandbox_ui_back.xml
index 09beca7..1b9e360 100644
--- a/sandboxui/src/main/res/drawable/sandbox_ui_border.xml
+++ b/sandboxui/src/main/res/drawable/sandbox_ui_back.xml
@@ -1,7 +1,17 @@
+
+
+
+
+
+