CapTen101 / Beautiful-OnboardingScreens

This task was given to me during application for an Android Internship in Devfolio/Fold

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Android-Task-DevFolio

Hello! πŸ‘‹ This task was given to me as a challenge from the Devfolio & Fold Team for Internship.

I'll honestly quote that it was definitely a very challenging task πŸ˜ƒ and took many many hours of research across hundreds of pages of Android documentation before I could make what I've now!

  • Link to the Android Task: Here

My Implementation:

Watch the video here:

Watch the video here

Software Architecture

I have tried to follow a modular approach to the task on hand. Every component (Activity/Fragment/Class) has it's own package making the code to easier to test and debug in case of bugs and errors.

Commit & Comments

I've tried to keep commit messages as relevant as possible so as to make it easier for the reader or collaborator to follow-up on the progress of the particular project. Also, the code is well commented across the project to further simplify the code understanding for any person getting introduced to the project.

My Decisions and Implementation Details

I took some key decisions as to how I'll be able to implement the given task at hand:

  • Swipable Layout is created through androidx.ViewPager.
  • The Adapter for the ViewPager was implemented through a custom FragmentPageAdapter. It maintains the Fragment life-cycle by-default hence favourable to use and implement.
  • The given custom Cubic Bezier animation was implemented through PathInterpolator.
  • The Parallax Effect while scrolling the images was implemented through ViewPager.PageTransformer.
  • Unit Testing is done through JUnit4, Mockito and Espresso.
  • Variable Length PageControl is something which I tried through ViewPager.PagerTabStrip.
    • But couldn't achieve it due to very less resources available on this. 😣 But it couldn't be left altogether which is essentially not in the spirit of software Engineering 😢.
    • I tried to implement atleast a very basic TabLayout to fulfill our need of a Slider or PageControl kind of layout to maintain the UI/UX and detect the sliding views of the OnBoarding ViewPager.
  • The second task I couldn't implement was the animation of words being starting only after the previous word. I certainly could implement the PathInterpolator for the Cubic Bezier style of animation.
    • But the problem lied in the delaying of the animations. Somehow the setStartDelay method of the .animate() or even the setStartOffSet() of Animation class weren't behaving properly inside the fragment as they should. πŸ˜•
    • I tried to block the animation of the next word through running each animation on the UIThread (since it's synchronous and blocks the rest of the services before it completes itself), but to no avail.
    • Again there weren't many resources addressing this problem so I thought atleast I can equate the timing of the animations to suffice the initial development.
  • I feel that a little external help could have led me to implement these but I refrained myself from asking anybody and decided to complete this all my myself. A great way to learn 😁.

Path to the APK:

Last but not the least, Path to generated APK for the readers to install is as follows:

cd ./app/build/outputs/apk/debug/app-debug.apk

About

This task was given to me during application for an Android Internship in Devfolio/Fold


Languages

Language:Java 100.0%