Sfoglia il codice sorgente

Added extensions for adding views

Vadik Sirekanyan 2 anni fa
parent
commit
fd6a7c0405

+ 17 - 2
app/src/main/java/com/sirekanyan/devtools/Context.kt

@@ -4,6 +4,8 @@ import android.content.Context
 import android.content.Intent
 import android.util.Log
 import android.view.Gravity
+import android.view.View
+import android.view.ViewGroup
 import android.widget.LinearLayout
 import android.widget.ScrollView
 import android.widget.TextView
@@ -13,19 +15,32 @@ import androidx.core.view.setPadding
 fun Context.scroll(configure: ScrollView.() -> Unit) =
     ScrollView(this).also(configure)
 
-fun Context.linear(configure: LinearLayout.() -> Unit) =
+fun ViewGroup.addLinear(configure: LinearLayout.() -> Unit) =
+    addView(context.linear(configure))
+
+private fun Context.linear(configure: LinearLayout.() -> Unit) =
     LinearLayout(this).also {
         it.gravity = Gravity.CENTER
         it.configure()
     }
 
-fun Context.text(value: String, onClick: () -> Unit = {}) =
+fun ViewGroup.addText(value: String, onClick: () -> Unit = {}) =
+    addView(context.text(value, onClick))
+
+private fun Context.text(value: String, onClick: () -> Unit = {}) =
     TextView(this).also {
         it.text = value
         it.setPadding(48)
         it.setOnClickListener { onClick() }
     }
 
+fun View.onLongClick(listener: (View) -> Unit) {
+    setOnLongClickListener { view ->
+        listener(view)
+        true
+    }
+}
+
 fun Context.startIntent(action: String) {
     try {
         startActivity(Intent(action))

+ 21 - 17
app/src/main/java/com/sirekanyan/devtools/MainActivity.kt

@@ -1,6 +1,7 @@
 package com.sirekanyan.devtools
 
 import android.os.Bundle
+import android.provider.Settings.ACTION_APPLICATION_DEVELOPMENT_SETTINGS
 import android.widget.LinearLayout
 import androidx.appcompat.app.AppCompatActivity
 import kotlin.reflect.KMutableProperty0
@@ -13,23 +14,26 @@ class MainActivity : AppCompatActivity() {
         super.onCreate(savedInstanceState)
         setContentView(
             scroll {
-                addView(linear {
+                addLinear {
                     orientation = LinearLayout.VERTICAL
-                    addView(linear {
-                        addView(text("dev") {
+                    addLinear {
+                        addText("dev") {
                             init(adb = 1, font = 1.15f, screen = 120)
                             recreate()
-                        })
-                        addView(text("reset") {
+                        }
+                        addText("reset") {
                             init(adb = 0, font = 1.0f, screen = 30)
                             finish()
-                        })
-                    })
-                    switcher(settings::adb, 0, 1)
-                    switcher(settings::dka, 0, 1)
-                    switcher(settings::font, 0.85f, 1.0f, 1.15f, 1.3f)
-                    switcher(settings::screen, 30, 60, 120)
-                })
+                        }
+                        onLongClick {
+                            startIntent(ACTION_APPLICATION_DEVELOPMENT_SETTINGS)
+                        }
+                    }
+                    addSwitcher(settings::adb, 0, 1)
+                    addSwitcher(settings::dka, 0, 1)
+                    addSwitcher(settings::font, 0.85f, 1.0f, 1.15f, 1.3f)
+                    addSwitcher(settings::screen, 30, 60, 120)
+                }
             }
         )
     }
@@ -41,18 +45,18 @@ class MainActivity : AppCompatActivity() {
         settings.screen = screen
     }
 
-    private fun <T> LinearLayout.switcher(property: KMutableProperty0<T>, vararg values: T) {
+    private fun <T> LinearLayout.addSwitcher(property: KMutableProperty0<T>, vararg values: T) {
         val currentValue = property.get()
-        addView(linear {
+        addLinear {
             orientation = LinearLayout.HORIZONTAL
             values.forEach { value ->
                 val text = "${property.name} $value"
-                addView(text(if (value == currentValue) "[$text]" else text) {
+                addText(if (value == currentValue) "[$text]" else text) {
                     property.set(value)
                     recreate()
-                })
+                }
             }
-        })
+        }
     }
 
 }