diff --git a/.travis.yml b/.travis.yml index 5507030..1b500a5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,15 +1,36 @@ language: android + +jdk: +- oraclejdk8 + android: components: - tools + - tools - platform-tools - - build-tools-24.0.2 + - build-tools-24.0.3 - android-24 - extra-google-google_play_services - extra-google-m2repository - extra-android-m2repository -jdk: -- oraclejdk8 + +licenses: + - '.+' + +before_cache: + - rm -f $HOME/.gradle/caches/modules-2/modules-2.lock + - rm -fr $HOME/.gradle/caches/*/plugin-resolution/ + +cache: + directories: + - $HOME/.m2 + - $HOME/.gradle + +before_install: + - mkdir "$ANDROID_HOME/licenses" || true + - echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_HOME/licenses/android-sdk-license" + - echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_HOME/licenses/android-sdk-preview-license" + notifications: slack: - secure: qIOOj57yVyinyTs9SinZmp/aVN5Or/9LDg+l9SYMqVCaqM9zDk7s1/m/L7VNPdWCuWOzLf9g1+0ReBcwZ6vh+HWBQ4T1V4HQd09whhUGyW9kMj3BKE0gWpIJLYKuhM551auv3FVzTp3u27q4W0zgiXB8qHWatTQu9rcPumG+IJaZD1uHsbhrQq0RLD8n8hWjQAdkRKRtSo4UR55sTK35uGRZbMFcyJSiStBXRP43w2kTR1MxIst4r9NeOx/sjebBQ/XxabKJgqAHhue80O3Cy8s0u59NDHOMpqJOu00cdKbtmhePQsY0FUl5/689Xdc+bDs3OcwGWbokaFEjXLwA1De+CIz0NMjgdtyHIbEGWcYav8jujke4wYaAtQRPgKHtVL9EpIUX07jPznstRNV8T3H1qrf2S5xHW6elZ7nLOnYuDKsgETmEuDQLAg8ibYQTF4zNBYGFwvC3GOJCqCu+o40OwmFghyohmXxSmo8Cg019V/hOtmYThaFcyDQhN8QGkUSqHrjDNRxyyye2JHvU+bJlTshonZlPh2gM9NA9Tf/3fMEobtnA5XYurntj43UhdZ4HdsYjbrFhbOrXEBRx1mG8gcCFgexz/3E9wq7GN0fqm6LMB8radqUbP0hAd2cADlN9suCWWLVnufLAiS5iqo55M2e9u749p+e+ESCLXIo= + secure: qIOOj57yVyinyTs9SinZmp/aVN5Or/9LDg+l9SYMqVCaqM9zDk7s1/m/L7VNPdWCuWOzLf9g1+0ReBcwZ6vh+HWBQ4T1V4HQd09whhUGyW9kMj3BKE0gWpIJLYKuhM551auv3FVzTp3u27q4W0zgiXB8qHWatTQu9rcPumG+IJaZD1uHsbhrQq0RLD8n8hWjQAdkRKRtSo4UR55sTK35uGRZbMFcyJSiStBXRP43w2kTR1MxIst4r9NeOx/sjebBQ/XxabKJgqAHhue80O3Cy8s0u59NDHOMpqJOu00cdKbtmhePQsY0FUl5/689Xdc+bDs3OcwGWbokaFEjXLwA1De+CIz0NMjgdtyHIbEGWcYav8jujke4wYaAtQRPgKHtVL9EpIUX07jPznstRNV8T3H1qrf2S5xHW6elZ7nLOnYuDKsgETmEuDQLAg8ibYQTF4zNBYGFwvC3GOJCqCu+o40OwmFghyohmXxSmo8Cg019V/hOtmYThaFcyDQhN8QGkUSqHrjDNRxyyye2JHvU+bJlTshonZlPh2gM9NA9Tf/3fMEobtnA5XYurntj43UhdZ4HdsYjbrFhbOrXEBRx1mG8gcCFgexz/3E9wq7GN0fqm6LMB8radqUbP0hAd2cADlN9suCWWLVnufLAiS5iqo55M2e9u749p+e+ESCLXIo= \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..a22127e --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,22 @@ +## CHANGELOG: + +#### 0.0.4 +- Added support for showing snackbars +- Added support for asking permissions in custom slides +- Fix: canMoveFurther() method works on last slide +- Fix: Library isn't crashing when no slides provided + +#### 0.0.3 +- Added onFinish method + +#### 0.0.3 +- Added onFinish method + +#### 0.0.2 +- Added API for animations +- Added Travis config file +- Added Splash Screen for example app +- Bug fixes + +#### 0.0.1 +- Initial commit with library \ No newline at end of file diff --git a/CONTRIBUTE.md b/CONTRIBUTE.md new file mode 100644 index 0000000..3624464 --- /dev/null +++ b/CONTRIBUTE.md @@ -0,0 +1,4 @@ +## Contribute +Feel free to contribute code to Material Intro Screen. You can do it by forking the repository via Github and sending pull request with changes. + +When submitting code, please make every effort to follow existing conventions and style in order to keep the code as readable as possible. Also be sure that all tests are passing. diff --git a/README.md b/README.md index 4346744..b1891e7 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # Android Material Intro Screen [ ![Download](https://api.bintray.com/packages/tangoagency/maven/material-intro-screen/images/download.svg) ](https://bintray.com/tangoagency/maven/material-intro-screen/_latestVersion) [![Build Status](https://travis-ci.org/TangoAgency/material-intro-screen.svg?branch=master)](https://travis-ci.org/TangoAgency/material-intro-screen) +[![Android Arsenal Material Intro Screen](https://img.shields.io/badge/Android%20Arsenal-Material--Intro--Screen-green.svg?style=true)](http://android-arsenal.com/details/1/4368) Material intro screen is inspired by [Material Intro] and developed with love from scratch. I decided to rewrite completely almost all features in order to make Android intro screen easy to use for everyone and extensible as possible. ## Features @@ -53,7 +54,7 @@ public class IntroActivity extends MaterialIntroActivity new MessageButtonBehaviour(new View.OnClickListener() { @Override public void onClick(View v) { - Toast.makeText(IntroActivity.this, "We provide solutions to make you love your work", Toast.LENGTH_SHORT).show(); + showMessage("We provide solutions to make you love your work"); } }, "Work with love")); } @@ -73,7 +74,7 @@ public class IntroActivity extends MaterialIntroActivity You can set enter, default and exit translation for every view in intro activity. To achive this you need to get translation wrapper for chosen view (for example: ```getNextButtonTranslationWrapper()```) and set there new class which will implement ```IViewTranslation``` ```java -getNextButtonTranslationWrapper() +getBackButtonTranslationWrapper() .setEnterTranslation(new IViewTranslation() { @Override public void translate(View view, @FloatRange(from = 0, to = 1.0) float percentage) { @@ -117,6 +118,21 @@ All features which are not available in simple Slide Fragment are shown here: [C - [InkPageIndicator.java] by [@NickButcher] - Images used to create sample app are from [freepik] +## Getting Help + +To report a specific problem or feature request, [open a new issue on Github](https://github.com/TangoAgency/material-intro-screen/issues/new). + +## Company + +[![Facebook](https://github.com/TangoAgency/material-intro-screen/blob/master/images/facebook.png)](https://www.facebook.com/TangoDigitalAgency)     [![Twitter](https://github.com/TangoAgency/material-intro-screen/blob/master/images/twitter.png)](https://twitter.com/Tango_Agency)     [![LinkedIn](https://github.com/TangoAgency/material-intro-screen/blob/master/images/linkedin.png)](https://www.linkedin.com/company/tango-digital-agency) + +[Here](https://github.com/TangoAgency/) you can see open source work developed by Tango Agency. + +Whether you're searching for a new partner or trusted team for creating your new great product we are always ready to start work with you. + +You can contact us via contact@tango.agency. +Thanks in advance. + [Custom Slide]: [Material Intro]: [@HeinrichReimer]: diff --git a/app/src/main/java/agency/tango/materialintro/IntroActivity.java b/app/src/main/java/agency/tango/materialintro/IntroActivity.java index 52eb8e7..461a4cf 100644 --- a/app/src/main/java/agency/tango/materialintro/IntroActivity.java +++ b/app/src/main/java/agency/tango/materialintro/IntroActivity.java @@ -18,7 +18,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); enableLastSlideAlphaExitTransition(true); - getNextButtonTranslationWrapper() + getBackButtonTranslationWrapper() .setEnterTranslation(new IViewTranslation() { @Override public void translate(View view, @FloatRange(from = 0, to = 1.0) float percentage) { @@ -36,7 +36,7 @@ public void translate(View view, @FloatRange(from = 0, to = 1.0) float percentag new MessageButtonBehaviour(new View.OnClickListener() { @Override public void onClick(View v) { - Toast.makeText(IntroActivity.this, "We provide solutions to make you love your work", Toast.LENGTH_SHORT).show(); + showMessage("We provide solutions to make you love your work"); } }, "Work with love")); @@ -61,7 +61,7 @@ public void onClick(View v) { new MessageButtonBehaviour(new View.OnClickListener() { @Override public void onClick(View v) { - Toast.makeText(IntroActivity.this, "Try us", Toast.LENGTH_SHORT).show(); + showMessage("Try us!"); } }, "Tools")); diff --git a/app/src/main/java/agency/tango/materialintro/MainActivity.java b/app/src/main/java/agency/tango/materialintro/MainActivity.java index aa76d5b..a1bca02 100644 --- a/app/src/main/java/agency/tango/materialintro/MainActivity.java +++ b/app/src/main/java/agency/tango/materialintro/MainActivity.java @@ -19,7 +19,7 @@ public void onCreate(Bundle savedInstanceState) { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this, IntroActivity.class); - MainActivity.this.startActivity(intent); + startActivity(intent); } }); } diff --git a/build.gradle b/build.gradle index cf3e073..7210f89 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.2.0-rc2' + classpath 'com.android.tools.build:gradle:2.2.1' classpath 'com.novoda:bintray-release:0.3.4' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/images/facebook.png b/images/facebook.png new file mode 100644 index 0000000..f93345f Binary files /dev/null and b/images/facebook.png differ diff --git a/images/linkedin.png b/images/linkedin.png new file mode 100644 index 0000000..aaf43de Binary files /dev/null and b/images/linkedin.png differ diff --git a/images/twitter.png b/images/twitter.png new file mode 100644 index 0000000..138dc91 Binary files /dev/null and b/images/twitter.png differ diff --git a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/MaterialIntroActivity.java b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/MaterialIntroActivity.java index 5ce78c1..6b29461 100644 --- a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/MaterialIntroActivity.java +++ b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/MaterialIntroActivity.java @@ -32,7 +32,6 @@ import agency.tango.materialintroscreen.listeners.MessageButtonBehaviourOnPageSelected; import agency.tango.materialintroscreen.listeners.SwipeStateTouchListener; import agency.tango.materialintroscreen.listeners.ViewBehavioursOnPageChangeListener; -import agency.tango.materialintroscreen.listeners.clickListeners.FinishScreenClickListener; import agency.tango.materialintroscreen.listeners.clickListeners.PermissionNotGrantedClickListener; import agency.tango.materialintroscreen.listeners.scrollListeners.ParallaxScrollListener; import agency.tango.materialintroscreen.widgets.InkPageIndicator; @@ -95,16 +94,20 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { initOnPageChangeListeners(); permissionNotGrantedClickListener = new PermissionNotGrantedClickListener(this, nextButtonTranslationWrapper); - finishScreenClickListener = new FinishScreenClickListener(this); + finishScreenClickListener = new FinishScreenClickListener(); setBackButtonVisible(); viewPager.post(new Runnable() { @Override public void run() { - int currentItem = viewPager.getCurrentItem(); - messageButtonBehaviourOnPageSelected.pageSelected(currentItem); - nextButtonBehaviour(currentItem, adapter.getItem(currentItem)); + if (adapter.slidesCount() == 0) { + finish(); + } else { + int currentItem = viewPager.getCurrentItem(); + messageButtonBehaviourOnPageSelected.pageSelected(currentItem); + nextButtonBehaviour(currentItem, adapter.getItem(currentItem)); + } } }); } @@ -113,7 +116,7 @@ public void run() { public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { SlideFragment fragment = adapter.getItem(viewPager.getCurrentItem()); boolean hasPermissionToGrant = fragment.hasNeededPermissionsToGrant(); - if (hasPermissionToGrant == false) { + if (!hasPermissionToGrant) { viewPager.setAllowedSwipeDirection(SwipeableViewPager.SwipeDirection.all); nextButtonBehaviour(viewPager.getCurrentItem(), fragment); messageButtonBehaviourOnPageSelected.pageSelected(viewPager.getCurrentItem()); @@ -170,7 +173,7 @@ public void pageScrolled(final int position, float offset) { viewPager.post(new Runnable() { @Override public void run() { - if (adapter.getItem(position).hasNeededPermissionsToGrant() || adapter.getItem(position).canMoveFurther() == false) { + if (adapter.getItem(position).hasNeededPermissionsToGrant() || !adapter.getItem(position).canMoveFurther()) { viewPager.setCurrentItem(position); pageIndicator.clearJoiningFractions(); } @@ -237,6 +240,7 @@ private int color(@ColorRes int color) { * * @param slideFragment Fragment to add */ + @SuppressWarnings("unused") public void addSlide(SlideFragment slideFragment) { adapter.addItem(slideFragment); } @@ -247,6 +251,7 @@ public void addSlide(SlideFragment slideFragment) { * @param slideFragment Fragment to add * @param messageButtonBehaviour Add behaviour for message button */ + @SuppressWarnings("unused") public void addSlide(SlideFragment slideFragment, MessageButtonBehaviour messageButtonBehaviour) { adapter.addItem(slideFragment); messageButtonBehaviours.put(adapter.getLastItemPosition(), messageButtonBehaviour); @@ -263,8 +268,8 @@ public void setSkipButtonVisible() { skipButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - for (int position = viewPager.getCurrentItem(); position < adapter.getCalculatedCount(); position++) { - if (adapter.getItem(position).canMoveFurther() == false) { + for (int position = viewPager.getCurrentItem(); position < adapter.slidesCount(); position++) { + if (!adapter.getItem(position).canMoveFurther()) { viewPager.setCurrentItem(position); showError(adapter.getItem(position).cantMoveFurtherErrorMessage()); return; @@ -313,6 +318,7 @@ public ViewTranslationWrapper getNextButtonTranslationWrapper() { * * @return ViewTranslationWrapper */ + @SuppressWarnings("unused") public ViewTranslationWrapper getBackButtonTranslationWrapper() { return backButtonTranslationWrapper; } @@ -322,6 +328,7 @@ public ViewTranslationWrapper getBackButtonTranslationWrapper() { * * @return ViewTranslationWrapper */ + @SuppressWarnings("unused") public ViewTranslationWrapper getPageIndicatorTranslationWrapper() { return pageIndicatorTranslationWrapper; } @@ -331,6 +338,7 @@ public ViewTranslationWrapper getPageIndicatorTranslationWrapper() { * * @return ViewTranslationWrapper */ + @SuppressWarnings("unused") public ViewTranslationWrapper getViewPagerTranslationWrapper() { return viewPagerTranslationWrapper; } @@ -340,6 +348,7 @@ public ViewTranslationWrapper getViewPagerTranslationWrapper() { * * @return ViewTranslationWrapper */ + @SuppressWarnings("unused") public ViewTranslationWrapper getSkipButtonTranslationWrapper() { return skipButtonTranslationWrapper; } @@ -352,6 +361,15 @@ public void enableLastSlideAlphaExitTransition(boolean enableAlphaExitTransition adapter.addEmptySlide(new LastEmptySlideFragment()); } + /** + * Show snackbar message + * + * @param message Message which will be visible to user + */ + public void showMessage(String message) { + showError(message); + } + /** * Override to execute this method on finish intro activity */ @@ -392,4 +410,18 @@ private void tintButtons(ColorStateList color) { ViewCompat.setBackgroundTintList(skipButton, color); } } + + private class FinishScreenClickListener implements View.OnClickListener { + @Override + public void onClick(View v) { + SlideFragment slideFragment = adapter.getItem(adapter.getLastItemPosition()); + if (!slideFragment.canMoveFurther()) { + nextButtonTranslationWrapper.error(); + showError(slideFragment.cantMoveFurtherErrorMessage()); + } else { + onFinish(); + finish(); + } + } + } } \ No newline at end of file diff --git a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/MessageButtonBehaviour.java b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/MessageButtonBehaviour.java index 7818b9c..4db0ea9 100644 --- a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/MessageButtonBehaviour.java +++ b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/MessageButtonBehaviour.java @@ -2,6 +2,7 @@ import android.view.View; +@SuppressWarnings("unused") public class MessageButtonBehaviour { private View.OnClickListener clickListener; private String messageButtonText; diff --git a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/MoveUpBehaviour.java b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/MoveUpBehaviour.java index 3c3451f..2be956c 100644 --- a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/MoveUpBehaviour.java +++ b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/MoveUpBehaviour.java @@ -7,6 +7,7 @@ import android.view.View; import android.widget.LinearLayout; +@SuppressWarnings("unused") public class MoveUpBehaviour extends CoordinatorLayout.Behavior { public MoveUpBehaviour(Context context, AttributeSet attrs) { super(context, attrs); diff --git a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/SlideFragment.java b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/SlideFragment.java index 2b81008..ba15ac6 100644 --- a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/SlideFragment.java +++ b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/SlideFragment.java @@ -56,7 +56,7 @@ public static SlideFragment createInstance(SlideFragmentBuilder builder) { } public static boolean isNotNullOrEmpty(String string) { - return string != null && string.isEmpty() == false; + return string != null && !string.isEmpty(); } @Nullable @@ -93,7 +93,7 @@ public int buttonsColor() { public boolean hasAnyPermissionsToGrant() { boolean hasPermissionToGrant = hasPermissionsToGrant(neededPermissions); - if (hasPermissionToGrant == false) { + if (!hasPermissionToGrant) { hasPermissionToGrant = hasPermissionsToGrant(possiblePermissions); } return hasPermissionToGrant; @@ -144,14 +144,14 @@ public void askForPermissions() { } String[] permissionsToGrant = removeEmptyAndNullStrings(notGrantedPermissions); - ActivityCompat.requestPermissions(this.getActivity(), permissionsToGrant, PERMISSIONS_REQUEST_CODE); + ActivityCompat.requestPermissions(getActivity(), permissionsToGrant, PERMISSIONS_REQUEST_CODE); } private boolean hasPermissionsToGrant(String[] permissions) { if (permissions != null) { - for (int i = 0; i < permissions.length; i++) { - if (isNotNullOrEmpty(permissions[i])) { - if (ContextCompat.checkSelfPermission(getContext(), permissions[i]) != PackageManager.PERMISSION_GRANTED) { + for (String permission : permissions) { + if (isNotNullOrEmpty(permission)) { + if (ContextCompat.checkSelfPermission(getContext(), permission) != PackageManager.PERMISSION_GRANTED) { return true; } } @@ -160,6 +160,7 @@ private boolean hasPermissionsToGrant(String[] permissions) { return false; } + @SuppressWarnings("SuspiciousMethodCalls") private String[] removeEmptyAndNullStrings(final ArrayList permissions) { List list = new ArrayList<>(permissions); list.removeAll(Collections.singleton(null)); diff --git a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/SlideFragmentBuilder.java b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/SlideFragmentBuilder.java index 00c45d6..f32b5ae 100644 --- a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/SlideFragmentBuilder.java +++ b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/SlideFragmentBuilder.java @@ -3,6 +3,7 @@ import android.support.annotation.ColorRes; import android.support.annotation.DrawableRes; +@SuppressWarnings({"unused", "WeakerAccess"}) public class SlideFragmentBuilder { int backgroundColor; int buttonsColor; diff --git a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/adapter/SlidesAdapter.java b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/adapter/SlidesAdapter.java index d28cbe3..ca2226e 100644 --- a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/adapter/SlidesAdapter.java +++ b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/adapter/SlidesAdapter.java @@ -28,12 +28,18 @@ public Object instantiateItem(ViewGroup container, int position) { return fragment; } + /** + * @return Returns count of fragments in adapter + */ @Override public int getCount() { return fragments.size(); } - public int getCalculatedCount() { + /** + * @return Returns count of fragments in adapter WITHOUT empty slide if is available + */ + public int slidesCount() { if (isLastItemEmptySlide()) { return fragments.size() - 1; } else { @@ -42,25 +48,25 @@ public int getCalculatedCount() { } public void addItem(SlideFragment fragment) { - fragments.add(getCalculatedCount(), fragment); - this.notifyDataSetChanged(); + fragments.add(slidesCount(), fragment); + notifyDataSetChanged(); } public void addEmptySlide(LastEmptySlideFragment fragment) { fragments.add(fragment); - this.notifyDataSetChanged(); + notifyDataSetChanged(); } public int getLastItemPosition() { - return getCalculatedCount() - 1; + return slidesCount() - 1; } public boolean isLastSlide(int position) { - return position == getCalculatedCount() - 1; + return position == slidesCount() - 1; } public boolean shouldFinish(int position) { - return position == getCalculatedCount(); + return position == slidesCount(); } private boolean isLastItemEmptySlide() { diff --git a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/animations/ViewTranslationWrapper.java b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/animations/ViewTranslationWrapper.java index 2a42a77..9fcfcf2 100644 --- a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/animations/ViewTranslationWrapper.java +++ b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/animations/ViewTranslationWrapper.java @@ -19,13 +19,14 @@ public class ViewTranslationWrapper { public ViewTranslationWrapper(View view) { this.view = view; - this.enterTranslation = new NoTranslation(); - this.exitTranslation = new NoTranslation(); - this.setErrorAnimation(0); + enterTranslation = new NoTranslation(); + exitTranslation = new NoTranslation(); + setErrorAnimation(0); } /** * Set translation after passing first slide + * * @param enterTranslation new translation */ public ViewTranslationWrapper setEnterTranslation(IViewTranslation enterTranslation) { @@ -35,6 +36,7 @@ public ViewTranslationWrapper setEnterTranslation(IViewTranslation enterTranslat /** * Set translation after passing last slide + * * @param exitTranslation new translation */ public ViewTranslationWrapper setExitTranslation(IViewTranslation exitTranslation) { @@ -44,6 +46,7 @@ public ViewTranslationWrapper setExitTranslation(IViewTranslation exitTranslatio /** * Set default translation + * * @param defaultTranslation new translation */ public ViewTranslationWrapper setDefaultTranslation(IViewTranslation defaultTranslation) { @@ -53,6 +56,7 @@ public ViewTranslationWrapper setDefaultTranslation(IViewTranslation defaultTran /** * Set view on error animation + * * @param errorAnimation new animation */ public ViewTranslationWrapper setErrorAnimation(@AnimRes int errorAnimation) { @@ -63,20 +67,20 @@ public ViewTranslationWrapper setErrorAnimation(@AnimRes int errorAnimation) { } public void enterTranslate(float percentage) { - this.enterTranslation.translate(view, percentage); + enterTranslation.translate(view, percentage); } public void exitTranslate(float percentage) { - this.exitTranslation.translate(view, percentage); + exitTranslation.translate(view, percentage); } public void defaultTranslate(float percentage) { - this.defaultTranslation.translate(view, percentage); + defaultTranslation.translate(view, percentage); } public void error() { if (errorAnimation != null) { - this.view.startAnimation(errorAnimation); + view.startAnimation(errorAnimation); } } } \ No newline at end of file diff --git a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/animations/wrappers/BackButtonTranslationWrapper.java b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/animations/wrappers/BackButtonTranslationWrapper.java index b1abf1e..222d7a2 100644 --- a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/animations/wrappers/BackButtonTranslationWrapper.java +++ b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/animations/wrappers/BackButtonTranslationWrapper.java @@ -11,7 +11,7 @@ public class BackButtonTranslationWrapper extends ViewTranslationWrapper { public BackButtonTranslationWrapper(View view) { super(view); - this.setEnterTranslation(new EnterDefaultTranslation()) + setEnterTranslation(new EnterDefaultTranslation()) .setDefaultTranslation(new DefaultPositionTranslation()) .setExitTranslation(new ExitDefaultTranslation()); } diff --git a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/animations/wrappers/NextButtonTranslationWrapper.java b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/animations/wrappers/NextButtonTranslationWrapper.java index 7d90fa6..3d8baaf 100644 --- a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/animations/wrappers/NextButtonTranslationWrapper.java +++ b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/animations/wrappers/NextButtonTranslationWrapper.java @@ -11,7 +11,7 @@ public class NextButtonTranslationWrapper extends ViewTranslationWrapper { public NextButtonTranslationWrapper(View view) { super(view); - this.setExitTranslation(new ExitDefaultTranslation()) + setExitTranslation(new ExitDefaultTranslation()) .setDefaultTranslation(new DefaultPositionTranslation()) .setErrorAnimation(R.anim.shake_it); } diff --git a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/animations/wrappers/PageIndicatorTranslationWrapper.java b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/animations/wrappers/PageIndicatorTranslationWrapper.java index ddcbca1..2fdc068 100644 --- a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/animations/wrappers/PageIndicatorTranslationWrapper.java +++ b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/animations/wrappers/PageIndicatorTranslationWrapper.java @@ -10,7 +10,7 @@ public class PageIndicatorTranslationWrapper extends ViewTranslationWrapper { public PageIndicatorTranslationWrapper(View view) { super(view); - this.setDefaultTranslation(new DefaultPositionTranslation()) + setDefaultTranslation(new DefaultPositionTranslation()) .setExitTranslation(new ExitDefaultTranslation()); } } \ No newline at end of file diff --git a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/animations/wrappers/SkipButtonTranslationWrapper.java b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/animations/wrappers/SkipButtonTranslationWrapper.java index 783d9e4..d78c22c 100644 --- a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/animations/wrappers/SkipButtonTranslationWrapper.java +++ b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/animations/wrappers/SkipButtonTranslationWrapper.java @@ -1,17 +1,17 @@ package agency.tango.materialintroscreen.animations.wrappers; - import android.view.View; +import android.view.View; - import agency.tango.materialintroscreen.animations.ViewTranslationWrapper; - import agency.tango.materialintroscreen.animations.translations.DefaultPositionTranslation; - import agency.tango.materialintroscreen.animations.translations.EnterDefaultTranslation; - import agency.tango.materialintroscreen.animations.translations.ExitDefaultTranslation; +import agency.tango.materialintroscreen.animations.ViewTranslationWrapper; +import agency.tango.materialintroscreen.animations.translations.DefaultPositionTranslation; +import agency.tango.materialintroscreen.animations.translations.EnterDefaultTranslation; +import agency.tango.materialintroscreen.animations.translations.ExitDefaultTranslation; public class SkipButtonTranslationWrapper extends ViewTranslationWrapper { public SkipButtonTranslationWrapper(View view) { super(view); - this.setEnterTranslation(new EnterDefaultTranslation()) + setEnterTranslation(new EnterDefaultTranslation()) .setDefaultTranslation(new DefaultPositionTranslation()) .setExitTranslation(new ExitDefaultTranslation()); } diff --git a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/animations/wrappers/ViewPagerTranslationWrapper.java b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/animations/wrappers/ViewPagerTranslationWrapper.java index 6a5c1b8..2382784 100644 --- a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/animations/wrappers/ViewPagerTranslationWrapper.java +++ b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/animations/wrappers/ViewPagerTranslationWrapper.java @@ -10,7 +10,7 @@ public class ViewPagerTranslationWrapper extends ViewTranslationWrapper { public ViewPagerTranslationWrapper(View view) { super(view); - this.setDefaultTranslation(new DefaultAlphaTranslation()) + setDefaultTranslation(new DefaultAlphaTranslation()) .setExitTranslation(new AlphaTranslation()); } } \ No newline at end of file diff --git a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/listeners/SwipeStateTouchListener.java b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/listeners/SwipeStateTouchListener.java index 16bea59..25d615b 100644 --- a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/listeners/SwipeStateTouchListener.java +++ b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/listeners/SwipeStateTouchListener.java @@ -17,7 +17,7 @@ public SwipeStateTouchListener(SwipeableViewPager viewPager, SlidesAdapter adapt @Override public void process() { SlideFragment fragment = adapter.getItem(viewPager.getCurrentItem()); - if (fragment.canMoveFurther() == false || fragment.hasNeededPermissionsToGrant()) { + if (!fragment.canMoveFurther() || fragment.hasNeededPermissionsToGrant()) { viewPager.setAllowedSwipeDirection(SwipeableViewPager.SwipeDirection.left); } else { viewPager.setAllowedSwipeDirection(SwipeableViewPager.SwipeDirection.all); diff --git a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/listeners/clickListeners/FinishScreenClickListener.java b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/listeners/clickListeners/FinishScreenClickListener.java deleted file mode 100644 index 983dfe4..0000000 --- a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/listeners/clickListeners/FinishScreenClickListener.java +++ /dev/null @@ -1,18 +0,0 @@ -package agency.tango.materialintroscreen.listeners.clickListeners; - -import agency.tango.materialintroscreen.MaterialIntroActivity; -import android.view.View; - -public class FinishScreenClickListener implements View.OnClickListener { - private MaterialIntroActivity activity; - - public FinishScreenClickListener(MaterialIntroActivity activity) { - this.activity = activity; - } - - @Override - public void onClick(View v) { - activity.onFinish(); - activity.finish(); - } -} \ No newline at end of file diff --git a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/listeners/scrollListeners/ParallaxScrollListener.java b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/listeners/scrollListeners/ParallaxScrollListener.java index 631637c..9213c06 100644 --- a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/listeners/scrollListeners/ParallaxScrollListener.java +++ b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/listeners/scrollListeners/ParallaxScrollListener.java @@ -18,7 +18,7 @@ public ParallaxScrollListener(SlidesAdapter adapter) { @SuppressWarnings("ConstantConditions") @Override public void pageScrolled(int position, float offset) { - if (position != adapter.getCalculatedCount()) { + if (position != adapter.slidesCount()) { Fragment fragment = adapter.getItem(position); Fragment fragmentNext = getNextFragment(position); diff --git a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/parallax/ParallaxFragment.java b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/parallax/ParallaxFragment.java index 5571fec..c1a0905 100644 --- a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/parallax/ParallaxFragment.java +++ b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/parallax/ParallaxFragment.java @@ -19,12 +19,11 @@ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { parallaxLayout = findParallaxLayout(view); } - @SuppressWarnings("PointlessBooleanExpression") public Parallaxable findParallaxLayout(View root) { Queue queue = new LinkedList<>(); queue.add(root); - while (queue.isEmpty() == false) { + while (!queue.isEmpty()) { View child = queue.remove(); if (child instanceof Parallaxable) { diff --git a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/parallax/ParallaxFrameLayout.java b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/parallax/ParallaxFrameLayout.java index 0a5a442..2fb4f6d 100644 --- a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/parallax/ParallaxFrameLayout.java +++ b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/parallax/ParallaxFrameLayout.java @@ -11,8 +11,6 @@ import agency.tango.materialintroscreen.R; public class ParallaxFrameLayout extends FrameLayout implements Parallaxable { - @FloatRange(from = -1.0, to = 1.0) - private float offset = 0; public ParallaxFrameLayout(Context context) { super(context); @@ -48,7 +46,6 @@ protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) { @Override public void setOffset(@FloatRange(from = -1.0, to = 1.0) float offset) { - this.offset = offset; for (int i = getChildCount() - 1; i >= 0; i--) { View child = getChildAt(i); ParallaxFrameLayout.LayoutParams layoutParams = (LayoutParams) child.getLayoutParams(); @@ -61,26 +58,28 @@ public void setOffset(@FloatRange(from = -1.0, to = 1.0) float offset) { public static class LayoutParams extends FrameLayout.LayoutParams { float parallaxFactor = 0f; - public LayoutParams(Context context, AttributeSet attributeSet) { + LayoutParams(Context context, AttributeSet attributeSet) { super(context, attributeSet); TypedArray typedArray = context.obtainStyledAttributes(attributeSet, R.styleable.ParallaxLayout_Layout); parallaxFactor = typedArray.getFloat(R.styleable.ParallaxLayout_Layout_layout_parallaxFactor, parallaxFactor); typedArray.recycle(); } - public LayoutParams(int width, int height) { + LayoutParams(int width, int height) { super(width, height); } - public LayoutParams(int width, int height, int gravity) { + @SuppressWarnings("unused") + LayoutParams(int width, int height, int gravity) { super(width, height, gravity); } - public LayoutParams(ViewGroup.LayoutParams source) { + LayoutParams(ViewGroup.LayoutParams source) { super(source); } - public LayoutParams(MarginLayoutParams source) { + @SuppressWarnings("unused") + LayoutParams(MarginLayoutParams source) { super(source); } } diff --git a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/parallax/ParallaxLinearLayout.java b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/parallax/ParallaxLinearLayout.java index 5da710b..3fa2743 100644 --- a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/parallax/ParallaxLinearLayout.java +++ b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/parallax/ParallaxLinearLayout.java @@ -11,8 +11,6 @@ import agency.tango.materialintroscreen.R; public class ParallaxLinearLayout extends LinearLayout implements Parallaxable { - @FloatRange(from = -1.0, to = 1.0) - private float offset = 0; public ParallaxLinearLayout(Context context) { super(context); @@ -48,7 +46,6 @@ protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) { @Override public void setOffset(@FloatRange(from = -1.0, to = 1.0) float offset) { - this.offset = offset; for (int i = getChildCount() - 1; i >= 0; i--) { View child = getChildAt(i); ParallaxLinearLayout.LayoutParams p = (LayoutParams) child.getLayoutParams(); @@ -61,26 +58,28 @@ public void setOffset(@FloatRange(from = -1.0, to = 1.0) float offset) { public static class LayoutParams extends LinearLayout.LayoutParams { float parallaxFactor = 0f; - public LayoutParams(Context context, AttributeSet attributeSet) { + LayoutParams(Context context, AttributeSet attributeSet) { super(context, attributeSet); TypedArray typedArray = context.obtainStyledAttributes(attributeSet, R.styleable.ParallaxLayout_Layout); parallaxFactor = typedArray.getFloat(R.styleable.ParallaxLayout_Layout_layout_parallaxFactor, parallaxFactor); typedArray.recycle(); } - public LayoutParams(int width, int height) { + LayoutParams(int width, int height) { super(width, height); } - public LayoutParams(int width, int height, int gravity) { + @SuppressWarnings("unused") + LayoutParams(int width, int height, int gravity) { super(width, height, gravity); } - public LayoutParams(ViewGroup.LayoutParams source) { + LayoutParams(ViewGroup.LayoutParams source) { super(source); } - public LayoutParams(MarginLayoutParams source) { + @SuppressWarnings("unused") + LayoutParams(MarginLayoutParams source) { super(source); } } diff --git a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/parallax/ParallaxRelativeLayout.java b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/parallax/ParallaxRelativeLayout.java index 76a3cc1..1e524be 100644 --- a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/parallax/ParallaxRelativeLayout.java +++ b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/parallax/ParallaxRelativeLayout.java @@ -11,8 +11,6 @@ import agency.tango.materialintroscreen.R; public class ParallaxRelativeLayout extends RelativeLayout implements Parallaxable { - @FloatRange(from = -1.0, to = 1.0) - private float offset = 0; public ParallaxRelativeLayout(Context context) { super(context); @@ -48,7 +46,6 @@ protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) { @Override public void setOffset(@FloatRange(from = -1.0, to = 1.0) float offset) { - this.offset = offset; for (int i = getChildCount() - 1; i >= 0; i--) { View child = getChildAt(i); ParallaxRelativeLayout.LayoutParams p = (LayoutParams) child.getLayoutParams(); @@ -61,22 +58,23 @@ public void setOffset(@FloatRange(from = -1.0, to = 1.0) float offset) { public static class LayoutParams extends RelativeLayout.LayoutParams { float parallaxFactor = 0f; - public LayoutParams(Context context, AttributeSet attributeSet) { + LayoutParams(Context context, AttributeSet attributeSet) { super(context, attributeSet); TypedArray typedArray = context.obtainStyledAttributes(attributeSet, R.styleable.ParallaxLayout_Layout); parallaxFactor = typedArray.getFloat(R.styleable.ParallaxLayout_Layout_layout_parallaxFactor, parallaxFactor); typedArray.recycle(); } - public LayoutParams(int width, int height) { + LayoutParams(int width, int height) { super(width, height); } - public LayoutParams(ViewGroup.LayoutParams source) { + LayoutParams(ViewGroup.LayoutParams source) { super(source); } - public LayoutParams(MarginLayoutParams source) { + @SuppressWarnings("unused") + LayoutParams(MarginLayoutParams source) { super(source); } } diff --git a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/widgets/InkPageIndicator.java b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/widgets/InkPageIndicator.java index ee7a71f..4c4856e 100644 --- a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/widgets/InkPageIndicator.java +++ b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/widgets/InkPageIndicator.java @@ -118,7 +118,7 @@ public InkPageIndicator(Context context, AttributeSet attrs, int defStyle) { } private int getCount() { - return InkPageIndicator.this.viewPager.getAdapter().getCalculatedCount(); + return viewPager.getAdapter().slidesCount(); } public void setViewPager(final SwipeableViewPager viewPager) { @@ -445,7 +445,7 @@ private boolean isDotJoining(float joiningFraction) { private boolean isDotNotJoining(int page, float joiningFraction, float dotRevealFraction) { return (joiningFraction == 0f || joiningFraction == INVALID_FRACTION) && dotRevealFraction == 0f - && !(page == currentPage && selectedDotInPosition == true); + && !(page == currentPage && selectedDotInPosition); } private Path getRetreatingJoinPath() { @@ -527,9 +527,11 @@ public void onAnimationEnd(Animator animation) { } private void setJoiningFraction(int leftDot, float fraction) { - if (leftDot < joiningFractions.length) { - joiningFractions[leftDot] = fraction; - ViewCompat.postInvalidateOnAnimation(this); + if (joiningFractions != null) { + if (leftDot < joiningFractions.length) { + joiningFractions[leftDot] = fraction; + ViewCompat.postInvalidateOnAnimation(this); + } } }