Update: Break down Tables into entities and Covnerters

This commit is contained in:
machiav3lli 2022-01-22 02:11:23 +01:00
parent 51736ecbef
commit bf1a6420cd
20 changed files with 149 additions and 129 deletions

View File

@ -3,7 +3,7 @@ package com.looker.droidify.content
import android.content.Context import android.content.Context
import android.content.SharedPreferences import android.content.SharedPreferences
import com.looker.droidify.database.DatabaseX 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.entity.ProductPreference
import com.looker.droidify.utility.extension.json.Json import com.looker.droidify.utility.extension.json.Json
import com.looker.droidify.utility.extension.json.parseDictionary import com.looker.droidify.utility.extension.json.parseDictionary

View File

@ -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)
}

View File

@ -8,6 +8,7 @@ import androidx.room.*
import androidx.sqlite.db.SimpleSQLiteQuery import androidx.sqlite.db.SimpleSQLiteQuery
import androidx.sqlite.db.SupportSQLiteQuery import androidx.sqlite.db.SupportSQLiteQuery
import com.looker.droidify.* import com.looker.droidify.*
import com.looker.droidify.database.entity.*
import com.looker.droidify.entity.ProductItem import com.looker.droidify.entity.ProductItem
import io.reactivex.rxjava3.core.Flowable import io.reactivex.rxjava3.core.Flowable

View File

@ -5,6 +5,7 @@ import androidx.room.Database
import androidx.room.Room import androidx.room.Room
import androidx.room.RoomDatabase import androidx.room.RoomDatabase
import androidx.room.TypeConverters import androidx.room.TypeConverters
import com.looker.droidify.database.entity.*
import com.looker.droidify.entity.Repository.Companion.defaultRepositories import com.looker.droidify.entity.Repository.Companion.defaultRepositories
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.GlobalScope

View File

@ -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)
}

View File

@ -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()

View File

@ -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 = ""
}

View File

@ -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
}

View File

@ -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()

View File

@ -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
}
}

View File

@ -3,7 +3,7 @@ package com.looker.droidify.entity
import com.fasterxml.jackson.core.JsonGenerator import com.fasterxml.jackson.core.JsonGenerator
import com.fasterxml.jackson.core.JsonParser import com.fasterxml.jackson.core.JsonParser
import com.fasterxml.jackson.core.JsonToken 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.json.*
import com.looker.droidify.utility.extension.text.nullIfEmpty import com.looker.droidify.utility.extension.text.nullIfEmpty

View File

@ -43,7 +43,7 @@ import com.google.android.material.textview.MaterialTextView
import com.looker.droidify.R import com.looker.droidify.R
import com.looker.droidify.content.Preferences import com.looker.droidify.content.Preferences
import com.looker.droidify.content.ProductPreferences 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.entity.*
import com.looker.droidify.network.CoilDownloader import com.looker.droidify.network.CoilDownloader
import com.looker.droidify.screen.ScreenshotsAdapter import com.looker.droidify.screen.ScreenshotsAdapter

View File

@ -7,7 +7,7 @@ import androidx.compose.foundation.lazy.LazyRow
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.looker.droidify.database.Product import com.looker.droidify.database.entity.Product
@Composable @Composable
fun ProductsVerticalRecycler(productsList: List<Product>) { fun ProductsVerticalRecycler(productsList: List<Product>) {

View File

@ -73,7 +73,7 @@ class AppDetailFragment() : ScreenFragment(), AppDetailAdapter.Callbacks {
} }
private class Installed( 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<Pair<String, String>>, val launcherActivities: List<Pair<String, String>>,
) )

View File

@ -5,7 +5,7 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager 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.databinding.FragmentExploreXBinding
import com.looker.droidify.entity.Repository import com.looker.droidify.entity.Repository
import com.looker.droidify.ui.items.VAppItem import com.looker.droidify.ui.items.VAppItem

View File

@ -6,7 +6,7 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView 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.databinding.FragmentInstalledXBinding
import com.looker.droidify.entity.Repository import com.looker.droidify.entity.Repository
import com.looker.droidify.ui.items.HAppItem import com.looker.droidify.ui.items.HAppItem

View File

@ -6,7 +6,7 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView 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.databinding.FragmentLatestXBinding
import com.looker.droidify.entity.Repository import com.looker.droidify.entity.Repository
import com.looker.droidify.ui.items.HAppItem import com.looker.droidify.ui.items.HAppItem

View File

@ -9,7 +9,7 @@ import androidx.paging.LivePagedListBuilder
import androidx.paging.PagedList import androidx.paging.PagedList
import com.looker.droidify.content.Preferences import com.looker.droidify.content.Preferences
import com.looker.droidify.database.DatabaseX 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.entity.ProductItem
import com.looker.droidify.ui.fragments.Request import com.looker.droidify.ui.fragments.Request
import com.looker.droidify.ui.fragments.Source import com.looker.droidify.ui.fragments.Source

View File

@ -4,7 +4,7 @@ import androidx.lifecycle.MediatorLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import com.looker.droidify.database.DatabaseX 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() { class RepositoriesViewModelX(val db: DatabaseX) : ViewModel() {

View File

@ -16,7 +16,7 @@ import com.fasterxml.jackson.core.JsonGenerator
import com.fasterxml.jackson.core.JsonParser import com.fasterxml.jackson.core.JsonParser
import com.looker.droidify.* import com.looker.droidify.*
import com.looker.droidify.content.Preferences 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.InstalledItem
import com.looker.droidify.entity.Product import com.looker.droidify.entity.Product
import com.looker.droidify.entity.ProductItem import com.looker.droidify.entity.ProductItem
@ -240,18 +240,18 @@ fun jsonGenerate(callback: (JsonGenerator) -> Unit): ByteArray {
val PRODUCT_ASYNC_DIFFER_CONFIG val PRODUCT_ASYNC_DIFFER_CONFIG
get() = AsyncDifferConfig.Builder(object : get() = AsyncDifferConfig.Builder(object :
DiffUtil.ItemCallback<com.looker.droidify.database.Product>() { DiffUtil.ItemCallback<com.looker.droidify.database.entity.Product>() {
override fun areItemsTheSame( override fun areItemsTheSame(
oldItem: com.looker.droidify.database.Product, oldItem: com.looker.droidify.database.entity.Product,
newItem: com.looker.droidify.database.Product newItem: com.looker.droidify.database.entity.Product
): Boolean { ): Boolean {
return oldItem.repository_id == newItem.repository_id return oldItem.repository_id == newItem.repository_id
&& oldItem.package_name == newItem.package_name && oldItem.package_name == newItem.package_name
} }
override fun areContentsTheSame( override fun areContentsTheSame(
oldItem: com.looker.droidify.database.Product, oldItem: com.looker.droidify.database.entity.Product,
newItem: com.looker.droidify.database.Product newItem: com.looker.droidify.database.entity.Product
): Boolean { ): Boolean {
return oldItem.data_item == newItem.data_item return oldItem.data_item == newItem.data_item
} }