diff --git a/app/src/main/java/com/example/hpostesting/data/constant/Constants.kt b/app/src/main/java/com/example/hpostesting/data/constant/Constants.kt index 967eb05..89c621a 100644 --- a/app/src/main/java/com/example/hpostesting/data/constant/Constants.kt +++ b/app/src/main/java/com/example/hpostesting/data/constant/Constants.kt @@ -28,4 +28,26 @@ object Constants { const val ERROR_CRITICAL = 401 const val NO_OF_TIMES_TO_RUN_SAMPLE = 1 + + const val USER_ID = "usernameId" + + val STATICID = listOf( + "SMIREG1", + "SMIREG2", + "SMIREG3", + "SMIREG4", + "SMIREG5", + "SMIREG6", + "SMIREG7", + "SMIREG8", + "SMIREG9", + "SMIREG10", + "SMIREG11", + "SMIREG12", + "SMIREG13", + "SMIREG14", + "SMIREG15" + ) + + const val password = "SMI@12345" } \ No newline at end of file diff --git a/app/src/main/java/com/example/hpostesting/presentation/dashboard/HomeFragment.kt b/app/src/main/java/com/example/hpostesting/presentation/dashboard/HomeFragment.kt index bf2ca97..5335c54 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/dashboard/HomeFragment.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/dashboard/HomeFragment.kt @@ -3,6 +3,7 @@ package com.example.hpostesting.presentation.dashboard import android.app.AlertDialog import android.content.Context import android.content.DialogInterface +import android.content.SharedPreferences import android.os.Bundle import android.util.Log import android.view.LayoutInflater @@ -13,6 +14,7 @@ import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.navigation.fragment.findNavController import com.example.hpostesting.data.DataHolder +import com.example.hpostesting.data.constant.Constants import com.example.hpostesting.data.model.patient.UserData import com.example.hpostesting.presentation.adapter.UserListAdapter import com.example.hpostesting.presentation.testRight.TestRightViewModel @@ -31,11 +33,12 @@ class HomeFragment : Fragment() { private val binding get() = _binding!! private val viewModel: TestRightViewModel by activityViewModels() private lateinit var rvAdapter: UserListAdapter - + private lateinit var sharedPreference: SharedPreferences override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { _binding = FragmentHomeBinding.inflate(inflater, container, false) + sharedPreference = requireContext().getSharedPreferences("PREFERENCE_NAME", Context.MODE_PRIVATE) DataHolder.selectedTest = null return binding.root @@ -59,7 +62,9 @@ class HomeFragment : Fragment() { setUserId() } } - + binding.btnLogout.setOnClickListener { + logoutUser(requireContext()) + } binding.uploadData.setOnClickListener { showUploadDialog(requireContext()) } @@ -90,6 +95,35 @@ class HomeFragment : Fragment() { rvAdapter.startListening() } + private fun saveUserId(userId: String) { + with(sharedPreference.edit()) { + putString(Constants.USER_ID, userId) + apply() + } + } + private fun logoutUser(context: Context) { + val builder = AlertDialog.Builder(context) + builder.setTitle("Log Out") + builder.setMessage("Do you want to LogOut the Application?") + + // Positive button + builder.setPositiveButton("Yes") { dialog, _ -> + saveUserId("") + findNavController().navigate(R.id.action_userListFragment_to_loginFragment) + dialog.dismiss() + } + + // Negative button + builder.setNegativeButton("No") { dialog, _ -> + dialog.dismiss() + } + + val dialog = builder.create() + dialog.show() + } + + + private fun getData(search: String?, field: String) { val capitalizedSearch = search?.replaceFirstChar { if (search.lowercase() diff --git a/app/src/main/java/com/example/hpostesting/presentation/dashboard/ui/LoginFragment.kt b/app/src/main/java/com/example/hpostesting/presentation/dashboard/ui/LoginFragment.kt index 75c2d9e..f6ddfd1 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/dashboard/ui/LoginFragment.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/dashboard/ui/LoginFragment.kt @@ -1,29 +1,88 @@ package com.example.hpostesting.presentation.dashboard.ui +import android.content.Context +import android.content.SharedPreferences import android.os.Bundle import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Toast +import androidx.navigation.fragment.findNavController +import com.example.hpostesting.data.constant.Constants +import `in`.sminnovations.hpostesting.R import `in`.sminnovations.hpostesting.databinding.FragmentLoginBinding class LoginFragment : Fragment() { private var _binding: FragmentLoginBinding? = null private val binding get() = _binding!! - + private lateinit var sharedPreference: SharedPreferences override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { _binding = FragmentLoginBinding.inflate(inflater, container, false) - + sharedPreference = requireContext().getSharedPreferences("PREFERENCE_NAME", Context.MODE_PRIVATE) return binding.root } + + private fun init() { + if (isUserLoggedIn()) { + navigateToUserListFragment() + return + } + + binding.btnLogin.setOnClickListener { + val loginId = binding.loginId.text.toString() + val password = binding.password.text.toString() + + if (loginId.isNotBlank() && password.isNotBlank()) { + performLogin(loginId, password) + } else { + if (loginId.isBlank()) { + binding.loginId.error = "Please enter a proper Login ID" + } + if (password.isBlank()) { + binding.password.error = "Please enter a proper password" + } + } + } + } + + private fun isUserLoggedIn(): Boolean { + return sharedPreference.getString(Constants.USER_ID, "")?.isNotBlank() == true + } + + private fun navigateToUserListFragment() { + findNavController().navigate(R.id.action_loginFragment_to_userListFragment) + } + + private fun performLogin(loginId: String, password: String) { + val matchingId = Constants.STATICID.firstOrNull { it == loginId } + if (matchingId != null) { + if (password == Constants.password) { + saveUserId(loginId) + navigateToUserListFragment() + return + } else { + Toast.makeText(requireContext(), "Wrong Password", Toast.LENGTH_SHORT).show() + } + } + Toast.makeText(requireContext(), "Wrong UserID", Toast.LENGTH_SHORT).show() + } + + private fun saveUserId(userId: String) { + with(sharedPreference.edit()) { + putString(Constants.USER_ID, userId) + apply() + } + } + override fun onDestroyView() { super.onDestroyView() _binding = null } -} \ No newline at end of file +} diff --git a/app/src/main/res/drawable/baseline_logout_24.xml b/app/src/main/res/drawable/baseline_logout_24.xml new file mode 100644 index 0000000..55ede68 --- /dev/null +++ b/app/src/main/res/drawable/baseline_logout_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/smi_logo.png b/app/src/main/res/drawable/smi_logo.png new file mode 100644 index 0000000..e3e2ea6 Binary files /dev/null and b/app/src/main/res/drawable/smi_logo.png differ diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 55b1b1b..db1f4a6 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -84,6 +84,15 @@ app:layout_constraintBottom_toBottomOf="@+id/tv_title" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="@+id/tv_title" /> + - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/navigation/dashboard_navigation.xml b/app/src/main/res/navigation/dashboard_navigation.xml index 325be3d..7c6aa0f 100644 --- a/app/src/main/res/navigation/dashboard_navigation.xml +++ b/app/src/main/res/navigation/dashboard_navigation.xml @@ -36,5 +36,11 @@ android:id="@+id/loginFragment" android:name="com.example.hpostesting.presentation.dashboard.ui.LoginFragment" android:label="fragment_login" - tools:layout="@layout/fragment_login" /> + tools:layout="@layout/fragment_login" > + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8a91fdd..346b4fa 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -66,7 +66,9 @@ Step 1 : Place the cuvette containing blood sample mixed with kit solution. Step 2 : Press the button below to start the device reading values. - + Login ID + Password + Login Acquire Enter Patient Details Patient Name