Add calendar plugins
This commit is contained in:
@@ -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,
|
||||
|
||||
|
||||
+12
-5
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+37
-3
@@ -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>,
|
||||
)
|
||||
Reference in New Issue
Block a user