This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* Copyright (C) 2015 Jake Wharton | |
* Modified work Copyright 2019 Phil Olson | |
* | |
* Licensed under the Apache License, Version 2.0 (the "License"); | |
* you may not use this file except in compliance with the License. | |
* You may obtain a copy of the License at | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class SmoothListAdapter(val context: Context) : ListAdapter<ListItem, ListItemViewHolder>(MyDiffCallback()) { | |
data class ListItem(val id: String, val text: String) | |
class ListItemViewHolder(view: View) : ViewHolder(view) { | |
fun populateFrom(listItem: ListItem) { | |
//TODO: populate your view | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
object UIJobScheduler { | |
private const val MAX_JOB_TIME_MS: Float = 4f | |
private var elapsed = 0L | |
private val jobQueue = ArrayDeque<() -> Unit>() | |
private val isOverMaxTime get() = elapsed > MAX_JOB_TIME_MS * 1_000_000 | |
private val handler = Handler() | |
fun submitJob(job: () -> Unit) { | |
jobQueue.add(job) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class MyView(context: Context) : FrameLayout(context) { | |
private val viewModel by lazy { setupViewModel() } | |
private val activity by lazy { scanForActivity(context) } | |
private fun scanForActivity(context: Context?): FragmentActivity = when (context) { | |
is FragmentActivity -> context | |
is ContextWrapper -> scanForActivity(context.baseContext) | |
else -> throw IllegalArgumentException("Context must be a FragmentActivity!") | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Suppress("UNCHECKED_CAST") | |
private inline fun <reified T : ViewModel> createViewModel(key: String, crossinline initializer: () -> T): T { | |
val factory = object : ViewModelProvider.NewInstanceFactory() { | |
override fun <T : ViewModel?> create(modelClass: Class<T>): T = initializer() as T | |
} | |
return ViewModelProviders.of(activity, factory).get(key, T::class.java) | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private fun scanForActivity(context: Context?): FragmentActivity? = when (context) { | |
is FragmentActivity -> context | |
is ContextWrapper -> scanForActivity(context.baseContext) | |
else -> throw IllegalArgumentException("Context must be a FragmentActivity!") | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="utf-8"?> | |
<android.support.design.widget.CoordinatorLayout | |
xmlns:android="http://schemas.android.com/apk/res/android" | |
xmlns:app="http://schemas.android.com/apk/res-auto" | |
android:layout_width="match_parent" | |
android:layout_height="match_parent"> | |
<android.support.design.widget.AppBarLayout | |
android:id="@+id/appbar" | |
android:layout_width="match_parent" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Provides a single instance of a class requiring a context. Can be inherited by a companion | |
* object to easily make it a singleton | |
*/ | |
abstract class SingletonWithContext<T> { | |
@Volatile | |
private var instance: T? = null | |
fun getInstance(context: Context): T = | |
instance ?: synchronized(this) { |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class NormalActivity : AppCompatActivity(), NormalDialogFragment.NormalDialogListener { | |
override fun onCreate(savedInstanceState: Bundle?) { | |
super.onCreate(savedInstanceState) | |
setContentView(R.layout.activity_normal) | |
val button = findViewById<Button>(R.id.normalButton) | |
button.setOnClickListener { showNormalDialog() } | |
} | |
private fun showNormalDialog() = |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class BetterActivity : AppCompatActivity() { | |
override fun onCreate(savedInstanceState: Bundle?) { | |
super.onCreate(savedInstanceState) | |
setContentView(R.layout.activity_main) | |
val button = findViewById<Button>(R.id.button) | |
button.setOnClickListener { showBetterDialog() } | |
val normalButton = findViewById<Button>(R.id.normalButton) | |
normalButton.setOnClickListener { launchNormalActivity() } |
OlderNewer