Skip to content

Instantly share code, notes, and snippets.

View kmerrell42's full-sized avatar

Kelly Merrell kmerrell42

  • Mercury Intermedia
  • United States
View GitHub Profile
@kmerrell42
kmerrell42 / NullObject.java
Created November 10, 2016 18:11
Utility for creating "null objects" out of interfaces
com.my.package.name.util;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class NullObject {
private static class NullInvocationHandler implements InvocationHandler {
@kmerrell42
kmerrell42 / gist:b4ff31733c562a3262ee9a42f5704a89
Created February 23, 2017 22:08
Using headers from a WebView.load(...) response. Kinda ugly implementation since it requires exposing the networking implementation at the "view" level.
package io.mercury.monkeybutt.webviewintercept;
import android.annotation.TargetApi;
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebResourceRequest;
import android.webkit.WebResourceResponse;
import android.webkit.WebView;
@kmerrell42
kmerrell42 / gist:df17a292d9fc592e5771ad54e8a0e6dd
Created March 17, 2017 18:40
Android LayoutInflater.Factory2 for DI example
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final Picasso picasso = Picasso.with(this);
LayoutInflater.Factory2 customInflaterFactory = new LayoutInflater.Factory2() {
@Override
public View onCreateView(View parent, String name, Context context, AttributeSet attrs) {
return onCreateView(name, context, attrs);
@kmerrell42
kmerrell42 / gist:4a25009433e28e6e62e76f19da44cb65
Last active March 21, 2017 18:27
Android InstanceState and createIntent() examples
public class MovieDetailActivity extends AppCompatActivity {
private static final String EXTRA_INSTANCE_STATE = "extra:instanceState";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_movie_detail);
InstanceState is = InstanceState.from(getIntent().getExtras());
public class NullObject {
private static class NullInvocationHandler implements InvocationHandler {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Class<?> returnType = method.getReturnType();
if (returnType == Byte.TYPE || returnType == Short.TYPE || returnType == Integer.TYPE ||
returnType == Long.TYPE || returnType == Float.TYPE || returnType == Double.TYPE ||
returnType == Character.TYPE) {
@kmerrell42
kmerrell42 / gist:5b0cac77dca89bb688d1e94c909c1105
Created March 21, 2017 18:28
Android createIntent() example
public class MovieDetailActivity extends AppCompatActivity {
private static final String EXTRA_MOVIE_ID = "extra:movieId";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_movie_detail);
String movieId = savedInstanceState.getString(EXTRA_MOVIE_ID);
@kmerrell42
kmerrell42 / LaunchActivity.java
Last active April 18, 2017 20:21
Ask for permission when "Next" button is clicked
public class LaunchActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
...
findViewById(R.id.next_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ActivityCompat.requestPermissions(LaunchActivity.this,
@kmerrell42
kmerrell42 / LaunchActivity.java
Last active April 18, 2017 20:24
Handle request permission
public class LaunchActivity extends AppCompatActivity {
...
@Override
public void onRequestPermissionsResult(int requestCode,
@NonNull String permissions[],
@NonNull int[] grantResults) {
switch (requestCode) {
case REQUEST_CODE_READ_SMS: {
public class LaunchActivity extends AppCompatActivity {
private static final int REQUEST_CODE_READ_SMS = 101;private static final int REQUEST_CODE_READ_SMS = 101;
...
}
@kmerrell42
kmerrell42 / SmsBroadcastReceiver.java
Last active April 18, 2017 20:51
Create a BroadcastReceiver that accepts a callback to let us know the verification code has been received
public class SmsBroadcastReceiver extends BroadcastReceiver {
private final OnVerificationCodeReceivedListener codeReceivedListener;
public SmsBroadcastReceiver(@NonNull OnVerificationCodeReceivedListener codeReceivedListener) {
this.codeReceivedListener = codeReceivedListener;
}
@Override
public void onReceive(Context context, Intent intent) {
// TODO: See if this message is coming from the expected phone number