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
@@ -2,26 +2,38 @@ package de.mm20.launcher2.search.data
import android.content.Context
import android.content.Intent
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.net.Uri
import android.os.Bundle
import androidx.core.content.ContextCompat
import coil.imageLoader
import coil.request.ImageRequest
import de.mm20.launcher2.icons.*
import de.mm20.launcher2.ktx.tryStartActivity
import de.mm20.launcher2.search.PinnableSearchable
import de.mm20.launcher2.search.Searchable
import de.mm20.launcher2.websites.R
import java.util.concurrent.ExecutionException
class Website(
data class Website(
override val label: String,
val url: String,
val description: String,
val image: String,
val favicon: String,
val color: Int
) : Searchable() {
val color: Int,
override val labelOverride: String? = null,
) : PinnableSearchable {
override val domain: String = Domain
override val key = "$domain://$url"
override val preferDetailsOverLaunch: Boolean = false
override fun overrideLabel(label: String): Website {
return this.copy(labelOverride = label)
}
override val key = "web://$url"
override suspend fun loadIcon(
context: Context,
size: Int,
@@ -68,10 +80,18 @@ class Website(
)
}
override fun getLaunchIntent(context: Context): Intent? {
private fun getLaunchIntent(): Intent {
val intent = Intent(Intent.ACTION_VIEW)
intent.data = Uri.parse(url)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
return intent
}
override fun launch(context: Context, options: Bundle?): Boolean {
return context.tryStartActivity(getLaunchIntent(), options)
}
companion object {
const val Domain = "web"
}
}
@@ -1,14 +1,15 @@
package de.mm20.launcher2.websites
import de.mm20.launcher2.ktx.jsonObjectOf
import de.mm20.launcher2.search.PinnableSearchable
import de.mm20.launcher2.search.SearchableDeserializer
import de.mm20.launcher2.search.SearchableSerializer
import de.mm20.launcher2.search.data.Searchable
import de.mm20.launcher2.search.Searchable
import de.mm20.launcher2.search.data.Website
import org.json.JSONObject
class WebsiteSerializer : SearchableSerializer {
override fun serialize(searchable: Searchable): String {
override fun serialize(searchable: PinnableSearchable): String {
searchable as Website
return jsonObjectOf(
"label" to searchable.label,
@@ -25,7 +26,7 @@ class WebsiteSerializer : SearchableSerializer {
}
class WebsiteDeserializer: SearchableDeserializer {
override fun deserialize(serialized: String): Searchable? {
override fun deserialize(serialized: String): PinnableSearchable? {
val json = JSONObject(serialized)
return Website(
label = json.getString("label"),