Skip to content

Instantly share code, notes, and snippets.

View gigiperih's full-sized avatar
:octocat:

Gilang gigiperih

:octocat:
View GitHub Profile
@gigiperih
gigiperih / NetworkModule.kt
Created April 20, 2022 01:01
CacheControl for OkHttpClient (to support offline mode without persistence data library)
// assuming provider is inside Hilt-Android Module
@InstallIn(SingletonComponent::class)
@Module
class NetworkModule {
...
@Provides
@Singleton
fun providesOkHttpClient(
@ApplicationContext context: Context
@gigiperih
gigiperih / Dockerfile
Created January 13, 2022 16:25
Dockerize: production ready next-js app (turborepo, watchtower, shoutrrr, nginx, ssl)
#
# EXAMPLE OF MULTISTAGE BUILD FOR MONOREPOS
#
# @link https://github.com/belgattitude/nextjs-monorepo-example
#
###################################################################
# Stage 1: Install all workspaces (dev)dependencies #
# and generates node_modules folder(s) #
# ----------------------------------------------------------------#
@gigiperih
gigiperih / FragmentExtensions.kt
Last active December 28, 2021 06:23
(Android Instrumentation Test) Kotlin extensions for launching hilt fragment
inline fun <reified T : Fragment> launchFragmentInHiltContainer(
fragmentArgs: Bundle? = null,
@StyleRes themeResId: Int = R.style.Theme_GithubRepo,
fragmentFactory: FragmentFactory? = null,
crossinline action: Fragment.() -> Unit = {}
) {
val startActivityIntent = Intent.makeMainActivity(
ComponentName(
ApplicationProvider.getApplicationContext(),
HiltTestActivity::class.java
@gigiperih
gigiperih / ShimmerConstraintLayout.kt
Last active December 3, 2021 10:19
ShimmerConstraintLayout: lifecycle aware shimmering constraint layout
class ShimmerConstraintLayout @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr) {
@LayoutRes
private var layoutRes: Int = 0
@Dimension
private var shimmerPaddingStart: Int = 0
@Dimension