targeted viewcontrollers added
This commit is contained in:
parent
77fe050c51
commit
9af73c11b7
|
|
@ -19,8 +19,8 @@ android {
|
|||
dependencies {
|
||||
compile project(':libraries:core')
|
||||
|
||||
provided 'com.android.support:appcompat-v7:23.3.0'
|
||||
provided 'com.android.support:recyclerview-v7:23.3.0'
|
||||
provided 'com.android.support:appcompat-v7:23.4.0'
|
||||
provided 'com.android.support:recyclerview-v7:23.4.0'
|
||||
|
||||
provided 'io.reactivex:rxandroid:1.1.0'
|
||||
|
||||
|
|
|
|||
|
|
@ -57,10 +57,10 @@ public class ViewController<TActivity extends ViewControllerActivity<?>,
|
|||
|
||||
@SuppressWarnings("PMD.UnusedFormalParameter")
|
||||
//UnusedFormalParameter: savedInstanceState could be used by children
|
||||
public ViewController(@NonNull final CreationContext<TActivity, TFragment> creationContext,
|
||||
public ViewController(@NonNull final CreationContext creationContext,
|
||||
@Nullable final Bundle savedInstanceState) {
|
||||
this.activity = creationContext.activity;
|
||||
this.fragment = creationContext.fragment;
|
||||
this.activity = (TActivity) creationContext.activity;
|
||||
this.fragment = (TFragment) creationContext.fragment;
|
||||
this.container = creationContext.container;
|
||||
}
|
||||
|
||||
|
|
@ -168,18 +168,17 @@ public class ViewController<TActivity extends ViewControllerActivity<?>,
|
|||
/**
|
||||
* Class to simplify constructor override.
|
||||
*/
|
||||
public static class CreationContext<TActivity extends ViewControllerActivity<?>,
|
||||
TFragment extends ViewControllerFragment<?, TActivity>> {
|
||||
public static class CreationContext {
|
||||
|
||||
@NonNull
|
||||
private final TActivity activity;
|
||||
private final ViewControllerActivity activity;
|
||||
@NonNull
|
||||
private final TFragment fragment;
|
||||
private final ViewControllerFragment fragment;
|
||||
@NonNull
|
||||
private final ViewGroup container;
|
||||
|
||||
public CreationContext(@NonNull final TActivity activity,
|
||||
@NonNull final TFragment fragment,
|
||||
public CreationContext(@NonNull final ViewControllerActivity activity,
|
||||
@NonNull final ViewControllerFragment fragment,
|
||||
@NonNull final ViewGroup container) {
|
||||
this.activity = activity;
|
||||
this.fragment = fragment;
|
||||
|
|
|
|||
|
|
@ -10,7 +10,9 @@ import android.support.v4.app.FragmentTransaction;
|
|||
|
||||
import ru.touchin.roboswag.components.navigation.activities.ViewControllerActivity;
|
||||
import ru.touchin.roboswag.components.navigation.fragments.SimpleViewControllerFragment;
|
||||
import ru.touchin.roboswag.components.navigation.fragments.StatelessTargetedViewControllerFragment;
|
||||
import ru.touchin.roboswag.components.navigation.fragments.StatelessViewControllerFragment;
|
||||
import ru.touchin.roboswag.components.navigation.fragments.TargetedViewControllerFragment;
|
||||
import ru.touchin.roboswag.components.navigation.fragments.ViewControllerFragment;
|
||||
import rx.functions.Func1;
|
||||
|
||||
|
|
@ -98,35 +100,45 @@ public class ViewControllerNavigation<TActivity extends ViewControllerActivity<?
|
|||
addStatelessViewControllerToStack(viewControllerClass, null, null, transactionSetup);
|
||||
}
|
||||
|
||||
public void pushViewControllerForResult(
|
||||
@NonNull final Class<? extends ViewController<TActivity, StatelessViewControllerFragment<TActivity>>> viewControllerClass,
|
||||
@NonNull final Fragment targetFragment) {
|
||||
addStatelessViewControllerToStack(viewControllerClass, targetFragment,
|
||||
public <TTargetState extends AbstractState,
|
||||
TTargetFragment extends ViewControllerFragment<TTargetState, TActivity>> void pushViewControllerForResult(
|
||||
@NonNull final Class<? extends ViewController<TActivity,
|
||||
StatelessTargetedViewControllerFragment<TTargetState, TActivity>>> viewControllerClass,
|
||||
@NonNull final TTargetFragment targetFragment) {
|
||||
addTargetedStatelessViewControllerToStack(viewControllerClass, targetFragment,
|
||||
viewControllerClass.getName() + ';' + WITH_TARGET_FRAGMENT_TAG_MARK, null);
|
||||
}
|
||||
|
||||
public <TState extends AbstractState> void pushViewControllerForResult(
|
||||
@NonNull final Class<? extends ViewController<TActivity, SimpleViewControllerFragment<TState, TActivity>>> viewControllerClass,
|
||||
@NonNull final Fragment targetFragment,
|
||||
@SuppressWarnings("CPD-START")
|
||||
public <TState extends AbstractState, TTargetState extends AbstractState,
|
||||
TTargetFragment extends ViewControllerFragment<TTargetState, TActivity>> void pushViewControllerForResult(
|
||||
@NonNull final Class<? extends ViewController<TActivity,
|
||||
TargetedViewControllerFragment<TState, TTargetState, TActivity>>> viewControllerClass,
|
||||
@NonNull final TTargetFragment targetFragment,
|
||||
@NonNull final TState state) {
|
||||
addViewControllerToStack(viewControllerClass, targetFragment, state,
|
||||
addTargetedViewControllerToStack(viewControllerClass, targetFragment, state,
|
||||
viewControllerClass.getName() + ';' + WITH_TARGET_FRAGMENT_TAG_MARK, null);
|
||||
}
|
||||
|
||||
public <TState extends AbstractState> void pushViewControllerForResult(
|
||||
@NonNull final Class<? extends ViewController<TActivity, SimpleViewControllerFragment<TState, TActivity>>> viewControllerClass,
|
||||
@NonNull final Fragment targetFragment,
|
||||
@SuppressWarnings("CPD-END")
|
||||
public <TState extends AbstractState, TTargetState extends AbstractState,
|
||||
TTargetFragment extends ViewControllerFragment<TTargetState, TActivity>> void pushViewControllerForResult(
|
||||
@NonNull final Class<? extends ViewController<TActivity,
|
||||
TargetedViewControllerFragment<TState, TTargetState, TActivity>>> viewControllerClass,
|
||||
@NonNull final TTargetFragment targetFragment,
|
||||
@NonNull final TState state,
|
||||
@Nullable final Func1<FragmentTransaction, FragmentTransaction> transactionSetup) {
|
||||
addViewControllerToStack(viewControllerClass, targetFragment, state,
|
||||
addTargetedViewControllerToStack(viewControllerClass, targetFragment, state,
|
||||
viewControllerClass.getName() + ';' + WITH_TARGET_FRAGMENT_TAG_MARK, transactionSetup);
|
||||
}
|
||||
|
||||
public void pushViewControllerForResult(
|
||||
@NonNull final Class<? extends ViewController<TActivity, StatelessViewControllerFragment<TActivity>>> viewControllerClass,
|
||||
@NonNull final Fragment targetFragment,
|
||||
public <TTargetState extends AbstractState,
|
||||
TTargetFragment extends ViewControllerFragment<TTargetState, TActivity>> void pushViewControllerForResult(
|
||||
@NonNull final Class<? extends ViewController<TActivity,
|
||||
StatelessTargetedViewControllerFragment<TTargetState, TActivity>>> viewControllerClass,
|
||||
@NonNull final TTargetFragment targetFragment,
|
||||
@Nullable final Func1<FragmentTransaction, FragmentTransaction> transactionSetup) {
|
||||
addStatelessViewControllerToStack(viewControllerClass, targetFragment,
|
||||
addTargetedStatelessViewControllerToStack(viewControllerClass, targetFragment,
|
||||
viewControllerClass.getName() + ';' + WITH_TARGET_FRAGMENT_TAG_MARK, transactionSetup);
|
||||
}
|
||||
|
||||
|
|
@ -191,13 +203,32 @@ public class ViewControllerNavigation<TActivity extends ViewControllerActivity<?
|
|||
SimpleViewControllerFragment.createState(viewControllerClass, state), backStackTag, transactionSetup);
|
||||
}
|
||||
|
||||
protected <TState extends AbstractState> void addTargetedViewControllerToStack(
|
||||
@NonNull final Class<? extends ViewController<TActivity, ? extends ViewControllerFragment<TState, TActivity>>> viewControllerClass,
|
||||
@NonNull final Fragment targetFragment,
|
||||
@NonNull final TState state,
|
||||
@Nullable final String backStackTag,
|
||||
@Nullable final Func1<FragmentTransaction, FragmentTransaction> transactionSetup) {
|
||||
addToStack(TargetedViewControllerFragment.class, targetFragment,
|
||||
SimpleViewControllerFragment.createState(viewControllerClass, state), backStackTag, transactionSetup);
|
||||
}
|
||||
|
||||
protected void addStatelessViewControllerToStack(
|
||||
@NonNull final Class<? extends ViewController<TActivity, ? extends ViewControllerFragment<AbstractState, TActivity>>> viewControllerClass,
|
||||
@Nullable final Fragment targetFragment,
|
||||
@Nullable final String backStackTag,
|
||||
@Nullable final Func1<FragmentTransaction, FragmentTransaction> transactionSetup) {
|
||||
addToStack(StatelessViewControllerFragment.class, targetFragment,
|
||||
SimpleViewControllerFragment.createState(viewControllerClass, null), backStackTag, transactionSetup);
|
||||
StatelessViewControllerFragment.createState(viewControllerClass, null), backStackTag, transactionSetup);
|
||||
}
|
||||
|
||||
protected <TState extends AbstractState> void addTargetedStatelessViewControllerToStack(
|
||||
@NonNull final Class<? extends ViewController<TActivity, ? extends ViewControllerFragment<TState, TActivity>>> viewControllerClass,
|
||||
@NonNull final Fragment targetFragment,
|
||||
@Nullable final String backStackTag,
|
||||
@Nullable final Func1<FragmentTransaction, FragmentTransaction> transactionSetup) {
|
||||
addToStack(StatelessTargetedViewControllerFragment.class, targetFragment,
|
||||
StatelessTargetedViewControllerFragment.createState(viewControllerClass, null), backStackTag, transactionSetup);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
/*
|
||||
* Copyright (c) 2015 RoboSwag (Gavriil Sitnikov, Vsevolod Ivanov)
|
||||
*
|
||||
* This file is part of RoboSwag library.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
*/
|
||||
|
||||
package ru.touchin.roboswag.components.navigation.fragments;
|
||||
|
||||
import ru.touchin.roboswag.components.navigation.AbstractState;
|
||||
import ru.touchin.roboswag.components.navigation.activities.ViewControllerActivity;
|
||||
|
||||
/**
|
||||
* Created by Gavriil Sitnikov on 12/03/2016.
|
||||
* TODO: fill description
|
||||
*/
|
||||
public class StatelessTargetedViewControllerFragment<TTargetState extends AbstractState,
|
||||
TActivity extends ViewControllerActivity<?>>
|
||||
extends TargetedViewControllerFragment<AbstractState, TTargetState, TActivity> {
|
||||
}
|
||||
|
|
@ -1,14 +1,46 @@
|
|||
/*
|
||||
* Copyright (c) 2015 RoboSwag (Gavriil Sitnikov, Vsevolod Ivanov)
|
||||
*
|
||||
* This file is part of RoboSwag library.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
*/
|
||||
|
||||
package ru.touchin.roboswag.components.navigation.fragments;
|
||||
|
||||
import android.support.annotation.NonNull;
|
||||
|
||||
import ru.touchin.roboswag.components.navigation.AbstractState;
|
||||
import ru.touchin.roboswag.components.navigation.activities.ViewControllerActivity;
|
||||
import ru.touchin.roboswag.core.utils.ShouldNotHappenException;
|
||||
|
||||
/**
|
||||
* Created by Gavriil Sitnikov on 11/04/2016.
|
||||
* TODO: fill description
|
||||
*/
|
||||
public class TargetedViewControllerFragment<TState extends AbstractState, TActivity extends ViewControllerActivity<?>>
|
||||
public class TargetedViewControllerFragment<TState extends AbstractState,
|
||||
TTargetState extends AbstractState,
|
||||
TActivity extends ViewControllerActivity<?>>
|
||||
extends SimpleViewControllerFragment<TState, TActivity> {
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@NonNull
|
||||
public ViewControllerFragment<TTargetState, TActivity> getTarget() {
|
||||
if (!(getTargetFragment() instanceof ViewControllerFragment)) {
|
||||
throw new ShouldNotHappenException();
|
||||
}
|
||||
return (ViewControllerFragment<TTargetState, TActivity>) getTargetFragment();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -121,9 +121,7 @@ public abstract class ViewControllerFragment<TState extends AbstractState, TActi
|
|||
throw OnErrorThrowable.from(new ShouldNotHappenException("There should be single constructor for " + getViewControllerClass()));
|
||||
}
|
||||
final Constructor<?> constructor = getViewControllerClass().getConstructors()[0];
|
||||
final ViewController.CreationContext<TActivity,
|
||||
? extends ViewControllerFragment<TState, TActivity>> creationContext
|
||||
= new ViewController.CreationContext<>(activity, this, viewInfo.first);
|
||||
final ViewController.CreationContext creationContext = new ViewController.CreationContext(activity, this, viewInfo.first);
|
||||
try {
|
||||
switch (constructor.getParameterTypes().length) {
|
||||
case 2:
|
||||
|
|
|
|||
Loading…
Reference in New Issue