Explorar o código

Created basepreferencehelper class, set loggedin state, if user logged in it navigates to dashboard screen from splash screen

Khubaib hai 7 meses
pai
achega
2e30e89652

+ 2 - 1
app/src/main/java/com/fastest/pass/account/presentation/ui/components/AccountScreen.kt

@@ -179,7 +179,8 @@ fun AccountScreen(clickType: (ClickType) -> Unit) {
                     .fillMaxWidth()
                     .height(250.dp)
             ) {
-                LogoutDialog(title = stringResource(id = R.string.logout),
+                LogoutDialog(
+                    title = stringResource(id = R.string.logout),
                     desc = stringResource(id = R.string.sure_logout_account),
                     onCancel = { isLoggedOut = false },
                     clickType = {

+ 9 - 0
app/src/main/java/com/fastest/pass/app/AppModule.kt

@@ -1,8 +1,11 @@
 package com.fastest.pass.app
 
+import android.content.Context
+import com.fastest.pass.helpers.BasePreferenceHelper
 import dagger.Module
 import dagger.Provides
 import dagger.hilt.InstallIn
+import dagger.hilt.android.qualifiers.ApplicationContext
 import dagger.hilt.components.SingletonComponent
 import okhttp3.OkHttpClient
 import okhttp3.logging.HttpLoggingInterceptor
@@ -38,4 +41,10 @@ object AppModule {
             .addConverterFactory(GsonConverterFactory.create())
             .build()
     }
+
+    @Provides
+    @Singleton
+    fun provideBasePreferenceHelper(@ApplicationContext context: Context) : BasePreferenceHelper {
+        return BasePreferenceHelper(context)
+    }
 }

+ 6 - 0
app/src/main/java/com/fastest/pass/app/MainActivity.kt

@@ -7,6 +7,7 @@ import androidx.fragment.app.FragmentActivity
 import androidx.navigation.NavController
 import androidx.navigation.fragment.NavHostFragment
 import com.fastest.pass.R
+import com.fastest.pass.helpers.BasePreferenceHelper
 import dagger.hilt.android.AndroidEntryPoint
 
 @AndroidEntryPoint
@@ -19,6 +20,8 @@ open class MainActivity : FragmentActivity() {
         enableEdgeToEdge()
         setContentView(R.layout.activity_main)
 
+//        basePreferenceHelper = BasePreferenceHelper(applicationContext)
+
         val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
         navController = navHostFragment.navController
         val navInflater = navHostFragment.navController.navInflater
@@ -53,4 +56,7 @@ open class MainActivity : FragmentActivity() {
             .show()
     }
 
+    companion object {
+//        lateinit var basePreferenceHelper: BasePreferenceHelper
+    }
 }

+ 23 - 0
app/src/main/java/com/fastest/pass/helpers/BasePreferenceHelper.kt

@@ -0,0 +1,23 @@
+package com.fastest.pass.helpers
+
+import android.content.Context
+
+class BasePreferenceHelper(private val context: Context) : PreferencesHelper() {
+
+    fun clearAllData() {
+        removePreference(context, KEY_FILENAME, KEY_ISLOGGEDIN)
+    }
+
+    fun getLoggedInState(): Boolean {
+        return getBooleanPreference(context, KEY_FILENAME, KEY_ISLOGGEDIN)
+    }
+
+    fun setLoggedInState(state: Boolean) {
+        putBooleanPreference(context, KEY_FILENAME, KEY_ISLOGGEDIN, state)
+    }
+
+    companion object {
+        private const val KEY_FILENAME = "file_fastestpass"
+        private const val KEY_ISLOGGEDIN = "key_isloggedin"
+    }
+}

+ 78 - 0
app/src/main/java/com/fastest/pass/helpers/PreferencesHelper.kt

@@ -0,0 +1,78 @@
+package com.fastest.pass.helpers
+
+import android.app.Activity
+import android.content.Context
+
+open class PreferencesHelper {
+    companion object {
+
+         fun putStringPreference(
+            context: Context,
+            prefsName: String?,
+            key: String?,
+            value: String?
+        ) {
+            val preferences = context.getSharedPreferences(prefsName, Activity.MODE_PRIVATE)
+            val editor = preferences.edit()
+
+            editor.putString(key, value)
+            editor.commit()
+        }
+
+         fun getStringPreference(context: Context, prefsName: String?, key: String?): String? {
+            val preferences = context.getSharedPreferences(prefsName, Activity.MODE_PRIVATE)
+            val value = preferences.getString(key, "")
+            return value
+        }
+
+         fun putBooleanPreference(
+            context: Context,
+            prefsName: String?,
+            key: String?,
+            value: Boolean
+         ) {
+            val preferences = context.getSharedPreferences(prefsName, Activity.MODE_PRIVATE)
+            val editor = preferences.edit()
+
+            editor.putBoolean(key, value)
+            editor.commit()
+        }
+
+         fun getBooleanPreference(
+            context: Context,
+            prefsName: String?,
+            key: String?
+        ): Boolean {
+            val preferences = context.getSharedPreferences(prefsName, Activity.MODE_PRIVATE)
+            val value = preferences.getBoolean(key, false)
+            return value
+        }
+
+         fun putIntegerPreference(
+            context: Context,
+            prefsName: String?,
+            key: String?,
+            value: Int
+        ) {
+            val preferences = context.getSharedPreferences(prefsName, Activity.MODE_PRIVATE)
+            val editor = preferences.edit()
+
+            editor.putInt(key, value)
+            editor.commit()
+        }
+
+         fun getIntegerPreference(context: Context, prefsName: String?, key: String?): Int {
+            val preferences = context.getSharedPreferences(prefsName, Activity.MODE_PRIVATE)
+            val value = preferences.getInt(key, 0)
+            return value
+        }
+
+         fun removePreference(context: Context, prefsName: String?, key: String?) {
+            val preferences = context.getSharedPreferences(prefsName, Activity.MODE_PRIVATE)
+            val editor = preferences.edit()
+
+            editor.remove(key)
+            editor.commit()
+        }
+    }
+}

+ 5 - 1
app/src/main/java/com/fastest/pass/login/presentation/ui/LoginFragment.kt

@@ -18,6 +18,8 @@ import androidx.fragment.app.viewModels
 import com.fastest.pass.app.BaseFragment
 import com.fastest.pass.R
 import com.fastest.pass.app.GenericLoader
+import com.fastest.pass.app.MainActivity
+import com.fastest.pass.helpers.BasePreferenceHelper
 import com.fastest.pass.login.presentation.ui.components.ClickType
 import com.fastest.pass.login.presentation.ui.components.LoginScreen
 import com.fastest.pass.login.presentation.viewmodels.LoginViewModel
@@ -34,6 +36,8 @@ class LoginFragment : BaseFragment() {
 
     @Inject
     lateinit var navigation: LoginNavigation
+    @Inject
+    lateinit var basePreferenceHelper: BasePreferenceHelper
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
@@ -56,10 +60,10 @@ class LoginFragment : BaseFragment() {
                                 .background(colorResource(id = R.color.white))
                                 .padding(paddingValues.calculateBottomPadding())
                         ) {
-
                             val loginResponse = viewmodel.loginResponse.value
 
                             loginResponse.response?.data?.let {
+                                basePreferenceHelper.setLoggedInState(true)
                                 viewmodel.navigateTo(LoginRoute.OpenDashBoardScreen)
                             }
 

+ 1 - 1
app/src/main/java/com/fastest/pass/login/presentation/ui/components/LoginScreen.kt

@@ -66,7 +66,7 @@ import androidx.compose.ui.unit.dp
 import androidx.compose.ui.unit.sp
 import com.fastest.pass.R
 import com.fastest.pass.app.Utils
-import com.fastest.views.ShowCustomSnackBar
+import com.fastest.pass.views.ShowCustomSnackBar
 import kotlinx.coroutines.delay
 import kotlinx.coroutines.launch
 import java.security.MessageDigest

+ 5 - 1
app/src/main/java/com/fastest/pass/splash/presentation/ui/SplashFragment.kt

@@ -10,6 +10,8 @@ import com.fastest.pass.splash.presentation.viewmodels.SplashViewModel
 import dagger.hilt.android.AndroidEntryPoint
 import androidx.fragment.app.viewModels
 import com.fastest.pass.app.BaseFragment
+import com.fastest.pass.app.MainActivity
+import com.fastest.pass.helpers.BasePreferenceHelper
 import com.fastest.pass.splash.utils.SplashNavigation
 import com.fastest.pass.ui.theme.FastestPassTheme
 import javax.inject.Inject
@@ -21,6 +23,8 @@ class SplashFragment : BaseFragment() {
 
     @Inject
     lateinit var navigation : SplashNavigation
+    @Inject
+    lateinit var basePreferenceHelper: BasePreferenceHelper
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
@@ -38,7 +42,7 @@ class SplashFragment : BaseFragment() {
 //                    viewModel.navigateTo(SplashRoute.OpenWelcome)
 //                }
 
-                viewModel.checkAuthentication()
+                viewModel.checkAuthentication(basePreferenceHelper.getLoggedInState())
 
                 FastestPassTheme {
                     SplashScreen(viewModel)

+ 7 - 2
app/src/main/java/com/fastest/pass/splash/presentation/viewmodels/SplashViewModel.kt

@@ -20,10 +20,15 @@ class SplashViewModel @Inject constructor() : ViewModel() {
     private val _router = MutableStateFlow<SplashRoute>(SplashRoute.NoneScreen)
     val router :MutableStateFlow<SplashRoute> = _router
 
-    fun checkAuthentication() {
+    fun checkAuthentication(isLoggedIn: Boolean) {
         viewModelScope.launch {
             delay(2000)
-            navigateTo(SplashRoute.OpenWelcome)
+            if (isLoggedIn) {
+                navigateTo(SplashRoute.OpenDashBoardScreen)
+            } else {
+                navigateTo(SplashRoute.OpenWelcome)
+            }
+
 //            _navigateToLogin.value = true
         }
     }

+ 13 - 0
app/src/main/java/com/fastest/pass/splash/utils/SplashNavigation.kt

@@ -2,6 +2,7 @@ package com.fastest.pass.splash.utils
 
 import androidx.lifecycle.lifecycleScope
 import androidx.navigation.fragment.findNavController
+import androidx.navigation.navOptions
 import com.fastest.pass.R
 import com.fastest.pass.splash.presentation.ui.SplashFragment
 
@@ -19,6 +20,18 @@ class SplashNavigation {
                         splashFragment.findNavController().popBackStack()
                         splashFragment.findNavController().navigate(R.id.welcomeFragment)
                     }
+                    SplashRoute.OpenDashBoardScreen -> {
+                        splashFragment.findNavController().navigate(
+                            R.id.dashboardFragment,
+                            null,
+                            navOptions {
+                                popUpTo(splashFragment.findNavController().graph.id) {
+                                    inclusive = true
+                                }
+                                launchSingleTop = true
+                            }
+                        )
+                    }
                     SplashRoute.NoneScreen -> {}
                 }
 

+ 1 - 0
app/src/main/java/com/fastest/pass/splash/utils/SplashRoute.kt

@@ -3,5 +3,6 @@ package com.fastest.pass.splash.utils
 sealed class SplashRoute {
     data object OpenLogin : SplashRoute()
     data object OpenWelcome : SplashRoute()
+    data object OpenDashBoardScreen : SplashRoute()
     data object NoneScreen : SplashRoute()
 }

+ 1 - 1
app/src/main/java/com/fastest/views/CustomSnackBar.kt

@@ -1,4 +1,4 @@
-package com.fastest.views
+package com.fastest.pass.views
 
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.Row