diff --git a/app/build.gradle b/app/build.gradle
index 2c28748..b4632e1 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -47,6 +47,7 @@ dependencies {
implementation 'com.google.android.material:material:1.11.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'androidx.preference:preference-ktx:1.2.1'
+ implementation 'androidx.games:games-activity:2.0.2'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9cda14d..28b2977 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,7 +7,8 @@
android:required="false" />
-
+
diff --git a/app/src/main/java/com/example/hposregistration/data/datasource/LocalFileDataSource.kt b/app/src/main/java/com/example/hposregistration/data/datasource/LocalFileDataSource.kt
index 50773a3..762e90d 100644
--- a/app/src/main/java/com/example/hposregistration/data/datasource/LocalFileDataSource.kt
+++ b/app/src/main/java/com/example/hposregistration/data/datasource/LocalFileDataSource.kt
@@ -1,5 +1,6 @@
package com.example.hposregistration.data.datasource
+import android.content.Context
import android.os.Environment
import android.util.Log
import com.example.hposregistration.data.user.UserData
@@ -10,7 +11,6 @@ import java.io.FileOutputStream
import java.io.FileWriter
import java.io.IOException
import java.io.InputStream
-import java.net.HttpURLConnection
import java.net.URL
import java.text.SimpleDateFormat
import java.util.Date
@@ -71,13 +71,11 @@ class LocalFileDataSource {
"userImageURL"
)
csvWriter.writeNext(header)
-
- // Create a separate folder for user images
- val imagesFolder = File(getExternalStorageDirectory(), "Images/${getCurrentDateTime()}")
+ val imagesFolder = File(getExternalStorageDirectory(), "Images${getCurrentDateTime()}")
// val imagesFolder = File(getExternalStorageDirectory(), "Images")
if (!imagesFolder.exists()) {
if (!imagesFolder.mkdirs()) {
- Log.e("CSVExport", "Error creating images folder: ${imagesFolder.absolutePath}")
+ Log.e("DirectoryCreation", "Error creating images folder: ${imagesFolder.absolutePath}")
}
}
@@ -150,14 +148,15 @@ class LocalFileDataSource {
}
}
-
private fun getExternalStorageDirectory(): File {
- return File(
- Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS),
- "HPOSRegistration"
- )
- }
+ val folder = File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "HposRegister")
+ if (!folder.exists()) {
+ folder.mkdirs()
+ }
+
+ return folder
+ }
private fun getCurrentDateTime(): String {
val dateFormat = SimpleDateFormat("dd-MM-yy", Locale.getDefault())
val currentDateTime = Date()
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 96a8472..b7ad132 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
@@ -1,10 +1,16 @@
package com.example.hposregistration.ui.fragments
+import android.annotation.SuppressLint
import android.app.AlertDialog
import android.content.Context
import android.content.DialogInterface
+import android.content.Intent
import android.content.SharedPreferences
+import android.media.audiofx.BassBoost
+import android.net.Uri
+import android.os.Build
import android.os.Bundle
+import android.os.Environment
import android.util.Log
import android.view.LayoutInflater
import android.view.View
@@ -20,10 +26,12 @@ 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.androidgamesdk.gametextinput.Settings
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 dagger.hilt.android.qualifiers.ApplicationContext
import `in`.sminnovations.hposregistration.R
import `in`.sminnovations.hposregistration.databinding.FragmentUserListBinding
import java.text.SimpleDateFormat
@@ -40,6 +48,8 @@ class UserListFragment : BaseFragment() {
private var isOnline = false
private lateinit var sharedPreference: SharedPreferences
+ private val REQUEST_CODE_MANAGE_EXTERNAL_STORAGE = 123
+
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
@@ -47,7 +57,20 @@ class UserListFragment : BaseFragment() {
_binding = FragmentUserListBinding.inflate(inflater, container, false)
sharedPreference = requireContext().getSharedPreferences("PREFERENCE_NAME", Context.MODE_PRIVATE)
setupViews()
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+ if (!Environment.isExternalStorageManager()) {
+ val intent = Intent(android.provider.Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION)
+
+ intent.data = Uri.parse("package:" + requireContext().packageName)
+ startActivityForResult(intent, REQUEST_CODE_MANAGE_EXTERNAL_STORAGE)
+ }
+ }
+
+
return binding.root
+
+
+
}
override fun onResume() {
@@ -252,6 +275,7 @@ class UserListFragment : BaseFragment() {
}
+ @SuppressLint("LogNotTimber")
private fun downloadLocalDBData(dialog: DialogInterface) {
var csvDownloaded = false
viewModel.allUserData.observe(viewLifecycleOwner) { userDataList ->
@@ -306,4 +330,5 @@ class UserListFragment : BaseFragment() {
}
}
}
+
}
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 66f023a..1ed4599 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
@@ -82,10 +82,10 @@ class RegistrationViewModel @Inject constructor(
mainRepository.deleteById(id = userId)
}
- fun createCSV(userData: List, appContext: Context) =
+ fun createCSV(userData: List, context: Context) =
viewModelScope.launch {
- val fileName = "${getCurrentDateTime()}.csv"
- if (localFileDataSource.exportDataToCSV(fileName, userData)) {
+ val fileName = "HPOS${getCurrentDate()}.csv"
+ if (localFileDataSource.exportDataToCSV(fileName, userData,context)) {
userData.forEach { data ->
data.localFlag = true
mainRepository.updateCSVFieldById(
@@ -103,4 +103,10 @@ class RegistrationViewModel @Inject constructor(
return dateFormat.format(currentDateTime)
}
+
+ private fun getCurrentDate(): String {
+ val dateFormat = SimpleDateFormat("dd-MM-yy", Locale.getDefault())
+ val currentDate = Date()
+ return dateFormat.format(currentDate)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 0600a4d..855a734 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -104,7 +104,7 @@
Center name can\'t be empty or less than 3 characters
Registration Done Successfully
Internet not available, test details stored locally
- test details stored locally
+ details stored locally
No data available in the local database
Please enter all the details properly