### FileProvider get signature change Source: https://github.com/mm2-0/kvaesitso/blob/main/docs/docs/developer-guide/plugins/changelogs/v2.0.0.md The `get` method signature in `FileProvider` has been updated to accept a `GetParams` object for additional retrieval parameters. ```kotlin suspend fun get(id: String): File? ``` ```kotlin suspend fun get(id: String, params: GetParams): File? ``` -------------------------------- ### Get Weather Data by Coordinates Source: https://github.com/mm2-0/kvaesitso/blob/main/docs/docs/developer-guide/plugins/plugin-types/weather.md Implement this method when the user has Auto location enabled. It takes latitude, longitude, and an optional language code. ```kotlin suspend fun getWeatherData(lat: Double, lon: Double, lang: String?): List? ``` -------------------------------- ### Implement Event Get Source: https://github.com/mm2-0/kvaesitso/blob/main/docs/docs/developer-guide/plugins/plugin-types/calendar.md If `config.storageStrategy` is `StorageStrategy.StoreReference`, override the `get` suspend function to retrieve a `CalendarEvent` by its ID. Return the event or `null` if it's not found. ```kotlin suspend fun get(id: String, params: GetParams): CalendarEvent? ``` -------------------------------- ### Retrieve File by ID Source: https://github.com/mm2-0/kvaesitso/blob/main/docs/docs/developer-guide/plugins/plugin-types/file-search.md If config.storageStrategy is set to StorageStrategy.StoreReference, override the suspend fun get(id: String, params: GetParams): File? method to retrieve a file by its ID. Return null if the file is not found. ```kotlin suspend fun get(id: String, params: GetParams): File? ``` -------------------------------- ### AdaptiveIconDrawable with Layered Clock Hands Source: https://github.com/mm2-0/kvaesitso/blob/main/docs/docs/developer-guide/integrations/icon-packs.md An example of an `AdaptiveIconDrawable` used for a dynamic clock icon. It includes a background and a foreground layer composed of `RotateDrawable` elements for each clock hand, with specific rotation degrees for animation. ```xml ``` -------------------------------- ### Get Contact Implementation Source: https://github.com/mm2-0/kvaesitso/blob/main/docs/docs/developer-guide/plugins/plugin-types/contact-search.md When using StorageStrategy.StoreReference, override the get function to retrieve a contact by its ID. Return null if the contact is not found. ```kotlin suspend fun get(id: String, params: GetParams): Contact? ``` -------------------------------- ### Add App in Obtainium Source: https://github.com/mm2-0/kvaesitso/blob/main/docs/docs/user-guide/faq.md Steps to add the Kvaesitso nightly build source in Obtainium. This involves entering the repository URL and specifying the app ID. ```text Add an app https://fdroid.mm20.de/ Third Party F-Droid Repos nightly ``` -------------------------------- ### Clone Kvaesitso Git Repository Source: https://github.com/mm2-0/kvaesitso/blob/main/docs/docs/developer-guide/setup.md Use this command to download the Kvaesitso project source code from GitHub. ```bash git clone https://github.com/MM2-0/Kvaesitso ``` -------------------------------- ### Add Plugin SDK Dependency Source: https://github.com/mm2-0/kvaesitso/blob/main/docs/docs/developer-guide/plugins/get-started.md Add this dependency to your project's build file to include the Kvaesitso plugin SDK. Ensure you use the latest version. ```gradle de.mm20.launcher2:plugin-sdk:$version ``` -------------------------------- ### Get a Place by ID Source: https://github.com/mm2-0/kvaesitso/blob/main/docs/docs/developer-guide/plugins/plugin-types/places-search.md If `StorageStrategy.StoreReference` is used, override the `get` suspend function to retrieve a place by its ID. Return `null` if the place is not found. ```kotlin suspend fun get(id: String, params: GetParams): Location? ``` -------------------------------- ### drawable.xml for Manual Icon Picking Source: https://github.com/mm2-0/kvaesitso/blob/main/docs/docs/developer-guide/integrations/icon-packs.md The drawable.xml file lists all icons available for manual selection in the launcher. Icons are defined using the tag. Categories can be added for organization. ```xml ``` -------------------------------- ### Implementing getPluginState() Source: https://github.com/mm2-0/kvaesitso/blob/main/docs/docs/developer-guide/plugins/plugin-types/common/_plugin_state.md Override this suspend function to return the current state of your plugin. Use `PluginState.Ready` when the plugin is configured and operational, or `PluginState.SetupRequired` when user configuration is needed. ```kotlin suspend fun getPluginState(): PluginState ``` -------------------------------- ### Verify Kvaesitso App Signature Source: https://github.com/mm2-0/kvaesitso/blob/main/docs/docs/user-guide/index.md Use these SHA1 and SHA256 fingerprints to verify the signature of the Kvaesitso application before installation. This ensures the integrity and authenticity of the downloaded APK. ```text SHA1: AF:1D:5F:4A:72:FB:AF:9F:CE:32:81:42:D1:ED:4A:3E:A4:E7:75:74 SHA256: BF:65:BB:D6:17:99:73:97:80:0D:02:E0:AC:2E:45:CE:E1:53:15:15:18:54:5C:23:EF:66:B3:CB:2C:FD:F7:BC ``` -------------------------------- ### Extend FileProvider for File Search Source: https://github.com/mm2-0/kvaesitso/blob/main/docs/docs/developer-guide/plugins/plugin-types/file-search.md To create a file search plugin, extend the FileProvider class and pass a QueryPluginConfig object to the super constructor. ```kotlin class MyFileSearchPlugin() : FileProvider( QueryPluginConfig() ) ``` -------------------------------- ### Basic appfilter.xml Structure Source: https://github.com/mm2-0/kvaesitso/blob/main/docs/docs/developer-guide/integrations/icon-packs.md The appfilter.xml file maps icons to apps. It must be located in res/xml/, res/raw/, or assets/. This shows the basic XML resource structure. ```xml ``` -------------------------------- ### Get Weather Data by Location Object Source: https://github.com/mm2-0/kvaesitso/blob/main/docs/docs/developer-guide/plugins/plugin-types/weather.md Implement this method for fixed location mode. The `location` parameter can be a previously found location or a `WeatherLocation.LatLon`. If `managedLocation` is true, it's called with `WeatherLocation.Managed`. ```kotlin suspend fun getWeatherData(location: WeatherLocation, lang: String?): List? ``` -------------------------------- ### Add MM20 Repo to F-Droid Client Source: https://github.com/mm2-0/kvaesitso/blob/main/docs/docs/user-guide/faq.md Add the MM20 repository to your F-Droid client to access Kvaesitso Nightly builds. After adding, refresh the client to find the app. ```bash https://fdroid.mm20.de/repo ``` -------------------------------- ### Register Plugin in AndroidManifest.xml Source: https://github.com/mm2-0/kvaesitso/blob/main/docs/docs/developer-guide/plugins/get-started.md Register your plugin class as a content provider in the AndroidManifest.xml file. This step is crucial for Kvaesitso to recognize your plugin. Ensure the 'android:authorities' value is unique and prefixed with your package name. ```xml ``` -------------------------------- ### Extend CalendarProvider Source: https://github.com/mm2-0/kvaesitso/blob/main/docs/docs/developer-guide/plugins/plugin-types/calendar.md To create a calendar provider plugin, extend the `CalendarProvider` class and pass a `QueryPluginConfig` object to the super constructor. ```kotlin class MyCalendarPlugin() : CalendarProvider( QueryPluginConfig() ) ``` -------------------------------- ### Extend LocationProvider for Places Search Source: https://github.com/mm2-0/kvaesitso/blob/main/docs/docs/developer-guide/plugins/plugin-types/places-search.md To create a places search plugin, extend the `LocationProvider` class and pass a `QueryPluginConfig` object to the super constructor. ```kotlin class MyplaceSearchPlugin() : LocationProvider( QueryPluginConfig() ) ``` -------------------------------- ### Apache License 2.0 Source: https://github.com/mm2-0/kvaesitso/blob/main/plugins/sdk/readme.md This snippet contains the full text of the Apache License 2.0, which governs the use of this module. ```text Copyright 2023 MM2-0 and the Kvaesitso contributors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ``` -------------------------------- ### Extend WeatherProvider Class Source: https://github.com/mm2-0/kvaesitso/blob/main/docs/docs/developer-guide/plugins/plugin-types/weather.md Implement a custom weather provider by extending the WeatherProvider class and passing a WeatherPluginConfig object to the super constructor. ```kotlin class MyWeatherProviderPlugin() : WeatherProvider( WeatherPluginConfig() ) ``` -------------------------------- ### Temperature Unit Conversion Source: https://github.com/mm2-0/kvaesitso/blob/main/docs/docs/developer-guide/plugins/plugin-types/weather.md Use helper functions like `.C`, `.F`, or `.K` to construct `Temperature` objects based on the unit of your weather service's returned value. ```kotlin val temp = tempValueInCelcius.C val temp2 = tempValueInFahrenheit.F val temp3 = tempValueInKelvin.K ``` -------------------------------- ### FileProvider search signature change Source: https://github.com/mm2-0/kvaesitso/blob/main/docs/docs/developer-guide/plugins/changelogs/v2.0.0.md The `search` method signature in `FileProvider` has been updated to accept a `SearchParams` object for more detailed query configuration. ```kotlin suspend fun search(query: String, allowNetwork: Boolean): List ``` ```kotlin suspend fun search(query: String, params: SearchParams): List ``` -------------------------------- ### Extend ContactProvider for Contact Search Source: https://github.com/mm2-0/kvaesitso/blob/main/docs/docs/developer-guide/plugins/plugin-types/contact-search.md To create a contact search plugin, extend the ContactProvider class and pass a QueryPluginConfig object to the super constructor. ```kotlin class MyContactSearchPlugin() : ContactProvider( QueryPluginConfig() ) ``` -------------------------------- ### Implement File Search Functionality Source: https://github.com/mm2-0/kvaesitso/blob/main/docs/docs/developer-guide/plugins/plugin-types/file-search.md Override the suspend fun search(query: String, params: SearchParams): List to implement file search logic. The query parameter is the search term, and the method should return a list of File objects. ```kotlin suspend fun search(query: String, params: SearchParams): List ``` -------------------------------- ### Create Plugin Class Source: https://github.com/mm2-0/kvaesitso/blob/main/docs/docs/developer-guide/plugins/get-started.md Define your plugin by creating a new class. This class will extend one of the provided plugin base classes depending on its functionality. ```kotlin class MyFirstPlugin ``` -------------------------------- ### Plugin Settings Activity Declaration Source: https://github.com/mm2-0/kvaesitso/blob/main/docs/docs/developer-guide/plugins/settings.md Declare an activity in your AndroidManifest.xml with the 'de.mm20.launcher2.action.PLUGIN_SETTINGS' action to enable plugin settings. ```xml ```