diff --git a/.idea/shelf/Changes3.xml b/.idea/shelf/Changes3.xml
new file mode 100644
index 0000000..15b4ce4
--- /dev/null
+++ b/.idea/shelf/Changes3.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/.gitignore b/app/.gitignore
index 42afabf..ebe0879 100644
--- a/app/.gitignore
+++ b/app/.gitignore
@@ -1 +1,2 @@
-/build
\ No newline at end of file
+/build
+/google-services*
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 07b1ee5..89d7cc8 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -16,8 +16,8 @@ android {
applicationId "in.sminnovations.hposregistration"
minSdk 26
targetSdk 34
- versionCode 1
- versionName "1.0"
+ versionCode 6
+ versionName "1.0.6"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
@@ -59,6 +59,8 @@ dependencies {
implementation 'com.google.firebase:firebase-storage-ktx'
implementation 'com.firebaseui:firebase-ui-firestore:8.0.2'
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
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1'
@@ -92,13 +94,12 @@ dependencies {
annotationProcessor 'com.github.bumptech.glide:compiler:4.13.2'
//Room
- implementation "androidx.room:room-ktx:2.6.0"
- implementation "androidx.room:room-runtime:2.6.0"
- kapt ("androidx.room:room-compiler:2.6.0")
+ implementation "androidx.room:room-ktx:2.6.1"
+ implementation "androidx.room:room-runtime:2.6.1"
+ kapt ("androidx.room:room-compiler:2.6.1")
// Barcode scanner
implementation 'com.journeyapps:zxing-android-embedded:4.3.0'
- implementation 'androidx.preference:preference-ktx:1.2.1'
- implementation 'androidx.preference:preference-ktx:1.2.1'
+
}
\ No newline at end of file
diff --git a/app/google-services.json b/app/google-services.json
deleted file mode 100644
index a593d99..0000000
--- a/app/google-services.json
+++ /dev/null
@@ -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"
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/hposregistration/dao/MyDataBase.kt b/app/src/main/java/com/example/hposregistration/dao/MyDataBase.kt
index cdcf480..b2ff720 100644
--- a/app/src/main/java/com/example/hposregistration/dao/MyDataBase.kt
+++ b/app/src/main/java/com/example/hposregistration/dao/MyDataBase.kt
@@ -1,11 +1,36 @@
package com.example.hposregistration.dao
+import android.content.Context
import androidx.room.Database
+import androidx.room.Room
import androidx.room.RoomDatabase
import androidx.room.TypeConverters
+import androidx.room.migration.Migration
+import androidx.sqlite.db.SupportSQLiteDatabase
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 fun userDao(): UserDao
-}
\ No newline at end of file
+
+ 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()
+ }
+ }
+}
diff --git a/app/src/main/java/com/example/hposregistration/data/user/UserData.kt b/app/src/main/java/com/example/hposregistration/data/user/UserData.kt
index 5ecc79d..0b40ebc 100644
--- a/app/src/main/java/com/example/hposregistration/data/user/UserData.kt
+++ b/app/src/main/java/com/example/hposregistration/data/user/UserData.kt
@@ -7,8 +7,11 @@ import androidx.room.PrimaryKey
data class UserData(
@PrimaryKey
var _id: String = "",
+ var _idSearch: String = "",
var abhaId: String = "",
+ var abhaIdSearch: String = "",
var aadharId: String = "",
+ var aadharIdSearch: String = "",
var name: String = "",
var birthYear: String = "",
var gender: String = "",
diff --git a/app/src/main/java/com/example/hposregistration/network/UserDao.kt b/app/src/main/java/com/example/hposregistration/network/UserDao.kt
index a05f0bf..06fdfdc 100644
--- a/app/src/main/java/com/example/hposregistration/network/UserDao.kt
+++ b/app/src/main/java/com/example/hposregistration/network/UserDao.kt
@@ -27,4 +27,7 @@ class UserDao {
// suspend fun getPatientList(): List {
// return patientCollection.get().await().toObjects(UserData::class.java)
// }
+
+
+
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/hposregistration/ui/activities/MainActivity.kt b/app/src/main/java/com/example/hposregistration/ui/activities/MainActivity.kt
index 0793368..013bdf0 100644
--- a/app/src/main/java/com/example/hposregistration/ui/activities/MainActivity.kt
+++ b/app/src/main/java/com/example/hposregistration/ui/activities/MainActivity.kt
@@ -1,9 +1,11 @@
package com.example.hposregistration.ui.activities
-import android.content.Context
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
-import com.example.hposregistration.data.LanguageManager
+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 `in`.sminnovations.hposregistration.databinding.ActivityMainBinding
@@ -11,12 +13,6 @@ import `in`.sminnovations.hposregistration.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
- override fun attachBaseContext(newBase: Context?) {
- val languageCode = LanguageManager.getSavedLanguage(newBase!!)
- LanguageManager.setLocale(newBase, languageCode)
- super.attachBaseContext(newBase)
- }
-
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -24,4 +20,44 @@ class MainActivity : AppCompatActivity() {
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()
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/hposregistration/ui/fragments/UserListFragment.kt b/app/src/main/java/com/example/hposregistration/ui/fragments/UserListFragment.kt
index 5b303e2..e10cd67 100644
--- a/app/src/main/java/com/example/hposregistration/ui/fragments/UserListFragment.kt
+++ b/app/src/main/java/com/example/hposregistration/ui/fragments/UserListFragment.kt
@@ -8,7 +8,6 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
-import android.widget.Button
import android.widget.Toast
import androidx.fragment.app.viewModels
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.ui.viewmodels.RegistrationViewModel
import com.firebase.ui.firestore.FirestoreRecyclerOptions
+import com.google.firebase.firestore.Query
import com.google.firebase.firestore.ktx.firestore
import com.google.firebase.ktx.Firebase
import dagger.hilt.android.AndroidEntryPoint
import `in`.sminnovations.hposregistration.R
import `in`.sminnovations.hposregistration.databinding.FragmentUserListBinding
+import java.text.SimpleDateFormat
+import java.util.Date
@AndroidEntryPoint
class UserListFragment : BaseFragment() {
@@ -56,6 +58,11 @@ class UserListFragment : BaseFragment() {
}
private fun setupViews() {
+ val pInfo = requireActivity().packageManager.getPackageInfo(
+ requireActivity().packageName, 0
+ )
+ val version = pInfo.versionName
+ binding.appVersion.text = version
binding.btnRegisterUser.setOnClickListener {
findNavController().navigate(R.id.action_userListFragment_to_registrationFragment)
}
@@ -164,7 +171,17 @@ class UserListFragment : BaseFragment() {
private fun fetchFromServer() {
binding.noList.visibility = View.GONE
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")
+ .whereGreaterThanOrEqualTo("createdAt", today)
+ .orderBy("createdAt", Query.Direction.DESCENDING)
+ query.get().addOnSuccessListener {
+ if (it.documents.isEmpty() && isOnline) {
+ binding.emptyRegistrations.visibility = View.VISIBLE
+ }
+ }
val recyclerViewOptions =
FirestoreRecyclerOptions.Builder().setQuery(query, UserData::class.java)
.build()
@@ -180,6 +197,7 @@ class UserListFragment : BaseFragment() {
binding.noList.visibility = View.GONE
binding.rvOrder.visibility = View.VISIBLE
} else {
+ binding.emptyRegistrations.visibility = View.GONE
if (userDataList.isEmpty()) {
binding.noList.visibility = View.VISIBLE
binding.rvOrder.visibility = View.GONE
diff --git a/app/src/main/java/com/example/hposregistration/ui/viewmodels/RegistrationViewModel.kt b/app/src/main/java/com/example/hposregistration/ui/viewmodels/RegistrationViewModel.kt
index 930e4ca..f56bbaa 100644
--- a/app/src/main/java/com/example/hposregistration/ui/viewmodels/RegistrationViewModel.kt
+++ b/app/src/main/java/com/example/hposregistration/ui/viewmodels/RegistrationViewModel.kt
@@ -13,6 +13,10 @@ import com.example.hposregistration.data.user.UserData
import com.google.firebase.storage.FirebaseStorage
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
+import java.text.SimpleDateFormat
+import java.util.Calendar
+import java.util.Date
+import java.util.Locale
import javax.inject.Inject
@HiltViewModel
@@ -63,6 +67,15 @@ class RegistrationViewModel @Inject constructor(
get() = _networkStatusLiveData
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)
mainRepository.insert(userData)
}
diff --git a/app/src/main/res/layout/fragment_user_list.xml b/app/src/main/res/layout/fragment_user_list.xml
index 4c3db74..8b08c4f 100644
--- a/app/src/main/res/layout/fragment_user_list.xml
+++ b/app/src/main/res/layout/fragment_user_list.xml
@@ -16,14 +16,20 @@
android:layout_height="match_parent"
android:orientation="vertical">
-
+ app:layout_constraintTop_toTopOf="parent" />
+
+
+
Edit
User Details
Internet is not available and there is no Data available in Local DB
+ No registrations are available for display
User ID: %1$s
Abha Number: %1$s
Aadhar Number: %1$s