Repo created

This commit is contained in:
Fr4nz D13trich 2025-11-22 13:56:56 +01:00
parent 75dc487a7a
commit 39c29d175b
6317 changed files with 388324 additions and 2 deletions

12
app-k9mail/README.md Normal file
View file

@ -0,0 +1,12 @@
# K-9 Mail
This is the source code repository for the K-9 Mail project.
## Maintenance
### F-Droid
K-9 Mail is available on F-Droid. The apps metadata for F-Droid is available within the [metadata](fastlane/metadata)
folder. The metadata is setup according to
the [All About Descriptions, Graphics, and Screenshots](https://f-droid.org/en/docs/All_About_Descriptions_Graphics_and_Screenshots/)
and [Build Metadata Reference](https://f-droid.org/en/docs/Build_Metadata_Reference/).

View file

@ -0,0 +1,99 @@
application-icon-120:'res/drawable-v26/ic_launcher.xml'
application-icon-160:'res/drawable-v26/ic_launcher.xml'
application-icon-240:'res/drawable-v26/ic_launcher.xml'
application-icon-320:'res/drawable-v26/ic_launcher.xml'
application-icon-480:'res/drawable-v26/ic_launcher.xml'
application-icon-640:'res/drawable-v26/ic_launcher.xml'
application-icon-65534:'res/drawable-v26/ic_launcher.xml'
application-label-ar:'بريد K-9'
application-label-be:'Пошта K-9'
application-label-bg:'K-9 Поща'
application-label-ca:'K-9 Mail'
application-label-co:'K-9 Mail'
application-label-cs:'K-9 Mail'
application-label-cy:'K-9 Mail'
application-label-da:'K-9 Mail'
application-label-de:'K-9 Mail'
application-label-el:'K-9 Mail'
application-label-en-GB:'K-9 Mail'
application-label-en:'K-9 Mail'
application-label-eo:'K-9 Retpoŝtilo'
application-label-es:'K-9 Mail'
application-label-et:'K-9 Mail'
application-label-eu:'K-9 Mail'
application-label-fa:'نامهٔ کی۹'
application-label-fi:'K-9 Mail'
application-label-fr:'Courriel K-9'
application-label-fy:'K-9 Mail'
application-label-ga:'K-9 Post'
application-label-gl:'K-9 Mail'
application-label-hr:'K-9 Mail'
application-label-hu:'K-9 Mail'
application-label-in:'Surel K-9'
application-label-is:'K-9 - Póstur'
application-label-it:'K-9 Mail'
application-label-iw:'K-9 דוא\"ל'
application-label-ja:'K-9 Mail'
application-label-ko:'K-9 메일'
application-label-lt:'K-9 paštas'
application-label-lv:'K-9 pasts'
application-label-nb:'K-9 E-post'
application-label-nl:'K-9 Mail'
application-label-nn:'K-9 e-post'
application-label-pl:'K-9 Mail'
application-label-pt-BR:'K-9 Mail'
application-label-pt-PT:'K-9 Mail'
application-label-pt:'Email K-9'
application-label-ro:'K-9 Mail'
application-label-ru:'Почта K-9'
application-label-sk:'K-9 Mail'
application-label-sl:'Pošta K-9'
application-label-sq:'K-9 Mail'
application-label-sr:'K-9 Mail'
application-label-sv:'K-9 Mail'
application-label-tr:'K-9 Posta'
application-label-uk:'K-9 Mail'
application-label-vi:'Thư K-9'
application-label-zh-CN:'K-9 Mail'
application-label-zh-TW:'K-9 Mail'
application-label-zh:'K-9 Mail'
application-label:'K-9 Mail'
application: label='K-9 Mail' icon='res/drawable-v26/ic_launcher.xml'
densities: '120' '160' '240' '320' '480' '640' '65534'
feature-group: label=''
install-location:'auto'
launchable-activity: name='com.fsck.k9.activity.MessageList' label='' icon=''
locales: '--_--' 'ar' 'be' 'bg' 'ca' 'co' 'cs' 'cy' 'da' 'de' 'el' 'en' 'en-GB' 'eo' 'es' 'et' 'eu' 'fa' 'fi' 'fr' 'fy' 'ga' 'gl' 'hr' 'hu' 'in' 'is' 'it' 'iw' 'ja' 'ko' 'lt' 'lv' 'nb' 'nl' 'nn' 'pl' 'pt' 'pt-BR' 'pt-PT' 'ro' 'ru' 'sk' 'sl' 'sq' 'sr' 'sv' 'tr' 'uk' 'vi' 'zh' 'zh-CN' 'zh-TW'
main
minSdkVersion:'21'
native-code: 'arm64-v8a' 'armeabi-v7a' 'x86' 'x86_64'
other-activities
other-receivers
other-services
package: name='com.fsck.k9' platformBuildVersionName='15' platformBuildVersionCode='35' compileSdkVersion='35' compileSdkVersionCodename='15'
property: name='android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE' value='This service is used to maintain a continuous connection to an IMAP server to be able to provide instant notifications to the user when a new email arrives. Firebase Cloud Messaging is not suitable for this task, neither are mechanisms like AndroidX WorkManager. Other foreground service types aren't a good fit for this use case.'
provides-component:'app-widget'
supports-any-density: 'true'
supports-screens: 'small' 'normal' 'large' 'xlarge'
targetSdkVersion:'35'
uses-feature-not-required: name='android.hardware.camera'
uses-feature-not-required: name='android.hardware.touchscreen'
uses-library-not-required:'androidx.window.extensions'
uses-library-not-required:'androidx.window.sidecar'
uses-library-not-required:'com.sec.android.app.multiwindow'
uses-permission: name='android.permission.ACCESS_NETWORK_STATE'
uses-permission: name='android.permission.CAMERA'
uses-permission: name='android.permission.FOREGROUND_SERVICE'
uses-permission: name='android.permission.FOREGROUND_SERVICE_DATA_SYNC' maxSdkVersion='33'
uses-permission: name='android.permission.FOREGROUND_SERVICE_SPECIAL_USE'
uses-permission: name='android.permission.INTERNET'
uses-permission: name='android.permission.POST_NOTIFICATIONS'
uses-permission: name='android.permission.READ_CONTACTS'
uses-permission: name='android.permission.READ_SYNC_SETTINGS'
uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED'
uses-permission: name='android.permission.SCHEDULE_EXACT_ALARM'
uses-permission: name='android.permission.USE_BIOMETRIC'
uses-permission: name='android.permission.USE_FINGERPRINT'
uses-permission: name='android.permission.VIBRATE'
uses-permission: name='android.permission.WAKE_LOCK'
uses-permission: name='com.fsck.k9.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION'

View file

@ -0,0 +1,100 @@
application-icon-120:'res/drawable-v26/ic_launcher.xml'
application-icon-160:'res/drawable-v26/ic_launcher.xml'
application-icon-240:'res/drawable-v26/ic_launcher.xml'
application-icon-320:'res/drawable-v26/ic_launcher.xml'
application-icon-480:'res/drawable-v26/ic_launcher.xml'
application-icon-640:'res/drawable-v26/ic_launcher.xml'
application-icon-65534:'res/drawable-v26/ic_launcher.xml'
application-label-ar:'بريد K-9'
application-label-be:'Пошта K-9'
application-label-bg:'K-9 Поща'
application-label-ca:'K-9 Mail'
application-label-co:'K-9 Mail'
application-label-cs:'K-9 Mail'
application-label-cy:'K-9 Mail'
application-label-da:'K-9 Mail'
application-label-de:'K-9 Mail'
application-label-el:'K-9 Mail'
application-label-en-GB:'K-9 Mail'
application-label-en:'K-9 Mail'
application-label-eo:'K-9 Retpoŝtilo'
application-label-es:'K-9 Mail'
application-label-et:'K-9 Mail'
application-label-eu:'K-9 Mail'
application-label-fa:'نامهٔ کی۹'
application-label-fi:'K-9 Mail'
application-label-fr:'Courriel K-9'
application-label-fy:'K-9 Mail'
application-label-ga:'K-9 Post'
application-label-gl:'K-9 Mail'
application-label-hr:'K-9 Mail'
application-label-hu:'K-9 Mail'
application-label-in:'Surel K-9'
application-label-is:'K-9 - Póstur'
application-label-it:'K-9 Mail'
application-label-iw:'K-9 דוא\"ל'
application-label-ja:'K-9 Mail'
application-label-ko:'K-9 메일'
application-label-lt:'K-9 paštas'
application-label-lv:'K-9 pasts'
application-label-nb:'K-9 E-post'
application-label-nl:'K-9 Mail'
application-label-nn:'K-9 e-post'
application-label-pl:'K-9 Mail'
application-label-pt-BR:'K-9 Mail'
application-label-pt-PT:'K-9 Mail'
application-label-pt:'Email K-9'
application-label-ro:'K-9 Mail'
application-label-ru:'Почта K-9'
application-label-sk:'K-9 Mail'
application-label-sl:'Pošta K-9'
application-label-sq:'K-9 Mail'
application-label-sr:'K-9 Mail'
application-label-sv:'K-9 Mail'
application-label-tr:'K-9 Posta'
application-label-uk:'K-9 Mail'
application-label-vi:'Thư K-9'
application-label-zh-CN:'K-9 Mail'
application-label-zh-TW:'K-9 Mail'
application-label-zh:'K-9 Mail'
application-label:'K-9 Mail'
application: label='K-9 Mail' icon='res/drawable-v26/ic_launcher.xml'
densities: '120' '160' '240' '320' '480' '640' '65534'
feature-group: label=''
install-location:'auto'
launchable-activity: name='com.fsck.k9.activity.MessageList' label='' icon=''
locales: '--_--' 'ar' 'be' 'bg' 'ca' 'co' 'cs' 'cy' 'da' 'de' 'el' 'en' 'en-GB' 'eo' 'es' 'et' 'eu' 'fa' 'fi' 'fr' 'fy' 'ga' 'gl' 'hr' 'hu' 'in' 'is' 'it' 'iw' 'ja' 'ko' 'lt' 'lv' 'nb' 'nl' 'nn' 'pl' 'pt' 'pt-BR' 'pt-PT' 'ro' 'ru' 'sk' 'sl' 'sq' 'sr' 'sv' 'tr' 'uk' 'vi' 'zh' 'zh-CN' 'zh-TW'
main
minSdkVersion:'21'
native-code: 'arm64-v8a' 'armeabi-v7a' 'x86' 'x86_64'
other-activities
other-receivers
other-services
package: name='com.fsck.k9' platformBuildVersionName='15' platformBuildVersionCode='35' compileSdkVersion='35' compileSdkVersionCodename='15'
property: name='android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE' value='This service is used to maintain a continuous connection to an IMAP server to be able to provide instant notifications to the user when a new email arrives. Firebase Cloud Messaging is not suitable for this task, neither are mechanisms like AndroidX WorkManager. Other foreground service types aren't a good fit for this use case.'
provides-component:'app-widget'
supports-any-density: 'true'
supports-screens: 'small' 'normal' 'large' 'xlarge'
targetSdkVersion:'35'
uses-feature-not-required: name='android.hardware.camera'
uses-feature-not-required: name='android.hardware.touchscreen'
uses-library-not-required:'androidx.window.extensions'
uses-library-not-required:'androidx.window.sidecar'
uses-library-not-required:'com.sec.android.app.multiwindow'
uses-permission: name='android.permission.ACCESS_NETWORK_STATE'
uses-permission: name='android.permission.CAMERA'
uses-permission: name='android.permission.FOREGROUND_SERVICE'
uses-permission: name='android.permission.FOREGROUND_SERVICE_DATA_SYNC' maxSdkVersion='33'
uses-permission: name='android.permission.FOREGROUND_SERVICE_SPECIAL_USE'
uses-permission: name='android.permission.INTERNET'
uses-permission: name='android.permission.POST_NOTIFICATIONS'
uses-permission: name='android.permission.READ_CONTACTS'
uses-permission: name='android.permission.READ_SYNC_SETTINGS'
uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED'
uses-permission: name='android.permission.SCHEDULE_EXACT_ALARM'
uses-permission: name='android.permission.USE_BIOMETRIC'
uses-permission: name='android.permission.USE_FINGERPRINT'
uses-permission: name='android.permission.VIBRATE'
uses-permission: name='android.permission.WAKE_LOCK'
uses-permission: name='com.android.vending.BILLING'
uses-permission: name='com.fsck.k9.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION'

175
app-k9mail/build.gradle.kts Normal file
View file

@ -0,0 +1,175 @@
plugins {
id(ThunderbirdPlugins.App.androidCompose)
alias(libs.plugins.dependency.guard)
id("thunderbird.app.version.info")
id("thunderbird.quality.badging")
}
val testCoverageEnabled: Boolean by extra
if (testCoverageEnabled) {
apply(plugin = "jacoco")
}
android {
namespace = "com.fsck.k9"
defaultConfig {
applicationId = "com.fsck.k9"
testApplicationId = "com.fsck.k9.tests"
versionCode = 39029
versionName = "13.0"
buildConfigField("String", "CLIENT_INFO_APP_NAME", "\"K-9 Mail\"")
}
androidResources {
// Keep in sync with the resource string array "supported_languages"
localeFilters += listOf(
"ar",
"be",
"bg",
"ca",
"co",
"cs",
"cy",
"da",
"de",
"el",
"en",
"en-rGB",
"eo",
"es",
"et",
"eu",
"fa",
"fi",
"fr",
"fy",
"ga",
"gl",
"hr",
"hu",
"in",
"is",
"it",
"iw",
"ja",
"ko",
"lt",
"lv",
"nb",
"nl",
"nn",
"pl",
"pt-rBR",
"pt-rPT",
"ro",
"ru",
"sk",
"sl",
"sq",
"sr",
"sv",
"tr",
"uk",
"vi",
"zh-rCN",
"zh-rTW",
)
}
signingConfigs {
createSigningConfig(project, SigningType.K9_RELEASE, isUpload = false)
}
buildTypes {
release {
signingConfig = signingConfigs.getByType(SigningType.K9_RELEASE)
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android.txt"),
"proguard-rules.pro",
)
}
debug {
applicationIdSuffix = ".debug"
enableUnitTestCoverage = testCoverageEnabled
enableAndroidTestCoverage = testCoverageEnabled
isMinifyEnabled = false
}
}
flavorDimensions += listOf("app")
productFlavors {
create("foss") {
dimension = "app"
buildConfigField("String", "PRODUCT_FLAVOR_APP", "\"foss\"")
}
create("full") {
dimension = "app"
buildConfigField("String", "PRODUCT_FLAVOR_APP", "\"full\"")
}
}
packaging {
jniLibs {
excludes += listOf("kotlin/**")
}
resources {
excludes += listOf(
"META-INF/*.kotlin_module",
"META-INF/*.version",
"kotlin/**",
"DebugProbesKt.bin",
)
}
}
}
dependencies {
implementation(projects.appCommon)
implementation(projects.core.ui.compose.theme2.k9mail)
implementation(projects.core.ui.legacy.theme2.k9mail)
implementation(projects.feature.launcher)
implementation(projects.feature.mail.message.list)
implementation(projects.legacy.core)
implementation(projects.legacy.ui.legacy)
implementation(projects.core.featureflag)
implementation(projects.feature.account.settings.impl)
"fossImplementation"(projects.feature.funding.noop)
"fullImplementation"(projects.feature.funding.googleplay)
implementation(projects.feature.migration.launcher.noop)
implementation(projects.feature.onboarding.migration.noop)
implementation(projects.feature.telemetry.noop)
implementation(projects.feature.widget.messageList)
implementation(projects.feature.widget.messageListGlance)
implementation(projects.feature.widget.shortcut)
implementation(projects.feature.widget.unread)
implementation(libs.androidx.work.runtime)
implementation(projects.feature.autodiscovery.api)
debugImplementation(projects.backend.demo)
debugImplementation(projects.feature.autodiscovery.demo)
// Required for DependencyInjectionTest
testImplementation(projects.feature.account.api)
testImplementation(projects.feature.account.common)
testImplementation(projects.plugins.openpgpApiLib.openpgpApi)
testImplementation(libs.appauth)
}
dependencyGuard {
configuration("fossReleaseRuntimeClasspath")
configuration("fullReleaseRuntimeClasspath")
}

View file

@ -0,0 +1,286 @@
androidx.activity:activity-compose:1.10.1
androidx.activity:activity-ktx:1.10.1
androidx.activity:activity:1.10.1
androidx.annotation:annotation-experimental:1.4.1
androidx.annotation:annotation-jvm:1.9.1
androidx.annotation:annotation:1.9.1
androidx.appcompat:appcompat-resources:1.7.1
androidx.appcompat:appcompat:1.7.1
androidx.arch.core:core-common:2.2.0
androidx.arch.core:core-runtime:2.2.0
androidx.autofill:autofill:1.3.0
androidx.biometric:biometric:1.1.0
androidx.browser:browser:1.3.0
androidx.cardview:cardview:1.0.0
androidx.collection:collection-jvm:1.5.0
androidx.collection:collection-ktx:1.5.0
androidx.collection:collection:1.5.0
androidx.compose.animation:animation-android:1.8.3
androidx.compose.animation:animation-core-android:1.8.3
androidx.compose.animation:animation-core:1.8.3
androidx.compose.animation:animation:1.8.3
androidx.compose.foundation:foundation-android:1.8.3
androidx.compose.foundation:foundation-layout-android:1.8.3
androidx.compose.foundation:foundation-layout:1.8.3
androidx.compose.foundation:foundation:1.8.3
androidx.compose.material3.adaptive:adaptive-android:1.1.0
androidx.compose.material3.adaptive:adaptive-layout-android:1.1.0
androidx.compose.material3.adaptive:adaptive-layout:1.1.0
androidx.compose.material3.adaptive:adaptive-navigation-android:1.1.0
androidx.compose.material3.adaptive:adaptive-navigation:1.1.0
androidx.compose.material3.adaptive:adaptive:1.1.0
androidx.compose.material3:material3-android:1.3.2
androidx.compose.material3:material3:1.3.2
androidx.compose.material:material-icons-core-android:1.7.8
androidx.compose.material:material-icons-core:1.7.8
androidx.compose.material:material-icons-extended-android:1.7.8
androidx.compose.material:material-icons-extended:1.7.8
androidx.compose.material:material-ripple-android:1.8.3
androidx.compose.material:material-ripple:1.8.3
androidx.compose.runtime:runtime-android:1.8.3
androidx.compose.runtime:runtime-saveable-android:1.8.3
androidx.compose.runtime:runtime-saveable:1.8.3
androidx.compose.runtime:runtime:1.8.3
androidx.compose.ui:ui-android:1.8.3
androidx.compose.ui:ui-geometry-android:1.8.3
androidx.compose.ui:ui-geometry:1.8.3
androidx.compose.ui:ui-graphics-android:1.8.3
androidx.compose.ui:ui-graphics:1.8.3
androidx.compose.ui:ui-text-android:1.8.3
androidx.compose.ui:ui-text:1.8.3
androidx.compose.ui:ui-tooling-preview-android:1.8.3
androidx.compose.ui:ui-tooling-preview:1.8.3
androidx.compose.ui:ui-unit-android:1.8.3
androidx.compose.ui:ui-unit:1.8.3
androidx.compose.ui:ui-util-android:1.8.3
androidx.compose.ui:ui-util:1.8.3
androidx.compose.ui:ui:1.8.3
androidx.compose:compose-bom:2025.07.00
androidx.concurrent:concurrent-futures-ktx:1.1.0
androidx.concurrent:concurrent-futures:1.1.0
androidx.constraintlayout:constraintlayout-core:1.1.1
androidx.constraintlayout:constraintlayout:2.2.1
androidx.coordinatorlayout:coordinatorlayout:1.3.0
androidx.core:core-ktx:1.16.0
androidx.core:core-remoteviews:1.1.0
androidx.core:core-splashscreen:1.0.1
androidx.core:core-viewtree:1.0.0
androidx.core:core:1.16.0
androidx.cursoradapter:cursoradapter:1.0.0
androidx.customview:customview-poolingcontainer:1.0.0
androidx.customview:customview:1.1.0
androidx.datastore:datastore-core:1.0.0
androidx.datastore:datastore-preferences-core:1.0.0
androidx.datastore:datastore-preferences:1.0.0
androidx.datastore:datastore:1.0.0
androidx.documentfile:documentfile:1.0.0
androidx.drawerlayout:drawerlayout:1.1.1
androidx.dynamicanimation:dynamicanimation:1.0.0
androidx.emoji2:emoji2-views-helper:1.4.0
androidx.emoji2:emoji2:1.4.0
androidx.exifinterface:exifinterface:1.4.1
androidx.fragment:fragment-compose:1.8.8
androidx.fragment:fragment-ktx:1.8.8
androidx.fragment:fragment:1.8.8
androidx.glance:glance-appwidget-external-protobuf:1.1.1
androidx.glance:glance-appwidget-proto:1.1.1
androidx.glance:glance-appwidget:1.1.1
androidx.glance:glance-material3:1.1.1
androidx.glance:glance:1.1.1
androidx.graphics:graphics-path:1.0.1
androidx.interpolator:interpolator:1.0.0
androidx.legacy:legacy-support-core-utils:1.0.0
androidx.lifecycle:lifecycle-common-java8:2.9.2
androidx.lifecycle:lifecycle-common-jvm:2.9.2
androidx.lifecycle:lifecycle-common:2.9.2
androidx.lifecycle:lifecycle-livedata-core-ktx:2.9.2
androidx.lifecycle:lifecycle-livedata-core:2.9.2
androidx.lifecycle:lifecycle-livedata-ktx:2.9.2
androidx.lifecycle:lifecycle-livedata:2.9.2
androidx.lifecycle:lifecycle-process:2.9.2
androidx.lifecycle:lifecycle-runtime-android:2.9.2
androidx.lifecycle:lifecycle-runtime-compose-android:2.9.2
androidx.lifecycle:lifecycle-runtime-compose:2.9.2
androidx.lifecycle:lifecycle-runtime-ktx-android:2.9.2
androidx.lifecycle:lifecycle-runtime-ktx:2.9.2
androidx.lifecycle:lifecycle-runtime:2.9.2
androidx.lifecycle:lifecycle-service:2.9.2
androidx.lifecycle:lifecycle-viewmodel-android:2.9.2
androidx.lifecycle:lifecycle-viewmodel-compose-android:2.9.2
androidx.lifecycle:lifecycle-viewmodel-compose:2.9.2
androidx.lifecycle:lifecycle-viewmodel-ktx:2.9.2
androidx.lifecycle:lifecycle-viewmodel-savedstate-android:2.9.2
androidx.lifecycle:lifecycle-viewmodel-savedstate:2.9.2
androidx.lifecycle:lifecycle-viewmodel:2.9.2
androidx.loader:loader:1.0.0
androidx.localbroadcastmanager:localbroadcastmanager:1.1.0
androidx.navigation:navigation-common-android:2.9.3
androidx.navigation:navigation-common:2.9.3
androidx.navigation:navigation-compose-android:2.9.3
androidx.navigation:navigation-compose:2.9.3
androidx.navigation:navigation-fragment:2.9.3
androidx.navigation:navigation-runtime-android:2.9.3
androidx.navigation:navigation-runtime:2.9.3
androidx.navigation:navigation-ui:2.9.3
androidx.preference:preference:1.2.1
androidx.print:print:1.0.0
androidx.profileinstaller:profileinstaller:1.4.1
androidx.recyclerview:recyclerview:1.4.0
androidx.resourceinspection:resourceinspection-annotation:1.0.1
androidx.room:room-common:2.6.1
androidx.room:room-ktx:2.6.1
androidx.room:room-runtime:2.6.1
androidx.savedstate:savedstate-android:1.3.1
androidx.savedstate:savedstate-compose-android:1.3.1
androidx.savedstate:savedstate-compose:1.3.1
androidx.savedstate:savedstate-ktx:1.3.1
androidx.savedstate:savedstate:1.3.1
androidx.slidingpanelayout:slidingpanelayout:1.2.0
androidx.sqlite:sqlite-framework:2.4.0
androidx.sqlite:sqlite:2.4.0
androidx.startup:startup-runtime:1.1.1
androidx.swiperefreshlayout:swiperefreshlayout:1.1.0
androidx.tracing:tracing-ktx:1.2.0
androidx.tracing:tracing:1.2.0
androidx.transition:transition:1.5.0
androidx.vectordrawable:vectordrawable-animated:1.2.0
androidx.vectordrawable:vectordrawable:1.2.0
androidx.versionedparcelable:versionedparcelable:1.1.1
androidx.viewpager2:viewpager2:1.1.0-beta02
androidx.viewpager:viewpager:1.0.0
androidx.webkit:webkit:1.14.0
androidx.window.extensions.core:core:1.0.0
androidx.window:window-core-android:1.3.0
androidx.window:window-core:1.3.0
androidx.window:window:1.3.0
androidx.work:work-runtime-ktx:2.10.3
androidx.work:work-runtime:2.10.3
co.touchlab:stately-concurrency-jvm:2.1.0
co.touchlab:stately-concurrency:2.1.0
co.touchlab:stately-concurrent-collections-jvm:2.1.0
co.touchlab:stately-concurrent-collections:2.1.0
co.touchlab:stately-strict-jvm:2.1.0
co.touchlab:stately-strict:2.1.0
com.beetstra.jutf7:jutf7:1.0.0
com.github.ByteHamster:SearchPreference:2.7.3
com.github.bumptech.glide:annotations:4.16.0
com.github.bumptech.glide:disklrucache:4.16.0
com.github.bumptech.glide:gifdecoder:4.16.0
com.github.bumptech.glide:glide:4.16.0
com.github.skydoves:landscapist-android:2.5.1
com.github.skydoves:landscapist-coil3-android:2.5.1
com.github.skydoves:landscapist-coil3:2.5.1
com.github.skydoves:landscapist:2.5.1
com.google.android.flexbox:flexbox:3.0.0
com.google.android.material:material:1.12.0
com.google.errorprone:error_prone_annotations:2.15.0
com.google.guava:listenablefuture:1.0
com.jakewharton.timber:timber:5.0.1
com.jcraft:jzlib:1.0.7
com.mikepenz:fastadapter-extensions-drag:5.7.0
com.mikepenz:fastadapter-extensions-expandable:5.7.0
com.mikepenz:fastadapter-extensions-swipe:5.7.0
com.mikepenz:fastadapter-extensions-utils:5.7.0
com.mikepenz:fastadapter:5.7.0
com.squareup.moshi:moshi:1.15.2
com.squareup.okhttp3:okhttp:4.12.0
com.squareup.okio:okio-jvm:3.16.0
com.squareup.okio:okio:3.16.0
com.takisoft.colorpicker:colorpicker:1.0.0
com.takisoft.datetimepicker:datetimepicker:1.0.2
com.takisoft.preferencex:preferencex-colorpicker:1.1.0
com.takisoft.preferencex:preferencex-datetimepicker:1.1.0
com.takisoft.preferencex:preferencex:1.1.0
commons-io:commons-io:2.20.0
de.cketti.library.changelog:ckchangelog-core:2.0.0-beta02
de.cketti.safecontentresolver:safe-content-resolver-v21:1.0.0
de.hdodenhof:circleimageview:3.1.0
io.coil-kt.coil3:coil-android:3.2.0
io.coil-kt.coil3:coil-core-android:3.2.0
io.coil-kt.coil3:coil-core:3.2.0
io.coil-kt.coil3:coil-gif:3.2.0
io.coil-kt.coil3:coil-network-core-android:3.2.0
io.coil-kt.coil3:coil-network-core:3.2.0
io.coil-kt.coil3:coil-network-okhttp-jvm:3.2.0
io.coil-kt.coil3:coil-network-okhttp:3.2.0
io.coil-kt.coil3:coil-video:3.2.0
io.coil-kt.coil3:coil:3.2.0
io.insert-koin:koin-android:4.1.0
io.insert-koin:koin-androidx-compose:4.1.0
io.insert-koin:koin-bom:4.1.0
io.insert-koin:koin-compose-android:4.1.0
io.insert-koin:koin-compose-viewmodel-android:4.1.0
io.insert-koin:koin-compose-viewmodel:4.1.0
io.insert-koin:koin-compose:4.1.0
io.insert-koin:koin-core-jvm:4.1.0
io.insert-koin:koin-core-viewmodel-android:4.1.0
io.insert-koin:koin-core-viewmodel:4.1.0
io.insert-koin:koin-core:4.1.0
net.jcip:jcip-annotations:1.0
net.openid:appauth:0.11.1
org.apache.commons:commons-lang3:3.7
org.apache.commons:commons-text:1.3
org.apache.httpcomponents.client5:httpclient5:5.5
org.apache.httpcomponents.core5:httpcore5-h2:5.3.4
org.apache.httpcomponents.core5:httpcore5:5.3.4
org.apache.james:apache-mime4j-core:0.8.13
org.apache.james:apache-mime4j-dom:0.8.13
org.jetbrains.androidx.lifecycle:lifecycle-common:2.9.1
org.jetbrains.androidx.lifecycle:lifecycle-runtime-compose:2.9.1
org.jetbrains.androidx.lifecycle:lifecycle-runtime:2.9.1
org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-compose:2.9.1
org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-savedstate:2.9.1
org.jetbrains.androidx.lifecycle:lifecycle-viewmodel:2.9.1
org.jetbrains.androidx.savedstate:savedstate:1.3.1
org.jetbrains.compose.animation:animation-core:1.8.2
org.jetbrains.compose.animation:animation:1.8.2
org.jetbrains.compose.annotation-internal:annotation:1.8.2
org.jetbrains.compose.collection-internal:collection:1.8.2
org.jetbrains.compose.components:components-resources-android:1.8.2
org.jetbrains.compose.components:components-resources:1.8.2
org.jetbrains.compose.components:components-ui-tooling-preview-android:1.8.2
org.jetbrains.compose.components:components-ui-tooling-preview:1.8.2
org.jetbrains.compose.foundation:foundation-layout:1.8.2
org.jetbrains.compose.foundation:foundation:1.8.2
org.jetbrains.compose.runtime:runtime-saveable:1.8.2
org.jetbrains.compose.runtime:runtime:1.8.2
org.jetbrains.compose.ui:ui-geometry:1.8.2
org.jetbrains.compose.ui:ui-graphics:1.8.2
org.jetbrains.compose.ui:ui-text:1.8.2
org.jetbrains.compose.ui:ui-tooling-preview:1.8.2
org.jetbrains.compose.ui:ui-unit:1.8.2
org.jetbrains.compose.ui:ui-util:1.8.2
org.jetbrains.compose.ui:ui:1.8.2
org.jetbrains.kotlin:kotlin-android-extensions-runtime:2.2.0
org.jetbrains.kotlin:kotlin-bom:2.2.0
org.jetbrains.kotlin:kotlin-parcelize-runtime:2.2.0
org.jetbrains.kotlin:kotlin-stdlib-common:2.2.0
org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.2.0
org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.2.0
org.jetbrains.kotlin:kotlin-stdlib:2.2.0
org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:0.4.0
org.jetbrains.kotlinx:kotlinx-collections-immutable:0.4.0
org.jetbrains.kotlinx:kotlinx-coroutines-android:1.10.2
org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.10.2
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.10.2
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2
org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.7.1
org.jetbrains.kotlinx:kotlinx-datetime:0.7.1
org.jetbrains.kotlinx:kotlinx-io-bytestring-jvm:0.8.0
org.jetbrains.kotlinx:kotlinx-io-bytestring:0.8.0
org.jetbrains.kotlinx:kotlinx-io-core-jvm:0.8.0
org.jetbrains.kotlinx:kotlinx-io-core:0.8.0
org.jetbrains.kotlinx:kotlinx-serialization-bom:1.9.0
org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.9.0
org.jetbrains.kotlinx:kotlinx-serialization-core:1.9.0
org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.9.0
org.jetbrains.kotlinx:kotlinx-serialization-json:1.9.0
org.jetbrains:annotations:26.0.2
org.jsoup:jsoup:1.19.1
org.jspecify:jspecify:1.0.0
org.minidns:minidns-client:1.1.1
org.minidns:minidns-core:1.1.1
org.minidns:minidns-dnssec:1.1.1
org.minidns:minidns-hla:1.1.1
org.minidns:minidns-iterative-resolver:1.1.1
org.slf4j:slf4j-api:1.7.36

View file

@ -0,0 +1,300 @@
androidx.activity:activity-compose:1.10.1
androidx.activity:activity-ktx:1.10.1
androidx.activity:activity:1.10.1
androidx.annotation:annotation-experimental:1.4.1
androidx.annotation:annotation-jvm:1.9.1
androidx.annotation:annotation:1.9.1
androidx.appcompat:appcompat-resources:1.7.1
androidx.appcompat:appcompat:1.7.1
androidx.arch.core:core-common:2.2.0
androidx.arch.core:core-runtime:2.2.0
androidx.autofill:autofill:1.3.0
androidx.biometric:biometric:1.1.0
androidx.browser:browser:1.3.0
androidx.cardview:cardview:1.0.0
androidx.collection:collection-jvm:1.5.0
androidx.collection:collection-ktx:1.5.0
androidx.collection:collection:1.5.0
androidx.compose.animation:animation-android:1.8.3
androidx.compose.animation:animation-core-android:1.8.3
androidx.compose.animation:animation-core:1.8.3
androidx.compose.animation:animation:1.8.3
androidx.compose.foundation:foundation-android:1.8.3
androidx.compose.foundation:foundation-layout-android:1.8.3
androidx.compose.foundation:foundation-layout:1.8.3
androidx.compose.foundation:foundation:1.8.3
androidx.compose.material3.adaptive:adaptive-android:1.1.0
androidx.compose.material3.adaptive:adaptive-layout-android:1.1.0
androidx.compose.material3.adaptive:adaptive-layout:1.1.0
androidx.compose.material3.adaptive:adaptive-navigation-android:1.1.0
androidx.compose.material3.adaptive:adaptive-navigation:1.1.0
androidx.compose.material3.adaptive:adaptive:1.1.0
androidx.compose.material3:material3-android:1.3.2
androidx.compose.material3:material3:1.3.2
androidx.compose.material:material-icons-core-android:1.7.8
androidx.compose.material:material-icons-core:1.7.8
androidx.compose.material:material-icons-extended-android:1.7.8
androidx.compose.material:material-icons-extended:1.7.8
androidx.compose.material:material-ripple-android:1.8.3
androidx.compose.material:material-ripple:1.8.3
androidx.compose.runtime:runtime-android:1.8.3
androidx.compose.runtime:runtime-saveable-android:1.8.3
androidx.compose.runtime:runtime-saveable:1.8.3
androidx.compose.runtime:runtime:1.8.3
androidx.compose.ui:ui-android:1.8.3
androidx.compose.ui:ui-geometry-android:1.8.3
androidx.compose.ui:ui-geometry:1.8.3
androidx.compose.ui:ui-graphics-android:1.8.3
androidx.compose.ui:ui-graphics:1.8.3
androidx.compose.ui:ui-text-android:1.8.3
androidx.compose.ui:ui-text:1.8.3
androidx.compose.ui:ui-tooling-preview-android:1.8.3
androidx.compose.ui:ui-tooling-preview:1.8.3
androidx.compose.ui:ui-unit-android:1.8.3
androidx.compose.ui:ui-unit:1.8.3
androidx.compose.ui:ui-util-android:1.8.3
androidx.compose.ui:ui-util:1.8.3
androidx.compose.ui:ui:1.8.3
androidx.compose:compose-bom:2025.07.00
androidx.concurrent:concurrent-futures-ktx:1.1.0
androidx.concurrent:concurrent-futures:1.1.0
androidx.constraintlayout:constraintlayout-core:1.1.1
androidx.constraintlayout:constraintlayout:2.2.1
androidx.coordinatorlayout:coordinatorlayout:1.3.0
androidx.core:core-ktx:1.16.0
androidx.core:core-remoteviews:1.1.0
androidx.core:core-splashscreen:1.0.1
androidx.core:core-viewtree:1.0.0
androidx.core:core:1.16.0
androidx.cursoradapter:cursoradapter:1.0.0
androidx.customview:customview-poolingcontainer:1.0.0
androidx.customview:customview:1.1.0
androidx.datastore:datastore-core:1.0.0
androidx.datastore:datastore-preferences-core:1.0.0
androidx.datastore:datastore-preferences:1.0.0
androidx.datastore:datastore:1.0.0
androidx.documentfile:documentfile:1.0.0
androidx.drawerlayout:drawerlayout:1.1.1
androidx.dynamicanimation:dynamicanimation:1.0.0
androidx.emoji2:emoji2-views-helper:1.4.0
androidx.emoji2:emoji2:1.4.0
androidx.exifinterface:exifinterface:1.4.1
androidx.fragment:fragment-compose:1.8.8
androidx.fragment:fragment-ktx:1.8.8
androidx.fragment:fragment:1.8.8
androidx.glance:glance-appwidget-external-protobuf:1.1.1
androidx.glance:glance-appwidget-proto:1.1.1
androidx.glance:glance-appwidget:1.1.1
androidx.glance:glance-material3:1.1.1
androidx.glance:glance:1.1.1
androidx.graphics:graphics-path:1.0.1
androidx.interpolator:interpolator:1.0.0
androidx.legacy:legacy-support-core-utils:1.0.0
androidx.lifecycle:lifecycle-common-java8:2.9.2
androidx.lifecycle:lifecycle-common-jvm:2.9.2
androidx.lifecycle:lifecycle-common:2.9.2
androidx.lifecycle:lifecycle-livedata-core-ktx:2.9.2
androidx.lifecycle:lifecycle-livedata-core:2.9.2
androidx.lifecycle:lifecycle-livedata-ktx:2.9.2
androidx.lifecycle:lifecycle-livedata:2.9.2
androidx.lifecycle:lifecycle-process:2.9.2
androidx.lifecycle:lifecycle-runtime-android:2.9.2
androidx.lifecycle:lifecycle-runtime-compose-android:2.9.2
androidx.lifecycle:lifecycle-runtime-compose:2.9.2
androidx.lifecycle:lifecycle-runtime-ktx-android:2.9.2
androidx.lifecycle:lifecycle-runtime-ktx:2.9.2
androidx.lifecycle:lifecycle-runtime:2.9.2
androidx.lifecycle:lifecycle-service:2.9.2
androidx.lifecycle:lifecycle-viewmodel-android:2.9.2
androidx.lifecycle:lifecycle-viewmodel-compose-android:2.9.2
androidx.lifecycle:lifecycle-viewmodel-compose:2.9.2
androidx.lifecycle:lifecycle-viewmodel-ktx:2.9.2
androidx.lifecycle:lifecycle-viewmodel-savedstate-android:2.9.2
androidx.lifecycle:lifecycle-viewmodel-savedstate:2.9.2
androidx.lifecycle:lifecycle-viewmodel:2.9.2
androidx.loader:loader:1.0.0
androidx.localbroadcastmanager:localbroadcastmanager:1.1.0
androidx.navigation:navigation-common-android:2.9.3
androidx.navigation:navigation-common:2.9.3
androidx.navigation:navigation-compose-android:2.9.3
androidx.navigation:navigation-compose:2.9.3
androidx.navigation:navigation-fragment:2.9.3
androidx.navigation:navigation-runtime-android:2.9.3
androidx.navigation:navigation-runtime:2.9.3
androidx.navigation:navigation-ui:2.9.3
androidx.preference:preference:1.2.1
androidx.print:print:1.0.0
androidx.profileinstaller:profileinstaller:1.4.1
androidx.recyclerview:recyclerview:1.4.0
androidx.resourceinspection:resourceinspection-annotation:1.0.1
androidx.room:room-common:2.6.1
androidx.room:room-ktx:2.6.1
androidx.room:room-runtime:2.6.1
androidx.savedstate:savedstate-android:1.3.1
androidx.savedstate:savedstate-compose-android:1.3.1
androidx.savedstate:savedstate-compose:1.3.1
androidx.savedstate:savedstate-ktx:1.3.1
androidx.savedstate:savedstate:1.3.1
androidx.slidingpanelayout:slidingpanelayout:1.2.0
androidx.sqlite:sqlite-framework:2.4.0
androidx.sqlite:sqlite:2.4.0
androidx.startup:startup-runtime:1.1.1
androidx.swiperefreshlayout:swiperefreshlayout:1.1.0
androidx.tracing:tracing-ktx:1.2.0
androidx.tracing:tracing:1.2.0
androidx.transition:transition:1.5.0
androidx.vectordrawable:vectordrawable-animated:1.2.0
androidx.vectordrawable:vectordrawable:1.2.0
androidx.versionedparcelable:versionedparcelable:1.1.1
androidx.viewpager2:viewpager2:1.1.0-beta02
androidx.viewpager:viewpager:1.0.0
androidx.webkit:webkit:1.14.0
androidx.window.extensions.core:core:1.0.0
androidx.window:window-core-android:1.3.0
androidx.window:window-core:1.3.0
androidx.window:window:1.3.0
androidx.work:work-runtime-ktx:2.10.3
androidx.work:work-runtime:2.10.3
co.touchlab:stately-concurrency-jvm:2.1.0
co.touchlab:stately-concurrency:2.1.0
co.touchlab:stately-concurrent-collections-jvm:2.1.0
co.touchlab:stately-concurrent-collections:2.1.0
co.touchlab:stately-strict-jvm:2.1.0
co.touchlab:stately-strict:2.1.0
com.android.billingclient:billing-ktx:7.1.1
com.android.billingclient:billing:7.1.1
com.beetstra.jutf7:jutf7:1.0.0
com.github.ByteHamster:SearchPreference:2.7.3
com.github.bumptech.glide:annotations:4.16.0
com.github.bumptech.glide:disklrucache:4.16.0
com.github.bumptech.glide:gifdecoder:4.16.0
com.github.bumptech.glide:glide:4.16.0
com.github.skydoves:landscapist-android:2.5.1
com.github.skydoves:landscapist-coil3-android:2.5.1
com.github.skydoves:landscapist-coil3:2.5.1
com.github.skydoves:landscapist:2.5.1
com.google.android.datatransport:transport-api:3.0.0
com.google.android.datatransport:transport-backend-cct:3.1.8
com.google.android.datatransport:transport-runtime:3.1.8
com.google.android.flexbox:flexbox:3.0.0
com.google.android.gms:play-services-base:18.5.0
com.google.android.gms:play-services-basement:18.4.0
com.google.android.gms:play-services-location:19.0.0
com.google.android.gms:play-services-places-placereport:17.0.0
com.google.android.gms:play-services-tasks:18.2.0
com.google.android.material:material:1.12.0
com.google.errorprone:error_prone_annotations:2.15.0
com.google.firebase:firebase-encoders-json:18.0.0
com.google.firebase:firebase-encoders-proto:16.0.0
com.google.firebase:firebase-encoders:17.0.0
com.google.guava:listenablefuture:1.0
com.jakewharton.timber:timber:5.0.1
com.jcraft:jzlib:1.0.7
com.mikepenz:fastadapter-extensions-drag:5.7.0
com.mikepenz:fastadapter-extensions-expandable:5.7.0
com.mikepenz:fastadapter-extensions-swipe:5.7.0
com.mikepenz:fastadapter-extensions-utils:5.7.0
com.mikepenz:fastadapter:5.7.0
com.squareup.moshi:moshi:1.15.2
com.squareup.okhttp3:okhttp:4.12.0
com.squareup.okio:okio-jvm:3.16.0
com.squareup.okio:okio:3.16.0
com.takisoft.colorpicker:colorpicker:1.0.0
com.takisoft.datetimepicker:datetimepicker:1.0.2
com.takisoft.preferencex:preferencex-colorpicker:1.1.0
com.takisoft.preferencex:preferencex-datetimepicker:1.1.0
com.takisoft.preferencex:preferencex:1.1.0
commons-io:commons-io:2.20.0
de.cketti.library.changelog:ckchangelog-core:2.0.0-beta02
de.cketti.safecontentresolver:safe-content-resolver-v21:1.0.0
de.hdodenhof:circleimageview:3.1.0
io.coil-kt.coil3:coil-android:3.2.0
io.coil-kt.coil3:coil-core-android:3.2.0
io.coil-kt.coil3:coil-core:3.2.0
io.coil-kt.coil3:coil-gif:3.2.0
io.coil-kt.coil3:coil-network-core-android:3.2.0
io.coil-kt.coil3:coil-network-core:3.2.0
io.coil-kt.coil3:coil-network-okhttp-jvm:3.2.0
io.coil-kt.coil3:coil-network-okhttp:3.2.0
io.coil-kt.coil3:coil-video:3.2.0
io.coil-kt.coil3:coil:3.2.0
io.insert-koin:koin-android:4.1.0
io.insert-koin:koin-androidx-compose:4.1.0
io.insert-koin:koin-bom:4.1.0
io.insert-koin:koin-compose-android:4.1.0
io.insert-koin:koin-compose-viewmodel-android:4.1.0
io.insert-koin:koin-compose-viewmodel:4.1.0
io.insert-koin:koin-compose:4.1.0
io.insert-koin:koin-core-jvm:4.1.0
io.insert-koin:koin-core-viewmodel-android:4.1.0
io.insert-koin:koin-core-viewmodel:4.1.0
io.insert-koin:koin-core:4.1.0
javax.inject:javax.inject:1
net.jcip:jcip-annotations:1.0
net.openid:appauth:0.11.1
org.apache.commons:commons-lang3:3.7
org.apache.commons:commons-text:1.3
org.apache.httpcomponents.client5:httpclient5:5.5
org.apache.httpcomponents.core5:httpcore5-h2:5.3.4
org.apache.httpcomponents.core5:httpcore5:5.3.4
org.apache.james:apache-mime4j-core:0.8.13
org.apache.james:apache-mime4j-dom:0.8.13
org.jetbrains.androidx.lifecycle:lifecycle-common:2.9.1
org.jetbrains.androidx.lifecycle:lifecycle-runtime-compose:2.9.1
org.jetbrains.androidx.lifecycle:lifecycle-runtime:2.9.1
org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-compose:2.9.1
org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-savedstate:2.9.1
org.jetbrains.androidx.lifecycle:lifecycle-viewmodel:2.9.1
org.jetbrains.androidx.savedstate:savedstate:1.3.1
org.jetbrains.compose.animation:animation-core:1.8.2
org.jetbrains.compose.animation:animation:1.8.2
org.jetbrains.compose.annotation-internal:annotation:1.8.2
org.jetbrains.compose.collection-internal:collection:1.8.2
org.jetbrains.compose.components:components-resources-android:1.8.2
org.jetbrains.compose.components:components-resources:1.8.2
org.jetbrains.compose.components:components-ui-tooling-preview-android:1.8.2
org.jetbrains.compose.components:components-ui-tooling-preview:1.8.2
org.jetbrains.compose.foundation:foundation-layout:1.8.2
org.jetbrains.compose.foundation:foundation:1.8.2
org.jetbrains.compose.runtime:runtime-saveable:1.8.2
org.jetbrains.compose.runtime:runtime:1.8.2
org.jetbrains.compose.ui:ui-geometry:1.8.2
org.jetbrains.compose.ui:ui-graphics:1.8.2
org.jetbrains.compose.ui:ui-text:1.8.2
org.jetbrains.compose.ui:ui-tooling-preview:1.8.2
org.jetbrains.compose.ui:ui-unit:1.8.2
org.jetbrains.compose.ui:ui-util:1.8.2
org.jetbrains.compose.ui:ui:1.8.2
org.jetbrains.kotlin:kotlin-android-extensions-runtime:2.2.0
org.jetbrains.kotlin:kotlin-bom:2.2.0
org.jetbrains.kotlin:kotlin-parcelize-runtime:2.2.0
org.jetbrains.kotlin:kotlin-stdlib-common:2.2.0
org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.2.0
org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.2.0
org.jetbrains.kotlin:kotlin-stdlib:2.2.0
org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:0.4.0
org.jetbrains.kotlinx:kotlinx-collections-immutable:0.4.0
org.jetbrains.kotlinx:kotlinx-coroutines-android:1.10.2
org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.10.2
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.10.2
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2
org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.7.1
org.jetbrains.kotlinx:kotlinx-datetime:0.7.1
org.jetbrains.kotlinx:kotlinx-io-bytestring-jvm:0.8.0
org.jetbrains.kotlinx:kotlinx-io-bytestring:0.8.0
org.jetbrains.kotlinx:kotlinx-io-core-jvm:0.8.0
org.jetbrains.kotlinx:kotlinx-io-core:0.8.0
org.jetbrains.kotlinx:kotlinx-serialization-bom:1.9.0
org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.9.0
org.jetbrains.kotlinx:kotlinx-serialization-core:1.9.0
org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.9.0
org.jetbrains.kotlinx:kotlinx-serialization-json:1.9.0
org.jetbrains:annotations:26.0.2
org.jsoup:jsoup:1.19.1
org.jspecify:jspecify:1.0.0
org.minidns:minidns-client:1.1.1
org.minidns:minidns-core:1.1.1
org.minidns:minidns-dnssec:1.1.1
org.minidns:minidns-hla:1.1.1
org.minidns:minidns-iterative-resolver:1.1.1
org.slf4j:slf4j-api:1.7.36

64
app-k9mail/proguard-rules.pro vendored Normal file
View file

@ -0,0 +1,64 @@
# Add project specific ProGuard rules here.
-dontobfuscate
# Preserve the line number information for debugging stack traces.
-keepattributes SourceFile,LineNumberTable
# Library specific rules
-dontnote android.net.http.*
-dontnote org.apache.commons.codec.**
-dontnote org.apache.http.**
-dontnote com.squareup.moshi.**
-dontnote com.github.amlcurran.showcaseview.**
-dontnote de.cketti.safecontentresolver.**
-dontnote com.tokenautocomplete.**
-dontwarn okio.**
-dontwarn com.squareup.moshi.**
# Glide
-keep public class * extends com.bumptech.glide.module.AppGlideModule
-keep public class * extends com.bumptech.glide.module.LibraryGlideModule
-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {
**[] $VALUES;
public *;
}
# Project specific rules
-dontnote com.fsck.k9.ui.messageview.**
-dontnote com.fsck.k9.view.**
-assumevalues class * extends android.view.View {
boolean isInEditMode() return false;
}
-keep public class org.openintents.openpgp.**
-keepclassmembers class * extends androidx.appcompat.widget.SearchView {
public <init>(android.content.Context);
}
-keep class com.fsck.k9.mail.oauth.XOAuth2Response { *; }
# okhttp rules
# see: https://github.com/square/okhttp/blob/master/okhttp/src/main/resources/META-INF/proguard/okhttp3.pro
# JSR 305 annotations are for embedding nullability information.
-dontwarn javax.annotation.**
# A resource is loaded with a relative path so the package of this class must be preserved.
-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase
# Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java.
-dontwarn org.codehaus.mojo.animal_sniffer.*
# OkHttp platform used only on JVM and when Conscrypt dependency is available.
-dontwarn okhttp3.internal.platform.ConscryptPlatform
-dontwarn kotlinx.serialization.KSerializer
-dontwarn kotlinx.serialization.Serializable
-dontwarn org.apache.http.client.methods.CloseableHttpResponse
-dontwarn org.slf4j.impl.StaticLoggerBinder
-keep,allowshrinking class com.tokenautocomplete.TokenCompleteTextView

View file

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
>
<application tools:ignore="MissingApplicationIcon">
<!-- This component is disabled by default (if possible). It will be enabled programmatically if necessary. -->
<!-- IMPORTANT: The component name must be -->
<!-- `net.thunderbird.feature.widget.message.list.MessageListWidgetReceiver` and can't be changed. -->
<receiver
android:name="net.thunderbird.feature.widget.message.list.MessageListWidgetReceiver"
android:exported="true"
android:label="@string/message_list_glance_widget_label"
>
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/message_list_glance_widget_info"
/>
</receiver>
</application>
</manifest>

View file

@ -0,0 +1,92 @@
package app.k9mail.auth
import com.fsck.k9.BuildConfig
import net.thunderbird.core.common.oauth.OAuthConfiguration
import net.thunderbird.core.common.oauth.OAuthConfigurationFactory
@Suppress("ktlint:standard:max-line-length")
class K9OAuthConfigurationFactory : OAuthConfigurationFactory {
override fun createConfigurations(): Map<List<String>, OAuthConfiguration> {
return mapOf(
createAolConfiguration(),
createFastmailConfiguration(),
createGmailConfiguration(),
createMicrosoftConfiguration(),
createYahooConfiguration(),
)
}
private fun createAolConfiguration(): Pair<List<String>, OAuthConfiguration> {
return listOf(
"imap.aol.com",
"smtp.aol.com",
) to OAuthConfiguration(
clientId = "dj0yJmk9cHYydkJkTUxHcXlYJmQ9WVdrOWVHZHhVVXN4VVV3bWNHbzlNQT09JnM9Y29uc3VtZXJzZWNyZXQmc3Y9MCZ4PTdm",
scopes = listOf("mail-w"),
authorizationEndpoint = "https://api.login.aol.com/oauth2/request_auth",
tokenEndpoint = "https://api.login.aol.com/oauth2/get_token",
redirectUri = "${BuildConfig.APPLICATION_ID}://oauth2redirect",
)
}
private fun createFastmailConfiguration(): Pair<List<String>, OAuthConfiguration> {
return listOf(
"imap.fastmail.com",
"smtp.fastmail.com",
) to OAuthConfiguration(
clientId = "353641ae",
scopes = listOf("https://www.fastmail.com/dev/protocol-imap", "https://www.fastmail.com/dev/protocol-smtp"),
authorizationEndpoint = "https://api.fastmail.com/oauth/authorize",
tokenEndpoint = "https://api.fastmail.com/oauth/refresh",
redirectUri = "${BuildConfig.APPLICATION_ID}://oauth2redirect",
)
}
private fun createGmailConfiguration(): Pair<List<String>, OAuthConfiguration> {
return listOf(
"imap.gmail.com",
"imap.googlemail.com",
"smtp.gmail.com",
"smtp.googlemail.com",
) to OAuthConfiguration(
clientId = "262622259280-5qb3vtj68d5dtudmaif4g9vd3cpar8r3.apps.googleusercontent.com",
scopes = listOf("https://mail.google.com/"),
authorizationEndpoint = "https://accounts.google.com/o/oauth2/v2/auth",
tokenEndpoint = "https://oauth2.googleapis.com/token",
redirectUri = "${BuildConfig.APPLICATION_ID}:/oauth2redirect",
)
}
private fun createMicrosoftConfiguration(): Pair<List<String>, OAuthConfiguration> {
return listOf(
"outlook.office365.com",
"smtp.office365.com",
"smtp-mail.outlook.com",
) to OAuthConfiguration(
clientId = "e647013a-ada4-4114-b419-e43d250f99c5",
scopes = listOf(
"openid",
"email",
"https://outlook.office.com/IMAP.AccessAsUser.All",
"https://outlook.office.com/SMTP.Send",
"offline_access",
),
authorizationEndpoint = "https://login.microsoftonline.com/common/oauth2/v2.0/authorize",
tokenEndpoint = "https://login.microsoftonline.com/common/oauth2/v2.0/token",
redirectUri = "msauth://com.fsck.k9.debug/VZF2DYuLYAu4TurFd6usQB2JPts%3D",
)
}
private fun createYahooConfiguration(): Pair<List<String>, OAuthConfiguration> {
return listOf(
"imap.mail.yahoo.com",
"smtp.mail.yahoo.com",
) to OAuthConfiguration(
clientId = "dj0yJmk9ejRCRU1ybmZjQlVBJmQ9WVdrOVVrZEViak4xYmxZbWNHbzlNQT09JnM9Y29uc3VtZXJzZWNyZXQmc3Y9MCZ4PTZj",
scopes = listOf("mail-w"),
authorizationEndpoint = "https://api.login.yahoo.com/oauth2/request_auth",
tokenEndpoint = "https://api.login.yahoo.com/oauth2/get_token",
redirectUri = "${BuildConfig.APPLICATION_ID}://oauth2redirect",
)
}
}

View file

@ -0,0 +1,17 @@
package app.k9mail.dev
import app.k9mail.autodiscovery.api.AutoDiscovery
import app.k9mail.autodiscovery.demo.DemoAutoDiscovery
import com.fsck.k9.backend.BackendFactory
import org.koin.core.module.Module
import org.koin.core.qualifier.named
fun Module.developmentModuleAdditions() {
single { DemoBackendFactory(backendStorageFactory = get()) }
single<Map<String, BackendFactory>>(named("developmentBackends")) {
mapOf("demo" to get<DemoBackendFactory>())
}
single<List<AutoDiscovery>>(named("extraAutoDiscoveries")) {
listOf(DemoAutoDiscovery())
}
}

View file

@ -0,0 +1,14 @@
package app.k9mail.dev
import app.k9mail.backend.demo.DemoBackend
import com.fsck.k9.backend.BackendFactory
import com.fsck.k9.backend.api.Backend
import com.fsck.k9.mailstore.K9BackendStorageFactory
import net.thunderbird.core.android.account.LegacyAccount
class DemoBackendFactory(private val backendStorageFactory: K9BackendStorageFactory) : BackendFactory {
override fun createBackend(account: LegacyAccount): Backend {
val backendStorage = backendStorageFactory.createBackendStorage(account)
return DemoBackend(backendStorage)
}
}

View file

@ -0,0 +1,21 @@
package app.k9mail.featureflag
import net.thunderbird.core.featureflag.FeatureFlag
import net.thunderbird.core.featureflag.FeatureFlagFactory
import net.thunderbird.core.featureflag.FeatureFlagKey
import net.thunderbird.core.featureflag.toFeatureFlagKey
class K9FeatureFlagFactory : FeatureFlagFactory {
override fun createFeatureCatalog(): List<FeatureFlag> {
return listOf(
FeatureFlag("archive_marks_as_read".toFeatureFlagKey(), enabled = true),
FeatureFlag("new_account_settings".toFeatureFlagKey(), enabled = true),
FeatureFlag("disable_font_size_config".toFeatureFlagKey(), enabled = true),
FeatureFlag("email_notification_default".toFeatureFlagKey(), enabled = true),
FeatureFlag("enable_dropdown_drawer".toFeatureFlagKey(), enabled = true),
FeatureFlag("enable_dropdown_drawer_ui".toFeatureFlagKey(), enabled = true),
FeatureFlag(FeatureFlagKey.DisplayInAppNotifications, enabled = true),
FeatureFlag(FeatureFlagKey.UseNotificationSenderForSystemNotifications, enabled = true),
)
}
}

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="app_logo_main">#5917ff</color>
<color name="app_logo_highlight_light">#7a45ff</color>
<color name="app_logo_highlight_dark">#531ad8</color>
<color name="launcher_icon_background">#e3d9ff</color>
</resources>

View file

@ -0,0 +1,82 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:installLocation="auto"
>
<application
android:name="app.k9mail.K9App"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.K9.Startup"
tools:replace="android:theme"
>
<activity
android:name="com.fsck.k9.ui.settings.account.OpenPgpAppSelectDialog"
android:configChanges="locale"
android:theme="@style/Theme.K9.DayNight.Dialog.Translucent"
/>
<activity
android:name="com.fsck.k9.ui.notification.DeleteConfirmationActivity"
android:excludeFromRecents="true"
android:launchMode="singleTop"
android:taskAffinity=""
android:theme="@style/Theme.K9.DayNight.Dialog.Translucent"
/>
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
android:exported="false"
tools:node="merge"
>
<!-- We're using on-demand initialization for WorkManager -->
<meta-data
android:name="androidx.work.WorkManagerInitializer"
android:value="androidx.startup"
tools:node="remove"
/>
</provider>
<!-- This component is disabled by default (if possible). It will be enabled programmatically if necessary. -->
<!-- IMPORTANT: The component name must be `com.fsck.k9.widget.list.MessageListWidgetProvider` and can't be changed. -->
<receiver
android:name="com.fsck.k9.widget.list.MessageListWidgetProvider"
android:icon="@drawable/message_list_widget_preview"
android:label="@string/message_list_widget_label"
android:enabled="@bool/home_screen_widgets_enabled"
android:exported="false"
>
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/message_list_widget_info"
/>
</receiver>
<!-- This component is disabled by default (if possible). It will be enabled programmatically if necessary. -->
<!-- IMPORTANT: The component name must be `com.fsck.k9.provider.UnreadWidgetProvider` and can't be changed. -->
<receiver
android:name="com.fsck.k9.provider.UnreadWidgetProvider"
android:label="@string/unread_widget_label"
android:enabled="@bool/home_screen_widgets_enabled"
android:exported="false"
>
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/unread_widget_info"
/>
</receiver>
</application>
</manifest>

View file

@ -0,0 +1,8 @@
package app.k9mail
import net.thunderbird.app.common.BaseApplication
import org.koin.core.module.Module
class K9App : BaseApplication() {
override fun provideAppModule(): Module = appModule
}

View file

@ -0,0 +1,45 @@
package app.k9mail
import app.k9mail.auth.K9OAuthConfigurationFactory
import app.k9mail.dev.developmentModuleAdditions
import app.k9mail.feature.featureModule
import app.k9mail.feature.widget.shortcut.LauncherShortcutActivity
import app.k9mail.featureflag.K9FeatureFlagFactory
import app.k9mail.provider.providerModule
import app.k9mail.widget.widgetModule
import com.fsck.k9.AppConfig
import com.fsck.k9.BuildConfig
import com.fsck.k9.DefaultAppConfig
import com.fsck.k9.activity.MessageCompose
import com.fsck.k9.provider.UnreadWidgetProvider
import com.fsck.k9.widget.list.MessageListWidgetProvider
import net.thunderbird.app.common.appCommonModule
import net.thunderbird.core.common.oauth.OAuthConfigurationFactory
import net.thunderbird.core.featureflag.FeatureFlagFactory
import org.koin.core.qualifier.named
import org.koin.dsl.module
val appModule = module {
includes(appCommonModule)
includes(widgetModule)
includes(featureModule)
includes(providerModule)
single(named("ClientInfoAppName")) { BuildConfig.CLIENT_INFO_APP_NAME }
single(named("ClientInfoAppVersion")) { BuildConfig.VERSION_NAME }
single<AppConfig> { appConfig }
single<OAuthConfigurationFactory> { K9OAuthConfigurationFactory() }
single<FeatureFlagFactory> { K9FeatureFlagFactory() }
developmentModuleAdditions()
}
val appConfig = DefaultAppConfig(
componentsToDisable = listOf(
MessageCompose::class.java,
LauncherShortcutActivity::class.java,
UnreadWidgetProvider::class.java,
MessageListWidgetProvider::class.java,
),
)

View file

@ -0,0 +1,21 @@
package app.k9mail.feature
import app.k9mail.feature.funding.api.FundingSettings
import app.k9mail.feature.funding.featureFundingModule
import app.k9mail.feature.migration.launcher.featureMigrationModule
import app.k9mail.feature.onboarding.migration.onboardingMigrationModule
import app.k9mail.feature.telemetry.telemetryModule
import net.thunderbird.feature.account.settings.featureAccountSettingsModule
import net.thunderbird.feature.mail.message.list.featureMessageListModule
import org.koin.dsl.module
val featureModule = module {
includes(featureAccountSettingsModule)
includes(telemetryModule)
includes(featureFundingModule)
includes(onboardingMigrationModule)
includes(featureMigrationModule)
includes(featureMessageListModule)
single<FundingSettings> { K9FundingSettings() }
}

View file

@ -0,0 +1,27 @@
package app.k9mail.feature
import app.k9mail.feature.funding.api.FundingSettings
import com.fsck.k9.K9
internal class K9FundingSettings : FundingSettings {
override fun getReminderReferenceTimestamp(): Long = K9.fundingReminderReferenceTimestamp
override fun setReminderReferenceTimestamp(timestamp: Long) {
K9.fundingReminderReferenceTimestamp = timestamp
K9.saveSettingsAsync()
}
override fun getReminderShownTimestamp() = K9.fundingReminderShownTimestamp
override fun setReminderShownTimestamp(timestamp: Long) {
K9.fundingReminderShownTimestamp = timestamp
K9.saveSettingsAsync()
}
override fun getActivityCounterInMillis(): Long = K9.fundingActivityCounterInMillis
override fun setActivityCounterInMillis(activeTime: Long) {
K9.fundingActivityCounterInMillis = activeTime
K9.saveSettingsAsync()
}
}

View file

@ -0,0 +1,21 @@
package app.k9mail.provider
import android.content.Context
import com.fsck.k9.R
import com.fsck.k9.preferences.FilePrefixProvider
import net.thunderbird.core.common.provider.AppNameProvider
import net.thunderbird.core.common.provider.BrandNameProvider
internal class K9AppNameProvider(
context: Context,
) : AppNameProvider, BrandNameProvider, FilePrefixProvider {
override val appName: String by lazy {
context.getString(R.string.app_name)
}
override val brandName: String by lazy {
context.getString(R.string.app_name)
}
override val filePrefix: String = "k9"
}

View file

@ -0,0 +1,21 @@
package app.k9mail.provider
import androidx.compose.runtime.Composable
import app.k9mail.core.ui.compose.theme2.k9mail.K9MailTheme2
import net.thunderbird.core.ui.theme.api.FeatureThemeProvider
internal class K9FeatureThemeProvider : FeatureThemeProvider {
@Composable
override fun WithTheme(content: @Composable () -> Unit) {
K9MailTheme2 {
content()
}
}
@Composable
override fun WithTheme(darkTheme: Boolean, content: @Composable () -> Unit) {
K9MailTheme2(darkTheme = darkTheme) {
content()
}
}
}

View file

@ -0,0 +1,12 @@
package app.k9mail.provider
import com.fsck.k9.R
import net.thunderbird.core.ui.theme.api.ThemeProvider
internal class K9ThemeProvider : ThemeProvider {
override val appThemeResourceId = R.style.Theme_K9_DayNight
override val appLightThemeResourceId = R.style.Theme_K9_Light
override val appDarkThemeResourceId = R.style.Theme_K9_Dark
override val dialogThemeResourceId = R.style.Theme_K9_DayNight_Dialog
override val translucentDialogThemeResourceId = R.style.Theme_K9_DayNight_Dialog_Translucent
}

View file

@ -0,0 +1,20 @@
package app.k9mail.provider
import com.fsck.k9.preferences.FilePrefixProvider
import net.thunderbird.core.common.provider.AppNameProvider
import net.thunderbird.core.common.provider.BrandNameProvider
import net.thunderbird.core.ui.theme.api.FeatureThemeProvider
import net.thunderbird.core.ui.theme.api.ThemeProvider
import org.koin.android.ext.koin.androidContext
import org.koin.dsl.binds
import org.koin.dsl.module
internal val providerModule = module {
single {
K9AppNameProvider(androidContext())
} binds arrayOf(AppNameProvider::class, BrandNameProvider::class, FilePrefixProvider::class)
single<ThemeProvider> { K9ThemeProvider() }
single<FeatureThemeProvider> { K9FeatureThemeProvider() }
}

View file

@ -0,0 +1,8 @@
package app.k9mail.widget
import app.k9mail.feature.widget.message.list.MessageListWidgetConfig
import com.fsck.k9.widget.list.MessageListWidgetProvider
class K9MessageListWidgetConfig : MessageListWidgetConfig {
override val providerClass = MessageListWidgetProvider::class.java
}

View file

@ -0,0 +1,8 @@
package app.k9mail.widget
import app.k9mail.feature.widget.unread.UnreadWidgetConfig
import com.fsck.k9.provider.UnreadWidgetProvider
class K9UnreadWidgetConfig : UnreadWidgetConfig {
override val providerClass = UnreadWidgetProvider::class.java
}

View file

@ -0,0 +1,13 @@
package app.k9mail.widget
import app.k9mail.feature.widget.message.list.MessageListWidgetConfig
import app.k9mail.feature.widget.unread.UnreadWidgetConfig
import net.thunderbird.feature.widget.message.list.featureWidgetMessageListModule
import org.koin.dsl.module
internal val widgetModule = module {
includes(featureWidgetMessageListModule)
single<MessageListWidgetConfig> { K9MessageListWidgetConfig() }
single<UnreadWidgetConfig> { K9UnreadWidgetConfig() }
}

View file

@ -0,0 +1,11 @@
package com.fsck.k9.provider
import app.k9mail.feature.widget.unread.BaseUnreadWidgetProvider
/**
* IMPORTANT: The fully qualified name for this class must be
* `com.fsck.k9.provider.UnreadWidgetProvider`.
* Otherwise widgets created with older versions of the app using a different name
* will stop working or disappear.
*/
class UnreadWidgetProvider : BaseUnreadWidgetProvider()

View file

@ -0,0 +1,11 @@
package com.fsck.k9.widget.list
import app.k9mail.feature.widget.message.list.BaseMessageListWidgetProvider
/**
* IMPORTANT: The fully qualified name for this class must be
* `com.fsck.k9.widget.list.MessageListWidgetProvider`.
* Otherwise widgets created with older versions of the app using a different name
* will stop working or disappear.
*/
class MessageListWidgetProvider : BaseMessageListWidgetProvider()

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">بريد K-9</string>
</resources>

View file

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 Mail</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">Пошта K-9</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 Поща</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">K-9 মেইল</string>
</resources>

View file

@ -0,0 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 Mail</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 Mail</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 Mail</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 Mail</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 Mail</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 Mail</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 Mail</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 Mail</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 Mail</string>
</resources>

View file

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 Retpoŝtilo</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 Mail</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 Mail</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 Mail</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">نامهٔ کی۹</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 Mail</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">Courriel K-9</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 Mail</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">K-9 Post</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">Post K-9</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 Mail</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">કે-૯ મેલ</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">के-9 मेल</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 Mail</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 Mail</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 Նամակ</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">Surel K-9</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 - Póstur</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 Mail</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 דוא\"ל</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 Mail</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 Mail</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Imayl K-9</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">K-9 Пошта</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 메일</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 paštas</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 pasts</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 Mail</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 E-post</string>
</resources>

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.K9.DayNight" parent="Theme.K9.Dark" />
<style name="Theme.K9.DayNight.Dialog" parent="Theme.K9.Dark.Dialog" />
<style name="Theme.K9.DayNight.Dialog.Translucent" parent="Theme.K9.Dark.Dialog.Translucent" />
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 Mail</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 e-post</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 Mail</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 Mail</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 Mail</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Email K-9</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 Mail</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">Почта K-9</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 Mail</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">Pošta K-9</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 Mail</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 Mail</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 Mail</string>
</resources>

View file

@ -0,0 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 அஞ்சல்</string>
</resources>

View file

@ -0,0 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 Posta</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 Mail</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">Thư K-9</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 Mail</string>
</resources>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">K-9 Mail</string>
</resources>

View file

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_webpage_url" translatable="false">https://k9mail.app/</string>
<string name="user_forum_url" translatable="false">https://forum.k9mail.app/</string>
<string name="funding_url" translatable="false">https://www.thunderbird.net/donate/mobile/?form=k9mail&amp;utm_source=%s&amp;utm_medium=android_app&amp;utm_campaign=inapp_appeal_v2</string>
<string name="message_header_mua" translatable="false">K-9 Mail for Android</string>
<string name="thunderbird_website_domain" translatable="false">www.thunderbird.net</string>
<string name="thunderbird_website_url" translatable="false">https://www.thunderbird.net</string>
</resources>

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- These are the funding feature overwrites that are K-9 specific -->
<string name="funding_googleplay_contribution_title">Support K-9 Mail</string>
<string name="funding_googleplay_contribution_header_title">Support K-9 Mail</string>
<string name="funding_googleplay_contribution_header_description">We never show ads or sell your data. We are entirely funded by individual contributions from users like you. If youre enjoying K-9 Mail, please help support it. We cant do this without you!</string>
<string name="funding_googleplay_contribution_header_thank_you_message">Your contribution furthers the development of secure, private and open-source email. We are truly grateful to have you with us!</string>
<string name="funding_googleplay_contribution_list_empty_message">K-9 Mail is developed by Thunderbird.\nVisit <xliff:g id="link_text">%s</xliff:g> for more ways to support our work.</string>
<string name="funding_googleplay_contribution_reminder_title">Support K-9 Mail</string>
<string name="funding_googleplay_contribution_reminder_statement">K-9 Mail is free and open source.</string>
</resources>

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- Please keep the K-9 Mail format and just localize the mail part if possible. -->
<string name="app_name">K-9 Mail</string>
</resources>

Some files were not shown because too many files have changed in this diff Show more