Преглед на файлове

add navigation
add navidate SplashFragment to LoginFragment

MrOzOn преди 5 години
родител
ревизия
63929f2da2

+ 12 - 0
app/src/main/java/com/mrozon/healthdiary/di/NavigationModule.kt

@@ -1,13 +1,25 @@
 package com.mrozon.healthdiary.di
 
+import androidx.databinding.ViewDataBinding
+import androidx.navigation.NavController
+import androidx.navigation.fragment.findNavController
+import com.mrozon.core_api.db.HealthDiaryDao
+import com.mrozon.core_api.mapper.UserToUserDbMapper
 import com.mrozon.core_api.navigation.SplashNavigator
+import com.mrozon.feature_splash.repository.LocalUser
+import com.mrozon.feature_splash.repository.LocalUserImp
 import com.mrozon.healthdiary.navigation.SplashNavigatorImpl
+import com.mrozon.utils.base.BaseFragment
 import dagger.Binds
 import dagger.Module
+import dagger.Provides
+import dagger.Reusable
+import javax.inject.Singleton
 
 @Module
 interface NavigationModule {
 
+    @Reusable
     @Binds
     fun splashNavigator(navigator: SplashNavigatorImpl): SplashNavigator
 

+ 6 - 1
app/src/main/java/com/mrozon/healthdiary/navigation/SplashNavigatorImpl.kt

@@ -1,11 +1,16 @@
 package com.mrozon.healthdiary.navigation
 
+import androidx.navigation.NavController
 import com.mrozon.core_api.navigation.SplashNavigator
 import com.mrozon.healthdiary.R
 import javax.inject.Inject
 
 class SplashNavigatorImpl @Inject constructor()
-    : SplashNavigator {
+    :SplashNavigator {
+
+    override fun navigateToAuth(navController: NavController) {
+        navController.navigate(R.id.action_splashFragment_to_loginFragment)
+    }
 
 //    override fun navigateToGameVideo() {
 //        navController?.navigate(R.id.action_gameListFragment_to_gameVideoFragment)

+ 9 - 3
app/src/main/java/com/mrozon/healthdiary/presentation/main/MainActivity.kt

@@ -5,6 +5,7 @@ import android.view.View
 import androidx.activity.viewModels
 import androidx.appcompat.app.AppCompatActivity
 import androidx.core.view.GravityCompat
+import androidx.databinding.DataBindingUtil
 import androidx.drawerlayout.widget.DrawerLayout
 import androidx.drawerlayout.widget.DrawerLayout.LOCK_MODE_LOCKED_CLOSED
 import androidx.drawerlayout.widget.DrawerLayout.LOCK_MODE_UNLOCKED
@@ -27,24 +28,29 @@ import com.mrozon.utils.base.BaseActivity
 import timber.log.Timber
 import javax.inject.Inject
 
-class MainActivity : BaseActivity<ActivityMainBinding>() {
+class MainActivity : AppCompatActivity(){ //BaseActivity<ActivityMainBinding>() {
 
     @Inject
     lateinit var viewModelFactory: ViewModelProvider.Factory
 
     private val viewModel by viewModels<MainActivityViewModel> { viewModelFactory }
 
-    override fun getLayoutId(): Int = R.layout.activity_main
+//    override fun getLayoutId(): Int = R.layout.activity_main
 
     private lateinit var drawerLayout: DrawerLayout
     private lateinit var appBarConfiguration: AppBarConfiguration
     private lateinit var navController: NavController
 
+    private lateinit var binding: ActivityMainBinding
+
 
     override fun onCreate(savedInstanceState: Bundle?) {
         initDI()
         super.onCreate(savedInstanceState)
+        binding = DataBindingUtil.setContentView(this,
+            R.layout.activity_main)
         initNavigation()
+        subscribeUi()
     }
 
     private fun initDI() {
@@ -73,7 +79,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
         }
     }
 
-    override fun subscribeUi() {
+    fun subscribeUi() {
         viewModel.currentUser.observe(this, Observer {
             if(it==null){
                 Timber.d("user is null")

+ 1 - 0
core_api/build.gradle

@@ -37,6 +37,7 @@ dependencies {
     implementation room
     implementation okhttp
     implementation converterGson
+    implementation navigationFragment
 
     implementation fileTree(dir: 'libs', include: ['*.jar'])
     implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

+ 3 - 1
core_api/src/main/java/com/mrozon/core_api/navigation/SplashNavigator.kt

@@ -1,6 +1,8 @@
 package com.mrozon.core_api.navigation
 
+import androidx.navigation.NavController
 
-interface SplashNavigator {
 
+interface SplashNavigator {
+    fun navigateToAuth(navController: NavController)
 }

+ 1 - 0
core_impl/build.gradle

@@ -39,6 +39,7 @@ dependencies {
     implementation loggingInterceptor
     implementation gson
     implementation converterGson
+    implementation navigationFragment
 
     implementation fileTree(dir: 'libs', include: ['*.jar'])
     implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

+ 1 - 0
feature_auth/src/main/java/com/mrozon/feature_auth/di/LoginFragmentComponent.kt

@@ -1,5 +1,6 @@
 package com.mrozon.feature_auth.di
 
+import com.mrozon.core_api.navigation.SplashNavigator
 import com.mrozon.core_api.providers.AppWithFacade
 import com.mrozon.core_api.providers.ProvidersFacade
 import com.mrozon.core_api.viewmodel.ViewModelsFactoryProvider

+ 0 - 1
feature_auth/src/main/java/com/mrozon/feature_auth/presentation/LoginFragment.kt

@@ -25,7 +25,6 @@ class LoginFragment : BaseFragment<FragmentLoginBinding>() {
     }
 
     override fun subscribeUi() {
-        TODO("Not yet implemented")
     }
 
 }

+ 6 - 2
feature_splash/src/main/java/com/mrozon/feature_splash/di/SplashFragmentComponent.kt

@@ -1,17 +1,22 @@
 package com.mrozon.feature_splash.di
 
+import android.content.Context
+import androidx.navigation.NavController
+import androidx.navigation.fragment.findNavController
+import com.mrozon.core.CoreProvidersFactory
 import com.mrozon.core_api.navigation.SplashNavigator
 import com.mrozon.core_api.providers.AppWithFacade
 import com.mrozon.core_api.providers.ProvidersFacade
 import com.mrozon.core_api.viewmodel.ViewModelsFactoryProvider
 import com.mrozon.feature_splash.presentation.SplashFragment
+import dagger.BindsInstance
 import dagger.Component
 import javax.inject.Singleton
 
 @Singleton
 @Component(
     modules = [SplashFragmentModule::class],
-    dependencies = [ProvidersFacade::class, SplashNavigator::class]
+    dependencies = [ProvidersFacade::class]
 )
 interface SplashFragmentComponent: ViewModelsFactoryProvider {
 
@@ -19,7 +24,6 @@ interface SplashFragmentComponent: ViewModelsFactoryProvider {
 
         fun create(providersFacade: ProvidersFacade): SplashFragmentComponent {
             return DaggerSplashFragmentComponent.builder()
-                .splashNavigator(providersFacade.provideSplashNavigator())
                 .providersFacade(providersFacade)
                 .build()
         }

+ 7 - 0
feature_splash/src/main/java/com/mrozon/feature_splash/presentation/SplashFragment.kt

@@ -9,6 +9,9 @@ import android.view.ViewGroup
 import androidx.fragment.app.viewModels
 import androidx.lifecycle.Observer
 import androidx.lifecycle.ViewModelProvider
+import androidx.navigation.findNavController
+import androidx.navigation.fragment.findNavController
+import com.mrozon.core_api.navigation.SplashNavigator
 import com.mrozon.feature_splash.R
 import com.mrozon.feature_splash.databinding.FragmentSplashBinding
 import com.mrozon.feature_splash.di.SplashFragmentComponent
@@ -23,6 +26,9 @@ class SplashFragment : BaseFragment<FragmentSplashBinding>() {
     @Inject
     lateinit var viewModelFactory: ViewModelProvider.Factory
 
+    @Inject
+    lateinit var navigator: SplashNavigator
+
     private val viewModel by viewModels<SplashFragmentViewModel> { viewModelFactory }
 
     override fun onAttach(context: Context) {
@@ -34,6 +40,7 @@ class SplashFragment : BaseFragment<FragmentSplashBinding>() {
         viewModel.currentUser.observe(viewLifecycleOwner, Observer { it ->
             if(it==null){
                 //auth user
+                navigator.navigateToAuth(findNavController())
             }
             else
             {

+ 1 - 0
utils/build.gradle

@@ -41,6 +41,7 @@ dependencies {
 
     implementation navigationFragment
     implementation navigationUi
+    implementation timber
     implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
 
 

+ 1 - 1
utils/src/main/java/com/mrozon/utils/base/BaseActivity.kt

@@ -24,7 +24,7 @@ abstract class BaseActivity<T : ViewDataBinding>: AppCompatActivity(){
 
     private fun performDataBinding() {
         binding = DataBindingUtil.setContentView(this, getLayoutId())
-        binding.executePendingBindings()
+//        binding.executePendingBindings()
     }
 
 }

+ 28 - 25
utils/src/main/java/com/mrozon/utils/base/BaseFragment.kt

@@ -12,11 +12,13 @@ import androidx.databinding.ViewDataBinding
 import androidx.fragment.app.Fragment
 import androidx.navigation.Navigation.findNavController
 import androidx.navigation.fragment.NavHostFragment
+import timber.log.Timber
 
-abstract class BaseFragment<T : ViewDataBinding>: Fragment(),
-    ViewTreeObserver.OnGlobalLayoutListener {
+abstract class BaseFragment<T : ViewDataBinding>: Fragment()//,
+{
+//    ViewTreeObserver.OnGlobalLayoutListener {
 
-    var rootView: View? = null
+//    var rootView: View? = null
     var binding: T? = null
 
     @LayoutRes
@@ -24,31 +26,32 @@ abstract class BaseFragment<T : ViewDataBinding>: Fragment(),
 
     abstract fun subscribeUi()
 
-    override fun onGlobalLayout() {
-        rootView!!.viewTreeObserver.removeOnGlobalLayoutListener(this)
-    }
+//    override fun onGlobalLayout() {
+//        rootView!!.viewTreeObserver.removeOnGlobalLayoutListener(this)
+//    }
 
     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
         val layoutId = getLayoutId()
-        if (rootView != null) {
-            val parent = rootView!!.parent as ViewGroup
-            parent.removeView(rootView)
-        } else {
-            try {
-                binding = DataBindingUtil.inflate(inflater, layoutId, container, false)
-                rootView = if (binding != null) {
-                    binding!!.root
-                } else {
-                    inflater.inflate(layoutId, container, false)
-                }
-                rootView!!.viewTreeObserver.addOnGlobalLayoutListener(this)
-                binding!!.executePendingBindings()
-
-            } catch (e: InflateException) {
-                e.printStackTrace()
-            }
-        }
+//        if (rootView != null) {
+//            val parent = rootView!!.parent as ViewGroup
+//            parent.removeView(rootView)
+//        } else {
+//            try {
+//                binding = DataBindingUtil.inflate(inflater, layoutId, container, false)
+//                rootView = if (binding != null) {
+//                    binding!!.root
+//                } else {
+//                    inflater.inflate(layoutId, container, false)
+//                }
+//                rootView!!.viewTreeObserver.addOnGlobalLayoutListener(this)
+//                binding!!.executePendingBindings()
+//
+//            } catch (e: InflateException) {
+//                e.printStackTrace()
+//            }
+//        }
+        binding = DataBindingUtil.inflate(inflater, layoutId, container, false)
         subscribeUi()
-        return rootView
+        return binding!!.root
     }
 }