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( @Database(
entities = [Download::class, Favourite::class, Update::class], entities = [Download::class, Favourite::class, Update::class],
version = 4, version = 5,
exportSchema = false exportSchema = false
) )
@TypeConverters(DownloadConverter::class) @TypeConverters(DownloadConverter::class)

View File

@@ -10,17 +10,14 @@ import androidx.sqlite.db.SupportSQLiteDatabase
*/ */
object MigrationHelper { 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) { val MIGRATION_3_4 = object : Migration(3, 4) {
override fun migrate(db: SupportSQLiteDatabase) = migrateFrom3To4(db) 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" private const val TAG = "MigrationHelper"
/** /**
@@ -39,4 +36,19 @@ object MigrationHelper {
database.endTransaction() 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 android.content.Context
import androidx.room.Room 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_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.DownloadConverter
import com.aurora.store.data.room.download.DownloadDao import com.aurora.store.data.room.download.DownloadDao
import com.aurora.store.data.room.favourite.FavouriteDao import com.aurora.store.data.room.favourite.FavouriteDao
@@ -28,7 +28,7 @@ object RoomModule {
downloadConverter: DownloadConverter downloadConverter: DownloadConverter
): AuroraDatabase { ): AuroraDatabase {
return Room.databaseBuilder(context, AuroraDatabase::class.java, DATABASE) return Room.databaseBuilder(context, AuroraDatabase::class.java, DATABASE)
.addMigrations(MIGRATION_3_4, MIGRATION_1_4) .addMigrations(MIGRATION_3_4, MIGRATION_4_5)
.addTypeConverter(downloadConverter) .addTypeConverter(downloadConverter)
.build() .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.model.DownloadStatus
import com.aurora.store.data.room.update.Update import com.aurora.store.data.room.update.Update
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
import java.util.Date
@Parcelize @Parcelize
@Entity(tableName = "download") @Entity(tableName = "download")
@@ -29,6 +30,7 @@ data class Download(
var fileList: List<File>, var fileList: List<File>,
val sharedLibs: List<SharedLib>, val sharedLibs: List<SharedLib>,
val targetSdk: Int = 1, val targetSdk: Int = 1,
val downloadedAt: Long = 0
) : Parcelable { ) : Parcelable {
val isFinished get() = downloadStatus in DownloadStatus.finished val isFinished get() = downloadStatus in DownloadStatus.finished
val isRunning get() = downloadStatus in DownloadStatus.running val isRunning get() = downloadStatus in DownloadStatus.running
@@ -52,7 +54,8 @@ data class Download(
0, 0,
app.fileList.filterNot { it.url.isBlank() }, app.fileList.filterNot { it.url.isBlank() },
app.dependencies.dependentLibraries.map { SharedLib.fromApp(it) }, app.dependencies.dependentLibraries.map { SharedLib.fromApp(it) },
app.targetSdk app.targetSdk,
Date().time
) )
} }
@@ -74,7 +77,8 @@ data class Download(
0, 0,
update.fileList, update.fileList,
update.sharedLibs, update.sharedLibs,
update.targetSdk update.targetSdk,
Date().time
) )
} }
} }

View File

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