From 2febe557f1db5583099bd849c63217073c96469e Mon Sep 17 00:00:00 2001 From: Ruslan Sharipov Date: Wed, 10 Feb 2021 16:23:19 +0300 Subject: [PATCH 01/15] initial navigation commit --- .../android/navigation/sample/app/App.kt | 43 +------------------ .../sample/app/screen/MainActivity.kt | 11 +---- .../sample/app/screen/auth/AuthFragment.kt | 17 +------- .../sample/app/screen/main/MainFragment.kt | 32 +------------- .../screen/main/gallery/GalleryTabFragment.kt | 8 ++-- .../app/screen/main/home/HomeTabFragment.kt | 7 +-- .../main/home/nested/HomeNestedFragment.kt | 2 - .../screen/main/profile/ProfileTabFragment.kt | 20 +++------ .../main/profile/about/AboutActivity.kt | 9 +--- .../app/screen/splash/SplashFragment.kt | 5 +-- 10 files changed, 17 insertions(+), 137 deletions(-) diff --git a/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/App.kt b/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/App.kt index 56c856b006..f8f5fd7ac7 100644 --- a/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/App.kt +++ b/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/App.kt @@ -1,52 +1,11 @@ package ru.surfstudio.android.navigation.sample.app import android.app.Application -import androidx.core.content.ContextCompat -import ru.surfstudio.android.navigation.animation.DefaultAnimations -import ru.surfstudio.android.navigation.observer.ScreenResultEmitter -import ru.surfstudio.android.navigation.observer.ScreenResultObserver -import ru.surfstudio.android.navigation.observer.bus.ScreenResultBus -import ru.surfstudio.android.navigation.observer.executor.AppCommandExecutorWithResult -import ru.surfstudio.android.navigation.observer.navigator.activity.ActivityNavigatorWithResultFactory -import ru.surfstudio.android.navigation.observer.storage.file.FileScreenResultStorage -import ru.surfstudio.android.navigation.provider.ActivityNavigationProvider -import ru.surfstudio.android.navigation.provider.callbacks.ActivityNavigationProviderCallbacks -import ru.surfstudio.android.navigation.sample.app.utils.animations.FadeAnimations -import ru.surfstudio.android.navigation.sample.app.utils.animations.SlideAnimations class App : Application() { - companion object { - lateinit var navigator: AppCommandExecutorWithResult - lateinit var provider: ActivityNavigationProvider - lateinit var resultObserver: ScreenResultObserver - } - override fun onCreate() { super.onCreate() - initResultObserver() - initAnimations() - } - - private fun initExecutor(screenResultEmitter: ScreenResultEmitter) { - val activityNavigationProvider = ActivityNavigationProviderCallbacks( - activityNavigatorFactory = ActivityNavigatorWithResultFactory() - ) - registerActivityLifecycleCallbacks(activityNavigationProvider) - provider = activityNavigationProvider - navigator = AppCommandExecutorWithResult(screenResultEmitter, activityNavigationProvider) - } - - private fun initResultObserver() { - val filesDir = ContextCompat.getNoBackupFilesDir(this)!!.absolutePath - val storage = FileScreenResultStorage(filesDir) - val resultBus = ScreenResultBus(storage) - resultObserver = resultBus - initExecutor(resultBus) - } - - private fun initAnimations() { - DefaultAnimations.fragment = SlideAnimations() //animations for all fragment changes - DefaultAnimations.tab = FadeAnimations() //animations for tab changes + // TODO } } \ No newline at end of file diff --git a/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/MainActivity.kt b/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/MainActivity.kt index 22ee51ba34..62f9f5e3f9 100644 --- a/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/MainActivity.kt +++ b/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/MainActivity.kt @@ -2,22 +2,15 @@ package ru.surfstudio.android.navigation.sample.app.screen import android.os.Bundle import androidx.appcompat.app.AppCompatActivity -import ru.surfstudio.android.navigation.command.fragment.Add -import ru.surfstudio.android.navigation.provider.container.FragmentNavigationContainer import ru.surfstudio.android.navigation.sample.R -import ru.surfstudio.android.navigation.sample.app.App -import ru.surfstudio.android.navigation.sample.app.screen.splash.SplashRoute -import ru.surfstudio.android.navigation.sample.app.utils.animations.FadeAnimations -class MainActivity : AppCompatActivity(), FragmentNavigationContainer { - - override val containerId: Int = R.id.fragment_container +class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_single) if (savedInstanceState == null) { //Adding fragment only on first create - App.navigator.execute(Add(SplashRoute(), FadeAnimations())) + // TODO } } } \ No newline at end of file diff --git a/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/auth/AuthFragment.kt b/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/auth/AuthFragment.kt index 7b966c13a7..7de936774a 100644 --- a/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/auth/AuthFragment.kt +++ b/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/auth/AuthFragment.kt @@ -6,13 +6,7 @@ import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment import kotlinx.android.synthetic.main.fragment_auth.* -import ru.surfstudio.android.navigation.command.fragment.Replace -import ru.surfstudio.android.navigation.command.fragment.ReplaceHard import ru.surfstudio.android.navigation.sample.R -import ru.surfstudio.android.navigation.sample.app.App -import ru.surfstudio.android.navigation.sample.app.screen.main.MainRoute -import ru.surfstudio.android.navigation.sample.app.screen.main.gallery.GalleryTabRoute -import ru.surfstudio.android.navigation.sample.app.screen.main.gallery.image.ImageRoute class AuthFragment : Fragment() { @@ -21,17 +15,8 @@ class AuthFragment : Fragment() { override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) - val mainRoute = MainRoute() - val galleryRoute = GalleryTabRoute() auth_btn.setOnClickListener { - App.navigator.execute( - listOf( - ReplaceHard(mainRoute), //opens main screen - Replace(galleryRoute, sourceTag = mainRoute.getId()), //opens gallery tab in main - Replace(ImageRoute(1), sourceTag = galleryRoute.getId()), //opens first nested image in gallery - Replace(ImageRoute(2), sourceTag = galleryRoute.getId()) //opens second nested image in gallery - ) - ) + } } } \ No newline at end of file diff --git a/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/MainFragment.kt b/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/MainFragment.kt index 762f5ff209..2d7d6b7f47 100644 --- a/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/MainFragment.kt +++ b/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/MainFragment.kt @@ -6,22 +6,14 @@ import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment import kotlinx.android.synthetic.main.fragment_main.* -import ru.surfstudio.android.navigation.command.activity.Finish -import ru.surfstudio.android.navigation.command.fragment.RemoveAll -import ru.surfstudio.android.navigation.command.fragment.RemoveLast -import ru.surfstudio.android.navigation.command.fragment.Replace -import ru.surfstudio.android.navigation.navigator.fragment.tab.TabFragmentNavigatorInterface import ru.surfstudio.android.navigation.provider.container.TabFragmentNavigationContainer -import ru.surfstudio.android.navigation.provider.holder.FragmentNavigationHolder import ru.surfstudio.android.navigation.route.fragment.FragmentRoute import ru.surfstudio.android.navigation.sample.R -import ru.surfstudio.android.navigation.sample.app.App import ru.surfstudio.android.navigation.sample.app.screen.main.MainTabType.* import ru.surfstudio.android.navigation.sample.app.screen.main.gallery.GalleryTabRoute import ru.surfstudio.android.navigation.sample.app.screen.main.home.HomeTabRoute import ru.surfstudio.android.navigation.sample.app.screen.main.profile.ProfileTabRoute import ru.surfstudio.android.navigation.sample.app.utils.addOnBackPressedListener -import ru.surfstudio.android.navigation.sample.app.utils.animations.FadeAnimations class MainFragment : Fragment(), TabFragmentNavigationContainer { @@ -47,18 +39,12 @@ class MainFragment : Fragment(), TabFragmentNavigationContainer { } private fun initActiveTabReopenedListener() { - getTabNavigator() - .setActiveTabReopenedListener { - App.navigator.execute(RemoveAll(sourceTag = tag!!)) - } + } private fun initBackPressedListener() { addOnBackPressedListener { - when { - hasTabsInStack() -> App.navigator.execute(RemoveLast(sourceTag = tag!!)) - else -> App.navigator.execute(Finish()) - } + } } @@ -68,20 +54,6 @@ class MainFragment : Fragment(), TabFragmentNavigationContainer { GALLERY -> GalleryTabRoute() PROFILE -> ProfileTabRoute() } - App.navigator.execute(Replace(route, FadeAnimations(), tag!!)) - } - - private fun hasTabsInStack(): Boolean { - val backStackCount = getTabNavigator() - .backStackEntryCount - return backStackCount > 1 - } - private fun getTabNavigator(): TabFragmentNavigatorInterface { - return App.provider - .provide() - .fragmentNavigationProvider - .provide(tag) - .fragmentNavigator as TabFragmentNavigatorInterface } } \ No newline at end of file diff --git a/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/gallery/GalleryTabFragment.kt b/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/gallery/GalleryTabFragment.kt index a155d2cf0f..6d918f2a2c 100644 --- a/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/gallery/GalleryTabFragment.kt +++ b/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/gallery/GalleryTabFragment.kt @@ -34,16 +34,14 @@ class GalleryTabFragment : Fragment(), FragmentNavigationContainer { } private fun addPicture() { - App.navigator.execute(Replace(ImageRoute(currentPicture), sourceTag = tag!!)) + } private fun removePicture() { - App.navigator.execute(RemoveLast(sourceTag = tag!!)) + } private fun subscribeToBackStackChanges() { - val provider = App.provider.provide().fragmentNavigationProvider.provide(tag) - val backStackEntries = provider.fragmentNavigator.addBackStackChangeListener { currentPicture = it.size + 1 } - Log.d("111111 Update pic", "backStacks$backStackEntries, manager=${childFragmentManager}") + } } \ No newline at end of file diff --git a/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/home/HomeTabFragment.kt b/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/home/HomeTabFragment.kt index a824ffb54a..5d5008d069 100644 --- a/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/home/HomeTabFragment.kt +++ b/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/home/HomeTabFragment.kt @@ -5,12 +5,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment -import kotlinx.android.synthetic.main.fragment_home.* -import ru.surfstudio.android.navigation.command.fragment.Replace import ru.surfstudio.android.navigation.sample.R -import ru.surfstudio.android.navigation.sample.app.App -import ru.surfstudio.android.navigation.sample.app.screen.main.home.nested.HomeNestedRoute -import ru.surfstudio.android.navigation.sample.app.utils.animations.FadeAnimations class HomeTabFragment : Fragment() { @@ -20,6 +15,6 @@ class HomeTabFragment : Fragment() { override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) - home_add_btn.setOnClickListener { App.navigator.execute(Replace(HomeNestedRoute(), sourceTag = tag!!)) } + } } \ No newline at end of file diff --git a/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/home/nested/HomeNestedFragment.kt b/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/home/nested/HomeNestedFragment.kt index 53bc1874fe..49d5d23612 100644 --- a/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/home/nested/HomeNestedFragment.kt +++ b/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/home/nested/HomeNestedFragment.kt @@ -20,8 +20,6 @@ class HomeNestedFragment : Fragment() { super.onActivityCreated(savedInstanceState) val currentOrder = HomeNestedRoute(arguments).order home_nested_tv.text = "Home\nNested\nFragment\n#$currentOrder" - val nextOrder = currentOrder + 1 - home_nested_add_btn.setOnClickListener { App.navigator.execute(Replace(HomeNestedRoute(nextOrder), sourceTag = tag!!)) } } } \ No newline at end of file diff --git a/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/profile/ProfileTabFragment.kt b/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/profile/ProfileTabFragment.kt index 4808e82d3a..8e164b1180 100644 --- a/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/profile/ProfileTabFragment.kt +++ b/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/profile/ProfileTabFragment.kt @@ -31,23 +31,13 @@ class ProfileTabFragment : Fragment() { override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) - profile_settings_btn.setOnClickListener { App.navigator.execute(Start(ApplicationSettingsRoute())) } - profile_about_app_btn.setOnClickListener { App.navigator.execute(Start(AboutRoute())) } - profile_logout_btn.setOnClickListener { App.navigator.execute(ReplaceHard(AuthRoute(), FadeAnimations())) } + profile_settings_btn.setOnClickListener { } + profile_about_app_btn.setOnClickListener { } + profile_logout_btn.setOnClickListener { } profile_attach_photo_btn.setOnClickListener { - App.navigator.execute( - StartForResult( - CameraRoute( - uniqueId = screenId, - chooserTitle = "Select photo for profile", - takenPhotoFile = CameraHelper(requireContext()).generatePhotoPath() - ) - ) - ) + } - App.resultObserver.addListener(targetRoute, ::showAppName) - App.resultObserver.addListener(cameraRoute, ::showResult) } private fun showAppName(name: String) { @@ -67,7 +57,7 @@ class ProfileTabFragment : Fragment() { } override fun onDestroyView() { - App.resultObserver.removeListener(targetRoute) + super.onDestroyView() } } \ No newline at end of file diff --git a/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/profile/about/AboutActivity.kt b/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/profile/about/AboutActivity.kt index 87d0fa9f83..41f51b3b88 100644 --- a/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/profile/about/AboutActivity.kt +++ b/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/profile/about/AboutActivity.kt @@ -3,10 +3,7 @@ package ru.surfstudio.android.navigation.sample.app.screen.main.profile.about import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import kotlinx.android.synthetic.main.activity_about.* -import ru.surfstudio.android.navigation.observer.command.EmitScreenResult -import ru.surfstudio.android.navigation.command.activity.Finish import ru.surfstudio.android.navigation.sample.R -import ru.surfstudio.android.navigation.sample.app.App class AboutActivity : AppCompatActivity() { @@ -19,11 +16,7 @@ class AboutActivity : AppCompatActivity() { val appName = application.packageName val targetRoute = AboutRoute() - - App.navigator.execute(listOf( - Finish(), - EmitScreenResult(targetRoute, appName) - )) + // TODO вернуть результат } } } \ No newline at end of file diff --git a/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/splash/SplashFragment.kt b/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/splash/SplashFragment.kt index 31ee898d71..871dbe8484 100644 --- a/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/splash/SplashFragment.kt +++ b/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/splash/SplashFragment.kt @@ -6,10 +6,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment -import ru.surfstudio.android.navigation.command.fragment.ReplaceHard import ru.surfstudio.android.navigation.sample.R -import ru.surfstudio.android.navigation.sample.app.App -import ru.surfstudio.android.navigation.sample.app.screen.auth.AuthRoute class SplashFragment : Fragment() { @@ -20,7 +17,7 @@ class SplashFragment : Fragment() { override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) Handler().postDelayed({ - App.navigator.execute(ReplaceHard(AuthRoute())) + // TODO }, 1500L) } } \ No newline at end of file From 908765e4e66ddaa53f62b32b5e23c670bad93d0c Mon Sep 17 00:00:00 2001 From: Ruslan Sharipov Date: Fri, 19 Feb 2021 16:35:17 +0300 Subject: [PATCH 02/15] nav additions --- .../android/navigation/sample/app/App.kt | 31 ++++++++++++++++++- .../sample/app/screen/MainActivity.kt | 10 ++++-- .../sample/app/screen/auth/AuthFragment.kt | 6 +++- .../sample/app/screen/main/MainFragment.kt | 19 +++++++++--- .../{GalleryTabRoute.kt => GalleryRoute.kt} | 7 ++++- .../app/screen/main/home/HomeTabFragment.kt | 9 +++++- .../screen/main/profile/ProfileTabFragment.kt | 2 +- .../app/screen/splash/SplashFragment.kt | 6 +++- .../main/res/anim/slide_in_from_bottom.xml | 6 ++++ .../src/main/res/anim/slide_out_to_bottom.xml | 6 ++++ .../src/main/res/layout/fragment_home.xml | 4 +-- .../src/main/res/layout/fragment_profile.xml | 4 +-- 12 files changed, 94 insertions(+), 16 deletions(-) rename navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/gallery/{GalleryTabRoute.kt => GalleryRoute.kt} (71%) create mode 100644 navigation/sample/src/main/res/anim/slide_in_from_bottom.xml create mode 100644 navigation/sample/src/main/res/anim/slide_out_to_bottom.xml diff --git a/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/App.kt b/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/App.kt index f8f5fd7ac7..fe9c739171 100644 --- a/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/App.kt +++ b/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/App.kt @@ -1,11 +1,40 @@ package ru.surfstudio.android.navigation.sample.app import android.app.Application +import androidx.core.content.ContextCompat +import ru.surfstudio.android.navigation.animation.DefaultAnimations +import ru.surfstudio.android.navigation.observer.ScreenResultObserver +import ru.surfstudio.android.navigation.observer.bus.ScreenResultBus +import ru.surfstudio.android.navigation.observer.executor.AppCommandExecutorWithResult +import ru.surfstudio.android.navigation.observer.navigator.activity.ActivityNavigatorWithResultFactory +import ru.surfstudio.android.navigation.observer.storage.file.FileScreenResultStorage +import ru.surfstudio.android.navigation.provider.ActivityNavigationProvider +import ru.surfstudio.android.navigation.provider.callbacks.ActivityNavigationProviderCallbacks +import ru.surfstudio.android.navigation.sample.app.utils.animations.FadeAnimations +import ru.surfstudio.android.navigation.sample.app.utils.animations.SlideAnimations class App : Application() { + companion object { + lateinit var executor: AppCommandExecutorWithResult + lateinit var provider: ActivityNavigationProvider + lateinit var resultObserver: ScreenResultObserver + } + override fun onCreate() { super.onCreate() - // TODO + val storage = FileScreenResultStorage( + ContextCompat.getNoBackupFilesDir(this)!!.absolutePath + ) + val screenResultEmmiter = ScreenResultBus(storage) + val activityNavigationProviderCallbacks = ActivityNavigationProviderCallbacks( + activityNavigatorFactory = ActivityNavigatorWithResultFactory() + ) + registerActivityLifecycleCallbacks(activityNavigationProviderCallbacks) + provider = activityNavigationProviderCallbacks + executor = AppCommandExecutorWithResult(screenResultEmmiter, activityNavigationProviderCallbacks) + + DefaultAnimations.fragment = SlideAnimations() + DefaultAnimations.tab = FadeAnimations() } } \ No newline at end of file diff --git a/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/MainActivity.kt b/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/MainActivity.kt index 62f9f5e3f9..2394b103c4 100644 --- a/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/MainActivity.kt +++ b/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/MainActivity.kt @@ -2,15 +2,21 @@ package ru.surfstudio.android.navigation.sample.app.screen import android.os.Bundle import androidx.appcompat.app.AppCompatActivity +import ru.surfstudio.android.navigation.command.fragment.Add +import ru.surfstudio.android.navigation.provider.container.FragmentNavigationContainer import ru.surfstudio.android.navigation.sample.R +import ru.surfstudio.android.navigation.sample.app.App +import ru.surfstudio.android.navigation.sample.app.screen.splash.SplashRoute -class MainActivity : AppCompatActivity() { +class MainActivity : AppCompatActivity(), FragmentNavigationContainer { + + override val containerId: Int = R.id.fragment_container override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_single) if (savedInstanceState == null) { //Adding fragment only on first create - // TODO + App.executor.execute(Add(SplashRoute())) } } } \ No newline at end of file diff --git a/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/auth/AuthFragment.kt b/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/auth/AuthFragment.kt index 7de936774a..fe96a2d31d 100644 --- a/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/auth/AuthFragment.kt +++ b/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/auth/AuthFragment.kt @@ -6,7 +6,11 @@ import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment import kotlinx.android.synthetic.main.fragment_auth.* +import ru.surfstudio.android.navigation.command.fragment.Replace +import ru.surfstudio.android.navigation.command.fragment.ReplaceHard import ru.surfstudio.android.navigation.sample.R +import ru.surfstudio.android.navigation.sample.app.App +import ru.surfstudio.android.navigation.sample.app.screen.main.MainRoute class AuthFragment : Fragment() { @@ -16,7 +20,7 @@ class AuthFragment : Fragment() { override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) auth_btn.setOnClickListener { - + App.executor.execute(ReplaceHard(MainRoute())) } } } \ No newline at end of file diff --git a/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/MainFragment.kt b/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/MainFragment.kt index 2d7d6b7f47..a63f3c7186 100644 --- a/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/MainFragment.kt +++ b/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/MainFragment.kt @@ -6,14 +6,18 @@ import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment import kotlinx.android.synthetic.main.fragment_main.* +import ru.surfstudio.android.navigation.command.fragment.RemoveLast +import ru.surfstudio.android.navigation.command.fragment.Replace import ru.surfstudio.android.navigation.provider.container.TabFragmentNavigationContainer import ru.surfstudio.android.navigation.route.fragment.FragmentRoute import ru.surfstudio.android.navigation.sample.R +import ru.surfstudio.android.navigation.sample.app.App import ru.surfstudio.android.navigation.sample.app.screen.main.MainTabType.* -import ru.surfstudio.android.navigation.sample.app.screen.main.gallery.GalleryTabRoute +import ru.surfstudio.android.navigation.sample.app.screen.main.gallery.GalleryRoute import ru.surfstudio.android.navigation.sample.app.screen.main.home.HomeTabRoute import ru.surfstudio.android.navigation.sample.app.screen.main.profile.ProfileTabRoute import ru.surfstudio.android.navigation.sample.app.utils.addOnBackPressedListener +import ru.surfstudio.android.navigation.sample.app.utils.animations.FadeAnimations class MainFragment : Fragment(), TabFragmentNavigationContainer { @@ -44,16 +48,23 @@ class MainFragment : Fragment(), TabFragmentNavigationContainer { private fun initBackPressedListener() { addOnBackPressedListener { - + App.executor.execute( + RemoveLast() + ) } } private fun navigateToTab(type: MainTabType) { val route: FragmentRoute = when (type) { HOME -> HomeTabRoute() - GALLERY -> GalleryTabRoute() + GALLERY -> GalleryRoute.Tab() PROFILE -> ProfileTabRoute() } - + App.executor.execute( + Replace(route = route, + animations = FadeAnimations(), + sourceTag = "" + ) + ) } } \ No newline at end of file diff --git a/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/gallery/GalleryTabRoute.kt b/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/gallery/GalleryRoute.kt similarity index 71% rename from navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/gallery/GalleryTabRoute.kt rename to navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/gallery/GalleryRoute.kt index 2e0949a960..4310fa7e39 100644 --- a/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/gallery/GalleryTabRoute.kt +++ b/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/gallery/GalleryRoute.kt @@ -4,6 +4,11 @@ import androidx.fragment.app.Fragment import ru.surfstudio.android.navigation.route.fragment.FragmentRoute import ru.surfstudio.android.navigation.route.tab.TabHeadRoute -class GalleryTabRoute : FragmentRoute(), TabHeadRoute { +sealed class GalleryRoute : FragmentRoute() { + override fun getScreenClass(): Class? = GalleryTabFragment::class.java + + class Tab : GalleryRoute(), TabHeadRoute + + class FullScreen : GalleryRoute() } \ No newline at end of file diff --git a/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/home/HomeTabFragment.kt b/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/home/HomeTabFragment.kt index 5d5008d069..bb92d2da5b 100644 --- a/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/home/HomeTabFragment.kt +++ b/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/home/HomeTabFragment.kt @@ -5,7 +5,12 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment +import kotlinx.android.synthetic.main.fragment_home.* +import ru.surfstudio.android.navigation.command.fragment.Replace +import ru.surfstudio.android.navigation.command.fragment.base.FragmentNavigationCommand import ru.surfstudio.android.navigation.sample.R +import ru.surfstudio.android.navigation.sample.app.App +import ru.surfstudio.android.navigation.sample.app.screen.main.gallery.GalleryRoute class HomeTabFragment : Fragment() { @@ -15,6 +20,8 @@ class HomeTabFragment : Fragment() { override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) - + home_galery_btn.setOnClickListener { + App.executor.execute(Replace(GalleryRoute.FullScreen(), sourceTag = "")) + } } } \ No newline at end of file diff --git a/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/profile/ProfileTabFragment.kt b/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/profile/ProfileTabFragment.kt index 8e164b1180..4857841b8f 100644 --- a/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/profile/ProfileTabFragment.kt +++ b/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/main/profile/ProfileTabFragment.kt @@ -34,7 +34,7 @@ class ProfileTabFragment : Fragment() { profile_settings_btn.setOnClickListener { } profile_about_app_btn.setOnClickListener { } profile_logout_btn.setOnClickListener { } - profile_attach_photo_btn.setOnClickListener { + profile_custom_stack_btn.setOnClickListener { } diff --git a/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/splash/SplashFragment.kt b/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/splash/SplashFragment.kt index 871dbe8484..f9dc871107 100644 --- a/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/splash/SplashFragment.kt +++ b/navigation/sample/src/main/java/ru/surfstudio/android/navigation/sample/app/screen/splash/SplashFragment.kt @@ -6,7 +6,11 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment +import ru.surfstudio.android.navigation.command.fragment.ReplaceHard import ru.surfstudio.android.navigation.sample.R +import ru.surfstudio.android.navigation.sample.app.App +import ru.surfstudio.android.navigation.sample.app.screen.auth.AuthRoute +import ru.surfstudio.android.navigation.sample.app.utils.animations.FadeAnimations class SplashFragment : Fragment() { @@ -17,7 +21,7 @@ class SplashFragment : Fragment() { override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) Handler().postDelayed({ - // TODO + App.executor.execute(ReplaceHard(AuthRoute(), animations = FadeAnimations())) }, 1500L) } } \ No newline at end of file diff --git a/navigation/sample/src/main/res/anim/slide_in_from_bottom.xml b/navigation/sample/src/main/res/anim/slide_in_from_bottom.xml new file mode 100644 index 0000000000..48167b4fa5 --- /dev/null +++ b/navigation/sample/src/main/res/anim/slide_in_from_bottom.xml @@ -0,0 +1,6 @@ + + \ No newline at end of file diff --git a/navigation/sample/src/main/res/anim/slide_out_to_bottom.xml b/navigation/sample/src/main/res/anim/slide_out_to_bottom.xml new file mode 100644 index 0000000000..7352490789 --- /dev/null +++ b/navigation/sample/src/main/res/anim/slide_out_to_bottom.xml @@ -0,0 +1,6 @@ + + \ No newline at end of file diff --git a/navigation/sample/src/main/res/layout/fragment_home.xml b/navigation/sample/src/main/res/layout/fragment_home.xml index 37884d25d9..bde5e9c28f 100644 --- a/navigation/sample/src/main/res/layout/fragment_home.xml +++ b/navigation/sample/src/main/res/layout/fragment_home.xml @@ -12,10 +12,10 @@ android:textSize="24sp" />