This commit is contained in:
machiav3lli 2022-04-11 01:31:45 +02:00
parent 0bf3dad2f2
commit e854b57b08
14 changed files with 37 additions and 47 deletions

View File

@ -15,8 +15,8 @@ const val TABLE_CATEGORY_NAME = "category"
const val TABLE_CATEGORY_TEMP_NAME = "temporary_category"
const val TABLE_INSTALLED = "installed"
const val TABLE_INSTALLED_NAME = "memory_installed"
const val TABLE_LOCK = "lock"
const val TABLE_LOCK_NAME = "memory_lock"
const val TABLE_IGNORED = "lock"
const val TABLE_IGNORED_NAME = "memory_lock"
const val TABLE_PRODUCT = "product"
const val TABLE_PRODUCT_NAME = "product"
const val TABLE_PRODUCT_TEMP_NAME = "temporary_product"
@ -43,7 +43,6 @@ const val ROW_ANTIFEATURES = "antiFeatures"
const val ROW_LICENSES = "licenses"
const val ROW_DONATES = "donates"
const val ROW_SCREENSHOTS = "screenshots"
const val ROW_VERSION = "version"
const val ROW_SIGNATURE = "signature"
const val ROW_ID = "_id"
const val ROW_ENABLED = "enabled"

View File

@ -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.entity.Lock
import com.looker.droidify.database.entity.Ignored
import com.looker.droidify.entity.ProductPreference
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
@ -27,13 +27,13 @@ object ProductPreferences {
db.lockDao.insert(*preferences.all.keys
.mapNotNull { pName ->
this@ProductPreferences[pName].databaseVersionCode?.let {
Lock(pName, it)
Ignored(pName, it)
}
}
.toTypedArray()
)
subject.collect { (packageName, versionCode) ->
if (versionCode != null) db.lockDao.insert(Lock(packageName, versionCode))
if (versionCode != null) db.lockDao.insert(Ignored(packageName, versionCode))
else db.lockDao.delete(packageName)
}
}

View File

@ -144,7 +144,7 @@ interface ProductDao : BaseDao<Product> {
builder += """SELECT $TABLE_PRODUCT.rowid AS $ROW_ID, $TABLE_PRODUCT.$ROW_REPOSITORY_ID,
$TABLE_PRODUCT.$ROW_PACKAGE_NAME, $TABLE_PRODUCT.$ROW_LABEL,
$TABLE_PRODUCT.$ROW_SUMMARY, $TABLE_PRODUCT.$ROW_DESCRIPTION,
(COALESCE($TABLE_LOCK.$ROW_VERSION_CODE, -1) NOT IN (0, $TABLE_PRODUCT.$ROW_VERSION_CODE) AND
(COALESCE($TABLE_IGNORED.$ROW_VERSION_CODE, -1) NOT IN (0, $TABLE_PRODUCT.$ROW_VERSION_CODE) AND
$TABLE_PRODUCT.$ROW_COMPATIBLE != 0 AND
$TABLE_PRODUCT.$ROW_VERSION_CODE > COALESCE($TABLE_INSTALLED.$ROW_VERSION_CODE, 0xffffffff) AND
$signatureMatches) AS $ROW_CAN_UPDATE, $TABLE_PRODUCT.$ROW_ICON,
@ -173,8 +173,8 @@ interface ProductDao : BaseDao<Product> {
ON $TABLE_PRODUCT.$ROW_REPOSITORY_ID = $TABLE_REPOSITORY.$ROW_ID"""
// Merge the matching locks
builder += """LEFT JOIN $TABLE_LOCK_NAME AS $TABLE_LOCK
ON $TABLE_PRODUCT.$ROW_PACKAGE_NAME = $TABLE_LOCK.$ROW_PACKAGE_NAME"""
builder += """LEFT JOIN $TABLE_IGNORED_NAME AS $TABLE_IGNORED
ON $TABLE_PRODUCT.$ROW_PACKAGE_NAME = $TABLE_IGNORED.$ROW_PACKAGE_NAME"""
// Merge the matching installed
if (!installed && !updates) builder += "LEFT"
@ -291,7 +291,7 @@ interface InstalledDao : BaseDao<Installed> {
}
@Dao
interface LockDao : BaseDao<Lock> {
interface LockDao : BaseDao<Ignored> {
@Query("DELETE FROM memory_lock WHERE packageName = :packageName")
fun delete(packageName: String)
}

View File

@ -20,7 +20,7 @@ import kotlinx.coroutines.launch
Category::class,
CategoryTemp::class,
Installed::class,
Lock::class
Ignored::class
], version = 6
)
@TypeConverters(Converters::class)

View File

@ -2,10 +2,11 @@ package com.looker.droidify.database.entity
import androidx.room.Entity
import androidx.room.PrimaryKey
import com.looker.droidify.TABLE_LOCK_NAME
import com.looker.droidify.TABLE_IGNORED_NAME
@Entity(tableName = TABLE_LOCK_NAME)
data class Lock(
// TODO complete renaming to Ignored
@Entity(tableName = TABLE_IGNORED_NAME)
data class Ignored(
@PrimaryKey
var packageName: String = "",
var versionCode: Long = 0L

View File

@ -37,6 +37,7 @@ import java.io.File
import java.security.MessageDigest
import kotlin.math.roundToInt
// TODO maybe replace by using WorkManager instead?
class DownloadService : ConnectionService<DownloadService.Binder>() {
companion object {
private const val ACTION_CANCEL = "${BuildConfig.APPLICATION_ID}.intent.action.CANCEL"

View File

@ -28,12 +28,13 @@ fun ProductCard(
onUserClick: (ProductItem) -> Unit = {}
) {
val imageData by remember(item, repo) {
val product by remember(item) { mutableStateOf(item) }
val imageData by remember(product, repo) {
mutableStateOf(
CoilDownloader.createIconUri(
item.packageName,
item.icon,
item.metadataIcon,
product.packageName,
product.icon,
product.metadataIcon,
repo?.address,
repo?.authentication
).toString()
@ -46,7 +47,7 @@ fun ProductCard(
.requiredSize(80.dp, 116.dp)
.clip(shape = RoundedCornerShape(8.dp))
.background(color = MaterialTheme.colorScheme.surface)
.clickable(onClick = { onUserClick(item) }),
.clickable(onClick = { onUserClick(product) }),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
@ -57,7 +58,7 @@ fun ProductCard(
Text(
modifier = Modifier.padding(4.dp, 2.dp),
text = item.name,
text = product.name,
style = MaterialTheme.typography.bodySmall,
overflow = TextOverflow.Ellipsis,
maxLines = 1,
@ -65,7 +66,7 @@ fun ProductCard(
)
Text(
modifier = Modifier.padding(4.dp, 1.dp),
text = item.version,
text = product.version,
style = MaterialTheme.typography.labelSmall,
overflow = TextOverflow.Ellipsis,
maxLines = 1,

View File

@ -32,12 +32,13 @@ fun ProductsListItem(
onFavouriteClick: (ProductItem) -> Unit = {},
onInstallClick: (ProductItem) -> Unit = {}
) {
val imageData by remember(item, repo) {
val product by remember(item) { mutableStateOf(item) }
val imageData by remember(product, repo) {
mutableStateOf(
CoilDownloader.createIconUri(
item.packageName,
item.icon,
item.metadataIcon,
product.packageName,
product.icon,
product.metadataIcon,
repo?.address,
repo?.authentication
).toString()
@ -46,10 +47,10 @@ fun ProductsListItem(
ExpandableCard(
modifier = Modifier.padding(horizontal = 8.dp, vertical = 8.dp),
onClick = { onUserClick(item) },
onClick = { onUserClick(product) },
expandedContent = {
ExpandedItemContent(
item = item,
item = product,
onFavourite = onFavouriteClick,
onInstallClicked = onInstallClick
)
@ -74,7 +75,7 @@ fun ProductsListItem(
.fillMaxHeight(0.4f),
) {
Text(
text = item.name,
text = product.name,
modifier = Modifier
.align(Alignment.CenterVertically)
.weight(1f),
@ -84,8 +85,8 @@ fun ProductsListItem(
style = MaterialTheme.typography.titleMedium
)
Text(
text = item.version,
modifier = Modifier.align(Alignment.CenterVertically),
text = product.version,
overflow = TextOverflow.Ellipsis,
maxLines = 1,
style = MaterialTheme.typography.bodySmall,
@ -95,7 +96,7 @@ fun ProductsListItem(
modifier = Modifier
.fillMaxHeight()
.fillMaxWidth(),
text = item.summary,
text = product.summary,
style = MaterialTheme.typography.bodySmall,
overflow = TextOverflow.Ellipsis,
maxLines = 2,

View File

@ -27,7 +27,8 @@ fun ChipRow(
) {
LazyRow(
modifier = modifier,
horizontalArrangement = Arrangement.spacedBy(8.dp)
horizontalArrangement = Arrangement.spacedBy(8.dp),
contentPadding = PaddingValues(horizontal = 8.dp)
) {
items(list) {
Chip(
@ -38,7 +39,7 @@ fun ChipRow(
Text(
text = it,
style = MaterialTheme.typography.labelLarge,
color = MaterialTheme.colorScheme.primary.copy(alpha = ChipDefaults.ContentOpacity)
color = chipColors.contentColor(enabled = true).value
)
}
}

View File

@ -7,10 +7,8 @@ import androidx.fragment.app.Fragment
abstract class BaseNavFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setupAdapters()
setupLayout()
}
abstract fun setupAdapters()
abstract fun setupLayout()
}

View File

@ -48,9 +48,6 @@ class ExploreFragment : MainNavFragmentX() {
return binding.root
}
override fun setupAdapters() {
}
override fun setupLayout() {
viewModel.repositories.observe(viewLifecycleOwner) {
repositories = it.associateBy { repo -> repo.id }

View File

@ -39,9 +39,6 @@ class InstalledFragment : MainNavFragmentX() {
return binding.root
}
override fun setupAdapters() {
}
override fun setupLayout() {
viewModel.repositories.observe(viewLifecycleOwner) {
repositories = it.associateBy { repo -> repo.id }

View File

@ -39,9 +39,6 @@ class LatestFragment : MainNavFragmentX() {
return binding.root
}
override fun setupAdapters() {
}
override fun setupLayout() {
viewModel.repositories.observe(viewLifecycleOwner) {
repositories = it.associateBy { repo -> repo.id }

View File

@ -43,12 +43,9 @@ class PrefsRepositoriesFragment : BaseNavFragment() {
return binding.root
}
override fun setupAdapters() {
override fun setupLayout() {
syncConnection.bind(requireContext())
binding.addRepository.setOnClickListener { viewModel.addRepository() }
}
override fun setupLayout() {
viewModel.repositories.observe(requireActivity()) {
binding.reposRecycler.setContent {
AppTheme(