package com.thefinestartist.binders; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.Fragment; import java.lang.reflect.Method; /** * ExtrasBinder binds data from {@link Intent} or {@link Bundle} to matching variable. * * @author Leonardo Taehwan Kim */ public class ExtrasBinder { static final String SUFFIX = "$$ExtraBinder"; public static void bind(Activity activity) { if (activity == null) return; bindObject(activity); } public static void bind(Fragment fragment) { if (fragment == null) return; bindObject(fragment); } public static void bind(android.app.Fragment fragment) { if (fragment == null) return; bindObject(fragment); } private static void bindObject(@NonNull Object object) { try { Class<?> binder = Class.forName(object.getClass().getName() + SUFFIX); Method bind = binder.getMethod("bind", object.getClass()); bind.invoke(null, object); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (RuntimeException e) { throw e; } catch (Exception e) { throw new RuntimeException("Unable to bind extras for " + object, e); } } }