Download: Save and show download datetime
Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user