Pin tags to favorites

This commit is contained in:
MM20
2022-09-23 22:38:44 +02:00
parent 60f36795ab
commit f16e9c2b40
15 changed files with 630 additions and 34 deletions
+1
View File
@@ -42,6 +42,7 @@ dependencies {
implementation(libs.koin.android)
implementation(project(":base"))
implementation(project(":search"))
implementation(project(":calendar"))
implementation(project(":database"))
@@ -81,7 +81,7 @@ interface FavoritesRepository {
* Get items with the given keys from the favorites database.
* Items that don't exist in the database will not be returned.
*/
fun getFromKeys(keys: List<String>): List<Searchable>
suspend fun getFromKeys(keys: List<String>): List<Searchable>
suspend fun export(toDir: File)
suspend fun import(fromDir: File)
@@ -379,7 +379,7 @@ internal class FavoritesRepositoryImpl(
}
}
override fun getFromKeys(keys: List<String>): List<Searchable> {
override suspend fun getFromKeys(keys: List<String>): List<Searchable> {
val dao = database.searchDao()
return dao.getFromKeys(keys)
.mapNotNull { fromDatabaseEntity(it).searchable }
@@ -58,6 +58,9 @@ internal fun getSerializer(searchable: Searchable?): SearchableSerializer {
if (searchable is Website) {
return WebsiteSerializer()
}
if (searchable is Tag) {
return TagSerializer()
}
return NullSerializer()
}
@@ -99,5 +102,8 @@ internal fun getDeserializer(context: Context, serialized: String): SearchableDe
if (type == "website") {
return WebsiteDeserializer()
}
if (type == "tag") {
return TagDeserializer()
}
return NullDeserializer()
}
@@ -0,0 +1,29 @@
package de.mm20.launcher2.favorites
import android.content.Context
import de.mm20.launcher2.search.SearchableDeserializer
import de.mm20.launcher2.search.SearchableSerializer
import de.mm20.launcher2.search.data.Searchable
import de.mm20.launcher2.search.data.Tag
import org.json.JSONObject
class TagSerializer: SearchableSerializer {
override fun serialize(searchable: Searchable): String {
searchable as Tag
val json = JSONObject()
json.put("tag", searchable.tag)
return json.toString()
}
override val typePrefix: String
get() = "tag"
}
class TagDeserializer: SearchableDeserializer {
override fun deserialize(serialized: String): Searchable {
val json = JSONObject(serialized)
return Tag(json.getString("tag"))
}
}
@@ -0,0 +1,20 @@
package de.mm20.launcher2.search.data
import android.content.Context
import de.mm20.launcher2.icons.ColorLayer
import de.mm20.launcher2.icons.StaticLauncherIcon
import de.mm20.launcher2.icons.TextLayer
class Tag(
val tag: String,
): Searchable() {
override val key: String = "tag://$tag"
override val label: String = tag
override fun getPlaceholderIcon(context: Context): StaticLauncherIcon {
return StaticLauncherIcon(
foregroundLayer = TextLayer("#"),
backgroundLayer = ColorLayer()
)
}
}