Skip to content

Instantly share code, notes, and snippets.

@Test
fun sendMessage_MultipleMessagesFromSameUser() {
val newChatMessage1 = "I have a slightly swollen lip"
val newChatMessage2 = "And a headache"
val newChatMessageEntry = chatFragment.view!!.findViewById(R.id.et_new_chat_message) as EditText
newChatMessageEntry.setText(newChatMessage1)
val chatSendButton = chatFragment.view!!.findViewById(R.id.iv_chat_send_button) as ImageView
chatSendButton.callOnClick()
@kwalker-git
kwalker-git / mixedNamedPositional.kt
Created December 21, 2020 18:05
Mixing named and positional parameters
val firstName = getFullName(
relationshipID = deploymentDescriptor,
kpSessionManager.user,
proxyList = kpSessionManager.userSession.activeProxyListWithoutSelf
)
@kwalker-git
kwalker-git / trailingCommas.kt
Created December 23, 2020 14:35
Trailing comma example
private fun getInitialPrescriptionList(): List<HomeUiModel> {
return listOf(
HomeUiModel.HeaderUiModel(HeaderType.PHARMACY),
HomeUiModel.SubHeader(SubHeaderType.LOADING),
HomeUiModel.ShimmerUiModel(loadingType = LoadingType.PHARMACY),
HomeUiModel.ViewDetailUiModel(ViewMoreType.PHARMACY),
)
}
@kwalker-git
kwalker-git / loopLabelNeeded.kt
Created December 23, 2020 14:40
Before 1.4, if a developer wanted to code a break or continue statement in a loop nested inside a when clause, it was necessary to define a label for the loop statement, and then reference the label in the inner break or continue statement.
PROXYLOOP@for (proxy in proxyList) {
when (proxy.relation) {
(Proxy.RELATION_SELF) -> break@PROXYLOOP
(Proxy.RELATION_CHILD) -> continue@PROXYLOOP
(Proxy.RELATION_TEEN) -> {
// Logic for teen relation
}
}
// Additional processing
}
@kwalker-git
kwalker-git / noLabelToBreakOrContinue.kt
Created December 23, 2020 14:44
Using break and continue for a when statement nested inside a for loop
for (proxy in proxyList) {
when (proxy.relation) {
(Proxy.RELATION_SELF) -> break
(Proxy.RELATION_CHILD) -> continue
(Proxy.RELATION_TEEN) -> {
// Logic for teen relation
}
}
// Additional processing
}
@kwalker-git
kwalker-git / objectExpressionForSAM.kt
Created December 23, 2020 14:47
Using Object Expression to implement a SAM
fun notifyAppointmentDataChangesNonFunctional() {
val notifier = object : DataChangeNotifier {
override fun publishDataChange() {
apptDataPubSub.onNext()
}
}
notifier.publishDataChange()
}
@kwalker-git
kwalker-git / SAMconversion.kt
Created December 23, 2020 14:49
SAM conversion of Kotlin code
fun notifyAppointmentDataChanges() {
val notifier = DataChangeNotifier { apptDataPubSub.onNext() }
notifier.publishDataChange()
}
@kwalker-git
kwalker-git / functionalInterfaceExample.kt
Created December 23, 2020 20:39
Interface using keyword "fun"
fun interface DataChangeNotifier {
fun publishDataChange()
}
sealed interface NewSession {
fun showMessage()
}
sealed interface ExistingSession
sealed class Navigation
class PreviousPage : Navigation(), ExistingSession
class NextPage : Navigation(), ExistingSession
class Home : Navigation(), NewSession {
override fun showMessage() {}
@JvmInline
value class PreferredFirstNameInline(private val name: String) // No overhead for PreferredFirstNameInline class unless needed for boxing
// as compared to
data class PreferredFirstName(private val name: String)
fun main() {
// The Java code decompiled from the bytecode shows the underlying implementation.
val inlineFirstName = PreferredFirstNameInline("fred") // Implemented by static method
/**