diff --git a/src/main/java/ru/touchin/roboswag/components/navigation/SimpleViewControllerFragment.java b/src/main/java/ru/touchin/roboswag/components/navigation/SimpleViewControllerFragment.java index ea2b8b1..1ac005e 100644 --- a/src/main/java/ru/touchin/roboswag/components/navigation/SimpleViewControllerFragment.java +++ b/src/main/java/ru/touchin/roboswag/components/navigation/SimpleViewControllerFragment.java @@ -25,14 +25,12 @@ import android.support.annotation.Nullable; import java.io.Serializable; -import ru.touchin.roboswag.components.utils.Logic; - /** * Created by Gavriil Sitnikov on 07/03/2016. * TODO: fill description */ -public class SimpleViewControllerFragment> - extends ViewControllerFragment { +public class SimpleViewControllerFragment> + extends ViewControllerFragment { private static final String VIEW_CONTROLLER_CLASS_EXTRA = "VIEW_CONTROLLER_CLASS_EXTRA"; @@ -51,13 +49,13 @@ public class SimpleViewControllerFragment>> viewControllerClass; + private Class>> viewControllerClass; @NonNull @Override - public Class>> getViewControllerClass() { + public Class>> getViewControllerClass() { return viewControllerClass; } @@ -65,8 +63,8 @@ public class SimpleViewControllerFragment>>) getArguments().getSerializable(VIEW_CONTROLLER_CLASS_EXTRA); + viewControllerClass = (Class>>) getArguments().getSerializable(VIEW_CONTROLLER_CLASS_EXTRA); } } diff --git a/src/main/java/ru/touchin/roboswag/components/navigation/StatelessViewControllerFragment.java b/src/main/java/ru/touchin/roboswag/components/navigation/StatelessViewControllerFragment.java index d0751f0..2f381ed 100644 --- a/src/main/java/ru/touchin/roboswag/components/navigation/StatelessViewControllerFragment.java +++ b/src/main/java/ru/touchin/roboswag/components/navigation/StatelessViewControllerFragment.java @@ -21,12 +21,10 @@ package ru.touchin.roboswag.components.navigation; import java.io.Serializable; -import ru.touchin.roboswag.components.utils.Logic; - /** * Created by Gavriil Sitnikov on 12/03/2016. * TODO: fill description */ -public class StatelessViewControllerFragment> - extends SimpleViewControllerFragment { +public class StatelessViewControllerFragment> + extends SimpleViewControllerFragment { } diff --git a/src/main/java/ru/touchin/roboswag/components/navigation/ViewController.java b/src/main/java/ru/touchin/roboswag/components/navigation/ViewController.java index 500918e..6d8b622 100644 --- a/src/main/java/ru/touchin/roboswag/components/navigation/ViewController.java +++ b/src/main/java/ru/touchin/roboswag/components/navigation/ViewController.java @@ -28,7 +28,6 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.ViewGroup; -import ru.touchin.roboswag.components.utils.Logic; import rx.Observable; import rx.android.schedulers.AndroidSchedulers; import rx.subjects.BehaviorSubject; @@ -37,9 +36,8 @@ import rx.subjects.BehaviorSubject; * Created by Gavriil Sitnikov on 21/10/2015. * Class to control view of specific fragment, activity and application by logic bridge. */ -public class ViewController, - TFragment extends ViewControllerFragment> { +public class ViewController, + TFragment extends ViewControllerFragment> { @NonNull private final TActivity activity; @@ -54,7 +52,7 @@ public class ViewController creationContext, + public ViewController(@NonNull final CreationContext creationContext, @Nullable final Bundle savedInstanceState) { this.activity = creationContext.activity; this.fragment = creationContext.fragment; @@ -65,16 +63,6 @@ public class ViewController, - TFragment extends ViewControllerFragment> { + public static class CreationContext, + TFragment extends ViewControllerFragment> { @NonNull private final TActivity activity; @@ -171,21 +158,6 @@ public class ViewController extends BaseA return Logic.getInstance(this, getLogicClass()); } + @Override + public boolean onCreateOptionsMenu(final Menu menu) { + onConfigureNavigation(menu); + return super.onCreateOptionsMenu(menu); + } + + /** + * Calls when activity configuring ActionBar, Toolbar, Sidebar etc. Before internal ViewControllers. + * + * @param menu The options menu in which you place your items; + */ + public void onConfigureNavigation(@NonNull final Menu menu) { + // do nothing + } + } diff --git a/src/main/java/ru/touchin/roboswag/components/navigation/ViewControllerFragment.java b/src/main/java/ru/touchin/roboswag/components/navigation/ViewControllerFragment.java index 8593e52..2765925 100644 --- a/src/main/java/ru/touchin/roboswag/components/navigation/ViewControllerFragment.java +++ b/src/main/java/ru/touchin/roboswag/components/navigation/ViewControllerFragment.java @@ -35,7 +35,6 @@ import android.widget.FrameLayout; import java.io.Serializable; import java.lang.reflect.Constructor; -import ru.touchin.roboswag.components.utils.Logic; import ru.touchin.roboswag.core.log.Lc; import ru.touchin.roboswag.core.utils.ShouldNotHappenException; import rx.Observable; @@ -47,7 +46,7 @@ import rx.subjects.BehaviorSubject; * Created by Gavriil Sitnikov on 21/10/2015. * Fragment instantiated in specific activity of {@link TActivity} type that is holding {@link ViewController} inside. */ -public abstract class ViewControllerFragment> +public abstract class ViewControllerFragment> extends ViewFragment { private static final String VIEW_CONTROLLER_STATE_EXTRA = "VIEW_CONTROLLER_STATE_EXTRA"; @@ -88,8 +87,8 @@ public abstract class ViewControllerFragment>> getViewControllerClass(); + public abstract Class>> getViewControllerClass(); @SuppressWarnings("unchecked") @Override @@ -117,8 +116,8 @@ public abstract class ViewControllerFragment constructor = getViewControllerClass().getConstructors()[0]; - final ViewController.CreationContext> creationContext + final ViewController.CreationContext> creationContext = new ViewController.CreationContext<>(activity, this, viewInfo.first); try { switch (constructor.getParameterTypes().length) { diff --git a/src/main/java/ru/touchin/roboswag/components/navigation/ViewControllerNavigation.java b/src/main/java/ru/touchin/roboswag/components/navigation/ViewControllerNavigation.java index 2e7caa6..cba8764 100644 --- a/src/main/java/ru/touchin/roboswag/components/navigation/ViewControllerNavigation.java +++ b/src/main/java/ru/touchin/roboswag/components/navigation/ViewControllerNavigation.java @@ -9,186 +9,187 @@ import android.support.v4.app.FragmentTransaction; import java.io.Serializable; -import ru.touchin.roboswag.components.utils.Logic; import rx.functions.Func1; /** * Created by Gavriil Sitnikov on 07/03/2016. * TODO: fill description */ -public class ViewControllerNavigation extends FragmentNavigation { +public class ViewControllerNavigation> extends FragmentNavigation { - @SuppressWarnings("CPD-START") - public ViewControllerNavigation(@NonNull final ViewControllerActivity context, + public ViewControllerNavigation(@NonNull final TActivity context, @NonNull final FragmentManager fragmentManager, @IdRes final int containerViewId) { super(context, fragmentManager, containerViewId); } - public void push(@NonNull final Class>> fragmentClass, + public void push(@NonNull final Class> fragmentClass, @NonNull final TState state) { addToStack(fragmentClass, null, ViewControllerFragment.createState(state), null, null); } - public void push(@NonNull final Class>> fragmentClass, + public void push(@NonNull final Class> fragmentClass, @Nullable final TState state, @Nullable final Func1 transactionSetup) { addToStack(fragmentClass, null, ViewControllerFragment.createState(state), null, transactionSetup); } - public void pushForResult(@NonNull final Class>> fragmentClass, + public void pushForResult(@NonNull final Class> fragmentClass, @NonNull final Fragment targetFragment, @NonNull final TState state) { - addToStack(fragmentClass, targetFragment, ViewControllerFragment.createState(state), fragmentClass.getName() + ';' - + WITH_TARGET_FRAGMENT_TAG_MARK, null); + addToStack(fragmentClass, targetFragment, ViewControllerFragment.createState(state), + fragmentClass.getName() + ';' + WITH_TARGET_FRAGMENT_TAG_MARK, null); } - public void pushForResult(@NonNull final Class>> fragmentClass, + public void pushForResult(@NonNull final Class> fragmentClass, @NonNull final Fragment targetFragment, @Nullable final TState state, @Nullable final Func1 transactionSetup) { - addToStack(fragmentClass, targetFragment, ViewControllerFragment.createState(state), fragmentClass.getName() + ';' - + WITH_TARGET_FRAGMENT_TAG_MARK, transactionSetup); + addToStack(fragmentClass, targetFragment, ViewControllerFragment.createState(state), + fragmentClass.getName() + ';' + WITH_TARGET_FRAGMENT_TAG_MARK, transactionSetup); } - public void setAsTop(@NonNull final Class>> fragmentClass, + public void setAsTop(@NonNull final Class> fragmentClass, @NonNull final TState state) { setAsTop(fragmentClass, ViewControllerFragment.createState(state), null); } - public void setAsTop(@NonNull final Class>> fragmentClass, + public void setAsTop(@NonNull final Class> fragmentClass, @Nullable final TState state, @Nullable final Func1 transactionSetup) { setAsTop(fragmentClass, ViewControllerFragment.createState(state), transactionSetup); } - public void setInitial(@NonNull final Class>> fragmentClass, + public void setInitial(@NonNull final Class> fragmentClass, @NonNull final TState state) { setInitial(fragmentClass, ViewControllerFragment.createState(state), null); } - public void setInitial(@NonNull final Class>> fragmentClass, + public void setInitial(@NonNull final Class> fragmentClass, @Nullable final TState state, @Nullable final Func1 transactionSetup) { setInitial(fragmentClass, ViewControllerFragment.createState(state), transactionSetup); } - public void pushViewController(@NonNull final Class, - ? extends StatelessViewControllerFragment>>> viewControllerClass) { + public void pushViewController(@NonNull final Class>> viewControllerClass) { addStatelessViewControllerToStack(viewControllerClass, null, null, null); } - public void pushViewController(@NonNull final Class, - ? extends SimpleViewControllerFragment>>> viewControllerClass, + public void pushViewController(@NonNull final Class>> viewControllerClass, @NonNull final TState state) { addViewControllerToStack(viewControllerClass, null, state, null, null); } - public void pushViewController(@NonNull final Class, - ? extends SimpleViewControllerFragment>>> viewControllerClass, - @Nullable final TState state, - @Nullable final Func1 transactionSetup) { + public void pushViewController( + @NonNull final Class>> viewControllerClass, + @NonNull final TState state, + @Nullable final Func1 transactionSetup) { addViewControllerToStack(viewControllerClass, null, state, null, transactionSetup); } - public void pushViewControllerForResult(@NonNull final Class, - ? extends StatelessViewControllerFragment>>> viewControllerClass, - @NonNull final Fragment targetFragment) { + public void pushViewController( + @NonNull final Class>> viewControllerClass, + @Nullable final Func1 transactionSetup) { + addStatelessViewControllerToStack(viewControllerClass, null, null, transactionSetup); + } + + public void pushViewControllerForResult( + @NonNull final Class>> viewControllerClass, + @NonNull final Fragment targetFragment) { addStatelessViewControllerToStack(viewControllerClass, targetFragment, viewControllerClass.getName() + ';' + WITH_TARGET_FRAGMENT_TAG_MARK, null); } - public void pushViewControllerForResult(@NonNull final Class, - ? extends SimpleViewControllerFragment>>> viewControllerClass, - @NonNull final Fragment targetFragment, - @NonNull final TState state) { - addViewControllerToStack(viewControllerClass, targetFragment, state, viewControllerClass.getName() + ';' - + WITH_TARGET_FRAGMENT_TAG_MARK, null); + public void pushViewControllerForResult( + @NonNull final Class>> viewControllerClass, + @NonNull final Fragment targetFragment, + @NonNull final TState state) { + addViewControllerToStack(viewControllerClass, targetFragment, state, + viewControllerClass.getName() + ';' + WITH_TARGET_FRAGMENT_TAG_MARK, null); } - public void pushViewControllerForResult(@NonNull final Class, - ? extends SimpleViewControllerFragment>>> viewControllerClass, - @NonNull final Fragment targetFragment, - @Nullable final TState state, - @Nullable final Func1 - transactionSetup) { - addViewControllerToStack(viewControllerClass, targetFragment, state, viewControllerClass.getName() + ';' - + WITH_TARGET_FRAGMENT_TAG_MARK, transactionSetup); + public void pushViewControllerForResult( + @NonNull final Class>> viewControllerClass, + @NonNull final Fragment targetFragment, + @NonNull final TState state, + @Nullable final Func1 transactionSetup) { + addViewControllerToStack(viewControllerClass, targetFragment, state, + viewControllerClass.getName() + ';' + WITH_TARGET_FRAGMENT_TAG_MARK, transactionSetup); } - public void setViewControllerAsTop(@NonNull final Class, - ? extends StatelessViewControllerFragment>>> viewControllerClass) { + public void pushViewControllerForResult( + @NonNull final Class>> viewControllerClass, + @NonNull final Fragment targetFragment, + @Nullable final Func1 transactionSetup) { + addStatelessViewControllerToStack(viewControllerClass, targetFragment, + viewControllerClass.getName() + ';' + WITH_TARGET_FRAGMENT_TAG_MARK, transactionSetup); + } + + public void setViewControllerAsTop( + @NonNull final Class>> viewControllerClass) { addStatelessViewControllerToStack(viewControllerClass, null, viewControllerClass.getName() + ' ' + TOP_FRAGMENT_TAG_MARK, null); } - public void setViewControllerAsTop(@NonNull final Class, - ? extends SimpleViewControllerFragment>>> viewControllerClass, - @NonNull final TState state) { + public void setViewControllerAsTop( + @NonNull final Class>> viewControllerClass, + @NonNull final TState state) { addViewControllerToStack(viewControllerClass, null, state, viewControllerClass.getName() + ' ' + TOP_FRAGMENT_TAG_MARK, null); } - public void setViewControllerAsTop(@NonNull final Class, - ? extends SimpleViewControllerFragment>>> viewControllerClass, - @Nullable final TState state, - @Nullable final Func1 - transactionSetup) { + public void setViewControllerAsTop( + @NonNull final Class>> viewControllerClass, + @NonNull final TState state, + @Nullable final Func1 transactionSetup) { addViewControllerToStack(viewControllerClass, null, state, viewControllerClass.getName() + ' ' + TOP_FRAGMENT_TAG_MARK, transactionSetup); } - public void setInitialViewController(@NonNull final Class, - ? extends StatelessViewControllerFragment>>> viewControllerClass) { + public void setViewControllerAsTop( + @NonNull final Class>> viewControllerClass, + @Nullable final Func1 transactionSetup) { + addStatelessViewControllerToStack(viewControllerClass, null, viewControllerClass.getName() + ' ' + TOP_FRAGMENT_TAG_MARK, transactionSetup); + } + + public void setInitialViewController( + @NonNull final Class>> viewControllerClass) { beforeSetInitialActions(); setViewControllerAsTop(viewControllerClass); } - public void setInitialViewController(@NonNull final Class, - ? extends SimpleViewControllerFragment>>> viewControllerClass, - @NonNull final TState state) { + public void setInitialViewController( + @NonNull final Class>> viewControllerClass, + @NonNull final TState state) { setInitialViewController(viewControllerClass, state, null); } - public void setInitialViewController(@NonNull final Class, - ? extends SimpleViewControllerFragment>>> viewControllerClass, - @Nullable final TState state, - @Nullable final Func1 - transactionSetup) { + public void setInitialViewController( + @NonNull final Class>> viewControllerClass, + @NonNull final TState state, + @Nullable final Func1 transactionSetup) { beforeSetInitialActions(); setViewControllerAsTop(viewControllerClass, state, transactionSetup); } + public void setInitialViewController( + @NonNull final Class>> viewControllerClass, + @Nullable final Func1 transactionSetup) { + beforeSetInitialActions(); + setViewControllerAsTop(viewControllerClass, transactionSetup); + } + protected void addViewControllerToStack( - @NonNull final Class, ?>> viewControllerClass, + @NonNull final Class>> viewControllerClass, @Nullable final Fragment targetFragment, - @Nullable final TState state, + @NonNull final TState state, @Nullable final String backStackTag, @Nullable final Func1 transactionSetup) { addToStack(SimpleViewControllerFragment.class, targetFragment, SimpleViewControllerFragment.createState(viewControllerClass, state), backStackTag, transactionSetup); } - @SuppressWarnings("CPD-END") - protected void addStatelessViewControllerToStack( - @NonNull final Class, ?>> viewControllerClass, + protected void addStatelessViewControllerToStack( + @NonNull final Class>> viewControllerClass, @Nullable final Fragment targetFragment, @Nullable final String backStackTag, @Nullable final Func1 transactionSetup) {