diff --git a/src/main/kotlin/com/looker/droidify/content/ProductPreferences.kt b/src/main/kotlin/com/looker/droidify/content/ProductPreferences.kt index c25473e6..eb7b6dfa 100644 --- a/src/main/kotlin/com/looker/droidify/content/ProductPreferences.kt +++ b/src/main/kotlin/com/looker/droidify/content/ProductPreferences.kt @@ -3,7 +3,7 @@ package com.looker.droidify.content import android.content.Context import android.content.SharedPreferences import com.looker.droidify.database.DatabaseX -import com.looker.droidify.database.Lock +import com.looker.droidify.database.entity.Lock import com.looker.droidify.entity.ProductPreference import com.looker.droidify.utility.extension.json.Json import com.looker.droidify.utility.extension.json.parseDictionary diff --git a/src/main/kotlin/com/looker/droidify/database/Converters.kt b/src/main/kotlin/com/looker/droidify/database/Converters.kt new file mode 100644 index 00000000..5d1c607a --- /dev/null +++ b/src/main/kotlin/com/looker/droidify/database/Converters.kt @@ -0,0 +1,34 @@ +package com.looker.droidify.database + +import androidx.room.TypeConverter +import com.looker.droidify.entity.ProductItem +import com.looker.droidify.entity.Repository +import com.looker.droidify.utility.jsonGenerate +import com.looker.droidify.utility.jsonParse + +object Converters { + @TypeConverter + @JvmStatic + fun toRepository(byteArray: ByteArray) = byteArray.jsonParse { Repository.deserialize(it) } + + @TypeConverter + @JvmStatic + fun toByteArray(repository: Repository) = jsonGenerate(repository::serialize) + + @TypeConverter + @JvmStatic + fun toProduct(byteArray: ByteArray) = + byteArray.jsonParse { com.looker.droidify.entity.Product.deserialize(it) } + + @TypeConverter + @JvmStatic + fun toByteArray(product: com.looker.droidify.entity.Product) = jsonGenerate(product::serialize) + + @TypeConverter + @JvmStatic + fun toProductItem(byteArray: ByteArray) = byteArray.jsonParse { ProductItem.deserialize(it) } + + @TypeConverter + @JvmStatic + fun toByteArray(productItem: ProductItem) = jsonGenerate(productItem::serialize) +} \ No newline at end of file diff --git a/src/main/kotlin/com/looker/droidify/database/DAOs.kt b/src/main/kotlin/com/looker/droidify/database/DAOs.kt index 0703980c..281bef49 100644 --- a/src/main/kotlin/com/looker/droidify/database/DAOs.kt +++ b/src/main/kotlin/com/looker/droidify/database/DAOs.kt @@ -8,6 +8,7 @@ import androidx.room.* import androidx.sqlite.db.SimpleSQLiteQuery import androidx.sqlite.db.SupportSQLiteQuery import com.looker.droidify.* +import com.looker.droidify.database.entity.* import com.looker.droidify.entity.ProductItem import io.reactivex.rxjava3.core.Flowable diff --git a/src/main/kotlin/com/looker/droidify/database/DatabaseX.kt b/src/main/kotlin/com/looker/droidify/database/DatabaseX.kt index 949b16b7..b6aa546b 100644 --- a/src/main/kotlin/com/looker/droidify/database/DatabaseX.kt +++ b/src/main/kotlin/com/looker/droidify/database/DatabaseX.kt @@ -5,6 +5,7 @@ import androidx.room.Database import androidx.room.Room import androidx.room.RoomDatabase import androidx.room.TypeConverters +import com.looker.droidify.database.entity.* import com.looker.droidify.entity.Repository.Companion.defaultRepositories import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope diff --git a/src/main/kotlin/com/looker/droidify/database/Tables.kt b/src/main/kotlin/com/looker/droidify/database/Tables.kt deleted file mode 100644 index 9a928b18..00000000 --- a/src/main/kotlin/com/looker/droidify/database/Tables.kt +++ /dev/null @@ -1,113 +0,0 @@ -package com.looker.droidify.database - -import androidx.room.ColumnInfo -import androidx.room.Entity -import androidx.room.PrimaryKey -import androidx.room.TypeConverter -import com.looker.droidify.entity.ProductItem -import com.looker.droidify.entity.Repository -import com.looker.droidify.utility.jsonGenerate -import com.looker.droidify.utility.jsonParse - -// TODO LATER: reduce redundancy by merging the entity and database classes -@Entity -class Repository { - @PrimaryKey(autoGenerate = true) - @ColumnInfo(name = "_id") - var id: Long = 0 - - var enabled = 0 - var deleted = false - - @ColumnInfo(typeAffinity = ColumnInfo.BLOB) - var data: Repository? = null - - val trueData: Repository? - get() = data?.copy(id = id) - - class IdAndDeleted { - @ColumnInfo(name = "_id") - var id = 0L - - var deleted = false - } -} - -@Entity(tableName = "product", primaryKeys = ["repository_id", "package_name"]) -open class Product { - var repository_id = 0L - var package_name = "" - - var name = "" - var summary = "" - var description = "" - var added = 0L - var updated = 0L - var version_code = 0L - var signatures = "" - var compatible = 0 - - @ColumnInfo(typeAffinity = ColumnInfo.BLOB) - var data: com.looker.droidify.entity.Product? = null - - @ColumnInfo(typeAffinity = ColumnInfo.BLOB) - var data_item: ProductItem? = null -} - -@Entity(tableName = "temporary_product") -class ProductTemp : Product() - -@Entity(tableName = "category", primaryKeys = ["repository_id", "package_name", "name"]) -open class Category { - var repository_id: Long = 0 - var package_name = "" - var name = "" -} - -@Entity(tableName = "temporary_category") -class CategoryTemp : Category() - -@Entity(tableName = "memory_installed") -class Installed(pName: String = "") { - @PrimaryKey - var package_name = pName - - var version = "" - var version_code = 0L - var signature = "" -} - -@Entity(tableName = "memory_lock") -class Lock { - @PrimaryKey - var package_name = "" - - var version_code = 0L -} - -object Converters { - @TypeConverter - @JvmStatic - fun toRepository(byteArray: ByteArray) = byteArray.jsonParse { Repository.deserialize(it) } - - @TypeConverter - @JvmStatic - fun toByteArray(repository: Repository) = jsonGenerate(repository::serialize) - - @TypeConverter - @JvmStatic - fun toProduct(byteArray: ByteArray) = - byteArray.jsonParse { com.looker.droidify.entity.Product.deserialize(it) } - - @TypeConverter - @JvmStatic - fun toByteArray(product: com.looker.droidify.entity.Product) = jsonGenerate(product::serialize) - - @TypeConverter - @JvmStatic - fun toProductItem(byteArray: ByteArray) = byteArray.jsonParse { ProductItem.deserialize(it) } - - @TypeConverter - @JvmStatic - fun toByteArray(productItem: ProductItem) = jsonGenerate(productItem::serialize) -} \ No newline at end of file diff --git a/src/main/kotlin/com/looker/droidify/database/entity/Category.kt b/src/main/kotlin/com/looker/droidify/database/entity/Category.kt new file mode 100644 index 00000000..15d853ff --- /dev/null +++ b/src/main/kotlin/com/looker/droidify/database/entity/Category.kt @@ -0,0 +1,13 @@ +package com.looker.droidify.database.entity + +import androidx.room.Entity + +@Entity(tableName = "category", primaryKeys = ["repository_id", "package_name", "name"]) +open class Category { + var repository_id: Long = 0 + var package_name = "" + var name = "" +} + +@Entity(tableName = "temporary_category") +class CategoryTemp : Category() \ No newline at end of file diff --git a/src/main/kotlin/com/looker/droidify/database/entity/Installed.kt b/src/main/kotlin/com/looker/droidify/database/entity/Installed.kt new file mode 100644 index 00000000..56d101d9 --- /dev/null +++ b/src/main/kotlin/com/looker/droidify/database/entity/Installed.kt @@ -0,0 +1,14 @@ +package com.looker.droidify.database.entity + +import androidx.room.Entity +import androidx.room.PrimaryKey + +@Entity(tableName = "memory_installed") +class Installed(pName: String = "") { + @PrimaryKey + var package_name = pName + + var version = "" + var version_code = 0L + var signature = "" +} \ No newline at end of file diff --git a/src/main/kotlin/com/looker/droidify/database/entity/Lock.kt b/src/main/kotlin/com/looker/droidify/database/entity/Lock.kt new file mode 100644 index 00000000..6ddaafb4 --- /dev/null +++ b/src/main/kotlin/com/looker/droidify/database/entity/Lock.kt @@ -0,0 +1,11 @@ +package com.looker.droidify.database.entity + +import androidx.room.Entity +import androidx.room.PrimaryKey + +@Entity(tableName = "memory_lock") +class Lock { + @PrimaryKey + var package_name = "" + var version_code = 0L +} \ No newline at end of file diff --git a/src/main/kotlin/com/looker/droidify/database/entity/Product.kt b/src/main/kotlin/com/looker/droidify/database/entity/Product.kt new file mode 100644 index 00000000..8f86732a --- /dev/null +++ b/src/main/kotlin/com/looker/droidify/database/entity/Product.kt @@ -0,0 +1,29 @@ +package com.looker.droidify.database.entity + +import androidx.room.ColumnInfo +import androidx.room.Entity +import com.looker.droidify.entity.ProductItem + +@Entity(tableName = "product", primaryKeys = ["repository_id", "package_name"]) +open class Product { + var repository_id = 0L + var package_name = "" + + var name = "" + var summary = "" + var description = "" + var added = 0L + var updated = 0L + var version_code = 0L + var signatures = "" + var compatible = 0 + + @ColumnInfo(typeAffinity = ColumnInfo.BLOB) + var data: com.looker.droidify.entity.Product? = null + + @ColumnInfo(typeAffinity = ColumnInfo.BLOB) + var data_item: ProductItem? = null +} + +@Entity(tableName = "temporary_product") +class ProductTemp : Product() \ No newline at end of file diff --git a/src/main/kotlin/com/looker/droidify/database/entity/Repository.kt b/src/main/kotlin/com/looker/droidify/database/entity/Repository.kt new file mode 100644 index 00000000..0350c632 --- /dev/null +++ b/src/main/kotlin/com/looker/droidify/database/entity/Repository.kt @@ -0,0 +1,30 @@ +package com.looker.droidify.database.entity + +import androidx.room.ColumnInfo +import androidx.room.Entity +import androidx.room.PrimaryKey +import com.looker.droidify.entity.Repository + +// TODO LATER: reduce redundancy by merging the entity and database classes +@Entity +class Repository { + @PrimaryKey(autoGenerate = true) + @ColumnInfo(name = "_id") + var id: Long = 0 + + var enabled = 0 + var deleted = false + + @ColumnInfo(typeAffinity = ColumnInfo.BLOB) + var data: Repository? = null + + val trueData: Repository? + get() = data?.copy(id = id) + + class IdAndDeleted { + @ColumnInfo(name = "_id") + var id = 0L + + var deleted = false + } +} \ No newline at end of file diff --git a/src/main/kotlin/com/looker/droidify/entity/Product.kt b/src/main/kotlin/com/looker/droidify/entity/Product.kt index ad7792e8..8cfd1dd7 100644 --- a/src/main/kotlin/com/looker/droidify/entity/Product.kt +++ b/src/main/kotlin/com/looker/droidify/entity/Product.kt @@ -3,7 +3,7 @@ package com.looker.droidify.entity import com.fasterxml.jackson.core.JsonGenerator import com.fasterxml.jackson.core.JsonParser import com.fasterxml.jackson.core.JsonToken -import com.looker.droidify.database.Installed +import com.looker.droidify.database.entity.Installed import com.looker.droidify.utility.extension.json.* import com.looker.droidify.utility.extension.text.nullIfEmpty 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 dbedc472..ed2354d3 100644 --- a/src/main/kotlin/com/looker/droidify/ui/adapters/AppDetailAdapter.kt +++ b/src/main/kotlin/com/looker/droidify/ui/adapters/AppDetailAdapter.kt @@ -43,7 +43,7 @@ import com.google.android.material.textview.MaterialTextView import com.looker.droidify.R import com.looker.droidify.content.Preferences import com.looker.droidify.content.ProductPreferences -import com.looker.droidify.database.Installed +import com.looker.droidify.database.entity.Installed import com.looker.droidify.entity.* import com.looker.droidify.network.CoilDownloader import com.looker.droidify.screen.ScreenshotsAdapter diff --git a/src/main/kotlin/com/looker/droidify/ui/compose/ItemRecyclers.kt b/src/main/kotlin/com/looker/droidify/ui/compose/ItemRecyclers.kt index 03127485..10a769e2 100644 --- a/src/main/kotlin/com/looker/droidify/ui/compose/ItemRecyclers.kt +++ b/src/main/kotlin/com/looker/droidify/ui/compose/ItemRecyclers.kt @@ -7,7 +7,7 @@ import androidx.compose.foundation.lazy.LazyRow import androidx.compose.foundation.lazy.items import androidx.compose.runtime.Composable import androidx.compose.ui.unit.dp -import com.looker.droidify.database.Product +import com.looker.droidify.database.entity.Product @Composable fun ProductsVerticalRecycler(productsList: List) { 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 aa9be013..8b57e0d6 100644 --- a/src/main/kotlin/com/looker/droidify/ui/fragments/AppDetailFragment.kt +++ b/src/main/kotlin/com/looker/droidify/ui/fragments/AppDetailFragment.kt @@ -73,7 +73,7 @@ class AppDetailFragment() : ScreenFragment(), AppDetailAdapter.Callbacks { } private class Installed( - val data: com.looker.droidify.database.Installed, val isSystem: Boolean, + val data: com.looker.droidify.database.entity.Installed, val isSystem: Boolean, val launcherActivities: List>, ) diff --git a/src/main/kotlin/com/looker/droidify/ui/fragments/ExploreFragment.kt b/src/main/kotlin/com/looker/droidify/ui/fragments/ExploreFragment.kt index bf2dfd12..13c88525 100644 --- a/src/main/kotlin/com/looker/droidify/ui/fragments/ExploreFragment.kt +++ b/src/main/kotlin/com/looker/droidify/ui/fragments/ExploreFragment.kt @@ -5,7 +5,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.LinearLayoutManager -import com.looker.droidify.database.Product +import com.looker.droidify.database.entity.Product import com.looker.droidify.databinding.FragmentExploreXBinding import com.looker.droidify.entity.Repository import com.looker.droidify.ui.items.VAppItem diff --git a/src/main/kotlin/com/looker/droidify/ui/fragments/InstalledFragment.kt b/src/main/kotlin/com/looker/droidify/ui/fragments/InstalledFragment.kt index ca6f5ed5..b5d8187a 100644 --- a/src/main/kotlin/com/looker/droidify/ui/fragments/InstalledFragment.kt +++ b/src/main/kotlin/com/looker/droidify/ui/fragments/InstalledFragment.kt @@ -6,7 +6,7 @@ import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView -import com.looker.droidify.database.Product +import com.looker.droidify.database.entity.Product import com.looker.droidify.databinding.FragmentInstalledXBinding import com.looker.droidify.entity.Repository import com.looker.droidify.ui.items.HAppItem diff --git a/src/main/kotlin/com/looker/droidify/ui/fragments/LatestFragment.kt b/src/main/kotlin/com/looker/droidify/ui/fragments/LatestFragment.kt index bb6943bf..12b8a653 100644 --- a/src/main/kotlin/com/looker/droidify/ui/fragments/LatestFragment.kt +++ b/src/main/kotlin/com/looker/droidify/ui/fragments/LatestFragment.kt @@ -6,7 +6,7 @@ import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView -import com.looker.droidify.database.Product +import com.looker.droidify.database.entity.Product import com.looker.droidify.databinding.FragmentLatestXBinding import com.looker.droidify.entity.Repository import com.looker.droidify.ui.items.HAppItem diff --git a/src/main/kotlin/com/looker/droidify/ui/viewmodels/MainNavFragmentViewModelX.kt b/src/main/kotlin/com/looker/droidify/ui/viewmodels/MainNavFragmentViewModelX.kt index eab1c7d9..498c3d92 100644 --- a/src/main/kotlin/com/looker/droidify/ui/viewmodels/MainNavFragmentViewModelX.kt +++ b/src/main/kotlin/com/looker/droidify/ui/viewmodels/MainNavFragmentViewModelX.kt @@ -9,7 +9,7 @@ import androidx.paging.LivePagedListBuilder import androidx.paging.PagedList import com.looker.droidify.content.Preferences import com.looker.droidify.database.DatabaseX -import com.looker.droidify.database.Product +import com.looker.droidify.database.entity.Product import com.looker.droidify.entity.ProductItem import com.looker.droidify.ui.fragments.Request import com.looker.droidify.ui.fragments.Source diff --git a/src/main/kotlin/com/looker/droidify/ui/viewmodels/RepositoriesViewModelX.kt b/src/main/kotlin/com/looker/droidify/ui/viewmodels/RepositoriesViewModelX.kt index 637f26cc..3f4da5ce 100644 --- a/src/main/kotlin/com/looker/droidify/ui/viewmodels/RepositoriesViewModelX.kt +++ b/src/main/kotlin/com/looker/droidify/ui/viewmodels/RepositoriesViewModelX.kt @@ -4,7 +4,7 @@ import androidx.lifecycle.MediatorLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import com.looker.droidify.database.DatabaseX -import com.looker.droidify.database.Repository +import com.looker.droidify.database.entity.Repository class RepositoriesViewModelX(val db: DatabaseX) : ViewModel() { diff --git a/src/main/kotlin/com/looker/droidify/utility/Utils.kt b/src/main/kotlin/com/looker/droidify/utility/Utils.kt index 1216913d..d8e07920 100644 --- a/src/main/kotlin/com/looker/droidify/utility/Utils.kt +++ b/src/main/kotlin/com/looker/droidify/utility/Utils.kt @@ -16,7 +16,7 @@ import com.fasterxml.jackson.core.JsonGenerator import com.fasterxml.jackson.core.JsonParser import com.looker.droidify.* import com.looker.droidify.content.Preferences -import com.looker.droidify.database.Installed +import com.looker.droidify.database.entity.Installed import com.looker.droidify.entity.InstalledItem import com.looker.droidify.entity.Product import com.looker.droidify.entity.ProductItem @@ -240,18 +240,18 @@ fun jsonGenerate(callback: (JsonGenerator) -> Unit): ByteArray { val PRODUCT_ASYNC_DIFFER_CONFIG get() = AsyncDifferConfig.Builder(object : - DiffUtil.ItemCallback() { + DiffUtil.ItemCallback() { override fun areItemsTheSame( - oldItem: com.looker.droidify.database.Product, - newItem: com.looker.droidify.database.Product + oldItem: com.looker.droidify.database.entity.Product, + newItem: com.looker.droidify.database.entity.Product ): Boolean { return oldItem.repository_id == newItem.repository_id && oldItem.package_name == newItem.package_name } override fun areContentsTheSame( - oldItem: com.looker.droidify.database.Product, - newItem: com.looker.droidify.database.Product + oldItem: com.looker.droidify.database.entity.Product, + newItem: com.looker.droidify.database.entity.Product ): Boolean { return oldItem.data_item == newItem.data_item }