Reorganize Searchable data types

This commit is contained in:
MM20
2022-10-12 20:36:39 +02:00
parent a01b0aa03d
commit bcda89c211
98 changed files with 817 additions and 738 deletions
@@ -1,14 +0,0 @@
package de.mm20.launcher2.search
import de.mm20.launcher2.search.data.Searchable
interface SearchableDeserializer {
fun deserialize(serialized: String): Searchable?
}
class NullDeserializer: SearchableDeserializer {
override fun deserialize(serialized: String): Searchable? {
return null
}
}
@@ -1,18 +0,0 @@
package de.mm20.launcher2.search
import de.mm20.launcher2.search.data.Searchable
interface SearchableSerializer {
fun serialize(searchable: Searchable): String?
val typePrefix: String
}
class NullSerializer : SearchableSerializer {
override fun serialize(searchable: Searchable): String? {
return null
}
override val typePrefix: String
get() = "null"
}
@@ -1,68 +0,0 @@
package de.mm20.launcher2.search.data
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.widget.Toast
import de.mm20.launcher2.icons.LauncherIcon
import de.mm20.launcher2.icons.StaticLauncherIcon
import de.mm20.launcher2.ktx.romanize
import de.mm20.launcher2.ktx.tryStartActivity
import de.mm20.launcher2.search.R
import java.text.Collator
abstract class Searchable : Comparable<Searchable> {
abstract val key: String
abstract val label: String
var labelOverride: String? = null
open fun serialize(): String = ""
open fun getLaunchIntent(context: Context): Intent? = null
open fun launch(context: Context, options: Bundle?): Boolean {
val intent = getLaunchIntent(context) ?: return false
return if (context.tryStartActivity(intent, options)) {
true
} else {
Toast.makeText(
context,
context.getString(R.string.error_activity_not_found, label),
Toast.LENGTH_SHORT
).show()
false
}
}
open suspend fun loadIcon(
context: Context,
size: Int,
themed: Boolean,
): LauncherIcon? = null
abstract fun getPlaceholderIcon(context: Context): StaticLauncherIcon
override fun compareTo(other: Searchable): Int {
val label1 = labelOverride ?: label
val label2 = other.labelOverride ?: other.label
return Collator.getInstance().apply { strength = Collator.SECONDARY }
.compare(label1.romanize(), label2.romanize())
}
override fun equals(other: Any?): Boolean {
return if (other is Searchable) key == other.key && label == other.label && labelOverride == other.labelOverride
else super.equals(other)
}
override fun hashCode(): Int {
var result = key.hashCode()
result = 31 * result + label.hashCode()
return result
}
override fun toString(): String {
return "$label ($key)"
}
}