Skip to content

Instantly share code, notes, and snippets.

Avatar

Marcus Gabilheri fnk0

  • Snap
  • Los Angeles, CA
View GitHub Profile
View resume.json
{
"basics": {
"name": "Marcus Gabilheri",
"label": "Senior Android Software Engineer",
"picture": "",
"email": "marcusandreog@gmail.com",
"phone": "+1(405)385-1224",
"website": "",
"summary": "Hi, I'm Marcus and I have fun writing code.",
"location": {
@fnk0
fnk0 / Framework.kt
Created Jan 14, 2020
Parent View Model with Contract Interface
View Framework.kt
import androidx.annotation.MainThread
import androidx.fragment.app.Fragment
import kotlin.reflect.KClass
interface ViewModelContractProvider {
fun <T : Any> provideViewModelContract(clazz: KClass<T>): T
val supportedContracts: Set<KClass<*>>
}
/**
@fnk0
fnk0 / Framework.kt
Created Jan 14, 2020
Parent View Model with Contract Interface
View Framework.kt
import androidx.annotation.MainThread
import androidx.fragment.app.Fragment
import kotlin.reflect.KClass
interface ViewModelContractProvider {
fun <T : Any> provideViewModelContract(clazz: KClass<T>): T
val supportedContracts: Set<KClass<*>>
}
/**
@fnk0
fnk0 / CardType.java
Created Mar 25, 2018 — forked from gabrielbauman/CardType.java
A Java enum representing credit card types (Visa, Mastercard etc) that can detect card type from a credit card number.
View CardType.java
package com.gabrielbauman.gist;
import java.util.regex.Pattern;
public enum CardType {
UNKNOWN,
VISA("^4[0-9]{12}(?:[0-9]{3}){0,2}$"),
MASTERCARD("^(?:5[1-5]|2(?!2([01]|20)|7(2[1-9]|3))[2-7])\\d{14}$"),
AMERICAN_EXPRESS("^3[47][0-9]{13}$"),
View BaseRecyclerAdapter.java
import android.support.annotation.IntRange;
import android.support.annotation.LayoutRes;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.util.ArrayList;
import java.util.List;
@fnk0
fnk0 / HomeActivity.java
Last active Oct 25, 2016
Shortcut Manager how to
View HomeActivity.java
// Somewhere inside your app...
if (isUserLoggedIn() && Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
ShortcutManager shortcutManager = getSystemService(ShortcutManager.class);
// NOTE: You MUST specify an Action on the intents. Otherwise it will crash
Intent home = new Intent(this, HomeActivity.class);
home.setAction(Intent.ACTION_VIEW);
Intent profile = new Intent(this, UserProfileActivity.class);
profile.setAction(Intent.ACTION_VIEW);
View AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.myapp">
<application
android:name=".MyApp"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme">
<activity
android:name=".ui.home.HomeActivity">
<intent-filter>
@fnk0
fnk0 / shortcuts.xml
Last active Oct 25, 2016
Shortcuts Example
View shortcuts.xml
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
<shortcut
android:shortcutId="leaderboard"
android:enabled="true"
android:icon="@drawable/ic_leaderboard_primary"
<!-- -->
<!-- Note this needs to be a string resource, it can NOT be a string -->
<!-- If you try to use a literal string here will cause an error -->
android:shortcutShortLabel="@string/leaderboard"
android:shortcutLongLabel="@string/leaderboard">
@fnk0
fnk0 / CustomMovieDetailsPresenter.java
Last active Oct 17, 2016
Custom presenter with animation
View CustomMovieDetailsPresenter.java
public class CustomMovieDetailsPresenter extends FullWidthDetailsOverviewRowPresenter {
private int mPreviousState = STATE_FULL;
public CustomMovieDetailsPresenter(Presenter detailsPresenter, DetailsOverviewLogoPresenter logoPresenter) {
super(detailsPresenter, logoPresenter);
// Setting the initial state to FULL prevents the OverviewRow from starting in a weird position
// It ensures consistency and avoids a bug that makes the poster start off the screen.
setInitialState(FullWidthDetailsOverviewRowPresenter.STATE_FULL);
View FullWidthDetailsOverviewRowPresenter.java
protected void onLayoutLogo(ViewHolder viewHolder, int oldState, boolean logoChanged) {
View v = viewHolder.getLogoViewHolder().view;
ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams)
v.getLayoutParams();
switch (mAlignmentMode) {
case ALIGN_MODE_START:
default:
lp.setMarginStart(v.getResources().getDimensionPixelSize(
R.dimen.lb_details_v2_logo_margin_start));
break;