Update docs
This commit is contained in:
parent
34180ae6b4
commit
92626bff31
@ -5,6 +5,4 @@ plugins {
|
|||||||
alias(libs.plugins.android.application) apply false
|
alias(libs.plugins.android.application) apply false
|
||||||
alias(libs.plugins.android.library) apply false
|
alias(libs.plugins.android.library) apply false
|
||||||
alias(libs.plugins.dokka) apply true
|
alias(libs.plugins.dokka) apply true
|
||||||
}
|
}
|
||||||
|
|
||||||
apply(from = "docs/deps-graph.gradle")
|
|
||||||
@ -1,131 +0,0 @@
|
|||||||
/**
|
|
||||||
* Copyright 2016 Jake Wharton
|
|
||||||
*
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
task projectDependencyGraph {
|
|
||||||
doLast {
|
|
||||||
def dot = new File(rootProject.rootDir, "docs/static/img/dependency-graph.dot")
|
|
||||||
dot.parentFile.mkdirs()
|
|
||||||
dot.delete()
|
|
||||||
|
|
||||||
dot << 'digraph {\n'
|
|
||||||
dot << " graph [label=\"${rootProject.name}\\n \",labelloc=t,fontsize=30,ranksep=1.4];\n"
|
|
||||||
dot << ' node [style=filled, fillcolor="#bbbbbb"];\n'
|
|
||||||
dot << ' rankdir=TB;\n'
|
|
||||||
|
|
||||||
def rootProjects = []
|
|
||||||
def queue = [rootProject]
|
|
||||||
while (!queue.isEmpty()) {
|
|
||||||
def project = queue.remove(0)
|
|
||||||
rootProjects.add(project)
|
|
||||||
queue.addAll(project.childProjects.values())
|
|
||||||
}
|
|
||||||
|
|
||||||
def projects = new LinkedHashSet<Project>()
|
|
||||||
def dependencies = new LinkedHashMap<Tuple2<Project, Project>, List<String>>()
|
|
||||||
def multiplatformProjects = []
|
|
||||||
def jsProjects = []
|
|
||||||
def androidProjects = []
|
|
||||||
def javaProjects = []
|
|
||||||
|
|
||||||
queue = [rootProject]
|
|
||||||
while (!queue.isEmpty()) {
|
|
||||||
def project = queue.remove(0)
|
|
||||||
queue.addAll(project.childProjects.values())
|
|
||||||
|
|
||||||
if (project.plugins.hasPlugin('org.jetbrains.kotlin.multiplatform')) {
|
|
||||||
multiplatformProjects.add(project)
|
|
||||||
}
|
|
||||||
if (project.plugins.hasPlugin('org.jetbrains.kotlin.js')) {
|
|
||||||
jsProjects.add(project)
|
|
||||||
}
|
|
||||||
if (project.plugins.hasPlugin('com.android.library') || project.plugins.hasPlugin('com.android.application')) {
|
|
||||||
androidProjects.add(project)
|
|
||||||
}
|
|
||||||
if (project.plugins.hasPlugin('java-library') || project.plugins.hasPlugin('java')) {
|
|
||||||
javaProjects.add(project)
|
|
||||||
}
|
|
||||||
|
|
||||||
project.configurations.all { config ->
|
|
||||||
config.dependencies
|
|
||||||
.withType(ProjectDependency)
|
|
||||||
.collect { it.dependencyProject }
|
|
||||||
.each { dependency ->
|
|
||||||
projects.add(project)
|
|
||||||
projects.add(dependency)
|
|
||||||
rootProjects.remove(dependency)
|
|
||||||
|
|
||||||
def graphKey = new Tuple2<Project, Project>(project, dependency)
|
|
||||||
def traits = dependencies.computeIfAbsent(graphKey) { new ArrayList<String>() }
|
|
||||||
|
|
||||||
if (config.name.toLowerCase().endsWith('implementation')) {
|
|
||||||
traits.add('style=dotted')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
projects = projects.sort { it.path }
|
|
||||||
|
|
||||||
dot << '\n # Projects\n\n'
|
|
||||||
for (project in projects) {
|
|
||||||
def traits = []
|
|
||||||
|
|
||||||
if (rootProjects.contains(project)) {
|
|
||||||
traits.add('shape=box')
|
|
||||||
}
|
|
||||||
|
|
||||||
if (project.getPath().startsWith(":core")) {
|
|
||||||
traits.add('fillcolor="#94c1ff"')
|
|
||||||
} else if (project.getPath().startsWith(":app")) {
|
|
||||||
traits.add('fillcolor="#baffc9"')
|
|
||||||
} else if (project.getPath().startsWith(":data")) {
|
|
||||||
traits.add('fillcolor="#fff694"')
|
|
||||||
} else if (project.getPath().startsWith(":services")) {
|
|
||||||
traits.add('fillcolor="#ff9498"')
|
|
||||||
} else if (project.getPath().startsWith(":libs")) {
|
|
||||||
traits.add('fillcolor="#ad94ff"')
|
|
||||||
}
|
|
||||||
|
|
||||||
dot << " \"${project.path}\" [${traits.join(", ")}];\n"
|
|
||||||
}
|
|
||||||
|
|
||||||
dot << '\n {rank = same;'
|
|
||||||
for (project in projects) {
|
|
||||||
if (rootProjects.contains(project)) {
|
|
||||||
dot << " \"${project.path}\";"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
dot << '}\n'
|
|
||||||
|
|
||||||
dot << '\n # Dependencies\n\n'
|
|
||||||
dependencies.forEach { key, traits ->
|
|
||||||
dot << " \"${key.first.path}\" -> \"${key.second.path}\""
|
|
||||||
if (!traits.isEmpty()) {
|
|
||||||
dot << " [${traits.join(", ")}]"
|
|
||||||
}
|
|
||||||
dot << '\n'
|
|
||||||
}
|
|
||||||
|
|
||||||
dot << '}\n'
|
|
||||||
|
|
||||||
def p = 'dot -Tpng -O dependency-graph.dot'.execute([], dot.parentFile)
|
|
||||||
p.waitFor()
|
|
||||||
if (p.exitValue() != 0) {
|
|
||||||
throw new RuntimeException(p.errorStream.text)
|
|
||||||
}
|
|
||||||
|
|
||||||
println("Project module dependency graph created.")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -4,13 +4,14 @@ sidebar_position: 4
|
|||||||
|
|
||||||
# Libraries
|
# Libraries
|
||||||
|
|
||||||
The following libraries are commonly used (libraries that are only used in single modules are not listed here as they are implementation details):
|
The following libraries are commonly used:
|
||||||
|
|
||||||
- **KotlinX coroutines** for asynchronous operations
|
- **Jetpack Compose and Accompanist** for UI
|
||||||
- **Jetpack Compose and Accompanist** for all user interfaces _(TODO: Owncloud and Nextcloud signin are not ported to Compose yet)_
|
|
||||||
- **AndroidX Room** to store launcher data in an Sqlite database
|
|
||||||
- **AndroidX Datastore** to store additional user preferences
|
|
||||||
- **Koin** for dependency injection
|
- **Koin** for dependency injection
|
||||||
- **Coil** to load and transform images
|
- **Coil** to load and transform images
|
||||||
- **OkHttp and Retrofit** for HTTP requests _(TODO: Migrate to Ktor (?))_
|
- **KotlinX coroutines** for asynchronous operations
|
||||||
|
- **KotlinX serialization** for JSON serialization
|
||||||
|
- **AndroidX Room** to store launcher data in an SQLite database
|
||||||
|
- **AndroidX Datastore** to store additional user preferences
|
||||||
|
- **OkHttp and Retrofit** for HTTP requests
|
||||||
- Several other **AndroidX** libraries (Work, Lifecycle, AppCompat, …)
|
- Several other **AndroidX** libraries (Work, Lifecycle, AppCompat, …)
|
||||||
|
|||||||
@ -4,55 +4,73 @@ sidebar_position: 3
|
|||||||
|
|
||||||
# Modules
|
# Modules
|
||||||
|
|
||||||
The project contains of multiple Gradle modules. The structure is kinda scuffed because I didn't know shit when I
|
The project contains of multiple Gradle modules. The structure is kinda scuffed because I didn't
|
||||||
|
know shit when I
|
||||||
started this project so future refactorings are to be expected. This is the current structure:
|
started this project so future refactorings are to be expected. This is the current structure:
|
||||||
|
|
||||||
- `:app`:
|
- `:app`:
|
||||||
- `:app`: The app module. Contains almost nothing except the `Application` class (`de.mm20.launcher2.LauncherApplication`)
|
- `:app`: The app module. Contains almost nothing except the `Application` class (
|
||||||
- `:ui`: Contains almost the entire user interface (except for account sign-in UIs). The only module that uses Jetpack Compose.
|
`de.mm20.launcher2.LauncherApplication`)
|
||||||
- `:services`: Higher level APIs for the app's business logic. Each module represents a specific functionality of the launcher
|
- `:ui`: Contains almost the entire user interface (except for account sign-in UIs). The only
|
||||||
- `:accounts`: Common APIs to manage different account types (Google, Microsoft, Nextcloud, …)
|
module that uses Jetpack Compose.
|
||||||
- `:backup`: Backup and restore functionality
|
- `:services`: Higher level APIs for the app's business logic. Each module represents a specific
|
||||||
- `:badges`: Provide different types of badges that are displayed on app icons
|
functionality of the launcher
|
||||||
- `:icons`: Used to retrieve icons for items. Handles icon packs, themed icons and also custom icons (on a higher level)
|
- `:accounts`: Common APIs to manage different account types (Nextcloud, Owncloud)
|
||||||
- `:music`: Manage media sessions and extract metadata
|
- `:backup`: Backup and restore functionality
|
||||||
- `:search`: The search.
|
- `:badges`: Provide different types of badges that are displayed on app icons
|
||||||
- `:tags`: Edit, copy and delete tags
|
- `:favorites`: Handles pinned items and item visibility
|
||||||
- `:widgets`: High-level APIs to manage widgets
|
- `:global-actions`: Handles global system actions like turning the screen off, and opening the
|
||||||
- `:data`: Lower level APIs. Generally, these modules are more multi-purpose and provide the data that is consumed by the `:services` modules.
|
notification drawer
|
||||||
- `:applications`: Installed apps and app search
|
- `:icons`: Used to retrieve icons for items. Handles icon packs, themed icons and also custom
|
||||||
- `:appshortcuts`: Query apps shortcuts for apps and shortcut search
|
icons (on a higher level)
|
||||||
- `:calendar`: query calendar events for the calendar widget and calendar search
|
- `:music`: Manage media sessions and extract metadata
|
||||||
- `:calculator`: Implements the calculator. Should probably be moved to `:services`
|
- `:plugins`: Plugin service to list, enable and disable plugins.
|
||||||
- `:unitconverter`: Unit and currency converter. Should probably be moved to `:services`
|
- `:search`: Search service
|
||||||
- `:contacts`: Query contacts on the device
|
- `:tags`: Edit, copy and delete tags
|
||||||
- `:currencies`: APIs to fetch currency conversion rates, used by `:data:unitconverter`
|
- `:widgets`: High-level APIs to manage widgets
|
||||||
- `:customattrs`: common (low-level) APIs to store per-app customizations (custom labels, custom icons, tags)
|
- `:data`: Lower level APIs. Usually, these modules implement interfaces from the `:core:base`
|
||||||
- `:favorites`: Handles pinned, frequently used and hidden items and serialization / deserialization of items. Depends on most of the search modules (`:applications`, `:calendar`, `:contacts`, etc.)´. This module needs to be refactored and split into at least two different modules.
|
module, so that `:services` don't need to depend on `:data` modules directly.
|
||||||
- `:files`: Manage and find files (local and cloud)
|
- `:applications`: Implements APIs for app grid and app search
|
||||||
- `:notifications`: APIs to read notifications. Contains the app's `NotificationListenerService`
|
- `:appshortcuts`: Implements app shortcuts (search and shortcuts)
|
||||||
- `:websites`: Website search
|
- `:calendar`: Implements calendar search
|
||||||
- `:weather`: APIs to fetch weather data
|
- `:calculator`: Implements the calculator.
|
||||||
- `:widgets`: CRUD operations to store and retrieve widgets in/from the database
|
- `:contacts`: Implements contact search
|
||||||
- `:wikipedia`: APIs to search Wikipedia
|
- `:currencies`: APIs to fetch currency conversion rates, used by `:data:unitconverter`
|
||||||
|
- `:customattrs`: common (low-level) APIs to store per-app customizations (custom labels, custom
|
||||||
|
icons, tags)
|
||||||
|
- `:database`: The launcher database, uses AndroidX Room
|
||||||
|
- `:files`: Implements file search
|
||||||
|
- `:locations`: Implements location search
|
||||||
|
- `:notifications`: APIs to read notifications. Contains the app's `NotificationListenerService`
|
||||||
|
- `:plugins`: Low level plugin APIs.
|
||||||
|
- `:unitconverter`: Implements unit and currency converter.
|
||||||
|
- `:weather`: APIs to fetch weather data
|
||||||
|
- `:websites`: Implements website search
|
||||||
|
- `:widgets`: CRUD operations to store and retrieve widgets in/from the database
|
||||||
|
- `:wikipedia`: Implements Wikipedia search
|
||||||
- `:core`
|
- `:core`
|
||||||
- `:base`: Commonly used data classes, helper functions and utilities. Also icon resources (if they do not need localization).
|
- `:base`: Interface definitions for the most commonly used data types. Commonly used data
|
||||||
- `:i18n`: All resources that require localization. Mainly strings but can also be used for icon resources if they need localization.
|
classes, helper functions and utilities.
|
||||||
- `:ktx`: Commonly used Kotlin extension functions
|
- `:compat`: Compatibility helpers for old Android versions
|
||||||
- `:compat`: Compatibility helpers for old Android versions
|
- `:crashreporter`: Crash reporter; based on https://github.com/MindorksOpenSource/CrashReporter
|
||||||
- `:crashreporter`: Crash reporter; based on https://github.com/MindorksOpenSource/CrashReporter
|
- `:devicepose`: Location and positioning APIs.
|
||||||
- `:permissions`: Request and observe permission status for this app
|
- `:i18n`: All resources that require localization. Mainly strings but can also be used for icon
|
||||||
- `:preferences`: Store user preferences; uses AndroidX Datastore
|
resources if they need localization.
|
||||||
- `:database`: the launcher database, uses AndroidX Room
|
- `:ktx`: Commonly used Kotlin extension functions
|
||||||
|
- `:permissions`: Request and observe permission status for this app
|
||||||
|
- `:preferences`: Store user preferences; uses AndroidX Datastore
|
||||||
|
- `:profiles`: Manage user profiles on the device
|
||||||
- `:libs`: Somewhat standalone modules and 3rd party libraries that do not depend on `:core:base`
|
- `:libs`: Somewhat standalone modules and 3rd party libraries that do not depend on `:core:base`
|
||||||
- `:g-services`: Google APIs and Google sign-in; used by `:accounts` and `:files`
|
- `:address-formatter`: Fork of https://github.com/woheller69/AndroidAddressFormatter (because
|
||||||
- `:ms-services`: Microsoft APIs and Microsoft sign-in; used by `:accounts` and `:files`
|
the upstream library is only available as a `-SNAPSHOT` version)
|
||||||
- `:material-color-utilities`: This library: https://github.com/material-foundation/material-color-utilities (not available as Gradle package yet)
|
- `:material-color-utilities`: This
|
||||||
- `:webdav`: common APIs for WebDAV search, used by `:nextcloud` and `:owncloud`
|
library: https://github.com/material-foundation/material-color-utilities (not available as
|
||||||
- `:nextcloud`: Nextcloud APIs and Nextcloud sign-in; used by `:accounts` and `:files`
|
Gradle package yet)
|
||||||
- `:owncloud`: Owncloud APIs and Owncloud sign-in; used by `:accounts` and `:files`
|
- `:nextcloud`: Nextcloud APIs and Nextcloud sign-in; used by `:accounts` and `:files`
|
||||||
|
- `:owncloud`: Owncloud APIs and Owncloud sign-in; used by `:accounts` and `:files`
|
||||||
|
- `:tinypinyin`: Fork of https://github.com/promeG/TinyPinyin, because the upstream library
|
||||||
|
isn't available in one of the allowed Maven repositories for F-Droid
|
||||||
|
- `:webdav`: common APIs for WebDAV search, used by `:nextcloud` and `:owncloud`
|
||||||
|
|
||||||
|
Most of the modules have a `Module.kt` file in their root which contains Koin definitions to make
|
||||||
Most of the modules have a `Module.kt` file in their root which contains Koin definitions to make the APIs accessible to other modules.
|
the APIs accessible to other modules.
|
||||||
|
|
||||||
[](/img/dependency-graph.dot.png))
|
|
||||||
|
|||||||
@ -81,9 +81,6 @@ functionality:
|
|||||||
plugin), your current location may be shared with that plugin (only if you have granted location
|
plugin), your current location may be shared with that plugin (only if you have granted location
|
||||||
permissions).
|
permissions).
|
||||||
|
|
||||||
- **First-Party Plugins:** Developed by the Kvaesitso team.
|
|
||||||
- **Third-Party Plugins:** Developed by external developers.
|
|
||||||
|
|
||||||
### Data Stored by Kvaesitso
|
### Data Stored by Kvaesitso
|
||||||
|
|
||||||
Kvaesitso may store copies of the data it receives from plugins locally in its own local storage
|
Kvaesitso may store copies of the data it receives from plugins locally in its own local storage
|
||||||
@ -113,10 +110,6 @@ and subject to the **GitHub Privacy Policy**.
|
|||||||
- **Data Deletion:** Uninstalling the app or clearing its data removes all stored information.
|
- **Data Deletion:** Uninstalling the app or clearing its data removes all stored information.
|
||||||
- **Opt-Out:** Optional integrations and plugins can be enabled or disabled at any time.
|
- **Opt-Out:** Optional integrations and plugins can be enabled or disabled at any time.
|
||||||
|
|
||||||
## 8. Contact Us
|
|
||||||
|
|
||||||
For questions or concerns about this privacy policy, please contact us at [support email].
|
|
||||||
|
|
||||||
## Appendix A: Plugin Policies
|
## Appendix A: Plugin Policies
|
||||||
|
|
||||||
### Google Apps Plugin
|
### Google Apps Plugin
|
||||||
|
|||||||
@ -1,332 +0,0 @@
|
|||||||
digraph {
|
|
||||||
graph [label="MM20Launcher2\n ",labelloc=t,fontsize=30,ranksep=1.4];
|
|
||||||
node [style=filled, fillcolor="#bbbbbb"];
|
|
||||||
rankdir=TB;
|
|
||||||
|
|
||||||
# Projects
|
|
||||||
|
|
||||||
":app:app" [fillcolor="#baffc9"];
|
|
||||||
":app:ui" [fillcolor="#baffc9"];
|
|
||||||
":core:base" [fillcolor="#94c1ff"];
|
|
||||||
":core:compat" [fillcolor="#94c1ff"];
|
|
||||||
":core:crashreporter" [fillcolor="#94c1ff"];
|
|
||||||
":core:i18n" [fillcolor="#94c1ff"];
|
|
||||||
":core:ktx" [fillcolor="#94c1ff"];
|
|
||||||
":core:permissions" [fillcolor="#94c1ff"];
|
|
||||||
":core:preferences" [fillcolor="#94c1ff"];
|
|
||||||
":core:shared" [fillcolor="#94c1ff"];
|
|
||||||
":data:applications" [fillcolor="#fff694"];
|
|
||||||
":data:appshortcuts" [fillcolor="#fff694"];
|
|
||||||
":data:calculator" [fillcolor="#fff694"];
|
|
||||||
":data:calendar" [fillcolor="#fff694"];
|
|
||||||
":data:contacts" [fillcolor="#fff694"];
|
|
||||||
":data:currencies" [fillcolor="#fff694"];
|
|
||||||
":data:customattrs" [fillcolor="#fff694"];
|
|
||||||
":data:database" [fillcolor="#fff694"];
|
|
||||||
":data:files" [fillcolor="#fff694"];
|
|
||||||
":data:notifications" [fillcolor="#fff694"];
|
|
||||||
":data:search-actions" [fillcolor="#fff694"];
|
|
||||||
":data:searchable" [fillcolor="#fff694"];
|
|
||||||
":data:themes" [fillcolor="#fff694"];
|
|
||||||
":data:unitconverter" [fillcolor="#fff694"];
|
|
||||||
":data:weather" [fillcolor="#fff694"];
|
|
||||||
":data:websites" [fillcolor="#fff694"];
|
|
||||||
":data:widgets" [fillcolor="#fff694"];
|
|
||||||
":data:wikipedia" [fillcolor="#fff694"];
|
|
||||||
":libs:g-services" [fillcolor="#ad94ff"];
|
|
||||||
":libs:material-color-utilities" [fillcolor="#ad94ff"];
|
|
||||||
":libs:ms-services" [fillcolor="#ad94ff"];
|
|
||||||
":libs:nextcloud" [fillcolor="#ad94ff"];
|
|
||||||
":libs:owncloud" [fillcolor="#ad94ff"];
|
|
||||||
":libs:webdav" [fillcolor="#ad94ff"];
|
|
||||||
":plugins:sdk" [];
|
|
||||||
":services:accounts" [fillcolor="#ff9498"];
|
|
||||||
":services:backup" [fillcolor="#ff9498"];
|
|
||||||
":services:badges" [fillcolor="#ff9498"];
|
|
||||||
":services:favorites" [fillcolor="#ff9498"];
|
|
||||||
":services:global-actions" [fillcolor="#ff9498"];
|
|
||||||
":services:icons" [fillcolor="#ff9498"];
|
|
||||||
":services:music" [fillcolor="#ff9498"];
|
|
||||||
":services:search" [fillcolor="#ff9498"];
|
|
||||||
":services:tags" [fillcolor="#ff9498"];
|
|
||||||
":services:widgets" [fillcolor="#ff9498"];
|
|
||||||
|
|
||||||
{rank = same;}
|
|
||||||
|
|
||||||
# Dependencies
|
|
||||||
|
|
||||||
":app:app" -> ":app:app"
|
|
||||||
":app:app" -> ":services:accounts" [style=dotted]
|
|
||||||
":app:app" -> ":data:applications" [style=dotted]
|
|
||||||
":app:app" -> ":data:appshortcuts" [style=dotted]
|
|
||||||
":app:app" -> ":services:backup" [style=dotted]
|
|
||||||
":app:app" -> ":services:badges" [style=dotted]
|
|
||||||
":app:app" -> ":core:base" [style=dotted]
|
|
||||||
":app:app" -> ":data:calculator" [style=dotted]
|
|
||||||
":app:app" -> ":data:calendar" [style=dotted]
|
|
||||||
":app:app" -> ":data:contacts" [style=dotted]
|
|
||||||
":app:app" -> ":core:crashreporter" [style=dotted]
|
|
||||||
":app:app" -> ":data:currencies" [style=dotted]
|
|
||||||
":app:app" -> ":data:customattrs" [style=dotted]
|
|
||||||
":app:app" -> ":data:searchable" [style=dotted]
|
|
||||||
":app:app" -> ":data:themes" [style=dotted]
|
|
||||||
":app:app" -> ":data:files" [style=dotted]
|
|
||||||
":app:app" -> ":libs:g-services" [style=dotted]
|
|
||||||
":app:app" -> ":core:i18n" [style=dotted]
|
|
||||||
":app:app" -> ":services:icons" [style=dotted]
|
|
||||||
":app:app" -> ":core:ktx" [style=dotted]
|
|
||||||
":app:app" -> ":services:music" [style=dotted]
|
|
||||||
":app:app" -> ":libs:nextcloud" [style=dotted]
|
|
||||||
":app:app" -> ":data:notifications" [style=dotted]
|
|
||||||
":app:app" -> ":libs:owncloud" [style=dotted]
|
|
||||||
":app:app" -> ":core:permissions" [style=dotted]
|
|
||||||
":app:app" -> ":core:preferences" [style=dotted]
|
|
||||||
":app:app" -> ":services:search" [style=dotted]
|
|
||||||
":app:app" -> ":services:tags" [style=dotted]
|
|
||||||
":app:app" -> ":data:unitconverter" [style=dotted]
|
|
||||||
":app:app" -> ":app:ui" [style=dotted]
|
|
||||||
":app:app" -> ":data:weather" [style=dotted]
|
|
||||||
":app:app" -> ":data:websites" [style=dotted]
|
|
||||||
":app:app" -> ":data:widgets" [style=dotted]
|
|
||||||
":app:app" -> ":data:wikipedia" [style=dotted]
|
|
||||||
":app:app" -> ":data:database" [style=dotted]
|
|
||||||
":app:app" -> ":data:search-actions" [style=dotted]
|
|
||||||
":app:app" -> ":services:global-actions" [style=dotted]
|
|
||||||
":app:app" -> ":services:widgets" [style=dotted]
|
|
||||||
":app:app" -> ":services:favorites" [style=dotted]
|
|
||||||
":app:ui" -> ":app:ui"
|
|
||||||
":app:ui" -> ":libs:material-color-utilities" [style=dotted]
|
|
||||||
":app:ui" -> ":core:base" [style=dotted]
|
|
||||||
":app:ui" -> ":core:i18n" [style=dotted]
|
|
||||||
":app:ui" -> ":core:compat" [style=dotted]
|
|
||||||
":app:ui" -> ":core:ktx" [style=dotted]
|
|
||||||
":app:ui" -> ":services:icons" [style=dotted]
|
|
||||||
":app:ui" -> ":services:music" [style=dotted]
|
|
||||||
":app:ui" -> ":services:tags" [style=dotted]
|
|
||||||
":app:ui" -> ":data:weather" [style=dotted]
|
|
||||||
":app:ui" -> ":data:calendar" [style=dotted]
|
|
||||||
":app:ui" -> ":services:search" [style=dotted]
|
|
||||||
":app:ui" -> ":core:preferences" [style=dotted]
|
|
||||||
":app:ui" -> ":data:applications" [style=dotted]
|
|
||||||
":app:ui" -> ":data:appshortcuts" [style=dotted]
|
|
||||||
":app:ui" -> ":data:calculator" [style=dotted]
|
|
||||||
":app:ui" -> ":data:files" [style=dotted]
|
|
||||||
":app:ui" -> ":data:widgets" [style=dotted]
|
|
||||||
":app:ui" -> ":data:searchable" [style=dotted]
|
|
||||||
":app:ui" -> ":data:themes" [style=dotted]
|
|
||||||
":app:ui" -> ":data:wikipedia" [style=dotted]
|
|
||||||
":app:ui" -> ":services:badges" [style=dotted]
|
|
||||||
":app:ui" -> ":core:crashreporter" [style=dotted]
|
|
||||||
":app:ui" -> ":data:notifications" [style=dotted]
|
|
||||||
":app:ui" -> ":data:contacts" [style=dotted]
|
|
||||||
":app:ui" -> ":core:permissions" [style=dotted]
|
|
||||||
":app:ui" -> ":data:websites" [style=dotted]
|
|
||||||
":app:ui" -> ":data:unitconverter" [style=dotted]
|
|
||||||
":app:ui" -> ":libs:nextcloud" [style=dotted]
|
|
||||||
":app:ui" -> ":libs:g-services" [style=dotted]
|
|
||||||
":app:ui" -> ":libs:owncloud" [style=dotted]
|
|
||||||
":app:ui" -> ":services:accounts" [style=dotted]
|
|
||||||
":app:ui" -> ":services:backup" [style=dotted]
|
|
||||||
":app:ui" -> ":data:search-actions" [style=dotted]
|
|
||||||
":app:ui" -> ":services:global-actions" [style=dotted]
|
|
||||||
":app:ui" -> ":services:widgets" [style=dotted]
|
|
||||||
":app:ui" -> ":services:favorites" [style=dotted]
|
|
||||||
":core:shared" -> ":core:shared"
|
|
||||||
":core:preferences" -> ":core:preferences"
|
|
||||||
":core:preferences" -> ":core:ktx" [style=dotted]
|
|
||||||
":core:preferences" -> ":core:i18n" [style=dotted]
|
|
||||||
":core:preferences" -> ":core:base" [style=dotted]
|
|
||||||
":core:preferences" -> ":core:crashreporter" [style=dotted]
|
|
||||||
":core:preferences" -> ":libs:material-color-utilities" [style=dotted]
|
|
||||||
":core:permissions" -> ":core:permissions"
|
|
||||||
":core:permissions" -> ":core:ktx" [style=dotted]
|
|
||||||
":core:permissions" -> ":core:base" [style=dotted]
|
|
||||||
":core:permissions" -> ":core:crashreporter" [style=dotted]
|
|
||||||
":core:compat" -> ":core:compat"
|
|
||||||
":core:crashreporter" -> ":core:crashreporter"
|
|
||||||
":core:crashreporter" -> ":core:base" [style=dotted]
|
|
||||||
":core:i18n" -> ":core:i18n"
|
|
||||||
":core:ktx" -> ":core:ktx"
|
|
||||||
":core:base" -> ":core:base"
|
|
||||||
":core:base" -> ":core:ktx" [style=dotted]
|
|
||||||
":core:base" -> ":core:i18n" [style=dotted]
|
|
||||||
":core:base" -> ":libs:material-color-utilities" [style=dotted]
|
|
||||||
":data:calendar" -> ":data:calendar"
|
|
||||||
":data:calendar" -> ":core:ktx" [style=dotted]
|
|
||||||
":data:calendar" -> ":core:base" [style=dotted]
|
|
||||||
":data:calendar" -> ":core:permissions" [style=dotted]
|
|
||||||
":data:calendar" -> ":libs:material-color-utilities" [style=dotted]
|
|
||||||
":data:calculator" -> ":data:calculator"
|
|
||||||
":data:calculator" -> ":core:base" [style=dotted]
|
|
||||||
":data:appshortcuts" -> ":data:appshortcuts"
|
|
||||||
":data:appshortcuts" -> ":data:applications" [style=dotted]
|
|
||||||
":data:appshortcuts" -> ":core:permissions" [style=dotted]
|
|
||||||
":data:appshortcuts" -> ":core:base" [style=dotted]
|
|
||||||
":data:appshortcuts" -> ":core:ktx" [style=dotted]
|
|
||||||
":data:appshortcuts" -> ":core:crashreporter" [style=dotted]
|
|
||||||
":data:widgets" -> ":data:widgets"
|
|
||||||
":data:widgets" -> ":data:weather" [style=dotted]
|
|
||||||
":data:widgets" -> ":data:calendar" [style=dotted]
|
|
||||||
":data:widgets" -> ":services:music" [style=dotted]
|
|
||||||
":data:widgets" -> ":core:ktx" [style=dotted]
|
|
||||||
":data:widgets" -> ":core:base" [style=dotted]
|
|
||||||
":data:widgets" -> ":core:preferences" [style=dotted]
|
|
||||||
":data:widgets" -> ":data:database" [style=dotted]
|
|
||||||
":data:widgets" -> ":core:crashreporter" [style=dotted]
|
|
||||||
":data:searchable" -> ":data:searchable"
|
|
||||||
":data:searchable" -> ":core:base" [style=dotted]
|
|
||||||
":data:searchable" -> ":data:calendar" [style=dotted]
|
|
||||||
":data:searchable" -> ":data:database" [style=dotted]
|
|
||||||
":data:searchable" -> ":core:preferences" [style=dotted]
|
|
||||||
":data:searchable" -> ":core:ktx" [style=dotted]
|
|
||||||
":data:searchable" -> ":data:wikipedia" [style=dotted]
|
|
||||||
":data:searchable" -> ":services:badges" [style=dotted]
|
|
||||||
":data:searchable" -> ":core:crashreporter" [style=dotted]
|
|
||||||
":data:unitconverter" -> ":data:unitconverter"
|
|
||||||
":data:unitconverter" -> ":core:preferences" [style=dotted]
|
|
||||||
":data:unitconverter" -> ":data:currencies" [style=dotted]
|
|
||||||
":data:unitconverter" -> ":core:base" [style=dotted]
|
|
||||||
":data:unitconverter" -> ":core:i18n" [style=dotted]
|
|
||||||
":data:themes" -> ":data:themes"
|
|
||||||
":data:themes" -> ":core:base" [style=dotted]
|
|
||||||
":data:themes" -> ":data:database" [style=dotted]
|
|
||||||
":data:themes" -> ":core:crashreporter" [style=dotted]
|
|
||||||
":data:themes" -> ":libs:material-color-utilities" [style=dotted]
|
|
||||||
":data:database" -> ":data:database"
|
|
||||||
":data:database" -> ":core:i18n" [style=dotted]
|
|
||||||
":data:database" -> ":core:ktx" [style=dotted]
|
|
||||||
":data:database" -> ":core:preferences" [style=dotted]
|
|
||||||
":data:customattrs" -> ":data:customattrs"
|
|
||||||
":data:customattrs" -> ":data:database" [style=dotted]
|
|
||||||
":data:customattrs" -> ":core:base" [style=dotted]
|
|
||||||
":data:customattrs" -> ":core:ktx" [style=dotted]
|
|
||||||
":data:customattrs" -> ":core:crashreporter" [style=dotted]
|
|
||||||
":data:customattrs" -> ":data:searchable" [style=dotted]
|
|
||||||
":data:weather" -> ":data:weather"
|
|
||||||
":data:weather" -> ":data:database" [style=dotted]
|
|
||||||
":data:weather" -> ":core:ktx" [style=dotted]
|
|
||||||
":data:weather" -> ":core:crashreporter" [style=dotted]
|
|
||||||
":data:weather" -> ":core:preferences" [style=dotted]
|
|
||||||
":data:weather" -> ":core:permissions" [style=dotted]
|
|
||||||
":data:weather" -> ":core:i18n" [style=dotted]
|
|
||||||
":data:files" -> ":data:files"
|
|
||||||
":data:files" -> ":core:base" [style=dotted]
|
|
||||||
":data:files" -> ":core:ktx" [style=dotted]
|
|
||||||
":data:files" -> ":libs:g-services" [style=dotted]
|
|
||||||
":data:files" -> ":libs:nextcloud" [style=dotted]
|
|
||||||
":data:files" -> ":libs:owncloud" [style=dotted]
|
|
||||||
":data:files" -> ":core:i18n" [style=dotted]
|
|
||||||
":data:files" -> ":core:permissions" [style=dotted]
|
|
||||||
":data:files" -> ":core:crashreporter" [style=dotted]
|
|
||||||
":data:files" -> ":core:preferences" [style=dotted]
|
|
||||||
":data:websites" -> ":data:websites"
|
|
||||||
":data:websites" -> ":core:base" [style=dotted]
|
|
||||||
":data:websites" -> ":core:ktx" [style=dotted]
|
|
||||||
":data:search-actions" -> ":data:search-actions"
|
|
||||||
":data:search-actions" -> ":core:base" [style=dotted]
|
|
||||||
":data:search-actions" -> ":data:database" [style=dotted]
|
|
||||||
":data:search-actions" -> ":core:ktx" [style=dotted]
|
|
||||||
":data:search-actions" -> ":core:preferences" [style=dotted]
|
|
||||||
":data:search-actions" -> ":core:crashreporter" [style=dotted]
|
|
||||||
":data:wikipedia" -> ":data:wikipedia"
|
|
||||||
":data:wikipedia" -> ":core:preferences" [style=dotted]
|
|
||||||
":data:wikipedia" -> ":core:base" [style=dotted]
|
|
||||||
":data:wikipedia" -> ":core:ktx" [style=dotted]
|
|
||||||
":data:wikipedia" -> ":core:crashreporter" [style=dotted]
|
|
||||||
":data:contacts" -> ":data:contacts"
|
|
||||||
":data:contacts" -> ":core:ktx" [style=dotted]
|
|
||||||
":data:contacts" -> ":core:base" [style=dotted]
|
|
||||||
":data:contacts" -> ":core:permissions" [style=dotted]
|
|
||||||
":data:notifications" -> ":data:notifications"
|
|
||||||
":data:notifications" -> ":core:permissions" [style=dotted]
|
|
||||||
":data:applications" -> ":data:applications"
|
|
||||||
":data:applications" -> ":core:base" [style=dotted]
|
|
||||||
":data:applications" -> ":core:ktx" [style=dotted]
|
|
||||||
":data:applications" -> ":core:compat" [style=dotted]
|
|
||||||
":data:currencies" -> ":data:currencies"
|
|
||||||
":data:currencies" -> ":core:ktx" [style=dotted]
|
|
||||||
":data:currencies" -> ":core:i18n" [style=dotted]
|
|
||||||
":data:currencies" -> ":data:database" [style=dotted]
|
|
||||||
":data:currencies" -> ":core:crashreporter" [style=dotted]
|
|
||||||
":plugins:sdk" -> ":plugins:sdk"
|
|
||||||
":plugins:sdk" -> ":core:shared" [style=dotted]
|
|
||||||
":services:badges" -> ":services:badges"
|
|
||||||
":services:badges" -> ":core:ktx" [style=dotted]
|
|
||||||
":services:badges" -> ":data:applications" [style=dotted]
|
|
||||||
":services:badges" -> ":data:appshortcuts" [style=dotted]
|
|
||||||
":services:badges" -> ":data:notifications" [style=dotted]
|
|
||||||
":services:badges" -> ":core:preferences" [style=dotted]
|
|
||||||
":services:badges" -> ":core:base" [style=dotted]
|
|
||||||
":services:badges" -> ":data:files" [style=dotted]
|
|
||||||
":services:favorites" -> ":services:favorites"
|
|
||||||
":services:favorites" -> ":core:base" [style=dotted]
|
|
||||||
":services:favorites" -> ":core:i18n" [style=dotted]
|
|
||||||
":services:favorites" -> ":data:searchable" [style=dotted]
|
|
||||||
":services:backup" -> ":services:backup"
|
|
||||||
":services:backup" -> ":data:searchable" [style=dotted]
|
|
||||||
":services:backup" -> ":data:widgets" [style=dotted]
|
|
||||||
":services:backup" -> ":data:search-actions" [style=dotted]
|
|
||||||
":services:backup" -> ":core:preferences" [style=dotted]
|
|
||||||
":services:backup" -> ":core:ktx" [style=dotted]
|
|
||||||
":services:backup" -> ":data:customattrs" [style=dotted]
|
|
||||||
":services:backup" -> ":data:themes" [style=dotted]
|
|
||||||
":services:search" -> ":services:search"
|
|
||||||
":services:search" -> ":data:calculator" [style=dotted]
|
|
||||||
":services:search" -> ":data:unitconverter" [style=dotted]
|
|
||||||
":services:search" -> ":data:customattrs" [style=dotted]
|
|
||||||
":services:search" -> ":data:search-actions" [style=dotted]
|
|
||||||
":services:search" -> ":core:base" [style=dotted]
|
|
||||||
":services:search" -> ":core:preferences" [style=dotted]
|
|
||||||
":services:search" -> ":core:crashreporter" [style=dotted]
|
|
||||||
":services:search" -> ":core:ktx" [style=dotted]
|
|
||||||
":services:music" -> ":services:music"
|
|
||||||
":services:music" -> ":core:ktx" [style=dotted]
|
|
||||||
":services:music" -> ":core:preferences" [style=dotted]
|
|
||||||
":services:music" -> ":data:notifications" [style=dotted]
|
|
||||||
":services:music" -> ":core:crashreporter" [style=dotted]
|
|
||||||
":services:accounts" -> ":services:accounts"
|
|
||||||
":services:accounts" -> ":libs:g-services" [style=dotted]
|
|
||||||
":services:accounts" -> ":libs:owncloud" [style=dotted]
|
|
||||||
":services:accounts" -> ":libs:nextcloud" [style=dotted]
|
|
||||||
":services:icons" -> ":data:customattrs"
|
|
||||||
":services:icons" -> ":services:icons"
|
|
||||||
":services:icons" -> ":data:database" [style=dotted]
|
|
||||||
":services:icons" -> ":core:preferences" [style=dotted]
|
|
||||||
":services:icons" -> ":core:ktx" [style=dotted]
|
|
||||||
":services:icons" -> ":core:base" [style=dotted]
|
|
||||||
":services:icons" -> ":data:applications" [style=dotted]
|
|
||||||
":services:icons" -> ":core:crashreporter" [style=dotted]
|
|
||||||
":services:widgets" -> ":services:widgets"
|
|
||||||
":services:widgets" -> ":core:base" [style=dotted]
|
|
||||||
":services:widgets" -> ":core:i18n" [style=dotted]
|
|
||||||
":services:widgets" -> ":data:widgets" [style=dotted]
|
|
||||||
":services:global-actions" -> ":services:global-actions"
|
|
||||||
":services:global-actions" -> ":core:preferences" [style=dotted]
|
|
||||||
":services:global-actions" -> ":core:base" [style=dotted]
|
|
||||||
":services:global-actions" -> ":core:i18n" [style=dotted]
|
|
||||||
":services:global-actions" -> ":core:permissions" [style=dotted]
|
|
||||||
":services:tags" -> ":services:tags"
|
|
||||||
":services:tags" -> ":core:preferences" [style=dotted]
|
|
||||||
":services:tags" -> ":core:base" [style=dotted]
|
|
||||||
":services:tags" -> ":core:ktx" [style=dotted]
|
|
||||||
":services:tags" -> ":core:crashreporter" [style=dotted]
|
|
||||||
":services:tags" -> ":data:customattrs" [style=dotted]
|
|
||||||
":services:tags" -> ":data:searchable" [style=dotted]
|
|
||||||
":libs:nextcloud" -> ":libs:webdav"
|
|
||||||
":libs:nextcloud" -> ":libs:nextcloud"
|
|
||||||
":libs:nextcloud" -> ":core:i18n" [style=dotted]
|
|
||||||
":libs:webdav" -> ":libs:webdav"
|
|
||||||
":libs:webdav" -> ":core:crashreporter" [style=dotted]
|
|
||||||
":libs:webdav" -> ":core:ktx" [style=dotted]
|
|
||||||
":libs:g-services" -> ":libs:g-services"
|
|
||||||
":libs:g-services" -> ":core:i18n" [style=dotted]
|
|
||||||
":libs:g-services" -> ":core:crashreporter" [style=dotted]
|
|
||||||
":libs:material-color-utilities" -> ":libs:material-color-utilities"
|
|
||||||
":libs:owncloud" -> ":libs:webdav"
|
|
||||||
":libs:owncloud" -> ":libs:owncloud"
|
|
||||||
":libs:owncloud" -> ":core:crashreporter" [style=dotted]
|
|
||||||
":libs:owncloud" -> ":core:ktx" [style=dotted]
|
|
||||||
":libs:owncloud" -> ":core:i18n" [style=dotted]
|
|
||||||
":libs:ms-services" -> ":libs:ms-services"
|
|
||||||
":libs:ms-services" -> ":core:crashreporter" [style=dotted]
|
|
||||||
}
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 2.0 MiB |
Loading…
x
Reference in New Issue
Block a user