Skip to content

Instantly share code, notes, and snippets.

View andrewmunn's full-sized avatar

Andrew Munn andrewmunn

  • Lindy
  • San Francisco
View GitHub Profile
@andrewmunn
andrewmunn / KeyboardManager.kt
Last active June 29, 2021 16:07
Android Keyboard Status Observable
/**
* Manages access to the Android soft keyboard.
*/
class KeyboardManager @Inject constructor(private val activity: Activity) {
/**
* Observable of the status of the keyboard. Subscribing to this creates a
* Global Layout Listener which is automatically removed when this
* observable is disposed.
*/
@andrewmunn
andrewmunn / MyActivity.kt
Created September 26, 2017 01:40
Using Keyboard Manager
override fun onCreate(savedInstanceState: Bundle?) {
keyboardManager.status()
.to(ObservableScoper(this)) // AutoDispose https://github.com/uber/AutoDispose
.subscribe { showAnnoyingBanner(visible = KeyboardStatus.CLOSED == it) }
}
@andrewmunn
andrewmunn / PostalAddress.java
Last active February 28, 2018 07:06
PostalAddress in Java using AutoValue
/**
* Encapsulates a postal address.
*/
@AutoValue
public abstract class PostalAddress {
public static Builder builder() {
return new AutoValue_PostalAddress.Builder();
}
@andrewmunn
andrewmunn / PostalAddress.kt
Last active February 28, 2018 07:13
PostalAddress in Kotlin
/**
* Encapsulates a postal address.
*/
data class PostalAddress(
val name: String? = null,
val street1: String,
val street2: String? = null,
val street3: String? = null,
val street4: String? = null,
val city: String,
@andrewmunn
andrewmunn / toSingleLineStringForDisplayV2.kt
Last active February 28, 2018 07:07
toSingleLineStringForDisplay in Kotlin v2
fun toSingleLineStringForDisplay() = buildString {
append(street1).append(", ")
street2?.let { append(it).append(", ") }
street3?.let { append(it).append(", ") }
street4?.let { append(it).append(", ") }
append(city).append(", ")
append(state).append(" ")
append(postalCode)
}
@andrewmunn
andrewmunn / toSingleLineStringForDisplayV1.kt
Last active February 28, 2018 07:08
toSingleLineStringForDisplay in Kotlin v1
fun toSingleLineStringForDisplay(): String {
val sb = StringBuilder()
sb.append(street1).append(", ")
street2?.let { sb.append(it).append(", ") }
street3?.let { sb.append(it).append(", ") }
street4?.let { sb.append(it).append(", ") }
sb.append(city).append(", ")
.append(state).append(" ")
.append(postalCode)
return sb.toString()
@andrewmunn
andrewmunn / BuildString.kt
Created February 28, 2018 06:57
BuildString
/**
* Builds new string by populating newly created [StringBuilder] using provided [builderAction]
* and then converting it to [String].
*/
public inline fun buildString(builderAction: StringBuilder.() -> Unit): String =
StringBuilder().apply(builderAction).toString()
@andrewmunn
andrewmunn / toSingleLineStringForDisplayV0.kt
Created February 28, 2018 07:11
toSingleLineStringForDisplay V0
fun toSingleLineStringForDisplay(): String {
val sb = StringBuilder()
sb.append(street1).append(", ")
if (street2 != null) {
sb.append(street2).append(", ")
}
if (street3 != null) {
sb.append(street3).append(", ")
}
if (street4 != null) {
@andrewmunn
andrewmunn / toSingleLineStringForDisplayV3.kt
Created February 28, 2018 07:22
toSingleLineStringForDisplay V3
fun toSingleLineStringForDisplay() = buildString {
append(street1, ", ")
street2?.let { append(it, ", ") }
street3?.let { append(it, ", ") }
street4?.let { append(it, ", ") }
append("$city, $state $postalCode")
}
@andrewmunn
andrewmunn / toSingleLineStringForDisplayV4.kt
Last active February 28, 2018 07:44
toSingleLineStringForDisplay V4
fun toSingleLineStringForDisplay() =
listOfNotNull(street1, street2, street3, street4, city, "$state $postalCode")
.joinToString()