Add calendar plugins

This commit is contained in:
MM20
2024-08-04 17:40:46 +02:00
parent c7987aabcd
commit 7479c7f401
36 changed files with 1260 additions and 351 deletions
@@ -46,7 +46,7 @@ abstract class QueryPluginApi<TQuery, TResult>(
val uri = Uri.Builder()
.scheme("content")
.authority(pluginAuthority)
.path(LocationPluginContract.Paths.Search)
.path(SearchPluginContract.Paths.Search)
.appendQueryParameters(query)
.appendQueryParameter(
SearchPluginContract.Params.AllowNetwork,
@@ -6,14 +6,17 @@ import de.mm20.launcher2.icons.StaticLauncherIcon
import de.mm20.launcher2.icons.TextLayer
import java.text.SimpleDateFormat
interface CalendarEvent: SavableSearchable {
interface CalendarEvent : SavableSearchable {
val color: Int?
val startTime: Long
val startTime: Long?
val endTime: Long
val allDay: Boolean
val description: String?
val calendarName: String?
val location: String?
val attendees: List<String>
val isCompleted: Boolean?
get() = null
override val preferDetailsOverLaunch: Boolean
@@ -24,7 +27,7 @@ interface CalendarEvent: SavableSearchable {
val df = SimpleDateFormat("dd")
return StaticLauncherIcon(
foregroundLayer = TextLayer(
text = df.format(startTime),
text = df.format(startTime ?: endTime),
color = color ?: 0,
),
backgroundLayer = ColorLayer(color ?: 0)
@@ -848,6 +848,7 @@
<string name="search_filter_online">Online results</string>
<string name="search_filter_apps">Apps</string>
<string name="plugin_type_locationsearch">Places search</string>
<string name="plugin_type_calendar">Calendar</string>
<string name="preference_default_filter">Default filter</string>
<string name="preference_default_filter_summary">Customize the default filter for searches</string>
<string name="preference_filter_bar">Show filter bar</string>
@@ -53,7 +53,9 @@ data class LauncherSettingsData internal constructor(
val contactSearchEnabled: Boolean = true,
@Deprecated("Use calendarSearchProviders `local` instead")
val calendarSearchEnabled: Boolean = true,
val calendarSearchProviders: Set<String> = setOf("local"),
val shortcutSearchEnabled: Boolean = true,
@@ -5,13 +5,20 @@ import kotlinx.coroutines.flow.map
class CalendarSearchSettings internal constructor(
private val dataStore: LauncherDataStore,
){
val enabled
get() = dataStore.data.map { it.calendarSearchEnabled }
) {
val providers
get() = dataStore.data.map { it.calendarSearchProviders }
fun setEnabled(enabled: Boolean) {
val enabledProviders
get() = dataStore.data.map { it.calendarSearchProviders }
fun setProviderEnabled(provider: String, enabled: Boolean) {
dataStore.update {
it.copy(calendarSearchEnabled = enabled)
if (enabled) {
it.copy(calendarSearchProviders = it.calendarSearchProviders + provider)
} else {
it.copy(calendarSearchProviders = it.calendarSearchProviders - provider)
}
}
}
}
@@ -1,7 +1,7 @@
package de.mm20.launcher2.plugin.contracts
abstract class CalendarPluginContract {
object EventColumns: Columns() {
object EventColumns : Columns() {
/**
* The unique ID of the event.
*/
@@ -17,6 +17,11 @@ abstract class CalendarPluginContract {
*/
val Description = column<String>("description")
/**
* The calendar name of the event.
*/
val CalendarName = column<String>("calendar_name")
/**
* The location of the event.
*/
@@ -33,9 +38,9 @@ abstract class CalendarPluginContract {
val EndTime = column<Long>("end_time")
/**
* Whether the event is an all-day event.
* Whether the times should include times or truncate to dates.
*/
val AllDay = column<Boolean>("all_day")
val IncludeTime = column<Boolean>("include_time")
/**
* The color of the event.
@@ -46,5 +51,34 @@ abstract class CalendarPluginContract {
* The attendees of the event.
*/
val Attendees = column<List<String>>("attendees")
/**
* The URI of the event.
*/
val Uri = column<String>("uri")
/**
* Whether the event is a task and if so, whether it is completed.
*/
val IsCompleted = column<Boolean>("completed")
}
object CalendarListColumns : Columns() {
val Id = column<String>("id")
val Name = column<String>("name")
val Color = column<Int>("color")
val AccountName = column<String>("account_name")
}
object Params {
const val Query = "query"
const val StartTime = "start"
const val EndTime = "end"
const val Exclude = "exclude"
}
object Paths {
const val CalendarLists = "calendar_lists"
}
}
@@ -0,0 +1,11 @@
package de.mm20.launcher2.search.calendar
data class CalendarQuery(
val query: String?,
val start: Long?,
val end: Long?,
/**
* List of calendar list ids that should be excluded from the search results.
*/
val excludedCalendars: List<String>,
)