Reorganize Searchable data types
This commit is contained in:
@@ -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"),
|
||||
|
||||
Reference in New Issue
Block a user