mirror of
https://github.com/Aviortheking/Neo-Store.git
synced 2025-04-23 19:32:16 +00:00
Clean up
This commit is contained in:
parent
f33ccfd247
commit
c2e7c3823e
@ -28,7 +28,6 @@ const val ROW_ANTIFEATURES = "categories"
|
|||||||
const val ROW_LICENSES = "categories"
|
const val ROW_LICENSES = "categories"
|
||||||
const val ROW_DONATES = "categories"
|
const val ROW_DONATES = "categories"
|
||||||
const val ROW_SCREENSHOTS = "categories"
|
const val ROW_SCREENSHOTS = "categories"
|
||||||
const val ROW_DATA = "data"
|
|
||||||
const val ROW_VERSION = "version"
|
const val ROW_VERSION = "version"
|
||||||
const val ROW_SIGNATURE = "signature"
|
const val ROW_SIGNATURE = "signature"
|
||||||
const val ROW_ID = "_id"
|
const val ROW_ID = "_id"
|
||||||
|
@ -1,62 +0,0 @@
|
|||||||
package com.looker.droidify.database
|
|
||||||
|
|
||||||
import android.database.ContentObservable
|
|
||||||
import android.database.ContentObserver
|
|
||||||
import android.database.Cursor
|
|
||||||
import android.database.CursorWrapper
|
|
||||||
|
|
||||||
class ObservableCursor(
|
|
||||||
cursor: Cursor,
|
|
||||||
private val observable: (
|
|
||||||
register: Boolean,
|
|
||||||
observer: () -> Unit,
|
|
||||||
) -> Unit,
|
|
||||||
) : CursorWrapper(cursor) {
|
|
||||||
private var registered = false
|
|
||||||
private val contentObservable = ContentObservable()
|
|
||||||
|
|
||||||
private val onChange: () -> Unit = {
|
|
||||||
contentObservable.dispatchChange(false, null)
|
|
||||||
}
|
|
||||||
|
|
||||||
init {
|
|
||||||
observable(true, onChange)
|
|
||||||
registered = true
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun registerContentObserver(observer: ContentObserver) {
|
|
||||||
super.registerContentObserver(observer)
|
|
||||||
contentObservable.registerObserver(observer)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun unregisterContentObserver(observer: ContentObserver) {
|
|
||||||
super.unregisterContentObserver(observer)
|
|
||||||
contentObservable.unregisterObserver(observer)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Suppress("DEPRECATION")
|
|
||||||
override fun requery(): Boolean {
|
|
||||||
if (!registered) {
|
|
||||||
observable(true, onChange)
|
|
||||||
registered = true
|
|
||||||
}
|
|
||||||
return super.requery()
|
|
||||||
}
|
|
||||||
|
|
||||||
@Suppress("DEPRECATION")
|
|
||||||
override fun deactivate() {
|
|
||||||
super.deactivate()
|
|
||||||
deactivateOrClose()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun close() {
|
|
||||||
super.close()
|
|
||||||
contentObservable.unregisterAll()
|
|
||||||
deactivateOrClose()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun deactivateOrClose() {
|
|
||||||
observable(false, onChange)
|
|
||||||
registered = false
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,94 +0,0 @@
|
|||||||
package com.looker.droidify.database
|
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
import android.database.Cursor
|
|
||||||
import android.os.CancellationSignal
|
|
||||||
import android.os.OperationCanceledException
|
|
||||||
import androidx.loader.content.AsyncTaskLoader
|
|
||||||
|
|
||||||
class QueryLoader(context: Context, private val query: (CancellationSignal) -> Cursor?) :
|
|
||||||
AsyncTaskLoader<Cursor>(context) {
|
|
||||||
private val observer = ForceLoadContentObserver()
|
|
||||||
private var cancellationSignal: CancellationSignal? = null
|
|
||||||
private var cursor: Cursor? = null
|
|
||||||
|
|
||||||
override fun loadInBackground(): Cursor? {
|
|
||||||
val cancellationSignal = synchronized(this) {
|
|
||||||
if (isLoadInBackgroundCanceled) {
|
|
||||||
throw OperationCanceledException()
|
|
||||||
}
|
|
||||||
val cancellationSignal = CancellationSignal()
|
|
||||||
this.cancellationSignal = cancellationSignal
|
|
||||||
cancellationSignal
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
val cursor = query(cancellationSignal)
|
|
||||||
if (cursor != null) {
|
|
||||||
try {
|
|
||||||
cursor.count // Ensure the cursor window is filled
|
|
||||||
cursor.registerContentObserver(observer)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
cursor.close()
|
|
||||||
throw e
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return cursor
|
|
||||||
} finally {
|
|
||||||
synchronized(this) {
|
|
||||||
this.cancellationSignal = null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun cancelLoadInBackground() {
|
|
||||||
super.cancelLoadInBackground()
|
|
||||||
|
|
||||||
synchronized(this) {
|
|
||||||
cancellationSignal?.cancel()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun deliverResult(data: Cursor?) {
|
|
||||||
if (isReset) {
|
|
||||||
data?.close()
|
|
||||||
} else {
|
|
||||||
val oldCursor = cursor
|
|
||||||
cursor = data
|
|
||||||
if (isStarted) {
|
|
||||||
super.deliverResult(data)
|
|
||||||
}
|
|
||||||
if (oldCursor != data) {
|
|
||||||
oldCursor.closeIfNeeded()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onStartLoading() {
|
|
||||||
cursor?.let(this::deliverResult)
|
|
||||||
if (takeContentChanged() || cursor == null) {
|
|
||||||
forceLoad()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onStopLoading() {
|
|
||||||
cancelLoad()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCanceled(data: Cursor?) {
|
|
||||||
data.closeIfNeeded()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onReset() {
|
|
||||||
super.onReset()
|
|
||||||
|
|
||||||
stopLoading()
|
|
||||||
cursor.closeIfNeeded()
|
|
||||||
cursor = null
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun Cursor?.closeIfNeeded() {
|
|
||||||
if (this != null && !isClosed) {
|
|
||||||
close()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,92 +0,0 @@
|
|||||||
package com.looker.droidify.entity
|
|
||||||
|
|
||||||
import com.looker.droidify.database.entity.Installed
|
|
||||||
import com.looker.droidify.database.entity.Release
|
|
||||||
import com.looker.droidify.utility.extension.text.nullIfEmpty
|
|
||||||
import kotlinx.serialization.Serializable
|
|
||||||
import kotlinx.serialization.decodeFromString
|
|
||||||
import kotlinx.serialization.encodeToString
|
|
||||||
import kotlinx.serialization.json.Json
|
|
||||||
|
|
||||||
@Serializable
|
|
||||||
data class Product(
|
|
||||||
var repositoryId: Long,
|
|
||||||
val packageName: String,
|
|
||||||
val name: String,
|
|
||||||
val summary: String,
|
|
||||||
var description: String,
|
|
||||||
val whatsNew: String,
|
|
||||||
val icon: String,
|
|
||||||
val metadataIcon: String,
|
|
||||||
val author: Author,
|
|
||||||
val source: String,
|
|
||||||
val changelog: String,
|
|
||||||
val web: String,
|
|
||||||
val tracker: String,
|
|
||||||
val added: Long,
|
|
||||||
val updated: Long,
|
|
||||||
val suggestedVersionCode: Long,
|
|
||||||
val categories: List<String>,
|
|
||||||
val antiFeatures: List<String>,
|
|
||||||
val licenses: List<String>,
|
|
||||||
val donates: List<Donate>,
|
|
||||||
val screenshots: List<Screenshot>,
|
|
||||||
val releases: List<Release>,
|
|
||||||
) {
|
|
||||||
// Same releases with different signatures
|
|
||||||
val selectedReleases: List<Release>
|
|
||||||
get() = releases.filter { it.selected }
|
|
||||||
|
|
||||||
val displayRelease: Release?
|
|
||||||
get() = selectedReleases.firstOrNull() ?: releases.firstOrNull()
|
|
||||||
|
|
||||||
val version: String
|
|
||||||
get() = displayRelease?.version.orEmpty()
|
|
||||||
|
|
||||||
val versionCode: Long
|
|
||||||
get() = selectedReleases.firstOrNull()?.versionCode ?: 0L
|
|
||||||
|
|
||||||
val compatible: Boolean
|
|
||||||
get() = selectedReleases.firstOrNull()?.incompatibilities?.isEmpty() == true
|
|
||||||
|
|
||||||
val signatures: List<String>
|
|
||||||
get() = selectedReleases.mapNotNull { it.signature.nullIfEmpty() }.distinct().toList()
|
|
||||||
|
|
||||||
fun item(): ProductItem {
|
|
||||||
return ProductItem(
|
|
||||||
repositoryId,
|
|
||||||
packageName,
|
|
||||||
name,
|
|
||||||
summary,
|
|
||||||
icon,
|
|
||||||
metadataIcon,
|
|
||||||
version,
|
|
||||||
"",
|
|
||||||
compatible,
|
|
||||||
false,
|
|
||||||
0
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun canUpdate(installed: Installed?): Boolean {
|
|
||||||
return installed != null && compatible && versionCode > installed.version_code &&
|
|
||||||
installed.signature in signatures
|
|
||||||
}
|
|
||||||
|
|
||||||
fun toJSON() = Json.encodeToString(this)
|
|
||||||
|
|
||||||
companion object {
|
|
||||||
fun fromJson(json: String) = Json.decodeFromString<Product>(json)
|
|
||||||
|
|
||||||
fun <T> findSuggested(
|
|
||||||
products: List<T>,
|
|
||||||
installed: Installed?,
|
|
||||||
extract: (T) -> Product,
|
|
||||||
): T? {
|
|
||||||
return products.maxWithOrNull(compareBy({
|
|
||||||
extract(it).compatible &&
|
|
||||||
(installed == null || installed.signature in extract(it).signatures)
|
|
||||||
}, { extract(it).versionCode }))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -14,10 +14,6 @@ fun Cursor.asSequence(): Sequence<Cursor> {
|
|||||||
return generateSequence { if (moveToNext()) this else null }
|
return generateSequence { if (moveToNext()) this else null }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Cursor.firstOrNull(): Cursor? {
|
|
||||||
return if (moveToFirst()) this else null
|
|
||||||
}
|
|
||||||
|
|
||||||
fun SQLiteDatabase.execWithResult(sql: String) {
|
fun SQLiteDatabase.execWithResult(sql: String) {
|
||||||
rawQuery(sql, null).use { it.count }
|
rawQuery(sql, null).use { it.count }
|
||||||
}
|
}
|
||||||
|
@ -23,13 +23,6 @@ object TypefaceExtra {
|
|||||||
val light = Typeface.create("sans-serif-light", Typeface.NORMAL)!!
|
val light = Typeface.create("sans-serif-light", Typeface.NORMAL)!!
|
||||||
}
|
}
|
||||||
|
|
||||||
val Number.toPx
|
|
||||||
get() = TypedValue.applyDimension(
|
|
||||||
TypedValue.COMPLEX_UNIT_DIP,
|
|
||||||
this.toFloat(),
|
|
||||||
Resources.getSystem().displayMetrics
|
|
||||||
)
|
|
||||||
|
|
||||||
fun Context.getColorFromAttr(@AttrRes attrResId: Int): ColorStateList {
|
fun Context.getColorFromAttr(@AttrRes attrResId: Int): ColorStateList {
|
||||||
val typedArray = obtainStyledAttributes(intArrayOf(attrResId))
|
val typedArray = obtainStyledAttributes(intArrayOf(attrResId))
|
||||||
val (colorStateList, resId) = try {
|
val (colorStateList, resId) = try {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user