diff --git a/library/src/main/java/cz/kinst/jakub/viewmodelbinding/Navigator.java b/library/src/main/java/cz/kinst/jakub/viewmodelbinding/Navigator.java new file mode 100644 index 0000000..80a5b95 --- /dev/null +++ b/library/src/main/java/cz/kinst/jakub/viewmodelbinding/Navigator.java @@ -0,0 +1,53 @@ +package cz.kinst.jakub.viewmodelbinding; + +import android.os.Bundle; + +public class Navigator { + + private Bundle params; + private Class cls; + private int id; + private Object extraData; + + public Navigator(Class cls, Bundle params, int id, Object extraData) { + this.cls = cls; + this.params = params; + this.id = id; + this.extraData = extraData; + } + + public Navigator(Class cls, Bundle params) { + this(cls, params, 0, null); + } + + public Navigator(Class cls) { + this(cls, null, 0, null); + } + + + public Bundle getParams() { + return params; + } + + public Class getCls() { + return cls; + } + + public int getId() { + return id; + } + + public Object getExtraData() { + return extraData; + } + + public Navigator with(Bundle params) { + this.params = params; + return this; + } + + public static Navigator to(Class cls) { + return new Navigator<>(cls); + } + +} diff --git a/library/src/main/java/cz/kinst/jakub/viewmodelbinding/ViewInterface.java b/library/src/main/java/cz/kinst/jakub/viewmodelbinding/ViewInterface.java index b5fa99e..5866484 100644 --- a/library/src/main/java/cz/kinst/jakub/viewmodelbinding/ViewInterface.java +++ b/library/src/main/java/cz/kinst/jakub/viewmodelbinding/ViewInterface.java @@ -19,5 +19,5 @@ public interface ViewInterface { Activity getActivity(); Bundle getBundle(); ViewModelBindingConfig getViewModelBindingConfig(); - void navigate(int way, Bundle params); + void navigate(Navigator n); } diff --git a/library/src/main/java/cz/kinst/jakub/viewmodelbinding/ViewModelActivity.java b/library/src/main/java/cz/kinst/jakub/viewmodelbinding/ViewModelActivity.java index 8c4acc5..e0ed4f4 100644 --- a/library/src/main/java/cz/kinst/jakub/viewmodelbinding/ViewModelActivity.java +++ b/library/src/main/java/cz/kinst/jakub/viewmodelbinding/ViewModelActivity.java @@ -51,8 +51,7 @@ public Bundle getBundle() { } @Override - public void navigate(int way, Bundle params) { - + public void navigate(Navigator n) { } @Override diff --git a/library/src/main/java/cz/kinst/jakub/viewmodelbinding/ViewModelDialogFragment.java b/library/src/main/java/cz/kinst/jakub/viewmodelbinding/ViewModelDialogFragment.java index 035e7ce..7154c13 100644 --- a/library/src/main/java/cz/kinst/jakub/viewmodelbinding/ViewModelDialogFragment.java +++ b/library/src/main/java/cz/kinst/jakub/viewmodelbinding/ViewModelDialogFragment.java @@ -65,7 +65,7 @@ public Bundle getBundle() { } @Override - public void navigate(int way, Bundle params) { + public void navigate(Navigator n) { } @Override diff --git a/library/src/main/java/cz/kinst/jakub/viewmodelbinding/ViewModelFragment.java b/library/src/main/java/cz/kinst/jakub/viewmodelbinding/ViewModelFragment.java index 3115f60..39a74ef 100644 --- a/library/src/main/java/cz/kinst/jakub/viewmodelbinding/ViewModelFragment.java +++ b/library/src/main/java/cz/kinst/jakub/viewmodelbinding/ViewModelFragment.java @@ -65,7 +65,7 @@ public Bundle getBundle() { } @Override - public void navigate(int way, Bundle params) { + public void navigate(Navigator n) { } @Override diff --git a/sample/src/main/java/cz/kinst/jakub/sample/viewmodelbinding/MainActivity.java b/sample/src/main/java/cz/kinst/jakub/sample/viewmodelbinding/MainActivity.java index 2cdc79c..0906650 100644 --- a/sample/src/main/java/cz/kinst/jakub/sample/viewmodelbinding/MainActivity.java +++ b/sample/src/main/java/cz/kinst/jakub/sample/viewmodelbinding/MainActivity.java @@ -1,12 +1,11 @@ package cz.kinst.jakub.sample.viewmodelbinding; -import android.os.Bundle; -import android.widget.Toast; +import android.support.v4.app.DialogFragment; +import android.support.v4.app.Fragment; import cz.kinst.jakub.sample.viewmodelbinding.databinding.ActivityMainBinding; -import cz.kinst.jakub.viewmodelbinding.ViewModelActivity; -import cz.kinst.jakub.viewmodelbinding.ViewModelBindingConfig; +import cz.kinst.jakub.viewmodelbinding.*; /** @@ -20,17 +19,11 @@ public ViewModelBindingConfig getViewModelBindingConfig() { } @Override - public void navigate(int way, Bundle params) { - super.navigate(way, params); - if (way == MainViewModel.WAY_DIALOG) { - SampleDialogFragment dialog = SampleDialogFragment.newInstance(); - dialog.setListener(new SampleDialogViewModel.SampleDialogListener() { - @Override - public void onButtonClicked() { - Toast.makeText(getContext(), "Button in dialog clicked", Toast.LENGTH_SHORT).show(); - } - }); - dialog.show(getSupportFragmentManager(), "sample"); + public void navigate(Navigator n) { + switch (n.getId()) { // decide where to go + default: + DialogFragment dialog = (DialogFragment) Fragment.instantiate(this, n.getCls().getName(), n.getParams()); + dialog.show(getSupportFragmentManager(), "sample"); } } } diff --git a/sample/src/main/java/cz/kinst/jakub/sample/viewmodelbinding/MainViewModel.java b/sample/src/main/java/cz/kinst/jakub/sample/viewmodelbinding/MainViewModel.java index 50ce305..26972c3 100644 --- a/sample/src/main/java/cz/kinst/jakub/sample/viewmodelbinding/MainViewModel.java +++ b/sample/src/main/java/cz/kinst/jakub/sample/viewmodelbinding/MainViewModel.java @@ -4,6 +4,7 @@ import android.view.View; import cz.kinst.jakub.sample.viewmodelbinding.databinding.ActivityMainBinding; +import cz.kinst.jakub.viewmodelbinding.Navigator; import cz.kinst.jakub.viewmodelbinding.ViewModel; @@ -36,7 +37,7 @@ public void onClickGreetButton(View v) { public void onClickedShowDialogFragmentButton(View v) { - getView().navigate(WAY_DIALOG, null); + getView().navigate(Navigator.to(SampleDialogFragment.class)); } diff --git a/sample/src/main/java/cz/kinst/jakub/sample/viewmodelbinding/SampleDialogFragment.java b/sample/src/main/java/cz/kinst/jakub/sample/viewmodelbinding/SampleDialogFragment.java index 722a74c..10ea922 100644 --- a/sample/src/main/java/cz/kinst/jakub/sample/viewmodelbinding/SampleDialogFragment.java +++ b/sample/src/main/java/cz/kinst/jakub/sample/viewmodelbinding/SampleDialogFragment.java @@ -1,41 +1,18 @@ package cz.kinst.jakub.sample.viewmodelbinding; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.view.View; - import cz.kinst.jakub.sample.viewmodelbinding.databinding.DialogSampleBinding; -import cz.kinst.jakub.viewmodelbinding.ViewModelBindingConfig; -import cz.kinst.jakub.viewmodelbinding.ViewModelDialogFragment; +import cz.kinst.jakub.viewmodelbinding.*; public class SampleDialogFragment extends ViewModelDialogFragment { - private SampleDialogViewModel.SampleDialogListener mListener; - - - public static SampleDialogFragment newInstance() { - Bundle args = new Bundle(); - SampleDialogFragment fragment = new SampleDialogFragment(); - fragment.setArguments(args); - return fragment; - } - - @Override public ViewModelBindingConfig getViewModelBindingConfig() { return new ViewModelBindingConfig(R.layout.dialog_sample, SampleDialogViewModel.class); } - @Override - public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - getViewModel().setListener(mListener); - } - - - public void setListener(SampleDialogViewModel.SampleDialogListener listener) { - mListener = listener; + public void navigate(Navigator n) { + dismiss(); } } diff --git a/sample/src/main/java/cz/kinst/jakub/sample/viewmodelbinding/SampleDialogViewModel.java b/sample/src/main/java/cz/kinst/jakub/sample/viewmodelbinding/SampleDialogViewModel.java index 2e1d33d..caed7b3 100644 --- a/sample/src/main/java/cz/kinst/jakub/sample/viewmodelbinding/SampleDialogViewModel.java +++ b/sample/src/main/java/cz/kinst/jakub/sample/viewmodelbinding/SampleDialogViewModel.java @@ -1,27 +1,17 @@ package cz.kinst.jakub.sample.viewmodelbinding; import android.view.View; +import android.widget.Toast; import cz.kinst.jakub.sample.viewmodelbinding.databinding.DialogSampleBinding; import cz.kinst.jakub.viewmodelbinding.ViewModel; public class SampleDialogViewModel extends ViewModel { - SampleDialogListener mListener; - - - public interface SampleDialogListener { - void onButtonClicked(); - } - public void onClickedButton(View v) { - if(mListener != null) - mListener.onButtonClicked(); + Toast.makeText(getContext(), "Button in dialog clicked", Toast.LENGTH_SHORT).show(); + getView().navigate(null); } - - public void setListener(SampleDialogListener listener) { - mListener = listener; - } }