Skip to content

Instantly share code, notes, and snippets.

View bmc08gt's full-sized avatar

Brandon McAnsh bmc08gt

View GitHub Profile
@bmc08gt
bmc08gt / Tips.kt
Last active August 25, 2023 13:10
TipKit
@Singleton
class AnchorTip @Inject constructor(
eventEngine: EventEngine,
tipEngine: TipsEngine
) : Tip(eventEngine, tipEngine) {
init {
flowPosition = 0
flowId = "onboarding-flow"
}
@bmc08gt
bmc08gt / compose.kt
Created December 6, 2021 22:16
compose.kt
ext {
compose_version = '1.0.5'
accompanist_version = "0.20.2"
}
android {
buildFeatures {
compose true
}
composeOptions {
@bmc08gt
bmc08gt / WorkEnqueuer.kt
Created October 21, 2021 18:59
WorkManager state observation
interface WorkListener {
fun onConditionNotMet()
fun onStart()
fun onSuccess(data: Data)
fun onError(data: Data)
}
class WorkEnqueuer(val context: Context) {
private var listener: WorkListener? = null
@bmc08gt
bmc08gt / insets.kt
Created September 14, 2021 02:55
WindowInsets IME extensions
val View.windowInsetsCompat: WindowInsetsCompat?
get() {
val rootInsets = rootWindowInsets ?: return null
return WindowInsetsCompat.toWindowInsetsCompat(rootInsets)
}
val View.isKeyboardVisible: Boolean
get() = windowInsetsCompat?.isVisible(WindowInsetsCompat.Type.ime()) ?: false
fun View.hideKeyboard() {
@bmc08gt
bmc08gt / AutoSizeText.kt
Last active February 16, 2024 10:58
Autosizing Text in Jetpack Compose
import androidx.compose.material.LocalTextStyle
import androidx.compose.material.Text
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.drawWithContent
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.font.FontStyle
@bmc08gt
bmc08gt / grid.kt
Last active January 6, 2022 05:33
Jetpack Compose Composable wrapping an Android SwipeRefresh & RecyclerView using Composable ViewHolders
@OptIn(ExperimentalFoundationApi::class)
@Composable
internal fun AndroidIgGrid(
viewState: InstagramGridViewState,
isRefreshing: Boolean,
items: PagingData<GridMediaItem>,
selectedItems: List<GridMediaItem>,
onRefresh: () -> Unit,
onItemSelected: (GridMediaItem) -> Unit,
onItemUnSelected: (GridMediaItem) -> Unit,
@bmc08gt
bmc08gt / app_build.gradle
Last active July 4, 2022 11:46
Gradle task that downloads a signing config from a remote server
def execDownloadSigningInfo(ProductFlavor flavor) {
task z {
download {
src "$url"
dest {
return rootProject.file("../file")
}
onlyIfNewer true
}
@bmc08gt
bmc08gt / build.gradle.kts
Created August 5, 2021 17:53
Shared KMM gradle script for generating a FAT swift package supporting physical devices and simulators
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
plugins {
kotlin("multiplatform")
id("com.android.library")
kotlin("plugin.parcelize")
id("com.apollographql.apollo3") version "3.0.0-dev13"
id("com.chromaticnoise.multiplatform-swiftpackage") version "2.0.3"
}
@bmc08gt
bmc08gt / LoremText.kt
Created August 5, 2021 11:16
Lorem Ipsum paragraph generator in Jetpack Compose
import androidx.compose.material.LocalTextStyle
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.TextLayoutResult
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.font.FontStyle
@bmc08gt
bmc08gt / monkey.gradle
Created July 20, 2021 19:40
Gradle task to piggyback off install task allowing CLI opening of the app.
android.applicationVariants.all { variant ->
task "open${variant.name.capitalize()}" {
dependsOn "install${variant.name.capitalize()}"
doLast {
exec {
commandLine "adb shell monkey -p ${variant.applicationId} -c android.intent.category.LAUNCHER 1".split(" ")
}
}
}