mirror of
https://github.com/moparisthebest/k-9
synced 2024-11-23 18:02:15 -05:00
Merge remote-tracking branch 'upstream/master'
Conflicts: src/com/fsck/k9/mail/transport/SmtpTransport.java
This commit is contained in:
commit
601e2880ac
@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:versionCode="21007"
|
||||
android:versionName="4.904" package="com.fsck.k9"
|
||||
android:versionCode="21008"
|
||||
android:versionName="4.905" package="com.fsck.k9"
|
||||
>
|
||||
<uses-sdk
|
||||
android:minSdkVersion="15"
|
||||
|
32
build.gradle
32
build.gradle
@ -5,10 +5,17 @@ buildscript {
|
||||
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:0.12.2'
|
||||
classpath 'com.jakewharton.sdkmanager:gradle-plugin:0.12.0'
|
||||
}
|
||||
}
|
||||
|
||||
apply plugin: 'android-sdk-manager'
|
||||
apply plugin: 'com.android.application'
|
||||
apply plugin: 'checkstyle'
|
||||
|
||||
repositories {
|
||||
jcenter()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile project(':plugins:Android-PullToRefresh:library')
|
||||
@ -19,10 +26,25 @@ dependencies {
|
||||
compile fileTree(dir: 'libs', include: '*.jar')
|
||||
}
|
||||
|
||||
project.ext.preDexLibs = !project.hasProperty('disablePreDex')
|
||||
|
||||
subprojects {
|
||||
project.plugins.whenPluginAdded { plugin ->
|
||||
if ("com.android.build.gradle.AppPlugin".equals(plugin.class.name) ||
|
||||
"com.android.build.gradle.LibraryPlugin".equals(plugin.class.name)) {
|
||||
project.android.dexOptions.preDexLibraries = rootProject.ext.preDexLibs
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdkVersion 19
|
||||
buildToolsVersion '20.0.0'
|
||||
|
||||
dexOptions {
|
||||
preDexLibraries = rootProject.ext.preDexLibs
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
main {
|
||||
manifest.srcFile 'AndroidManifest.xml'
|
||||
@ -51,6 +73,16 @@ android {
|
||||
}
|
||||
}
|
||||
|
||||
check.dependsOn 'checkstyle'
|
||||
task checkstyle(type: Checkstyle) {
|
||||
ignoreFailures = true
|
||||
configFile file("config/checkstyle/checkstyle.xml")
|
||||
|
||||
source 'src'
|
||||
include '**/*.java'
|
||||
classpath = files()
|
||||
}
|
||||
|
||||
task testsOnJVM(type :GradleBuild, dependsOn: assemble) {
|
||||
buildFile = 'tests-on-jvm/build.gradle'
|
||||
tasks = ['test']
|
||||
|
149
config/checkstyle/checkstyle.xml
Normal file
149
config/checkstyle/checkstyle.xml
Normal file
@ -0,0 +1,149 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE module PUBLIC
|
||||
"-//Puppy Crawl//DTD Check Configuration 1.3//EN"
|
||||
"http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
|
||||
|
||||
<module name="Checker">
|
||||
<!--
|
||||
If you set the basedir property below, then all reported file
|
||||
names will be relative to the specified directory. See
|
||||
http://checkstyle.sourceforge.net/5.x/config.html#Checker
|
||||
|
||||
<property name="basedir" value="${basedir}"/>
|
||||
-->
|
||||
|
||||
<property name="severity" value="info"/>
|
||||
|
||||
<!--
|
||||
<module name="SuppressionFilter">
|
||||
<property name="file" value="${checkstyle.suppressions.file}"/>
|
||||
</module>
|
||||
-->
|
||||
|
||||
<module name="FileTabCharacter">
|
||||
<property name="eachLine" value="false"/>
|
||||
</module>
|
||||
|
||||
<module name="NewlineAtEndOfFile"/>
|
||||
|
||||
<module name="TreeWalker">
|
||||
<property name="tabWidth" value="4"/>
|
||||
|
||||
<module name="AvoidStarImport"/>
|
||||
<module name="ConstantName">
|
||||
<property name="severity" value="warning"/>
|
||||
</module>
|
||||
<module name="EmptyBlock">
|
||||
<property name="option" value="text"/>
|
||||
<property name="tokens" value="LITERAL_CATCH"/>
|
||||
<property name="severity" value="warning"/>
|
||||
</module>
|
||||
<module name="EmptyForIteratorPad"/>
|
||||
<module name="EqualsHashCode">
|
||||
<property name="severity" value="warning"/>
|
||||
</module>
|
||||
<module name="OneStatementPerLine"/>
|
||||
|
||||
<!-- module name="IllegalCatch"/ -->
|
||||
<module name="IllegalImport">
|
||||
<property name="severity" value="warning"/>
|
||||
</module>
|
||||
<module name="IllegalThrows">
|
||||
<property name="severity" value="warning"/>
|
||||
</module>
|
||||
<module name="InnerAssignment">
|
||||
<property name="severity" value="warning"/>
|
||||
</module>
|
||||
|
||||
<module name="LeftCurly">
|
||||
<property name="option" value="eol"/>
|
||||
</module>
|
||||
|
||||
<module name="LineLength">
|
||||
<property name="max" value="140"/>
|
||||
</module>
|
||||
|
||||
<module name="LocalFinalVariableName">
|
||||
<property name="severity" value="warning"/>
|
||||
</module>
|
||||
<module name="LocalVariableName">
|
||||
<property name="severity" value="warning"/>
|
||||
</module>
|
||||
<module name="MemberName">
|
||||
<property name="severity" value="warning"/>
|
||||
</module>
|
||||
<module name="MethodName">
|
||||
<property name="severity" value="warning"/>
|
||||
</module>
|
||||
<module name="MethodParamPad"/>
|
||||
<module name="ModifierOrder"/>
|
||||
<module name="NeedBraces"/>
|
||||
<module name="NoWhitespaceAfter">
|
||||
<property name="tokens" value="BNOT"/>
|
||||
<property name="tokens" value="DEC"/>
|
||||
<property name="tokens" value="DOT"/>
|
||||
<property name="tokens" value="INC"/>
|
||||
<property name="tokens" value="LNOT"/>
|
||||
<property name="tokens" value="UNARY_MINUS"/>
|
||||
<property name="tokens" value="UNARY_PLUS"/>
|
||||
</module>
|
||||
|
||||
<module name="NoWhitespaceBefore"/>
|
||||
<module name="NoWhitespaceBefore">
|
||||
<property name="tokens" value="DOT"/>
|
||||
<property name="allowLineBreaks" value="true"/>
|
||||
</module>
|
||||
|
||||
<module name="PackageName">
|
||||
<property name="severity" value="warning"/>
|
||||
</module>
|
||||
<module name="ParameterName">
|
||||
<property name="severity" value="warning"/>
|
||||
</module>
|
||||
<module name="ParenPad"/>
|
||||
<module name="TypecastParenPad"/>
|
||||
<module name="RedundantImport"/>
|
||||
<module name="RedundantModifier"/>
|
||||
<module name="RightCurly">
|
||||
<property name="option" value="alone"/>
|
||||
<property name="tokens" value="LITERAL_ELSE"/>
|
||||
</module>
|
||||
<module name="SimplifyBooleanExpression"/>
|
||||
<module name="SimplifyBooleanReturn"/>
|
||||
<module name="TypeName">
|
||||
<property name="severity" value="warning"/>
|
||||
</module>
|
||||
<module name="UnusedImports"/>
|
||||
<module name="UpperEll"/>
|
||||
<module name="WhitespaceAfter"/>
|
||||
<module name="WhitespaceAround"/>
|
||||
<module name="GenericWhitespace"/>
|
||||
|
||||
<!--
|
||||
<module name="MissingSwitchDefault"/>
|
||||
<module name="MagicNumber"/>
|
||||
<module name="Indentation"/>
|
||||
|
||||
<module name="OperatorWrap">
|
||||
<property name="option" value="eol"/>
|
||||
</module>
|
||||
|
||||
<module name="EqualsAvoidNull">
|
||||
<property name="severity" value="warning"/>
|
||||
</module>
|
||||
-->
|
||||
|
||||
<module name="ParameterAssignment">
|
||||
<property name="severity" value="warning"/>
|
||||
</module>
|
||||
|
||||
<module name="DefaultComesLast"/>
|
||||
<module name="MissingDeprecated"/>
|
||||
<module name="MissingOverride">
|
||||
<property name="javaFiveCompatibility" value="true"/>
|
||||
</module>
|
||||
<module name="OuterTypeFilename">
|
||||
<property name="severity" value="warning"/>
|
||||
</module>
|
||||
</module>
|
||||
</module>
|
BIN
images/feature_graphic.png
Normal file
BIN
images/feature_graphic.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 69 KiB |
1474
images/feature_graphic.svg
Normal file
1474
images/feature_graphic.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 84 KiB |
@ -2,7 +2,7 @@ apply plugin: 'com.android.library'
|
||||
|
||||
android {
|
||||
compileSdkVersion 19
|
||||
buildToolsVersion '19.1.0'
|
||||
buildToolsVersion '20.0.0'
|
||||
|
||||
sourceSets {
|
||||
main {
|
||||
|
@ -39,16 +39,4 @@
|
||||
android:title="@string/read_receipt"
|
||||
android:icon="?attr/iconActionRequestReadReceipt"
|
||||
/>
|
||||
<item
|
||||
android:id="@+id/add_attachment_image"
|
||||
android:title="@string/add_attachment_action_image"
|
||||
android:icon="?attr/iconActionAddAttachment"
|
||||
android:visible="false"
|
||||
/>
|
||||
<item
|
||||
android:id="@+id/add_attachment_video"
|
||||
android:title="@string/add_attachment_action_video"
|
||||
android:icon="?attr/iconActionAddAttachment"
|
||||
android:visible="false"
|
||||
/>
|
||||
</menu>
|
||||
|
@ -136,8 +136,6 @@ Si us plau, envia\'ns els errors, contribueix a millorar-lo a
|
||||
<string name="read_receipt_enabled">Es farà una petició per la confirmació de lectura</string>
|
||||
<string name="read_receipt_disabled">No es faran més peticions per les confirmacions de lectura</string>
|
||||
<string name="add_attachment_action">Afegeix adjunt</string>
|
||||
<string name="add_attachment_action_image">Afegeix adjunt (Imatge)</string>
|
||||
<string name="add_attachment_action_video">Afegeix adjunt (Vídeo)</string>
|
||||
<string name="empty_trash_action">Buida paperera</string>
|
||||
<string name="expunge_action">Elimina</string>
|
||||
<string name="clear_local_folder_action">Neteja missatges locals</string>
|
||||
@ -705,13 +703,7 @@ Si us plau, envia\'ns els errors, contribueix a millorar-lo a
|
||||
<string name="font_size_medium">Mitjà</string>
|
||||
<string name="font_size_large">Gran</string>
|
||||
<string name="font_size_larger">Més gran</string>
|
||||
<!--Note: Contains references to preferences_action and misc_preferences_attachment_title-->
|
||||
<string name="message_compose_buggy_gallery">Comprova \"Configuració\" -> \"Utilitza la galeria la Galeria d\'errors\" per poder adjuntar imatges o vídeos utilitzant la Galeria 3D.</string>
|
||||
<!--Note: Contains references to add_attachment_action_image and add_attachment_action_video-->
|
||||
<string name="message_compose_use_workaround">Utilitza \"Afegeix adjunt (Imatge)\" or \"Afegeix adjunt (Vídeo)\" per afegir imatges o vídeos amb la Galeria 3D.</string>
|
||||
<string name="miscellaneous_preferences">Miscel·lània</string>
|
||||
<string name="misc_preferences_attachment_title">Utilitza la Galeria d\'errors</string>
|
||||
<string name="misc_preferences_attachment_description">Mostra els botons per afegir adjunts d\'imatge/vídeo (per treballar amb els errors de la Galeria 3D)</string>
|
||||
<!--APG related-->
|
||||
<string name="error_activity_not_found">No s\'ha trobat cap aplicació idònia per a aquesta acció.</string>
|
||||
<string name="error_apg_version_not_supported">Versió APG instal·lada no suportada.</string>
|
||||
|
@ -137,8 +137,6 @@ Posílejte prosím chybová hlášení, přispívejte novými funkcemi a ptejte
|
||||
<string name="read_receipt_enabled">Potvrzení o přečtení bude vyžadováno</string>
|
||||
<string name="read_receipt_disabled">Potvrzení o přečtení nebude vyžadováno</string>
|
||||
<string name="add_attachment_action">Přidat přílohu</string>
|
||||
<string name="add_attachment_action_image">Přidat přílohu (obrázek)</string>
|
||||
<string name="add_attachment_action_video">Přidat přílohu (video)</string>
|
||||
<string name="empty_trash_action">Vysypat koš</string>
|
||||
<string name="expunge_action">Vymazat</string>
|
||||
<string name="clear_local_folder_action">Vyčistit místní zprávy</string>
|
||||
@ -725,13 +723,7 @@ Posílejte prosím chybová hlášení, přispívejte novými funkcemi a ptejte
|
||||
<string name="font_size_medium">Střední</string>
|
||||
<string name="font_size_large">Velký</string>
|
||||
<string name="font_size_larger">Největší</string>
|
||||
<!--Note: Contains references to preferences_action and misc_preferences_attachment_title-->
|
||||
<string name="message_compose_buggy_gallery">Zaškrtněte \"Možnosti\" -> \"Obejít chybu Galerie\", abyste byli schopni připojit obrázky nebo video pomocí Galerie 3D.</string>
|
||||
<!--Note: Contains references to add_attachment_action_image and add_attachment_action_video-->
|
||||
<string name="message_compose_use_workaround">Použijte \"Přidat přílohu (obrázek)\" nebo \"Přidat přílohu (video)\" k připojení obrázků a videa pomocí Galerie 3D.</string>
|
||||
<string name="miscellaneous_preferences">Různé</string>
|
||||
<string name="misc_preferences_attachment_title">Obejít chybu Galerie</string>
|
||||
<string name="misc_preferences_attachment_description">Zobrazit tlačítka k připojení obrázku/videa jako přílohy (kvůli chybě v Galerie 3D)</string>
|
||||
<!--APG related-->
|
||||
<string name="error_activity_not_found">Pro tuto akci nebyla nalezena žádná vhodná aplikace.</string>
|
||||
<string name="error_apg_version_not_supported">Nainstalovaná verze APG není podporována.</string>
|
||||
|
@ -133,8 +133,6 @@ Vær venlig at sende fejlrapporter, anmodning om nye funktioner, og spørgsmål
|
||||
<string name="read_receipt_enabled">Der vil blive anmodet om kvittering for modtagelse</string>
|
||||
<string name="read_receipt_disabled">Der vil ikke blive anmodet om kvittering for modtagelse</string>
|
||||
<string name="add_attachment_action">Vedhæft fil</string>
|
||||
<string name="add_attachment_action_image">Vedhæft (billede)</string>
|
||||
<string name="add_attachment_action_video">Vedhæft (Video)</string>
|
||||
<string name="empty_trash_action">Tøm papirkurv</string>
|
||||
<string name="expunge_action">Ryd helt</string>
|
||||
<string name="clear_local_folder_action">Fjern lokalt lagrede mails</string>
|
||||
@ -699,13 +697,7 @@ Vær venlig at sende fejlrapporter, anmodning om nye funktioner, og spørgsmål
|
||||
<string name="font_size_medium">Stor</string>
|
||||
<string name="font_size_large">Større</string>
|
||||
<string name="font_size_larger">Størst</string>
|
||||
<!--Note: Contains references to preferences_action and misc_preferences_attachment_title-->
|
||||
<string name="message_compose_buggy_gallery">Kontroller \"Indstillinger\" -> \"Benyt Gallery bug work-around\" for at kunne vedhæfte billeder og videoer med Gallery 3D.</string>
|
||||
<!--Note: Contains references to add_attachment_action_image and add_attachment_action_video-->
|
||||
<string name="message_compose_use_workaround">Benyt \"Tilføj vedhæft (billede)\" eller \"Tilføj vedhæftning (video)\" for at kunne vedhæfte billeder eller videoer med Gallery 3D.</string>
|
||||
<string name="miscellaneous_preferences">Diverse</string>
|
||||
<string name="misc_preferences_attachment_title">Benyt Gallery bug work-around</string>
|
||||
<string name="misc_preferences_attachment_description">Vis knapper til vedhæftning af billede/video (måde at omgå fejl i Gallery 3D)</string>
|
||||
<!--APG related-->
|
||||
<string name="error_activity_not_found">Kunne ikke finde noget program som kan udføre denne handling.</string>
|
||||
<string name="error_apg_version_not_supported">Den installerede version af APG understørttes ikke.</string>
|
||||
|
@ -137,8 +137,6 @@ Um Fehler zu melden, neue Funktionen vorzuschlagen oder Fragen zu stellen, besuc
|
||||
<string name="read_receipt_enabled">Eine Empfangsbestätigung wird angefordert</string>
|
||||
<string name="read_receipt_disabled">Es wird keine Empfangsbestätigung angefordert</string>
|
||||
<string name="add_attachment_action">Anhang hinzufügen</string>
|
||||
<string name="add_attachment_action_image">Anhang hinzufügen (Bild)</string>
|
||||
<string name="add_attachment_action_video">Anhang hinzufügen (Video)</string>
|
||||
<string name="empty_trash_action">Papierkorb leeren</string>
|
||||
<string name="expunge_action">Bereinigen (Expunge)</string>
|
||||
<string name="clear_local_folder_action">Lokale Nachrichten löschen</string>
|
||||
@ -739,13 +737,7 @@ Um Fehler zu melden, neue Funktionen vorzuschlagen oder Fragen zu stellen, besuc
|
||||
<string name="font_size_medium">Mittel</string>
|
||||
<string name="font_size_large">Groß</string>
|
||||
<string name="font_size_larger">Größer</string>
|
||||
<!--Note: Contains references to preferences_action and misc_preferences_attachment_title-->
|
||||
<string name="message_compose_buggy_gallery">Wählen Sie \'Einstellungen\' -> \'Galerie-Workaround aktivieren\', um Bilder oder Videos mit Hilfe der 3D-Galerie hinzufügen zu können.</string>
|
||||
<!--Note: Contains references to add_attachment_action_image and add_attachment_action_video-->
|
||||
<string name="message_compose_use_workaround">Verwenden Sie \'Anhang hinzufügen (Bild)\' oder \'Anhang hinzufügen (Video)\', um Bilder oder Videos mit der 3D-Galerie hinzuzufügen.</string>
|
||||
<string name="miscellaneous_preferences">Verschiedenes</string>
|
||||
<string name="misc_preferences_attachment_title">Galerie-Workaround</string>
|
||||
<string name="misc_preferences_attachment_description">Schaltflächen zum Hinzufügen von Bild- und Video-Anhängen anzeigen (um Fehler in 3D-Galerie zu umgehen)</string>
|
||||
<!--APG related-->
|
||||
<string name="error_activity_not_found">Keine geeignete Anwendung für diese Aktion gefunden.</string>
|
||||
<string name="error_apg_version_not_supported">Die installierte APG-Version wird nicht unterstützt.</string>
|
||||
|
@ -135,8 +135,6 @@
|
||||
<string name="read_receipt_enabled">Θα ζητηθεί απόδειξη ανάγνωσης</string>
|
||||
<string name="read_receipt_disabled">Δεν θα ζητηθεί απόδειξη ανάγνωσης</string>
|
||||
<string name="add_attachment_action">Προσθήκη συνημμένου</string>
|
||||
<string name="add_attachment_action_image">Προσθήκη συνημμένης εικόνας</string>
|
||||
<string name="add_attachment_action_video">Προσθήκη συνημμένου βίντεο</string>
|
||||
<string name="empty_trash_action">Άδειασμα σκουπιδιών</string>
|
||||
<string name="expunge_action">Εξάλειψη</string>
|
||||
<string name="clear_local_folder_action">Καθαρισμός τοπικών μηνυμάτων</string>
|
||||
@ -716,13 +714,7 @@
|
||||
<string name="font_size_medium">Μεσαίο</string>
|
||||
<string name="font_size_large">Μεγάλο</string>
|
||||
<string name="font_size_larger">Μεγαλύτερο</string>
|
||||
<!--Note: Contains references to preferences_action and misc_preferences_attachment_title-->
|
||||
<string name="message_compose_buggy_gallery">Ελέγξτε \'Ρυθμίσεις\' -> \'Παράκαμψη σφάλματος πινακοθήκης\' για να μπορείτε να συνάψετε εικόνες ή βίντεο με το Gallery 3D.</string>
|
||||
<!--Note: Contains references to add_attachment_action_image and add_attachment_action_video-->
|
||||
<string name="message_compose_use_workaround">Χρήση \'Προσθήκη συνημμένου (Εικόνα)\' ή \'Προσθήκη συνημμένου (Βίντεο)\' για να συνάψετε εικόνες ή βίντεο με το Gallery 3D.</string>
|
||||
<string name="miscellaneous_preferences">Διάφορα</string>
|
||||
<string name="misc_preferences_attachment_title">Παράκαμψη σφάλματος πινακοθήκης</string>
|
||||
<string name="misc_preferences_attachment_description">Προβολή πλήκτρων για προσθήκη συνημμένων εικόνας/βίντεο (παράκαμψη του σφάλματος Gallery 3D)</string>
|
||||
<!--APG related-->
|
||||
<string name="error_activity_not_found">Δεν βρέθηκε κατάλληλη εφαρμογή για αυτή την ενέργεια.</string>
|
||||
<string name="error_apg_version_not_supported">Η εγκατεστημένη έκδοση APG δεν υποστηρίζεται.</string>
|
||||
|
@ -136,8 +136,6 @@ Por favor, envía los errores detectados, contribuye con nuevas funcionalidades
|
||||
<string name="read_receipt_enabled">Se solicitará confirmación de lectura</string>
|
||||
<string name="read_receipt_disabled">No se solicitará confirmación de lectura</string>
|
||||
<string name="add_attachment_action">Añadir adjunto</string>
|
||||
<string name="add_attachment_action_image">Añadir adjunto (imagen)</string>
|
||||
<string name="add_attachment_action_video">Añadir adjunto (vídeo)</string>
|
||||
<string name="empty_trash_action">Vaciar Papelera</string>
|
||||
<string name="expunge_action">Purgar</string>
|
||||
<string name="clear_local_folder_action">Borrar mensajes locales</string>
|
||||
@ -715,13 +713,7 @@ Por favor, envía los errores detectados, contribuye con nuevas funcionalidades
|
||||
<string name="font_size_medium">Mediana</string>
|
||||
<string name="font_size_large">Grande</string>
|
||||
<string name="font_size_larger">Muy Grande</string>
|
||||
<!--Note: Contains references to preferences_action and misc_preferences_attachment_title-->
|
||||
<string name="message_compose_buggy_gallery">Comprobar \"Configuración\" -> \"Usar Galería\" para poder adjuntar imágenes y vídeos utilizando la Galería 3D.</string>
|
||||
<!--Note: Contains references to add_attachment_action_image and add_attachment_action_video-->
|
||||
<string name="message_compose_use_workaround">Usar \"Añadir adjunto (Imagen)\" o \"Añadir adjunto (Vídeo)\" para Añadir imágenes o Vídeos con Galería 3D</string>
|
||||
<string name="miscellaneous_preferences">Varios</string>
|
||||
<string name="misc_preferences_attachment_title">Usar galería</string>
|
||||
<string name="misc_preferences_attachment_description">Mostrar botones para Añadir adjuntos de imagen/vídeo</string>
|
||||
<!--APG related-->
|
||||
<string name="error_activity_not_found">No existe aplicación para realizar esta acción.</string>
|
||||
<string name="error_apg_version_not_supported">No se admite esta versión de APG.</string>
|
||||
|
@ -137,8 +137,6 @@ Palun saada infot probleemidest, soovitavatest lisafunktsioonidest ja küsi küs
|
||||
<string name="read_receipt_enabled">Taotleb lugemise kinnitust</string>
|
||||
<string name="read_receipt_disabled">Ei taotle lugemise kinnitust</string>
|
||||
<string name="add_attachment_action">Lisa manus</string>
|
||||
<string name="add_attachment_action_image">Lisa manus (pilt)</string>
|
||||
<string name="add_attachment_action_video">Lisa manus (video)</string>
|
||||
<string name="empty_trash_action">Tühjenda prügikast</string>
|
||||
<string name="expunge_action">Pühi ära</string>
|
||||
<string name="clear_local_folder_action">Puhasta kohalikud sõnumid</string>
|
||||
@ -704,8 +702,6 @@ Palun saada infot probleemidest, soovitavatest lisafunktsioonidest ja küsi küs
|
||||
<string name="font_size_medium">Keskmine</string>
|
||||
<string name="font_size_large">Suur</string>
|
||||
<string name="font_size_larger">Suurem</string>
|
||||
<!--Note: Contains references to preferences_action and misc_preferences_attachment_title-->
|
||||
<!--Note: Contains references to add_attachment_action_image and add_attachment_action_video-->
|
||||
<string name="miscellaneous_preferences">Muu</string>
|
||||
<!--APG related-->
|
||||
<string name="error_apg_version_not_supported">Installitud APG versioon ei ole toetatud.</string>
|
||||
|
@ -136,8 +136,6 @@ Arazoen berri emateko, ezaugarri berriak gehitzeko eta galderak egiteko
|
||||
<string name="read_receipt_enabled">Irakurragiria eskatuko da</string>
|
||||
<string name="read_receipt_disabled">Ez da irakurragiria eskatuko</string>
|
||||
<string name="add_attachment_action">Eranskina gehitu</string>
|
||||
<string name="add_attachment_action_image">Eranskina gehitu (Irudia)</string>
|
||||
<string name="add_attachment_action_video">Eranskina gehitu (Bideoa)</string>
|
||||
<string name="empty_trash_action">Zakarrontzia hustu</string>
|
||||
<string name="expunge_action">Suntsitu</string>
|
||||
<string name="clear_local_folder_action">Mezu lokalak garbitu</string>
|
||||
@ -704,13 +702,7 @@ Arazoen berri emateko, ezaugarri berriak gehitzeko eta galderak egiteko
|
||||
<string name="font_size_medium">Ertaina</string>
|
||||
<string name="font_size_large">Handia</string>
|
||||
<string name="font_size_larger">Handiagoa</string>
|
||||
<!--Note: Contains references to preferences_action and misc_preferences_attachment_title-->
|
||||
<string name="message_compose_buggy_gallery">\"Ezarpenak\" -> \"Galeriako arazoa sahiestu\" gaitu 3D galeriako irudi edo bideoak erantsi ahal izateko.</string>
|
||||
<!--Note: Contains references to add_attachment_action_image and add_attachment_action_video-->
|
||||
<string name="message_compose_use_workaround">\"Eranskina gehitu (Irudia)\" edo \"Eranskina gehitu (Video)\" erabili 3D galeriatik irudi edo bideoak eransteko.</string>
|
||||
<string name="miscellaneous_preferences">Bestelakoak</string>
|
||||
<string name="misc_preferences_attachment_title">Galeriako arazoa sahiestu</string>
|
||||
<string name="misc_preferences_attachment_description">Irudi/bideoak eransteko botoiak ikusi (3D galeriako arazoa sahiesteko)</string>
|
||||
<!--APG related-->
|
||||
<string name="error_activity_not_found">Ez da honetarako aplikaziorik topatu.</string>
|
||||
<string name="error_apg_version_not_supported">Instalatutako APG bertsioa ezin da erabili.</string>
|
||||
|
@ -138,8 +138,6 @@ Virheraportit, osallistuminen projektiin ja kysymykset: Mene osoitteeseen
|
||||
<string name="read_receipt_enabled">Vastaanottokuittaus pyydetään</string>
|
||||
<string name="read_receipt_disabled">Ei pyydä lukukuittausta</string>
|
||||
<string name="add_attachment_action">Lisää liite</string>
|
||||
<string name="add_attachment_action_image">Lisää liite (Kuva)</string>
|
||||
<string name="add_attachment_action_video">Video</string>
|
||||
<string name="empty_trash_action">Tyhjennä roskakori</string>
|
||||
<string name="expunge_action">Poista</string>
|
||||
<string name="clear_local_folder_action">Poista paikalliset viestit</string>
|
||||
@ -741,13 +739,7 @@ Virheraportit, osallistuminen projektiin ja kysymykset: Mene osoitteeseen
|
||||
<string name="font_size_medium">Keskikoko</string>
|
||||
<string name="font_size_large">Suuri</string>
|
||||
<string name="font_size_larger">Suurin</string>
|
||||
<!--Note: Contains references to preferences_action and misc_preferences_attachment_title-->
|
||||
<string name="message_compose_buggy_gallery">Tarkista Asetukset -> Ota käyttöön Gallery-ohjelmavirheen kierto mahdollistaaksesi kuvien tai videoiden liittämisen Gallery 3D -ohjelmalla.</string>
|
||||
<!--Note: Contains references to add_attachment_action_image and add_attachment_action_video-->
|
||||
<string name="message_compose_use_workaround">Käytä Lisää liite (kuva)- tai Lisää liite (video) -toimintoa Gallery 3D:n kuvan tai videon liittämiseksi.</string>
|
||||
<string name="miscellaneous_preferences">Muut</string>
|
||||
<string name="misc_preferences_attachment_title">Ota käyttöön Gallery -ohjelmavirheen kierto</string>
|
||||
<string name="misc_preferences_attachment_description">Näytä painikkeet liitteen (video/kuva) lisäämiseksi (Gallery 3D -ohjelmavirheen kiertäminen)</string>
|
||||
<!--APG related-->
|
||||
<string name="error_activity_not_found">Toiminnolle ei löytynyt sopivaa ohjelmaa.</string>
|
||||
<string name="error_apg_version_not_supported">Asennettua APG-versiota ei tueta.</string>
|
||||
|
@ -135,8 +135,6 @@ Veuillez envoyer les rapports de bogues, suggérer de nouvelles fonctions et pos
|
||||
<string name="read_receipt_enabled">Un accusé de lecture sera demandé</string>
|
||||
<string name="read_receipt_disabled">Un accusé de lecture ne sera pas demandé</string>
|
||||
<string name="add_attachment_action">Ajouter une pièce jointe</string>
|
||||
<string name="add_attachment_action_image">Joindre une image</string>
|
||||
<string name="add_attachment_action_video">Joindre une vidéo</string>
|
||||
<string name="empty_trash_action">Vider la corbeille</string>
|
||||
<string name="expunge_action">Supprimer</string>
|
||||
<string name="clear_local_folder_action">Effacer les messages locaux</string>
|
||||
@ -739,13 +737,7 @@ jusqu\'à <xliff:g id="messages_to_load">%d</xliff:g> de plus</string>
|
||||
<string name="font_size_medium">Moyen</string>
|
||||
<string name="font_size_large">Grand</string>
|
||||
<string name="font_size_larger">Plus grand</string>
|
||||
<!--Note: Contains references to preferences_action and misc_preferences_attachment_title-->
|
||||
<string name="message_compose_buggy_gallery">Cochez «\u00A0Paramètres\u00A0» > «\u00A0Utiliser le contournement du bogue de la Galerie\u00A0» pour être capable d\'attacher des images ou des vidéos en utilisant Galerie 3D.</string>
|
||||
<!--Note: Contains references to add_attachment_action_image and add_attachment_action_video-->
|
||||
<string name="message_compose_use_workaround">Utiliser «\u00A0Joindre une image\u00A0» ou «\u00A0Joindre une vidéo\u00A0» pour joindre des images ou vidéos avec Galerie 3D</string>
|
||||
<string name="miscellaneous_preferences">Divers</string>
|
||||
<string name="misc_preferences_attachment_title">Utiliser le contournement du bogue de la Galerie</string>
|
||||
<string name="misc_preferences_attachment_description">Afficher les boutons pour joindre des images ou des vidéos (pour contourner le bogue de la Galerie 3D)</string>
|
||||
<!--APG related-->
|
||||
<string name="error_activity_not_found">Aucune application adéquate n\'a été trouvée pour cette action.</string>
|
||||
<string name="error_apg_version_not_supported">La version installée d\'APG n\'est pas prise en charge.</string>
|
||||
|
@ -134,8 +134,6 @@ Envía informes de erro, contribúe con novas funcionalidades e pregunta o que d
|
||||
<string name="read_receipt_enabled">Pedirase confirmación de lectura</string>
|
||||
<string name="read_receipt_disabled">Non se pedirá confirmación de lectura</string>
|
||||
<string name="add_attachment_action">Engadir anexo</string>
|
||||
<string name="add_attachment_action_image">Engadir anexo (imaxe)</string>
|
||||
<string name="add_attachment_action_video">Engadir anexo (vídeo)</string>
|
||||
<string name="empty_trash_action">Baleirar papeleira</string>
|
||||
<string name="expunge_action">Purgar</string>
|
||||
<string name="clear_local_folder_action">Limpar mensaxes locais</string>
|
||||
@ -695,11 +693,7 @@ Envía informes de erro, contribúe con novas funcionalidades e pregunta o que d
|
||||
<string name="font_size_medium">Mediana</string>
|
||||
<string name="font_size_large">Grande</string>
|
||||
<string name="font_size_larger">Moi grande</string>
|
||||
<!--Note: Contains references to preferences_action and misc_preferences_attachment_title-->
|
||||
<!--Note: Contains references to add_attachment_action_image and add_attachment_action_video-->
|
||||
<string name="message_compose_use_workaround">Usar \"Engadir anexo (imaxe)\" ou \"Engadir anexo (vídeo)\" para anexar imaxes ou vídeos con Galería 3D.</string>
|
||||
<string name="miscellaneous_preferences">Miscelánea</string>
|
||||
<string name="misc_preferences_attachment_description">Mostrar botóns para engadir anexos de imaxe e vídeo</string>
|
||||
<!--APG related-->
|
||||
<string name="error_activity_not_found">Non hai un aplicativo para executar esta acción.</string>
|
||||
<string name="error_apg_version_not_supported">Non se admite a versión instalada de APG.</string>
|
||||
|
@ -128,8 +128,6 @@ Por favor, envía os erros que detectes, contribúe con novas funcionalidades e
|
||||
<string name="mark_as_unread_action">Marcar Non Lido</string>
|
||||
<string name="add_cc_bcc_action">Engadir Cc/Bcc</string>
|
||||
<string name="add_attachment_action">Engadir adxunto</string>
|
||||
<string name="add_attachment_action_image">Engadir adxunto (Imaxe)</string>
|
||||
<string name="add_attachment_action_video">Engadir adxunto (Vídeo)</string>
|
||||
<string name="empty_trash_action">Valeirar Papelera</string>
|
||||
<string name="expunge_action">Erradicar</string>
|
||||
<string name="clear_local_folder_action">Borrar mensaxes locais</string>
|
||||
@ -641,13 +639,7 @@ Por favor, envía os erros que detectes, contribúe con novas funcionalidades e
|
||||
<string name="font_size_medium">Mediana</string>
|
||||
<string name="font_size_large">Grande</string>
|
||||
<string name="font_size_larger">Moi Grande</string>
|
||||
<!--Note: Contains references to preferences_action and misc_preferences_attachment_title-->
|
||||
<string name="message_compose_buggy_gallery">Comprobar \"Configuración\" -> \"Usar Galería\" para poder adxuntar imaxes e videos usando a Galería 3D.</string>
|
||||
<!--Note: Contains references to add_attachment_action_image and add_attachment_action_video-->
|
||||
<string name="message_compose_use_workaround">Usar \"Engadir adxunto (Imaxe)\" oo \"Engadir adxunto (Vídeo)\" para Engadir imaxes ou Vídeos con Galería 3D</string>
|
||||
<string name="miscellaneous_preferences">Varios</string>
|
||||
<string name="misc_preferences_attachment_title">Usar galería</string>
|
||||
<string name="misc_preferences_attachment_description">Amosar botóns para Engadir adxuntos de imaxe/vídeo</string>
|
||||
<!--APG related-->
|
||||
<string name="error_activity_not_found">Non existe aplicación para executar esta acción</string>
|
||||
<string name="error_apg_version_not_supported">Non se soporta esta versión de APG</string>
|
||||
|
@ -135,8 +135,6 @@ Hibajelentéseivel hozzájárul az újabb verziók tökéletesítéséhez, kérd
|
||||
<string name="read_receipt_enabled">Olvasási jelentés lesz kérve</string>
|
||||
<string name="read_receipt_disabled">Nem lesz Olvasási jelentés lesz kérve</string>
|
||||
<string name="add_attachment_action">Melléklet</string>
|
||||
<string name="add_attachment_action_image">Kép-melléklet csatolása</string>
|
||||
<string name="add_attachment_action_video">Videó-melléklet csatolása</string>
|
||||
<string name="empty_trash_action">Lomtár ürítése</string>
|
||||
<string name="expunge_action">Biztonságos törlés</string>
|
||||
<string name="clear_local_folder_action">Helyi üzenetek törlése</string>
|
||||
@ -693,13 +691,7 @@ Hibajelentéseivel hozzájárul az újabb verziók tökéletesítéséhez, kérd
|
||||
<string name="font_size_medium">Közepes</string>
|
||||
<string name="font_size_large">Nagy</string>
|
||||
<string name="font_size_larger">Nagyobb</string>
|
||||
<!--Note: Contains references to preferences_action and misc_preferences_attachment_title-->
|
||||
<string name="message_compose_buggy_gallery">Kapcsolja be a \"Beállítások\" -> \"Galéria hiba\" ha 3D galériából akar képet mellékelni.</string>
|
||||
<!--Note: Contains references to add_attachment_action_image and add_attachment_action_video-->
|
||||
<string name="message_compose_use_workaround">Használja a \"Kép csatolása\" vagy \"Videó csatolása\" opciót ha 3D galériából szeretne választani.</string>
|
||||
<string name="miscellaneous_preferences">Egyéb</string>
|
||||
<string name="misc_preferences_attachment_title">Galéria hiba kikerülése</string>
|
||||
<string name="misc_preferences_attachment_description">Gombok megjelenítése a kép/videó csatoláshoz (a 3D Galéria hiba kikerülése érdekében)</string>
|
||||
<!--APG related-->
|
||||
<string name="error_activity_not_found">Nincs megfelelő alkalmazás ehhez a művelethez.</string>
|
||||
<string name="error_apg_version_not_supported">A telepített APG verzió nem támogatott.</string>
|
||||
|
@ -137,8 +137,6 @@ Invia le tue segnalazioni, suggerisci nuove funzionalità e chiedi informazioni
|
||||
<string name="read_receipt_enabled">Notifica di lettura attiva</string>
|
||||
<string name="read_receipt_disabled">Non richiederà la notifica di lettura</string>
|
||||
<string name="add_attachment_action">Aggiungi allegato</string>
|
||||
<string name="add_attachment_action_image">Aggiungi allegato (Immagine)</string>
|
||||
<string name="add_attachment_action_video">Aggiungi allegato (Video)</string>
|
||||
<string name="empty_trash_action">Svuota cestino</string>
|
||||
<string name="expunge_action">Rimuovi messaggi eliminati</string>
|
||||
<string name="clear_local_folder_action">Cancella messaggi locali</string>
|
||||
@ -740,13 +738,7 @@ Invia le tue segnalazioni, suggerisci nuove funzionalità e chiedi informazioni
|
||||
<string name="font_size_medium">Medio</string>
|
||||
<string name="font_size_large">Grande</string>
|
||||
<string name="font_size_larger">Più grande</string>
|
||||
<!--Note: Contains references to preferences_action and misc_preferences_attachment_title-->
|
||||
<string name="message_compose_buggy_gallery">Controlla \"Impostazioni\" -> \"Aggira bug Galleria immagini\" per allegare immagini o video usando Galleria 3D.</string>
|
||||
<!--Note: Contains references to add_attachment_action_image and add_attachment_action_video-->
|
||||
<string name="message_compose_use_workaround">Utilizza \"Aggiungi allegato (Immagini)\" o \"Aggiungi allegato (Video)\" per allegare immagini o video con Galleria 3D.</string>
|
||||
<string name="miscellaneous_preferences">Varie</string>
|
||||
<string name="misc_preferences_attachment_title">Aggira bug della Galleria immagini</string>
|
||||
<string name="misc_preferences_attachment_description">Visualizza i pulsanti per allegare immagini/video (evita bug della Galleria 3D)</string>
|
||||
<!--APG related-->
|
||||
<string name="error_activity_not_found">Nessuna applicazione trovata per questa azione.</string>
|
||||
<string name="error_apg_version_not_supported">La versione di APG installata non è supportata.</string>
|
||||
|
@ -113,8 +113,6 @@
|
||||
<string name="read_receipt_enabled">נדרש אישור לקריאה</string>
|
||||
<string name="read_receipt_disabled">לא נדרש אישור קריאה</string>
|
||||
<string name="add_attachment_action">צרף קובץ</string>
|
||||
<string name="add_attachment_action_image">הוסף קובץ (תמונה)</string>
|
||||
<string name="add_attachment_action_video">הוסף קובת (וידאו)</string>
|
||||
<string name="empty_trash_action">רוקן אשפה</string>
|
||||
<string name="expunge_action">רוקן</string>
|
||||
<string name="clear_local_folder_action">נקה הודעות מקומיות</string>
|
||||
@ -580,13 +578,7 @@
|
||||
<string name="font_size_medium">בינוני</string>
|
||||
<string name="font_size_large">גדול</string>
|
||||
<string name="font_size_larger">ענק</string>
|
||||
<!--Note: Contains references to preferences_action and misc_preferences_attachment_title-->
|
||||
<string name="message_compose_buggy_gallery">סמן \"הגדרות\" -> \"השתמש בעקיפת באג הגלריה\" כדי שתוכל לצרף תמונות או קטעי וידאו לגלריית 3D.</string>
|
||||
<!--Note: Contains references to add_attachment_action_image and add_attachment_action_video-->
|
||||
<string name="message_compose_use_workaround">השתמש ב \"הוסף קובץ מצורף (תמונה) \" או \"הוסף קובץ מצורף (וידאו) \" כדי לצרף תמונות או קטעי וידאו באמצעות גלריית 3D.</string>
|
||||
<string name="miscellaneous_preferences">שונות</string>
|
||||
<string name="misc_preferences_attachment_title">השתמש בעקיפת באג הגלריה</string>
|
||||
<string name="misc_preferences_attachment_description">הצג כפתורים כדי להוסיף קבצי תמונה / וידאו (כדי לעקוף את באג גלריית 3D)</string>
|
||||
<!--APG related-->
|
||||
<string name="error_activity_not_found">לא נמצא ישום שיכול לבצע פעולה זו.</string>
|
||||
<string name="error_apg_version_not_supported">גרסת APG המותקנת אינה נתמכת.</string>
|
||||
|
@ -136,8 +136,6 @@ K-9 は大多数のメールクライアントと同様に、ほとんどのフ
|
||||
<string name="read_receipt_enabled">開封確認を要求</string>
|
||||
<string name="read_receipt_disabled">開封確認を要求しない</string>
|
||||
<string name="add_attachment_action">添付追加</string>
|
||||
<string name="add_attachment_action_image">添付ファイル追加 (画像)</string>
|
||||
<string name="add_attachment_action_video">添付ファイル追加 (動画)</string>
|
||||
<string name="empty_trash_action">ゴミ箱を空に</string>
|
||||
<string name="expunge_action">完全削除(Expunge)</string>
|
||||
<string name="clear_local_folder_action">ローカルのメッセージをクリア</string>
|
||||
@ -718,13 +716,7 @@ K-9 は大多数のメールクライアントと同様に、ほとんどのフ
|
||||
<string name="font_size_medium">中</string>
|
||||
<string name="font_size_large">大</string>
|
||||
<string name="font_size_larger">極大</string>
|
||||
<!--Note: Contains references to preferences_action and misc_preferences_attachment_title-->
|
||||
<string name="message_compose_buggy_gallery">ギャラリ3Dを使って画像/動画を添付するには\"設定\" -> \"ギャラリのバグ回避\"をチェックしてください</string>
|
||||
<!--Note: Contains references to add_attachment_action_image and add_attachment_action_video-->
|
||||
<string name="message_compose_use_workaround">ギャラリ3Dで画像/動画を添付するには\"添付ファイル追加 (画像)\"や\"添付ファイル追加 (動画)\" を使ってください</string>
|
||||
<string name="miscellaneous_preferences">その他</string>
|
||||
<string name="misc_preferences_attachment_title">ギャラリのバグ回避</string>
|
||||
<string name="misc_preferences_attachment_description">添付ファイルに画像/動画を追加するボタンを表示する(ギャラリ3Dバグを回避するため)</string>
|
||||
<!--APG related-->
|
||||
<string name="error_activity_not_found">この操作のためのアプリケーションが見つかりません</string>
|
||||
<string name="error_apg_version_not_supported">インストールされているAPGは、サポートされていないバージョンです</string>
|
||||
|
@ -135,8 +135,6 @@ K-9 메일은 대부분의 무료 hotmail 계정을 지원하지 않으며, 다
|
||||
<string name="read_receipt_enabled">읽음 확인을 요청함</string>
|
||||
<string name="read_receipt_disabled">읽음 확인을 요청하지 않음</string>
|
||||
<string name="add_attachment_action">첨부 추가</string>
|
||||
<string name="add_attachment_action_image">첨부 추가 (이미지)</string>
|
||||
<string name="add_attachment_action_video">첨부 추가 (비디오)</string>
|
||||
<string name="empty_trash_action">휴지통 비우기</string>
|
||||
<string name="expunge_action">폐기</string>
|
||||
<string name="clear_local_folder_action">로컬 메시지 삭제</string>
|
||||
@ -703,13 +701,7 @@ K-9 메일은 대부분의 무료 hotmail 계정을 지원하지 않으며, 다
|
||||
<string name="font_size_medium">중간</string>
|
||||
<string name="font_size_large">크게</string>
|
||||
<string name="font_size_larger">더 크게</string>
|
||||
<!--Note: Contains references to preferences_action and misc_preferences_attachment_title-->
|
||||
<string name="message_compose_buggy_gallery">갤러리 3D에서 이미지나 비디오를 첨부하려면 \"설정\" -> \"갤러리 버그 회피\"를 확인하십시오.</string>
|
||||
<!--Note: Contains references to add_attachment_action_image and add_attachment_action_video-->
|
||||
<string name="message_compose_use_workaround">갤러리 3D에서 \"첨부 추가 (이미지)\" 혹은 \"첨부 추가 (비디오)\"를 통해 이미지나 비디오를 첨부할 수 있습니다.</string>
|
||||
<string name="miscellaneous_preferences">기타 설정</string>
|
||||
<string name="misc_preferences_attachment_title">갤러리 버그 회피</string>
|
||||
<string name="misc_preferences_attachment_description">이미지/비디오 첨부 파일을 추가하는 버튼을 보여 줍니다 (갤러리 3D 버그를 회피할 수 있음)</string>
|
||||
<!--APG related-->
|
||||
<string name="error_activity_not_found">이 작동에 대해 적절한 애플리케이션을 찾을 수 없습니다.</string>
|
||||
<string name="error_apg_version_not_supported">설치된 APG 버전을 지원하지 않습니다.</string>
|
||||
|
@ -136,8 +136,6 @@ Praneškite apie klaidas, pridėkite naujų galimybių ir užduokite klausimus m
|
||||
<string name="read_receipt_enabled">Prašys perskaitymo patvirtinimo</string>
|
||||
<string name="read_receipt_disabled">Neprašys perskaitymo patvirtinimo</string>
|
||||
<string name="add_attachment_action">Priedo priedą</string>
|
||||
<string name="add_attachment_action_image">Pridėti priedą (paveikslėlis)</string>
|
||||
<string name="add_attachment_action_video">Pridėti priedą (Video)</string>
|
||||
<string name="empty_trash_action">Išvalyti šiukšliadėžę</string>
|
||||
<string name="expunge_action">Išvalyti</string>
|
||||
<string name="clear_local_folder_action">Išvalyti vietinius laiškus</string>
|
||||
@ -705,13 +703,7 @@ Praneškite apie klaidas, pridėkite naujų galimybių ir užduokite klausimus m
|
||||
<string name="font_size_medium">Vidutinis</string>
|
||||
<string name="font_size_large">Didelis</string>
|
||||
<string name="font_size_larger">Didesnis</string>
|
||||
<!--Note: Contains references to preferences_action and misc_preferences_attachment_title-->
|
||||
<string name="message_compose_buggy_gallery">Norėdami pridėti paveikslėlius ir video naudojant Gallery 3D, pažymėkite „Nustatymai“ -> „Naudoti galerijos klaidos apėjimą“</string>
|
||||
<!--Note: Contains references to add_attachment_action_image and add_attachment_action_video-->
|
||||
<string name="message_compose_use_workaround">Norėdami pridėti paveikslėlius ir video naudojant Gallery 3D naudokite „Pridėti priedą (paveikslėlis)“ ar „Pridėti priedą (Video)“.</string>
|
||||
<string name="miscellaneous_preferences">Kita</string>
|
||||
<string name="misc_preferences_attachment_title">Naudoti galerijos klaidos apėjimą</string>
|
||||
<string name="misc_preferences_attachment_description">Rodyti mygtukus kurie prideda vaizdo/video priedus (Gallery 3D klaidos apėjimas)</string>
|
||||
<!--APG related-->
|
||||
<string name="error_activity_not_found">Šiai programai nerasta tinkamo veiksmo.</string>
|
||||
<string name="error_apg_version_not_supported">Įdiegta APG versija nepalaikoma.</string>
|
||||
|
@ -138,8 +138,6 @@ Lūdzu sūtiet kļūdu ziņojumus, iesakiet uzlabojumus un uzdodiet jautājumus
|
||||
<string name="read_receipt_enabled">Pieprasīt izlasīšanas atskaiti</string>
|
||||
<string name="read_receipt_disabled">Neprasīt izlasīšanas atskaiti</string>
|
||||
<string name="add_attachment_action">Pievienot pielikumu</string>
|
||||
<string name="add_attachment_action_image">Pievienot pielikumu (bildi)</string>
|
||||
<string name="add_attachment_action_video">Pievienot pielikumu (video)</string>
|
||||
<string name="empty_trash_action">Iztukšot miskasti</string>
|
||||
<string name="expunge_action">Izmest</string>
|
||||
<string name="clear_local_folder_action">Izdzēst ierīcē esošās vēstules</string>
|
||||
@ -731,13 +729,7 @@ pat <xliff:g id="messages_to_load">%d</xliff:g> vairāk</string>
|
||||
<string name="font_size_medium">Vidējs</string>
|
||||
<string name="font_size_large">Liels</string>
|
||||
<string name="font_size_larger">Lielāks</string>
|
||||
<!--Note: Contains references to preferences_action and misc_preferences_attachment_title-->
|
||||
<string name="message_compose_buggy_gallery">Pārbaudiet \"Iestatījumi\" -> \"Izmantot galerijas kļūdu apvedceļu\", lai varētu pievienotu bildes vai video, izmantojot Gallery 3D.</string>
|
||||
<!--Note: Contains references to add_attachment_action_image and add_attachment_action_video-->
|
||||
<string name="message_compose_use_workaround">Izmantot \"Pievienot pielikumu (bildi)\" vai \"Pievienot pielikumu (video)\", lai pievienotu bildes vai videoklipus ar Gallery 3D.</string>
|
||||
<string name="miscellaneous_preferences">Dažādi</string>
|
||||
<string name="misc_preferences_attachment_title">Izmantot galerijas kļūdu apvedceļu</string>
|
||||
<string name="misc_preferences_attachment_description">Rādīt pogas, lai pievienotu bildi/video kā pielikumus (izmantojot Gallery 3D kļūdu apvedceļu)</string>
|
||||
<!--APG related-->
|
||||
<string name="error_activity_not_found">Šai darbībai nav atrasta atbilstoša aplikācija.</string>
|
||||
<string name="error_apg_version_not_supported">Instalētā APG versija netiek atbalstīta.</string>
|
||||
|
@ -137,8 +137,6 @@ Vennligst send feilmeldinger, forbedringer og still spørsmål hos
|
||||
<string name="read_receipt_enabled">Kommer til å be om lesekvittering</string>
|
||||
<string name="read_receipt_disabled">Kommer ikke til å be om lesekvittering</string>
|
||||
<string name="add_attachment_action">Legg til vedlegg</string>
|
||||
<string name="add_attachment_action_image">Legg til vedlegg (bilde)</string>
|
||||
<string name="add_attachment_action_video">Legg til vedlegg (video)</string>
|
||||
<string name="empty_trash_action">Tøm søppeldunk</string>
|
||||
<string name="expunge_action">Tilintetgjør</string>
|
||||
<string name="clear_local_folder_action">Fjern lokale meldinger</string>
|
||||
@ -661,8 +659,6 @@ Vis neste melding som standard etter meldingssletting</string>
|
||||
<string name="font_size_medium">Medium</string>
|
||||
<string name="font_size_large">Stor</string>
|
||||
<string name="font_size_larger">Større</string>
|
||||
<!--Note: Contains references to preferences_action and misc_preferences_attachment_title-->
|
||||
<!--Note: Contains references to add_attachment_action_image and add_attachment_action_video-->
|
||||
<string name="miscellaneous_preferences">Diverse</string>
|
||||
<!--APG related-->
|
||||
<string name="error_activity_not_found">Ingen egnede program ble funnet for denne handlingen.</string>
|
||||
|
@ -136,8 +136,6 @@ Graag foutrapporten, bijdrage nieuwe functies en vragen stellen op
|
||||
<string name="read_receipt_enabled">Lees rapport vragen</string>
|
||||
<string name="read_receipt_disabled">Geen lees rapport vragen</string>
|
||||
<string name="add_attachment_action">Voeg bijlage toe</string>
|
||||
<string name="add_attachment_action_image">Voeg bijlage toe (Afbeelding)</string>
|
||||
<string name="add_attachment_action_video">Voeg bijlage toe (Video)</string>
|
||||
<string name="empty_trash_action">Prullenbak legen</string>
|
||||
<string name="expunge_action">Wissen</string>
|
||||
<string name="clear_local_folder_action">Lokale berichten wissen</string>
|
||||
@ -713,13 +711,7 @@ Graag foutrapporten, bijdrage nieuwe functies en vragen stellen op
|
||||
<string name="font_size_medium">Gemiddeld</string>
|
||||
<string name="font_size_large">Groot</string>
|
||||
<string name="font_size_larger">Groter</string>
|
||||
<!--Note: Contains references to preferences_action and misc_preferences_attachment_title-->
|
||||
<string name="message_compose_buggy_gallery">Controleer \"Instellingen\" -> \"Use Gallery bug work-around\" to be able to attach images or videos using Gallery 3D.</string>
|
||||
<!--Note: Contains references to add_attachment_action_image and add_attachment_action_video-->
|
||||
<string name="message_compose_use_workaround">Gebruik \"Bijlage toevoegen (Afbeelding)\" of \"Bijlage toevoegen (Video)\" to attach images or videos with Gallery 3D.</string>
|
||||
<string name="miscellaneous_preferences">Diversen</string>
|
||||
<string name="misc_preferences_attachment_title">Gebruik Gallery bug work-around</string>
|
||||
<string name="misc_preferences_attachment_description">Laat knoppen zien om afbeelding/video bijlage toe te voegen (to work around a Gallery 3D bug)</string>
|
||||
<!--APG related-->
|
||||
<string name="error_activity_not_found">Geen geschikte applicatie gevonden voor deze aktie.</string>
|
||||
<string name="error_apg_version_not_supported">De geïnstalleerde APG versie wordt niet ondersteund.</string>
|
||||
|
@ -136,8 +136,6 @@ Wszelkie zgłoszenia usterek, zapytania oraz nowe pomysły prosimy przesyłać z
|
||||
<string name="read_receipt_enabled">Żadaj powiadomienia o przeczytaniu</string>
|
||||
<string name="read_receipt_disabled">Nie wymagaj powiadomienia o przeczytaniu</string>
|
||||
<string name="add_attachment_action">Dodaj załącznik</string>
|
||||
<string name="add_attachment_action_image">Dodaj załącznik (Zdjęcie)</string>
|
||||
<string name="add_attachment_action_video">Dodaj załącznik (Film)</string>
|
||||
<string name="empty_trash_action">Opróżnij kosz</string>
|
||||
<string name="expunge_action">Wyczyść</string>
|
||||
<string name="clear_local_folder_action">Wyczyść wiadomości lokalne</string>
|
||||
@ -714,13 +712,7 @@ Wszelkie zgłoszenia usterek, zapytania oraz nowe pomysły prosimy przesyłać z
|
||||
<string name="font_size_medium">Średnia</string>
|
||||
<string name="font_size_large">Duża</string>
|
||||
<string name="font_size_larger">Wielka</string>
|
||||
<!--Note: Contains references to preferences_action and misc_preferences_attachment_title-->
|
||||
<string name="message_compose_buggy_gallery">Włącz \"Obejdź błędy w Galerii\" aby móc załączać zdjęcia oraz filmy używając Galerii 3D.</string>
|
||||
<!--Note: Contains references to add_attachment_action_image and add_attachment_action_video-->
|
||||
<string name="message_compose_use_workaround">Użyj \"Dodaj załącznik (Zdjęcie)\" lub \"Dodaj załącznik (Film)\" aby je dodać używając Galerii 3D.</string>
|
||||
<string name="miscellaneous_preferences">Różne</string>
|
||||
<string name="misc_preferences_attachment_title">Obejdź błędy w Galerii</string>
|
||||
<string name="misc_preferences_attachment_description">Wyświetla przyciski dodawania zdjęć oraz filmów jako załączników</string>
|
||||
<!--APG related-->
|
||||
<string name="error_activity_not_found">Nie znaleiono odpowiedniej aplikacji.</string>
|
||||
<string name="error_apg_version_not_supported">Zainstalowana wersja APG nie jest wspierana.</string>
|
||||
|
@ -135,8 +135,6 @@ Por favor, nos envie relatórios de bugs, contribua para novas melhorias e faça
|
||||
<string name="read_receipt_enabled">Confirmação de leitura será requisitada</string>
|
||||
<string name="read_receipt_disabled">Confirmação de leitura não será requisitada</string>
|
||||
<string name="add_attachment_action">Incluir anexo</string>
|
||||
<string name="add_attachment_action_image">Incluir anexo (Imagem)</string>
|
||||
<string name="add_attachment_action_video">Incluir anexo (Video)</string>
|
||||
<string name="empty_trash_action">Esvaziar Lixeira</string>
|
||||
<string name="expunge_action">Expurgar</string>
|
||||
<string name="clear_local_folder_action">Limpar mensagens locais</string>
|
||||
@ -714,13 +712,7 @@ Por favor, nos envie relatórios de bugs, contribua para novas melhorias e faça
|
||||
<string name="font_size_medium">Médio</string>
|
||||
<string name="font_size_large">Maior</string>
|
||||
<string name="font_size_larger">Grande</string>
|
||||
<!--Note: Contains references to preferences_action and misc_preferences_attachment_title-->
|
||||
<string name="message_compose_buggy_gallery">Ativar em \"Configurações\" a opção \"Solução do bug da Galeria\" para poder anexar imagens ou vídeos utilizando a Galeria 3D.</string>
|
||||
<!--Note: Contains references to add_attachment_action_image and add_attachment_action_video-->
|
||||
<string name="message_compose_use_workaround">Usar \"Incluir anexo (Imagem)\" ou \"Incluir anexo (Video)\" para anexar imagens ou videos da Galeria 3D.</string>
|
||||
<string name="miscellaneous_preferences">Diversos</string>
|
||||
<string name="misc_preferences_attachment_title">Solução do bug da Galeria</string>
|
||||
<string name="misc_preferences_attachment_description">Mostrar botões para incluir anexos de imagem/video (para contornar problemas utilizando Gallery 3D)</string>
|
||||
<!--APG related-->
|
||||
<string name="error_activity_not_found">Nenhum aplicativo adequado para esta ação foi encontrado.</string>
|
||||
<string name="error_apg_version_not_supported"> A versão da APG instalada não é suportada.</string>
|
||||
|
@ -137,8 +137,6 @@ K-9 Mail — почтовый клиент для Android.
|
||||
<string name="read_receipt_enabled">Запросить уведомление о прочтении</string>
|
||||
<string name="read_receipt_disabled">Без уведомления о прочтении</string>
|
||||
<string name="add_attachment_action">Вложение</string>
|
||||
<string name="add_attachment_action_image">Изображение</string>
|
||||
<string name="add_attachment_action_video">Видео</string>
|
||||
<string name="empty_trash_action">Очистить корзину</string>
|
||||
<string name="expunge_action">Стереть</string>
|
||||
<string name="clear_local_folder_action">Стереть локальные</string>
|
||||
@ -729,13 +727,7 @@ K-9 Mail — почтовый клиент для Android.
|
||||
<string name="font_size_medium">Большой</string>
|
||||
<string name="font_size_large">Огромный</string>
|
||||
<string name="font_size_larger">Гигантский</string>
|
||||
<!--Note: Contains references to preferences_action and misc_preferences_attachment_title-->
|
||||
<string name="message_compose_buggy_gallery">Включите в настройках \"Обход ошибки Галереи 3D\" для её использования</string>
|
||||
<!--Note: Contains references to add_attachment_action_image and add_attachment_action_video-->
|
||||
<string name="message_compose_use_workaround">Используйте дествия \"Изображение\" или \"Видео\" для вложения с помощью Галереи 3D</string>
|
||||
<string name="miscellaneous_preferences">Разное</string>
|
||||
<string name="misc_preferences_attachment_title">Обход ошибки Галереи 3D</string>
|
||||
<string name="misc_preferences_attachment_description">Показать действия вложения изображений и видео</string>
|
||||
<!--APG related-->
|
||||
<string name="error_activity_not_found">Подходящее приложение не найдено</string>
|
||||
<string name="error_apg_version_not_supported">Установленная версия APG не поддерживается</string>
|
||||
|
@ -137,8 +137,6 @@ Prosím, nahlasujte prípadné chyby, prispievajte novými funkciami a pýtajte
|
||||
<string name="read_receipt_enabled">Potvrdenie o prečítaní bude vyžadované</string>
|
||||
<string name="read_receipt_disabled">Potvrdenie o prečítaní nebude vyžadované</string>
|
||||
<string name="add_attachment_action">Pridať prílohu</string>
|
||||
<string name="add_attachment_action_image">Pridať prílohu (obrázok)</string>
|
||||
<string name="add_attachment_action_video">Pridať prílohu (video)</string>
|
||||
<string name="empty_trash_action">Vyprázdniť kôš</string>
|
||||
<string name="expunge_action">Vymazať</string>
|
||||
<string name="clear_local_folder_action">Vymazať správy</string>
|
||||
@ -729,13 +727,7 @@ Prosím, nahlasujte prípadné chyby, prispievajte novými funkciami a pýtajte
|
||||
<string name="font_size_medium">Stredné</string>
|
||||
<string name="font_size_large">Veľké</string>
|
||||
<string name="font_size_larger">Väčšie</string>
|
||||
<!--Note: Contains references to preferences_action and misc_preferences_attachment_title-->
|
||||
<string name="message_compose_buggy_gallery">Skontrolujte \"Nastavenia\" -> \"Používať riešenie chyby pre Galériu\", aby ste boli schopný pripojiť obrázky alebo videá pomocou Galérie 3D.</string>
|
||||
<!--Note: Contains references to add_attachment_action_image and add_attachment_action_video-->
|
||||
<string name="message_compose_use_workaround">Použite \"Pridať prílohu (obrázok)\" alebo \"Pridať prílohu (video)\" pre pridanie obrázkov a videí pomocou Galérie 3D.</string>
|
||||
<string name="miscellaneous_preferences">Rôzne</string>
|
||||
<string name="misc_preferences_attachment_title">Používať riešenie chyby pre Galériu</string>
|
||||
<string name="misc_preferences_attachment_description">Zobraziť tlačidlá pre pridanie príloh (obrázky, videá) pre riešenie chyby Galérie 3D</string>
|
||||
<!--APG related-->
|
||||
<string name="error_activity_not_found">Nebola nájdená žiadna vhodná aplikácia pre túto akciu.</string>
|
||||
<string name="error_apg_version_not_supported">Nainštalovaná verzia APG nie je podporovaná.</string>
|
||||
|
@ -136,8 +136,6 @@ Anmäl fel, hjälp till med nya funktioner och ställ frågor på
|
||||
<string name="read_receipt_enabled">Läskvitto kommer att begäras</string>
|
||||
<string name="read_receipt_disabled">Läskvitto kommer inte att begäras</string>
|
||||
<string name="add_attachment_action">Lägg till bilaga</string>
|
||||
<string name="add_attachment_action_image">Lägg till bilaga (bild)</string>
|
||||
<string name="add_attachment_action_video">Lägg till bilaga (video)</string>
|
||||
<string name="empty_trash_action">Töm papperskorg</string>
|
||||
<string name="expunge_action">Radera</string>
|
||||
<string name="clear_local_folder_action">Rensa lokalt lagrade meddelanden</string>
|
||||
@ -719,13 +717,7 @@ Anmäl fel, hjälp till med nya funktioner och ställ frågor på
|
||||
<string name="font_size_medium">Stor</string>
|
||||
<string name="font_size_large">Större</string>
|
||||
<string name="font_size_larger">Störst</string>
|
||||
<!--Note: Contains references to preferences_action and misc_preferences_attachment_title-->
|
||||
<string name="message_compose_buggy_gallery">Kontrollera \"Inställningar\" -> \"Använd work-adound för bug i Gallery\" för att kunna bifoga bilder och filmer med Gallery 3D.</string>
|
||||
<!--Note: Contains references to add_attachment_action_image and add_attachment_action_video-->
|
||||
<string name="message_compose_use_workaround">Använd \"Lägg till bilaga (Bild)\" eller \"Lägg till bilaga (Video)\" för att bifoga bilder eller video med Gallery 3D.</string>
|
||||
<string name="miscellaneous_preferences">Diverse</string>
|
||||
<string name="misc_preferences_attachment_title">Använd workadound för bug i Gallery</string>
|
||||
<string name="misc_preferences_attachment_description">Visa knappar för att bifoga image/video (för att komma runt en bug i Gallery 3D)</string>
|
||||
<!--APG related-->
|
||||
<string name="error_activity_not_found">Hittade ingen passande applikation för denna åtgärd.</string>
|
||||
<string name="error_apg_version_not_supported">Den installerade versionen av APG stöds inte.</string>
|
||||
|
@ -136,8 +136,6 @@ Lütfen hata raporlarınızı, istediğiniz yeni özellikleri ve sorularınızı
|
||||
<string name="read_receipt_enabled">Okundu raporu istenecek</string>
|
||||
<string name="read_receipt_disabled">Okundu raporu istenmeyecek</string>
|
||||
<string name="add_attachment_action">Ekle</string>
|
||||
<string name="add_attachment_action_image">Ekle (Resim)</string>
|
||||
<string name="add_attachment_action_video">Ekle (Video)</string>
|
||||
<string name="empty_trash_action">Çöpü Boşalt</string>
|
||||
<string name="expunge_action">Çıkar</string>
|
||||
<string name="clear_local_folder_action">Yerel mesajları temizle</string>
|
||||
@ -718,13 +716,7 @@ Lütfen hata raporlarınızı, istediğiniz yeni özellikleri ve sorularınızı
|
||||
<string name="font_size_medium">Orta</string>
|
||||
<string name="font_size_large">Büyük</string>
|
||||
<string name="font_size_larger">Daha büyük</string>
|
||||
<!--Note: Contains references to preferences_action and misc_preferences_attachment_title-->
|
||||
<string name="message_compose_buggy_gallery">\"Ayarlar\" -> \"Galeri hata çalışması kullan\" işaretleyerek 3D Galeri kullanarak resimler veya videoları ekleyin.</string>
|
||||
<!--Note: Contains references to add_attachment_action_image and add_attachment_action_video-->
|
||||
<string name="message_compose_use_workaround">\"Ek Ekle (Resim)\" veya \"Ek Ekle (Video)\" kullanarak 3D Galeri ile resimleri ve videoları ekleyin.</string>
|
||||
<string name="miscellaneous_preferences">Çeşitli</string>
|
||||
<string name="misc_preferences_attachment_title">Geçici çözüm galeri hatasını kullan</string>
|
||||
<string name="misc_preferences_attachment_description">Resim/Video ekleri ekleme butonlarını göster (Bir galeri 3D hatası geçici çözümüne)</string>
|
||||
<!--APG related-->
|
||||
<string name="error_activity_not_found">Bu eylem için uygun program bulunamadı.</string>
|
||||
<string name="error_apg_version_not_supported">Kurulu APG versiyon desteklenmiyor.</string>
|
||||
|
@ -135,8 +135,6 @@ K-9 Mail це поштовий клієнт з відкритим вихідни
|
||||
<string name="read_receipt_enabled">Включити запит повідомлень про прочитання</string>
|
||||
<string name="read_receipt_disabled">Вимкнути запит повідомлень про прочитання</string>
|
||||
<string name="add_attachment_action">Додати вкладення</string>
|
||||
<string name="add_attachment_action_image">Додати вкладення (зображення)</string>
|
||||
<string name="add_attachment_action_video">Додати вкладення (Відео)</string>
|
||||
<string name="empty_trash_action">Очистити Кошик</string>
|
||||
<string name="expunge_action">Витерти</string>
|
||||
<string name="clear_local_folder_action">Видалити локальні повідомлення</string>
|
||||
@ -702,13 +700,7 @@ K-9 Mail це поштовий клієнт з відкритим вихідни
|
||||
<string name="font_size_medium">Середній</string>
|
||||
<string name="font_size_large">Великий</string>
|
||||
<string name="font_size_larger">Найбільший</string>
|
||||
<!--Note: Contains references to preferences_action and misc_preferences_attachment_title-->
|
||||
<string name="message_compose_buggy_gallery">Виберіть \"Налаштування\" -> \"Використовувати обхід помилок Галереї\" для вкладень зображень та відео з допомогою Gallery 3D.</string>
|
||||
<!--Note: Contains references to add_attachment_action_image and add_attachment_action_video-->
|
||||
<string name="message_compose_use_workaround">Виберіть \"Додати вкладення (зображення)\" або \"Додати вкладення (відео)\" для вкладень зображень та відео з допомогою Gallery 3D.</string>
|
||||
<string name="miscellaneous_preferences">Різне</string>
|
||||
<string name="misc_preferences_attachment_title">Використовувати обхід помилок Галереї</string>
|
||||
<string name="misc_preferences_attachment_description">Показувати кнопки для додавання зображень та відео вкладень (щоб обійти проблему з Gallery 3D)</string>
|
||||
<!--APG related-->
|
||||
<string name="error_activity_not_found">Відсутня програма для цієї дії.</string>
|
||||
<string name="error_apg_version_not_supported">Встановлена версія APG не підтримується.</string>
|
||||
|
@ -135,8 +135,6 @@ K-9改进的功能包括:
|
||||
<string name="read_receipt_enabled">将会请求已读回执</string>
|
||||
<string name="read_receipt_disabled">将不会请求已读回执</string>
|
||||
<string name="add_attachment_action">添加附件</string>
|
||||
<string name="add_attachment_action_image">添加图片附件</string>
|
||||
<string name="add_attachment_action_video">添加视频附件</string>
|
||||
<string name="empty_trash_action">清空垃圾箱</string>
|
||||
<string name="expunge_action">擦除</string>
|
||||
<string name="clear_local_folder_action">清空本地邮件</string>
|
||||
@ -717,13 +715,7 @@ K-9改进的功能包括:
|
||||
<string name="font_size_medium">中等</string>
|
||||
<string name="font_size_large">大</string>
|
||||
<string name="font_size_larger">更大</string>
|
||||
<!--Note: Contains references to preferences_action and misc_preferences_attachment_title-->
|
||||
<string name="message_compose_buggy_gallery">选择“设置”->“避免画册发生错误”来启用使用3D画册模式添加附件或视频。</string>
|
||||
<!--Note: Contains references to add_attachment_action_image and add_attachment_action_video-->
|
||||
<string name="message_compose_use_workaround">利用“添加附件(图片)”或“添加附件(视频)”来使用3D画册添加图片或视频。</string>
|
||||
<string name="miscellaneous_preferences">杂项</string>
|
||||
<string name="misc_preferences_attachment_title">避免画册发生错误</string>
|
||||
<string name="misc_preferences_attachment_description">显示按钮来添加图片/视频附件(以避免3D画册发生错误)</string>
|
||||
<!--APG related-->
|
||||
<string name="error_activity_not_found">没有找到可以用于这一操作的程序。</string>
|
||||
<string name="error_apg_version_not_supported">不支持所安装版本的APG。</string>
|
||||
|
@ -107,8 +107,6 @@
|
||||
<string name="read_receipt_enabled">要求讀取回條</string>
|
||||
<string name="read_receipt_disabled">取消讀取回條</string>
|
||||
<string name="add_attachment_action">新增附件</string>
|
||||
<string name="add_attachment_action_image">新增圖片附件</string>
|
||||
<string name="add_attachment_action_video">新增影片附件</string>
|
||||
<string name="empty_trash_action">清空垃圾桶</string>
|
||||
<string name="expunge_action">刪除</string>
|
||||
<string name="clear_local_folder_action">清除本地郵件</string>
|
||||
@ -675,13 +673,7 @@
|
||||
<string name="font_size_medium">中等</string>
|
||||
<string name="font_size_large">大</string>
|
||||
<string name="font_size_larger">最大</string>
|
||||
<!--Note: Contains references to preferences_action and misc_preferences_attachment_title-->
|
||||
<string name="message_compose_buggy_gallery">選擇「設定」->「避免相簿發生錯誤」來啟用3D相簿模式新增附件或影片。</string>
|
||||
<!--Note: Contains references to add_attachment_action_image and add_attachment_action_video-->
|
||||
<string name="message_compose_use_workaround">利用「新增附件(圖片)」或「新增附件(影片)」來使用3D相簿新增圖片或影片。</string>
|
||||
<string name="miscellaneous_preferences">偏好設定</string>
|
||||
<string name="misc_preferences_attachment_title">避免相簿發生錯誤</string>
|
||||
<string name="misc_preferences_attachment_description">顯示按鈕來新增圖片/影片為附件(以避免3D相簿發生錯誤)</string>
|
||||
<!--APG related-->
|
||||
<string name="error_activity_not_found">沒有找到可以用於此操作的程式。</string>
|
||||
<string name="error_apg_version_not_supported">尚未支援所安裝的APG版本。</string>
|
||||
|
@ -170,8 +170,6 @@ Please submit bug reports, contribute new features and ask questions at
|
||||
<string name="read_receipt_enabled">Will request read receipt</string>
|
||||
<string name="read_receipt_disabled">Will not request read receipt</string>
|
||||
<string name="add_attachment_action">Add attachment</string>
|
||||
<string name="add_attachment_action_image">Add attachment (Image)</string>
|
||||
<string name="add_attachment_action_video">Add attachment (Video)</string>
|
||||
<string name="empty_trash_action">Empty Trash</string>
|
||||
<string name="expunge_action">Expunge</string>
|
||||
<string name="clear_local_folder_action">Clear local messages</string>
|
||||
@ -908,15 +906,7 @@ Please submit bug reports, contribute new features and ask questions at
|
||||
<string name="font_size_large">Large</string>
|
||||
<string name="font_size_larger">Larger</string>
|
||||
|
||||
<!-- Note: Contains references to preferences_action and misc_preferences_attachment_title -->
|
||||
<string name="message_compose_buggy_gallery">Check \"Settings\" -> \"Use Gallery bug work-around\" to be able to attach images or videos using Gallery 3D.</string>
|
||||
|
||||
<!-- Note: Contains references to add_attachment_action_image and add_attachment_action_video -->
|
||||
<string name="message_compose_use_workaround">Use \"Add attachment (Image)\" or \"Add attachment (Video)\" to attach images or videos with Gallery 3D.</string>
|
||||
|
||||
<string name="miscellaneous_preferences">Miscellaneous</string>
|
||||
<string name="misc_preferences_attachment_title">Use Gallery bug work-around</string>
|
||||
<string name="misc_preferences_attachment_description">Show buttons to add image/video attachments (to work around a Gallery 3D bug)</string>
|
||||
|
||||
<!-- APG related -->
|
||||
<string name="error_activity_not_found">No suitable application for this action found.</string>
|
||||
|
@ -8,6 +8,21 @@
|
||||
They are automatically updated with "ant bump-version".
|
||||
-->
|
||||
<changelog>
|
||||
<release version="4.905" versioncode="21008">
|
||||
<change>Dropped support for Android versions older than 4.0.3</change>
|
||||
<change>Added ability to use client certificates for authentication</change>
|
||||
<change>Enabled support for TLSv1.1 and TLSv1.2</change>
|
||||
<change>Added SSL/TLS session caching</change>
|
||||
<change>Finer grained control for notifications</change>
|
||||
<change>Added support for delete confirmations in the message list</change>
|
||||
<change>Added the option to show the password when setting up new accounts</change>
|
||||
<change>Added privacy setting to omit the User-Agent header</change>
|
||||
<change>Added privacy setting to use UTC as timezone in mail headers</change>
|
||||
<change>Added auto configuration settings for various providers</change>
|
||||
<change>Fixed HELO/EHLO with IPv6 address literals</change>
|
||||
<change>Various bug fixes</change>
|
||||
<change>Added translations: Latvian, Estonian, Norwegian Bokmål, Galician (Spain)</change>
|
||||
</release>
|
||||
<release version="4.904" versioncode="21007" >
|
||||
<change>Added support for OpenPGP API v3</change>
|
||||
<change>Fixed problems with IMAP login</change>
|
||||
@ -66,7 +81,6 @@
|
||||
<change>Better cleanup of old data when deleting an account</change>
|
||||
<change>Worked around a bug in KitKat that stopped settings import from working</change>
|
||||
<change>Updated German, Greek, Japanese, Korean, Lithuanian, Portugese, Russian and Slovak translations</change>
|
||||
<change></change>
|
||||
</release>
|
||||
<release version="4.700" versioncode="19001" >
|
||||
<change>Code cleanups</change>
|
||||
|
@ -348,12 +348,6 @@
|
||||
android:title="@string/miscellaneous_preferences"
|
||||
android:key="misc_preferences">
|
||||
|
||||
<CheckBoxPreference
|
||||
android:persistent="false"
|
||||
android:key="use_gallery_bug_workaround"
|
||||
android:title="@string/misc_preferences_attachment_title"
|
||||
android:summary="@string/misc_preferences_attachment_description" />
|
||||
|
||||
<Preference
|
||||
android:persistent="false"
|
||||
android:title="@string/settings_attachment_default_path"
|
||||
|
@ -221,7 +221,6 @@ public class Account implements BaseAccount {
|
||||
|
||||
private ColorChip mFlaggedUnreadColorChip;
|
||||
private ColorChip mFlaggedReadColorChip;
|
||||
private ColorChip mCheckmarkChip;
|
||||
|
||||
|
||||
/**
|
||||
@ -862,11 +861,6 @@ public class Account implements BaseAccount {
|
||||
mUnreadColorChip = new ColorChip(mChipColor, false, ColorChip.CIRCULAR);
|
||||
mFlaggedReadColorChip = new ColorChip(mChipColor, true, ColorChip.STAR);
|
||||
mFlaggedUnreadColorChip = new ColorChip(mChipColor, false, ColorChip.STAR);
|
||||
mCheckmarkChip = new ColorChip(mChipColor, true, ColorChip.CHECKMARK);
|
||||
}
|
||||
|
||||
public ColorChip getCheckmarkChip() {
|
||||
return mCheckmarkChip;
|
||||
}
|
||||
|
||||
public synchronized int getChipColor() {
|
||||
@ -895,10 +889,6 @@ public class Account implements BaseAccount {
|
||||
return chip;
|
||||
}
|
||||
|
||||
public ColorChip generateColorChip() {
|
||||
return new ColorChip(mChipColor, false, ColorChip.CIRCULAR);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUuid() {
|
||||
return mUuid;
|
||||
|
@ -16,9 +16,7 @@ import android.content.IntentFilter;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.SharedPreferences.Editor;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.PackageManager.NameNotFoundException;
|
||||
import android.net.Uri;
|
||||
import android.os.Debug;
|
||||
import android.os.Environment;
|
||||
@ -264,9 +262,6 @@ public class K9 extends Application {
|
||||
private static boolean mHideUserAgent = false;
|
||||
private static boolean mHideTimeZone = false;
|
||||
|
||||
private static boolean useGalleryBugWorkaround = false;
|
||||
private static boolean galleryBuggy;
|
||||
|
||||
private static SortType mSortType;
|
||||
private static HashMap<SortType, Boolean> mSortAscending = new HashMap<SortType, Boolean>();
|
||||
|
||||
@ -543,7 +538,6 @@ public class K9 extends Application {
|
||||
editor.putInt("messageViewTheme", messageViewTheme.ordinal());
|
||||
editor.putInt("messageComposeTheme", composerTheme.ordinal());
|
||||
editor.putBoolean("fixedMessageViewTheme", useFixedMessageTheme);
|
||||
editor.putBoolean("useGalleryBugWorkaround", useGalleryBugWorkaround);
|
||||
|
||||
editor.putBoolean("confirmDelete", mConfirmDelete);
|
||||
editor.putBoolean("confirmDeleteStarred", mConfirmDeleteStarred);
|
||||
@ -582,8 +576,6 @@ public class K9 extends Application {
|
||||
super.onCreate();
|
||||
app = this;
|
||||
|
||||
galleryBuggy = checkForBuggyGallery();
|
||||
|
||||
sIsDebuggable = ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0);
|
||||
|
||||
checkCachedDatabaseVersion();
|
||||
@ -749,8 +741,6 @@ public class K9 extends Application {
|
||||
mHideUserAgent = sprefs.getBoolean("hideUserAgent", false);
|
||||
mHideTimeZone = sprefs.getBoolean("hideTimeZone", false);
|
||||
|
||||
useGalleryBugWorkaround = sprefs.getBoolean("useGalleryBugWorkaround", K9.isGalleryBuggy());
|
||||
|
||||
mConfirmDelete = sprefs.getBoolean("confirmDelete", false);
|
||||
mConfirmDeleteStarred = sprefs.getBoolean("confirmDeleteStarred", false);
|
||||
mConfirmSpam = sprefs.getBoolean("confirmSpam", false);
|
||||
@ -1185,18 +1175,6 @@ public class K9 extends Application {
|
||||
mHideSpecialAccounts = hideSpecialAccounts;
|
||||
}
|
||||
|
||||
public static boolean useGalleryBugWorkaround() {
|
||||
return useGalleryBugWorkaround;
|
||||
}
|
||||
|
||||
public static void setUseGalleryBugWorkaround(boolean useGalleryBugWorkaround) {
|
||||
K9.useGalleryBugWorkaround = useGalleryBugWorkaround;
|
||||
}
|
||||
|
||||
public static boolean isGalleryBuggy() {
|
||||
return galleryBuggy;
|
||||
}
|
||||
|
||||
public static boolean confirmDelete() {
|
||||
return mConfirmDelete;
|
||||
}
|
||||
@ -1245,25 +1223,6 @@ public class K9 extends Application {
|
||||
sNotificationQuickDelete = mode;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if this system contains a buggy Gallery 3D package.
|
||||
*
|
||||
* We have to work around the fact that those Gallery versions won't show
|
||||
* any images or videos when the pick intent is used with a MIME type other
|
||||
* than image/* or video/*. See issue 1186.
|
||||
*
|
||||
* @return true, if a buggy Gallery 3D package was found. False, otherwise.
|
||||
*/
|
||||
private boolean checkForBuggyGallery() {
|
||||
try {
|
||||
PackageInfo pi = getPackageManager().getPackageInfo("com.cooliris.media", 0);
|
||||
|
||||
return (pi.versionCode == 30682);
|
||||
} catch (NameNotFoundException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean wrapFolderNames() {
|
||||
return mWrapFolderNames;
|
||||
}
|
||||
|
@ -2042,18 +2042,6 @@ public class MessageCompose extends K9Activity implements OnClickListener,
|
||||
* Kick off a picker for whatever kind of MIME types we'll accept and let Android take over.
|
||||
*/
|
||||
private void onAddAttachment() {
|
||||
if (K9.isGalleryBuggy()) {
|
||||
if (K9.useGalleryBugWorkaround()) {
|
||||
Toast.makeText(MessageCompose.this,
|
||||
getString(R.string.message_compose_use_workaround),
|
||||
Toast.LENGTH_LONG).show();
|
||||
} else {
|
||||
Toast.makeText(MessageCompose.this,
|
||||
getString(R.string.message_compose_buggy_gallery),
|
||||
Toast.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
|
||||
onAddAttachment2("*/*");
|
||||
}
|
||||
|
||||
@ -2549,12 +2537,6 @@ public class MessageCompose extends K9Activity implements OnClickListener,
|
||||
case R.id.add_attachment:
|
||||
onAddAttachment();
|
||||
break;
|
||||
case R.id.add_attachment_image:
|
||||
onAddAttachment2("image/*");
|
||||
break;
|
||||
case R.id.add_attachment_video:
|
||||
onAddAttachment2("video/*");
|
||||
break;
|
||||
case R.id.read_receipt:
|
||||
onReadReceipt();
|
||||
default:
|
||||
@ -2575,13 +2557,6 @@ public class MessageCompose extends K9Activity implements OnClickListener,
|
||||
menu.findItem(R.id.save).setEnabled(false);
|
||||
}
|
||||
|
||||
/*
|
||||
* Show the menu items "Add attachment (Image)" and "Add attachment (Video)"
|
||||
* if the work-around for the Gallery bug is enabled (see Issue 1186).
|
||||
*/
|
||||
menu.findItem(R.id.add_attachment_image).setVisible(K9.useGalleryBugWorkaround());
|
||||
menu.findItem(R.id.add_attachment_video).setVisible(K9.useGalleryBugWorkaround());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -87,7 +87,6 @@ public class Prefs extends K9PreferenceActivity {
|
||||
|
||||
private static final String PREFERENCE_AUTOFIT_WIDTH = "messageview_autofit_width";
|
||||
private static final String PREFERENCE_BACKGROUND_OPS = "background_ops";
|
||||
private static final String PREFERENCE_GALLERY_BUG_WORKAROUND = "use_gallery_bug_workaround";
|
||||
private static final String PREFERENCE_DEBUG_LOGGING = "debug_logging";
|
||||
private static final String PREFERENCE_SENSITIVE_LOGGING = "sensitive_logging";
|
||||
|
||||
@ -134,7 +133,6 @@ public class Prefs extends K9PreferenceActivity {
|
||||
private CheckBoxPreference mShowNext;
|
||||
private CheckBoxPreference mAutofitWidth;
|
||||
private ListPreference mBackgroundOps;
|
||||
private CheckBoxPreference mUseGalleryBugWorkaround;
|
||||
private CheckBoxPreference mDebugLogging;
|
||||
private CheckBoxPreference mSensitiveLogging;
|
||||
private CheckBoxPreference mHideUserAgent;
|
||||
@ -341,9 +339,6 @@ public class Prefs extends K9PreferenceActivity {
|
||||
|
||||
mBackgroundOps = setupListPreference(PREFERENCE_BACKGROUND_OPS, K9.getBackgroundOps().name());
|
||||
|
||||
mUseGalleryBugWorkaround = (CheckBoxPreference)findPreference(PREFERENCE_GALLERY_BUG_WORKAROUND);
|
||||
mUseGalleryBugWorkaround.setChecked(K9.useGalleryBugWorkaround());
|
||||
|
||||
mDebugLogging = (CheckBoxPreference)findPreference(PREFERENCE_DEBUG_LOGGING);
|
||||
mSensitiveLogging = (CheckBoxPreference)findPreference(PREFERENCE_SENSITIVE_LOGGING);
|
||||
mHideUserAgent = (CheckBoxPreference)findPreference(PREFERENCE_HIDE_USERAGENT);
|
||||
@ -492,7 +487,6 @@ public class Prefs extends K9PreferenceActivity {
|
||||
K9.setSplitViewMode(SplitViewMode.valueOf(mSplitViewMode.getValue()));
|
||||
K9.setAttachmentDefaultPath(mAttachmentPathPreference.getSummary().toString());
|
||||
boolean needsRefresh = K9.setBackgroundOps(mBackgroundOps.getValue());
|
||||
K9.setUseGalleryBugWorkaround(mUseGalleryBugWorkaround.isChecked());
|
||||
|
||||
if (!K9.DEBUG && mDebugLogging.isChecked()) {
|
||||
Toast.makeText(this, R.string.debug_logging_enabled, Toast.LENGTH_LONG).show();
|
||||
|
@ -1,280 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2008 The Android Open Source Project
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
package com.fsck.k9.helper;
|
||||
|
||||
import android.net.http.SslCertificate;
|
||||
import android.util.Log;
|
||||
import com.fsck.k9.K9;
|
||||
import java.net.InetAddress;
|
||||
import java.net.UnknownHostException;
|
||||
import java.security.cert.X509Certificate;
|
||||
import java.security.cert.CertificateParsingException;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.regex.PatternSyntaxException;
|
||||
|
||||
/**
|
||||
* Implements basic domain-name validation as specified by RFC2818.
|
||||
*/
|
||||
public class DomainNameChecker {
|
||||
private static Pattern QUICK_IP_PATTERN;
|
||||
static {
|
||||
try {
|
||||
QUICK_IP_PATTERN = Pattern.compile("^[a-f0-9\\.:]+$");
|
||||
} catch (PatternSyntaxException e) {
|
||||
}
|
||||
}
|
||||
|
||||
private static final int ALT_DNS_NAME = 2;
|
||||
private static final int ALT_IPA_NAME = 7;
|
||||
|
||||
/**
|
||||
* Checks the site certificate against the domain name of the site being
|
||||
* visited
|
||||
*
|
||||
* @param certificate
|
||||
* The certificate to check
|
||||
* @param thisDomain
|
||||
* The domain name of the site being visited
|
||||
* @return True iff if there is a domain match as specified by RFC2818
|
||||
*/
|
||||
public static boolean match(X509Certificate certificate, String thisDomain) {
|
||||
if ((certificate == null) || (thisDomain == null)
|
||||
|| thisDomain.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
thisDomain = thisDomain.toLowerCase(Locale.US);
|
||||
if (!isIpAddress(thisDomain)) {
|
||||
return matchDns(certificate, thisDomain);
|
||||
} else {
|
||||
return matchIpAddress(certificate, thisDomain);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return True iff the domain name is specified as an IP address
|
||||
*/
|
||||
private static boolean isIpAddress(String domain) {
|
||||
if ((domain == null) || domain.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
boolean rval;
|
||||
try {
|
||||
// do a quick-dirty IP match first to avoid DNS lookup
|
||||
rval = QUICK_IP_PATTERN.matcher(domain).matches();
|
||||
if (rval) {
|
||||
rval = domain.equals(InetAddress.getByName(domain)
|
||||
.getHostAddress());
|
||||
}
|
||||
} catch (UnknownHostException e) {
|
||||
String errorMessage = e.getMessage();
|
||||
if (errorMessage == null) {
|
||||
errorMessage = "unknown host exception";
|
||||
}
|
||||
|
||||
if (K9.DEBUG) {
|
||||
Log.v(K9.LOG_TAG, "DomainNameChecker.isIpAddress(): "
|
||||
+ errorMessage);
|
||||
}
|
||||
|
||||
rval = false;
|
||||
}
|
||||
|
||||
return rval;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks the site certificate against the IP domain name of the site being
|
||||
* visited
|
||||
*
|
||||
* @param certificate
|
||||
* The certificate to check
|
||||
* @param thisDomain
|
||||
* The DNS domain name of the site being visited
|
||||
* @return True iff if there is a domain match as specified by RFC2818
|
||||
*/
|
||||
private static boolean matchIpAddress(X509Certificate certificate, String thisDomain) {
|
||||
if (K9.DEBUG) {
|
||||
Log.v(K9.LOG_TAG, "DomainNameChecker.matchIpAddress(): this domain: " + thisDomain);
|
||||
}
|
||||
|
||||
try {
|
||||
Collection<List<?>> subjectAltNames = certificate.getSubjectAlternativeNames();
|
||||
if (subjectAltNames != null) {
|
||||
for (List<?> altNameEntry : subjectAltNames) {
|
||||
if ((altNameEntry != null) && (2 <= altNameEntry.size())) {
|
||||
Integer altNameType = (Integer)(altNameEntry.get(0));
|
||||
if (altNameType != null && altNameType.intValue() == ALT_IPA_NAME) {
|
||||
String altName = (String)(altNameEntry.get(1));
|
||||
if (altName != null) {
|
||||
if (K9.DEBUG) {
|
||||
Log.v(K9.LOG_TAG, "alternative IP: " + altName);
|
||||
}
|
||||
if (thisDomain.equalsIgnoreCase(altName)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (CertificateParsingException e) {
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks the site certificate against the DNS domain name of the site being
|
||||
* visited
|
||||
*
|
||||
* @param certificate
|
||||
* The certificate to check
|
||||
* @param thisDomain
|
||||
* The DNS domain name of the site being visited
|
||||
* @return True iff if there is a domain match as specified by RFC2818
|
||||
*/
|
||||
private static boolean matchDns(X509Certificate certificate, String thisDomain) {
|
||||
boolean hasDns = false;
|
||||
try {
|
||||
Collection<List<?>> subjectAltNames = certificate.getSubjectAlternativeNames();
|
||||
if (subjectAltNames != null) {
|
||||
for (List<?> altNameEntry : subjectAltNames) {
|
||||
if ((altNameEntry != null) && (2 <= altNameEntry.size())) {
|
||||
Integer altNameType = (Integer)(altNameEntry.get(0));
|
||||
if (altNameType != null && altNameType.intValue() == ALT_DNS_NAME) {
|
||||
hasDns = true;
|
||||
String altName = (String)(altNameEntry.get(1));
|
||||
if (altName != null && matchDns(thisDomain, altName)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (CertificateParsingException e) {
|
||||
// one way we can get here is if an alternative name starts with
|
||||
// '*' character, which is contrary to one interpretation of the
|
||||
// spec (a valid DNS name must start with a letter); there is no
|
||||
// good way around this, and in order to be compatible we proceed
|
||||
// to check the common name (ie, ignore alternative names)
|
||||
if (K9.DEBUG) {
|
||||
String errorMessage = e.getMessage();
|
||||
if (errorMessage == null) {
|
||||
errorMessage = "failed to parse certificate";
|
||||
}
|
||||
|
||||
Log.v(K9.LOG_TAG, "DomainNameChecker.matchDns(): "
|
||||
+ errorMessage);
|
||||
}
|
||||
}
|
||||
|
||||
if (!hasDns) {
|
||||
SslCertificate sslCertificate = new SslCertificate(certificate);
|
||||
return matchDns(thisDomain, sslCertificate.getIssuedTo().getCName());
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param thisDomain
|
||||
* The domain name of the site being visited
|
||||
* @param thatDomain
|
||||
* The domain name from the certificate
|
||||
* @return True iff thisDomain matches thatDomain as specified by RFC2818
|
||||
*/
|
||||
private static boolean matchDns(String thisDomain, String thatDomain) {
|
||||
if (K9.DEBUG) {
|
||||
Log.v(K9.LOG_TAG, "DomainNameChecker.matchDns():"
|
||||
+ " this domain: " + thisDomain + " that domain: "
|
||||
+ thatDomain);
|
||||
}
|
||||
|
||||
if ((thisDomain == null) || thisDomain.isEmpty()
|
||||
|| (thatDomain == null) || thatDomain.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
thatDomain = thatDomain.toLowerCase(Locale.US);
|
||||
|
||||
// (a) domain name strings are equal, ignoring case: X matches X
|
||||
boolean rval = thisDomain.equals(thatDomain);
|
||||
if (!rval) {
|
||||
String[] thisDomainTokens = thisDomain.split("\\.");
|
||||
String[] thatDomainTokens = thatDomain.split("\\.");
|
||||
|
||||
int thisDomainTokensNum = thisDomainTokens.length;
|
||||
int thatDomainTokensNum = thatDomainTokens.length;
|
||||
|
||||
// (b) OR thatHost is a '.'-suffix of thisHost: Z.Y.X matches X
|
||||
if (thisDomainTokensNum >= thatDomainTokensNum) {
|
||||
for (int i = thatDomainTokensNum - 1; i >= 0; --i) {
|
||||
rval = thisDomainTokens[i].equals(thatDomainTokens[i]);
|
||||
if (!rval) {
|
||||
// (c) OR we have a special *-match:
|
||||
// Z.Y.X matches *.Y.X but does not match *.X
|
||||
rval = ((i == 0) && (thisDomainTokensNum == thatDomainTokensNum));
|
||||
if (rval) {
|
||||
rval = thatDomainTokens[0].equals("*");
|
||||
if (!rval) {
|
||||
// (d) OR we have a *-component match:
|
||||
// f*.com matches foo.com but not bar.com
|
||||
rval = domainTokenMatch(thisDomainTokens[0],
|
||||
thatDomainTokens[0]);
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return rval;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param thisDomainToken
|
||||
* The domain token from the current domain name
|
||||
* @param thatDomainToken
|
||||
* The domain token from the certificate
|
||||
* @return True iff thisDomainToken matches thatDomainToken, using the
|
||||
* wildcard match as specified by RFC2818-3.1. For example, f*.com
|
||||
* must match foo.com but not bar.com
|
||||
*/
|
||||
private static boolean domainTokenMatch(String thisDomainToken, String thatDomainToken) {
|
||||
if ((thisDomainToken != null) && (thatDomainToken != null)) {
|
||||
int starIndex = thatDomainToken.indexOf('*');
|
||||
if (starIndex >= 0) {
|
||||
if (thatDomainToken.length() - 1 <= thisDomainToken.length()) {
|
||||
String prefix = thatDomainToken.substring(0, starIndex);
|
||||
String suffix = thatDomainToken.substring(starIndex + 1);
|
||||
|
||||
return thisDomainToken.startsWith(prefix)
|
||||
&& thisDomainToken.endsWith(suffix);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
@ -96,7 +96,7 @@ import com.fsck.k9.mail.store.ImapResponseParser.ImapList;
|
||||
import com.fsck.k9.mail.store.ImapResponseParser.ImapResponse;
|
||||
import com.fsck.k9.mail.store.imap.ImapUtility;
|
||||
import com.fsck.k9.mail.transport.imap.ImapSettings;
|
||||
import com.fsck.k9.net.ssl.SslHelper;
|
||||
import com.fsck.k9.net.ssl.TrustedSocketFactory;
|
||||
import com.jcraft.jzlib.JZlib;
|
||||
import com.jcraft.jzlib.ZOutputStream;
|
||||
|
||||
@ -2435,7 +2435,7 @@ public class ImapStore extends Store {
|
||||
mSettings.getPort());
|
||||
|
||||
if (connectionSecurity == ConnectionSecurity.SSL_TLS_REQUIRED) {
|
||||
mSocket = SslHelper.createSslSocket(mSettings.getHost(),
|
||||
mSocket = TrustedSocketFactory.createSocket(mSettings.getHost(),
|
||||
mSettings.getPort(), mSettings.getClientCertificateAlias());
|
||||
} else {
|
||||
mSocket = new Socket();
|
||||
@ -2485,8 +2485,8 @@ public class ImapStore extends Store {
|
||||
// STARTTLS
|
||||
executeSimpleCommand("STARTTLS");
|
||||
|
||||
mSocket = SslHelper.createStartTlsSocket(mSocket,
|
||||
mSettings.getHost(), mSettings.getPort(), true,
|
||||
mSocket = TrustedSocketFactory.createSocket(mSocket,
|
||||
mSettings.getHost(), mSettings.getPort(),
|
||||
mSettings.getClientCertificateAlias());
|
||||
mSocket.setSoTimeout(Store.SOCKET_READ_TIMEOUT);
|
||||
mIn = new PeekableInputStream(new BufferedInputStream(mSocket
|
||||
|
@ -12,7 +12,7 @@ import com.fsck.k9.mail.*;
|
||||
import com.fsck.k9.mail.filter.Base64;
|
||||
import com.fsck.k9.mail.filter.Hex;
|
||||
import com.fsck.k9.mail.internet.MimeMessage;
|
||||
import com.fsck.k9.net.ssl.SslHelper;
|
||||
import com.fsck.k9.net.ssl.TrustedSocketFactory;
|
||||
|
||||
import javax.net.ssl.SSLException;
|
||||
|
||||
@ -314,7 +314,7 @@ public class Pop3Store extends Store {
|
||||
try {
|
||||
SocketAddress socketAddress = new InetSocketAddress(mHost, mPort);
|
||||
if (mConnectionSecurity == ConnectionSecurity.SSL_TLS_REQUIRED) {
|
||||
mSocket = SslHelper.createSslSocket(mHost, mPort, mClientCertificateAlias);
|
||||
mSocket = TrustedSocketFactory.createSocket(mHost, mPort, mClientCertificateAlias);
|
||||
} else {
|
||||
mSocket = new Socket();
|
||||
}
|
||||
@ -336,7 +336,7 @@ public class Pop3Store extends Store {
|
||||
if (mCapabilities.stls) {
|
||||
executeSimpleCommand(STLS_COMMAND);
|
||||
|
||||
mSocket = SslHelper.createStartTlsSocket(mSocket, mHost, mPort, true,
|
||||
mSocket = TrustedSocketFactory.createSocket(mSocket, mHost, mPort,
|
||||
mClientCertificateAlias);
|
||||
mSocket.setSoTimeout(Store.SOCKET_READ_TIMEOUT);
|
||||
mIn = new BufferedInputStream(mSocket.getInputStream(), 1024);
|
||||
|
@ -15,7 +15,7 @@ import com.fsck.k9.mail.filter.PeekableInputStream;
|
||||
import com.fsck.k9.mail.filter.SmtpDataStuffing;
|
||||
import com.fsck.k9.mail.internet.MimeUtility;
|
||||
import com.fsck.k9.mail.store.local.LocalMessage;
|
||||
import com.fsck.k9.net.ssl.SslHelper;
|
||||
import com.fsck.k9.net.ssl.TrustedSocketFactory;
|
||||
|
||||
import javax.net.ssl.SSLException;
|
||||
|
||||
@ -224,7 +224,7 @@ public class SmtpTransport extends Transport {
|
||||
try {
|
||||
SocketAddress socketAddress = new InetSocketAddress(addresses[i], mPort);
|
||||
if (mConnectionSecurity == ConnectionSecurity.SSL_TLS_REQUIRED) {
|
||||
mSocket = SslHelper.createSslSocket(mHost, mPort, mClientCertificateAlias);
|
||||
mSocket = TrustedSocketFactory.createSocket(mHost, mPort, mClientCertificateAlias);
|
||||
mSocket.connect(socketAddress, SOCKET_CONNECT_TIMEOUT);
|
||||
secureConnection = true;
|
||||
} else {
|
||||
@ -278,7 +278,7 @@ public class SmtpTransport extends Transport {
|
||||
if (extensions.containsKey("STARTTLS")) {
|
||||
executeSimpleCommand("STARTTLS");
|
||||
|
||||
mSocket = SslHelper.createStartTlsSocket(mSocket, mHost, mPort, true,
|
||||
mSocket = TrustedSocketFactory.createSocket(mSocket, mHost, mPort,
|
||||
mClientCertificateAlias);
|
||||
|
||||
mIn = new PeekableInputStream(new BufferedInputStream(mSocket.getInputStream(),
|
||||
|
@ -1,81 +0,0 @@
|
||||
|
||||
package com.fsck.k9.net.ssl;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.Socket;
|
||||
import java.security.KeyManagementException;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.security.SecureRandom;
|
||||
|
||||
import javax.net.ssl.KeyManager;
|
||||
import javax.net.ssl.SSLContext;
|
||||
import javax.net.ssl.TrustManager;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
import com.fsck.k9.K9;
|
||||
import com.fsck.k9.mail.MessagingException;
|
||||
|
||||
/**
|
||||
* Helper class to create SSL sockets with support for client certificate
|
||||
* authentication
|
||||
*/
|
||||
public class SslHelper {
|
||||
|
||||
private static SSLContext createSslContext(String host, int port, String clientCertificateAlias)
|
||||
throws NoSuchAlgorithmException, KeyManagementException, MessagingException {
|
||||
if (K9.DEBUG)
|
||||
Log.d(K9.LOG_TAG, "createSslContext: Client certificate alias: "
|
||||
+ clientCertificateAlias);
|
||||
|
||||
KeyManager[] keyManagers;
|
||||
if (clientCertificateAlias == null || clientCertificateAlias.isEmpty()) {
|
||||
keyManagers = null;
|
||||
} else {
|
||||
keyManagers = new KeyManager[] { new KeyChainKeyManager(K9.app, clientCertificateAlias) };
|
||||
}
|
||||
|
||||
SSLContext sslContext = SSLContext.getInstance("TLS");
|
||||
sslContext.init(keyManagers,
|
||||
new TrustManager[] {
|
||||
TrustManagerFactory.get(
|
||||
host, port)
|
||||
},
|
||||
new SecureRandom());
|
||||
|
||||
return sslContext;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create SSL socket
|
||||
*
|
||||
* @param host
|
||||
* @param port
|
||||
* @param clientCertificateAlias if not null, uses client certificate
|
||||
* retrieved by this alias for authentication
|
||||
*/
|
||||
public static Socket createSslSocket(String host, int port, String clientCertificateAlias)
|
||||
throws NoSuchAlgorithmException, KeyManagementException, IOException,
|
||||
MessagingException {
|
||||
SSLContext sslContext = createSslContext(host, port, clientCertificateAlias);
|
||||
return TrustedSocketFactory.createSocket(sslContext);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create socket for START_TLS. autoClose = true
|
||||
*
|
||||
* @param socket
|
||||
* @param host
|
||||
* @param port
|
||||
* @param secure
|
||||
* @param clientCertificateAlias if not null, uses client certificate
|
||||
* retrieved by this alias for authentication
|
||||
*/
|
||||
public static Socket createStartTlsSocket(Socket socket, String host, int port, boolean secure,
|
||||
String clientCertificateAlias) throws NoSuchAlgorithmException,
|
||||
KeyManagementException, IOException, MessagingException {
|
||||
SSLContext sslContext = createSslContext(host, port, clientCertificateAlias);
|
||||
boolean autoClose = true;
|
||||
return TrustedSocketFactory.createSocket(sslContext, socket, host, port, autoClose);
|
||||
}
|
||||
}
|
89
src/com/fsck/k9/net/ssl/SslSessionCacheHelper.java
Normal file
89
src/com/fsck/k9/net/ssl/SslSessionCacheHelper.java
Normal file
@ -0,0 +1,89 @@
|
||||
package com.fsck.k9.net.ssl;
|
||||
|
||||
import java.io.File;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
import javax.net.ssl.SSLContext;
|
||||
import javax.net.ssl.SSLSessionContext;
|
||||
|
||||
import com.fsck.k9.K9;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
import android.util.Log;
|
||||
|
||||
/**
|
||||
* A class to help with associating an {@code SSLContext} with a persistent
|
||||
* file-based cache of SSL sessions.
|
||||
* <p>
|
||||
* This uses reflection to achieve its task.
|
||||
* <p>
|
||||
* The alternative to this would be to use {@link SSLCertificateSocketFactory}
|
||||
* which also provides session caching. The problem with using that occurs when
|
||||
* using STARTTLS in combination with
|
||||
* {@code TrustedSocketFactory.hardenSocket(SSLSocket)}. The result is that
|
||||
* {@code hardenSocket()} fails to change anything because by the time it is
|
||||
* applied to the socket, the SSL handshake has already been completed. (This is
|
||||
* because of another feature of {@link SSLCertificateSocketFactory} whereby it
|
||||
* performs host name verification which necessitates initiating the SSL
|
||||
* handshake immediately on socket creation.)
|
||||
* <p>
|
||||
* If eventually the use of hardenSocket() should become unnecessary, then
|
||||
* switching to using {@link SSLCertificateSocketFactory} would be a better
|
||||
* solution.
|
||||
*/
|
||||
public class SslSessionCacheHelper {
|
||||
private static Object sSessionCache;
|
||||
private static Method sSetPersistentCacheMethod;
|
||||
private static boolean sIsDisabled = false;
|
||||
|
||||
static {
|
||||
final String packageName;
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
|
||||
packageName = "org.apache.harmony.xnet.provider.jsse";
|
||||
} else {
|
||||
packageName = "com.android.org.conscrypt";
|
||||
}
|
||||
final File cacheDirectory = K9.app.getDir("sslcache", Context.MODE_PRIVATE);
|
||||
try {
|
||||
Class<?> fileClientSessionCacheClass = Class.forName(packageName +
|
||||
".FileClientSessionCache");
|
||||
Method usingDirectoryMethod = fileClientSessionCacheClass
|
||||
.getMethod("usingDirectory", File.class);
|
||||
sSessionCache = usingDirectoryMethod.invoke(null, cacheDirectory);
|
||||
|
||||
Class<?> sslClientSessionCacheClass = Class.forName(packageName +
|
||||
".SSLClientSessionCache");
|
||||
Class<?> clientSessionContextClass = Class.forName(packageName +
|
||||
".ClientSessionContext");
|
||||
sSetPersistentCacheMethod = clientSessionContextClass.getMethod(
|
||||
"setPersistentCache", sslClientSessionCacheClass);
|
||||
} catch (Exception e) {
|
||||
// Something went wrong. Proceed without a session cache.
|
||||
Log.e(K9.LOG_TAG, "Failed to initialize SslSessionCacheHelper: " + e);
|
||||
sIsDisabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Associate an {@code SSLContext} with a persistent file-based cache of SSL
|
||||
* sessions which can be used when re-establishing a connection to the same
|
||||
* server.
|
||||
* <p>
|
||||
* This is beneficial because it can eliminate redundant cryptographic
|
||||
* computations and network traffic, thus saving time and conserving power.
|
||||
*/
|
||||
public static void setPersistentCache(SSLContext sslContext) {
|
||||
if (sIsDisabled) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
SSLSessionContext sessionContext = sslContext.getClientSessionContext();
|
||||
sSetPersistentCacheMethod.invoke(sessionContext, sSessionCache);
|
||||
} catch (Exception e) {
|
||||
// Something went wrong. Proceed without a session cache.
|
||||
Log.e(K9.LOG_TAG, "Failed to initialize persistent SSL cache: " + e);
|
||||
sIsDisabled = true;
|
||||
}
|
||||
}
|
||||
}
|
@ -3,12 +3,15 @@ package com.fsck.k9.net.ssl;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
import com.fsck.k9.helper.DomainNameChecker;
|
||||
import com.fsck.k9.mail.CertificateChainException;
|
||||
import com.fsck.k9.security.LocalKeyStore;
|
||||
|
||||
import javax.net.ssl.SSLException;
|
||||
import javax.net.ssl.TrustManager;
|
||||
import javax.net.ssl.X509TrustManager;
|
||||
|
||||
import org.apache.http.conn.ssl.StrictHostnameVerifier;
|
||||
|
||||
import java.security.KeyStore;
|
||||
import java.security.KeyStoreException;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
@ -58,31 +61,25 @@ public final class TrustManagerFactory {
|
||||
public void checkServerTrusted(X509Certificate[] chain, String authType)
|
||||
throws CertificateException {
|
||||
String message = null;
|
||||
boolean foundInGlobalKeyStore = false;
|
||||
X509Certificate certificate = chain[0];
|
||||
|
||||
try {
|
||||
defaultTrustManager.checkServerTrusted(chain, authType);
|
||||
foundInGlobalKeyStore = true;
|
||||
new StrictHostnameVerifier().verify(mHost, certificate);
|
||||
return;
|
||||
} catch (CertificateException e) {
|
||||
// cert. chain can't be validated
|
||||
message = e.getMessage();
|
||||
} catch (SSLException e) {
|
||||
// host name doesn't match certificate
|
||||
message = e.getMessage();
|
||||
}
|
||||
|
||||
X509Certificate certificate = chain[0];
|
||||
|
||||
// Check the local key store if we couldn't verify the certificate using the global
|
||||
// key store or if the host name doesn't match the certificate name
|
||||
if (foundInGlobalKeyStore
|
||||
&& DomainNameChecker.match(certificate, mHost)
|
||||
|| keyStore.isValidCertificate(certificate, mHost, mPort)) {
|
||||
return;
|
||||
if (!keyStore.isValidCertificate(certificate, mHost, mPort)) {
|
||||
throw new CertificateChainException(message, chain);
|
||||
}
|
||||
|
||||
if (message == null) {
|
||||
message = (foundInGlobalKeyStore) ?
|
||||
"Certificate domain name does not match " + mHost :
|
||||
"Couldn't find certificate in local key store";
|
||||
}
|
||||
|
||||
throw new CertificateChainException(message, chain);
|
||||
}
|
||||
|
||||
public X509Certificate[] getAcceptedIssuers() {
|
||||
|
@ -3,14 +3,21 @@ package com.fsck.k9.net.ssl;
|
||||
import android.util.Log;
|
||||
|
||||
import com.fsck.k9.K9;
|
||||
import com.fsck.k9.mail.MessagingException;
|
||||
|
||||
import javax.net.ssl.KeyManager;
|
||||
import javax.net.ssl.SSLContext;
|
||||
import javax.net.ssl.SSLSocket;
|
||||
import javax.net.ssl.SSLSocketFactory;
|
||||
import javax.net.ssl.TrustManager;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.Socket;
|
||||
import java.security.SecureRandom;
|
||||
import java.util.*;
|
||||
import java.security.KeyManagementException;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
@ -67,15 +74,21 @@ public class TrustedSocketFactory {
|
||||
|
||||
static {
|
||||
String[] enabledCiphers = null;
|
||||
String[] enabledProtocols = null;
|
||||
String[] supportedProtocols = null;
|
||||
|
||||
try {
|
||||
SSLContext sslContext = SSLContext.getInstance("TLS");
|
||||
sslContext.init(null, null, new SecureRandom());
|
||||
sslContext.init(null, null, null);
|
||||
SSLSocketFactory sf = sslContext.getSocketFactory();
|
||||
SSLSocket sock = (SSLSocket) sf.createSocket();
|
||||
enabledCiphers = sock.getEnabledCipherSuites();
|
||||
enabledProtocols = sock.getEnabledProtocols();
|
||||
|
||||
/*
|
||||
* Retrieve all supported protocols, not just the (default) enabled
|
||||
* ones. TLSv1.1 & TLSv1.2 are supported on API levels 16+, but are
|
||||
* only enabled by default on API levels 20+.
|
||||
*/
|
||||
supportedProtocols = sock.getSupportedProtocols();
|
||||
} catch (Exception e) {
|
||||
Log.e(K9.LOG_TAG, "Error getting information about available SSL/TLS ciphers and " +
|
||||
"protocols", e);
|
||||
@ -84,8 +97,8 @@ public class TrustedSocketFactory {
|
||||
ENABLED_CIPHERS = (enabledCiphers == null) ? null :
|
||||
reorder(enabledCiphers, ORDERED_KNOWN_CIPHERS, BLACKLISTED_CIPHERS);
|
||||
|
||||
ENABLED_PROTOCOLS = (enabledProtocols == null) ? null :
|
||||
reorder(enabledProtocols, ORDERED_KNOWN_PROTOCOLS, null);
|
||||
ENABLED_PROTOCOLS = (supportedProtocols == null) ? null :
|
||||
reorder(supportedProtocols, ORDERED_KNOWN_PROTOCOLS, null);
|
||||
}
|
||||
|
||||
protected static String[] reorder(String[] enabled, String[] known, String[] blacklisted) {
|
||||
@ -114,19 +127,33 @@ public class TrustedSocketFactory {
|
||||
return result.toArray(new String[result.size()]);
|
||||
}
|
||||
|
||||
public static Socket createSocket(SSLContext sslContext) throws IOException {
|
||||
SSLSocket socket = (SSLSocket) sslContext.getSocketFactory().createSocket();
|
||||
hardenSocket(socket);
|
||||
public static Socket createSocket(String host, int port, String clientCertificateAlias)
|
||||
throws IOException, MessagingException, KeyManagementException, NoSuchAlgorithmException {
|
||||
|
||||
return socket;
|
||||
return createSocket(null, host, port, clientCertificateAlias);
|
||||
}
|
||||
|
||||
public static Socket createSocket(SSLContext sslContext, Socket s, String host, int port,
|
||||
boolean autoClose) throws IOException {
|
||||
SSLSocket socket = (SSLSocket) sslContext.getSocketFactory().createSocket(s, host, port, autoClose);
|
||||
hardenSocket(socket);
|
||||
public static Socket createSocket(Socket socket, String host, int port, String clientCertificateAlias)
|
||||
throws NoSuchAlgorithmException, KeyManagementException, MessagingException, IOException {
|
||||
|
||||
return socket;
|
||||
TrustManager[] trustManagers = new TrustManager[] { TrustManagerFactory.get(host, port) };
|
||||
KeyManager[] keyManagers = null;
|
||||
if (clientCertificateAlias != null && !clientCertificateAlias.isEmpty()) {
|
||||
keyManagers = new KeyManager[] { new KeyChainKeyManager(K9.app, clientCertificateAlias) };
|
||||
}
|
||||
|
||||
SSLContext context = SSLContext.getInstance("TLS");
|
||||
context.init(keyManagers, trustManagers, null);
|
||||
SslSessionCacheHelper.setPersistentCache(context);
|
||||
SSLSocketFactory socketFactory = context.getSocketFactory();
|
||||
Socket trustedSocket;
|
||||
if (socket == null) {
|
||||
trustedSocket = socketFactory.createSocket();
|
||||
} else {
|
||||
trustedSocket = socketFactory.createSocket(socket, host, port, true);
|
||||
}
|
||||
hardenSocket((SSLSocket) trustedSocket);
|
||||
return trustedSocket;
|
||||
}
|
||||
|
||||
private static void hardenSocket(SSLSocket sock) {
|
||||
|
@ -188,9 +188,6 @@ public class GlobalSettings {
|
||||
new V(16, new ThemeSetting(K9.Theme.LIGHT)),
|
||||
new V(24, new SubThemeSetting(K9.Theme.USE_GLOBAL))
|
||||
));
|
||||
s.put("useGalleryBugWorkaround", Settings.versions(
|
||||
new V(1, new GalleryBugWorkaroundSetting())
|
||||
));
|
||||
s.put("useVolumeKeysForListNavigation", Settings.versions(
|
||||
new V(1, new BooleanSetting(false))
|
||||
));
|
||||
@ -372,27 +369,6 @@ public class GlobalSettings {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The gallery bug work-around setting.
|
||||
*
|
||||
* <p>
|
||||
* The default value varies depending on whether you have a version of Gallery 3D installed
|
||||
* that contains the bug we work around.
|
||||
* </p>
|
||||
*
|
||||
* @see K9#isGalleryBuggy()
|
||||
*/
|
||||
public static class GalleryBugWorkaroundSetting extends BooleanSetting {
|
||||
public GalleryBugWorkaroundSetting() {
|
||||
super(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getDefaultValue() {
|
||||
return K9.isGalleryBuggy();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The language setting.
|
||||
*
|
||||
|
@ -35,7 +35,7 @@ public class Settings {
|
||||
*
|
||||
* @see SettingsExporter
|
||||
*/
|
||||
public static final int VERSION = 34;
|
||||
public static final int VERSION = 35;
|
||||
|
||||
public static Map<String, Object> validate(int version, Map<String,
|
||||
TreeMap<Integer, SettingsDescription>> settings,
|
||||
|
@ -1,92 +1,76 @@
|
||||
package com.fsck.k9.view;
|
||||
|
||||
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.Path;
|
||||
import android.graphics.RectF;
|
||||
import android.graphics.drawable.ShapeDrawable;
|
||||
import android.graphics.drawable.shapes.PathShape;
|
||||
|
||||
|
||||
public class ColorChip {
|
||||
public static final Path CIRCULAR = new Path();
|
||||
public static final Path LEFT_POINTING = new Path();
|
||||
public static final Path RIGHT_POINTING = new Path();
|
||||
public static final Path RIGHT_NOTCH = new Path();
|
||||
public static final Path STAR = new Path();
|
||||
public static final Path CHECKMARK = new Path();
|
||||
|
||||
|
||||
static {
|
||||
|
||||
CIRCULAR.addCircle(160,160,70f,Path.Direction.CW);
|
||||
CIRCULAR.addCircle(160, 160, 70f, Path.Direction.CW);
|
||||
CIRCULAR.close();
|
||||
|
||||
RIGHT_POINTING.addArc(new RectF(80f,80f,240f,240f) , 90, 180);
|
||||
RIGHT_POINTING.arcTo(new RectF(160f,0f,320f,160f), 180, -90);
|
||||
RIGHT_POINTING.arcTo(new RectF(160f,160f,320f,320f), 270,-90);
|
||||
RIGHT_POINTING.addArc(new RectF(80f, 80f, 240f, 240f), 90, 180);
|
||||
RIGHT_POINTING.arcTo(new RectF(160f, 0f, 320f, 160f), 180, -90);
|
||||
RIGHT_POINTING.arcTo(new RectF(160f, 160f, 320f, 320f), 270, -90);
|
||||
RIGHT_POINTING.close();
|
||||
|
||||
RIGHT_NOTCH.addArc(new RectF(80f,80f,240f,240f) , 90, 180);
|
||||
RIGHT_NOTCH.arcTo(new RectF(160f,0f,320f,160f), 180, -90);
|
||||
RIGHT_NOTCH.arcTo(new RectF(160f,160f,320f,320f), 270,-90);
|
||||
RIGHT_NOTCH.addArc(new RectF(80f, 80f, 240f, 240f), 90, 180);
|
||||
RIGHT_NOTCH.arcTo(new RectF(160f, 0f, 320f, 160f), 180, -90);
|
||||
RIGHT_NOTCH.arcTo(new RectF(160f, 160f, 320f, 320f), 270, -90);
|
||||
RIGHT_NOTCH.close();
|
||||
|
||||
LEFT_POINTING.addArc(new RectF(80f,80f,240f,240f) , 90, -180);
|
||||
LEFT_POINTING.arcTo(new RectF(00f,00f,160f,160f), 0, 90);
|
||||
LEFT_POINTING.arcTo(new RectF(00f,160f,160f,320f), 270,90);
|
||||
LEFT_POINTING.addArc(new RectF(80f, 80f, 240f, 240f), 90, -180);
|
||||
LEFT_POINTING.arcTo(new RectF(00f, 00f, 160f, 160f), 0, 90);
|
||||
LEFT_POINTING.arcTo(new RectF(00f, 160f, 160f, 320f), 270, 90);
|
||||
LEFT_POINTING.close();
|
||||
|
||||
STAR.moveTo(140f,60f);
|
||||
STAR.lineTo(170f,110f);
|
||||
STAR.lineTo(220f,120f);
|
||||
STAR.lineTo(180f,160f);
|
||||
STAR.lineTo(200f,220f);
|
||||
STAR.lineTo(140f,190f);
|
||||
STAR.lineTo(80f,220f);
|
||||
STAR.lineTo(100f,160f);
|
||||
STAR.lineTo(60f,120f);
|
||||
STAR.lineTo(110f,110f);
|
||||
STAR.lineTo(140f,60f);
|
||||
STAR.moveTo(140f, 60f);
|
||||
STAR.lineTo(170f, 110f);
|
||||
STAR.lineTo(220f, 120f);
|
||||
STAR.lineTo(180f, 160f);
|
||||
STAR.lineTo(200f, 220f);
|
||||
STAR.lineTo(140f, 190f);
|
||||
STAR.lineTo(80f, 220f);
|
||||
STAR.lineTo(100f, 160f);
|
||||
STAR.lineTo(60f, 120f);
|
||||
STAR.lineTo(110f, 110f);
|
||||
STAR.lineTo(140f, 60f);
|
||||
STAR.close();
|
||||
|
||||
|
||||
CHECKMARK.moveTo(10f,160f);
|
||||
CHECKMARK.lineTo(120f,280f);
|
||||
CHECKMARK.lineTo(300f,40f);
|
||||
|
||||
}
|
||||
|
||||
|
||||
private ShapeDrawable mDrawable;
|
||||
|
||||
|
||||
public ColorChip(int color, boolean messageRead, Path shape) {
|
||||
|
||||
if (shape.equals(STAR)) {
|
||||
mDrawable = new ShapeDrawable(new PathShape(shape, 280f, 280f));
|
||||
|
||||
} else {
|
||||
mDrawable = new ShapeDrawable(new PathShape(shape, 320f, 320f));
|
||||
}
|
||||
if (shape.equals(CHECKMARK)) {
|
||||
mDrawable.getPaint().setStrokeWidth(50);
|
||||
} else {
|
||||
mDrawable.getPaint().setStrokeWidth(20);
|
||||
}
|
||||
|
||||
if (messageRead) {
|
||||
// Read messages get an outlined circle
|
||||
mDrawable.getPaint().setStyle(Paint.Style.STROKE);
|
||||
} else {
|
||||
// Unread messages get filled, while retaining the outline, so that they stay the same size
|
||||
mDrawable.getPaint().setStyle(Paint.Style.FILL_AND_STROKE);
|
||||
|
||||
}
|
||||
|
||||
mDrawable.getPaint().setStrokeWidth(20);
|
||||
mDrawable.getPaint().setColor(color);
|
||||
|
||||
|
||||
}
|
||||
|
||||
public ShapeDrawable drawable() {
|
||||
return mDrawable;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user