DownloadWorker: Avoid passing download data as input

Parsing the data otherwise pukes error on old Android versions due to size

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2025-01-12 09:26:54 +07:00
parent d69ec391ed
commit 34833abb50
2 changed files with 6 additions and 11 deletions

View File

@@ -15,7 +15,6 @@ import com.aurora.store.data.room.download.DownloadDao
import com.aurora.store.data.room.update.Update import com.aurora.store.data.room.update.Update
import com.aurora.store.data.work.DownloadWorker import com.aurora.store.data.work.DownloadWorker
import com.aurora.store.util.PathUtil import com.aurora.store.util.PathUtil
import com.google.gson.Gson
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.collectLatest
@@ -30,17 +29,15 @@ import javax.inject.Inject
*/ */
class DownloadHelper @Inject constructor( class DownloadHelper @Inject constructor(
@ApplicationContext private val context: Context, @ApplicationContext private val context: Context,
private val downloadDao: DownloadDao, private val downloadDao: DownloadDao
private val gson: Gson
) { ) {
companion object { companion object {
const val DOWNLOAD_WORKER = "DOWNLOAD_WORKER" const val DOWNLOAD_WORKER = "DOWNLOAD_WORKER"
const val DOWNLOAD_DATA = "DOWNLOAD_DATA" const val PACKAGE_NAME = "PACKAGE_NAME"
private const val DOWNLOAD_APP = "DOWNLOAD_APP" private const val DOWNLOAD_APP = "DOWNLOAD_APP"
private const val DOWNLOAD_UPDATE = "DOWNLOAD_UPDATE" private const val DOWNLOAD_UPDATE = "DOWNLOAD_UPDATE"
private const val PACKAGE_NAME = "PACKAGE_NAME"
private const val VERSION_CODE = "VERSION_CODE" private const val VERSION_CODE = "VERSION_CODE"
} }
@@ -166,7 +163,7 @@ class DownloadHelper @Inject constructor(
private fun trigger(download: Download) { private fun trigger(download: Download) {
val inputData = Data.Builder() val inputData = Data.Builder()
.putString(DOWNLOAD_DATA, gson.toJson(download)) .putString(PACKAGE_NAME, download.packageName)
.build() .build()
val work = OneTimeWorkRequestBuilder<DownloadWorker>() val work = OneTimeWorkRequestBuilder<DownloadWorker>()

View File

@@ -34,7 +34,6 @@ import com.aurora.store.data.room.download.DownloadDao
import com.aurora.store.util.CertUtil import com.aurora.store.util.CertUtil
import com.aurora.store.util.NotificationUtil import com.aurora.store.util.NotificationUtil
import com.aurora.store.util.PathUtil import com.aurora.store.util.PathUtil
import com.google.gson.Gson
import dagger.assisted.Assisted import dagger.assisted.Assisted
import dagger.assisted.AssistedInject import dagger.assisted.AssistedInject
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
@@ -56,7 +55,6 @@ import com.aurora.gplayapi.data.models.File as GPlayFile
@HiltWorker @HiltWorker
class DownloadWorker @AssistedInject constructor( class DownloadWorker @AssistedInject constructor(
private val downloadDao: DownloadDao, private val downloadDao: DownloadDao,
private val gson: Gson,
private val appInstaller: AppInstaller, private val appInstaller: AppInstaller,
private val authProvider: AuthProvider, private val authProvider: AuthProvider,
private val httpClient: IHttpClient, private val httpClient: IHttpClient,
@@ -89,10 +87,10 @@ class DownloadWorker @AssistedInject constructor(
return Result.failure() return Result.failure()
} }
// Try to parse input data into a valid app // Fetch required data for download
try { try {
val downloadData = inputData.getString(DownloadHelper.DOWNLOAD_DATA) val packageName = inputData.getString(DownloadHelper.PACKAGE_NAME)
download = gson.fromJson(downloadData, Download::class.java) download = downloadDao.getDownload(packageName!!)
val bitmap = BitmapFactory.decodeStream(withContext(Dispatchers.IO) { val bitmap = BitmapFactory.decodeStream(withContext(Dispatchers.IO) {
(httpClient as HttpClient).call(download.iconURL).body!!.byteStream() (httpClient as HttpClient).call(download.iconURL).body!!.byteStream()