api
This commit is contained in:
8
app/src/main/java/com/example/hpostesting/data/Result.kt
Normal file
8
app/src/main/java/com/example/hpostesting/data/Result.kt
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
package com.example.hpostesting.data
|
||||||
|
|
||||||
|
sealed class Result<out T : Any> {
|
||||||
|
|
||||||
|
data class Success<out T : Any>(val data: T) : Result<T>()
|
||||||
|
data class Error(val exception: Exception) : Result<Nothing>()
|
||||||
|
class Loading<T : Any> : Result<T>()
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
package com.example.hpostesting.data.api
|
||||||
|
|
||||||
|
import com.example.hpostesting.data.model.patient.MolbioLogin
|
||||||
|
import com.example.hpostesting.data.model.patient.UploadResponse
|
||||||
|
import com.google.gson.JsonObject
|
||||||
|
import okhttp3.MultipartBody
|
||||||
|
import okhttp3.RequestBody
|
||||||
|
import retrofit2.Call
|
||||||
|
import retrofit2.http.Body
|
||||||
|
import retrofit2.http.Header
|
||||||
|
import retrofit2.http.Headers
|
||||||
|
import retrofit2.http.Multipart
|
||||||
|
import retrofit2.http.POST
|
||||||
|
import retrofit2.http.PUT
|
||||||
|
import retrofit2.http.Part
|
||||||
|
|
||||||
|
interface MolbioApi {
|
||||||
|
@Headers("Content-Type: application/json")
|
||||||
|
@POST("devices/login")
|
||||||
|
fun login(@Body jsonObject: JsonObject): MolbioLogin
|
||||||
|
|
||||||
|
|
||||||
|
@Multipart
|
||||||
|
@PUT("results/upload")
|
||||||
|
fun uploadPdf(@Header("Authorization") auth:String, @Part file: MultipartBody.Part, @Part("DeviceId") name: RequestBody): Call<JsonObject>
|
||||||
|
|
||||||
|
@Multipart
|
||||||
|
@PUT("results/upload")
|
||||||
|
fun uploadNewPdf(@Header("Authorization") auth:String,@Part("") count:RequestBody,@Part("") userId:RequestBody,@Part file_csv: MultipartBody.Part,@Part file_log:MultipartBody.Part,@Part("DeviceId") name:RequestBody): UploadResponse
|
||||||
|
|
||||||
|
}
|
||||||
@@ -38,4 +38,8 @@ object Constants {
|
|||||||
)
|
)
|
||||||
|
|
||||||
const val password = "SMI@12345"
|
const val password = "SMI@12345"
|
||||||
|
|
||||||
|
const val BASE_URL = "https://datacollection.micropcr.com/v1/"
|
||||||
|
|
||||||
|
const val TOKEN = "molbioToken"
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
package com.example.hpostesting.data.model.patient
|
||||||
|
|
||||||
|
data class MolbioLogin(
|
||||||
|
val token: String
|
||||||
|
)
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
package com.example.hpostesting.data.model.patient
|
||||||
|
|
||||||
|
data class UploadResponse(
|
||||||
|
val success: Boolean
|
||||||
|
)
|
||||||
@@ -23,7 +23,8 @@ data class UserData(
|
|||||||
var csvPath: String = "",
|
var csvPath: String = "",
|
||||||
var reportPath: String = "",
|
var reportPath: String = "",
|
||||||
var result: TestRightResultType? = null,
|
var result: TestRightResultType? = null,
|
||||||
var resultRatio: Double? = null
|
var resultRatio: Double? = null,
|
||||||
|
var uploadFlag: Boolean? = false
|
||||||
) {
|
) {
|
||||||
enum class Gender {
|
enum class Gender {
|
||||||
MALE,
|
MALE,
|
||||||
|
|||||||
@@ -1,21 +1,63 @@
|
|||||||
package com.example.hpostesting.data.repository
|
package com.example.hpostesting.data.repository
|
||||||
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
|
import com.example.hpostesting.data.api.MolbioApi
|
||||||
import com.example.hpostesting.data.model.PendingUploads
|
import com.example.hpostesting.data.model.PendingUploads
|
||||||
import com.example.hpostesting.data.model.Response
|
import com.example.hpostesting.data.model.Response
|
||||||
|
import com.example.hpostesting.data.model.patient.MolbioLogin
|
||||||
|
import com.example.hpostesting.data.model.patient.UploadResponse
|
||||||
import com.example.hpostesting.data.model.patient.UserData
|
import com.example.hpostesting.data.model.patient.UserData
|
||||||
import com.google.firebase.firestore.FirebaseFirestore
|
import com.google.firebase.firestore.FirebaseFirestore
|
||||||
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 com.google.firebase.storage.ktx.storage
|
import com.google.firebase.storage.ktx.storage
|
||||||
|
import com.google.gson.JsonObject
|
||||||
import kotlinx.coroutines.tasks.await
|
import kotlinx.coroutines.tasks.await
|
||||||
|
import okhttp3.MultipartBody
|
||||||
|
import okhttp3.RequestBody
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
import java.net.ConnectException
|
||||||
|
import java.net.SocketTimeoutException
|
||||||
|
import javax.inject.Inject
|
||||||
|
import javax.inject.Singleton
|
||||||
|
|
||||||
class DatabaseRepository : Repository {
|
|
||||||
|
class NetworkException(message: String, cause: Throwable) : Exception(message, cause)
|
||||||
|
|
||||||
|
@Singleton
|
||||||
|
class DatabaseRepository @Inject constructor(
|
||||||
|
private val molbioApi: MolbioApi
|
||||||
|
) : Repository {
|
||||||
|
|
||||||
private val db: FirebaseFirestore = Firebase.firestore
|
private val db: FirebaseFirestore = Firebase.firestore
|
||||||
private val storage = Firebase.storage
|
private val storage = Firebase.storage
|
||||||
|
|
||||||
|
private suspend fun <T : Any> safeApiCall(apiCall: suspend () -> T): com.example.hpostesting.data.Result<T> {
|
||||||
|
return try {
|
||||||
|
val response = apiCall.invoke()
|
||||||
|
com.example.hpostesting.data.Result.Success(response)
|
||||||
|
} catch (e: SocketTimeoutException) {
|
||||||
|
com.example.hpostesting.data.Result.Error(NetworkException("Network timeout", e))
|
||||||
|
} catch (e: ConnectException) {
|
||||||
|
com.example.hpostesting.data.Result.Error(
|
||||||
|
NetworkException(
|
||||||
|
"Network connection failed",
|
||||||
|
e
|
||||||
|
)
|
||||||
|
)
|
||||||
|
} catch (e: Exception) {
|
||||||
|
com.example.hpostesting.data.Result.Error(e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
suspend fun login(jsonObject: JsonObject): com.example.hpostesting.data.Result<MolbioLogin> {
|
||||||
|
return safeApiCall { molbioApi.login(jsonObject) }
|
||||||
|
}
|
||||||
|
|
||||||
|
suspend fun uploadPdf(token:String,count:RequestBody,userId:RequestBody,file_csv:MultipartBody.Part,log_csv:MultipartBody.Part,deviceId:RequestBody): com.example.hpostesting.data.Result<UploadResponse> {
|
||||||
|
return safeApiCall { molbioApi.uploadNewPdf(token,count,userId,file_csv,log_csv,deviceId) }
|
||||||
|
}
|
||||||
|
|
||||||
suspend fun addTestToDatabase(data: UserData): Response<String> {
|
suspend fun addTestToDatabase(data: UserData): Response<String> {
|
||||||
return try {
|
return try {
|
||||||
val userdata = db.collection("patientData").whereEqualTo("_id", data._id).get().await()
|
val userdata = db.collection("patientData").whereEqualTo("_id", data._id).get().await()
|
||||||
|
|||||||
@@ -0,0 +1,178 @@
|
|||||||
|
package com.example.hpostesting.domain
|
||||||
|
|
||||||
|
import android.app.job.JobParameters
|
||||||
|
import android.app.job.JobService
|
||||||
|
import android.content.Context
|
||||||
|
import android.content.SharedPreferences
|
||||||
|
import android.net.ConnectivityManager
|
||||||
|
import android.net.NetworkCapabilities
|
||||||
|
import android.net.NetworkInfo
|
||||||
|
import android.os.Build
|
||||||
|
import android.util.Log
|
||||||
|
import androidx.annotation.RequiresApi
|
||||||
|
import com.example.hpos.api.db.DatabaseHandler
|
||||||
|
import com.example.hpos.api.db.FileModel
|
||||||
|
import com.example.hpos.data.DataHolder
|
||||||
|
import com.google.gson.JsonObject
|
||||||
|
import okhttp3.MediaType
|
||||||
|
import okhttp3.MultipartBody
|
||||||
|
import okhttp3.RequestBody
|
||||||
|
import retrofit2.Call
|
||||||
|
import retrofit2.Callback
|
||||||
|
import retrofit2.Response
|
||||||
|
import java.io.File
|
||||||
|
|
||||||
|
class MyJobScheduler : JobService(){
|
||||||
|
|
||||||
|
lateinit var sharedPreference: SharedPreferences
|
||||||
|
var dummyService = ApiClient.getClient().create(apiService::class.java)
|
||||||
|
var Flag=0
|
||||||
|
override fun onStartJob(p0: JobParameters?): Boolean {
|
||||||
|
Log.d("jober","job started")
|
||||||
|
try{
|
||||||
|
if(isOnline(this))
|
||||||
|
{
|
||||||
|
val databaseHandler: DatabaseHandler = DatabaseHandler(this)
|
||||||
|
val normList:List<FileModel> = databaseHandler.getPendingNormFiles()
|
||||||
|
Log.d("jober_norm",normList.size.toString())
|
||||||
|
val testList:List<FileModel> = databaseHandler.getPendingTestFiles()
|
||||||
|
Log.d("jober_test",testList.size.toString())
|
||||||
|
val logList:List<FileModel> = databaseHandler.getPendingLogFiles()
|
||||||
|
Log.d("jober_test",logList.size.toString())
|
||||||
|
|
||||||
|
for(normDetails in normList)
|
||||||
|
{
|
||||||
|
Log.d("jober_norm",normDetails.normFilename)
|
||||||
|
var file = File(normDetails.normFilename)
|
||||||
|
if(file.exists())
|
||||||
|
{
|
||||||
|
uploadFile(applicationContext,normDetails.normFilename,normDetails.PatientId,0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for(testDetails in testList)
|
||||||
|
{
|
||||||
|
Log.d("jober_test",testDetails.testFilename)
|
||||||
|
var file = File(testDetails.testFilename)
|
||||||
|
if(file.exists())
|
||||||
|
{
|
||||||
|
uploadFile(this,testDetails.testFilename,testDetails.PatientId,1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(logDetails in logList)
|
||||||
|
{
|
||||||
|
Log.d("jober_log",logDetails.logFilename)
|
||||||
|
var file = File(logDetails.logFilename)
|
||||||
|
if(file.exists())
|
||||||
|
{
|
||||||
|
uploadFile(this,logDetails.logFilename,logDetails.PatientId,2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Log.d("jober","no net")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (e:Exception)
|
||||||
|
{
|
||||||
|
e.printStackTrace()
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
fun uploadFile(appContext: Context, filePath: String,pid:String, type:Int) {
|
||||||
|
val logInfo="log_info"
|
||||||
|
|
||||||
|
val devicename= DataHolder.deviceSerialNumber
|
||||||
|
sharedPreference = appContext.getSharedPreferences(logInfo,Context.MODE_PRIVATE)
|
||||||
|
var path=filePath
|
||||||
|
var file = File(path)
|
||||||
|
if(file.exists())
|
||||||
|
{
|
||||||
|
Log.d("jober","getting in fileexist")
|
||||||
|
val token=sharedPreference.getString("token","")
|
||||||
|
val reqBody = RequestBody.create(MediaType.parse("text/csv"), file)
|
||||||
|
val reqString= RequestBody.create(MediaType.parse("text/plain"),devicename)
|
||||||
|
val formData = MultipartBody.Part.createFormData("raw_data_file", file.name, reqBody)
|
||||||
|
if (token != null) {
|
||||||
|
dummyService.uploadPdf(token,formData,reqString).enqueue(object :
|
||||||
|
Callback<JsonObject> {
|
||||||
|
override fun onResponse(call: Call<JsonObject>, response: Response<JsonObject>) {
|
||||||
|
if (response.isSuccessful) {
|
||||||
|
Log.d("jober","upload success_"+response.body().toString())
|
||||||
|
Flag=1
|
||||||
|
} else {
|
||||||
|
Log.d("jober","upload not success"+response.raw().toString()
|
||||||
|
)
|
||||||
|
Flag=0
|
||||||
|
}
|
||||||
|
updateFile(appContext,pid,type,Flag)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onFailure(call: Call<JsonObject>, t: Throwable) {
|
||||||
|
Log.d("jober","upload error"+t.toString())
|
||||||
|
Flag=0
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Log.d("filecheck","given file doesn't exist")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun updateFile(appContext: Context,pid:String,type:Int,flag:Int)
|
||||||
|
{
|
||||||
|
val databaseHandler: DatabaseHandler = DatabaseHandler(appContext)
|
||||||
|
var fileData=databaseHandler.getFileFromId(pid.toString())
|
||||||
|
if(fileData!=null)
|
||||||
|
{
|
||||||
|
if(type==0) {
|
||||||
|
fileData.normFlag = flag
|
||||||
|
}
|
||||||
|
else if(type==1)
|
||||||
|
{
|
||||||
|
fileData.testFlag = flag
|
||||||
|
}
|
||||||
|
else if(type==2)
|
||||||
|
{
|
||||||
|
fileData.logFlag=flag
|
||||||
|
}
|
||||||
|
var vn=databaseHandler.updateFile(fileData)
|
||||||
|
Log.d("jober",vn.toString()+"updated as :"+flag+" \n$pid\n$type")
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Log.d("jober","filedata is null")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
override fun onStopJob(p0: JobParameters?): Boolean {
|
||||||
|
Log.d("jober_stop","Job stopped")
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fun isOnline(context: Context): Boolean {
|
||||||
|
val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
|
||||||
|
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||||
|
val n = cm.activeNetwork
|
||||||
|
if (n != null) {
|
||||||
|
val nc = cm.getNetworkCapabilities(n)
|
||||||
|
//It will check for both wifi and cellular network
|
||||||
|
return nc!!.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) || nc.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
} else {
|
||||||
|
val netInfo = cm.activeNetworkInfo
|
||||||
|
return netInfo != null && netInfo.isConnectedOrConnecting
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -3,6 +3,8 @@ package com.example.hpostesting.domain.di
|
|||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import androidx.room.Room
|
import androidx.room.Room
|
||||||
|
import com.example.hpostesting.data.api.MolbioApi
|
||||||
|
import com.example.hpostesting.data.constant.Constants
|
||||||
import com.example.hpostesting.data.dao.MyDatabase
|
import com.example.hpostesting.data.dao.MyDatabase
|
||||||
import com.example.hpostesting.data.dao.UserDao
|
import com.example.hpostesting.data.dao.UserDao
|
||||||
import com.example.hpostesting.data.datasource.LocalFileDataSource
|
import com.example.hpostesting.data.datasource.LocalFileDataSource
|
||||||
@@ -15,6 +17,10 @@ import dagger.Provides
|
|||||||
import dagger.hilt.InstallIn
|
import dagger.hilt.InstallIn
|
||||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
import dagger.hilt.components.SingletonComponent
|
import dagger.hilt.components.SingletonComponent
|
||||||
|
import okhttp3.OkHttpClient
|
||||||
|
import retrofit2.Retrofit
|
||||||
|
import retrofit2.converter.gson.GsonConverterFactory
|
||||||
|
import retrofit2.create
|
||||||
import javax.inject.Singleton
|
import javax.inject.Singleton
|
||||||
|
|
||||||
@Module
|
@Module
|
||||||
@@ -57,7 +63,16 @@ object AppModule {
|
|||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
fun provideDatabaseRepository(): DatabaseRepository {
|
fun provideRetrofit(client: OkHttpClient): Retrofit =
|
||||||
return DatabaseRepository()
|
Retrofit
|
||||||
}
|
.Builder()
|
||||||
|
.baseUrl(Constants.BASE_URL)
|
||||||
|
.addConverterFactory(GsonConverterFactory.create())
|
||||||
|
.build()
|
||||||
|
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
fun provideMolbioApi(retrofit: Retrofit): MolbioApi =
|
||||||
|
retrofit.create(MolbioApi::class.java)
|
||||||
}
|
}
|
||||||
@@ -19,7 +19,6 @@ class DashboardActivity : AppCompatActivity() {
|
|||||||
|
|
||||||
private lateinit var appBarConfiguration: AppBarConfiguration
|
private lateinit var appBarConfiguration: AppBarConfiguration
|
||||||
private lateinit var binding: ActivityDashboardBinding
|
private lateinit var binding: ActivityDashboardBinding
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import androidx.fragment.app.Fragment
|
|||||||
import androidx.fragment.app.activityViewModels
|
import androidx.fragment.app.activityViewModels
|
||||||
import androidx.navigation.fragment.findNavController
|
import androidx.navigation.fragment.findNavController
|
||||||
import com.example.hpostesting.data.DataHolder
|
import com.example.hpostesting.data.DataHolder
|
||||||
|
import com.example.hpostesting.data.Result
|
||||||
import com.example.hpostesting.data.constant.Constants
|
import com.example.hpostesting.data.constant.Constants
|
||||||
import com.example.hpostesting.data.model.patient.UserData
|
import com.example.hpostesting.data.model.patient.UserData
|
||||||
import com.example.hpostesting.presentation.adapter.UserListAdapter
|
import com.example.hpostesting.presentation.adapter.UserListAdapter
|
||||||
@@ -21,6 +22,7 @@ import com.example.hpostesting.presentation.testRight.TestRightViewModel
|
|||||||
import com.firebase.ui.firestore.FirestoreRecyclerOptions
|
import com.firebase.ui.firestore.FirestoreRecyclerOptions
|
||||||
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 com.google.gson.JsonObject
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import `in`.sminnovations.hpostesting.R
|
import `in`.sminnovations.hpostesting.R
|
||||||
import `in`.sminnovations.hpostesting.databinding.FragmentHomeBinding
|
import `in`.sminnovations.hpostesting.databinding.FragmentHomeBinding
|
||||||
@@ -34,6 +36,7 @@ class HomeFragment : Fragment() {
|
|||||||
private val viewModel: TestRightViewModel by activityViewModels()
|
private val viewModel: TestRightViewModel by activityViewModels()
|
||||||
private lateinit var rvAdapter: UserListAdapter
|
private lateinit var rvAdapter: UserListAdapter
|
||||||
private lateinit var sharedPreference: SharedPreferences
|
private lateinit var sharedPreference: SharedPreferences
|
||||||
|
private var loginCount = 1
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
|
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
|
||||||
): View {
|
): View {
|
||||||
@@ -53,9 +56,10 @@ class HomeFragment : Fragment() {
|
|||||||
if (isConnected) {
|
if (isConnected) {
|
||||||
binding.internetAvailableCL.visibility = View.VISIBLE
|
binding.internetAvailableCL.visibility = View.VISIBLE
|
||||||
binding.internetNotAvailableCL.visibility = View.GONE
|
binding.internetNotAvailableCL.visibility = View.GONE
|
||||||
|
login()
|
||||||
loadUserData()
|
loadUserData()
|
||||||
setSearch()
|
setSearch()
|
||||||
checkForLocalDBData()
|
// checkForLocalDBData()
|
||||||
} else {
|
} else {
|
||||||
binding.internetAvailableCL.visibility = View.GONE
|
binding.internetAvailableCL.visibility = View.GONE
|
||||||
binding.internetNotAvailableCL.visibility = View.VISIBLE
|
binding.internetNotAvailableCL.visibility = View.VISIBLE
|
||||||
@@ -66,7 +70,36 @@ class HomeFragment : Fragment() {
|
|||||||
logoutUser(requireContext())
|
logoutUser(requireContext())
|
||||||
}
|
}
|
||||||
binding.uploadData.setOnClickListener {
|
binding.uploadData.setOnClickListener {
|
||||||
showUploadDialog(requireContext())
|
showUploadDialog()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun login()
|
||||||
|
{
|
||||||
|
val jsonObject= JsonObject();
|
||||||
|
jsonObject.addProperty("Username","hposdevice");
|
||||||
|
jsonObject.addProperty("Password","sickle");
|
||||||
|
viewModel.login(jsonObject)
|
||||||
|
viewModel.loginResponse.observe(viewLifecycleOwner) {response ->
|
||||||
|
when(response) {
|
||||||
|
is Result.Success -> {
|
||||||
|
val editor = sharedPreference.edit();
|
||||||
|
editor.putString(Constants.TOKEN, response.data.token)
|
||||||
|
editor.apply()
|
||||||
|
Log.d("login_api","called");
|
||||||
|
// showUploadDialog()
|
||||||
|
}
|
||||||
|
is Result.Error -> {
|
||||||
|
if (loginCount < 3) {
|
||||||
|
viewModel.login(jsonObject)
|
||||||
|
loginCount++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
is Result.Loading -> {
|
||||||
|
|
||||||
|
}
|
||||||
|
else -> {}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -188,8 +221,8 @@ class HomeFragment : Fragment() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun showUploadDialog(context: Context) {
|
private fun showUploadDialog() {
|
||||||
val builder = AlertDialog.Builder(context)
|
val builder = AlertDialog.Builder(requireContext())
|
||||||
builder.setTitle(R.string.upload_db_registration_title)
|
builder.setTitle(R.string.upload_db_registration_title)
|
||||||
builder.setMessage(R.string.upload_db_registration_message)
|
builder.setMessage(R.string.upload_db_registration_message)
|
||||||
|
|
||||||
@@ -212,7 +245,6 @@ class HomeFragment : Fragment() {
|
|||||||
} else {
|
} else {
|
||||||
userDataList.forEach { userData ->
|
userDataList.forEach { userData ->
|
||||||
viewModel.bulkUploadResultToDatabase(userData)
|
viewModel.bulkUploadResultToDatabase(userData)
|
||||||
viewModel.deleteById(userData._id)
|
|
||||||
}
|
}
|
||||||
dialog.dismiss()
|
dialog.dismiss()
|
||||||
Toast.makeText(
|
Toast.makeText(
|
||||||
|
|||||||
@@ -166,11 +166,16 @@ class TestRightResults : Fragment() {
|
|||||||
}
|
}
|
||||||
viewModel.networkStatusLiveData.observe(viewLifecycleOwner) { isNetworkAvailable ->
|
viewModel.networkStatusLiveData.observe(viewLifecycleOwner) { isNetworkAvailable ->
|
||||||
val deviceStaticId = sharedPreference.getString(Constants.USER_ID, "")
|
val deviceStaticId = sharedPreference.getString(Constants.USER_ID, "")
|
||||||
|
val token=sharedPreference.getString(Constants.TOKEN,"")
|
||||||
if (isNetworkAvailable) {
|
if (isNetworkAvailable) {
|
||||||
viewModel.uploadResultToDatabase(requireContext(), true, deviceStaticId!!)
|
if (token != null) {
|
||||||
|
viewModel.uploadResultToDatabase(requireContext(), true, deviceStaticId!!,token)
|
||||||
|
}
|
||||||
binding.progressBar.visibility = View.VISIBLE
|
binding.progressBar.visibility = View.VISIBLE
|
||||||
} else {
|
} else {
|
||||||
viewModel.uploadResultToDatabase(requireContext(), false, deviceStaticId!!)
|
if (token != null) {
|
||||||
|
viewModel.uploadResultToDatabase(requireContext(), false, deviceStaticId!!,token)
|
||||||
|
}
|
||||||
Toast.makeText(
|
Toast.makeText(
|
||||||
requireContext(),
|
requireContext(),
|
||||||
"Internet not available, Test Data added to Local DB",
|
"Internet not available, Test Data added to Local DB",
|
||||||
|
|||||||
@@ -1,19 +1,21 @@
|
|||||||
package com.example.hpostesting.presentation.testRight
|
package com.example.hpostesting.presentation.testRight
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.content.SharedPreferences
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.util.Log
|
|
||||||
import androidx.lifecycle.LiveData
|
import androidx.lifecycle.LiveData
|
||||||
import androidx.lifecycle.MutableLiveData
|
import androidx.lifecycle.MutableLiveData
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
import com.example.hpostesting.data.DataHolder
|
import com.example.hpostesting.data.DataHolder
|
||||||
import com.example.hpostesting.data.NetworkStatusLiveData
|
import com.example.hpostesting.data.NetworkStatusLiveData
|
||||||
|
import com.example.hpostesting.data.Result
|
||||||
import com.example.hpostesting.data.constant.Constants
|
import com.example.hpostesting.data.constant.Constants
|
||||||
import com.example.hpostesting.data.dao.UserDao
|
import com.example.hpostesting.data.dao.UserDao
|
||||||
import com.example.hpostesting.data.model.CalculationVariableForTest
|
import com.example.hpostesting.data.model.CalculationVariableForTest
|
||||||
import com.example.hpostesting.data.model.ErrorMessage
|
import com.example.hpostesting.data.model.ErrorMessage
|
||||||
import com.example.hpostesting.data.model.Response
|
import com.example.hpostesting.data.model.Response
|
||||||
|
import com.example.hpostesting.data.model.patient.MolbioLogin
|
||||||
import com.example.hpostesting.data.model.patient.UserData
|
import com.example.hpostesting.data.model.patient.UserData
|
||||||
import com.example.hpostesting.data.model.test.TestRightCalculationData
|
import com.example.hpostesting.data.model.test.TestRightCalculationData
|
||||||
import com.example.hpostesting.data.model.test.TestRightDeviceConstants
|
import com.example.hpostesting.data.model.test.TestRightDeviceConstants
|
||||||
@@ -26,9 +28,13 @@ import com.example.hpostesting.domain.SickleFindResultCaluculationWithMaxImpl
|
|||||||
import com.example.hpostesting.domain.TestRightResultCalculation
|
import com.example.hpostesting.domain.TestRightResultCalculation
|
||||||
import com.example.hpostesting.util.MyUtils
|
import com.example.hpostesting.util.MyUtils
|
||||||
import com.google.firebase.storage.FirebaseStorage
|
import com.google.firebase.storage.FirebaseStorage
|
||||||
|
import com.google.gson.JsonObject
|
||||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.tasks.await
|
import kotlinx.coroutines.tasks.await
|
||||||
|
import okhttp3.MediaType
|
||||||
|
import okhttp3.MultipartBody
|
||||||
|
import okhttp3.RequestBody
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.Calendar
|
import java.util.Calendar
|
||||||
@@ -53,10 +59,12 @@ class TestRightViewModel @Inject constructor(
|
|||||||
val errorTriggered = MutableLiveData<ErrorMessage>()
|
val errorTriggered = MutableLiveData<ErrorMessage>()
|
||||||
var numberOfSampleRun = 0
|
var numberOfSampleRun = 0
|
||||||
|
|
||||||
|
val loginResponse = MutableLiveData<Result<MolbioLogin>>()
|
||||||
|
|
||||||
val fireBaseUpload = MutableLiveData<String>()
|
val fireBaseUpload = MutableLiveData<String>()
|
||||||
|
lateinit var sharedPreference: SharedPreferences
|
||||||
val testDetails = DataHolder.selectedTest
|
val testDetails = DataHolder.selectedTest
|
||||||
|
var Flag=0
|
||||||
private val _networkStatusLiveData = NetworkStatusLiveData(context)
|
private val _networkStatusLiveData = NetworkStatusLiveData(context)
|
||||||
val networkStatusLiveData: LiveData<Boolean>
|
val networkStatusLiveData: LiveData<Boolean>
|
||||||
get() = _networkStatusLiveData
|
get() = _networkStatusLiveData
|
||||||
@@ -435,7 +443,7 @@ class TestRightViewModel @Inject constructor(
|
|||||||
return prefixTxt + fileExtensionTxt
|
return prefixTxt + fileExtensionTxt
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun addResultTestToDb() {
|
private fun addResultTestToDb(csvFilePath: String, logTxtFilePath: String, token: String) {
|
||||||
testDetails?.testTime = SimpleDateFormat(
|
testDetails?.testTime = SimpleDateFormat(
|
||||||
"yyyy-MM-dd HH:mm:ss", Locale.getDefault()
|
"yyyy-MM-dd HH:mm:ss", Locale.getDefault()
|
||||||
).format(Calendar.getInstance().time)
|
).format(Calendar.getInstance().time)
|
||||||
@@ -445,7 +453,7 @@ class TestRightViewModel @Inject constructor(
|
|||||||
).format(Calendar.getInstance().time)
|
).format(Calendar.getInstance().time)
|
||||||
when (repository.addTestToDatabase(testDetails)) {
|
when (repository.addTestToDatabase(testDetails)) {
|
||||||
is Response.Success -> {
|
is Response.Success -> {
|
||||||
fireBaseUpload.postValue("Success")
|
uploadToMolbio(csvFilePath, logTxtFilePath, token)
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> {}
|
else -> {}
|
||||||
@@ -453,7 +461,40 @@ class TestRightViewModel @Inject constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun uploadResultToDatabase(context: Context, isOnline: Boolean,deviceSerialNumber: String) = viewModelScope.launch {
|
private fun uploadToMolbio(csvFilePath: String, logTxtFilePath: String, token: String) = viewModelScope.launch {
|
||||||
|
val csv_file = File(csvFilePath)
|
||||||
|
val log_file=File(logTxtFilePath)
|
||||||
|
|
||||||
|
val csv_reqBody = RequestBody.create(MediaType.parse("text/csv"), csv_file)
|
||||||
|
val log_reqBody = RequestBody.create(MediaType.parse("text/txt"), log_file)
|
||||||
|
val deviceId= testDetails?.deviceSerialNumber?.let {
|
||||||
|
RequestBody.create(MediaType.parse("text/plain"),
|
||||||
|
it
|
||||||
|
)
|
||||||
|
}
|
||||||
|
val userId= testDetails?._id?.let { RequestBody.create(MediaType.parse("text/plain"), it) }
|
||||||
|
val csv_formData = MultipartBody.Part.createFormData("csv_file", csv_file.name, csv_reqBody)
|
||||||
|
val log_formData = MultipartBody.Part.createFormData("csv_file", log_file.name, log_reqBody)
|
||||||
|
val count = "1".let {
|
||||||
|
RequestBody.create(MediaType.parse("text/plain"),
|
||||||
|
it
|
||||||
|
)
|
||||||
|
}
|
||||||
|
repository.uploadPdf(token, count, userId!!, csv_formData, log_formData, deviceId!!).let { upload ->
|
||||||
|
when(upload) {
|
||||||
|
is Result.Success -> {
|
||||||
|
fireBaseUpload.postValue("Success")
|
||||||
|
}
|
||||||
|
|
||||||
|
else -> {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
fun uploadResultToDatabase(context: Context, isOnline: Boolean, deviceSerialNumber: String, token: String) = viewModelScope.launch {
|
||||||
val csvFilePath = MyUtils.getAppFolderPath(context) + getCSVFileName()
|
val csvFilePath = MyUtils.getAppFolderPath(context) + getCSVFileName()
|
||||||
val logTxtFilePath = MyUtils.getAppFolderPath(context) + getLogFileName()
|
val logTxtFilePath = MyUtils.getAppFolderPath(context) + getLogFileName()
|
||||||
testDetails?.csvPath = csvFilePath
|
testDetails?.csvPath = csvFilePath
|
||||||
@@ -478,8 +519,7 @@ class TestRightViewModel @Inject constructor(
|
|||||||
val serialNumber = Constants.STATICID.firstOrNull { it == deviceSerialNumber }
|
val serialNumber = Constants.STATICID.firstOrNull { it == deviceSerialNumber }
|
||||||
testDetails?.csvPath = csvUri
|
testDetails?.csvPath = csvUri
|
||||||
testDetails?.reportPath = logUri
|
testDetails?.reportPath = logUri
|
||||||
|
addResultTestToDb(csvFilePath, logTxtFilePath, token)
|
||||||
addResultTestToDb()
|
|
||||||
} catch (exception: Exception) {
|
} catch (exception: Exception) {
|
||||||
// Handle the exception appropriately (e.g., log the error, display an error message)
|
// Handle the exception appropriately (e.g., log the error, display an error message)
|
||||||
}
|
}
|
||||||
@@ -526,6 +566,7 @@ class TestRightViewModel @Inject constructor(
|
|||||||
when (repository.addTestToDatabase(userData)) {
|
when (repository.addTestToDatabase(userData)) {
|
||||||
is Response.Success -> {
|
is Response.Success -> {
|
||||||
fireBaseUpload.postValue("Success")
|
fireBaseUpload.postValue("Success")
|
||||||
|
// repository.uploadPdf()
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> {}
|
else -> {}
|
||||||
@@ -537,5 +578,12 @@ class TestRightViewModel @Inject constructor(
|
|||||||
userDao.deleteById(id = userId)
|
userDao.deleteById(id = userId)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun login(jsonObject: JsonObject) = viewModelScope.launch {
|
||||||
|
loginResponse.postValue(Result.Loading())
|
||||||
|
repository.login(jsonObject).let {
|
||||||
|
loginResponse.postValue(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user