From b0d348cf6d66dc878a05086aafd6f7b896098618 Mon Sep 17 00:00:00 2001 From: Mariya Date: Wed, 3 Jan 2024 14:49:41 +0530 Subject: [PATCH] Implement - In app update after getting the new update link from check update response --- .../dashboard/DashboardActivity.kt | 51 +++++++++++++++---- .../presentation/dashboard/HomeFragment.kt | 9 ++++ .../hemocube/HemoCubeViewModel.kt | 2 +- 3 files changed, 51 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/example/hpostesting/presentation/dashboard/DashboardActivity.kt b/app/src/main/java/com/example/hpostesting/presentation/dashboard/DashboardActivity.kt index ff3ef97..a8cf290 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/dashboard/DashboardActivity.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/dashboard/DashboardActivity.kt @@ -4,10 +4,7 @@ import android.app.DownloadManager import android.content.BroadcastReceiver import android.content.Context import android.content.Intent -import android.content.Intent.ACTION_INSTALL_PACKAGE import android.content.IntentFilter -import android.content.pm.PackageManager -import android.content.pm.ResolveInfo import android.net.Uri import android.os.Bundle import android.util.Log @@ -16,21 +13,27 @@ import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.core.content.FileProvider import androidx.drawerlayout.widget.DrawerLayout +import androidx.lifecycle.Observer import androidx.navigation.findNavController import androidx.navigation.ui.AppBarConfiguration import androidx.navigation.ui.navigateUp import androidx.navigation.ui.setupActionBarWithNavController import androidx.navigation.ui.setupWithNavController +import com.example.hpostesting.data.Result import com.example.hpostesting.data.constant.LanguageManager +import com.example.hpostesting.presentation.hemocube.HemoCubeViewModel import com.google.android.material.navigation.NavigationView 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.hpostesting.preprod.R -import `in`.sminnovations.hpostesting.preprod.databinding.ActivityDashboardBinding +import `in`.sminnovations.hpostesting.R +import `in`.sminnovations.hpostesting.databinding.ActivityDashboardBinding +import okhttp3.ResponseBody + import java.io.File +import javax.inject.Inject @AndroidEntryPoint class DashboardActivity : AppCompatActivity() { @@ -38,6 +41,8 @@ class DashboardActivity : AppCompatActivity() { private lateinit var appBarConfiguration: AppBarConfiguration private lateinit var binding: ActivityDashboardBinding private var downloadId: Long = 0 + @Inject + lateinit var hemocubeViewModel: HemoCubeViewModel override fun attachBaseContext(newBase: Context?) { val languageCode = LanguageManager.getSavedLanguage(newBase!!) LanguageManager.setLocale(newBase, languageCode) @@ -50,7 +55,33 @@ class DashboardActivity : AppCompatActivity() { binding = ActivityDashboardBinding.inflate(layoutInflater) setContentView(binding.root) setSupportActionBar(binding.appBarDashboard.toolbar) - initiateUpdate() + + hemocubeViewModel.deviceUpdate.observe(this) { result -> + when (result) { + is Result.Success -> { + // Handle success + val apkUrl = result.data + initiateUpdate(apkUrl) + // The APK URL LiveData will be updated automatically + } + + is Result.Error -> { + // Handle error + val error = result.exception + // Handle error... + } + + is Result.Loading -> { + // Handle loading state + } + + else -> { + + } + } + } + + val drawerLayout: DrawerLayout = binding.drawerLayout val navView: NavigationView = binding.navView val navController = findNavController(R.id.nav_host_fragment_content_dashboard) @@ -63,6 +94,8 @@ class DashboardActivity : AppCompatActivity() { setupActionBarWithNavController(navController, appBarConfiguration) navView.setupWithNavController(navController) + + } override fun onCreateOptionsMenu(menu: Menu): Boolean { @@ -76,10 +109,8 @@ class DashboardActivity : AppCompatActivity() { return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp() } - private fun initiateUpdate() { - val apkUrl = "https://www.dropbox.com/scl/fi/v0hux8qrby54rjns8mhum/hpos-testing_preprod_2.1.27.apk?rlkey=ias0fe0zq72avy01rk4cvzmvp&dl=1" - - val request = DownloadManager.Request(Uri.parse(apkUrl)) + private fun initiateUpdate(apkUrl: ResponseBody) { + val request = DownloadManager.Request(Uri.parse(apkUrl.toString())) request.setTitle("App Update") request.setDescription("Downloading update...") request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED) diff --git a/app/src/main/java/com/example/hpostesting/presentation/dashboard/HomeFragment.kt b/app/src/main/java/com/example/hpostesting/presentation/dashboard/HomeFragment.kt index 788e69f..ad16acc 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/dashboard/HomeFragment.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/dashboard/HomeFragment.kt @@ -24,6 +24,7 @@ import com.example.hpostesting.data.model.login.LoginResponse import com.example.hpostesting.data.model.patient.HemoCubeTestData import com.example.hpostesting.data.model.patient.UserData import com.example.hpostesting.data.model.updates.CheckUpdateRequest +import com.example.hpostesting.data.model.updates.DeviceUpdateRequest import com.example.hpostesting.presentation.KitScanActivity import com.example.hpostesting.presentation.adapter.OfflineUserListAdapter import com.example.hpostesting.presentation.adapter.UserListAdapter @@ -150,6 +151,7 @@ class HomeFragment : Fragment() { } else { hemoCubeViewModel.checkUpdate(createCheckUpdateRequestData()) hemoCubeViewModel.uploadLogs() + hemoCubeViewModel.deviceUpdate(createDeviceRequestData()) } } hemoCubeViewModel.loginResponse.observe(viewLifecycleOwner) { response -> @@ -260,6 +262,13 @@ class HomeFragment : Fragment() { ) } + private fun createDeviceRequestData(): DeviceUpdateRequest { + return DeviceUpdateRequest( + serial_no = Constants.serialNumber + + ) + } + private fun setUserId() { binding.btnSubmit.setOnClickListener { val userId = binding.userId.text.toString() diff --git a/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeViewModel.kt b/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeViewModel.kt index 5b3043a..706b4c5 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeViewModel.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/hemocube/HemoCubeViewModel.kt @@ -156,7 +156,7 @@ class HemoCubeViewModel @Inject constructor( val logFile = logFileManager.createLogFile().let { file -> val requestBody = file?.asRequestBody("multipart/form-data".toMediaTypeOrNull()) val multipartFile = - requestBody?.let { MultipartBody.Part.createFormData("logFile", file.name, it) } + requestBody?.let { MultipartBody.Part.createFormData("logFile", file?.name, it) } multipartFile?.let { partFile -> databaseRepository.uploadLogs(partFile).let { result -> uploadLogs.postValue(result)