From e95b3aeea3bd85079b7e0f0a244e21e7bafc2a2e Mon Sep 17 00:00:00 2001 From: machiav3lli Date: Fri, 4 Feb 2022 01:17:48 +0100 Subject: [PATCH] Update: Migrating Release to a database.entity --- .../kotlin/com/looker/droidify/database/Converters.kt | 2 +- .../com/looker/droidify/database/entity/Product.kt | 1 - .../looker/droidify/{ => database}/entity/Release.kt | 10 ++++++++-- src/main/kotlin/com/looker/droidify/entity/Product.kt | 1 + .../kotlin/com/looker/droidify/index/IndexHandler.kt | 4 +++- .../kotlin/com/looker/droidify/index/IndexMerger.kt | 2 +- .../kotlin/com/looker/droidify/index/IndexV1Parser.kt | 8 +++++--- .../com/looker/droidify/index/RepositoryUpdater.kt | 2 +- .../kotlin/com/looker/droidify/screen/MessageDialog.kt | 2 +- .../com/looker/droidify/service/DownloadService.kt | 2 +- .../looker/droidify/ui/adapters/AppDetailAdapter.kt | 9 +-------- .../looker/droidify/ui/fragments/AppDetailFragment.kt | 2 +- 12 files changed, 24 insertions(+), 21 deletions(-) rename src/main/kotlin/com/looker/droidify/{ => database}/entity/Release.kt (95%) diff --git a/src/main/kotlin/com/looker/droidify/database/Converters.kt b/src/main/kotlin/com/looker/droidify/database/Converters.kt index ddfb8f36..ef367e15 100644 --- a/src/main/kotlin/com/looker/droidify/database/Converters.kt +++ b/src/main/kotlin/com/looker/droidify/database/Converters.kt @@ -1,7 +1,7 @@ package com.looker.droidify.database import androidx.room.TypeConverter -import com.looker.droidify.entity.Release +import com.looker.droidify.database.entity.Release import com.looker.droidify.utility.jsonGenerate import com.looker.droidify.utility.jsonParse diff --git a/src/main/kotlin/com/looker/droidify/database/entity/Product.kt b/src/main/kotlin/com/looker/droidify/database/entity/Product.kt index 5eca54b2..6912790d 100644 --- a/src/main/kotlin/com/looker/droidify/database/entity/Product.kt +++ b/src/main/kotlin/com/looker/droidify/database/entity/Product.kt @@ -3,7 +3,6 @@ package com.looker.droidify.database.entity import androidx.room.ColumnInfo import androidx.room.Entity import com.looker.droidify.entity.ProductItem -import com.looker.droidify.entity.Release @Entity(tableName = "product", primaryKeys = ["repository_id", "package_name"]) open class Product { diff --git a/src/main/kotlin/com/looker/droidify/entity/Release.kt b/src/main/kotlin/com/looker/droidify/database/entity/Release.kt similarity index 95% rename from src/main/kotlin/com/looker/droidify/entity/Release.kt rename to src/main/kotlin/com/looker/droidify/database/entity/Release.kt index f3d710e6..af040366 100644 --- a/src/main/kotlin/com/looker/droidify/entity/Release.kt +++ b/src/main/kotlin/com/looker/droidify/database/entity/Release.kt @@ -1,14 +1,16 @@ -package com.looker.droidify.entity +package com.looker.droidify.database.entity import android.net.Uri +import androidx.room.Entity import com.fasterxml.jackson.core.JsonGenerator import com.fasterxml.jackson.core.JsonParser import com.fasterxml.jackson.core.JsonToken -import com.looker.droidify.database.entity.Repository import com.looker.droidify.utility.extension.json.* // TODO make a Room entity +@Entity(primaryKeys = ["packageName", "versionCode", "signature"]) data class Release( + val packageName: String, val selected: Boolean, val version: String, val versionCode: Long, @@ -51,6 +53,7 @@ data class Release( get() = "${hash.replace('/', '-')}.apk" fun serialize(generator: JsonGenerator) { + generator.writeStringField("packageName", packageName) generator.writeNumberField("serialVersion", 1) generator.writeBooleanField("selected", selected) generator.writeStringField("version", version) @@ -99,6 +102,7 @@ data class Release( companion object { fun deserialize(parser: JsonParser): Release { + var packageName = "" var selected = false var version = "" var versionCode = 0L @@ -124,6 +128,7 @@ data class Release( var incompatibilities = emptyList() parser.forEachKey { it -> when { + it.string("packageName") -> packageName = valueAsString it.boolean("selected") -> selected = valueAsBoolean it.string("version") -> version = valueAsString it.number("versionCode") -> versionCode = valueAsLong @@ -169,6 +174,7 @@ data class Release( } } return Release( + packageName, selected, version, versionCode, diff --git a/src/main/kotlin/com/looker/droidify/entity/Product.kt b/src/main/kotlin/com/looker/droidify/entity/Product.kt index 8cfd1dd7..b833e8f7 100644 --- a/src/main/kotlin/com/looker/droidify/entity/Product.kt +++ b/src/main/kotlin/com/looker/droidify/entity/Product.kt @@ -4,6 +4,7 @@ import com.fasterxml.jackson.core.JsonGenerator import com.fasterxml.jackson.core.JsonParser import com.fasterxml.jackson.core.JsonToken import com.looker.droidify.database.entity.Installed +import com.looker.droidify.database.entity.Release import com.looker.droidify.utility.extension.json.* import com.looker.droidify.utility.extension.text.nullIfEmpty diff --git a/src/main/kotlin/com/looker/droidify/index/IndexHandler.kt b/src/main/kotlin/com/looker/droidify/index/IndexHandler.kt index 14c40020..3969ea17 100644 --- a/src/main/kotlin/com/looker/droidify/index/IndexHandler.kt +++ b/src/main/kotlin/com/looker/droidify/index/IndexHandler.kt @@ -1,7 +1,7 @@ package com.looker.droidify.index +import com.looker.droidify.database.entity.Release import com.looker.droidify.entity.Product -import com.looker.droidify.entity.Release import com.looker.droidify.utility.extension.android.Android import org.xml.sax.Attributes import org.xml.sax.helpers.DefaultHandler @@ -116,6 +116,7 @@ class IndexHandler(private val repositoryId: Long, private val callback: Callbac } private class ReleaseBuilder { + var packageName = "" var version = "" var versionCode = 0L var added = 0L @@ -141,6 +142,7 @@ class IndexHandler(private val repositoryId: Long, private val callback: Callbac val obbMainHashType = if (obbMainHash.isNotEmpty()) "sha256" else "" val obbPatchHashType = if (obbPatchHash.isNotEmpty()) "sha256" else "" return Release( + packageName, false, version, versionCode, diff --git a/src/main/kotlin/com/looker/droidify/index/IndexMerger.kt b/src/main/kotlin/com/looker/droidify/index/IndexMerger.kt index 81e37f28..b5fd4a16 100644 --- a/src/main/kotlin/com/looker/droidify/index/IndexMerger.kt +++ b/src/main/kotlin/com/looker/droidify/index/IndexMerger.kt @@ -3,8 +3,8 @@ package com.looker.droidify.index import android.content.ContentValues import android.database.sqlite.SQLiteDatabase import com.fasterxml.jackson.core.JsonToken +import com.looker.droidify.database.entity.Release import com.looker.droidify.entity.Product -import com.looker.droidify.entity.Release import com.looker.droidify.utility.extension.android.asSequence import com.looker.droidify.utility.extension.android.execWithResult import com.looker.droidify.utility.extension.json.Json diff --git a/src/main/kotlin/com/looker/droidify/index/IndexV1Parser.kt b/src/main/kotlin/com/looker/droidify/index/IndexV1Parser.kt index 8c8d7954..464f4b9f 100644 --- a/src/main/kotlin/com/looker/droidify/index/IndexV1Parser.kt +++ b/src/main/kotlin/com/looker/droidify/index/IndexV1Parser.kt @@ -2,8 +2,8 @@ package com.looker.droidify.index import com.fasterxml.jackson.core.JsonParser import com.fasterxml.jackson.core.JsonToken +import com.looker.droidify.database.entity.Release import com.looker.droidify.entity.Product -import com.looker.droidify.entity.Release import com.looker.droidify.utility.extension.android.Android import com.looker.droidify.utility.extension.json.* import com.looker.droidify.utility.extension.text.nullIfEmpty @@ -91,7 +91,8 @@ object IndexV1Parser { it.dictionary("packages") -> forEachKey { if (it.token == JsonToken.START_ARRAY) { val packageName = it.key - val releases = collectNotNull(JsonToken.START_OBJECT) { parseRelease() } + val releases = + collectNotNull(JsonToken.START_OBJECT) { parseRelease(packageName) } callback.onReleases(packageName, releases) } else { skipChildren() @@ -250,7 +251,7 @@ object IndexV1Parser { ) } - private fun JsonParser.parseRelease(): Release { + private fun JsonParser.parseRelease(packageName: String): Release { var version = "" var versionCode = 0L var added = 0L @@ -300,6 +301,7 @@ object IndexV1Parser { val obbMainHashType = if (obbMainHash.isNotEmpty()) "sha256" else "" val obbPatchHashType = if (obbPatchHash.isNotEmpty()) "sha256" else "" return Release( + packageName, false, version, versionCode, diff --git a/src/main/kotlin/com/looker/droidify/index/RepositoryUpdater.kt b/src/main/kotlin/com/looker/droidify/index/RepositoryUpdater.kt index e8b1fb68..ac090f01 100644 --- a/src/main/kotlin/com/looker/droidify/index/RepositoryUpdater.kt +++ b/src/main/kotlin/com/looker/droidify/index/RepositoryUpdater.kt @@ -4,9 +4,9 @@ import android.content.Context import android.net.Uri import com.looker.droidify.content.Cache import com.looker.droidify.database.DatabaseX +import com.looker.droidify.database.entity.Release import com.looker.droidify.database.entity.Repository import com.looker.droidify.entity.Product -import com.looker.droidify.entity.Release import com.looker.droidify.network.Downloader import com.looker.droidify.utility.ProgressInputStream import com.looker.droidify.utility.RxUtils diff --git a/src/main/kotlin/com/looker/droidify/screen/MessageDialog.kt b/src/main/kotlin/com/looker/droidify/screen/MessageDialog.kt index d91d7954..a9070e77 100644 --- a/src/main/kotlin/com/looker/droidify/screen/MessageDialog.kt +++ b/src/main/kotlin/com/looker/droidify/screen/MessageDialog.kt @@ -10,7 +10,7 @@ import androidx.fragment.app.DialogFragment import androidx.fragment.app.FragmentManager import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.looker.droidify.R -import com.looker.droidify.entity.Release +import com.looker.droidify.database.entity.Release import com.looker.droidify.ui.fragments.RepositorySheetX import com.looker.droidify.utility.KParcelable import com.looker.droidify.utility.PackageItemResolver diff --git a/src/main/kotlin/com/looker/droidify/service/DownloadService.kt b/src/main/kotlin/com/looker/droidify/service/DownloadService.kt index 2d5190c9..0d878e02 100644 --- a/src/main/kotlin/com/looker/droidify/service/DownloadService.kt +++ b/src/main/kotlin/com/looker/droidify/service/DownloadService.kt @@ -9,8 +9,8 @@ import android.view.ContextThemeWrapper import androidx.core.app.NotificationCompat import com.looker.droidify.* import com.looker.droidify.content.Cache +import com.looker.droidify.database.entity.Release import com.looker.droidify.database.entity.Repository -import com.looker.droidify.entity.Release import com.looker.droidify.installer.AppInstaller import com.looker.droidify.network.Downloader import com.looker.droidify.ui.activities.MainActivityX diff --git a/src/main/kotlin/com/looker/droidify/ui/adapters/AppDetailAdapter.kt b/src/main/kotlin/com/looker/droidify/ui/adapters/AppDetailAdapter.kt index d11383d2..b7f83299 100644 --- a/src/main/kotlin/com/looker/droidify/ui/adapters/AppDetailAdapter.kt +++ b/src/main/kotlin/com/looker/droidify/ui/adapters/AppDetailAdapter.kt @@ -44,10 +44,10 @@ import com.looker.droidify.R import com.looker.droidify.content.Preferences import com.looker.droidify.content.ProductPreferences import com.looker.droidify.database.entity.Installed +import com.looker.droidify.database.entity.Release import com.looker.droidify.database.entity.Repository import com.looker.droidify.entity.Product import com.looker.droidify.entity.ProductPreference -import com.looker.droidify.entity.Release import com.looker.droidify.network.CoilDownloader import com.looker.droidify.screen.ScreenshotsAdapter import com.looker.droidify.utility.KParcelable @@ -1412,13 +1412,6 @@ class AppDetailAdapter(private val callbacks: Callbacks) : holder.packageName.text = item.packageName } }::class - } - - private fun formatHtml(text: String): SpannableStringBuilder { - val html = HtmlCompat.fromHtml(text, HtmlCompat.FROM_HTML_MODE_LEGACY) - val builder = run { - val builder = SpannableStringBuilder(html) - val last = builder.indexOfLast { it != '\n' } val first = builder.indexOfFirst { it != '\n' } if (last >= 0) { builder.delete(last + 1, builder.length) diff --git a/src/main/kotlin/com/looker/droidify/ui/fragments/AppDetailFragment.kt b/src/main/kotlin/com/looker/droidify/ui/fragments/AppDetailFragment.kt index 64c9877e..59dc50bb 100644 --- a/src/main/kotlin/com/looker/droidify/ui/fragments/AppDetailFragment.kt +++ b/src/main/kotlin/com/looker/droidify/ui/fragments/AppDetailFragment.kt @@ -17,10 +17,10 @@ import androidx.recyclerview.widget.RecyclerView import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.looker.droidify.R import com.looker.droidify.content.ProductPreferences +import com.looker.droidify.database.entity.Release import com.looker.droidify.database.entity.Repository import com.looker.droidify.entity.Product import com.looker.droidify.entity.ProductPreference -import com.looker.droidify.entity.Release import com.looker.droidify.installer.AppInstaller import com.looker.droidify.screen.MessageDialog import com.looker.droidify.screen.ScreenFragment