ABOUT US Senior Android Dev @ Groupon ~20 years of Java coding OSS: Dart, TP, BoundBox, … STEPHANE NICOLAS DANIEL MOLINERO REGUERA Android Dev @ Groupon Turbulence Ninja OSS: Dart, TP. +stephane @D_Lemures
AN INTENT IS AN ABSTRACT DESCRIPTION OF AN OPERATION TO BE PERFORMED INTENTS & EXTRAS BROADCAST RECEIVER SERVICE ACTIVITY from developer.android.com/reference/android/content/Intent.html
AN INTENT IS AN ABSTRACT DESCRIPTION OF AN OPERATION TO BE PERFORMED INTENTS & EXTRAS ACTIVITY from developer.android.com/reference/android/content/Intent.html INTENT
EXTRAS CAN BE USED TO PROVIDE EXTENDED INFORMATION INTENTS & EXTRAS ACTIVITY from developer.android.com/reference/android/content/Intent.html INTENT EXTRAS
DART: CONSUMING INTENTS public class DealDetailActivity extends Activity { public static final String EXTRA_DEAL_ID = "EXTRA_DEAL_ID"; public static final String EXTRA_SHOW_MAP = "EXTRA_SHOW_MAP";
private String dealId; private boolean shouldShowMap; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); dealId = getIntent().getStringExtra(EXTRA_DEAL_ID); shouldShowMap = getIntent().getBooleanExtra(EXTRA_SHOW_MAP, false); if (dealId == null) { throw new IllegalArgumentException("Deal Id is required"); } ... }
public class DealDetailActivity extends Activity { public static final String EXTRA_DEAL_ID = "EXTRA_DEAL_ID"; public static final String EXTRA_SHOW_MAP = "EXTRA_SHOW_MAP";
private String dealId; private boolean shouldShowMap; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); dealId = getIntent().getStringExtra(EXTRA_DEAL_ID); shouldShowMap = getIntent().getBooleanExtra(EXTRA_SHOW_MAP, false); if (dealId == null) { throw new IllegalArgumentException("Deal Id is required"); } ... } DART: CONSUMING INTENTS
public class DealDetailActivity extends Activity { public static final String EXTRA_DEAL_ID = "EXTRA_DEAL_ID"; public static final String EXTRA_SHOW_MAP = "EXTRA_SHOW_MAP";
private String dealId; private boolean shouldShowMap; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); dealId = getIntent().getStringExtra(EXTRA_DEAL_ID); shouldShowMap = getIntent().getBooleanExtra(EXTRA_SHOW_MAP, false); if (dealId == null) { throw new IllegalArgumentException("Deal Id is required"); } ... } DART: CONSUMING INTENTS BOILERPLATE!!!
public class DealDetailModel { @InjectExtra String dealId; @InjectExtra @Nullable Boolean shouldShowMap; } MODEL: public class DealDetailActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Dart.inject(detailModelInstance, this); ... } ACTIVITY: DART: BINDING A MODEL
public class CentralIntentFactory { public Intent newDealDetailActivityIntent(Context context, String dealId) { return new Intent(context, DealDetailActivity.class) .putExtra(EXTRA_DEAL_ID, dealId); }
public Intent newDealDetailActivityIntent(Context context, String dealId, boolean showMap) { return new Intent(context, DealDetailActivity.class) .putExtra(EXTRA_DEAL_ID, dealId) .putExtra(EXTRA_SHOW_MAP, showMap); } ... }
public class CentralIntentFactory { public Intent newDealDetailActivityIntent(Context context, String dealId) { return new Intent(context, DealDetailActivity.class) .putExtra(EXTRA_DEAL_ID, dealId); }
public Intent newDealDetailActivityIntent(Context context, String dealId, boolean showMap) { return new Intent(context, DealDetailActivity.class) .putExtra(EXTRA_DEAL_ID, dealId) .putExtra(EXTRA_SHOW_MAP, showMap); } ... }
HENSON: CREATING INTENTS - MEYER’S OPEN/CLOSED PRINCIPLE - BIG BALL OF MUD
HENSON: FLUENT API Intent intent = Henson.with(context) .gotoDealDetailActivity() .dealId(dealId) .shouldShowMap(true) .build(); HENSON CLASS PROVIDES A FLUENT API TO ACCESS INTENT BUILDERS
HENSON: ANNOTATIONS MAKE YOUR ACTIVITIES VISIBLE TO HENSON EVEN IF THEY DON'T USE DART ANNOTATIONS @HensonNavigable public class SettingsActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ... } }