From: Sam Date: Wed, 3 Dec 2014 09:04:39 +0000 (+0100) Subject: Merged with owncloud develop X-Git-Tag: oc-android-1.7.0_signed~69^2~1 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/382191d1f94c02475bdd607852e552b5621a7d9c?hp=1a6319eba40ee31ef0f3cf3b4e0f797a80c4ac0b Merged with owncloud develop --- diff --git a/.gitignore b/.gitignore index a218d0b9..8346dbfc 100644 --- a/.gitignore +++ b/.gitignore @@ -39,4 +39,4 @@ tests/proguard-project.txt build # Actionbarsherlock is now ignored since scripts takes care of init the sub-modules. -actionbarsherlock +actionbarsherlock \ No newline at end of file diff --git a/.gitmodules b/.gitmodules index 17560960..fa52fcd6 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,5 +1,5 @@ [submodule "owncloud-android-library"] path = owncloud-android-library - url = git://github.com/owncloudChalmers/android-library.git - branch = buildsystem/gradle_develop + url = git://github.com/owncloud/android-library.git + branch = develop diff --git a/SETUP.md b/SETUP.md index 3392db27..a9e2a93b 100644 --- a/SETUP.md +++ b/SETUP.md @@ -1,5 +1,7 @@ -If you want to start help developing ownCloud please follow the [contribution guidelines][0] and observe these instructions: +If you want to start help developing ownCloud please follow the [contribution guidelines][0] and observe these instructions. + +If you have any problems, start again with 1) and work your way down. If something still does not work as described here, please open a new issue describing exactly what you did, what happened, and what should have happened. ### 1. Fork and download android/develop repository: diff --git a/owncloud-android-library b/owncloud-android-library index d7097983..7ff0bc0d 160000 --- a/owncloud-android-library +++ b/owncloud-android-library @@ -1 +1 @@ -Subproject commit d7097983594347167b5bde3fa5b2b4ad1d843392 +Subproject commit 7ff0bc0d837edea90b075140f8caba308ce7d378 diff --git a/res/layout/list_footer.xml b/res/layout/list_footer.xml new file mode 100644 index 00000000..a49874d6 --- /dev/null +++ b/res/layout/list_footer.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/res/layout/list_fragment.xml b/res/layout/list_fragment.xml index 4236d070..160edc1d 100644 --- a/res/layout/list_fragment.xml +++ b/res/layout/list_fragment.xml @@ -25,16 +25,18 @@ - + android:layout_height="match_parent" + android:layout_weight="1" + android:footerDividersEnabled="false" > + - + - - - + \ No newline at end of file diff --git a/res/menu/file_select_all.xml b/res/menu/file_select_all.xml deleted file mode 100644 index a8097aae..00000000 --- a/res/menu/file_select_all.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - diff --git a/res/values-af-rZA/strings.xml b/res/values-af-rZA/strings.xml index 17d68853..55ab320c 100644 --- a/res/values-af-rZA/strings.xml +++ b/res/values-af-rZA/strings.xml @@ -6,8 +6,10 @@ Hulp Gebruikersnaam Wagwoord + sekondes gelede OK Kanseleer + Fout Kies diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index 266507d5..276af9b7 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -50,6 +50,7 @@ لم يتم استلام أي محتوى. لا شيء للرفع. %1$s غير مسموح له بالوصول للمحتوى المشارك يتم الرفع + منذ ثواني لا يوجد شيء هنا. إرفع بعض الملفات! جاري التحميل ... اضغظ على الملف ليتم عرض خيارات أكثر diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml index 0e52b53f..c0dd55b6 100644 --- a/res/values-be/strings.xml +++ b/res/values-be/strings.xml @@ -3,6 +3,7 @@ Налады + Секунд таму Так Не Добра diff --git a/res/values-bg-rBG/strings.xml b/res/values-bg-rBG/strings.xml index bcd49aa3..ff47c31f 100644 --- a/res/values-bg-rBG/strings.xml +++ b/res/values-bg-rBG/strings.xml @@ -59,6 +59,7 @@ Не беше получено съдържание. Няма какво да се качи. %1$s няма разрешен достъп до споделеното съдържание. Качване + преди секунди Тук няма нищо. Качете нещо! Зареждане... Няма файлове в тази папка. diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn-rBD/strings.xml index a5cf5425..f0f23000 100644 --- a/res/values-bn-rBD/strings.xml +++ b/res/values-bn-rBD/strings.xml @@ -50,6 +50,7 @@ কোন কনটেনট আসেনি৷ আপলোডের কনটেনট নেই এই যৌথ কনটেন্ট এ %1$s এর প্রবেশ অনুমোদিত নয় আপলোড করা হচ্ছে + সেকেন্ড পূর্বে এখানে কিছুই নেই। কিছু আপলোড করুন ! লোড হচ্ছে.... এই ফোলডারে কোন ফাইল নেই diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml index c5d91d54..19085087 100644 --- a/res/values-ca/strings.xml +++ b/res/values-ca/strings.xml @@ -50,6 +50,7 @@ No s\'ha rebut cap contingut. Res per pujar %1$s no pot accedir al contingut compartit S\'està pujant + segons enrere Res per aquí. Pugeu alguna cosa! Carregant... No hi ha arxius a aquesta carpeta diff --git a/res/values-cs-rCZ/strings.xml b/res/values-cs-rCZ/strings.xml index 25b2d560..08f37b60 100644 --- a/res/values-cs-rCZ/strings.xml +++ b/res/values-cs-rCZ/strings.xml @@ -59,6 +59,7 @@ Neobdržen žádný obsah. Nic k odeslání. %1$s nemá právo přistupovat ke sdílenému obsahu Odesílání + před pár sekundami Žádný obsah. Nahrajte něco! Načítám... V tomto adresáři nejsou žádné soubory. @@ -179,7 +180,7 @@ Připojuji se k přihlašovacímu serveru... Server nepodporuje tuto přihlašovací metodu %1$s nepodporuje více účtů - Váš server nevrací správné přihlašovací ID, kontaktujte vašeho administrátora + Váš server nevrací správné přihlašovací ID, kontaktujte prosím svého správce systému Není možné provést ověření Udržovat soubor aktuální Přejmenovat @@ -249,7 +250,7 @@ %1$s nelze zkopírovat do místního adresáře %2$s Cesta pro nahrání Je nám líto, ale sdílení není na vašem serveru povoleno. Kontaktujte svého -administrátora. +správce systému. Nelze sdílet. Zkontrolujte prosím že soubor existuje Při pokusu o sdílení tohoto souboru či složky nastala chyba Nelze ukončit sdílení. Zkontrolujte prosím že soubor existuje diff --git a/res/values-cy-rGB/strings.xml b/res/values-cy-rGB/strings.xml index 80cc3c93..97ef0670 100644 --- a/res/values-cy-rGB/strings.xml +++ b/res/values-cy-rGB/strings.xml @@ -27,6 +27,7 @@ Heb dderbyn cynnwys. Dim cynnwys i lwytho i fyny Does dim mynediad gan %1$s i gynnwys a rennir Yn llwytho i fyny + eiliad yn ôl Does dim byd fan hyn. Llwythwch rhywbeth i fyny! Tapiwch ffeil i ddangos gwybodaeth ychwanegol Maint: diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index 6f12a6ed..df31bdc2 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -59,6 +59,7 @@ Intet indhold blev modtaget. Intet at uploade. %1$s er ikke tilladt adgang til delt indhold Uploader + sekunder siden Her er tomt. Upload noget! Indlæser... Der er ingen filer i denne mappe. diff --git a/res/values-de-rDE/strings.xml b/res/values-de-rDE/strings.xml index e4fa850b..26691309 100644 --- a/res/values-de-rDE/strings.xml +++ b/res/values-de-rDE/strings.xml @@ -25,23 +25,23 @@ Konten verwalten App-PIN Schützen Sie Ihren Client - Sofortiges Bilderhochladen + Sofortiger Bilderupload Fotos von der Kamera sofort hochladen - Sofortiges Videohochladen + Sofortiger Videoupload Videos von der Kamera sofort hochladen Protokollierung aktivieren - Dieses wird zur Protokollierung von Problemen benutzt - Protokollierungsverlauf - Dieses zeigt die gespeicherten Protokollierungen + Dies wird zur Protokollierung von Problemen benutzt + Protokollverlauf + Dies zeigt die gespeicherten Protokolle Verlauf löschen Hilfe - Dieses einem Freund empfehlen + Dies einem Freund empfehlen Rückmeldungen Impressum Geteilten Speicherort merken Geteilten Upload-Speicherort merken %1$s auf Ihrem Smartphone ausprobieren! - Ich möchte Sie zum Benutzen von %1$s auf Ihrem Smartphone einladen!\nHier herunterladen: %2$s + Ich möchte Sie einladen, %1$s auf Ihrem Smartphone zu verwenden!\nHier herunterladen: %2$s Server überprüfen Server-Adresse https://… Benutzername @@ -50,7 +50,7 @@ Dateien Verbinden Hochladen - Zielordner auswählen: + Uploadordner auswählen: Kein Konto gefunden Es sind keine %1$s-Konten auf Ihrem Gerät eingerichtet. Bitte richten Sie zuerst ein Konto ein. Einrichten @@ -59,6 +59,7 @@ Es wurden keine Inhalte empfangen. Es gibt nichts zum Hochladen. %1$s darf den freigegebenen Inhalt nicht nutzen. Lade hoch + Gerade eben Alles leer. Laden Sie etwas hoch! Ladevorgang … Es befinden sich keine Dateien in diesem Ordner. @@ -94,7 +95,7 @@ %1$s wurde(n) erfolgreich hochgeladen Hochladen fehlgeschlagen Hochladen von %1$s konnte nicht abgeschlossen werden - Hochladen fehlgeschlagen, Sie müssen sich nochmals anmelden + Hochladen fehlgeschlagen, Sie müssen sich neu anmelden Herunterladen... %1$d%% Herunterladen %2$s Herunterladen erfolgreich @@ -102,7 +103,7 @@ Herunterladen fehlgeschlagen Herunterladen von %1$s konnte nicht abgeschlossen werden Noch nicht heruntergeladen - Herunterladen fehlgeschlagen, Sie müssen sich nochmals anmelden + Herunterladen fehlgeschlagen, Sie müssen sich neu anmelden Konto auswählen Synchronisation fehlgeschlagen Synchronisation fehlgeschlagen, Sie müssen sich neu anmelden @@ -121,7 +122,7 @@ Einige Dateien konnten nicht verschoben werden Lokal: %1$s Remote: %1$s - Es steht nicht genügend Speicherplatz zur Verfügung um die ausgewählten Dateien in den %1$s Ordner zu kopieren. Möchten Sie diese stattdessen verschieben? + Es steht nicht genügend Speicherplatz zur Verfügung um die ausgewählten Dateien in den Ordner %1$s zu kopieren. Möchten Sie diese stattdessen verschieben? Bitte geben Sie Ihre App-PIN ein Bitte geben Sie Ihre App-PIN ein PIN-Abfrage erfolgt nach Starten der App. @@ -176,9 +177,9 @@ Ihre Legitimierung ist abgelaufen. Bitte Legitimierung nochmals durchführen Bitte geben Sie Ihr aktuelles Passwort ein Ihre Sitzung ist abgelaufen. Bitte Anmeldung nochmals durchführen - Zum Legitimierungsserver wird verbunden … + Zum Legitimierungsserver verbinden… Der Server unterstützt diese Legitimierungsmethode nicht - %1$s unterstützt nicht mehrere Benutzerkonten + %1$s unterstützt mehrere Benutzerkonten nicht Ihr Server gibt keine richtige Benutzerkennung zurück, bitte kontaktieren Sie einen Administrator ⇥ Die Legitimierung gegenüber dem Server konnte nicht durchgeführt werden @@ -248,20 +249,20 @@ Bildvorschau Dieses Bild kann nicht angezeigt werden %1$s konnte nicht in den lokalen %2$s Ordner kopiert werden - Pfad hochladen + Upload Pfad Entschuldigung, Freigaben sind auf Ihrem Server nicht aktiviert. Bitte kontaktieren Sie Ihren ⇥⇥Administrator. - Teilen nicht möglich. Prüfen Sie, dass die Datei existiert + Teilen nicht möglich. Prüfen Sie, ob die Datei existiert Es ist ein Fehler beim Freigeben der Datei oder des Ordners aufgetreten. - Entfernen der Freigabe nicht möglich. Prüfen Sie, dass die Datei existiert + Entfernen der Freigabe nicht möglich. Prüfen Sie, ob die Datei existiert Es ist ein Fehler beim Entfernen der Freigabe für diese Datei oder den Ordner aufgetreten. Senden Link kopieren In die Zwischenablage kopiert Kritischer Fehler: Operationen können nicht ausgeführt werden - Es ist ein Fehler beim Verbinden mit dem Server aufgetreten. - Es ist ein Fehler beim Warten auf den Server aufgetreten, die Operation kann nicht ausgeführt werden - Es ist ein Fehler beim Warten auf den Server aufgetreten, die Operation kann nicht ausgeführt werden + Es ist ein Fehler bei der Verbindung mit dem Server aufgetreten. + Es ist ein Fehler während des Wartens auf den Server aufgetreten, die Operation kann nicht ausgeführt werden + Es ist ein Fehler während des Wartens auf den Server aufgetreten, die Operation kann nicht ausgeführt werden Die Operation kann nicht abgeschlossen werden, der Server ist nicht erreichbar Sie haben keine Berechtigung %s diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index c1212e4a..45f078d7 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -59,6 +59,7 @@ Es wurden keine Inhalte empfangen. Es gibt nichts zum Hochladen. %1$s darf den freigegebenen Inhalt nicht nutzen. Lade hoch + Gerade eben Alles leer. Lade etwas hoch! Ladevorgang … Es befinden sich keine Dateien in diesem Ordner. diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index 0a1772b4..6a304ca1 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -55,6 +55,7 @@ Δεν ελήφθη περιεχόμενο. Δεν υπάρχει τίποτα να μεταφορτώσετε. Ο %1$s δεν επιτρέπεται να έχει πρόσβαση στο κοινόχρηστο περιεχόμενο Μεταφόρτωση + δευτερόλεπτα πριν Δεν υπάρχει τίποτα εδώ. Ανεβάστε κάτι! Φόρτωση ... Δεν υπάρχουν αρχεία σε αυτό τον φάκελο. diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml index 641fa869..94bf042d 100644 --- a/res/values-en-rGB/strings.xml +++ b/res/values-en-rGB/strings.xml @@ -59,6 +59,7 @@ No content was received. Nothing to upload. %1$s is not allowed to access the shared content Uploading + seconds ago Nothing in here. Upload something! Loading... There are no files in this folder. diff --git a/res/values-eo/strings.xml b/res/values-eo/strings.xml index dd653401..6b15f108 100644 --- a/res/values-eo/strings.xml +++ b/res/values-eo/strings.xml @@ -36,6 +36,7 @@ Neniu enhavo riceviĝis. Nenio alŝutota. $1%s ne estas permesata aliri la kunhavigitan enhavon Alŝutante + sekundoj antaŭe Nenio estas ĉi tie. Alŝutu ion! Grando: Tipo: diff --git a/res/values-es-rAR/strings.xml b/res/values-es-rAR/strings.xml index 74e2f64a..eeb51c32 100644 --- a/res/values-es-rAR/strings.xml +++ b/res/values-es-rAR/strings.xml @@ -50,6 +50,7 @@ No se recibió ningún contenido. No hay nada para subir. %1$s no está autorizado para acceder al contenido compartido Subiendo + segundos atrás No hay nada. ¡Subí contenido! Cargando... No existen archivos en esta carpeta. diff --git a/res/values-es-rCL/strings.xml b/res/values-es-rCL/strings.xml index f3ad1805..8f2457d8 100644 --- a/res/values-es-rCL/strings.xml +++ b/res/values-es-rCL/strings.xml @@ -33,6 +33,7 @@ No se ha recibido ningún contenido. No hay nada para subir. %1$s no esta autorizado para acceder al contenido compartido Subiendo + segundos antes Seleccione un archivo para desplegar información adicional. Tamaño: Tipo: diff --git a/res/values-es-rMX/strings.xml b/res/values-es-rMX/strings.xml index 78ee8b40..36060254 100644 --- a/res/values-es-rMX/strings.xml +++ b/res/values-es-rMX/strings.xml @@ -45,6 +45,7 @@ Ningún contenido ha sido recibido. No hay nada que subir. %1$s no está autorizado para acceder al contenido compartido Enviando + hace segundos No hay nada aquí. ¡Suba algo! Pulsa sobre un archivo para mostrar información adicional. Tamaño: diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index 1e406464..93e83c28 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -59,6 +59,7 @@ Ningún contenido ha sido recibido. No hay nada que subir. %1$s no está autorizado para acceder al contenido compartido Subiendo... + hace segundos No hay nada aquí. ¡Suba algo! Cargando... No hay archivos en esta carpeta. diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml index 07fde846..75f28a7a 100644 --- a/res/values-et-rEE/strings.xml +++ b/res/values-et-rEE/strings.xml @@ -38,6 +38,8 @@ Soovita sõbrale Tagasiside Impressum + Jäta meelde jagamise asukoht + Jäta meelde viimase jagamise üleslaadimise asukoht Proovi oma nutitelefonil rakendust %1$s! Kutsun sind kasutama oma nutitelefonis rakendust %1$s!\nLaadi see alla siit: %2$s Kontrolli serverit @@ -57,6 +59,7 @@ Sisu ei saadud. Pole midagi üles laadida. %1$sile pole lubatud ligipääs jagatud sisule Üleslaadimine + sekundit tagasi Siin pole midagi. Lae midagi üles! Laen ... Kaustas pole faile. diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml index 78d39f1c..7480e323 100644 --- a/res/values-eu/strings.xml +++ b/res/values-eu/strings.xml @@ -55,6 +55,7 @@ Ez da edukirik jaso. Ez dago ezer igotzeko. %1$s-(e)k ez du baimenik elkarbanatutako edukian sartzeko Igotzen + segundu Ez dago ezer. Igo zerbait! Kargatzen... Ez dago fitxategirik karpeta honetan. diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index 80348366..d11e513b 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -46,6 +46,7 @@ هیچ مطلبی دریافت نشده است. هیچ‌‌چیزی بارگزاری نشده. %1$s اجازه ی دسترسی به محتوای مشترک را نمی دهد در حال بارگزاری + ثانیه‌ها پیش اینجا هیچ چیز نیست. درحال بارگذاری... هیچ فایلی در این پوشه نیست. diff --git a/res/values-fi-rFI/strings.xml b/res/values-fi-rFI/strings.xml index d6418540..3d77e6b9 100644 --- a/res/values-fi-rFI/strings.xml +++ b/res/values-fi-rFI/strings.xml @@ -58,6 +58,7 @@ Sisältöä ei saatu. Ei lähetettävää palvelimelle. %1$silla ei ole oikeuksia jaettuun sisältöön Lähetetään + sekuntia sitten Täällä ei ole mitään. Lähetä tänne jotakin! Ladataan... Tässä kansiossa ei ole tiedostoja diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index d8e35122..66c7c47f 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -40,14 +40,14 @@ Empreinte Mémoriser l\'emplacement de partage Mémoriser le dernier emplacement d\'upload - Essayez %1$s sur votre smartphone ! + Essayez %1$s sur votre smartphone&nbsp;! J\'aimerais vous inviter à utiliser %1$s sur votre smartphone ! Téléchargez-le ici : %2$s Vérifier le serveur - Adresse du serveur https://... + Adresse du serveur https://… Nom d\'utilisateur Mot de passe - Nouveau dans %1$s ? + Nouveau dans %1$s&nbsp;? Fichiers Connecter Téléverser @@ -60,6 +60,7 @@ Téléchargez-le ici : %2$s Aucun contenu reçu. Rien à envoyer. %1$s n\'est pas autorisé à accéder au contenu partagé Téléversement + il y a quelques secondes Il n\'y a rien ici ! Envoyez donc quelque chose :) Chargement… Aucun fichier n\'est présent dans ce dossier. @@ -81,8 +82,8 @@ Téléchargez-le ici : %2$s Annuler Sauvegarder & Quitter Erreur - Chargement ... - Erreur Inconnue + Chargement… + Erreur inconnue À propos de Changer de mot de passe Effacer ce compte @@ -112,7 +113,7 @@ Téléchargez-le ici : %2$s Des conflits ont été trouvés %1$d fichiers à garder synchronisés n\'ont put être synchronisé La synchronisation des fichiers a échoué - Le contenu de %1$d fichiers n\'a put être synchronisé (%2$d conflits) + Le contenu de %1$d fichiers n\'a pu être synchronisé (%2$d conflits) Certains fichiers locaux ont été oubliés %1$d fichiers du dossier %2$s n\'ont pas pu être copiés dans Depuis la version 1.3.16, les fichiers envoyé depuis ce périphérique sont copiés dans le dossier local %1$s pour éviter une perte de données lorsqu\'un même fichier est synchronisé avec plusieurs comptes. @@ -124,7 +125,7 @@ Ci-dessous la liste des fichiers locaux, et les fichiers distants dans %5$s auxq Tout déplacer Tous les fichiers ont été déplacés Certains fichiers n\'ont pu être déplacés - Local: %1$s + Local&nbsp;: %1$s Distant : %1$s Il n\'y a pas assez de place disponible pour copier les fichiers sélectionnés dans le dossier %1$s. Voulez-vous quand même les déplacer ? Veuillez saisir votre code de sécurité @@ -143,20 +144,20 @@ Ci-dessous la liste des fichiers locaux, et les fichiers distants dans %5$s auxq Fichier média introuvable Aucun compte n\'a été trouvé Le fichier n\'est pas dans un compte valide - Le codec de ce média n\'est pas supporté + Le codec de ce média n\'est pas pris en charge Le fichier média ne peut pas être lu Le fichier média n\'est pas correctement encodé Délai dépassé pour la lecture du morceau. Le fichier média ne peut pas être diffusé - Fichier média ne peut être joué avec le stock de media player - taux %1$s erreurs de sécurité essayant de jouer - Taux %1$s d\'erreurs de saisie essayant de jouer - Taux %1$s d\'erreurs inattendues essayant de jouer - Bouton de rem-bobinage - Bouton de Lecture ou de Pause + Le fichier média ne peut être joué avec le lecteur standard + Erreur de sécurité à la lecture de %1$s + Erreur de lecture de fichier à la lecture de %1$s + Erreur inattendue à la lecture de %1$s + Bouton de rembobinage + Bouton de lecture ou de pause Bouton d\'avance rapide - Demande d\'autorisation... - Tentative de connexion … + Demande d\'autorisation… + Tentative de connexion… Pas de connexion réseau Connexion sécurisée non disponible Connexion établie @@ -170,28 +171,28 @@ Ci-dessous la liste des fichiers locaux, et les fichiers distants dans %5$s auxq Le serveur met trop longtemps à répondre Adresse invalide Échec de l\'initialisation SSL - Impossible de vérifier l\'identité du serveur SSL. + Impossible de vérifier l\'identité du serveur SSL La version du serveur n\'est pas reconnue Impossible d\'établir la connexion Connexion sécurisée établie Nom d\'utilisateur ou mot de passe incorrect Échec d\'autorisation Accès refusé par le serveur d\'autorisation - État inattendu ; veuillez entrer à nouveau l\'URL du serveur + État inattendu ; veuillez saisir à nouveau l\'URL du serveur Votre autorisation a expiré. Merci de vous authentifier à nouveau Veuillez saisir le mot de passe courant Votre session a expiré. Merci de vous reconnecter - Connexion au serveur d\'authentification... - Le serveur ne supporte pas cette méthode d\'authentification - %1$s ne supporte pas les comptes multiples + Connexion au serveur d\'authentification… + Le serveur ne prend pas en charge pas cette méthode d\'authentification + %1$s ne prend pas en charge les comptes multiples Votre serveur a retourné un identifiant d\'utilisateur incorrect. Veuillez prendre contact avec votre administrateur Impossible de s\'authentifier sur ce serveur Maintenir le fichier à jour Renommer Supprimer - Voulez-vous vraiment supprimer %1$s ? - Voulez-vous vraiment supprimer %1$s et son contenu ? + Voulez-vous vraiment supprimer %1$s&nbsp;? + Voulez-vous vraiment supprimer %1$s et son contenu&nbsp;? Local seulement Le contenu local uniquement Effacer du serveur @@ -204,36 +205,36 @@ Ci-dessous la liste des fichiers locaux, et les fichiers distants dans %5$s auxq Le fichier distant n\'a pu être vérifié Le contenu des fichiers est déjà synchronisé Le dossier n\'a pas pu être créé - Caractères interdits : / \\ < > : \" | ? * + Caractères interdits&nbsp;: / \\ &lt; &gt; : " | ? * Le nom du fichier ne peut pas être vide Veuillez patienter - Problème inattendu. Veuillez essayer une autre app pour la sélection du fichier + Problème inattendu. Veuillez essayer une autre application pour la sélection du fichier Aucun fichier sélectionné Envoyer un lien à… - Connexion avec aAuth2. - Connexion au serveur aAuth2... + Connexion avec oAuth2 + Connexion au serveur oAuth2… L\'identité du site ne peut être vérifiée - Le certificat du serveur n\'est pas sûr - Le certificat du serveur a expiré - Le certificat du serveur n\'est pas encore valide - L\'URL ne correspond pas au nom d\'hôte du certificat - Voulez-vous tout de même faire confiance à ce certificat ? + Voulez-vous tout de même faire confiance à ce certificat&nbsp;? Impossible de sauvegarder le certificat Détails Masquer - Délivré à : - Délivré par : + Délivré à&nbsp;: + Délivré par&nbsp;: Nom d\'usage : - Organisation : - Unité organisationnelle : - Pays : - Région : - Localisation : - Validité : - De : - À : - Signature : - Algorithme : + Organisation&nbsp;: + Unité organisationnelle&nbsp;: + Pays&nbsp;: + Région&nbsp;: + Localisation&nbsp;: + Validité&nbsp;: + De&nbsp;: + À&nbsp;: + Signature&nbsp;: + Algorithme&nbsp;: Impossible d\'afficher le certificat. - Aucune information sur l\'erreur Ceci est un espace réservé @@ -254,7 +255,7 @@ Ci-dessous la liste des fichiers locaux, et les fichiers distants dans %5$s auxq Cette image ne peut pas être affichée %1$s n\'a pas pu être copié dans le dossier local %2$s Chemin d\'accès pour le téléversement - Désolé, le partage n\'est pas disponible sur votre serveur. Contactez votre administrateur, s\'il vous plait. + Désolé, le partage n\'est pas disponible sur votre serveur. Veuillez contacter votre administrateur. Impossible de partager. Vérifiez que le fichier est bien présent Une erreur est survenue lors de la tentative de partage de ce fichier ou répertoire Impossible de supprimer le partage. Vérifiez que le fichier est bien présent @@ -262,7 +263,7 @@ Ci-dessous la liste des fichiers locaux, et les fichiers distants dans %5$s auxq Envoyer Copier le lien Copié dans le presse-papiers - Erreur critique : impossible de réaliser des opérations + Erreur critique&nbsp;: impossible de réaliser des opérations Une erreur s\'est produite pendant la connection au serveur Une erreur est survenue pendant l\'attente du serveur. L\'opération n\'a pas pu être effectuée. Une erreur est survenue pendant l\'attente du serveur. L\'opération n\'a pas pu être effectuée. diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml index 3479d359..d2783327 100644 --- a/res/values-gl/strings.xml +++ b/res/values-gl/strings.xml @@ -50,6 +50,7 @@ Non se recibiu contido. Non hai nada para enviar. %1$s non ten permiso para acceder ao contido compartido Enviando + segundos atrás Aquí non hai nada. Envíe algo! Cargando... Non hai ficheiros neste cartafol. diff --git a/res/values-he/strings.xml b/res/values-he/strings.xml index 9bc427b6..4599f2fa 100644 --- a/res/values-he/strings.xml +++ b/res/values-he/strings.xml @@ -50,6 +50,7 @@ לא התקבל תוכן. אין מה להעלות. ל־%1$s אין הרשאה לגשת לתוכן המשותף שלך בהעלאה + שניות אין כאן שום דבר. אולי ברצונך להעלות משהו? בטעינה... אין קבצים בתיקייה זו: diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml index 2c986dd5..c9bf237a 100644 --- a/res/values-hr/strings.xml +++ b/res/values-hr/strings.xml @@ -17,6 +17,7 @@ Poveži Učitaj Izlaz + prije par sekundi Nema ničega u ovoj mapi. Pošalji nešto! Preuzimanje Podijelite vezu diff --git a/res/values-hu-rHU/strings.xml b/res/values-hu-rHU/strings.xml index 18f000c9..0e646831 100644 --- a/res/values-hu-rHU/strings.xml +++ b/res/values-hu-rHU/strings.xml @@ -50,6 +50,7 @@ Nem jött tartalom. Nincs mit feltölteni. %1$s nem jogosult a megosztott tartalom elérésére Feltöltés + pár másodperce Itt nincs semmi. Töltsön fel valamit! Betöltés... Nincs fájl ebben a mappában. diff --git a/res/values-ia/strings.xml b/res/values-ia/strings.xml index 9bcfedfd..598d99a9 100644 --- a/res/values-ia/strings.xml +++ b/res/values-ia/strings.xml @@ -15,6 +15,7 @@ Files Connecte Incargar + secundas passate Nihil hic. Incarga alcun cosa! Discargar Compartir ligamine diff --git a/res/values-id/strings.xml b/res/values-id/strings.xml index 4938557d..1434642b 100644 --- a/res/values-id/strings.xml +++ b/res/values-id/strings.xml @@ -59,6 +59,7 @@ Tidak ada konten yang diterima. Tidak ada yang diunggah %1$s tidak diizinkan mengakses konten berbagi Mengunggah + beberapa detik yang lalu Tidak ada apa-apa di sini. Unggah sesuatu! Memuat... Tidak ada satupun berkas dalam folder ini. diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml index 81109d51..1e14885b 100644 --- a/res/values-is/strings.xml +++ b/res/values-is/strings.xml @@ -12,6 +12,7 @@ Lykilorð Skrár Senda inn + sek. Ekkert hér. Settu eitthvað inn! Niðurhal Já diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 2ff50d75..b5dc46b4 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -59,6 +59,7 @@ Non è stato ricevuto alcun contenuto. Niente da caricare. %1$s non è abilitato ad accedere al contenuto condiviso Caricamento in corso + secondi fa Non c\'è niente qui. Carica qualcosa! Caricamento in corso... Non ci sono file in questa cartella. @@ -76,7 +77,7 @@ No OK Annulla lo scaricamento - Annulla invio + Annulla caricamento Annulla Salva ed esci Errore @@ -244,7 +245,7 @@ Il file remoto %s non è sincronizzato con il file locale. Se continui, il contenuto del file sarà sostituito sul server. Mantieni entrambi Sovrascrivi - Non inviare + Non caricare Anteprima dell\'immagine Questa immagine non può essere mostrata %1$s non può essere copiato nella cartella locale %2$s @@ -278,7 +279,7 @@ Registri Invia cronologia Registri applicazione ownCloud Android - Caricamento dati... + Caricamento dati in corso... Autenticazione richiesta Password errata Sposta diff --git a/res/values-ja-rJP/strings.xml b/res/values-ja-rJP/strings.xml index e3680ad9..f6e43e2a 100644 --- a/res/values-ja-rJP/strings.xml +++ b/res/values-ja-rJP/strings.xml @@ -60,6 +60,7 @@ コンテンツを受信しませんでした。アップロードするものはありません。 %1$sで共有コンテンツへのアクセスが許可されていません。 アップロード中 + 数秒前 ここには何もありません。何かアップロードしてください。 読込中 ... このフォルダーにはファイルがありません。 diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml index 51ce611f..f0efc92c 100644 --- a/res/values-ka-rGE/strings.xml +++ b/res/values-ka-rGE/strings.xml @@ -30,6 +30,7 @@ კონტენტი არ იქნა მიღებული. არაფერია ასატვირთად. %1$s–ი არ დაიშვება გაზიარებული კონტენტის სანახავად მიმდინარეობს ატვირთვა + წამის წინ აქ არაფერი არ არის. ატვირთე რამე! დააჭირეთ ფაილს დამატებითი ინფორმაციის გამოსაჩენად. ზომა: diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml index b31d4831..75c68d75 100644 --- a/res/values-km/strings.xml +++ b/res/values-km/strings.xml @@ -23,6 +23,7 @@ ដំឡើង ចាក់ចេញ កំពុង​ផ្ទុក​ឡើង + វិនាទី​មុន គ្មាន​អ្វី​នៅ​ទីនេះ​ទេ។ ផ្ទុក​ឡើង​អ្វី​មួយ! ចុចមួយ​លើឯកសារ ដើម្បី​បង្ហាញ​ព័ត៌មាន​បន្ថែម។ ទំហំ៖ diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index 726c4d52..a298ff5a 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -45,6 +45,7 @@ 받은 콘텐츠가 없습니다. 업로드할 항목이 없습니다. %1$s에서 공유된 콘텐츠에 접근할 수 없습니다 업로드 중 + 초 전 내용이 없습니다. 업로드할 수 있습니다! 파일을 누르면 추가 정보가 표시됩니다. 크기: diff --git a/res/values-lb/strings.xml b/res/values-lb/strings.xml index cde6e1a7..545c8427 100644 --- a/res/values-lb/strings.xml +++ b/res/values-lb/strings.xml @@ -24,6 +24,7 @@ Setup Erausgoen Eroplueden + Sekonnen hir Hei ass näischt. Lued eppes rop! Gréisst: Typ: diff --git a/res/values-lt-rLT/strings.xml b/res/values-lt-rLT/strings.xml index c9ac6e35..2f45be19 100644 --- a/res/values-lt-rLT/strings.xml +++ b/res/values-lt-rLT/strings.xml @@ -50,6 +50,7 @@ nebuvo gauta turinio. Nėra įkeltino turinio %1$s neleidžiama prieiti prie turinio, kuriuo dalijamasi Išsiunčiama + prieš sekundę Čia tuščia. Įkelkite ką nors! Įkeliama ... Šiame aplanke nėra failų. diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml index 581b79cd..39ea5bf0 100644 --- a/res/values-lv/strings.xml +++ b/res/values-lv/strings.xml @@ -28,6 +28,7 @@ Nav saņemts nekāds saturs. Nav ko augšupielādēt. %1$s nedrīkst piekļūt koplietotajam saturam Augšupielādē + sekundes atpakaļ Te vēl nekas nav. Rīkojies, sāc augšupielādēt! Uzsitiet uz datnes, lai redzētu papildinformāciju. Izmērs: diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml index d8edec41..5333aae4 100644 --- a/res/values-mk/strings.xml +++ b/res/values-mk/strings.xml @@ -28,6 +28,7 @@ Не е пронајдена сметка Нагодување Прекини + пред секунди Тука нема ништо. Снимете нешто! Големина: Тип: diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml index 2d882a6b..7ec90056 100644 --- a/res/values-my/strings.xml +++ b/res/values-my/strings.xml @@ -7,6 +7,7 @@ သုံးစွဲသူအမည် စကားဝှက် ဖိုင်များ + စက္ကန့်အနည်းငယ်က ဒေါင်းလုတ် ဟုတ် မဟုတ်ဘူး diff --git a/res/values-nb-rNO/strings.xml b/res/values-nb-rNO/strings.xml index 2ad2386e..11326516 100644 --- a/res/values-nb-rNO/strings.xml +++ b/res/values-nb-rNO/strings.xml @@ -51,6 +51,7 @@ Intet innhold ble mottatt. Intet å laste opp. %1$s har ikke tilgang til det delte innholdet Laster opp + for få sekunder siden Ingenting her. Last opp noe! Laster... Det er ingen filer i denne mappen. diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index 0ef113a9..e0bcaa41 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -60,6 +60,7 @@ Download hier: %2$s Er werd geen inhoud ontvangen. Niets om te uploaden. %1$s is niet toegestaan om toegang te hebben tot de publieke inhoud Uploaden + seconden geleden Er bevindt zich hier niets. Upload een bestand! Laden ... Er staan geen bestanden in deze map. diff --git a/res/values-nn-rNO/strings.xml b/res/values-nn-rNO/strings.xml index d9a37a83..9cf7ac6e 100644 --- a/res/values-nn-rNO/strings.xml +++ b/res/values-nn-rNO/strings.xml @@ -46,6 +46,7 @@ Inga innhald å lasta opp Mottok ikkje noko innhald. Ingenting å lasta opp. Lastar opp + sekund sidan Ingenting her. Last noko opp! Trykk på ei fil for å visa meir informasjon. Storleik: diff --git a/res/values-oc/strings.xml b/res/values-oc/strings.xml index 0d3a45ba..e6a7eae9 100644 --- a/res/values-oc/strings.xml +++ b/res/values-oc/strings.xml @@ -19,6 +19,7 @@ Configuracion Quita Al amontcargar + segonda a Pas res dedins. Amontcarga qualquaren Talha : Tipe : diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml index b84b0576..bf5abd69 100644 --- a/res/values-pa/strings.xml +++ b/res/values-pa/strings.xml @@ -29,6 +29,7 @@ ਅੱਪਲੋਡ ਕਰਨ ਲਈ ਕੋਈ ਸਮੱਗਰੀ ਨਹੀਂ ਕੋਈ ਸਮੱਗਰੀ ਨਹੀਂ ਮਿਲੀ। ਅੱਪਲੋਡ ਕਰਨ ਲਈ ਕੁਝ ਨਹੀਂ ਹੈ। ਅੱਪਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ + ਸਕਿੰਟ ਪਹਿਲਾਂ ਹੋਰ ਜਾਣਕਾਰੀ ਵੇਖਣ ਲਈ ਫਾਇਲ ਉੱਤੇ ਛੂਹੋ ਆਕਾਰ: ਕਿਸਮ: diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index 0e84c681..a5a7b7b9 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -57,6 +57,7 @@ Nie otrzymano danych. Nie ma nic do wysłania. %1$s nie ma dostępu do udostępnionych treści Wysyłanie + sekund temu Pusto. Wyślij coś! Ładowanie... Nie ma plików w tym folderze. diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml index 1169dc45..512cfe56 100644 --- a/res/values-pt-rBR/strings.xml +++ b/res/values-pt-rBR/strings.xml @@ -59,6 +59,7 @@ Nenhum conteúdo foi recebido. Nada para enviar. %1$s não é permitido acessar o conteúdo compartilhado Enviando + segundos atrás Nada aqui. Envie alguma coisa! Carregando... Não existe nenhum arquivo nesta pasta. diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index 41b09046..072a0850 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -1,6 +1,6 @@ - %1$s Aplicação(ões) Android + %1$s App(s) Android versão %1$s Atualizar conta Enviar @@ -51,14 +51,15 @@ Ligar Enviar Escolha a pasta de envio: - Nenhuma conta encontrada - Não tem nenhuma conta %1$s no seu dispositivo. Configure uma conta. + A conta não foi encontrada + Não tem nenhuma conta %1$s no seu dispositivo. Por favor, configure primeiro uma conta. Configurar Sair - Sem conteúdo para carregar + Sem conteúdo para enviar Não foi recebido nenhum conteúdo. Nada para enviar. O %1$s não está autorizado a aceder aos ficheiro partilhados. A enviar + segundos atrás Vazio. Envie alguma coisa! A carregar ... Não existem ficheiros nesta pasta. @@ -214,12 +215,12 @@ Quer confiar neste certificado de qualquer maneira? O certificado não pôde ser guardado Detalhes - Esconder + Ocultar Emitido para: Emitido por: Nome comum. Organização: - Unidade organizaconal. + Unidade organizacional. País: Estado: Localização: @@ -228,33 +229,33 @@ Para: Assinatura: Algoritmo - O certificado não pôde ser mostrado. - - Nenhuma informação acerca do erro + Não foi possível mostrar o certificado. + - Nenhuma informação sobre o erro Isto é uma variável. placeholder.txt Imagem PNG 389 KB - 2012/05/18 12:23 PM + 2012/05/18 12:23 12:23:45 - Enviar fotografias apenas via WiFi - Enviar videos apenas por WiFi - /Upload-Instantâneo - Conflito na actualização + Só enviar as fotografias via wi-fi + Só enviar os vídeos por wi-fi + /Envio Instantâneo + Conflito na atualização O ficheiro remoto %s não está sincronizado com o ficheiro local. Se continuar ira substituir o ficheiro no servidor. - Manter os dois - Sobrepor + Manter ambos + Substituir Não enviar. - Pré-Visualização da imagem + Pré-Visualizar imagem Esta imagem não pode ser mostrada Não foi possível copiar %1$s para a pasta local %2$s - Caminho de Upload + Caminho de \'A Enviar\' Lamentamos mas não é possível partilhar através do seu servidor. Por favor contacte o seu administrador. Não é possivel partilhar. Por favor verifique se o ficheiro existe Ocorreu um erro enquanto tentava partilhar este ficheiro ou pasta Não é possível retirar a partilha. Verifique se o ficheiro existe Ocorreu um erro enquanto retirava a partilha deste ficheiro ou pasta Enviar - Copiar ligação + Copiar hiperligação Copiado para a área de transferência Erro crítico: não é possível executar as operações Ocorreu um erro durante a ligação ao servidos. @@ -262,31 +263,31 @@ Ocorreu um erro durante a ligação ao servidor, não foi possível realizar a operação. A operação não foi concluída, o servidor está inacessível. - Você não tem permissão %s + Não tem permissão %s para renomear este ficheiro - para eliminar este ficheiro + para apagar este ficheiro para partilhar este ficheiro - para eliminar a partilha deste ficheiro + para cancelar a partilha deste ficheiro para criar o ficheiro - para carregar dentro desta pasta + para enviar nesta pasta O ficheiro não está mais disponível no servidor Contas Adicionar conta Ligação segura é redireccionada para um caminho inseguro. - Logs + Registos de Alterações Enviar Histórico - Logs da app ownCloud Android - A carregar os dados... + Registos das alterações da app ownCloud Android + A carregar os dados ... Autenticação necessária - Password errada + Palavra-passe errada Mover Não está aqui nada. Pode adicionar uma pasta! - Escolha - Não é possível mover. Verifique se o ficheiro existe + Escolher + Não é possível mover. Por favor, verifique se o ficheiro existe Não é possível mover esta pasta deste modo O ficheiro já existe na pasta de destino - Um erro ocorreu ao tentar mover este ficheiro ou pasta + Ocorreu um ocorreu quando tentava mover este ficheiro ou pasta para mover este ficheiro - Uploads Instantâneos + Envios Instantâneos Segurança diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index 2b052012..5df31b3e 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -52,6 +52,7 @@ Nu a fost primit nici un conţinut .Nu exista nimic de încărcat . %1$s nu este permis sa acceseze conținutul shared Încărcare + secunde în urmă Nimic aici. Încarcă ceva! Se incarca In acest folder nu sunt fisiere. diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 76f388b9..1f773f96 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -58,6 +58,7 @@ Содержимое не получено. Нечего загружать. %1$s не имеет доступа к опубликованным данным Загрузка + только что Здесь ничего нет. Загрузите что-нибудь! Загрузка... В данной папке нет файлов. diff --git a/res/values-si-rLK/strings.xml b/res/values-si-rLK/strings.xml index 4a3e9e81..d413c8f9 100644 --- a/res/values-si-rLK/strings.xml +++ b/res/values-si-rLK/strings.xml @@ -21,6 +21,7 @@ ස්ථාපනය නික්මෙන්න උඩුගතවේ + තත්පරයන්ට පෙර මෙහි කිසිවක් නොමැත. යමක් උඩුගත කරන්න වැඩි විස්තර සඳහා ගොනුවක් ස්පර්ෂ කරන්න විශාලත්වය: diff --git a/res/values-sk-rSK/strings.xml b/res/values-sk-rSK/strings.xml index 2ab0c280..3946e28b 100644 --- a/res/values-sk-rSK/strings.xml +++ b/res/values-sk-rSK/strings.xml @@ -11,6 +11,12 @@ Nastavenia Podrobnosti Odoslať + Zoradiť + Zoradiť podľa + + A-Z + Najnovšie - Najstaršie + Všeobecné @@ -32,7 +38,10 @@ Doporučiť známemu Spätná väzba Podmienky používania + Zapamätať umiestnenie zdieľania + Zapamätať posledné umiestnenie pre nahranie zdieľaných súborov Skúste %1$s na vašom telefóne! + Chcel by som vám odporučiť %1$s na vašom smartfóne!\nSťahujte tu: %2$s Skontrolovať Server Adresa servera https://... Používateľské meno @@ -50,6 +59,7 @@ Nedodaný žiaden obsah. Nič na odoslanie. %1$s nemá práva pre prístup k zdieľanému obsahu Nahrávanie + pred sekundami Žiadny súbor. Nahrajte niečo! Nahráva sa... V tomto priečinku nie sú žiadne súbory. @@ -105,6 +115,7 @@ Obsah %1$d súborov nemohol byť synchronizovaný (%2$d konfliktov) Niektoré lokálne súbory boli zabudnuté %1$d súborov z %2$s priečinkov sa nepodarilo skopírovať do + Od verzie 1.3.16 sú súbory nahrané z tohoto zariadenia kopírované do lokálneho priečinka %1$s, aby sa zabránilo strate dát pri synchronizácii jedného súboru s viacerými účtami.\n\nVšetky súbory nahraté predchádzajúcimi verziami aplikácie boli z tohoto dôvodu prekopírované do priečinka %2$s. Bohužiaľ sa objavila chyba zabraňujúca dokončeniu tejto operácie v priebehu synchronizácie účtu. Buď môžete súbor(y) ponechať ako sú a odobrať odkaz z priečinka %3$s, alebo presunúť súbor(y) do priečinka %1$s a zachovať odkaz na %4$s.\n\nNižšie je uvedený lokálny súbor(y) a vzdialený súbor(y) v %5$s, s ktorým je prepojený. Priečinok %1$s už existuje Premiestniť všetko Všetky súbory boli premiestnené @@ -238,9 +249,12 @@ Ukážka obrazu Obrázok nemožno zobraziť %1$s nemožno skopírovať do lokálneho priečinka %2$s + Cesta pre nahrávanie Je nám to ľúto, ale zdieľanie nie je na vašom serveri povolené. Prosím kontaktujte vášho administrátora. + Nemožno zdieľať. Skontrolujte, či súbor existuje Pri pokuse o zdieľanie tohto súboru alebo priečinka došlo k chybe + Nemožno ukončiť zdieľanie. Skontrolujte, či súbor existuje Pri pokuse zrušiť zdieľanie tohto súboru alebo priečinka došlo k chybe Odoslať Kopíruj odkaz @@ -261,9 +275,21 @@ Súbor už na serveri nie je dostupný Účty Pridať účet + Zabezpečené pripojenie je presmerované na nezabezpečenú trasu. + Logy + Odoslať históriu + Logy aplikácie ownCloud pre Android + Nahrávam dáta... Vyžaduje sa overenie Nesprávne heslo Presunúť + Nič tu nie je. Pridajte priečinok! Vybrať + Nemožno presunúť. Skontrolujte, či súbor existuje + Priečinok nemožno presunúť do vlastného podpriečinka + Súbor už v cieľovom priečinku existuje + Pri pokuse o presun tohoto súboru alebo priečinka nastala chyba + pre presun tohoto súboru + Okamžité nahratie Zabezpečenie diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index 0e8d775f..f0c1ee2a 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -59,6 +59,7 @@ Ni prejete vsebine. Ni datotek za pošiljanje. Oblak %1$s nima nastavljenih dovoljenj za dostop do vsebine v souporabi Pošiljanje + pred nekaj sekundami Tukaj še ni ničesar. Najprej je treba datoteke poslati v oblak! Poteka nalaganje ... V tej mapi ni datotek. diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml index 798c4b39..6a79dc75 100644 --- a/res/values-sq/strings.xml +++ b/res/values-sq/strings.xml @@ -24,6 +24,7 @@ Ndërto Dil Ngarko + sekonda më parë Këtu nuk ka asgje. Ngarko dicka Trokitje e lehtë në një dokument për të shfaqur informacion shtesë. Dimensioni: @@ -31,6 +32,7 @@ Krijuar: Modifikuar: Shkarko + Ndaje lidhjen Po Jo Ok diff --git a/res/values-sr-rSP/strings.xml b/res/values-sr-rSP/strings.xml index daac3e01..64e2de07 100644 --- a/res/values-sr-rSP/strings.xml +++ b/res/values-sr-rSP/strings.xml @@ -17,6 +17,7 @@ Pošalji Nalog nije nađen Šalje se + Pre par sekundi Ovde nema ničeg. Pošaljite nešto! Veličina: Tip: diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml index 5aadabb9..ea8c40ef 100644 --- a/res/values-sr/strings.xml +++ b/res/values-sr/strings.xml @@ -22,6 +22,7 @@ Нема садржаја за отпремање Садржај није примљен. Нема ништа да се отпреми. Отпремање + пре неколико секунди Овде нема ничег. Отпремите нешто! Додирните датотеку ради приказа додатних информација. Величина: diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index a649518b..0a01a65f 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -51,6 +51,7 @@ Inget innehåll mottaget. Inget att ladda upp. %1$s har inte rättighet till det delade innehållet Laddar upp + sekunder sedan Ingenting här. Ladda upp något! Laddar... Det finns inga filer i den här mappen. diff --git a/res/values-ta-rLK/strings.xml b/res/values-ta-rLK/strings.xml index 3c3e167a..f317edf8 100644 --- a/res/values-ta-rLK/strings.xml +++ b/res/values-ta-rLK/strings.xml @@ -27,6 +27,7 @@ ஒரு உள்ளடக்கமும் பெறப்படவில்லை. பதிவேற்றுவதற்கு ஒன்றும் இல்லை பகிரப்பட்ட உள்ளடக்ககங்களை அணுகுவதற்கு %1$s அனுமதிக்கமாட்டாது பதிவேற்றல் + செக்கன்களுக்கு முன் இங்கு ஒன்றும் இல்லை. ஏதாவது பதிவேற்றுக! மேலதிக தகவல்களை காட்சிப்படுத்துவதற்கு கோப்பின் மேல் தட்டுக. அளவு: diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml index 834de750..fdebfa74 100644 --- a/res/values-te/strings.xml +++ b/res/values-te/strings.xml @@ -9,6 +9,7 @@ సహాయం వాడుకరి పేరు సంకేతపదం + క్షణాల క్రితం అవును కాదు సరే diff --git a/res/values-th-rTH/strings.xml b/res/values-th-rTH/strings.xml index 6ed3f19c..f10ec0f6 100644 --- a/res/values-th-rTH/strings.xml +++ b/res/values-th-rTH/strings.xml @@ -29,6 +29,7 @@ ยังไม่ได้รับเนื้อหา ไม่มีอะไรให้ต้องอัพโหลด %1$s ไม่อนุญาตให้เข้าถึงเนื้อหาที่ถูกแชร์ไว้ กำลังอัพโหลด + วินาที ก่อนหน้านี้ ยังไม่มีไฟล์ใดๆอยู่ที่นี่ กรุณาอัพโหลดไฟล์! แตะที่ไฟล์ เพื่อแสดงข้อมูลเพิ่มเติม ขนาด: diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index f1811523..2a34fcf5 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -59,6 +59,7 @@ Hiç içerik alınmadı. Yüklenecek hiçbir şey yok. %1$s için paylaşılan içeriğe erişim izni yok Yükleniyor + saniyeler önce Burada hiçbir şey yok. Bir şeyler yükleyin! Yükleniyor... Bu klasörde dosya yok. diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index 22ab60a4..597150b8 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -57,6 +57,7 @@ Не отримано даних. Нічого завантажувати. %1$s не може отримати доступ до спільного контенту Завантаження + секунди тому Тут нічого немає. Відвантажте що-небудь! Завантаження... В цій теці немає файлів. diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur-rPK/strings.xml index a90a3021..229bdaca 100644 --- a/res/values-ur-rPK/strings.xml +++ b/res/values-ur-rPK/strings.xml @@ -9,6 +9,7 @@ یوزر نیم پاسورڈ منسلک + سیکنڈز پہلے ڈاؤن لوڈ، اشتراک لنک ہاں diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index 7e5fe75a..52e3c563 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -45,6 +45,7 @@ Không có nội dung được nhận. Không có gì để tải lên. %1$s không cho phép truy cập vào các nội dung chia sẻ Đang tải lên + vài giây trước Không có gì ở đây .Hãy tải lên một cái gì đó ! Tap vào một tập tin để hiển thị thêm thông tin Kích thước: diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index 1b6eab69..8c647c45 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -52,6 +52,7 @@ 没有接收到内容,无可上传。 %1$s未被允许访问共享内容。 上传 + 秒前 这里还什么都没有。上传些东西吧! 载入中.... 在该文件夹中不存在文件。 diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml index 7e5ae525..b2731798 100644 --- a/res/values-zh-rHK/strings.xml +++ b/res/values-zh-rHK/strings.xml @@ -25,6 +25,7 @@ 設定 退出 正在上戴 + 秒前 按一下文件顯示更多資料。 大小: 類別: diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index 04938d38..8dc73b02 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -11,6 +11,12 @@ 設定 詳細資料 寄出 + 排序 + 排序依照 + + A-Z + 最新 - 最舊 + 一般 @@ -32,6 +38,8 @@ 推薦給朋友 反饋 法律聲明 + 記住分享位置 + 記住上次分享上傳位置 在您的手機中試用%1$s! 我想邀請您在您的手機上使用 %1$s ! 可以由這兒下載: %2$s 檢查伺服器 @@ -51,6 +59,7 @@ 沒接到任何內容。沒有什麼可上載。 %1$s 並沒有被允許存取分享的內容 上傳中 + 幾秒前 這裡還沒有東西,上傳一些吧! 載入中… 這個目錄中沒有任何檔案. diff --git a/res/values/strings.xml b/res/values/strings.xml index 2655e29f..de88a5b3 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -62,9 +62,14 @@ No content was received. Nothing to upload. %1$s is not allowed to access the shared content Uploading + seconds ago Nothing in here. Upload something! Loading... There are no files in this folder. + folder + folders + file + files Tap on a file to display additional information. Size: Type: diff --git a/src/com/owncloud/android/files/services/FileUploader.java b/src/com/owncloud/android/files/services/FileUploader.java index ad2a2cbe..04804402 100644 --- a/src/com/owncloud/android/files/services/FileUploader.java +++ b/src/com/owncloud/android/files/services/FileUploader.java @@ -73,6 +73,7 @@ import com.owncloud.android.operations.common.SyncOperation; import com.owncloud.android.ui.activity.FileActivity; import com.owncloud.android.ui.activity.FileDisplayActivity; import com.owncloud.android.utils.ErrorMessageAdapter; +import com.owncloud.android.utils.UriUtils; @@ -120,6 +121,9 @@ public class FileUploader extends Service implements OnDatatransferProgressListe private NotificationCompat.Builder mNotificationBuilder; private int mLastPercent; + private static final String MIME_TYPE_PDF = "application/pdf"; + private static final String FILE_EXTENSION_PDF = ".pdf"; + public static String getUploadFinishMessage() { return FileUploader.class.getName().toString() + UPLOAD_FINISH_MESSAGE; @@ -646,18 +650,6 @@ public class FileUploader extends Service implements OnDatatransferProgressListe private OCFile obtainNewOCFileToUpload(String remotePath, String localPath, String mimeType, FileDataStorageManager storageManager) { - OCFile newFile = new OCFile(remotePath); - newFile.setStoragePath(localPath); - newFile.setLastSyncDateForProperties(0); - newFile.setLastSyncDateForData(0); - - // size - if (localPath != null && localPath.length() > 0) { - File localFile = new File(localPath); - newFile.setFileLength(localFile.length()); - newFile.setLastSyncDateForData(localFile.lastModified()); - } // don't worry about not assigning size, the problems with localPath - // are checked when the UploadFileOperation instance is created // MIME type if (mimeType == null || mimeType.length() <= 0) { @@ -671,6 +663,25 @@ public class FileUploader extends Service implements OnDatatransferProgressListe if (mimeType == null) { mimeType = "application/octet-stream"; } + + if (isPdfFileFromContentProviderWithoutExtension(localPath, mimeType)){ + remotePath += FILE_EXTENSION_PDF; + } + + OCFile newFile = new OCFile(remotePath); + newFile.setStoragePath(localPath); + newFile.setLastSyncDateForProperties(0); + newFile.setLastSyncDateForData(0); + + // size + if (localPath != null && localPath.length() > 0) { + File localFile = new File(localPath); + newFile.setFileLength(localFile.length()); + newFile.setLastSyncDateForData(localFile.lastModified()); + } // don't worry about not assigning size, the problems with localPath + // are checked when the UploadFileOperation instance is created + + newFile.setMimetype(mimeType); return newFile; @@ -856,4 +867,17 @@ public class FileUploader extends Service implements OnDatatransferProgressListe sendStickyBroadcast(end); } + /** + * Checks if content provider, using the content:// scheme, returns a file with mime-type + * 'application/pdf' but file has not extension + * @param localPath + * @param mimeType + * @return true if is needed to add the pdf file extension to the file + */ + private boolean isPdfFileFromContentProviderWithoutExtension(String localPath, String mimeType) { + return localPath.startsWith(UriUtils.URI_CONTENT_SCHEME) && + mimeType.equals(MIME_TYPE_PDF) && + !localPath.endsWith(FILE_EXTENSION_PDF); + } + } diff --git a/src/com/owncloud/android/operations/UploadFileOperation.java b/src/com/owncloud/android/operations/UploadFileOperation.java index 43fcaa55..1536a604 100644 --- a/src/com/owncloud/android/operations/UploadFileOperation.java +++ b/src/com/owncloud/android/operations/UploadFileOperation.java @@ -31,11 +31,16 @@ import java.util.concurrent.atomic.AtomicBoolean; import org.apache.commons.httpclient.methods.PutMethod; import org.apache.commons.httpclient.methods.RequestEntity; +import android.accounts.Account; +import android.content.Context; +import android.net.Uri; + +import com.owncloud.android.MainApp; import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.files.services.FileUploader; -import com.owncloud.android.lib.common.network.ProgressiveDataTransferer; -import com.owncloud.android.lib.common.network.OnDatatransferProgressListener; import com.owncloud.android.lib.common.OwnCloudClient; +import com.owncloud.android.lib.common.network.OnDatatransferProgressListener; +import com.owncloud.android.lib.common.network.ProgressiveDataTransferer; import com.owncloud.android.lib.common.operations.OperationCancelledException; import com.owncloud.android.lib.common.operations.RemoteOperation; import com.owncloud.android.lib.common.operations.RemoteOperationResult; @@ -45,9 +50,7 @@ import com.owncloud.android.lib.resources.files.ChunkedUploadRemoteFileOperation import com.owncloud.android.lib.resources.files.ExistenceCheckRemoteOperation; import com.owncloud.android.lib.resources.files.UploadRemoteFileOperation; import com.owncloud.android.utils.FileStorageUtils; - -import android.accounts.Account; -import android.content.Context; +import com.owncloud.android.utils.UriUtils; /** @@ -92,10 +95,9 @@ public class UploadFileOperation extends RemoteOperation { throw new IllegalArgumentException("Illegal NULL account in UploadFileOperation creation"); if (file == null) throw new IllegalArgumentException("Illegal NULL file in UploadFileOperation creation"); - if (file.getStoragePath() == null || file.getStoragePath().length() <= 0 - || !(new File(file.getStoragePath()).exists())) { + if (file.getStoragePath() == null || file.getStoragePath().length() <= 0) { throw new IllegalArgumentException( - "Illegal file in UploadFileOperation; storage path invalid or file not found: " + "Illegal file in UploadFileOperation; storage path invalid: " + file.getStoragePath()); } @@ -218,52 +220,77 @@ public class UploadFileOperation extends RemoteOperation { // copied } else { + String temporalPath = FileStorageUtils.getTemporalPath(mAccount.name) + mFile.getRemotePath(); mFile.setStoragePath(temporalPath); temporalFile = new File(temporalPath); - if (!mOriginalStoragePath.equals(temporalPath)) { // preventing - // weird - // but - // possible - // situation - InputStream in = null; - OutputStream out = null; - try { - File temporalParent = temporalFile.getParentFile(); - temporalParent.mkdirs(); - if (!temporalParent.isDirectory()) { - throw new IOException("Unexpected error: parent directory could not be created"); - } - temporalFile.createNewFile(); - if (!temporalFile.isFile()) { - throw new IOException("Unexpected error: target file could not be created"); - } - in = new FileInputStream(originalFile); + + File temporalParent = temporalFile.getParentFile(); + temporalParent.mkdirs(); + if (!temporalParent.isDirectory()) { + throw new IOException("Unexpected error: parent directory could not be created"); + } + temporalFile.createNewFile(); + if (!temporalFile.isFile()) { + throw new IOException("Unexpected error: target file could not be created"); + } + + InputStream in = null; + OutputStream out = null; + + try { + + // In case document provider schema as 'content://' + if (mOriginalStoragePath.startsWith(UriUtils.URI_CONTENT_SCHEME)) { + + Uri uri = Uri.parse(mOriginalStoragePath); + + in = MainApp.getAppContext().getContentResolver().openInputStream(uri); out = new FileOutputStream(temporalFile); - byte[] buf = new byte[1024]; - int len; - while ((len = in.read(buf)) > 0) { - out.write(buf, 0, len); - } - } catch (Exception e) { - result = new RemoteOperationResult(ResultCode.LOCAL_STORAGE_NOT_COPIED); - return result; - - } finally { - try { - if (in != null) - in.close(); - } catch (Exception e) { - Log_OC.d(TAG, "Weird exception while closing input stream for " + mOriginalStoragePath + " (ignoring)", e); + int nRead; + byte[] data = new byte[16384]; + + while ((nRead = in.read(data, 0, data.length)) != -1) { + out.write(data, 0, nRead); } - try { - if (out != null) - out.close(); - } catch (Exception e) { - Log_OC.d(TAG, "Weird exception while closing output stream for " + expectedPath + " (ignoring)", e); + + out.flush(); + + } else { + if (!mOriginalStoragePath.equals(temporalPath)) { // preventing + // weird + // but + // possible + // situation + + in = new FileInputStream(originalFile); + out = new FileOutputStream(temporalFile); + byte[] buf = new byte[1024]; + int len; + while ((len = in.read(buf)) > 0) { + out.write(buf, 0, len); + } } } + + } catch (Exception e) { + result = new RemoteOperationResult(ResultCode.LOCAL_STORAGE_NOT_COPIED); + return result; + + } finally { + try { + if (in != null) + in.close(); + } catch (Exception e) { + Log_OC.d(TAG, "Weird exception while closing input stream for " + mOriginalStoragePath + " (ignoring)", e); + } + try { + if (out != null) + out.close(); + } catch (Exception e) { + Log_OC.d(TAG, "Weird exception while closing output stream for " + expectedPath + " (ignoring)", e); + } } } } @@ -417,5 +444,4 @@ public class UploadFileOperation extends RemoteOperation { public void cancel() { mUploadOperation.cancel(); } - } diff --git a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java index 2223971e..367362aa 100644 --- a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -33,6 +33,7 @@ import android.app.ProgressDialog; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.ContentResolver; +import android.content.ContentUris; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; @@ -45,12 +46,16 @@ import android.database.Cursor; import android.net.Uri; import android.os.Build; import android.os.Bundle; +import android.os.Environment; import android.os.IBinder; import android.preference.PreferenceManager; +import android.provider.DocumentsContract; import android.provider.MediaStore; +import android.provider.OpenableColumns; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; +import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; @@ -104,6 +109,7 @@ import com.owncloud.android.ui.preview.PreviewMediaFragment; import com.owncloud.android.ui.preview.PreviewVideoActivity; import com.owncloud.android.utils.DisplayUtils; import com.owncloud.android.utils.ErrorMessageAdapter; +import com.owncloud.android.utils.UriUtils; /** @@ -154,7 +160,7 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener { private String DIALOG_UNTRUSTED_CERT; private OCFile mWaitingToSend; - + @Override protected void onCreate(Bundle savedInstanceState) { Log_OC.d(TAG, "onCreate() start"); @@ -566,6 +572,11 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener { builder.setExpedited(true); builder.setManual(true); builder.syncOnce(); + + // Fix bug in Android Lollipop when you click on refresh the whole account + Bundle extras = new Bundle(); + builder.setExtras(extras); + SyncRequest request = builder.build(); ContentResolver.requestSync(request); } @@ -667,8 +678,12 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener { private void requestSimpleUpload(Intent data, int resultCode) { String filepath = null; + String mimeType = null; + + Uri selectedImageUri = data.getData(); + try { - Uri selectedImageUri = data.getData(); + mimeType = getContentResolver().getType(selectedImageUri); String filemanagerstring = selectedImageUri.getPath(); String selectedImagePath = getPath(selectedImageUri); @@ -700,10 +715,34 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener { } if (!remotepath.endsWith(OCFile.PATH_SEPARATOR)) remotepath += OCFile.PATH_SEPARATOR; - remotepath += new File(filepath).getName(); + + if (filepath.startsWith(UriUtils.URI_CONTENT_SCHEME)) { + + Cursor cursor = MainApp.getAppContext().getContentResolver() + .query(Uri.parse(filepath), null, null, null, null, null); + + try { + if (cursor != null && cursor.moveToFirst()) { + String displayName = cursor.getString( + cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME)); + Log.i(TAG, "Display Name: " + displayName + "; mimeType: " + mimeType); + + displayName.replace(File.separatorChar, '_'); + displayName.replace(File.pathSeparatorChar, '_'); + remotepath += displayName + DisplayUtils.getComposedFileExtension(filepath); + + } + } finally { + cursor.close(); + } + + } else { + remotepath += new File(filepath).getName(); + } i.putExtra(FileUploader.KEY_LOCAL_FILE, filepath); i.putExtra(FileUploader.KEY_REMOTE_FILE, remotepath); + i.putExtra(FileUploader.KEY_MIME_TYPE, mimeType); i.putExtra(FileUploader.KEY_UPLOAD_TYPE, FileUploader.UPLOAD_SINGLE_FILE); if (resultCode == UploadFilesActivity.RESULT_OK_AND_MOVE) i.putExtra(FileUploader.KEY_LOCAL_BEHAVIOUR, FileUploader.LOCAL_BEHAVIOUR_MOVE); @@ -883,22 +922,74 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener { return dialog; } - /** - * Translates a content URI of an image to a physical path - * on the disk + * Translates a content URI of an content to a physical path on the disk + * * @param uri The URI to resolve - * @return The path to the image or null if it could not be found + * @return The path to the content or null if it could not be found */ public String getPath(Uri uri) { - String[] projection = { MediaStore.Images.Media.DATA }; - Cursor cursor = managedQuery(uri, projection, null, null, null); - if (cursor != null) { - int column_index = cursor - .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); - cursor.moveToFirst(); - return cursor.getString(column_index); - } + final boolean isKitKatOrLater = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; + + // DocumentProvider + if (isKitKatOrLater && DocumentsContract.isDocumentUri(getApplicationContext(), uri)) { + // ExternalStorageProvider + if (UriUtils.isExternalStorageDocument(uri)) { + final String docId = DocumentsContract.getDocumentId(uri); + final String[] split = docId.split(":"); + final String type = split[0]; + + if ("primary".equalsIgnoreCase(type)) { + return Environment.getExternalStorageDirectory() + "/" + split[1]; + } + } + // DownloadsProvider + else if (UriUtils.isDownloadsDocument(uri)) { + + final String id = DocumentsContract.getDocumentId(uri); + final Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), + Long.valueOf(id)); + + return UriUtils.getDataColumn(getApplicationContext(), contentUri, null, null); + } + // MediaProvider + else if (UriUtils.isMediaDocument(uri)) { + final String docId = DocumentsContract.getDocumentId(uri); + final String[] split = docId.split(":"); + final String type = split[0]; + + Uri contentUri = null; + if ("image".equals(type)) { + contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; + } else if ("video".equals(type)) { + contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; + } else if ("audio".equals(type)) { + contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; + } + + final String selection = "_id=?"; + final String[] selectionArgs = new String[] { split[1] }; + + return UriUtils.getDataColumn(getApplicationContext(), contentUri, selection, selectionArgs); + } + // Documents providers returned as content://... + else if (UriUtils.isContentDocument(uri)) { + return uri.toString(); + } + } + // MediaStore (and general) + else if ("content".equalsIgnoreCase(uri.getScheme())) { + + // Return the remote address + if (UriUtils.isGooglePhotosUri(uri)) + return uri.getLastPathSegment(); + + return UriUtils.getDataColumn(getApplicationContext(), uri, null, null); + } + // File + else if ("file".equalsIgnoreCase(uri.getScheme())) { + return uri.getPath(); + } return null; } diff --git a/src/com/owncloud/android/ui/activity/UploadFilesActivity.java b/src/com/owncloud/android/ui/activity/UploadFilesActivity.java index 83e7bc07..09185726 100644 --- a/src/com/owncloud/android/ui/activity/UploadFilesActivity.java +++ b/src/com/owncloud/android/ui/activity/UploadFilesActivity.java @@ -34,9 +34,6 @@ import android.widget.TextView; import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.app.ActionBar.OnNavigationListener; -import com.actionbarsherlock.internal.view.menu.ActionMenuItemView; -import com.actionbarsherlock.view.Menu; -import com.actionbarsherlock.view.MenuInflater; import com.actionbarsherlock.view.MenuItem; import com.owncloud.android.R; import com.owncloud.android.lib.common.utils.Log_OC; @@ -76,8 +73,6 @@ public class UploadFilesActivity extends FileActivity implements private static final String WAIT_DIALOG_TAG = "WAIT"; private static final String QUERY_TO_MOVE_DIALOG_TAG = "QUERY_TO_MOVE"; - private boolean selectAllToggled = false; - private Menu menu; @Override public void onCreate(Bundle savedInstanceState) { @@ -124,7 +119,6 @@ public class UploadFilesActivity extends FileActivity implements actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); actionBar.setListNavigationCallbacks(mDirectories, this); - // wait dialog if (mCurrentDialog != null) { mCurrentDialog.dismiss(); @@ -133,15 +127,8 @@ public class UploadFilesActivity extends FileActivity implements Log_OC.d(TAG, "onCreate() end"); } - @Override - public boolean onCreateOptionsMenu(Menu menu) { - // Inflate the menu items for use in the action bar - MenuInflater inflater = getSherlock().getMenuInflater(); - inflater.inflate(R.menu.file_select_all, menu); - this.menu = menu; - return true; - } - + + @Override public boolean onOptionsItemSelected(MenuItem item) { boolean retval = true; @@ -152,33 +139,12 @@ public class UploadFilesActivity extends FileActivity implements } break; } - case R.id.actionbar_select_all:{ - if(selectAllToggled){ - toggleOffSelectAll(); - }else{ - toggleOnSelectAll(item); - } - break; - } default: retval = super.onOptionsItemSelected(item); } return retval; } - public void toggleOffSelectAll(MenuItem item){ - selectAllToggled = false; - item.setIcon(android.R.drawable.checkbox_off_background); - mFileListFragment.deselectAll(); - } - public void toggleOffSelectAll(){ - MenuItem item = menu.findItem(R.id.actionbar_select_all); - toggleOffSelectAll(item); - } - public void toggleOnSelectAll(MenuItem item){ - selectAllToggled = true; - item.setIcon(android.R.drawable.checkbox_on_background); - mFileListFragment.selectAll(); - } + @Override public boolean onNavigationItemSelected(int itemPosition, long itemId) { @@ -209,7 +175,6 @@ public class UploadFilesActivity extends FileActivity implements ActionBar actionBar = getSupportActionBar(); actionBar.setDisplayHomeAsUpEnabled(false); } - toggleOffSelectAll(); } @@ -277,11 +242,10 @@ public class UploadFilesActivity extends FileActivity implements * {@inheritDoc} */ @Override - public void onDirectoryClick(File directory) { + public void onDirectoryClick(File directory) { pushDirname(directory); ActionBar actionBar = getSupportActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); - toggleOffSelectAll(); } diff --git a/src/com/owncloud/android/ui/activity/Uploader.java b/src/com/owncloud/android/ui/activity/Uploader.java index 66359f3d..6c8a1320 100644 --- a/src/com/owncloud/android/ui/activity/Uploader.java +++ b/src/com/owncloud/android/ui/activity/Uploader.java @@ -170,7 +170,7 @@ public class Uploader extends SherlockListActivity implements OnItemClickListene case DIALOG_MULTIPLE_ACCOUNT: CharSequence ac[] = new CharSequence[mAccountManager.getAccountsByType(MainApp.getAccountType()).length]; for (int i = 0; i < ac.length; ++i) { - ac[i] = mAccountManager.getAccountsByType(MainApp.getAccountType())[i].name; + ac[i] = DisplayUtils.convertIdn(mAccountManager.getAccountsByType(MainApp.getAccountType())[i].name, false); } builder.setTitle(R.string.common_choose_account); builder.setItems(ac, new OnClickListener() { diff --git a/src/com/owncloud/android/ui/adapter/FileListListAdapter.java b/src/com/owncloud/android/ui/adapter/FileListListAdapter.java index e002efb7..10356320 100644 --- a/src/com/owncloud/android/ui/adapter/FileListListAdapter.java +++ b/src/com/owncloud/android/ui/adapter/FileListListAdapter.java @@ -29,6 +29,7 @@ import android.content.Context; import android.content.SharedPreferences; import android.graphics.Bitmap; import android.preference.PreferenceManager; +import android.text.format.DateUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -46,6 +47,7 @@ import com.owncloud.android.datamodel.ThumbnailsCacheManager; import com.owncloud.android.datamodel.ThumbnailsCacheManager.AsyncDrawable; import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder; import com.owncloud.android.files.services.FileUploader.FileUploaderBinder; +import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.ui.activity.ComponentsGetter; import com.owncloud.android.utils.DisplayUtils; import com.owncloud.android.utils.FileStorageUtils; @@ -183,9 +185,7 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { fileSizeV.setVisibility(View.VISIBLE); fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.getFileLength())); lastModV.setVisibility(View.VISIBLE); - lastModV.setText( - DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp()) - ); + lastModV.setText(showRelativeTimestamp(file)); // this if-else is needed even thoe fav icon is visible by default // because android reuses views in listview if (!file.keepInSync()) { @@ -253,9 +253,7 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { // } lastModV.setVisibility(View.VISIBLE); - lastModV.setText( - DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp()) - ); + lastModV.setText(showRelativeTimestamp(file)); checkBoxV.setVisibility(View.GONE); view.findViewById(R.id.imageView3).setVisibility(View.GONE); @@ -517,5 +515,10 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { mSortAscending = ascending; sortDirectory(); - } + } + + private CharSequence showRelativeTimestamp(OCFile file){ + return DisplayUtils.getRelativeDateTimeString(mContext, file.getModificationTimestamp(), + DateUtils.SECOND_IN_MILLIS, DateUtils.WEEK_IN_MILLIS, 0); + } } diff --git a/src/com/owncloud/android/ui/fragment/ExtendedListFragment.java b/src/com/owncloud/android/ui/fragment/ExtendedListFragment.java index 5d3f7ace..1b7a1ddf 100644 --- a/src/com/owncloud/android/ui/fragment/ExtendedListFragment.java +++ b/src/com/owncloud/android/ui/fragment/ExtendedListFragment.java @@ -38,14 +38,14 @@ import com.owncloud.android.ui.ExtendedListView; import com.owncloud.android.ui.activity.OnEnforceableRefreshListener; /** - * TODO extending SherlockListFragment instead of SherlockFragment + * TODO extending SherlockListFragment instead of SherlockFragment */ public class ExtendedListFragment extends SherlockFragment implements OnItemClickListener, OnEnforceableRefreshListener { - + private static final String TAG = ExtendedListFragment.class.getSimpleName(); - private static final String KEY_SAVED_LIST_POSITION = "SAVED_LIST_POSITION"; + private static final String KEY_SAVED_LIST_POSITION = "SAVED_LIST_POSITION"; private static final String KEY_INDEXES = "INDEXES"; private static final String KEY_FIRST_POSITIONS= "FIRST_POSITIONS"; private static final String KEY_TOPS = "TOPS"; @@ -53,7 +53,7 @@ implements OnItemClickListener, OnEnforceableRefreshListener { private static final String KEY_EMPTY_LIST_MESSAGE = "EMPTY_LIST_MESSAGE"; protected ExtendedListView mList; - + private SwipeRefreshLayout mRefreshLayout; private SwipeRefreshLayout mRefreshEmptyLayout; private TextView mEmptyListMessage; @@ -72,18 +72,22 @@ implements OnItemClickListener, OnEnforceableRefreshListener { mList.invalidate(); } + public void setFooterView(View footer) { + mList.addFooterView(footer, null, false); + mList.invalidate(); + } + public ListView getListView() { return mList; } - - + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Log_OC.e(TAG, "onCreateView"); - + View v = inflater.inflate(R.layout.list_fragment, null); mEmptyListMessage = (TextView) v.findViewById(R.id.empty_list_view); - mList = (ExtendedListView)(v.findViewById(R.id.list_root)); + mList = (ExtendedListView) (v.findViewById(R.id.list_root)); mList.setOnItemClickListener(this); mList.setDivider(getResources().getDrawable(R.drawable.uploader_list_separator)); @@ -93,7 +97,7 @@ implements OnItemClickListener, OnEnforceableRefreshListener { int referencePosition = savedInstanceState.getInt(KEY_SAVED_LIST_POSITION); setReferencePosition(referencePosition); } - + // Pull down refresh mRefreshLayout = (SwipeRefreshLayout) v.findViewById(R.id.swipe_refresh_files); mRefreshEmptyLayout = (SwipeRefreshLayout) v.findViewById(R.id.swipe_refresh_files_emptyView); @@ -106,7 +110,6 @@ implements OnItemClickListener, OnEnforceableRefreshListener { return v; } - /** * {@inheritDoc} */ @@ -142,14 +145,16 @@ implements OnItemClickListener, OnEnforceableRefreshListener { savedInstanceState.putString(KEY_EMPTY_LIST_MESSAGE, getEmptyViewText()); } - /** - * Calculates the position of the item that will be used as a reference to reposition the visible items in the list when - * the device is turned to other position. + * Calculates the position of the item that will be used as a reference to + * reposition the visible items in the list when the device is turned to + * other position. * - * THe current policy is take as a reference the visible item in the center of the screen. + * THe current policy is take as a reference the visible item in the center + * of the screen. * - * @return The position in the list of the visible item in the center of the screen. + * @return The position in the list of the visible item in the center of the + * screen. */ protected int getReferencePosition() { if (mList != null) { @@ -159,11 +164,11 @@ implements OnItemClickListener, OnEnforceableRefreshListener { } } - /** * Sets the visible part of the list from the reference position. * - * @param position Reference position previously returned by {@link LocalFileListFragment#getReferencePosition()} + * @param position Reference position previously returned by + * {@link LocalFileListFragment#getReferencePosition()} */ protected void setReferencePosition(int position) { if (mList != null) { @@ -227,7 +232,7 @@ implements OnItemClickListener, OnEnforceableRefreshListener { @Override public void onItemClick (AdapterView parent, View view, int position, long id) { - // to be @overriden + // to be @overriden } @Override @@ -240,7 +245,6 @@ implements OnItemClickListener, OnEnforceableRefreshListener { mOnRefreshListener.onRefresh(); } } - public void setOnRefreshListener(OnEnforceableRefreshListener listener) { mOnRefreshListener = listener; } diff --git a/src/com/owncloud/android/ui/fragment/LocalFileListFragment.java b/src/com/owncloud/android/ui/fragment/LocalFileListFragment.java index 62b41a3e..c9408b1e 100644 --- a/src/com/owncloud/android/ui/fragment/LocalFileListFragment.java +++ b/src/com/owncloud/android/ui/fragment/LocalFileListFragment.java @@ -98,33 +98,13 @@ public class LocalFileListFragment extends ExtendedListFragment { Log_OC.i(TAG, "onActivityCreated() stop"); } - public void selectAll(){ - int numberOfFiles = mAdapter.getCount(); - for(int i = 0; i < numberOfFiles; i++){ - File file = (File) mAdapter.getItem(i); - if (file != null) { - if (!file.isDirectory()) { - /// Click on a file - getListView().setItemChecked(i, true); - // notify the change to the container Activity - mContainerActivity.onFileClick(file); - } - } - } - } - - public void deselectAll(){ - mAdapter = new LocalFileListAdapter(mContainerActivity.getInitialDirectory(), getActivity()); - setListAdapter(mAdapter); - } /** * Checks the file clicked over. Browses inside if it is a directory. Notifies the container activity in any case. */ @Override public void onItemClick(AdapterView l, View v, int position, long id) { - File file = (File) mAdapter.getItem(position); - + File file = (File) mAdapter.getItem(position); if (file != null) { /// Click on a directory if (file.isDirectory()) { diff --git a/src/com/owncloud/android/ui/fragment/OCFileListFragment.java b/src/com/owncloud/android/ui/fragment/OCFileListFragment.java index 0b1059fc..2a5de381 100644 --- a/src/com/owncloud/android/ui/fragment/OCFileListFragment.java +++ b/src/com/owncloud/android/ui/fragment/OCFileListFragment.java @@ -18,8 +18,10 @@ package com.owncloud.android.ui.fragment; import java.io.File; +import java.util.Vector; import android.app.Activity; +import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v4.widget.SwipeRefreshLayout; @@ -29,6 +31,8 @@ import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.AdapterContextMenuInfo; +import android.widget.TextView; +import android.view.LayoutInflater; import com.owncloud.android.R; import com.owncloud.android.datamodel.FileDataStorageManager; @@ -70,6 +74,7 @@ public class OCFileListFragment extends ExtendedListFragment { private OCFile mFile = null; private FileListListAdapter mAdapter; + private View mFooterView; private OCFile mTargetFile; @@ -112,24 +117,28 @@ public class OCFileListFragment extends ExtendedListFragment { public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Log_OC.e(TAG, "onActivityCreated() start"); - + if (savedInstanceState != null) { mFile = savedInstanceState.getParcelable(KEY_FILE); } - + + mFooterView = ((LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate( + R.layout.list_footer, null, false); + setFooterView(mFooterView); + Bundle args = getArguments(); boolean justFolders = (args == null) ? false : args.getBoolean(ARG_JUST_FOLDERS, false); mAdapter = new FileListListAdapter( justFolders, getSherlockActivity(), mContainerActivity - ); + ); setListAdapter(mAdapter); - + registerForContextMenu(getListView()); getListView().setOnCreateContextMenuListener(this); - } - + } + /** * Saves the current listed folder. */ @@ -384,9 +393,51 @@ public class OCFileListFragment extends ExtendedListFragment { mList.setSelectionFromTop(0, 0); } mFile = directory; + + // Update Footer + TextView footerText = (TextView) mFooterView.findViewById(R.id.footerText); + Log_OC.d("footer", String.valueOf(System.currentTimeMillis())); + footerText.setText(generateFooterText(directory)); + Log_OC.d("footer", String.valueOf(System.currentTimeMillis())); } } + private String generateFooterText(OCFile directory) { + Integer files = 0; + Integer folders = 0; + + FileDataStorageManager storageManager = mContainerActivity.getStorageManager(); + Vector mFiles = storageManager.getFolderContent(mFile); + + for (OCFile ocFile : mFiles) { + if (ocFile.isFolder()) { + folders++; + } else { + files++; + } + } + + String output = ""; + + if (files > 0){ + if (files == 1) { + output = output + files.toString() + " " + getResources().getString(R.string.file_list_file); + } else { + output = output + files.toString() + " " + getResources().getString(R.string.file_list_files); + } + } + if (folders > 0 && files > 0){ + output = output + ", "; + } + if (folders == 1) { + output = output + folders.toString() + " " + getResources().getString(R.string.file_list_folder); + } else if (folders > 1) { + output = output + folders.toString() + " " + getResources().getString(R.string.file_list_folders); + } + + return output; + } + public void sortByName(boolean descending) { mAdapter.setSortOrder(FileListListAdapter.SORT_NAME, descending); } diff --git a/src/com/owncloud/android/utils/DisplayUtils.java b/src/com/owncloud/android/utils/DisplayUtils.java index 804a4dd0..da81f539 100644 --- a/src/com/owncloud/android/utils/DisplayUtils.java +++ b/src/com/owncloud/android/utils/DisplayUtils.java @@ -27,7 +27,10 @@ import java.util.HashSet; import java.util.Set; import android.annotation.TargetApi; +import android.content.Context; import android.os.Build; +import android.text.format.DateFormat; +import android.text.format.DateUtils; import com.owncloud.android.MainApp; import com.owncloud.android.R; @@ -274,4 +277,47 @@ public class DisplayUtils { return url; } } + + /** + * Get the file extension if it is on path as type "content://.../DocInfo.doc" + * @param filepath: Content Uri converted to string format + * @return String: fileExtension (type '.pdf'). Empty if no extension + */ + public static String getComposedFileExtension(String filepath) { + String fileExtension = ""; + String fileNameInContentUri = filepath.substring(filepath.lastIndexOf("/")); + + // Check if extension is included in uri + int pos = fileNameInContentUri.lastIndexOf('.'); + if (pos >= 0) { + fileExtension = fileNameInContentUri.substring(pos); + } + return fileExtension; + } + + public static CharSequence getRelativeDateTimeString(Context c, long time, long minResolution, long transitionResolution, int flags){ + CharSequence dateString = ""; + + // in Future + if (time > System.currentTimeMillis()){ + return DisplayUtils.unixTimeToHumanReadable(time); + } + // < 60 seconds -> seconds ago + else if ((System.currentTimeMillis() - time) < 60 * 1000) { + return c.getString(R.string.file_list_seconds_ago); + } else { + // Workaround 2.x bug (see https://github.com/owncloud/android/issues/716) + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.HONEYCOMB && (System.currentTimeMillis() - time) > 24 * 60 * 60 * 1000){ + Date date = new Date(time); + date.setHours(0); + date.setMinutes(0); + date.setSeconds(0); + dateString = DateUtils.getRelativeDateTimeString(c, date.getTime(), minResolution, transitionResolution, flags); + } else { + dateString = DateUtils.getRelativeDateTimeString(c, time, minResolution, transitionResolution, flags); + } + } + + return dateString.toString().split(",")[0]; + } } diff --git a/src/com/owncloud/android/utils/UriUtils.java b/src/com/owncloud/android/utils/UriUtils.java new file mode 100644 index 00000000..e66d2c9f --- /dev/null +++ b/src/com/owncloud/android/utils/UriUtils.java @@ -0,0 +1,103 @@ +/* ownCloud Android client application + * Copyright (C) 2012-2014 ownCloud Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +package com.owncloud.android.utils; + +import android.content.Context; +import android.database.Cursor; +import android.net.Uri; + + +/** + * A helper class for some Uri operations. + */ +public class UriUtils { + + public static final String URI_CONTENT_SCHEME = "content://"; + + + /** + * Get the value of the data column for this Uri. This is useful for + * MediaStore Uris, and other file-based ContentProviders. + * + * @param context The context. + * @param uri The Uri to query. + * @param selection (Optional) Filter used in the query. + * @param selectionArgs (Optional) Selection arguments used in the query. + * @return The value of the _data column, which is typically a file path. + */ + public static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) { + + Cursor cursor = null; + final String column = "_data"; + final String[] projection = { column }; + + try { + cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null); + if (cursor != null && cursor.moveToFirst()) { + + final int column_index = cursor.getColumnIndexOrThrow(column); + return cursor.getString(column_index); + } + } finally { + if (cursor != null) + cursor.close(); + } + return null; + } + + /** + * @param uri The Uri to check. + * @return Whether the Uri authority is ExternalStorageProvider. + */ + public static boolean isExternalStorageDocument(Uri uri) { + return "com.android.externalstorage.documents".equals(uri.getAuthority()); + } + + /** + * @param uri The Uri to check. + * @return Whether the Uri authority is DownloadsProvider. + */ + public static boolean isDownloadsDocument(Uri uri) { + return "com.android.providers.downloads.documents".equals(uri.getAuthority()); + } + + /** + * @param uri The Uri to check. + * @return Whether the Uri authority is MediaProvider. + */ + public static boolean isMediaDocument(Uri uri) { + return "com.android.providers.media.documents".equals(uri.getAuthority()); + } + + /** + * @param uri The Uri to check. + * @return Whether the Uri authority is Google Photos. + */ + public static boolean isGooglePhotosUri(Uri uri) { + return "com.google.android.apps.photos.content".equals(uri.getAuthority()); + } + + /** + * + * @param uri The Uri to check. + * @return Whether the Uri is from a content provider as kind "content://..." + */ + public static boolean isContentDocument(Uri uri) { + return uri.toString().startsWith(URI_CONTENT_SCHEME); + } +} diff --git a/tests/.classpath b/tests/.classpath index 26d8fe48..9b141f6f 100644 --- a/tests/.classpath +++ b/tests/.classpath @@ -1,10 +1,10 @@ + + - -