Download: Save and show download datetime

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2024-11-23 17:26:20 +07:00
parent ce08a08b9f
commit 8c104ce12f
5 changed files with 60 additions and 27 deletions

View File

@@ -13,7 +13,7 @@ import com.aurora.store.data.room.update.UpdateDao
@Database(
entities = [Download::class, Favourite::class, Update::class],
version = 4,
version = 5,
exportSchema = false
)
@TypeConverters(DownloadConverter::class)

View File

@@ -10,17 +10,14 @@ import androidx.sqlite.db.SupportSQLiteDatabase
*/
object MigrationHelper {
// ADD ALL NEW MIGRATION STEPS HERE TOO
val MIGRATION_1_4 = object : Migration(1, 4) {
override fun migrate(db: SupportSQLiteDatabase) {
migrateFrom3To4(db)
}
}
val MIGRATION_3_4 = object : Migration(3, 4) {
override fun migrate(db: SupportSQLiteDatabase) = migrateFrom3To4(db)
}
val MIGRATION_4_5 = object : Migration(4, 5) {
override fun migrate(db: SupportSQLiteDatabase) = migrateFrom4To5(db)
}
private const val TAG = "MigrationHelper"
/**
@@ -39,4 +36,19 @@ object MigrationHelper {
database.endTransaction()
}
}
/**
* Add downloadedAt column to download table for showing installation/update date of apps.
*/
private fun migrateFrom4To5(database: SupportSQLiteDatabase) {
database.beginTransaction()
try {
database.execSQL("ALTER TABLE `download` ADD COLUMN downloadedAt INTEGER NOT NULL DEFAULT 0")
database.setTransactionSuccessful()
} catch (exception: Exception) {
Log.e(TAG, "Failed while migrating from database version 4 to 5", exception)
} finally {
database.endTransaction()
}
}
}

View File

@@ -2,8 +2,8 @@ package com.aurora.store.data.room
import android.content.Context
import androidx.room.Room
import com.aurora.store.data.room.MigrationHelper.MIGRATION_1_4
import com.aurora.store.data.room.MigrationHelper.MIGRATION_3_4
import com.aurora.store.data.room.MigrationHelper.MIGRATION_4_5
import com.aurora.store.data.room.download.DownloadConverter
import com.aurora.store.data.room.download.DownloadDao
import com.aurora.store.data.room.favourite.FavouriteDao
@@ -28,7 +28,7 @@ object RoomModule {
downloadConverter: DownloadConverter
): AuroraDatabase {
return Room.databaseBuilder(context, AuroraDatabase::class.java, DATABASE)
.addMigrations(MIGRATION_3_4, MIGRATION_1_4)
.addMigrations(MIGRATION_3_4, MIGRATION_4_5)
.addTypeConverter(downloadConverter)
.build()
}

View File

@@ -8,6 +8,7 @@ import com.aurora.gplayapi.data.models.File
import com.aurora.store.data.model.DownloadStatus
import com.aurora.store.data.room.update.Update
import kotlinx.parcelize.Parcelize
import java.util.Date
@Parcelize
@Entity(tableName = "download")
@@ -29,6 +30,7 @@ data class Download(
var fileList: List<File>,
val sharedLibs: List<SharedLib>,
val targetSdk: Int = 1,
val downloadedAt: Long = 0
) : Parcelable {
val isFinished get() = downloadStatus in DownloadStatus.finished
val isRunning get() = downloadStatus in DownloadStatus.running
@@ -52,7 +54,8 @@ data class Download(
0,
app.fileList.filterNot { it.url.isBlank() },
app.dependencies.dependentLibraries.map { SharedLib.fromApp(it) },
app.targetSdk
app.targetSdk,
Date().time
)
}
@@ -74,7 +77,8 @@ data class Download(
0,
update.fileList,
update.sharedLibs,
update.targetSdk
update.targetSdk,
Date().time
)
}
}

View File

@@ -20,6 +20,7 @@
package com.aurora.store.view.ui.downloads
import android.os.Bundle
import android.text.format.DateUtils
import android.view.View
import androidx.core.content.ContextCompat
import androidx.lifecycle.lifecycleScope
@@ -31,12 +32,14 @@ import com.aurora.store.data.helper.DownloadHelper
import com.aurora.store.data.room.download.Download
import com.aurora.store.databinding.FragmentDownloadBinding
import com.aurora.store.view.epoxy.views.DownloadViewModel_
import com.aurora.store.view.epoxy.views.TextDividerViewModel_
import com.aurora.store.view.epoxy.views.app.NoAppViewModel_
import com.aurora.store.view.ui.commons.BaseFragment
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.NonCancellable
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
import java.util.Date
import javax.inject.Inject
@AndroidEntryPoint
@@ -98,23 +101,37 @@ class DownloadFragment : BaseFragment<FragmentDownloadBinding>() {
.message(getString(R.string.download_none))
)
} else {
downloads.forEach {
downloads.groupBy {
DateUtils.getRelativeTimeSpanString(
it.downloadedAt,
Date().time,
DateUtils.DAY_IN_MILLIS
).toString()
}.forEach { (date, downloadList) ->
add(
DownloadViewModel_()
.id(it.packageName)
.download(it)
.click { _ ->
if (it.packageName == requireContext().packageName) {
requireContext().browse(GITLAB_URL)
} else {
openDetailsFragment(it.packageName)
}
}
.longClick { _ ->
openDownloadMenuSheet(it.packageName)
true
}
TextDividerViewModel_()
.id(date)
.title(date)
)
downloadList.forEach {
add(
DownloadViewModel_()
.id(it.packageName)
.download(it)
.click { _ ->
if (it.packageName == requireContext().packageName) {
requireContext().browse(GITLAB_URL)
} else {
openDetailsFragment(it.packageName)
}
}
.longClick { _ ->
openDownloadMenuSheet(it.packageName)
true
}
)
}
}
}
}