Skip to content

Instantly share code, notes, and snippets.

View Zhuinden's full-sized avatar
🤔
Fighting Proguard

Gabor Varadi Zhuinden

🤔
Fighting Proguard
View GitHub Profile
@Zhuinden
Zhuinden / NavigationDispatcher.kt
Created June 19, 2020 00:48
Hilt NavigationDispatcher
@ActivityRetainedScoped
class NavigationDispatcher @Inject constructor() {
private val navigationEmitter: EventEmitter<NavigationCommand> = EventEmitter()
val navigationCommands: EventSource<NavigationCommand> = navigationEmitter
fun emit(navigationCommand: NavigationCommand) {
navigationEmitter.emit(navigationCommand)
}
}
@Zhuinden
Zhuinden / NavigationCommand.kt
Created June 19, 2020 00:48
NavigationCommand
typealias NavigationCommand = (NavController) -> Unit
@Zhuinden
Zhuinden / HiltUtils.kt
Last active March 19, 2021 21:59
Hilt NavGraphViewModels utils
inline fun <reified T : ViewModel> Fragment.hiltNavGraphViewModels(@IdRes navGraphIdRes: Int) =
viewModels<T>(
ownerProducer = { findNavController().getBackStackEntry(navGraphIdRes) },
factoryProducer = { defaultViewModelProviderFactory } // TODO: FIX THIS. THIS ISN'T SUFFICIENT!!!
)
@Zhuinden
Zhuinden / LoginFragment.kt
Created June 19, 2020 00:44
Hilt login fragment
@AndroidEntryPoint
class LoginFragment : Fragment(R.layout.login_fragment) {
private val viewModel by viewModels<LoginViewModel>()
@Zhuinden
Zhuinden / build.gradle
Created June 19, 2020 00:43
Hilt alpha setup
// dagger
implementation 'com.google.dagger:dagger:2.28'
kapt 'com.google.dagger:dagger-compiler:2.28'
// hilt
implementation 'com.google.dagger:hilt-android:2.28-alpha'
kapt 'com.google.dagger:hilt-android-compiler:2.28-alpha'
kaptAndroidTest 'com.google.dagger:hilt-android-compiler:2.28-alpha'
kaptTest 'com.google.dagger:hilt-android-compiler:2.28-alpha'
implementation 'androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha01'
@Zhuinden
Zhuinden / activity_main.xml
Last active June 9, 2020 20:24
Single-Activity: Create Login Credentials (Jetpack Navigation)
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.fragment.app.FragmentContainerView
android:id="@+id/nav_host"
android:name="androidx.navigation.fragment.NavHostFragment"
@Zhuinden
Zhuinden / create-login-credentials-fragment-simple-stack.kt
Last active June 9, 2020 20:48
Single-Activity: Create Login Credentials (Simple-Stack)
class CreateLoginCredentialsFragment : KeyedFragment(R.layout.create_login_credentials_fragment) {
private val viewModel by lazy { lookup<RegistrationViewModel>() }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val binding = CreateLoginCredentialsFragmentBinding.bind(view)
// ...
}
}
@Zhuinden
Zhuinden / MyClass.kt
Created May 23, 2020 06:21
AssistedInjection sample: MyClass (injection target with factory parameter)
@Singleton
class MyClass @Inject constructor(private val factory: D.Factory)
@Zhuinden
Zhuinden / SingletonComponent.kt
Created May 23, 2020 06:21
AssistedInjection sample: SingletonComponent
@Singleton
@Component(modules = [
AppModule::class,
AssistedInjectionModule::class
])
interface SingletonComponent {
}
@Zhuinden
Zhuinden / AssistedInjectionModule.java
Created May 23, 2020 06:19
AssistedInjection sample: AssistedInjectionModule
@AssistedModule
@Module(includes = {AssistedInject_AssistedInjectionModule.class})
public class AssistedInjectionModule {}