Slide 1

Slide 1 text

Bundle injection with Dagger Benoît Quenaudon @oldergod

Slide 2

Slide 2 text

public class InputActivity extends Activity { @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_input); final EditText editText = findViewById(R.id.edit_text); }a }b

Slide 3

Slide 3 text

public class InputActivity extends Activity { @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_input); final EditText editText = findViewById(R.id.edit_text); findViewById(R.id.button).setOnClickListener(v -> { }); }a }b

Slide 4

Slide 4 text

public class InputActivity extends Activity { @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_input); final EditText editText = findViewById(R.id.edit_text); findViewById(R.id.button).setOnClickListener(v -> { Intent intent = new Intent(InputActivity.this, OutputActivity.class); intent.putExtra(EXTRA_SOME_INPUT, editText.getText().toString()); }); }a }b

Slide 5

Slide 5 text

public class InputActivity extends Activity { @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_input); final EditText editText = findViewById(R.id.edit_text); findViewById(R.id.button).setOnClickListener(v -> { Intent intent = new Intent(InputActivity.this, OutputActivity.class); intent.putExtra(EXTRA_SOME_INPUT, editText.getText().toString()); InputActivity.this.startActivity(intent); }); }a }b

Slide 6

Slide 6 text

public class InputActivity extends Activity { @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_input); final EditText editText = findViewById(R.id.edit_text); findViewById(R.id.button).setOnClickListener(v -> { Intent intent = new Intent(InputActivity.this, OutputActivity.class); intent.putExtra(EXTRA_SOME_INPUT, editText.getText().toString()); InputActivity.this.startActivity(intent); }); }a }b

Slide 7

Slide 7 text

public class OutputActivity extends Activity { OutputPresenter presenter; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); }a }c

Slide 8

Slide 8 text

public class OutputActivity extends Activity { OutputPresenter presenter; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); String inputText = getIntent().getStringExtra(EXTRA_SOME_INPUT); presenter = new OutputPresenter(inputText); }a }c

Slide 9

Slide 9 text

public class OutputActivity extends Activity { @Inject OutputPresenter presenter; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); String inputText = getIntent().getStringExtra(EXTRA_SOME_INPUT); }a }c

Slide 10

Slide 10 text

public class OutputActivity extends Activity { @Inject OutputPresenter presenter; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); String inputText = getIntent().getStringExtra(EXTRA_SOME_INPUT); presenter.setInputText(inputText); }a }c

Slide 11

Slide 11 text

public class OutputActivity extends Activity { @Inject OutputPresenter presenter; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); String inputText = getIntent().getStringExtra(EXTRA_SOME_INPUT); presenter.setInputText(inputText); }a @Override protected void onStart() { super.onStart(); presenter.onStart(); } }c

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

public class BundleService { private final Bundle data; public BundleService() { data = new Bundle(); }c public Object get(String key) { return data.get(key); }d public Bundle getAll() { return data; }f }e

Slide 14

Slide 14 text

public class BundleService { private final Bundle data; public BundleService(@Nullable Bundle savedState) { data = new Bundle(); if (savedState != null) { data.putAll(savedState); }a }c public Object get(String key) { return data.get(key); }d public Bundle getAll() { return data; }f }e

Slide 15

Slide 15 text

public class BundleService { private final Bundle data; public BundleService(@Nullable Bundle savedState, @Nullable Bundle intentExtras) { data = new Bundle(); if (savedState != null) { data.putAll(savedState); }a if (intentExtras != null) { data.putAll(intentExtras); }b }c public Object get(String key) { return data.get(key); }d public Bundle getAll() { return data; }f }e

Slide 16

Slide 16 text

public class BundleService { private final Bundle data; public BundleService(@Nullable Bundle savedState, @Nullable Bundle intentExtras) { data = new Bundle(); if (savedState != null) { data.putAll(savedState); }a if (intentExtras != null) { data.putAll(intentExtras); }b }c public Object get(String key) { return data.get(key); }d public Bundle getAll() { return data; }f }e

Slide 17

Slide 17 text

public abstract class BaseActivity extends Activity { private BundleService bundleService; @Override public void onCreate(@Nullable Bundle savedInstanceState) { bundleService = new BundleService(savedInstanceState, getIntent().getExtras()); super.onCreate(savedInstanceState); }a }d

Slide 18

Slide 18 text

public abstract class BaseActivity extends Activity { private BundleService bundleService; @Override public void onCreate(@Nullable Bundle savedInstanceState) { bundleService = new BundleService(savedInstanceState, getIntent().getExtras()); super.onCreate(savedInstanceState); }a public BundleService getBundleService() { return bundleService; }b }d

Slide 19

Slide 19 text

public abstract class BaseActivity extends Activity { private BundleService bundleService; @Override public void onCreate(@Nullable Bundle savedInstanceState) { bundleService = new BundleService(savedInstanceState, getIntent().getExtras()); super.onCreate(savedInstanceState); }a public BundleService getBundleService() { return bundleService; }b @Override protected void onSaveInstanceState(Bundle outState) { outState.putAll(bundleService.getAll()); super.onSaveInstanceState(outState); }c }d

Slide 20

Slide 20 text

public abstract class BaseActivity extends Activity { private BundleService bundleService; @Override public void onCreate(@Nullable Bundle savedInstanceState) { bundleService = new BundleService(savedInstanceState, getIntent().getExtras()); super.onCreate(savedInstanceState); }a public BundleService getBundleService() { return bundleService; }b @Override protected void onSaveInstanceState(Bundle outState) { outState.putAll(bundleService.getAll()); super.onSaveInstanceState(outState); }c }d

Slide 21

Slide 21 text

@Module public abstract class BundleModule { @Provides static BundleService provideBundleService(BaseActivity activity) { return activity.getBundleService(); } }

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

@Qualifier @Retention(RUNTIME) public @interface SomeInput {}a

Slide 24

Slide 24 text

@Qualifier @Retention(RUNTIME) public @interface SomeInput {}a @Module public abstract class BundleModule { public static final String EXTRA_SOME_INPUT = "SOME_INPUT"; @Provides static BundleService provideBundleService(BaseActivity activity) { return activity.getBundleService(); } @Provides @SomeInput static String provideSomeInput(BundleService bundleService) { String style = (String) bundleService.get(EXTRA_SOME_INPUT); return style == null ? "Null" : style; } }

Slide 25

Slide 25 text

class OutputPresenter { private final String inputText; OutputPresenter(String inputText) { this.inputText = inputText; }a void onStart() { repository.doSomeWork(inputText); }b }c

Slide 26

Slide 26 text

class OutputPresenter { private final String inputText; @Inject OutputPresenter(String inputText) { this.inputText = inputText; }a void onStart() { repository.doSomeWork(inputText); }b }c

Slide 27

Slide 27 text

class OutputPresenter { private final String inputText; @Inject OutputPresenter(@SomeInput String inputText) { this.inputText = inputText; }a void onStart() { repository.doSomeWork(inputText); }b }c

Slide 28

Slide 28 text

class OutputPresenter { private final String inputText; @Inject OutputPresenter(@SomeInput String inputText) { this.inputText = inputText; }a void onStart() { repository.doSomeWork(inputText); }b }c

Slide 29

Slide 29 text

public class OutputActivity extends BaseActivity { OutputPresenter presenter; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_output); String inputText = getIntent().getStringExtra(EXTRA_SOME_INPUT); presenter = new OutputPresenter(inputText); }a @Override protected void onStart() { super.onStart(); presenter.onStart(); }b }c

Slide 30

Slide 30 text

public class OutputActivity extends BaseActivity { OutputPresenter presenter; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_output); String inputText = getIntent().getStringExtra(EXTRA_SOME_INPUT); presenter = new OutputPresenter(inputText); }a @Override protected void onStart() { super.onStart(); presenter.onStart(); }b }c

Slide 31

Slide 31 text

public class OutputActivity extends BaseActivity { @Inject OutputPresenter presenter; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_output); String inputText = getIntent().getStringExtra(EXTRA_SOME_INPUT); presenter = new OutputPresenter(inputText); }a @Override protected void onStart() { super.onStart(); presenter.onStart(); }b }c

Slide 32

Slide 32 text

public class OutputActivity extends BaseActivity { @Inject OutputPresenter presenter; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_output); }a @Override protected void onStart() { super.onStart(); presenter.onStart(); }b }c

Slide 33

Slide 33 text

public class OutputActivity extends BaseActivity { @Inject OutputPresenter presenter; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_output); }a @Override protected void onStart() { super.onStart(); presenter.onStart(); }b }c

Slide 34

Slide 34 text

Fin Benoît Quenaudon @oldergod