Fixed the issues of creating registration folder inside the device, when data stored locally

This commit is contained in:
Mariya
2024-01-17 17:34:02 +05:30
parent 2b8edbc23c
commit b5cf8586b4
6 changed files with 48 additions and 16 deletions

View File

@@ -47,6 +47,7 @@ dependencies {
implementation 'com.google.android.material:material:1.11.0' implementation 'com.google.android.material:material:1.11.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'androidx.preference:preference-ktx:1.2.1' implementation 'androidx.preference:preference-ktx:1.2.1'
implementation 'androidx.games:games-activity:2.0.2'
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'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'

View File

@@ -7,7 +7,8 @@
android:required="false" /> android:required="false" />
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
tools:ignore="ScopedStorage" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />

View File

@@ -1,5 +1,6 @@
package com.example.hposregistration.data.datasource package com.example.hposregistration.data.datasource
import android.content.Context
import android.os.Environment import android.os.Environment
import android.util.Log import android.util.Log
import com.example.hposregistration.data.user.UserData import com.example.hposregistration.data.user.UserData
@@ -10,7 +11,6 @@ import java.io.FileOutputStream
import java.io.FileWriter import java.io.FileWriter
import java.io.IOException import java.io.IOException
import java.io.InputStream import java.io.InputStream
import java.net.HttpURLConnection
import java.net.URL import java.net.URL
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.Date import java.util.Date
@@ -71,13 +71,11 @@ class LocalFileDataSource {
"userImageURL" "userImageURL"
) )
csvWriter.writeNext(header) csvWriter.writeNext(header)
val imagesFolder = File(getExternalStorageDirectory(), "Images${getCurrentDateTime()}")
// Create a separate folder for user images
val imagesFolder = File(getExternalStorageDirectory(), "Images/${getCurrentDateTime()}")
// val imagesFolder = File(getExternalStorageDirectory(), "Images") // val imagesFolder = File(getExternalStorageDirectory(), "Images")
if (!imagesFolder.exists()) { if (!imagesFolder.exists()) {
if (!imagesFolder.mkdirs()) { 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 { private fun getExternalStorageDirectory(): File {
return File( val folder = File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "HposRegister")
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS),
"HPOSRegistration"
)
}
if (!folder.exists()) {
folder.mkdirs()
}
return folder
}
private fun getCurrentDateTime(): String { private fun getCurrentDateTime(): String {
val dateFormat = SimpleDateFormat("dd-MM-yy", Locale.getDefault()) val dateFormat = SimpleDateFormat("dd-MM-yy", Locale.getDefault())
val currentDateTime = Date() val currentDateTime = Date()

View File

@@ -1,10 +1,16 @@
package com.example.hposregistration.ui.fragments package com.example.hposregistration.ui.fragments
import android.annotation.SuppressLint
import android.app.AlertDialog import android.app.AlertDialog
import android.content.Context import android.content.Context
import android.content.DialogInterface import android.content.DialogInterface
import android.content.Intent
import android.content.SharedPreferences import android.content.SharedPreferences
import android.media.audiofx.BassBoost
import android.net.Uri
import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.os.Environment
import android.util.Log import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View 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.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.androidgamesdk.gametextinput.Settings
import com.google.firebase.firestore.Query 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 dagger.hilt.android.qualifiers.ApplicationContext
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.text.SimpleDateFormat
@@ -40,6 +48,8 @@ class UserListFragment : BaseFragment() {
private var isOnline = false private var isOnline = false
private lateinit var sharedPreference: SharedPreferences private lateinit var sharedPreference: SharedPreferences
private val REQUEST_CODE_MANAGE_EXTERNAL_STORAGE = 123
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
@@ -47,7 +57,20 @@ class UserListFragment : BaseFragment() {
_binding = FragmentUserListBinding.inflate(inflater, container, false) _binding = FragmentUserListBinding.inflate(inflater, container, false)
sharedPreference = requireContext().getSharedPreferences("PREFERENCE_NAME", Context.MODE_PRIVATE) sharedPreference = requireContext().getSharedPreferences("PREFERENCE_NAME", Context.MODE_PRIVATE)
setupViews() 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 return binding.root
} }
override fun onResume() { override fun onResume() {
@@ -252,6 +275,7 @@ class UserListFragment : BaseFragment() {
} }
@SuppressLint("LogNotTimber")
private fun downloadLocalDBData(dialog: DialogInterface) { private fun downloadLocalDBData(dialog: DialogInterface) {
var csvDownloaded = false var csvDownloaded = false
viewModel.allUserData.observe(viewLifecycleOwner) { userDataList -> viewModel.allUserData.observe(viewLifecycleOwner) { userDataList ->
@@ -306,4 +330,5 @@ class UserListFragment : BaseFragment() {
} }
} }
} }
} }

View File

@@ -82,10 +82,10 @@ class RegistrationViewModel @Inject constructor(
mainRepository.deleteById(id = userId) mainRepository.deleteById(id = userId)
} }
fun createCSV(userData: List<UserData>, appContext: Context) = fun createCSV(userData: List<UserData>, context: Context) =
viewModelScope.launch { viewModelScope.launch {
val fileName = "${getCurrentDateTime()}.csv" val fileName = "HPOS${getCurrentDate()}.csv"
if (localFileDataSource.exportDataToCSV(fileName, userData)) { if (localFileDataSource.exportDataToCSV(fileName, userData,context)) {
userData.forEach { data -> userData.forEach { data ->
data.localFlag = true data.localFlag = true
mainRepository.updateCSVFieldById( mainRepository.updateCSVFieldById(
@@ -103,4 +103,10 @@ class RegistrationViewModel @Inject constructor(
return dateFormat.format(currentDateTime) return dateFormat.format(currentDateTime)
} }
private fun getCurrentDate(): String {
val dateFormat = SimpleDateFormat("dd-MM-yy", Locale.getDefault())
val currentDate = Date()
return dateFormat.format(currentDate)
}
} }

View File

@@ -104,7 +104,7 @@
<string name="center_name_error">Center name 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="registration_success">Registration Done Successfully</string>
<string name="internt_not_local">Internet not available, test details stored locally</string> <string name="internt_not_local">Internet not available, test details stored locally</string>
<string name="local">test details stored locally</string> <string name="local">details stored locally</string>
<string name="no_data_available">No data available in the local database</string> <string name="no_data_available">No data available in the local database</string>
<string name="enter_details_properly">Please enter all the details properly</string> <string name="enter_details_properly">Please enter all the details properly</string>