Popup view
on Mortar
@KeithYokoma - Drivemode, Inc.
potatotips #21
@KeithYokoma
Keishin Yokomaku at Drivemode, Inc. as Engineer
Experience
1.SNS client and photo book application for Androi...
Flow & Mortar
Mortar
• Mortar
• Enumerates app’s UI states and navigates between them
• Alternative but good old practice for building U...
Fragments vs. Presenters
ListFragment
Fragment
DialogFragment
} View &Screen.Presenter
?
Fragments vs. Presenters
ListFragment
Fragment
DialogFragment
} View &Screen.Presenter
Popup & Screen.PopupPresenter
Popup
public class ConfirmationPopup implements Popup<Info, Boolean> {
private final Context mContext;
private AlertDialog...
Popup
public class ConfirmationPopup implements Popup<Info, Boolean> {
private final Context mContext;
private AlertDialog...
Popup
public class ConfirmationPopup implements Popup<Info, Boolean> {
private final Context mContext;
private AlertDialog...
Popup
public class ConfirmationPopup implements Popup<Info, Boolean> {
private final Context mContext;
private AlertDialog...
Popup
public class ConfirmationPopup implements Popup<Info, Boolean> {
private final Context mContext;
private AlertDialog...
public class ConfirmationPopup implements Popup<Info, Boolean> {
private final Context mContext;
private AlertDialog mDial...
Popup
public class ConfirmationPopup implements Popup<Info, Boolean> {
private final Context mContext;
private AlertDialog...
PopupPresenter
public class SomeView extends FrameLayout {
// do not inject popup presenter and popup here.
private PopupP...
PopupPresenter
public class SomeView extends FrameLayout {
// do not inject popup presenter and popup here.
private PopupP...
PopupPresenter
public class SomeView extends FrameLayout {
// do not inject popup presenter and popup here.
private PopupP...
PopupPresenter
public class SomeView extends FrameLayout {
// do not inject popup presenter and popup here.
private PopupP...
PopupPresenter
public class SomeView extends FrameLayout {
// do not inject popup presenter and popup here.
private PopupP...
PopupPresenter
public class SomeView extends FrameLayout {
// do not inject popup presenter and popup here.
private PopupP...
PopupPresenter
public class SomeView extends FrameLayout {
// do not inject popup presenter and popup here.
private PopupP...
Popup & PopupPresenter
• PopupPresenter<D extends Parcelable, R>
• Alternative to FragmentManager
• Handles user’s choice ...
Popup & PopupPresenter
• Popup<D extends Parcelable, R>
• Alternative to DialogFragment
• Receives arguments without Bundl...
–Hollywood Principle
“Don't call us, we'll call you”
Popup view
on Mortar
@KeithYokoma - Drivemode, Inc.
potatotips #21
Join our team? Contact me!
Popup view on Mortar
of 26

Popup view on Mortar

How to use Popup view with a library called Mortar, which is produced by Square.
Published on: Mar 4, 2016
Published in: Technology      
Source: www.slideshare.net


Transcripts - Popup view on Mortar

  • 1. Popup view on Mortar @KeithYokoma - Drivemode, Inc. potatotips #21
  • 2. @KeithYokoma Keishin Yokomaku at Drivemode, Inc. as Engineer Experience 1.SNS client and photo book application for Android 2.Driver’s application for Android Publications 1.Android Training 2.Mixi official smartphone application development guide Like Motorsport, Bicycle, Photography, Tumblr
  • 3. Flow & Mortar
  • 4. Mortar • Mortar • Enumerates app’s UI states and navigates between them • Alternative but good old practice for building UI parts • Based on “View” system on Android and… • Replaces fussy “Fragment” system
  • 5. Fragments vs. Presenters ListFragment Fragment DialogFragment } View &Screen.Presenter ?
  • 6. Fragments vs. Presenters ListFragment Fragment DialogFragment } View &Screen.Presenter Popup & Screen.PopupPresenter
  • 7. Popup public class ConfirmationPopup implements Popup<Info, Boolean> { private final Context mContext; private AlertDialog mDialog; @Override public void show(Info info, boolean withFlourish, PopupPresenter<Info, Boolean> presenter) { if (mDialog != null) throw new IllegalStateException(“already shown!”); mDialog = new AlertDialog.Builder(getContext()) .setMessage(info.getMessage()) .setPositiveButton(info.getPositive(), (dialog, which) -> presenter.onDismissed(true)) .setNegativeButton(info.getNegative(), (dialog, which) -> presenter.onDismissed(false)) .show(); } }
  • 8. Popup public class ConfirmationPopup implements Popup<Info, Boolean> { private final Context mContext; private AlertDialog mDialog; @Override public void show(Info info, boolean withFlourish, PopupPresenter<Info, Boolean> presenter) { if (mDialog != null) throw new IllegalStateException(“already shown!”); mDialog = new AlertDialog.Builder(getContext()) .setMessage(info.getMessage()) .setPositiveButton(info.getPositive(), (dialog, which) -> presenter.onDismissed(true)) .setNegativeButton(info.getNegative(), (dialog, which) -> presenter.onDismissed(false)) .show(); } }
  • 9. Popup public class ConfirmationPopup implements Popup<Info, Boolean> { private final Context mContext; private AlertDialog mDialog; @Override public void show(Info info, boolean withFlourish, PopupPresenter<Info, Boolean> presenter) { if (mDialog != null) throw new IllegalStateException(“already shown!”); mDialog = new AlertDialog.Builder(getContext()) .setMessage(info.getMessage()) .setPositiveButton(info.getPositive(), (dialog, which) -> presenter.onDismissed(true)) .setNegativeButton(info.getNegative(), (dialog, which) -> presenter.onDismissed(false)) .show(); } }
  • 10. Popup public class ConfirmationPopup implements Popup<Info, Boolean> { private final Context mContext; private AlertDialog mDialog; @Override public void show(Info info, boolean withFlourish, PopupPresenter<Info, Boolean> presenter) { if (mDialog != null) throw new IllegalStateException(“already shown!”); mDialog = new AlertDialog.Builder(getContext()) .setMessage(info.getMessage()) .setPositiveButton(info.getPositive(), (dialog, which) -> presenter.onDismissed(true)) .setNegativeButton(info.getNegative(), (dialog, which) -> presenter.onDismissed(false)) .show(); } }
  • 11. Popup public class ConfirmationPopup implements Popup<Info, Boolean> { private final Context mContext; private AlertDialog mDialog; @Override public void show(Info info, boolean withFlourish, PopupPresenter<Info, Boolean> presenter) { if (mDialog != null) throw new IllegalStateException(“already shown!”); mDialog = new AlertDialog.Builder(getContext()) .setMessage(info.getMessage()) .setPositiveButton(info.getPositive(), (dialog, which) -> presenter.onDismissed(true)) .setNegativeButton(info.getNegative(), (dialog, which) -> presenter.onDismissed(false)) .show(); } }
  • 12. public class ConfirmationPopup implements Popup<Info, Boolean> { private final Context mContext; private AlertDialog mDialog; @Override public void show(Info info, boolean withFlourish, PopupPresenter<Info, Boolean> presenter) { if (mDialog != null) throw new IllegalStateException(“already shown!”); mDialog = new AlertDialog.Builder(getContext()) .setMessage(info.getMessage()) .setPositiveButton(info.getPositive(), (dialog, which) -> presenter.onDismissed(true)) .setNegativeButton(info.getNegative(), (dialog, which) -> presenter.onDismissed(false)) .show(); } } withFlourish { true if Popup is explicitly shown/dismissed through Presenter false otherwise
  • 13. Popup public class ConfirmationPopup implements Popup<Info, Boolean> { private final Context mContext; private AlertDialog mDialog; @Override public boolean isShowing() { return mDialog != null; } @Override public Context getContext() { return mContext; } @Override public void dismiss(boolean withFlourish) { mDialog.dismiss(); mDialog = null; } }
  • 14. PopupPresenter public class SomeView extends FrameLayout { // do not inject popup presenter and popup here. private PopupPresenter<Info, Boolean> mPopupPresenter = new PopupPresenter<>() { @Override public void onPopupResult(Boolean result) { } // result == user’s choice } private Popup mPopup; @Override public void onAttachedToWindow() { super.onAttachedToWindow(); mPopup = new ConfirmationPopup(getContext()); mPopupPresenter.takeView(mPopup); } }
  • 15. PopupPresenter public class SomeView extends FrameLayout { // do not inject popup presenter and popup here. private PopupPresenter<Info, Boolean> mPopupPresenter = new PopupPresenter<>() { @Override public void onPopupResult(Boolean result) { } // result == user’s choice } private Popup mPopup; @Override public void onAttachedToWindow() { super.onAttachedToWindow(); mPopup = new ConfirmationPopup(getContext()); mPopupPresenter.takeView(mPopup); } }
  • 16. PopupPresenter public class SomeView extends FrameLayout { // do not inject popup presenter and popup here. private PopupPresenter<Info, Boolean> mPopupPresenter = new PopupPresenter<>() { @Override public void onPopupResult(Boolean result) { } // result == user’s choice } private Popup mPopup; @Override public void onAttachedToWindow() { super.onAttachedToWindow(); mPopup = new ConfirmationPopup(getContext()); mPopupPresenter.takeView(mPopup); } }
  • 17. PopupPresenter public class SomeView extends FrameLayout { // do not inject popup presenter and popup here. private PopupPresenter<Info, Boolean> mPopupPresenter = new PopupPresenter<>() { @Override public void onPopupResult(Boolean result) { } // result == user’s choice } private Popup mPopup; @Override public void onDetachedFromWindow() { mPopupPresenter.dropView(mPopup); super.onDetachedFromWindow(); } }
  • 18. PopupPresenter public class SomeView extends FrameLayout { // do not inject popup presenter and popup here. private PopupPresenter<Info, Boolean> mPopupPresenter = new PopupPresenter<>() { @Override public void onPopupResult(Boolean result) { } // result == user’s choice } private Popup mPopup; @Override public void onDetachedFromWindow() { mPopupPresenter.dropView(mPopup); super.onDetachedFromWindow(); } }
  • 19. PopupPresenter public class SomeView extends FrameLayout { // do not inject popup presenter and popup here. private PopupPresenter<Info, Boolean> mPopupPresenter = new PopupPresenter<>() { @Override public void onPopupResult(Boolean result) { } // result == user’s choice } private Popup mPopup; @OnClick(R.id.submit) public void onSubmit() { mPopupPresenter.show(Info.create(“Is it ok?”, “ok”, “cancel”)); } }
  • 20. PopupPresenter public class SomeView extends FrameLayout { // do not inject popup presenter and popup here. private PopupPresenter<Info, Boolean> mPopupPresenter = new PopupPresenter<>() { @Override public void onPopupResult(Boolean result) { } // result == user’s choice } private Popup mPopup; @OnClick(R.id.submit) public void onSubmit() { mPopupPresenter.show(Info.create(“Is it ok?”, “ok”, “cancel”)); } }
  • 21. Popup & PopupPresenter • PopupPresenter<D extends Parcelable, R> • Alternative to FragmentManager • Handles user’s choice callback at “onPopupResult” • Type param D must implement “equals” and “hashCode”,
 and may not be null(otherwise Popup will not be shown)
  • 22. Popup & PopupPresenter • Popup<D extends Parcelable, R> • Alternative to DialogFragment • Receives arguments without Bundle (like DialogFragment) • Presenter will publish user’s choice data for you
  • 23. –Hollywood Principle “Don't call us, we'll call you”
  • 24. Popup view on Mortar @KeithYokoma - Drivemode, Inc. potatotips #21
  • 25. Join our team? Contact me!

Related Documents