Skip to content

Instantly share code, notes, and snippets.

View FireZenk's full-sized avatar
🌍
Improving the world

Jorge Garrido FireZenk

🌍
Improving the world
View GitHub Profile
@FireZenk
FireZenk / ExampleRoute1.kt
Last active January 26, 2024 10:38
Jetpack's Android navigation made simple
package com.github.firezenk
import androidx.navigation.NavGraphBuilder
import androidx.navigation.NavHostController
import androidx.navigation.NavType
import androidx.navigation.compose.composable
import com.github.firezenk.Route
import com.github.firezenk.exampleRoute2
internal val exampleRoute1 = Route("ExampleRoute1", linkedMapOf(
plop.setGenerator('feature', {
description: 'creates a new mvp-based feature',
prompts: [{
type: 'input',
name: 'package',
message: 'Package name?'
},{
type: 'input',
name: 'feature',
message: 'Feature name?'
module.exports = function (plop) {
plop.addHelper('lowerCase', (text) => text.toLowerCase());
// add more helpers here
plop.setGenerator('feature', {
description: 'creates a new mvp-based feature',
prompts: [{
type: 'input',
@FireZenk
FireZenk / LifecycleExt.kt
Created April 22, 2022 09:53
Lifecycle event listener for Compose
@Composable
fun OnLifecycleEvent(onEvent: (owner: LifecycleOwner, event: Lifecycle.Event) -> Unit) {
val eventHandler = rememberUpdatedState(onEvent)
val lifecycleOwner = rememberUpdatedState(LocalLifecycleOwner.current)
DisposableEffect(lifecycleOwner.value) {
val lifecycle = lifecycleOwner.value.lifecycle
val observer = LifecycleEventObserver { owner, event ->
eventHandler.value(owner, event)
}
@FireZenk
FireZenk / LocationExt.kt
Last active April 22, 2022 09:51
Open Location services activation settings from Compose
@Composable
fun ActivateLocationServices() {
val context = LocalContext.current
val lm = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager
if (!LocationManagerCompat.isLocationEnabled(lm))
context.startActivity(Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS))
}
@FireZenk
FireZenk / BluetoothExt.kt
Created April 22, 2022 09:50
Bluetooth activation request for Compose
@Composable
fun ActivateBluetooth(launcher: (() -> Unit) -> Unit, isRequestingActivation: (Boolean) -> Unit,
onActivated: () -> Unit) {
val bluetoothActivationLauncher =
rememberLauncherForActivityResult(RequestBluetoothActivation()) {
if (it) {
isRequestingActivation(false)
onActivated()
}
}
@FireZenk
FireZenk / PermissionsExt.kt
Created April 22, 2022 09:46
Android permission request for Compose
@ExperimentalPermissionsApi
@Composable
fun CheckPermissions(permissions: List<String>, launcher: (() -> Unit) -> Unit,
onAllGranted: () -> Unit, onPermissionsNeeded: () -> Unit, ) {
val multiplePermissionsState = rememberMultiplePermissionsState(permissions)
val isAlreadyGranted = remember { mutableStateOf(false) }
launcher { multiplePermissionsState.launchMultiplePermissionRequest() }
val allGranted = multiplePermissionsState.allPermissionsGranted
if (allGranted && !isAlreadyGranted.value) {
@FireZenk
FireZenk / SnackbarAnimation.java
Last active August 11, 2020 13:06
With this class you can clone the {Snackbar} animation to move the {ViewGroup} above of the Snackbar when it is visible and avoid view overlapping (clone of fab animation)
package com.your.package;
import android.support.design.widget.Snackbar;
import android.view.View;
import android.view.ViewGroup;
import com.daimajia.easing.BaseEasingMethod;
import com.daimajia.easing.Glider;
import com.daimajia.easing.Skill;
import com.nineoldandroids.animation.AnimatorSet;
@FireZenk
FireZenk / build.gradle
Created March 30, 2020 14:04
Obfuscate jar from java-library gradle projects
import proguard.gradle.ProGuardTask
import java.nio.file.Paths
dependencies {
[...]
// Required by @task::obfuscate
compileOnly 'org.jetbrains:annotations:13.0'
}
def jarNameWithoutExtension = jar.archiveName.with { it.take(it.lastIndexOf(".")) }
@FireZenk
FireZenk / Action.kt
Created February 25, 2020 12:14
MVI Android + Rxjava2
open class Action