Android KTX (HWSW free! 34)

Android KTX (HWSW free! 34)

A lightning talk showing off some of the syntax gains that Google’s Android KTX library offers.

Talk recording (Hungarian): https://www.youtube.com/watch?v=R-oIo4A02CU

4047c64e3a1e2f81addd4ba675ddc451?s=128

Márton Braun

June 19, 2018
Tweet

Transcript

  1. Smoother Android development with Kotlin Márton Braun • AutSoft •

    braun.marton@autsoft.hu
  2. Android APIs are sometimes hard to use Kotlin allows us

    to reshape existing API Extension functions and properties Named and default parameters Operator overloading Lambdas, higher order functions, and inline functions Everyone has their own collection of utilities…
  3. Google takes a stance, creates their own First appeared Feb

    2, 2018 Goals Only provide uniquely Kotlin APIs Don’t provide new implementation, just new syntax Minimize overhead, focus on zero overhead abstractions
  4. None
  5. Extension properties view.setVisibility(View.VISIBLE) view.visibility = View.VISIBLE view.isVisible = true

  6. Default and named parameters view.setPadding(20, view.topPadding, 20, view.bottomPadding) view.updatePadding(left =

    20, right = 20)
  7. Operator overloading and extension functions linearLayout.addView(view) linearLayout += view linearLayout.removeView(view)

    linearLayout -= view
  8. Higher order, inline extension functions for (i in 0 until

    linearLayout.childCount) { val view = linearLayout.get(i) Timber.d(view.tag) } linearLayout.forEach { view -> Timber.d(view.tag) }
  9. Extension functions val bitmap = Bitmap.createBitmap( view.width, view.height, Bitmap.Config.ARGB_8888) view.draw(Canvas(bitmap))

    val bitmap = view.toBitmap()
  10. Operator overloading val color = bitmap.getPixel(100, 50) val color =

    bitmap[100, 50] bitmap.setPixel(100, 50, color) bitmap[100, 50] = color
  11. Extension functions, default parameters Toast.makeText(this, "Hello world", Toast.LENGTH_SHORT) .show() toast("Hello

    world")
  12. Extension functions, default parameters Toast.makeText(this, "Hello world", Toast.LENGTH_LONG) .show() toast("Hello

    world", duration = Toast.LENGTH_LONG)
  13. Higher order, inline extension functions sharedPreferences.edit() .putBoolean("drawerOpened", true) .apply() sharedPreferences.edit

    { putBoolean("drawerOpened", true) }
  14. Higher order, inline extension functions db.beginTransaction() db.insert("users", null, values) db.setTransactionSuccessful()

    db.endTransaction() db.transaction { insert("users", null, values) }
  15. inline fun <T> SQLiteDatabase.transaction(...): T { beginTransaction() try { val

    result = body() setTransactionSuccessful() return result } finally { endTransaction() } }
  16. Destructuring val lat = location.latitude val lon = location.longitude val

    (lat, lon) = location
  17. Explore Android KTX yourself and use it in your projects

    https://github.com/android/android-ktx/ https://android.github.io/android-ktx/core-ktx/ Write your own extensions for APIs that don’t fit your needs If these are on Android, consider submitting a PR to Android KTX
  18. Questions? Márton Braun • AutSoft • braun.marton@autsoft.hu