12 Commits

Author SHA1 Message Date
Mariya
2aabf57d8a BackLog file added for nagpur consignment for Online Registration code added, fixed all issues 2024-02-05 13:09:14 +05:30
Mariya
7c20657f40 BackLog file added for nagpur consignment for Online Registration code added 2024-02-02 15:03:32 +05:30
Mariya
0a8a4458b5 BackLog file added for nagpur consignment for Online Registration ,added app version 2024-02-02 13:46:16 +05:30
Mariya
43fa99df71 BackLog file added for nagpur consignment for Online Registration 2024-02-02 13:31:19 +05:30
Mariya
425bc61a50 fixing errors related to version 2023-12-14 13:26:54 +05:30
Mariya
2e824c1bed fixing errors related to version 2023-12-12 15:45:16 +05:30
Pritimay Sarkar
ccc50108d3 add app distribution auto update 2023-10-29 07:33:12 +05:30
Pritimay Sarkar
2bd6495612 remove key files 2023-10-24 14:09:53 +05:30
Pritimay Sarkar
143d90b028 fix empty list messages display 2023-10-24 14:07:08 +05:30
Pritimay Sarkar
3bda3f0d51 display app version 2023-10-24 14:05:07 +05:30
Pritimay Sarkar
b6a03e2ebf add search fields based on date partition
- optimize search based on current date partition
	- fix createdAt empty string in case of offline upload
2023-10-23 02:23:28 +05:30
Pritimay Sarkar
eec8867ddc show only current day registrations
- reduce database reads by fetching only current day registrations
	- sort users list in latest first order
2023-10-23 02:20:39 +05:30
19 changed files with 299 additions and 794 deletions

3
app/.gitignore vendored
View File

@@ -1 +1,2 @@
/build /build
/google-services*

View File

@@ -16,8 +16,8 @@ android {
applicationId "in.sminnovations.hposregistration" applicationId "in.sminnovations.hposregistration"
minSdk 26 minSdk 26
targetSdk 34 targetSdk 34
versionCode 1 versionCode 6
versionName "1.0" versionName "1.0.6"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
} }
@@ -42,9 +42,9 @@ android {
dependencies { dependencies {
implementation 'androidx.core:core-ktx:1.10.1' implementation 'androidx.core:core-ktx:1.12.0'
implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.9.0' implementation 'com.google.android.material:material:1.10.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
testImplementation 'junit:junit:4.13.2' testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.ext:junit:1.1.5'
@@ -58,24 +58,26 @@ dependencies {
implementation 'com.google.firebase:firebase-auth-ktx' implementation 'com.google.firebase:firebase-auth-ktx'
implementation 'com.google.firebase:firebase-storage-ktx' implementation 'com.google.firebase:firebase-storage-ktx'
implementation 'com.firebaseui:firebase-ui-firestore:8.0.2' implementation 'com.firebaseui:firebase-ui-firestore:8.0.2'
implementation 'com.google.android.gms:play-services-auth:20.6.0' implementation 'com.google.android.gms:play-services-auth:20.7.0'
implementation 'com.google.firebase:firebase-appdistribution:16.0.0-beta11'
implementation("com.google.firebase:firebase-appdistribution-api-ktx:16.0.0-beta11")
// Coroutines // Coroutines
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1' implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1' implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1'
// Coroutine Lifecycle Scopes // Coroutine Lifecycle Scopes
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1" implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2"
implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.6.1" implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.6.2"
//Dagger - Hilt //Dagger - Hilt
implementation "com.google.dagger:hilt-android:2.46" implementation "com.google.dagger:hilt-android:2.46"
kapt "com.google.dagger:hilt-android-compiler:2.46" kapt "com.google.dagger:hilt-android-compiler:2.46"
kapt "androidx.hilt:hilt-compiler:1.0.0" kapt "androidx.hilt:hilt-compiler:1.1.0"
// Navigation Component // Navigation Component
implementation "androidx.navigation:navigation-fragment-ktx:2.7.0" implementation "androidx.navigation:navigation-fragment-ktx:2.7.5"
implementation "androidx.navigation:navigation-ui-ktx:2.7.0" implementation "androidx.navigation:navigation-ui-ktx:2.7.5"
// Retrofit + GSON // Retrofit + GSON
implementation "com.squareup.retrofit2:retrofit:2.9.0" implementation "com.squareup.retrofit2:retrofit:2.9.0"
@@ -85,16 +87,16 @@ dependencies {
implementation 'com.jakewharton.timber:timber:4.7.1' implementation 'com.jakewharton.timber:timber:4.7.1'
// Activity KTX for viewModels() // Activity KTX for viewModels()
implementation "androidx.activity:activity-ktx:1.7.2" implementation "androidx.activity:activity-ktx:1.8.1"
//image //image
implementation 'com.github.bumptech.glide:glide:4.13.2' implementation 'com.github.bumptech.glide:glide:4.13.2'
annotationProcessor 'com.github.bumptech.glide:compiler:4.13.2' annotationProcessor 'com.github.bumptech.glide:compiler:4.13.2'
//Room //Room
implementation "androidx.room:room-ktx:2.6.0-alpha03" implementation "androidx.room:room-ktx:2.6.1"
implementation "androidx.room:room-runtime:2.6.0-alpha03" implementation "androidx.room:room-runtime:2.6.1"
kapt ("androidx.room:room-compiler:2.6.0-alpha03") kapt ("androidx.room:room-compiler:2.6.1")
// Barcode scanner // Barcode scanner
implementation 'com.journeyapps:zxing-android-embedded:4.3.0' implementation 'com.journeyapps:zxing-android-embedded:4.3.0'

View File

@@ -1,113 +0,0 @@
{
"project_info": {
"project_number": "650071678820",
"project_id": "hpos-af3cc",
"storage_bucket": "hpos-af3cc.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:650071678820:android:f1435a1c07f710036c6471",
"android_client_info": {
"package_name": "com.example.hposconsentform"
}
},
"oauth_client": [
{
"client_id": "650071678820-to41afi9f0gi5r3k6v7pe1e5p96nupcs.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyAVdNGCev_AFX0qmuZJF6kxzRzXUTeAW5I"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "650071678820-to41afi9f0gi5r3k6v7pe1e5p96nupcs.apps.googleusercontent.com",
"client_type": 3
}
]
}
}
},
{
"client_info": {
"mobilesdk_app_id": "1:650071678820:android:7569c1cad4fc99916c6471",
"android_client_info": {
"package_name": "in.sminnovations.hposregistration"
}
},
"oauth_client": [
{
"client_id": "650071678820-70kp5jvjda4r5diqch2kn4lc40p4f42g.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "in.sminnovations.hposregistration",
"certificate_hash": "7714b9268a81d0cf0fb178b0af8dbb630f8fc70a"
}
},
{
"client_id": "650071678820-to41afi9f0gi5r3k6v7pe1e5p96nupcs.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyAVdNGCev_AFX0qmuZJF6kxzRzXUTeAW5I"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "650071678820-to41afi9f0gi5r3k6v7pe1e5p96nupcs.apps.googleusercontent.com",
"client_type": 3
}
]
}
}
},
{
"client_info": {
"mobilesdk_app_id": "1:650071678820:android:f96be19e5d43102b6c6471",
"android_client_info": {
"package_name": "in.sminnovations.hpostesting"
}
},
"oauth_client": [
{
"client_id": "650071678820-l87dnr0bdj95get0khgnvfv2an1k6ogq.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "in.sminnovations.hpostesting",
"certificate_hash": "7714b9268a81d0cf0fb178b0af8dbb630f8fc70a"
}
},
{
"client_id": "650071678820-to41afi9f0gi5r3k6v7pe1e5p96nupcs.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyAVdNGCev_AFX0qmuZJF6kxzRzXUTeAW5I"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "650071678820-to41afi9f0gi5r3k6v7pe1e5p96nupcs.apps.googleusercontent.com",
"client_type": 3
}
]
}
}
}
],
"configuration_version": "1"
}

View File

@@ -1,11 +1,36 @@
package com.example.hposregistration.dao package com.example.hposregistration.dao
import android.content.Context
import androidx.room.Database import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase import androidx.room.RoomDatabase
import androidx.room.TypeConverters import androidx.room.TypeConverters
import androidx.room.migration.Migration
import androidx.sqlite.db.SupportSQLiteDatabase
import com.example.hposregistration.data.user.UserData import com.example.hposregistration.data.user.UserData
@Database(entities = [UserData::class], version = 1, exportSchema = false) @Database(entities = [UserData::class], version = 3, exportSchema = false)
abstract class MyDatabase : RoomDatabase() { abstract class MyDatabase : RoomDatabase() {
abstract fun userDao(): UserDao abstract fun userDao(): UserDao
}
companion object {
val MIGRATION_2_3: Migration = object : Migration(2, 3) {
override fun migrate(database: SupportSQLiteDatabase) {
// Define the necessary SQL statements for migration from version 2 to 3
// For example, you can alter tables or create new ones
database.execSQL("ALTER TABLE user_table ADD COLUMN aadharIdSearch TEXT")
}
}
fun getInstance(context: Context): MyDatabase {
return Room.databaseBuilder(
context.applicationContext,
MyDatabase::class.java,
"my_database"
)
.addMigrations(MIGRATION_2_3)
.build()
}
}
}

View File

@@ -7,8 +7,11 @@ import androidx.room.PrimaryKey
data class UserData( data class UserData(
@PrimaryKey @PrimaryKey
var _id: String = "", var _id: String = "",
var _idSearch: String = "",
var abhaId: String = "", var abhaId: String = "",
var abhaIdSearch: String = "",
var aadharId: String = "", var aadharId: String = "",
var aadharIdSearch: String = "",
var name: String = "", var name: String = "",
var birthYear: String = "", var birthYear: String = "",
var gender: String = "", var gender: String = "",
@@ -18,7 +21,6 @@ data class UserData(
var category: String = "", var category: String = "",
var caste: String = "", var caste: String = "",
var subCaste: String? = "", var subCaste: String? = "",
var appVersion: String ="",
var house: String = "", var house: String = "",
var city: String = "", var city: String = "",
var district: String = "", var district: String = "",
@@ -32,7 +34,10 @@ data class UserData(
var registeredBy: String? = "", var registeredBy: String? = "",
var createdAt: String? = "", var createdAt: String? = "",
var registrationCenterName: String? = "", var registrationCenterName: String? = "",
var testStatus: Boolean = false var testStatus: Boolean = false,
var userAbhaRegistrationLog:String = "",
var userDetailsLog: String = "",
var appVersion: String = "",
){ ){
enum class Gender { enum class Gender {
MALE, MALE,

View File

@@ -27,4 +27,7 @@ class UserDao {
// suspend fun getPatientList(): List<UserData> { // suspend fun getPatientList(): List<UserData> {
// return patientCollection.get().await().toObjects(UserData::class.java) // return patientCollection.get().await().toObjects(UserData::class.java)
// } // }
} }

View File

@@ -2,6 +2,10 @@ package com.example.hposregistration.ui.activities
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle import android.os.Bundle
import android.widget.Toast
import com.google.firebase.appdistribution.FirebaseAppDistribution
import com.google.firebase.appdistribution.FirebaseAppDistributionException
import com.google.firebase.crashlytics.FirebaseCrashlytics
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import `in`.sminnovations.hposregistration.databinding.ActivityMainBinding import `in`.sminnovations.hposregistration.databinding.ActivityMainBinding
@@ -16,4 +20,44 @@ class MainActivity : AppCompatActivity() {
setContentView(binding.root) setContentView(binding.root)
} }
override fun onResume() {
super.onResume()
val firebaseAppDistribution = FirebaseAppDistribution.getInstance()
firebaseAppDistribution.updateIfNewReleaseAvailable()
.addOnProgressListener { updateProgress ->
if (updateProgress.apkBytesDownloaded > 0) {
Toast.makeText(
this,
"${updateProgress.updateStatus}. ${updateProgress.apkBytesDownloaded / 1048576} /${updateProgress.apkFileTotalBytes / 1048576} MB",
Toast.LENGTH_SHORT
).show()
}
}
.addOnFailureListener { e ->
// (Optional) Handle errors.
if (e is FirebaseAppDistributionException) {
when (e.errorCode) {
FirebaseAppDistributionException.Status.NOT_IMPLEMENTED -> {
// SDK did nothing. This is expected when building for Play.
}
else -> {
// Handle other errors.
Toast.makeText(
this,
"AppDistribution error, status: ${e.errorCode}",
Toast.LENGTH_SHORT
).show()
}
}
FirebaseCrashlytics.getInstance().recordException(e)
}
}
.addOnSuccessListener {
// Toast.makeText(this, "App Update: Success!", Toast.LENGTH_SHORT).show()
}
}
} }

View File

@@ -47,10 +47,10 @@ class LoginFragment : Fragment() {
performLogin(loginId, password) performLogin(loginId, password)
} else { } else {
if (loginId.isBlank()) { if (loginId.isBlank()) {
binding.loginId.error = R.string.enter_proper_login_id.toString() binding.loginId.error = "Please enter a proper Login ID"
} }
if (password.isBlank()) { if (password.isBlank()) {
binding.password.error = R.string.enter_proper_password.toString() binding.password.error = "Please enter a proper password"
} }
} }
} }
@@ -72,10 +72,10 @@ class LoginFragment : Fragment() {
navigateToUserListFragment() navigateToUserListFragment()
return return
} else { } else {
Toast.makeText(requireContext(), R.string.wrong_password, Toast.LENGTH_SHORT).show() Toast.makeText(requireContext(), "Wrong Password", Toast.LENGTH_SHORT).show()
} }
} }
Toast.makeText(requireContext(), R.string.wrong_user_id, Toast.LENGTH_SHORT).show() Toast.makeText(requireContext(), "Wrong UserID", Toast.LENGTH_SHORT).show()
} }
private fun saveUserId(userId: String) { private fun saveUserId(userId: String) {

View File

@@ -8,7 +8,6 @@ import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.Button
import android.widget.Toast import android.widget.Toast
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
@@ -18,11 +17,14 @@ import com.example.hposregistration.data.Constant
import com.example.hposregistration.data.user.UserData import com.example.hposregistration.data.user.UserData
import com.example.hposregistration.ui.viewmodels.RegistrationViewModel import com.example.hposregistration.ui.viewmodels.RegistrationViewModel
import com.firebase.ui.firestore.FirestoreRecyclerOptions import com.firebase.ui.firestore.FirestoreRecyclerOptions
import com.google.firebase.firestore.Query
import com.google.firebase.firestore.ktx.firestore import com.google.firebase.firestore.ktx.firestore
import com.google.firebase.ktx.Firebase import com.google.firebase.ktx.Firebase
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import `in`.sminnovations.hposregistration.R import `in`.sminnovations.hposregistration.R
import `in`.sminnovations.hposregistration.databinding.FragmentUserListBinding import `in`.sminnovations.hposregistration.databinding.FragmentUserListBinding
import java.text.SimpleDateFormat
import java.util.Date
@AndroidEntryPoint @AndroidEntryPoint
class UserListFragment : BaseFragment() { class UserListFragment : BaseFragment() {
@@ -56,6 +58,11 @@ class UserListFragment : BaseFragment() {
} }
private fun setupViews() { private fun setupViews() {
val pInfo = requireActivity().packageManager.getPackageInfo(
requireActivity().packageName, 0
)
val version = pInfo.versionName
binding.appVersion.text = version
binding.btnRegisterUser.setOnClickListener { binding.btnRegisterUser.setOnClickListener {
findNavController().navigate(R.id.action_userListFragment_to_registrationFragment) findNavController().navigate(R.id.action_userListFragment_to_registrationFragment)
} }
@@ -87,8 +94,8 @@ class UserListFragment : BaseFragment() {
private fun logoutUser(context: Context) { private fun logoutUser(context: Context) {
val builder = AlertDialog.Builder(context) val builder = AlertDialog.Builder(context)
builder.setTitle(R.string.log_out) builder.setTitle("Log Out")
builder.setMessage(R.string.do_log_out) builder.setMessage("Do you want to LogOut the Application?")
// Positive button // Positive button
builder.setPositiveButton("Yes") { dialog, _ -> builder.setPositiveButton("Yes") { dialog, _ ->
@@ -114,16 +121,16 @@ class UserListFragment : BaseFragment() {
} }
private fun showUploadDialog(context: Context) { private fun showUploadDialog(context: Context) {
val builder = AlertDialog.Builder(context) val builder = AlertDialog.Builder(context)
builder.setTitle(R.string.upload_db_registration) builder.setTitle("Upload DB Registration")
builder.setMessage(R.string.upload_local_db_to_cloud) builder.setMessage("Do you want to upload the local DB Registration to the cloud?")
// Positive button // Positive button
builder.setPositiveButton(R.string.upload) { dialog, _ -> builder.setPositiveButton("Upload") { dialog, _ ->
uploadLoadDBData(dialog) uploadLoadDBData(dialog)
} }
// Negative button // Negative button
builder.setNegativeButton(R.string.cancel) { dialog, _ -> builder.setNegativeButton("Cancel") { dialog, _ ->
dialog.dismiss() dialog.dismiss()
} }
@@ -141,7 +148,7 @@ class UserListFragment : BaseFragment() {
viewModel.deleteById(userData._id) viewModel.deleteById(userData._id)
} }
dialog.dismiss() dialog.dismiss()
Toast.makeText(requireContext(), R.string.upload_done_successfully, Toast.LENGTH_SHORT) Toast.makeText(requireContext(), "Upload done successfully", Toast.LENGTH_SHORT)
.show() .show()
} }
} }
@@ -160,7 +167,17 @@ class UserListFragment : BaseFragment() {
private fun fetchFromServer() { private fun fetchFromServer() {
binding.noList.visibility = View.GONE binding.noList.visibility = View.GONE
binding.rvOrder.visibility = View.VISIBLE binding.rvOrder.visibility = View.VISIBLE
val dateFormat = SimpleDateFormat("yyyy-MM-dd")
val currentDate = Date()
val today = dateFormat.format(currentDate)
val query = Firebase.firestore.collection("patientData") val query = Firebase.firestore.collection("patientData")
.whereGreaterThanOrEqualTo("createdAt", today)
.orderBy("createdAt", Query.Direction.DESCENDING)
query.get().addOnSuccessListener {
if (it.documents.isEmpty() && isOnline) {
binding.emptyRegistrations.visibility = View.VISIBLE
}
}
val recyclerViewOptions = val recyclerViewOptions =
FirestoreRecyclerOptions.Builder<UserData>().setQuery(query, UserData::class.java) FirestoreRecyclerOptions.Builder<UserData>().setQuery(query, UserData::class.java)
.build() .build()
@@ -176,6 +193,7 @@ class UserListFragment : BaseFragment() {
binding.noList.visibility = View.GONE binding.noList.visibility = View.GONE
binding.rvOrder.visibility = View.VISIBLE binding.rvOrder.visibility = View.VISIBLE
} else { } else {
binding.emptyRegistrations.visibility = View.GONE
if (userDataList.isEmpty()) { if (userDataList.isEmpty()) {
binding.noList.visibility = View.VISIBLE binding.noList.visibility = View.VISIBLE
binding.rvOrder.visibility = View.GONE binding.rvOrder.visibility = View.GONE

View File

@@ -1,10 +1,15 @@
package com.example.hposregistration.ui.fragments.registration package com.example.hposregistration.ui.fragments.registration
import android.annotation.SuppressLint
import android.content.Context
import android.content.SharedPreferences
import android.os.Bundle import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.Toast import android.widget.Toast
import androidx.core.content.edit
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs import androidx.navigation.fragment.navArgs
@@ -17,7 +22,6 @@ import com.example.hposregistration.ui.viewmodels.RegistrationViewModel
import com.journeyapps.barcodescanner.ScanContract import com.journeyapps.barcodescanner.ScanContract
import com.journeyapps.barcodescanner.ScanIntentResult import com.journeyapps.barcodescanner.ScanIntentResult
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import `in`.sminnovations.hposregistration.R
import `in`.sminnovations.hposregistration.databinding.FragmentAbhaRegistrationBinding import `in`.sminnovations.hposregistration.databinding.FragmentAbhaRegistrationBinding
import org.json.JSONObject import org.json.JSONObject
@@ -30,12 +34,13 @@ class AbhaRegistrationFragment : BaseFragment() {
private val viewModel by viewModels<RegistrationViewModel>() private val viewModel by viewModels<RegistrationViewModel>()
private val args: AbhaRegistrationFragmentArgs by navArgs() private val args: AbhaRegistrationFragmentArgs by navArgs()
private var userData = UserData() private var userData = UserData()
private lateinit var sharedPreference:SharedPreferences
private val barcodeLauncher = private val barcodeLauncher =
registerForActivityResult(ScanContract()) { result: ScanIntentResult -> registerForActivityResult(ScanContract()) { result: ScanIntentResult ->
if (result.contents == null) { if (result.contents == null) {
Toast.makeText( Toast.makeText(
requireContext(), R.string.cancelled_unable_scan, Toast.LENGTH_LONG requireContext(), "Cancelled: Unable to scan, Try Again!!", Toast.LENGTH_LONG
).show() ).show()
} else { } else {
processScannedData(result.contents) processScannedData(result.contents)
@@ -46,7 +51,11 @@ class AbhaRegistrationFragment : BaseFragment() {
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View { ): View {
_binding = FragmentAbhaRegistrationBinding.inflate(inflater, container, false) _binding = FragmentAbhaRegistrationBinding.inflate(inflater, container, false)
sharedPreference =
requireContext().getSharedPreferences("PREFERENCE_NAME", Context.MODE_PRIVATE)
return binding.root return binding.root
} }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@@ -54,6 +63,7 @@ class AbhaRegistrationFragment : BaseFragment() {
init() init()
} }
@SuppressLint("LogNotTimber", "CommitPrefEdits")
private fun init() { private fun init() {
binding.btnScanNow.setOnClickListener { binding.btnScanNow.setOnClickListener {
barcodeLauncher.launch(scanQR("Please Scan the Abha ID/Aadhar ID")) barcodeLauncher.launch(scanQR("Please Scan the Abha ID/Aadhar ID"))
@@ -79,17 +89,28 @@ class AbhaRegistrationFragment : BaseFragment() {
val userName = binding.etName.text.toString() val userName = binding.etName.text.toString()
val aadharIdInput = binding.aadharID.text.toString() val aadharIdInput = binding.aadharID.text.toString()
val centerName = binding.centerName.text.toString() val centerName = binding.centerName.text.toString()
if (validateInputs(abhaIdInput, aadharIdInput, userName, centerName)) { if (validateInputs(abhaIdInput, aadharIdInput, userName, centerName)) {
userData.apply { userData.apply {
name = userName name = userName
aadharId = aadharIdInput aadharId = aadharIdInput
abhaId = abhaIdInput abhaId = abhaIdInput
registrationCenterName = centerName registrationCenterName = centerName
_id = aadharId + userName.substring(0, 3).uppercase() + centerName.substring(0, 3).uppercase() _id = aadharId + userName.substring(0, 3).uppercase() + centerName.substring(0, 3)
} .uppercase()
userData.userAbhaRegistrationLog = "${userData.abhaId}," + "${userData.name}," +"${userData.aadharId}," + "${userData.registrationCenterName}"
Log.e(
"userAbhaRegistrationLog",
"Assigned userAbhaRegistrationLog: ${userData.userAbhaRegistrationLog}"
)
viewModel.insert(userData) sharedPreference.edit()
.putString("userAbhaRegistrationLog", userData.userAbhaRegistrationLog)
.apply()
Log.e("userAbhaRegistrationLog", sharedPreference.getString("userAbhaRegistrationLog","").toString())
}
viewModel.insert(userData)
// Make sure this provides a meaningful string representation of userData
navigateToUserDetailsFragment(userData._id) navigateToUserDetailsFragment(userData._id)
} }
@@ -110,6 +131,7 @@ class AbhaRegistrationFragment : BaseFragment() {
state = obj.getString("state name") state = obj.getString("state name")
district = obj.getString("district_name") district = obj.getString("district_name")
house = obj.getString("address") house = obj.getString("address")
userAbhaRegistrationLog = obj.getString("userAbhaRegistrationLog")
} }
if (userData.abhaId.isNotEmpty()) { if (userData.abhaId.isNotEmpty()) {
@@ -134,7 +156,7 @@ class AbhaRegistrationFragment : BaseFragment() {
} catch (e: Exception) { } catch (e: Exception) {
Toast.makeText( Toast.makeText(
requireContext(), requireContext(),
R.string.invalid_qr_code, "The QR Code you have scanned is not valid, enter the data manually",
Toast.LENGTH_SHORT Toast.LENGTH_SHORT
).show() ).show()
} }
@@ -144,23 +166,23 @@ class AbhaRegistrationFragment : BaseFragment() {
private fun saveUserDataAsPerAbhaId() { private fun saveUserDataAsPerAbhaId() {
with(binding) { with(binding) {
tvScanMessage.visibility = View.VISIBLE tvScanMessage.visibility = View.VISIBLE
tvScanMessage.text = R.string.enter_aadhar_manually.toString() tvScanMessage.text = "You have scanned the Abha ID, need to enter Aadhar ID manually"
etAbhaId.setText(userData.abhaId) etAbhaId.setText(userData.abhaId)
etName.setText(userData.name) etName.setText(userData.name)
} }
Toast.makeText( Toast.makeText(
requireContext(), R.string.scanned_abha_id, Toast.LENGTH_SHORT requireContext(), "You have scanned the Abha ID", Toast.LENGTH_SHORT
).show() ).show()
} }
private fun saveUserDataAsPerAadharId() { private fun saveUserDataAsPerAadharId() {
with(binding) { with(binding) {
tvScanMessage.text = tvScanMessage.text =
R.string.scanned_aadhar_id.toString() "You have scanned the Aadhar ID, need to enter Aadhar ID number you have scan and Abha ID manually"
etName.setText(userData.name) etName.setText(userData.name)
} }
Toast.makeText( Toast.makeText(
requireContext(), R.string.scanned_aadharid, Toast.LENGTH_SHORT requireContext(), "You have scanned the Aadhar ID", Toast.LENGTH_SHORT
).show() ).show()
} }
@@ -169,19 +191,19 @@ class AbhaRegistrationFragment : BaseFragment() {
): Boolean { ): Boolean {
with(binding) { with(binding) {
if (!checkAbhaIDNumber(abhaId)) { if (!checkAbhaIDNumber(abhaId)) {
etAbhaId.error = R.string.invalid_abha_id.toString() etAbhaId.error = "Invalid Abha ID"
return false return false
} }
if (!checkAadharIDNumber(aadharId)) { if (!checkAadharIDNumber(aadharId)) {
aadharID.error = R.string.invalid_aadhar_id.toString() aadharID.error = "Invalid Aadhar ID"
return false return false
} }
if (!checkUserName(userName)) { if (!checkUserName(userName)) {
etName.error = R.string.name_field_error.toString() etName.error = "Name field can't be empty or less than 3 characters"
return false return false
} }
if (!checkCenterName(centerName)) { if (!checkCenterName(centerName)) {
etCenterName.error = R.string.center_name_error.toString() etCenterName.error = "Center name can't be empty or less than 3 characters"
return false return false
} }
} }

View File

@@ -4,6 +4,7 @@ import android.content.Context
import android.content.SharedPreferences import android.content.SharedPreferences
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
@@ -47,12 +48,15 @@ class ReviewDetailsRegistrationFragment : BaseFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
init() init()
} }
private fun init() { private fun init() {
viewModel.getUserByID(args.userId) viewModel.getUserByID(args.userId)
viewModel.userData.observe(viewLifecycleOwner) { user -> viewModel.userData.observe(viewLifecycleOwner) { user ->
userData = user userData = user
userData.userAbhaRegistrationLog = sharedPreference.getString("userAbhaRegistrationLog", "").toString()
userData.userDetailsLog = sharedPreference.getString("userDetailslog", "").toString()
setUserData(user) setUserData(user)
} }
@@ -67,7 +71,7 @@ class ReviewDetailsRegistrationFragment : BaseFragment() {
} else { } else {
Toast.makeText( Toast.makeText(
requireContext(), requireContext(),
R.string.internt_not_local, "Internet not available, Data stored in local DB",
Toast.LENGTH_SHORT Toast.LENGTH_SHORT
).show() ).show()
navigateToUserListFragment() navigateToUserListFragment()
@@ -86,7 +90,7 @@ class ReviewDetailsRegistrationFragment : BaseFragment() {
if (it == "Success") { if (it == "Success") {
Toast.makeText( Toast.makeText(
requireContext(), requireContext(),
R.string.registration_success, "Registration Done Successfully",
Toast.LENGTH_SHORT Toast.LENGTH_SHORT
).show() ).show()
navigateToUserListFragment() navigateToUserListFragment()
@@ -171,12 +175,17 @@ class ReviewDetailsRegistrationFragment : BaseFragment() {
) )
} }
val pInfo = requireActivity().packageManager.getPackageInfo( val pInfo = requireActivity().packageManager.getPackageInfo(
requireActivity().packageName, 0 requireActivity().packageName, 0
) )
val version = pInfo.versionName val version = pInfo.versionName
userData.appVersion = version userData.appVersion = version
userData.userAbhaRegistrationLog = "${userData.abhaId}," + "${userData.name}," +"${userData.aadharId}," + "${userData.registrationCenterName}"
userData.userAbhaRegistrationLog = sharedPreference.getString("userAbhaRegistrationLog", "").toString()
userData.userDetailsLog = sharedPreference.getString("userDetailslog", "").toString()
Log.e("userAbhaRegistrationLog",userData.userAbhaRegistrationLog)
Log.e("userAbhaRegistrationLog",userData.userDetailsLog)
} }
} }

View File

@@ -1,11 +1,14 @@
package com.example.hposregistration.ui.fragments.registration package com.example.hposregistration.ui.fragments.registration
import android.annotation.SuppressLint
import android.content.Context
import android.content.SharedPreferences
import android.os.Bundle import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.Toast import android.widget.Toast
import androidx.core.view.isVisible
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
@@ -13,7 +16,6 @@ import androidx.navigation.fragment.navArgs
import com.example.hposregistration.data.user.UserData import com.example.hposregistration.data.user.UserData
import com.example.hposregistration.ui.viewmodels.RegistrationViewModel import com.example.hposregistration.ui.viewmodels.RegistrationViewModel
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import `in`.sminnovations.hposregistration.R
import `in`.sminnovations.hposregistration.databinding.FragmentUserDetailsRegistrationBinding import `in`.sminnovations.hposregistration.databinding.FragmentUserDetailsRegistrationBinding
@@ -26,6 +28,7 @@ class UserDetailsRegistrationFragment : Fragment() {
private val viewModel by viewModels<RegistrationViewModel>() private val viewModel by viewModels<RegistrationViewModel>()
private lateinit var userData: UserData private lateinit var userData: UserData
private lateinit var sharedPreference: SharedPreferences
private val args: UserDetailsRegistrationFragmentArgs by navArgs() private val args: UserDetailsRegistrationFragmentArgs by navArgs()
@@ -33,6 +36,9 @@ class UserDetailsRegistrationFragment : Fragment() {
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View { ): View {
_binding = FragmentUserDetailsRegistrationBinding.inflate(inflater, container, false) _binding = FragmentUserDetailsRegistrationBinding.inflate(inflater, container, false)
sharedPreference =
requireContext().getSharedPreferences("PREFERENCE_NAME", Context.MODE_PRIVATE)
return binding.root return binding.root
} }
@@ -44,23 +50,6 @@ class UserDetailsRegistrationFragment : Fragment() {
private fun init() { private fun init() {
setupViewModel() setupViewModel()
setupSubmitButton() setupSubmitButton()
binding.etCategory.setOnItemClickListener { parent, view, position, id ->
if (parent.getItemAtPosition(position).toString().equals("OTHER", ignoreCase = true)) {
binding.tilOther.visibility = View.VISIBLE
} else {
binding.tilOther.visibility = View.GONE
}
}
binding.etCaste.setOnItemClickListener { parent, view, position, id ->
if (parent.getItemAtPosition(position).toString().equals("OTHER", ignoreCase = true)) {
binding.tilOthercaste.visibility = View.VISIBLE
} else {
binding.tilOthercaste.visibility = View.GONE
}
}
} }
private fun setupViewModel() { private fun setupViewModel() {
@@ -78,21 +67,20 @@ class UserDetailsRegistrationFragment : Fragment() {
when (it) { when (it) {
"Male" -> { "Male" -> {
male.isChecked = true male.isChecked = true
binding.tilOthergender.visibility = View.GONE
} }
"Female" -> { "Female" -> {
female.isChecked = true female.isChecked = true
binding.tilOthergender.visibility = View.GONE
} }
else -> { else -> {
other.isChecked = true other.isChecked = true
binding.tilOthergender.visibility = View.VISIBLE
} }
} }
} }
user.phoneNumber.let { etMobile.setText(it) } user.phoneNumber.let { etMobile.setText(it) }
user.careOf.let { etCareof.setText(it) } user.careOf.let { etCareof.setText(it) }
user.maritalStatus.let { etIsMarried.setText(it, false) } user.maritalStatus.let { etIsMarried.setText(it, false) }
user.caste.let { etCaste.setText(it, false) }
user.category.let { etCategory.setText(it, false) }
user.subCaste.let { etSubCaste.setText(it) } user.subCaste.let { etSubCaste.setText(it) }
user.house.let { etHouse.setText(it) } user.house.let { etHouse.setText(it) }
user.city.let { etCity.setText(it) } user.city.let { etCity.setText(it) }
@@ -114,13 +102,6 @@ class UserDetailsRegistrationFragment : Fragment() {
yes1history.isChecked = true yes1history.isChecked = true
} }
} }
user.category.let {
etCategory.setText(it, false)
}
user.caste.let {
etCaste.setText(it, false)
}
if (yes1history.isChecked) { if (yes1history.isChecked) {
if (binding.yes1history.isChecked) View.VISIBLE else View.GONE if (binding.yes1history.isChecked) View.VISIBLE else View.GONE
@@ -138,48 +119,46 @@ class UserDetailsRegistrationFragment : Fragment() {
binding.tilFamilyHistory.visibility = binding.tilFamilyHistory.visibility =
if (binding.no1history.isChecked) View.GONE else View.VISIBLE if (binding.no1history.isChecked) View.GONE else View.VISIBLE
} }
if(other.isChecked){
user.gender.let { etOthergender.setText(it) }
}
binding.male.setOnClickListener {
binding.tilOthergender.visibility = View.GONE
}
binding.female.setOnClickListener {
binding.tilOthergender.visibility = View.GONE
}
binding.other.setOnClickListener {
binding.tilOthergender.visibility = View.VISIBLE
}
if (binding.etCategory.text.toString().equals("OTHER", ignoreCase = true)) {
binding.tilOther.visibility = View.VISIBLE
binding.etOther.visibility = View.VISIBLE
} else {
binding.tilOther.visibility = View.GONE
}
if (binding.etCaste.text.toString().equals("OTHER", ignoreCase = true)) {
binding.tilOthercaste.visibility = View.VISIBLE
binding.etOthercaste.visibility = View.VISIBLE
} else {
binding.tilOthercaste.visibility = View.GONE
}
} }
} }
@SuppressLint("LogNotTimber")
private fun setupSubmitButton() { private fun setupSubmitButton() {
binding.btnSubmit.setOnClickListener { binding.btnSubmit.setOnClickListener {
if (verifyUserDetails()) { if (verifyUserDetails()) {
userData._id = args.userId userData._id = args.userId
viewModel.insert(userData) viewModel.insert(userData)
userData.userDetailsLog = "${userData.birthYear}," +
"${userData.gender}," +
"${userData.phoneNumber}," +
"${userData.careOf}," +
"${userData.maritalStatus}," +
"${userData.category}," +
"${userData.caste}," +
"${userData.subCaste ?: ""}," + // Using Elvis operator for nullable fields
"${userData.appVersion}," +
"${userData.house}," +
"${userData.city}," +
"${userData.district}," +
"${userData.state}," +
"${userData.pinCode}," +
"${userData.bloodGroup}," +
"${userData.isUnderMedication ?: false}," + // Converting null to false
"${userData.isUnderTransfusion ?: false}," +
"${userData.sickleCellHistory ?: ""}," +
"${userData.userImageURL}," +
"${userData.registeredBy ?: ""}," +
"${userData.createdAt ?: ""}," +
"${userData.registrationCenterName ?: ""}," +
"${userData.testStatus},"
val userDataString = userData.userDetailsLog// Make sure this provides a meaningful string representation of userData
sharedPreference.edit()
.putString("userDetailslog", userData.userDetailsLog)
.apply()
Log.e("userAbhaRegistrationLog",userData.userDetailsLog)
navigateToCaptureUserImageFragment() navigateToCaptureUserImageFragment()
} else { } else {
showToast(R.string.enter_details_properly.toString()) showToast("Please enter all the details properly")
} }
} }
} }
@@ -194,38 +173,23 @@ class UserDetailsRegistrationFragment : Fragment() {
with(binding) { with(binding) {
val yob = etYob.text.toString() val yob = etYob.text.toString()
if (yob.isEmpty() || yob.toInt() <= 1900 || yob.toInt() > 2023) { if (yob.isEmpty() || yob.toInt() <= 1900 || yob.toInt() > 2023) {
etYob.error = R.string.enter_valid_birth_year.toString() etYob.error = "Please enter a valid birth year between 1900 and 2023"
return false return false
} else { } else {
userData.birthYear = yob userData.birthYear = yob
} }
if (male.isChecked) { if (male.isChecked) {
binding.tilOthergender.visibility = View.GONE
userData.gender = "Male" userData.gender = "Male"
} else if (female.isChecked) { } else if (female.isChecked) {
binding.tilOthergender.visibility = View.GONE
userData.gender = "Female" userData.gender = "Female"
} else if(other.isChecked) { } else {
binding.tilOthergender.visibility = View.VISIBLE userData.gender = "Other"
val genderother= binding.etOthergender.text.toString()
userData.gender = genderother
if (genderother.isEmpty()) {
etOthergender.error = R.string.fill_field.toString()
return false
}
} }
val pInfo = requireActivity().packageManager.getPackageInfo(
requireActivity().packageName, 0
)
val version = pInfo.versionName
userData.appVersion = version
val mobile = etMobile.text.toString() val mobile = etMobile.text.toString()
if (mobile.isEmpty() || mobile.length != 10) { if (mobile.isEmpty() || mobile.length != 10) {
etMobile.error = R.string.valid_mobile_number.toString() etMobile.error = "Please enter a valid 10-digit mobile number"
return false return false
} else { } else {
userData.phoneNumber = mobile userData.phoneNumber = mobile
@@ -233,7 +197,7 @@ class UserDetailsRegistrationFragment : Fragment() {
val careOf = etCareof.text.toString() val careOf = etCareof.text.toString()
if (careOf.isEmpty()) { if (careOf.isEmpty()) {
etCareof.error = R.string.enter_father_husband_name.toString() etCareof.error = "Please enter your name"
return false return false
} else { } else {
userData.careOf = careOf userData.careOf = careOf
@@ -241,35 +205,28 @@ class UserDetailsRegistrationFragment : Fragment() {
val maritalStatus = etIsMarried.text.toString() val maritalStatus = etIsMarried.text.toString()
if (maritalStatus.isEmpty()) { if (maritalStatus.isEmpty()) {
etIsMarried.error = R.string.enter_marital_status.toString() etIsMarried.error = "Please enter your marital status"
return false return false
} else { } else {
userData.maritalStatus = maritalStatus userData.maritalStatus = maritalStatus
} }
val category = etCategory.text.toString() val category = etCategory.text.toString()
val other = etOther.text.toString()
if (category.isEmpty()) { if (category.isEmpty()) {
etCategory.error = R.string.enter_category.toString() etCategory.error = "Please enter your category"
return false return false
} else if (category == "OTHER" && tilOther.isVisible) {
userData.category = other
} else { } else {
userData.category = category userData.category = category
} }
val caste = etCaste.text.toString() val caste = etCaste.text.toString()
val othercaste = etOthercaste.text.toString()
if (caste.isEmpty()) { if (caste.isEmpty()) {
etCaste.error = R.string.enter_caste.toString() etCaste.error = "Please enter your caste"
return false return false
} else if (caste == "OTHER" && tilOthercaste.isVisible) {
userData.caste = othercaste
} else { } else {
userData.caste = caste userData.caste = caste
} }
val subCaste = etSubCaste.text.toString() val subCaste = etSubCaste.text.toString()
if (subCaste.isNotEmpty()) { if (subCaste.isNotEmpty()) {
userData.subCaste = subCaste userData.subCaste = subCaste
@@ -277,7 +234,7 @@ class UserDetailsRegistrationFragment : Fragment() {
val house = etHouse.text.toString() val house = etHouse.text.toString()
if (house.isEmpty()) { if (house.isEmpty()) {
etHouse.error = R.string.enter_house_address.toString() etHouse.error = "Please enter your house address"
return false return false
} else { } else {
userData.house = house userData.house = house
@@ -285,7 +242,7 @@ class UserDetailsRegistrationFragment : Fragment() {
val city = etCity.text.toString() val city = etCity.text.toString()
if (city.isEmpty()) { if (city.isEmpty()) {
etCity.error = R.string.enter_city.toString() etCity.error = "Please enter your city"
return false return false
} else { } else {
userData.city = city userData.city = city
@@ -293,7 +250,7 @@ class UserDetailsRegistrationFragment : Fragment() {
val district = etDistrict.text.toString() val district = etDistrict.text.toString()
if (district.isEmpty()) { if (district.isEmpty()) {
etDistrict.error = R.string.enter_district.toString() etDistrict.error = "Please enter your district"
return false return false
} else { } else {
userData.district = district userData.district = district
@@ -301,7 +258,7 @@ class UserDetailsRegistrationFragment : Fragment() {
val state = etState.text.toString() val state = etState.text.toString()
if (state.isEmpty()) { if (state.isEmpty()) {
etState.error = R.string.enter_state.toString() etState.error = "Please enter your state"
return false return false
} else { } else {
userData.state = state userData.state = state
@@ -309,7 +266,7 @@ class UserDetailsRegistrationFragment : Fragment() {
val pincode = etPincode.text.toString() val pincode = etPincode.text.toString()
if (pincode.isEmpty() || pincode.length != 6) { if (pincode.isEmpty() || pincode.length != 6) {
etPincode.error = R.string.enter_pincode.toString() etPincode.error = "Please enter a valid 6-digit pin code"
return false return false
} else { } else {
userData.pinCode = pincode userData.pinCode = pincode
@@ -322,7 +279,7 @@ class UserDetailsRegistrationFragment : Fragment() {
if (yes1history.isChecked) { if (yes1history.isChecked) {
val familyHistory = etFamilyHistory.text.toString() val familyHistory = etFamilyHistory.text.toString()
if (familyHistory.isEmpty()) { if (familyHistory.isEmpty()) {
etFamilyHistory.error = R.string.enter_family_history.toString() etFamilyHistory.error = "Please enter your family history"
return false return false
} }
@@ -335,8 +292,6 @@ class UserDetailsRegistrationFragment : Fragment() {
return true return true
} }
} }

View File

@@ -1,7 +1,9 @@
package com.example.hposregistration.ui.viewmodels package com.example.hposregistration.ui.viewmodels
import android.content.Context import android.content.Context
import android.content.SharedPreferences
import android.net.Uri import android.net.Uri
import androidx.core.content.ContentProviderCompat.requireContext
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
@@ -13,6 +15,10 @@ import com.example.hposregistration.data.user.UserData
import com.google.firebase.storage.FirebaseStorage import com.google.firebase.storage.FirebaseStorage
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import java.text.SimpleDateFormat
import java.util.Calendar
import java.util.Date
import java.util.Locale
import javax.inject.Inject import javax.inject.Inject
@HiltViewModel @HiltViewModel
@@ -26,8 +32,11 @@ class RegistrationViewModel @Inject constructor(
val allUserData = mainRepository.allUsers val allUserData = mainRepository.allUsers
val fireBaseUpload = MutableLiveData<String>() val fireBaseUpload = MutableLiveData<String>()
private val sharedPreference =
context.getSharedPreferences("PREFERENCE_NAME", Context.MODE_PRIVATE)
fun addUserToDatabase(userData: UserData) = viewModelScope.launch { fun addUserToDatabase(userData: UserData) = viewModelScope.launch {
userData.userAbhaRegistrationLog = sharedPreference.getString("userAbhaRegistrationLog", "").toString()
userData.userDetailsLog = sharedPreference.getString("userDetailslog", "").toString()
val file = Uri.parse(userData.userImageURL) val file = Uri.parse(userData.userImageURL)
val storageRef = FirebaseStorage.getInstance().reference val storageRef = FirebaseStorage.getInstance().reference
val imageRef = storageRef.child("${userData._id}/${file.lastPathSegment}") val imageRef = storageRef.child("${userData._id}/${file.lastPathSegment}")
@@ -62,7 +71,28 @@ class RegistrationViewModel @Inject constructor(
val networkStatusLiveData: LiveData<Boolean> val networkStatusLiveData: LiveData<Boolean>
get() = _networkStatusLiveData get() = _networkStatusLiveData
fun insert(userData: UserData) = viewModelScope.launch { fun insert(userData: UserData) = viewModelScope.launch {
val currentDate = Date()
val dateFormat = SimpleDateFormat("yyyyMMdd")
val partition = dateFormat.format(currentDate)
userData._idSearch = partition + userData._id
userData.abhaIdSearch = partition + userData.abhaId
userData.aadharIdSearch = partition + userData.aadharId
userData.createdAt = SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss", Locale.getDefault()
).format(Calendar.getInstance().time)
val useAbhaRegistrationLog = sharedPreference.getString("userAbhaRegistrationLog", "").toString()
val userDetailsLog = sharedPreference.getString("userDetailslog", "").toString()
userData.userAbhaRegistrationLog = sharedPreference.getString("userAbhaRegistrationLog", "").toString()
userData.userDetailsLog = sharedPreference.getString("userDetailslog", "").toString()
userData.userAbhaRegistrationLog= useAbhaRegistrationLog
userData.userDetailsLog = userDetailsLog
mainRepository.insert(userData) mainRepository.insert(userData)
} }

View File

@@ -138,7 +138,7 @@
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -63,6 +63,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="10dp" android:layout_marginStart="10dp"
android:checked="true"
android:text="@string/male" android:text="@string/male"
android:textSize="16sp" /> android:textSize="16sp" />
@@ -81,29 +82,6 @@
android:textSize="16sp" /> android:textSize="16sp" />
</RadioGroup> </RadioGroup>
<com.google.android.material.textfield.TextInputLayout
android:visibility="gone"
android:id="@+id/til_othergender"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:layout_marginTop="20dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/gender">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/et_othergender"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/other"
android:inputType="text"
android:maxLength="10" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
android:id="@+id/til_mobile" android:id="@+id/til_mobile"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox" style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
@@ -113,7 +91,7 @@
android:layout_marginTop="20dp" android:layout_marginTop="20dp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/til_othergender"> app:layout_constraintTop_toBottomOf="@id/gender">
<com.google.android.material.textfield.TextInputEditText <com.google.android.material.textfield.TextInputEditText
android:id="@+id/et_mobile" android:id="@+id/et_mobile"
@@ -182,32 +160,12 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:hint="@string/category" android:hint="@string/category"
android:inputType="text" android:inputType="none"
android:labelFor="@id/til_is_married" android:labelFor="@id/til_is_married"
app:simpleItems="@array/category" /> app:simpleItems="@array/category" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:visibility="gone"
android:id="@+id/til_other"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:layout_marginTop="20dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/til_category">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/et_other"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/other"
android:inputType="text"
android:maxLength="10" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
android:id="@+id/til_caste" android:id="@+id/til_caste"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu" style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu"
@@ -217,39 +175,19 @@
android:layout_marginTop="20dp" android:layout_marginTop="20dp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/til_other"> app:layout_constraintTop_toBottomOf="@id/til_category">
<AutoCompleteTextView <AutoCompleteTextView
android:id="@+id/et_Caste" android:id="@+id/et_Caste"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:hint="@string/caste" android:hint="@string/caste"
android:inputType="text" android:inputType="none"
android:labelFor="@id/til_is_married" android:labelFor="@id/til_is_married"
app:simpleItems="@array/caste" /> app:simpleItems="@array/caste" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:visibility="gone"
android:id="@+id/til_othercaste"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:layout_marginTop="20dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/til_caste">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/et_othercaste"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/other"
android:inputType="text"
android:maxLength="10" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
android:id="@+id/til_subCaste" android:id="@+id/til_subCaste"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox" style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
@@ -259,7 +197,7 @@
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/til_othercaste"> app:layout_constraintTop_toBottomOf="@id/til_caste">
<com.google.android.material.textfield.TextInputEditText <com.google.android.material.textfield.TextInputEditText
android:id="@+id/et_subCaste" android:id="@+id/et_subCaste"

View File

@@ -16,6 +16,20 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical"> android:orientation="vertical">
</LinearLayout> </LinearLayout>
<TextView
android:id="@+id/app_version"
style="@style/title2"
android:layout_width="57dp"
android:layout_height="15dp"
android:layout_marginTop="4dp"
android:gravity="center"
android:text="1.0.4"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.017"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView <TextView
android:id="@+id/tv_title" android:id="@+id/tv_title"
style="@style/title1" style="@style/title1"
@@ -26,6 +40,20 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/emptyRegistrations"
style="@style/title1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/empty_registrations"
android:textColor="@color/black"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView <TextView
android:id="@+id/noList" android:id="@+id/noList"
style="@style/title1" style="@style/title1"

View File

@@ -1,206 +0,0 @@
<resources>
<string name="app_name">HPOS रजिस्ट्रेशन</string>
<!-- TODO: Remove or change this placeholder text -->
<string name="hello_blank_fragment">नमस्ते खाली फ़्रेग्मेंट</string>
<!-- त्रुटि संदेश -->
<string name="retry">पुनः प्रयास करें</string>
<string name="failed_to_connect">कनेक्ट करने में विफल</string>
<string name="cancel">रद्द करें</string>
<!-- पंजीकरण स्क्रीनें -->
<string name="scan_person_abha_id_card">व्यक्ति का ABHA ID/Aadhar ID कार्ड स्कैन करें</string>
<string name="scan_now">अब स्कैन करें</string>
<string name="or">या</string>
<string name="enter_abha_number_manualy">ABHA और Aadhar नंबर दर्ज करें</string>
<string name="abha_id">ABHA नंबर</string>
<string name="create_abha_id_card">ABHA ID कार्ड बनाएं</string>
<string name="click_here">यहां क्लिक करें</string>
<string name="scan_person_s_aadhaar_card">व्यक्ति का Aadhaar कार्ड स्कैन करें</string>
<string name="proceed">आगे बढ़ें</string>
<string name="enter_aadhaar_number_manualy">Aadhaar नंबर मैन्युअली दर्ज करें</string>
<string name="aadhaar_number">Aadhaar नंबर</string>
<string name="enter_person_s_details">व्यक्ति का विवरण दर्ज करें</string>
<string name="person_s_name">व्यक्ति का नाम</string>
<string name="age">आयु (वर्षों में)</string>
<string name="gender">लिंग चयन करें</string>
<string name="name_error">नाम खाली नहीं हो सकता</string>
<string name="age_error">आयु खाली नहीं हो सकती</string>
<string name="gender_error">लिंग खाली नहीं हो सकता</string>
<string name="age_error_out_of_bound">आयु मान्य होनी चाहिए</string>
<string name="birth_year">जन्म साल</string>
<string name="marital_status">वैवाहिक स्थिति चयन करें</string>
<string name="father_s_husband_s_name">पिता/पति का नाम</string>
<string name="caste">जाति</string>
<string name="person_s_address_details">व्यक्ति का पता विवरण</string>
<string name="district">जिला</string>
<string name="city_town">शहर / गाँव</string>
<string name="state">राज्य</string>
<string name="pincode">पिनकोड</string>
<string name="patient_medical_records">रोगी का चिकित्सा रेकॉर्ड</string>
<string name="review">समीक्षा</string>
<string name="blood_group">रक्त समूह चयन करें</string>
<string name="house">घर</string>
<string name="is_patient_under_any_medication">क्या आप पिछले तीन महीनों से सिक्ल सेल के लिए दवा ले रहे हैं?</string>
<string name="is_patient_undergoing_any_blood_transfusion">क्या आपने पिछले तीन महीनों में कोई रक्त प्रवाहन किया है?</string>
<string name="user_list">उपयोगकर्ता सूची</string>
<string name="register_user">उपयोगकर्ता पंजीकृत करें</string>
<string name="is_user_having_any_family_history_for_sickle_cell">क्या उपयोगकर्ता के पास सिक्ल सेल के लिए कोई परिवार का इतिहास है?</string>
<string name="family_history_of_sickle_cell">सिक्ल सेल का परिवारिक इतिहास</string>
<string name="mobile_number_10_digits">मोबाइल नंबर (10 अंक)</string>
<string name="sub_caste">उपजाति</string>
<string name="capture_user_image">उपयोगकर्ता की छवि कैद करें</string>
<string name="mobile_number">मोबाइल नंबर</string>
<string name="edit">संपादित करें</string>
<string name="user_details">उपयोगकर्ता विवरण</string>
<string name="internet_is_not_available_and_there_is_no_data_available_in_local_db">इंटरनेट उपलब्ध नहीं है और स्थानीय डेटाबेस में कोई डेटा उपलब्ध नहीं है</string>
<string name="user_id">उपयोगकर्ता आईडी: %1$s</string>
<string name="abha_number">ABHA नंबर: %1$s</string>
<string name="aadhar_number_details">Aadhar नंबर: %1$s</string>
<string name="user_name">व्यक्ति का नाम: %1$s</string>
<string name="birth_year_details">जन्म साल: %1$s</string>
<string name="gender_details">लिंग: %1$s</string>
<string name="phone_number_details">मोबाइल नंबर: %1$s</string>
<string name="care_of_details">पिता/पति का नाम: %1$s</string>
<string name="marital_status_details">वैवाहिक स्थिति: %1$s</string>
<string name="category_details">श्रेणी: %1$s</string>
<string name="caste_details">जाति: %1$s</string>
<string name="sub_caste_details">उपजाति: %1$s</string>
<string name="house_details">घर: %1$s</string>
<string name="city_town_details">शहर/गाँव: %1$s</string>
<string name="district_details">जिला: %1$s</string>
<string name="state_details">राज्य: %1$s</string>
<string name="centre_name">केंद्र का नाम: %1$s</string>
<string name="pincode_details">पिनकोड: %1$s</string>
<string name="is_patient_under_any_medication_details">क्या दवा ले रहे हैं: %1$s</string>
<string name="is_patient_undergoing_any_blood_transfusion_details">क्या रक्त प्रवाहन हो रहा है: %1$s</string>
<string name="is_any_sickle">क्या कोई सिक्ल सेल इतिहास है: %1$s</string>
<string name="sickle_cell_family_history">सिक्ल सेल परिवारिक इतिहास: %1$s</string>
<string name="center_name">केंद्र का नाम</string>
<string name="login_id">लॉगिन आईडी</string>
<string name="password">पासवर्ड</string>
<string name="login">लॉगिन</string>
<string name="_2">श्रेणी</string>
<string name="category">श्रेणी</string>
<string name="male">पुरुष</string>
<string name="female">महिला</string>
<string name="other">अन्य</string>
<string name="cancelled_unable_scan">रद्द किया गया: स्कैन करने में असमर्थ, पुनः प्रयास करें!!</string>
<string name="scan_abha_card">कृपया एबीए आईडी / आधार आईडी स्कैन करें</string>
<string name="invalid_qr_code">आपने स्कैन किया हुआ QR कोड अमान्य है, कृपया डेटा मैन्युअली दर्ज करें</string>
<string name="enter_aadhar_manually">आपने एबीए आईडी स्कैन किया है, आधार आईडी को मैन्युअली दर्ज करने की आवश्यकता है</string>
<string name="invalid_abha_id">अमान्य एबीए आईडी</string>
<string name="invalid_aadhar_id">अमान्य आधार आईडी</string>
<string name="name_field_error">नाम फील्ड खाली नहीं हो सकती या 3 अक्षरों से कम होनी चाहिए</string>
<string name="center_name_error">केंद्र का नाम खाली नहीं हो सकता या 3 अक्षरों से कम होना चाहिए</string>
<string name="registration_success">पंजीकरण सफलतापूर्वक हुआ</string>
<string name="internt_not_local">इंटरनेट उपलब्ध नहीं है, परीक्षण विवरण स्थानीय रूप से संग्रहित किए गए हैं</string>
<string name="enter_details_properly">कृपया सभी विवरणों को ठीक से दर्ज करें</string>
<string name="enter_valid_birth_year">कृपया 1900 से 2023 के बीच एक मान्य जन्म वर्ष दर्ज करें</string>
<string name="fill_field">कृपया फ़ील्ड भरें</string>
<string name="valid_mobile_number">कृपया एक मान्य 10-अंकों का मोबाइल नंबर दर्ज करें</string>
<string name="enter_name">कृपया अपना नाम दर्ज करें</string>
<string name="enter_marital_status">कृपया अपनी वैवाहिक स्थिति दर्ज करें</string>
<string name="enter_category">कृपया अपनी श्रेणी दर्ज करें</string>
<string name="enter_caste">कृपया अपनी जाति दर्ज करें</string>
<string name="enter_house_address">कृपया अपना घर का पता दर्ज करें</string>
<string name="enter_city">कृपया अपने शहर को दर्ज करें</string>
<string name="enter_district">कृपया अपने जिले को दर्ज करें</string>
<string name="enter_state">कृपया अपने राज्य को दर्ज करें</string>
<string name="enter_pincode">कृपया एक मान्य 6-अंकों कोड दर्ज करें</string>
<string name="enter_family_history">कृपया अपना परिवार का इतिहास दर्ज करें</string>
<string name="enter_guardian_name">कृपया अपने पालक का नाम दर्ज करें</string>
<string name="enter_father_husband_name">पिता / पति का नाम दर्ज करें</string>
<string name="do_log_out">क्या आप ऐप्लिकेशन से लॉग आउट करना चाहते हैं?</string>
<string name="log_out">लॉग आउट</string>
<string name="upload_db_registration">डीबी पंजीकरण अपलोड करें</string>
<string name="upload_local_db_to_cloud">क्या आप स्थानीय डीबी को क्लाउड पर अपलोड करना चाहते हैं?</string>
<string name="upload">अपलोड</string>
<string name="upload_done_successfully">अपलोड सफलतापूर्वक हुआ</string>
<string name="enter_proper_login_id">कृपया सही लॉगिन आईडी दर्ज करें</string>
<string name="enter_proper_password">कृपया सही पासवर्ड दर्ज करें</string>
<string name="wrong_password">गलत पासवर्ड</string>
<string name="wrong_user_id">गलत उपयोगकर्ता आईडी</string>
<string name="scanned_aadhar_id">आपने आधार आईडी स्कैन की है, कृपया आधार आईडी नंबर और अभा आईडी को मैन्युअली दर्ज करें</string>
<string name="scanned_abha_id">आपने आभा आईडी स्कैन की है</string>
<string name="scanned_aadharid">आपने आधार आईडी स्कैन की है</string>
<string-array name="category">
<item>NT-A</item>
<item>NT-B</item>
<item>NT-C</item>
<item>NT-D</item>
<item>OBC</item>
<item>OPEN</item>
<item>OTHER</item>
<item>SBC</item>
<item>SC</item>
<item>ST</item>
</string-array>
<string-array name="caste">
<item>अहीर</item>
<item>बराई</item>
<item>ब्राह्मण</item>
<item>बौद्ध</item>
<item>चांब़चार</item>
<item>चामार</item>
<item>देवांगन</item>
<item>धीवर</item>
<item>फुलमाली</item>
<item>गोंड</item>
<item>जैन</item>
<item>कोली</item>
<item>कोष्टी</item>
<item>कुंभार</item>
<item>कुंबी</item>
<item>लोहार</item>
<item>माळी</item>
<item>माणा</item>
<item>महार</item>
<item>मौर्या</item>
<item>मुसलमान</item>
<item>नवी</item>
<item>अन्य</item>
<item>पवार</item>
<item>परदेसी</item>
<item>शाहू</item>
<item>सोनार</item>
<item>तेली</item>
</string-array>
<string-array name="marital_status">
<item>विवाहित</item>
<item>एकत्र</item>
<item>तलाकशुदा</item>
</string-array>
<string-array name="blood_group">
<item>O+ve</item>
<item>O-ve</item>
<item>A+ve</item>
<item>A-ve</item>
<item>B+ve</item>
<item>B-ve</item>
<item>AB+ve</item>
<item>AB-ve</item>
</string-array>
<string-array name="gender">
<item>पुरुष</item>
<item>महिला</item>
<item>अन्य</item>
</string-array>
<string-array name="yes_no">
<item>हाँ</item>
<item>नहीं</item>
</string-array>
</resources>

View File

@@ -1,211 +0,0 @@
<resources>
<string name="app_name">HPOS ನೋಂದಾಯಿಸಲು</string>
<string name="hello_blank_fragment">ಹಲೋ ಖಾಲಿ ಫ್ರ್ಯಾಗ್ಮೆಂಟ್</string>
// ದೋಷ ಸಂದೇಶಗಳು
<string name="retry">ಮರುಪ್ರಯಾಸ</string>
<string name="failed_to_connect">ಸಂಪರ್ಕ ಸಾಧಿಸಲಾಗಿಲ್ಲ</string>
<string name="cancel">ರದ್ದು ಮಾಡಿ</string>
//Registration Screens
<string name="scan_person_abha_id_card">ವ್ಯಕ್ತಿಯ ಏಬಿಎ ಐಡಿ / ಆಧಾರ್ ಐಡಿ ಕಾರ್ಡ್ ಸ್ಕ್ಯಾನ್ ಮಾಡಿ</string>
<string name="scan_now">ಈಗ ಸ್ಕ್ಯಾನ್ ಮಾಡಿ</string>
<string name="or">ಅಥವಾ</string>
<string name="enter_abha_number_manualy">ಏಬಿಎ ಮತ್ತು ಆಧಾರ್ ಸಂಖ್ಯೆಗಳನ್ನು ಕೈಮಾಡಿ</string>
<string name="abha_id">ಏಬಿಎ ಸಂಖ್ಯೆ</string>
<string name="create_abha_id_card">ಏಬಿಎ ಐಡಿ ಕಾರ್ಡ್ ರಚಿಸಿ</string>
<string name="click_here">ಇಲ್ಲಿ ಕ್ಲಿಕ್ ಮಾಡಿ</string>
<string name="scan_person_s_aadhaar_card">ವ್ಯಕ್ತಿಯ ಆಧಾರ್ ಕಾರ್ಡ್ ಸ್ಕ್ಯಾನ್ ಮಾಡಿ</string>
<string name="proceed">ಮುಂದುವರಿಸಿ</string>
<string name="enter_aadhaar_number_manualy">ಆಧಾರ್ ಸಂಖ್ಯೆಯನ್ನು ಕೈಮಾಡಿ</string>
<string name="aadhaar_number">ಆಧಾರ್ ಸಂಖ್ಯೆ</string>
<string name="enter_person_s_details">ವ್ಯಕ್ತಿಯ ವಿವರಗಳನ್ನು ನಮೂದಿಸಿ</string>
<string name="person_s_name">ವ್ಯಕ್ತಿಯ ಹೆಸರು</string>
<string name="age">ವಯಸ್ಸು ವರ್ಷಗಳಲ್ಲಿ</string>
<string name="gender">ಲಿಂಗ ಆಯ್ಕೆ ಮಾಡಿ</string>
<string name="name_error">ಹೆಸರು ಖಾಲಿ ಇರಬಾರದು</string>
<string name="age_error">ವಯಸ್ಸು ಖಾಲಿ ಇರಬಾರದು</string>
<string name="gender_error">ಲಿಂಗ ಖಾಲಿ ಇರಬಾರದು</string>
<string name="age_error_out_of_bound">ವಯಸ್ಸು ಯೋಗ್ಯವಾಗಿರಬೇಕು</string>
<string name="birth_year">ಹುಟ್ಟಿದ ವರ್ಷ</string>
<string name="marital_status">ವೈವಾಹಿಕ ಸ್ಥಿತಿ ಆಯ್ಕೆ ಮಾಡಿ</string>
<string name="father_s_husband_s_name">ತಂದೆಯ / ಗಂಡನ ಹೆಸರು</string>
<string name="caste">ಜಾತಿ</string>
<string name="person_s_address_details">ವ್ಯಕ್ತಿಯ ವಿಳಾಸ ವಿವರಗಳು</string>
<string name="district">ಜಿಲ್ಲೆ</string>
<string name="city_town">ನಗರ / ಹಳ್ಳಿ</string>
<string name="state">ರಾಜ್ಯ</string>
<string name="pincode">ಪಿನ್‌ಕೋಡ್</string>
<string name="patient_medical_records">ರೋಗಿಯ ವೈದ್ಯಕೀಯ ದಾಖಲೆಗಳು</string>
<string name="review">ಸಮೀಕ್ಷಿಸಿ</string>
<string name="blood_group">ರಕ್ತ ಗುಂಪು ಆಯ್ಕೆ ಮಾಡಿ</string>
<string name="house">ಮನೆ</string>
<string name="is_patient_under_any_medication">ಹಳೆಯ ಮೂಲಕ ಸಿಕ್ಕಲ್ ಸೆಲ್ ಗೆ ನೀವು ಔಷಧಿಗೆ ಒಳಪಟ್ಟಿದ್ದೀರಾ?</string>
<string name="is_patient_undergoing_any_blood_transfusion">ಹಳೆಯ ಮೂಲಕ ರಕ್ತ ಸಂಚಾರ ನಡೆಸಲಾಗಿದೆಯೇ?</string>
<string name="user_list">ಬಳಕೆದಾರ ಪಟ್ಟಿ</string>
<string name="register_user">ಬಳಕೆದಾರ ನೋಂದಣಿ</string>
<string name="is_user_having_any_family_history_for_sickle_cell">ಬಳಕೆದಾರನಿಗೆ ಸಿಕ್ಕಲ್ ಸೆಲ್ ಕುಟುಂಬ ಇತಿಹಾಸವಿದೆಯೇ</string>
<string name="family_history_of_sickle_cell">ಸಿಕ್ಕಲ್ ಸೆಲ್ ಕುಟುಂಬ ಇತಿಹಾಸ</string>
<string name="mobile_number_10_digits">ಮೊಬೈಲ್ ಸಂಖ್ಯೆ (10 ಅಂಕಗಳು)</string>
<string name="sub_caste">ಉಪ ಜಾತಿ</string>
<string name="capture_user_image">ಬಳಕೆದಾರ ಚಿತ್ರ ಹಿಡಿಯಿರಿ</string>
<string name="mobile_number">ಮೊಬೈಲ್ ಸಂಖ್ಯೆ</string>
<string name="edit">ಸಂಪಾದಿಸಿ</string>
<string name="user_details">ಬಳಕೆದಾರ ವಿವರಗಳು</string>
<string name="internet_is_not_available_and_there_is_no_data_available_in_local_db">ಇಂಟರ್ನೆಟ್ ಲಭ್ಯವಿಲ್ಲ ಮತ್ತು ಸ್ಥಳಿಯ ಡಿಬಿಯಲ್ಲಿ ಯಾವುದೇ ಡೇಟಾ ಲಭ್ಯವಿಲ್ಲ</string>
<string name="user_id">ಬಳಕೆದಾರ ಐಡಿ: %1$s</string>
<string name="abha_number">ಆಭಾ ಸಂಖ್ಯೆ: %1$s</string>
<string name="aadhar_number_details">ಆಧಾರ ಸಂಖ್ಯೆ: %1$s</string>
<string name="user_name">ವ್ಯಕ್ತಿಯ ಹೆಸರು: %1$s</string>
<string name="birth_year_details">ಹುಟ್ಟಿದ ವರ್ಷ: %1$s</string>
<string name="gender_details">ಲಿಂಗ: %1$s</string>
<string name="phone_number_details">ಮೊಬೈಲ್ ಸಂಖ್ಯೆ: %1$s</string>
<string name="care_of_details">ತಂದೆಯ / ಗಂಡನ ಹೆಸರು: %1$s</string>
<string name="marital_status_details">ವೈವಾಹಿಕ ಸ್ಥಿತಿ: %1$s</string>
<string name="category_details">ವರ್ಗ: %1$s</string>
<string name="caste_details">ಜಾತಿ: %1$s</string>
<string name="sub_caste_details">ಉಪ ಜಾತಿ: %1$s</string>
<string name="house_details">ಮನೆ: %1$s</string>
<string name="city_town_details">ನಗರ / ಹಳ್ಳಿ: %1$s</string>
<string name="district_details">ಜಿಲ್ಲೆ: %1$s</string>
<string name="state_details">ರಾಜ್ಯ: %1$s</string>
<string name="centre_name">ಕೇಂದ್ರ ಹೆಸರು: %1$s</string>
<string name="pincode_details">ಪಿನ್‌ಕೋಡ್: %1$s</string>
<string name="is_patient_under_any_medication_details">ಔಷಧಿಗಳ ಕೆಳಗೆ ಇದ್ದಾರೆ: %1$s</string>
<string name="is_patient_undergoing_any_blood_transfusion_details">ರಕ್ತ ಸಂರಚನೆಯಲ್ಲಿ ಇದ್ದಾರೆ: %1$s</string>
<string name="is_any_sickle">ಯಾವುದೇ ಸಿಕ್ಕಲ್ ಸೆಲ್ ಇತಿಹಾಸವಿದೆಯೇ: %1$s</string>
<string name="sickle_cell_family_history">ಸಿಕ್ಕಲ್ ಸೆಲ್ ಕುಟುಂಬ ಇತಿಹಾಸ: %1$s</string>
<string name="center_name">ಕೇಂದ್ರ ಹೆಸರು</string>
<string name="login_id">ಲಾಗಿನ್ ಐಡಿ</string>
<string name="password">ಪಾಸ್‌ವರ್ಡ್</string>
<string name="login">ಲಾಗಿನ್</string>
<string name="_2">ವರ್ಗ</string>
<string name="category">ವರ್ಗ</string>
<string name="male">ಗಂಡು</string>
<string name="female">ಹೆಣ್ಣು</string>
<string name="other">ಇತರ</string>
<string name="cancelled_unable_scan">ರದ್ದು ಮಾಡಲಾಗಿದೆ: ಸ್ಕ್ಯಾನ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ, ಮತ್ತೊಮ್ಮೆ ಪ್ರಯಾಸಿಸಿ!!</string>
<string name="scan_abha_card">ದಯವಿಟ್ಟು ಆಭಾ ಐಡಿ / ಆಧಾರ್ ಐಡಿ ಸ್ಕ್ಯಾನ್ ಮಾಡಿ</string>
<string name="invalid_qr_code">ನೀವು ಸ್ಕ್ಯಾನ್ ಮಾಡಿದ QR ಕೋಡ್ ಮಾನ್ಯವಿಲ್ಲ, ದಯವಿಟ್ಟು ಮಾಹಿತಿಯನ್ನು ಕೈಮಾಡಿ ನಮೂದಿಸಿ</string>
<string name="enter_aadhar_manually">ನೀವು ಅಬ ಹಾ ಐಡಿ ಸ್ಕ್ಯಾನ್ ಮಾಡಿದ್ದೀರಿ, ಆಧಾರ್ ಐಡಿ ಅನ್ನು ಕೈಮಾತ್ರ ನಮೂದಿಸಿ</string>
<string name="invalid_abha_id">ಅಮಾನ್ಯವಾದ ಅಬ ಹಾ ಐಡಿ</string>
<string name="invalid_aadhar_id">ಅಮಾನ್ಯವಾದ ಆಧಾರ್ ಐಡಿ</string>
<string name="name_field_error">ಹೆಸರು ಕ್ಷೇತ್ರವು ಖಾಲಿ ಇರಲಾರದು ಅಥವಾ 3 ಅಕ್ಷರಗಳಿಂದ ಕಡಿಮೆ ಇರಲಾರದು</string>
<string name="center_name_error">ಕೇಂದ್ರದ ಹೆಸರು ಖಾಲಿ ಇರಲಾರದು ಅಥವಾ 3 ಅಕ್ಷರಗಳಿಂದ ಕಡಿಮೆ ಇರಲಾರದು</string>
<string name="registration_success">ಯಶಸ್ವಿಯಾಗಿ ನೋಂದಾಯಿಸಲಾಗಿದೆ</string>
<string name="internt_not_local">ಇಂಟರ್ನೆಟ್ ಲಭ್ಯವಿಲ್ಲ, ಪರೀಕ್ಷೆ ವಿವರಗಳನ್ನು ಸ್ಥಾನಿಕವಾಗಿ ಉಳಿಸಲಾಗಿದೆ</string>
<string name="enter_details_properly">ದಯವಿಟ್ಟು ಎಲ್ಲಾ ವಿವರಗಳನ್ನು ಸರಿಯಾಗಿ ನಮೂದಿಸಿ</string>
<string name="enter_valid_birth_year">ದಯವಿಟ್ಟು 1900 ಮತ್ತು 2023 ನ ನಡುವೆ ಒಂದು ವಾಸಿಸುವ ತಾರೀಖು ನಮೂದಿಸಿ</string>
<string name="fill_field">ದಯವಿಟ್ಟು ಕ್ಷೇತ್ರವನ್ನು ನಿರೂಪಿಸಿ</string>
<string name="valid_mobile_number">ದಯವಿಟ್ಟು ಒಂದು ಮಾನ್ಯವಾದ 10 ಅಂಕದ ಮೊಬೈಲ್ ಸಂಖ್ಯೆಯನ್ನು ನಮೂದಿಸಿ</string>
<string name="enter_name">ದಯವಿಟ್ಟು ನಿಮ್ಮ ಹೆಸರನ್ನು ನಮೂದಿಸಿ</string>
<string name="enter_marital_status">ದಯವಿಟ್ಟು ನಿಮ್ಮ ವೈವಾಹಿಕ ಸ್ಥಿತಿಯನ್ನು ನಮೂದಿಸಿ</string>
<string name="enter_category">ದಯವಿಟ್ಟು ನಿಮ್ಮ ವರ್ಗವನ್ನು ನಮೂದಿಸಿ</string>
<string name="enter_caste">ದಯವಿಟ್ಟು ನಿಮ್ಮ ಜಾತಿಯನ್ನು ನಮೂದಿಸಿ</string>
<string name="enter_house_address">ದಯವಿಟ್ಟು ನಿಮ್ಮ ಮನೆಯ ವಿಳಾಸವನ್ನು ನಮೂದಿಸಿ</string>
<string name="enter_city">ದಯವಿಟ್ಟು ನಿಮ್ಮ ನಗರವನ್ನು ನಮೂದಿಸಿ</string>
<string name="enter_district">ದಯವಿಟ್ಟು ನಿಮ್ಮ ಜಿಲ್ಲೆಯನ್ನು ನಮೂದಿಸಿ</string>
<string name="enter_state">ದಯವಿಟ್ಟು ನಿಮ್ಮ ರಾಜ್ಯವನ್ನು ನಮೂದಿಸಿ</string>
<string name="enter_pincode">ದಯವಿಟ್ಟು ಒಂದು ಮಾನ್ಯ ಆರು-ಅಂಕ ಪಿನ್‌ಕೋಡ್ ನಮೂದಿಸಿ</string>
<string name="enter_family_history">ದಯವಿಟ್ಟು ನಿಮ್ಮ ಕುಟುಂಬದ ಇತಿಹಾಸವನ್ನು ನಮೂದಿಸಿ</string>
<string name="enter_guardian_name">ದಯವಿಟ್ಟು ನಿಮ್ಮ ಅಭಿಭಾವಕರ ಹೆಸರನ್ನು ನಮೂದಿಸಿ</string>
<string name="enter_father_husband_name">ದಯವಿಟ್ಟು ನಿಮ್ಮ ತಂದೆ / ಗಂಡನ ಹೆಸರನ್ನು ನಮೂದಿಸಿ</string>
<string name="do_log_out">ನೀವು ಅಪ್ಲಿಕೇಶನ್ ನಿಂದ ಲಾಗೌಟ್ ಮಾಡಲು ಇಚ್ಛಿಸುತ್ತೀರಾ?</string>
<string name="log_out">ಲಾಗೌಟ್</string>
<string name="upload_db_registration">ಡಿಬಿ ನೋಂದಾಯಿಸುವ ಕೊರಕು</string>
<string name="upload_local_db_to_cloud">ನೀವು ಲೋಕಲ್ ಡಿಬಿ ನೋಂದಾಯಿಸನ್ನು ಮೇಘಮಾರ್ಗಕ್ಕೆ ಅಪ್ಲೋಡ್ ಮಾಡಲು ಇಚ್ಛಿಸುವಿರಾ?</string>
<string name="upload">ಅಪ್ಲೋಡ್</string>
<string name="upload_done_successfully">ಅಪ್ಲೋಡ್ ಯಶಸ್ವಿಯಾಗಿ ನಡೆಯಿತು</string>
<string name="enter_proper_login_id">ದಯವಿಟ್ಟು ಸರಿಯಾದ ಲಾಗಿನ್ ಐಡಿ ನಮೂದಿಸಿ</string>
<string name="enter_proper_password">ದಯವಿಟ್ಟು ಸರಿಯಾದ ಪಾಸ್‌ವರ್ಡ್ ನಮೂದಿಸಿ</string>
<string name="wrong_password">ತಪ್ಪಾದ ಪಾಸ್‌ವರ್ಡ್</string>
<string name="wrong_user_id">ತಪ್ಪಾದ ಬಳಕೆದಾರ ಐಡಿ</string>
<string name="scanned_aadhar_id">ನೀವು ಆಧಾರ್ ಐಡನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡಿದ್ದೀರಿ, ದಯವಿಟ್ಟು ಆಧಾರ್ ಐಡನ್ನು ನೀವು ಸ್ಕ್ಯಾನ್ ಮಾಡಿದ ಮತ್ತು ಅಭಾ ಐಡನ್ನು ಕೈಯಾರೆ ನಮೂದಿಸಿ</string>
<string name="scanned_abha_id">ನೀವು ಅಭಾ ಐಡನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡಿದಿರಿ</string>
<string name="scanned_aadharid">ನೀವು ಆಧಾರ್ ಐಡನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡಿದಿರಿ</string>
<string-array name="yes_no">
<item>ಹೌದು</item>
<item>ಇಲ್ಲ</item>
</string-array>
<string-array name="category">
<item>NT-A</item>
<item>NT-B</item>
<item>NT-C</item>
<item>NT-D</item>
<item>OBC</item>
<item>OPEN</item>
<item>OTHER</item>
<item>SBC</item>
<item>SC</item>
<item>ST</item>
</string-array>
<string-array name="caste">
<item>ಅಹೀರ್</item>
<item>ಬರಾಯಿ</item>
<item>ಬ್ರಾಹ್ಮಣ</item>
<item>ಬೌದ್ಧ</item>
<item>ಚಾಂಭಾರ್</item>
<item>ಚಾಮಾರ್</item>
<item>ದೇವಾಂಗನ್</item>
<item>ಧಿವರ್</item>
<item>ಫುಲ್ಮಾಲಿ</item>
<item>ಗೊಂಡ್</item>
<item>ಜೈನ್</item>
<item>ಕೊಲಿ</item>
<item>ಕೊಶ್ತಿ</item>
<item>ಕುಂಭಾರ</item>
<item>ಕುಂಬಿ</item>
<item>ಲೊಹರ್</item>
<item>ಮಾಳಿ</item>
<item>ಮಣ್ಣ</item>
<item>ಮಹಾರ್</item>
<item>ಮೌರ್ಯ</item>
<item>ಮಸ್ಲಿಮ್</item>
<item>ನಾವಿ</item>
<item>ಇತರ</item>
<item>ಪವಾರ್</item>
<item>ಪರ್ದೇಶಿ</item>
<item>ಶಾಹು</item>
<item>ಸೋನಾರ್</item>
<item>ತೆಲಿ</item>
</string-array>
<string-array name="marital_status">
<item>ವಿವಾಹಿತ</item>
<item>ಅವಿವಾಹಿತ</item>
<item>ವಿವಾಹ ವಿಚ್ಛೇದ</item>
</string-array>
<string-array name="blood_group">
<item>O+ve</item>
<item>O-ve</item>
<item>A+ve</item>
<item>A-ve</item>
<item>B+ve</item>
<item>B-ve</item>
<item>AB+ve</item>
<item>AB-ve</item>
</string-array>
<string-array name="gender">
<item>ಗಂಡು</item>
<item>ಹೆಣ್ಣು</item>
<item>ಇತರ</item>
</string-array>
</resources>

View File

@@ -8,11 +8,6 @@
<string name="failed_to_connect">Failed to connect</string> <string name="failed_to_connect">Failed to connect</string>
<string name="cancel">Cancel</string> <string name="cancel">Cancel</string>
<string-array name="yes_no">
<item>Yes</item>
<item>No</item>
</string-array>
//Registration Screens //Registration Screens
<string name="scan_person_abha_id_card">Scan Person ABHA ID/Aadhar ID Card</string> <string name="scan_person_abha_id_card">Scan Person ABHA ID/Aadhar ID Card</string>
<string name="scan_now">Scan Now</string> <string name="scan_now">Scan Now</string>
@@ -60,6 +55,7 @@
<string name="edit">Edit</string> <string name="edit">Edit</string>
<string name="user_details">User Details</string> <string name="user_details">User Details</string>
<string name="internet_is_not_available_and_there_is_no_data_available_in_local_db">Internet is not available and there is no Data available in Local DB</string> <string name="internet_is_not_available_and_there_is_no_data_available_in_local_db">Internet is not available and there is no Data available in Local DB</string>
<string name="empty_registrations">No registrations are available for display</string>
<string name="user_id">User ID: %1$s</string> <string name="user_id">User ID: %1$s</string>
<string name="abha_number">Abha Number: %1$s</string> <string name="abha_number">Abha Number: %1$s</string>
<string name="aadhar_number_details">Aadhar Number: %1$s</string> <string name="aadhar_number_details">Aadhar Number: %1$s</string>
@@ -93,47 +89,6 @@
<string name="female">Female</string> <string name="female">Female</string>
<string name="other">Other</string> <string name="other">Other</string>
<string name="cancelled_unable_scan">Cancelled: Unable to scan, Try Again!!</string>
<string name="scan_abha_card">Please Scan the Abha ID/Aadhar ID</string>
<string name="invalid_qr_code">The QR Code you have scanned is not valid, enter the data manually</string>
<string name="enter_aadhar_manually">You have scanned the Abha ID, need to enter Aadhar ID manually</string>
<string name="invalid_abha_id">Invalid Abha ID</string>
<string name="invalid_aadhar_id">Invalid Aadhar ID</string>
<string name="name_field_error">Name field can\'t be empty or less than 3 characters</string>
<string name="center_name_error">Center name can\'t be empty or less than 3 characters</string>
<string name="registration_success">Registration Done Successfully</string>
<string name="internt_not_local">Internet not available, test details stored locally</string>
<string name="enter_details_properly">Please enter all the details properly</string>
<string name="enter_valid_birth_year">Please enter a valid birth year between 1900 and 2023</string>
<string name="fill_field">Please fill the field</string>
<string name="valid_mobile_number">Please enter a valid 10-digit mobile number</string>
<string name="enter_name">Please enter your name</string>
<string name="enter_marital_status">Please enter your marital status</string>
<string name="enter_category">Please enter your category</string>
<string name="enter_caste">Please enter your caste</string>
<string name="enter_house_address">Please enter your house address</string>
<string name="enter_city">Please enter your city</string>
<string name="enter_district">Please enter your district</string>
<string name="enter_state">Please enter your state</string>
<string name="enter_pincode">Please enter a valid 6-digit pin code</string>
<string name="enter_family_history">Please enter your family history</string>
<string name="enter_guardian_name">Please enter your guardian name</string>
<string name="enter_father_husband_name">enter father/husband name</string>
<string name="do_log_out">Do you want to LogOut the Application?</string>
<string name="log_out">Log Out</string>
<string name="upload_db_registration">Upload DB Registration</string>
<string name="upload_local_db_to_cloud">Do you want to upload the local DB Registration to the cloud?</string>
<string name="upload">Upload</string>
<string name="upload_done_successfully">Upload done successfully</string>
<string name="enter_proper_login_id">Please enter a proper Login ID</string>
<string name="enter_proper_password">Please enter a proper password</string>
<string name="wrong_password">Wrong Password</string>
<string name="wrong_user_id">Wrong UserID</string>
<string name="scanned_aadhar_id">You have scanned the Aadhar ID, need to enter Aadhar ID number you have scanned and Abha ID manually</string>
<string name="scanned_abha_id">You have scanned the Abha ID</string>
<string name="scanned_aadharid">You have scanned the Aadhar ID</string>
<string-array name="category"> <string-array name="category">
<item>NT-A</item> <item>NT-A</item>