Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
aartikov committed Jan 14, 2018
2 parents e02ce86 + f93c673 commit abbbe27
Show file tree
Hide file tree
Showing 136 changed files with 2,655 additions and 2,166 deletions.
105 changes: 56 additions & 49 deletions README.md

Large diffs are not rendered by default.

25 changes: 13 additions & 12 deletions advancedscreenswitchersample/build.gradle
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
apply plugin: 'com.android.application'
apply plugin: 'me.tatarka.retrolambda'

android {
compileSdkVersion 25
buildToolsVersion "25.0.0"
compileSdkVersion 26
buildToolsVersion "26.0.2"

defaultConfig {
applicationId "me.aartikov.advancedscreenswitchersample"
minSdkVersion 15
targetSdkVersion 25
targetSdkVersion 26
versionCode 1
versionName "1.0"

Expand All @@ -28,15 +27,17 @@ android {
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
implementation fileTree(dir: 'libs', include: ['*.jar'])
androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support:design:25.3.1'
testCompile 'junit:junit:4.12'
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support:design:26.1.0'
testImplementation 'junit:junit:4.12'

compile project(':alligator')
compile 'com.jakewharton:butterknife:8.4.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
implementation project (':alligator')
annotationProcessor project(':alligator-compiler')

implementation 'com.jakewharton:butterknife:8.5.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import me.aartikov.alligator.NavigationContextBinder;
import me.aartikov.alligator.Navigator;
import me.aartikov.alligator.ScreenResolver;
import me.aartikov.alligator.navigationfactories.GeneratedNavigationFactory;

/**
* Date: 21.01.2016
Expand All @@ -19,7 +20,7 @@ public class SampleApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
sAndroidNavigator = new AndroidNavigator(new SampleNavigationFactory());
sAndroidNavigator = new AndroidNavigator(new GeneratedNavigationFactory());
}

public static Navigator getNavigator() {
Expand All @@ -33,4 +34,4 @@ public static NavigationContextBinder getNavigationContextBinder() {
public static ScreenResolver getScreenResolver() {
return sAndroidNavigator.getScreenResolver();
}
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package me.aartikov.advancedscreenswitchersample;

import me.aartikov.advancedscreenswitchersample.screens.TabScreen;
import me.aartikov.alligator.AnimationData;
import java.util.List;

import me.aartikov.alligator.Screen;
import me.aartikov.alligator.TransitionAnimation;
import me.aartikov.alligator.animations.transition.SimpleTransitionAnimation;
import me.aartikov.alligator.animations.AnimationData;
import me.aartikov.alligator.animations.SimpleTransitionAnimation;
import me.aartikov.alligator.animations.TransitionAnimation;
import me.aartikov.alligator.screenswitchers.FragmentScreenSwitcher;

/**
Expand All @@ -14,10 +15,16 @@
* @author Artur Artikov
*/
public class SampleScreenSwitcherAnimationProvider implements FragmentScreenSwitcher.AnimationProvider {
private List<Screen> mTabScreens;

public SampleScreenSwitcherAnimationProvider(List<Screen> tabScreens) {
mTabScreens = tabScreens;
}

@Override
public TransitionAnimation getAnimation(Screen screenFrom, Screen screenTo, AnimationData animationData) {
int indexFrom = ((TabScreen) screenFrom).ordinal();
int indexTo = ((TabScreen) screenTo).ordinal();
int indexFrom = mTabScreens.indexOf (screenFrom);
int indexTo = mTabScreens.indexOf (screenTo);
if (indexTo > indexFrom) {
return new SimpleTransitionAnimation(R.anim.slide_in_right, R.anim.slide_out_left);
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@

import android.support.annotation.Nullable;

import me.aartikov.alligator.AnimationData;
import me.aartikov.alligator.animations.AnimationData;
import me.aartikov.alligator.Screen;
import me.aartikov.alligator.TransitionAnimation;
import me.aartikov.alligator.TransitionAnimationProvider;
import me.aartikov.alligator.animations.TransitionAnimation;
import me.aartikov.alligator.animations.providers.TransitionAnimationProvider;
import me.aartikov.alligator.TransitionType;
import me.aartikov.alligator.animations.transition.SimpleTransitionAnimation;
import me.aartikov.alligator.animations.SimpleTransitionAnimation;

/**
* Date: 28.02.2017
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
package me.aartikov.advancedscreenswitchersample.screens;

import android.support.annotation.IdRes;
import android.support.annotation.StringRes;
import java.io.Serializable;

import me.aartikov.advancedscreenswitchersample.R;
import me.aartikov.alligator.Screen;

/**
Expand All @@ -13,35 +11,35 @@
* @author Artur Artikov
*/

// Screens used by FragmentScreenSwitcher must have equals and hashCode methods correctly overridden. Or you can use enums that already have valid equals and hashCode.
// Screens used by FragmentScreenSwitcher must have equals and hashCode methods correctly overridden.

public enum TabScreen implements Screen {
ANDROID(R.id.tab_android, R.string.tab_android),
BUG(R.id.tab_bug, R.string.tab_bug),
DOG(R.id.tab_dog, R.string.tab_dog);
public class TabScreen implements Screen, Serializable {
private String mName;

private int mId;
private int mName;

TabScreen(@IdRes int id, @StringRes int name) {
mId = id;
public TabScreen(String name) {
mName = name;
}

public @IdRes int getId() {
return mId;
}

public @StringRes int getName() {
public String getName() {
return mName;
}

public static TabScreen getById(@IdRes int id) {
for (TabScreen screen : values()) {
if (screen.getId() == id) {
return screen;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
throw new IllegalArgumentException("Unknown id " + id);

TabScreen tabScreen = (TabScreen) o;

return mName.equals(tabScreen.mName);
}

@Override
public int hashCode() {
return mName.hashCode();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,15 @@
import me.aartikov.advancedscreenswitchersample.SampleApplication;
import me.aartikov.advancedscreenswitchersample.screens.InnerScreen;
import me.aartikov.alligator.Navigator;
import me.aartikov.alligator.annotations.RegisterScreen;

/**
* Date: 22.01.2016
* Time: 0:38
*
* @author Artur Artikov
*/
@RegisterScreen(InnerScreen.class)
public class InnerFragment extends Fragment {
@BindView(R.id.counter_text_view)
TextView mCounterTextView;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
package me.aartikov.advancedscreenswitchersample.ui;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
Expand All @@ -14,12 +20,14 @@
import me.aartikov.advancedscreenswitchersample.SampleApplication;
import me.aartikov.advancedscreenswitchersample.SampleScreenSwitcherAnimationProvider;
import me.aartikov.advancedscreenswitchersample.SampleTransitionAnimationProvider;
import me.aartikov.advancedscreenswitchersample.screens.MainScreen;
import me.aartikov.advancedscreenswitchersample.screens.TabScreen;
import me.aartikov.alligator.NavigationContext;
import me.aartikov.alligator.NavigationContextBinder;
import me.aartikov.alligator.Navigator;
import me.aartikov.alligator.Screen;
import me.aartikov.alligator.ScreenSwitchingListener;
import me.aartikov.alligator.annotations.RegisterScreen;
import me.aartikov.alligator.listeners.ScreenSwitchingListener;
import me.aartikov.alligator.screenswitchers.FragmentScreenSwitcher;

/**
Expand All @@ -28,6 +36,7 @@
*
* @author Artur Artikov
*/
@RegisterScreen(MainScreen.class)
public class MainActivity extends AppCompatActivity implements BottomNavigationView.OnNavigationItemSelectedListener, ScreenSwitchingListener {
@BindView(R.id.bottom_bar)
BottomNavigationView mBottomBar;
Expand All @@ -36,20 +45,30 @@ public class MainActivity extends AppCompatActivity implements BottomNavigationV
private NavigationContextBinder mNavigationContextBinder = SampleApplication.getNavigationContextBinder();
private FragmentScreenSwitcher mScreenSwitcher;

@SuppressLint("UseSparseArrays")
private Map<Integer, Screen> mTabScreenMap = new LinkedHashMap<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);

initTabScreenMap();
mBottomBar.setOnNavigationItemSelectedListener(this);
mScreenSwitcher = new FragmentScreenSwitcher(getSupportFragmentManager(), R.id.main_container, new SampleScreenSwitcherAnimationProvider());
mScreenSwitcher = new FragmentScreenSwitcher(getSupportFragmentManager(), R.id.main_container, new SampleScreenSwitcherAnimationProvider(getTabScreens()));

if (savedInstanceState == null) {
mNavigator.switchTo(TabScreen.getById(R.id.tab_android));
mNavigator.switchTo(getTabScreen(R.id.tab_android));
}
}

private void initTabScreenMap() {
mTabScreenMap.put(R.id.tab_android, new TabScreen(getString(R.string.tab_android)));
mTabScreenMap.put(R.id.tab_bug, new TabScreen(getString(R.string.tab_bug)));
mTabScreenMap.put(R.id.tab_dog, new TabScreen(getString(R.string.tab_dog)));
}

@Override
protected void onResumeFragments() {
super.onResumeFragments();
Expand Down Expand Up @@ -84,15 +103,32 @@ public void onBackPressed() {

@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Screen screen = TabScreen.getById(item.getItemId());
Screen screen = getTabScreen(item.getItemId());
mNavigator.switchTo(screen);
return false;
}

@Override
public void onScreenSwitched(@Nullable Screen screenFrom, Screen screenTo) {
int tabId = ((TabScreen) screenTo).getId();
int tabId = getTabId(screenTo);
mBottomBar.getMenu().findItem(tabId).setChecked(true);
bindNavigationContext(); // rebind NavigationContext because we need to set another container id and another child fragment manager.
}

private Screen getTabScreen(int tabId) {
return mTabScreenMap.get(tabId);
}

private int getTabId(Screen tabScreen) {
for (Map.Entry<Integer, Screen> entry : mTabScreenMap.entrySet()) {
if (tabScreen.equals(entry.getValue())) {
return entry.getKey();
}
}
return -1;
}

private List<Screen> getTabScreens() {
return new ArrayList<>(mTabScreenMap.values());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,15 @@
import me.aartikov.advancedscreenswitchersample.screens.InnerScreen;
import me.aartikov.advancedscreenswitchersample.screens.TabScreen;
import me.aartikov.alligator.Navigator;
import me.aartikov.alligator.annotations.RegisterScreen;

/**
* Date: 21.01.2016
* Time: 23:30
*
* @author Artur Artikov
*/
@RegisterScreen(TabScreen.class)
public class TabFragment extends Fragment implements ContainerIdProvider {
@BindView(R.id.name_text_view)
TextView mNameTextView;
Expand Down
1 change: 1 addition & 0 deletions alligator-compiler/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/build
18 changes: 18 additions & 0 deletions alligator-compiler/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
apply plugin: 'java'
apply plugin: 'maven'

group = 'com.github.aartikov'

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.squareup:javapoet:1.8.0'
}

task sourcesJar(type: Jar) {
from sourceSets.main.java.srcDirs
classifier = 'sources'
}

artifacts {
archives sourcesJar
}
14 changes: 14 additions & 0 deletions alligator-compiler/src/main/java/me/aartikov/alligator/Screen.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package me.aartikov.alligator;

/**
* Date: 29.12.2016
* Time: 10:13
*
* @author Artur Artikov
*/

/**
* Logical representation of an application screen.
*/
public interface Screen {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package me.aartikov.alligator;

/**
* Date: 12.03.2017
* Time: 10:50
*
* @author Artur Artikov
*/

/**
* Object that can be returned by a screen as a result.
*/
public interface ScreenResult {
}
Loading

0 comments on commit abbbe27

Please sign in to comment.