Skip to content

Instantly share code, notes, and snippets.

View JacquesSmuts's full-sized avatar
🙃
Recovering

Jacques Smuts JacquesSmuts

🙃
Recovering
View GitHub Profile
@JacquesSmuts
JacquesSmuts / layer-list-manifest.xml
Created February 16, 2020 13:37
android manifest short
<application
..
android:icon="@drawable/ic_launcher_overlaid"
..>
<activity
..>
</activity>
</application>
@JacquesSmuts
JacquesSmuts / ic_launcher_overlaid.xml
Last active February 16, 2020 13:28
A launcher icon that uses a layer-list
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<!-- Your original launcher icon -->
<bitmap android:src="@mipmap/ic_launcher" />
</item>
<item
android:left="100dp"
android:top="100dp">
val lock = Any()
var latestValue: Int = 0
suspend fun runSuspendFunctionBadly(input: Int) {
println("running suspend function with input $input")
synchronized(lock) {
delay(1000)
latestValue = input
}
fun saveUsernameAndPassword(username: String, password: String) {
val result = StorageService.getInstance()::saveUsernameAndPassword suspendAndInvokeWith Pair(username, password)
handleResult(result)
}
private suspend infix fun <Input1, Input2, Output> ((Input1, Input2, (Output) -> Unit) -> Unit).suspendAndInvokeWith(pair: Pair<Input1, Input2>): Output {
return suspendAsync(this, pair.first, pair.second)
}
fun saveUsername(username: String) {
val result = StorageService.getInstance()::saveUsername suspendAndInvokeWith username
handleResult(result)
}
private suspend infix fun <Input, Output> ((Input, (Output) -> Unit) -> Unit).suspendAndInvokeWith(input: Input): Output {
return suspendAsync(this, input)
}
suspend fun saveUsernameAndPassword(username: String, password: String) {
val result = suspendAsync(StorageService.getInstance()::saveUsernameAndPassword, username, password)
handleResult(result)
}
suspend fun <Input1, Input2, Output> suspendAsync(function: (Input1, Input2, (Output) -> Unit) -> Unit,
inputOne: Input1, inputTwo: Input2) = suspendCoroutine<Output> { continuation ->
function(inputOne, inputTwo) { output ->
continuation.resume(output)
suspend fun saveUsername(username: String) {
val result = suspendAsync(StorageService.getInstance()::saveUsername, username)
handleResult(result)
}
suspend fun <Input, Output> suspendAsync(function: (Input, (Output) -> Unit) -> Unit,
input: Input) = suspendCoroutine<Output> { continuation ->
function(input) { output ->
continuation.resume(output)
suspend fun saveUsername(username: String) {
val result = suspendedSaveUsername(username)
handleResult(result)
}
suspend fun suspendedSaveUsername(username: String) = suspendCoroutine<String> { continuation ->
StorageService.getInstance().saveUsername(username) { result ->
continuation.resume(result)
fun saveUsername(username: String) {
StorageService.getInstance().saveUsername(username) { result ->
handleResult(result)
}
}
inline fun <reified Interface, Input, Result> callFunction(
apiCall: [THE INTERCHANGEABLE BIT],
input: Input //If there is an input
): Result?