From: tobiasKaminsky Date: Fri, 13 Nov 2015 16:39:24 +0000 (+0100) Subject: Merge remote-tracking branch 'remotes/upstream/master' into beta X-Git-Tag: beta-20151122~27 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/7d6a3630aebda914cd053b3c6f577ac4cb69ef7a?hp=87cdd9e5feabead780fdc37e5fb44a81cd5c39fa Merge remote-tracking branch 'remotes/upstream/master' into beta --- diff --git a/res/layout/ssl_untrusted_cert_layout.xml b/res/layout/ssl_untrusted_cert_layout.xml index 9e195b5c..8b6d502b 100644 --- a/res/layout/ssl_untrusted_cert_layout.xml +++ b/res/layout/ssl_untrusted_cert_layout.xml @@ -377,7 +377,6 @@ android:text="" android:textAppearance="?android:attr/textAppearanceSmall" /> - - - + + android:text="@string/ssl_validator_label_certificate_fingerprint" + android:textAppearance="?android:attr/textAppearanceSmall" + /> + + diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index 0f71060c..81613eac 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -255,4 +255,6 @@ اختيار الأمان عنوان الخادم + مشاركة + البحث diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml index cff94283..d3cd832e 100644 --- a/res/values-az/strings.xml +++ b/res/values-az/strings.xml @@ -285,6 +285,9 @@ inzibatçınızla əlaqə saxlayasınız. Anında yükləmələr Təhlükəsizlik Video ünvanını yüklə + %1$s paylaşdı \"%2$s\" sizinlə Qoşulmanı yenilə Server ünvanı + Paylaşılır + Axtarış diff --git a/res/values-bg-rBG/strings.xml b/res/values-bg-rBG/strings.xml index e4f83808..eea53c9c 100644 --- a/res/values-bg-rBG/strings.xml +++ b/res/values-bg-rBG/strings.xml @@ -303,7 +303,7 @@ Качване на видео път споделен с теб - %1$s споделен \"%2$s\" с теб + %1$s споделен \"%2$s\" с теб Обнови връзката Адрес на сървъра Няма достатъчно памет @@ -316,4 +316,6 @@ %1$d файла %1$d файла, 1 папка %1$d файла, %2$d папки + Споделяне + Търсене diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn-rBD/strings.xml index bb44ce1b..49df5a65 100644 --- a/res/values-bn-rBD/strings.xml +++ b/res/values-bn-rBD/strings.xml @@ -254,4 +254,6 @@ সরাতে ব্যার্থ হলো। ফাইলটি রয়েছে কিনা দেখুন। নিরাপত্তা সার্ভার ঠিকানা + ভাগাভাগিরত + অনুসন্ধান diff --git a/res/values-bn-rIN/strings.xml b/res/values-bn-rIN/strings.xml index d5295615..87b4b203 100644 --- a/res/values-bn-rIN/strings.xml +++ b/res/values-bn-rIN/strings.xml @@ -23,4 +23,5 @@ পুনঃনামকরণ সরান + অনুসন্ধান diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml index 6ab99c93..4ce4a45e 100644 --- a/res/values-bs/strings.xml +++ b/res/values-bs/strings.xml @@ -38,4 +38,6 @@ Izaberite Sigurnost Adresa servera + Dijeljenje + Potraži diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml index 6c197180..b860271b 100644 --- a/res/values-ca/strings.xml +++ b/res/values-ca/strings.xml @@ -261,4 +261,6 @@ Escull Seguretat Adreça del servidor + Compartir + Cerca diff --git a/res/values-cs-rCZ/strings.xml b/res/values-cs-rCZ/strings.xml index 82845668..5941be1b 100644 --- a/res/values-cs-rCZ/strings.xml +++ b/res/values-cs-rCZ/strings.xml @@ -84,6 +84,7 @@ Náhled seznamu Sdílet odkaz Zrušit sdílení odkazu + Sdílet s uživateli Ano Ne OK @@ -243,6 +244,9 @@ Pro: Podpis: Alogritmus: + Tento algoritmus není na vašem telefonu dostupný. + Otisk: + Došlo k problému s načtením certifikátu. Certifikát nemohl být zobrazen. - Žádné informace o této chybě Zástupný text @@ -317,8 +321,8 @@ správce systému. Synchronizaci adresáře %1$s nelze dokončit sdílené s vámi - %1$s s vámi sdílí \"%2$s\" - \"%1$s\" ti byl nasdílen + %1$s s vámi sdílí \"%2$s\" + \"%1$s\" ti byl nasdílen Obnovit připojení Adresa serveru Nedostatek paměti @@ -331,4 +335,13 @@ správce systému. %1$d soubory(ů) %1$d soubory(ů), 1 adresář %1$d soubory(ů), %2$d adresáře(ů) + Sdílení + Sdílet s uživateli a skupinami + Zatím nebyla s uživateli sdílena žádná data + Přidat uživatele nebo skupinu + Hledat + Prohledat uživatele a skupiny + %1$s (skupina) + Omlouváme se, verze vašeho serveru neumožňuje v klientské aplikaci sdílení dat mezi uživateli. +\nKontaktujte prosím svého administrátora diff --git a/res/values-cy-rGB/strings.xml b/res/values-cy-rGB/strings.xml index 7a533cda..d3b885d2 100644 --- a/res/values-cy-rGB/strings.xml +++ b/res/values-cy-rGB/strings.xml @@ -130,4 +130,5 @@ Cyfrifon Dewisiwch + Chwilio diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index fab5433d..be4c942e 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -313,8 +313,8 @@ Sti til videoupload delt med dig - %1$s delte \"%2$s\" med dig - \"%1$s\" er blevet delt med dig + %1$s delte \"%2$s\" med dig + \"%1$s\" er blevet delt med dig Genopfrisk forbindelsen Serveradresse Ikke tilstrækkelig hukommelse @@ -327,4 +327,6 @@ %1$d filer %1$d filer, 1 mape %1$d filer, %2$d mapper + Deling + Søg diff --git a/res/values-de-rDE/strings.xml b/res/values-de-rDE/strings.xml index fe3762ad..45e371e2 100644 --- a/res/values-de-rDE/strings.xml +++ b/res/values-de-rDE/strings.xml @@ -306,8 +306,8 @@ Verzeichnis zum Hochladen der Videos geteilt Mit Ihnen - %1$s hat \"%2$s\" mit Ihnen geteilt - \"%1$s\" wurde mit dir geteilt + %1$s hat \"%2$s\" mit Ihnen geteilt + \"%1$s\" wurde mit dir geteilt Verbindung aktualisieren Serveradresse Nicht genügend Speicher @@ -320,4 +320,6 @@ %1$d Dateien %1$d Dateien, 1 Ordner %1$d Dateien, %2$d Ordner + Teilen + Suche diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 2ffd10f4..c84258dd 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -315,8 +315,8 @@ Verzeichnis zum Hochladen der Videos geteilt Mit Dir - %1$s hat \"%2$s\" mit Dir geteilt - \"%1$s\" wurde mit dir geteilt + %1$s hat \"%2$s\" mit Dir geteilt + \"%1$s\" wurde mit dir geteilt Verbindung aktualisieren Serveradresse Nicht genügend Speicher @@ -329,4 +329,6 @@ %1$d Dateien %1$d Dateien, 1 Ordner %1$d Dateien, %2$d Ordner + Teilen + Suche diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index db30343e..66df5fdc 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -84,6 +84,7 @@ Διάταξη Λίστας Διαμοιρασμός συνδέσμου Ακύρωση διαμοιρασμού συνδέσμου + Διαμοιρασμός με χρήστες Ναι Όχι ΟΚ @@ -244,6 +245,9 @@ Μέχρι: Υπογραφή: Αλγόριθμος: + Ο αλγόριθμος digest δεν είναι διαθέσιμος στο τηλέφωνό σας. + Ψηφιακό αποτύπωμα: + Πρόβλημα φόρτωσης του πιστοποιητικού. Δεν μπορεί να εμφανιστεί το πιστοποιητικό. - Καμμία πληροφορία σχετικά με το σφάλμα Αυτό είναι ένα σημείο κράτησης θέσης @@ -318,8 +322,8 @@ Ο συγχρονισμός του φακέλου %1$s δεν μπόρεσε να ολοκληρωθεί διαμοιρασμένα με εσάς - Ο %1$s διαμοιράστηκε το \"%2$s\" με εσάς - \"%1$s\" μοιράστηκε μαζί σας + Ο %1$s διαμοιράστηκε το \"%2$s\" με εσάς + \"%1$s\" μοιράστηκε μαζί σας Ανανέωση σύνδεσης Διεύθυνση διακομιστή Δεν υπάρχει αρκετή μνήμη @@ -332,4 +336,13 @@ %1$d αρχεία %1$d αρχεία, 1 φάκελος %1$d αρχεία, %2$d φάκελοι + Διαμοιρασμός + Διαμοιρασμός με χρήστες και ομάδες + Δεν έχουν διαμοιραστεί ακόμα δεδομένα με τους χρήστες + Προσθήκη χρήστη ή ομάδας + Αναζήτηση + Αναζήτηση χρηστών και ομάδων + %1$s (ομάδα) + Δεν επιτρέπεται ο διαμοιρασμός μεταξύ χρηστών μέσω εφαρμογής, σε αυτή την έκδοση. +\nΕπικοινωνήστε με το διαχειριστή του συστήματος diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml index 164b1541..5fc8dfd5 100644 --- a/res/values-en-rGB/strings.xml +++ b/res/values-en-rGB/strings.xml @@ -295,7 +295,10 @@ Instant Uploads Security Upload Video Path + %1$s shared \"%2$s\" with you Refresh connection Server address Not enough memory + Sharing + Search diff --git a/res/values-eo/strings.xml b/res/values-eo/strings.xml index 392cd138..4d98b491 100644 --- a/res/values-eo/strings.xml +++ b/res/values-eo/strings.xml @@ -186,4 +186,6 @@ Servila adreso 1 dosiero %1$d dosieroj + Kunhavigo + Serĉi diff --git a/res/values-es-rAR/strings.xml b/res/values-es-rAR/strings.xml index 13f62744..61655826 100644 --- a/res/values-es-rAR/strings.xml +++ b/res/values-es-rAR/strings.xml @@ -276,4 +276,6 @@ Seguridad Dirección de subida del video Dirección del servidor + Compartiendo + Buscar diff --git a/res/values-es-rMX/strings.xml b/res/values-es-rMX/strings.xml index 4a76217c..dc31f88b 100644 --- a/res/values-es-rMX/strings.xml +++ b/res/values-es-rMX/strings.xml @@ -206,4 +206,6 @@ Seleccionar Seguridad Dirección del servidor + Compartiendo + Buscar diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index def12c0c..0f77b149 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -84,6 +84,7 @@ Diseño de lista Compartir con enlace Dejar de compartir + Compartir con usuarios Sí No Aceptar @@ -244,6 +245,8 @@ A: Firma: Algoritmo: + Firma: + Existe un problema al cargar el certificado. No se ha podido mostrar el certificado - No hay información acerca del error Esto es un marcador de posición @@ -318,8 +321,8 @@ La sincronización de la carpeta %1$s no se pudo completar compartido con usted - %1$s compartió \"%2$s\" conmigo - \"%1$s\" ha sido compartido con usted. + %1$s compartió \"%2$s\" conmigo + \"%1$s\" ha sido compartido con usted. Refrescar la conexión Dirección del servidor No hay suficiente memoria @@ -332,4 +335,12 @@ %1$d archivos %1$d archivos, 1 carpeta %1$d archivos, %2$d carpetas + Compartiendo + Compartir con Usuarios y Grupos + Aún no se ha compartido con ningún usuario. + Añadir usuario o grupo + Buscar + Buscar usuarios y grupos + %1$s (grupo) + Lo siento, compartir no está disponible en su servidor.\nPor favor, contacte con su administrador diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml index fc6d949b..7167dc53 100644 --- a/res/values-et-rEE/strings.xml +++ b/res/values-et-rEE/strings.xml @@ -318,8 +318,8 @@ Allpool on loend kohalikest failidest ning serveris asuvatest failidest %5$s, mi Video üleslaadimise asukoht jagatud sinuga - %1$s jagas sinuga \"%2$s\" - \"%1$s\" on sinuga jagatud + %1$s jagas sinuga \"%2$s\" + \"%1$s\" on sinuga jagatud Värskenda ühendust Serveri aadress Mälu pole piisavalt @@ -332,4 +332,6 @@ Allpool on loend kohalikest failidest ning serveris asuvatest failidest %5$s, mi %1$d faili %1$d faili, 1 kaust %1$d faili, %2$d kausta + Jagamine + Otsi diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml index 3f9e5cf0..7cb8302d 100644 --- a/res/values-eu/strings.xml +++ b/res/values-eu/strings.xml @@ -276,4 +276,6 @@ Mesedez, baimendu berriz Segurtasuna Bideo Igoera Bidea Zerbitzariaren helbidea + Partekatzea + Bilatu diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index 42024954..35696da1 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -281,8 +281,8 @@ مسیر آپلود ویدئو به اشتراک گذاشته شد با تو - \"%2$s\" توسط %1$s با شما به اشتراک گذاشته شد - \"%1$s\" با شما به اشتراک گذاشته شد + \"%2$s\" توسط %1$s با شما به اشتراک گذاشته شد + \"%1$s\" با شما به اشتراک گذاشته شد بروزرسانی ارتباط آدرس سرور حافظه کافی وجود ندارد @@ -295,4 +295,6 @@ %1$d فایل %1$d فایل، 1 پوشه %1$d فایل, %2$d پوشه + اشتراک گذاری + جست‌و‌جو diff --git a/res/values-fi-rFI/strings.xml b/res/values-fi-rFI/strings.xml index 1e61d6d2..7db80666 100644 --- a/res/values-fi-rFI/strings.xml +++ b/res/values-fi-rFI/strings.xml @@ -84,6 +84,7 @@ Luettelon asettelu Jaa linkki Poista linkin jako + Jaa käyttäjien kanssa Kyllä Ei OK @@ -235,6 +236,8 @@ Päättyen: Allekirjoitus: Algoritmi: + Sormenjälki: + Varmennetta ladatessa ilmeni ongelmia. Varmennetta ei voi näyttää. - Ei lisätietoja virheestä PNG-kuva @@ -295,11 +298,12 @@ Tätä tiedostoa tai kansiota kopioitaessa tapahtui virhe Välittömät lähetykset Tietoturva + Videoiden lähetyspolku Kansion %1$s synkronointia ei voitu suorittaa kokonaan jaettu kanssasi - %1$s jakoi kohteen \"%2$s\" kanssasi - \"%1$s\" on jaettu kanssasi + %1$s jakoi kohteen \"%2$s\" kanssasi + \"%1$s\" on jaettu kanssasi Päivitä yhteys Palvelimen osoite Muistia ei ole riittävästi @@ -312,4 +316,10 @@ %1$d tiedostoa %1$d tiedostoa, 1 kansio %1$d tiedostoa, %2$d kansiota + Jakaminen + Jaa käyttäjien tai ryhmien kanssa + Lisää käyttäjä tai ryhmä + Etsi + Etsi käyttäjiä ja ryhmiä + %1$s (ryhmä) diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index c281aabc..260ffbdf 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -85,6 +85,7 @@ Téléchargez-le ici : %2$s Affichage en liste Partager le lien Ne plus partager ce lien + Partager avec des utilisateurs Oui Non OK @@ -249,6 +250,9 @@ Ci-dessous la liste des fichiers locaux, et les fichiers distants dans %5$s auxq Au : Signature : Algorithme : + Cet algorithme de hachage n\'est pas disponible sur votre téléphone. + Empreinte numérique : + Le chargement du certificat pose problème. Impossible d\'afficher le certificat. - Aucune information sur l\'erreur Ceci est un espace réservé @@ -322,8 +326,8 @@ Ci-dessous la liste des fichiers locaux, et les fichiers distants dans %5$s auxq La synchronisation du dossier %1$s n\'a pas pu être terminée a partagé avec vous - %1$s a partagé \"%2$s\" avec vous - \"%1$s\" a été partagé avec vous + %1$s a partagé \"%2$s\" avec vous + \"%1$s\" a été partagé avec vous Actualiser la connexion Adresse du serveur Mémoire insuffisante @@ -336,4 +340,13 @@ Ci-dessous la liste des fichiers locaux, et les fichiers distants dans %5$s auxq %1$d fichiers %1$d fichiers, 1 dossier %1$d fichiers, %2$d dossiers + Partage + Partager avec des Utilisateurs et des Groupes + Aucune donnée partagée avec des utilisateurs pour le moment + Ajouter un Utilisateur ou un Groupe + Rechercher + Chercher parmi les utilisateurs et groupes + %1$s (groupe) + Désolé, la version du serveur ne permet pas aux applications d\'initier des partage avec d\'autres utilisateurs. +\nVeuillez contacter votre administrateur diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml index 5c336896..68ad0a43 100644 --- a/res/values-gl/strings.xml +++ b/res/values-gl/strings.xml @@ -72,6 +72,7 @@ Descárgueo de aquí: %2$s segundos atrás Aquí non hai nada. Envíe algo! Cargando... + Non se atopou un App para este tipo de ficheiro! Non hai ficheiros neste cartafol. Prema nun ficheiro para que amose a información adicional. Tamaño: @@ -79,13 +80,16 @@ Descárgueo de aquí: %2$s Creado: Modificado: Descargar + Sincronizar O ficheiro foi renomeado a %1$s durante o envío Deseño da lista Ligazón para compartir Deixar de compartir a ligazón + Compartir con usuarios Si Non Aceptar + Parar a sincronización Cancelar Gardar e saír Erro @@ -200,6 +204,7 @@ Descárgueo de aquí: %2$s Confirma que quere retirar %1$s e o seu contido? Só local Só local + Desde servidor Remoto e local Retirado correctamente Non foi posíbel retiralo @@ -304,14 +309,19 @@ Descárgueo de aquí: %2$s Este ficheiro xa existe no cartafol de destino Produciuse un erro ao tentar mover este ficheiro ou cartafol. para mover este ficheiro + Non se puido copiar. Por favor comprobe que o ficheiro existe + Non é posible copiar un cartafol nun descendente seu Este ficheiro xa existe no cartafol de destino + Oconteceu un erro mentras se intentaba copiar este ficheiro ou cartafol + copiar este ficheiro Envío instantáneo Seguridade Enviar a ruta do vídeo + A sincronización do cartafol %1$s non se completou compartido con vostede - %1$s compartiu «%2$s» con vostede - «%1$s» foi compartido con vostede + %1$s compartiu «%2$s» con vostede + «%1$s» foi compartido con vostede Actualizar a conexión Enderezo do servidor Non hai memoria abondo @@ -324,4 +334,13 @@ Descárgueo de aquí: %2$s %1$d ficheiros %1$d ficheiros, 1 cartafol %1$d ficheiros, %2$d cartafoles + Compartindo + Compartir con Usuarios e Grupos + Aínda non hai datos compartidos con usuarios + Engadir Usuario ou Grupo + Buscar + Buscar usuarios e grupos + %1$s (grupo) + Sentímolo, pero a versión do seu servidor non permite compartir con usuarios desde o cliente. +\nPor favor contacte co seu administrador diff --git a/res/values-he/strings.xml b/res/values-he/strings.xml index 09d3d11b..14c8156d 100644 --- a/res/values-he/strings.xml +++ b/res/values-he/strings.xml @@ -251,4 +251,6 @@ בחירה אבטחה כתובת שרת + שיתוף + חיפוש diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml index 13403e8e..6fba8ee6 100644 --- a/res/values-hr/strings.xml +++ b/res/values-hr/strings.xml @@ -65,4 +65,6 @@ Odaberite Sigurnost Adresa poslužitelja + Dijeljenje zajedničkih resursa + pretraži diff --git a/res/values-hu-rHU/strings.xml b/res/values-hu-rHU/strings.xml index 2b24506e..aea6f628 100644 --- a/res/values-hu-rHU/strings.xml +++ b/res/values-hu-rHU/strings.xml @@ -267,4 +267,6 @@ %1$d fájl %1$d fájl, 1 könyvtár %1$d fájl, %2$d könyvtár + Megosztás + Keresés diff --git a/res/values-ia/strings.xml b/res/values-ia/strings.xml index abaae5c4..666c923b 100644 --- a/res/values-ia/strings.xml +++ b/res/values-ia/strings.xml @@ -45,4 +45,5 @@ Contos Contrasigno errate Seliger + Cercar diff --git a/res/values-id/strings.xml b/res/values-id/strings.xml index 1d919f4a..f1f7d9fe 100644 --- a/res/values-id/strings.xml +++ b/res/values-id/strings.xml @@ -315,8 +315,8 @@ Unggah Lokasi Video dibagikan kepada Anda - %1$s dibagikan \"%2$s\" kepada Anda - \"%1$s\" telah membagikan dengan Anda + %1$s dibagikan \"%2$s\" kepada Anda + \"%1$s\" telah membagikan dengan Anda Menyegarkan sambungan Alamat server Memori tidak cukup @@ -329,4 +329,9 @@ %1$d berkas %1$d berkas, 1 folder %1$d berkas, %2$d folder + Berbagi + Bagikan dengan Pengguna dan Grup + Tidak ada data yang dibagikan dengan pengguna + Tambah Pengguna atau Grup + Cari diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml index 30fe19e8..046a7969 100644 --- a/res/values-is/strings.xml +++ b/res/values-is/strings.xml @@ -35,4 +35,5 @@ Færa Veldu Host nafn netþjóns + Leita diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index b1c227ad..3a2e02cb 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -84,6 +84,7 @@ Struttura elenco Condividi collegamento Rimuovi condivisione collegamento + Condividi con utenti Sì No OK @@ -244,6 +245,9 @@ A: Firma: Algoritmo: + Questo algoritmo digest non è disponibile sul tuo telefono. + Impronta digitale: + Si è verificato un problema durante il caricamento del certificato. Il certificato non può essere mostrato. - Nessuna informazione sull\'errore Questo è un segnaposto @@ -318,8 +322,8 @@ La sincronizzazione della cartella %1$s non può essere completata condiviso con te - %1$s ha condiviso \"%2$s\" con te - \"%1$s\" è stato condiviso con te + %1$s ha condiviso \"%2$s\" con te + \"%1$s\" è stato condiviso con te Aggiorna la connessione Indirizzo del server Memoria insufficiente @@ -332,4 +336,13 @@ %1$d file %1$d file, 1 cartella %1$d file, %2$d cartelle + Condivisione + Condividi con utenti e gruppi + Ancora nessun dato condiviso con gli utenti + Aggiungi utente o gruppo + Cerca + Cerca utenti e gruppi + %1$s (gruppo) + Spiacenti, la versione del tuo server non consente la condivisione con utenti dai client. +\nContatta il tuo amministratore. diff --git a/res/values-ja-rJP/strings.xml b/res/values-ja-rJP/strings.xml index e33664af..d17876a8 100644 --- a/res/values-ja-rJP/strings.xml +++ b/res/values-ja-rJP/strings.xml @@ -72,6 +72,7 @@ 数秒前 ここには何もありません。何かアップロードしてください。 読込中... + この種類のファイルに対応するアプリはありません! このフォルダーにはファイルがありません。 ファイルをタップすると追加情報が表示されます。 サイズ: @@ -79,13 +80,16 @@ 作成: 更新: ダウンロード + ファイルを同期 アップロード中にファイル名を %1$s に変更しました リストレイアウト URLで共有 未共有のリンク + ユーザーと共有 はい いいえ OK + 同期をキャンセル キャンセル 保存して終了 エラー @@ -200,6 +204,8 @@ 本当に %1$s およびそのコンテンツを削除してもよろしいですか? ローカルのみ ローカルのみ + サーバーから + リモートとローカルの両方 削除に成功しました 削除を完了できませんでした 新しい名前を入力 @@ -240,6 +246,9 @@ 先: 署名: アルゴリズム: + このスマートフォンでは、ダイジェストアルゴリズムが利用できません。 + フィンガープリント: + 証明書の読み込みに問題がありました。 証明書が表示できません。 -エラーについての詳細情報はありません これはプレースホルダです @@ -254,6 +263,8 @@ ファイルが競合 どちらのファイルを保存したいですか?両方のバージョンを選択した場合は、ファイル名の後ろに数字を追加したファイルのコピーを作成します。 両方を保持 + ローカルのもの + サーバーのもの イメージプレビュー この画像は表示できません %1$s は、ローカルフォルダー %2$s にコピーできませんでした。 @@ -301,14 +312,19 @@ そのファイルは宛先フォルダーにすでに存在します。 このファイルまたはフォルダーを移動する際にエラーが発生しました このファイルを移動 + コピーできません。ファイルがあるか確認してください。 + フォルダーを子フォルダーへコピーすることはできません。 そのファイルは宛先フォルダーにすでに存在します。 + このファイルまたはフォルダーをコピーする際にエラーが発生しました + このファイルをコピー 自動アップロード セキュリティ 動画のアップロードパス + %1$s フォルダーの同期が完了しませんでした。 共有中 あなたと - %1$s は \"%2$s\" をあなたと共有しました - \"%1$s\" があなたと共有しました + %1$s は \"%2$s\" をあなたと共有しました + \"%1$s\" があなたと共有しました 再接続中 サーバーアドレス 十分なメモリがありません @@ -321,4 +337,13 @@ %1$d ファイル %1$d ファイル、1 フォルダー %1$d ファイル、%2$d フォルダー + 共有 + ユーザーまたはグループに共有 + ユーザーと共有されているデータはありません + ユーザーまたはグループを追加 + 検索 + ユーザーとグループを検索 + %1$s (グループ) + 申し訳ありませんが、このサーバーのバージョンではこのクライアントアプリ上で他のユーザーと共有することができません。 + \n管理者に相談してしてください。 diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml index b7b7c7bb..06bf89b1 100644 --- a/res/values-ka-rGE/strings.xml +++ b/res/values-ka-rGE/strings.xml @@ -141,4 +141,6 @@ არჩევა უსაფრთხოება სერვერის მისამართი + გაზიარება + ძებნა diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml index 1c2cd314..1c9ef992 100644 --- a/res/values-km/strings.xml +++ b/res/values-km/strings.xml @@ -103,4 +103,6 @@ ជ្រើស សុវត្ថិភាព អាសយដ្ឋាន​ម៉ាស៊ីន​បម្រើ + ការ​ចែក​រំលែក + ស្វែង​រក diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml index 51535d9d..4ca45b17 100644 --- a/res/values-kn/strings.xml +++ b/res/values-kn/strings.xml @@ -39,4 +39,6 @@ ಆಯ್ಕೆ ಭದ್ರತೆ ಪರಿಚಾರಕ ಗಣಕಯಂತ್ರದ ವಿಳಾಸ + ಹಂಚಿಕೆ + ಹುಡುಕು diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index cbde7a66..c856bf33 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -314,8 +314,8 @@ 동영상 업로드 경로 공유됨 여러분과 - %1$s 님이 \"%2$s\" 항목을 여러분과 공유하였습니다 - \"%1$s\"을(를) 여러분과 공유하였습니다 + %1$s 님이 \"%2$s\" 항목을 여러분과 공유하였습니다 + \"%1$s\"을(를) 여러분과 공유하였습니다 연결 새로 고침 서버 주소 메모리 부족 @@ -328,4 +328,9 @@ 파일 %1$d개 파일 %1$d개, 폴더 1개 파일 %1$d개, 폴더 %2$d개 + 공유 + Share with Users and Groups + No data shared with users yet + Add User or Group + 검색 diff --git a/res/values-ku-rIQ/strings.xml b/res/values-ku-rIQ/strings.xml index af1edacf..e03d0801 100644 --- a/res/values-ku-rIQ/strings.xml +++ b/res/values-ku-rIQ/strings.xml @@ -37,4 +37,5 @@ هەژمارەکان ناونیشانی ڕاژه + بگەڕێ diff --git a/res/values-lb/strings.xml b/res/values-lb/strings.xml index 5c4010d0..1c958f38 100644 --- a/res/values-lb/strings.xml +++ b/res/values-lb/strings.xml @@ -227,6 +227,8 @@ Direkt eropgeluede Fichieren Sécherheet Pad fir d\'Eropluede vun de Videoen + %1$s huet \"%2$s\" mat dir gedeelt Connectioun opfrëschen Server-Adress + Sichen diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml index fe17441b..87c1a8b4 100644 --- a/res/values-lo/strings.xml +++ b/res/values-lo/strings.xml @@ -8,4 +8,5 @@ On device--> ຂໍ້ຜິດພາດທີ່ບໍ່ຮູ້ສາເຫດ + ການແບ່ງປັນ diff --git a/res/values-lt-rLT/strings.xml b/res/values-lt-rLT/strings.xml index 02c2bd5a..1459761d 100644 --- a/res/values-lt-rLT/strings.xml +++ b/res/values-lt-rLT/strings.xml @@ -316,8 +316,8 @@ %1$s sinchronizavimas negali būti užbaigtas. Dalinamasi su jumis - %1$s dalinamasi \"%2$s\" su jumis - \"%1$s\" dalinamasi su jumis + %1$s dalinamasi \"%2$s\" su jumis + \"%1$s\" dalinamasi su jumis Atnaujinti sujungimą Serverio adresas Nepakanka atminties @@ -330,4 +330,6 @@ %1$d failai %1$d failai, 1 aplankas %1$d failai, %2$d aplankai + Dalijimasis + Ieškoti diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml index 291d1d0d..42cb5bbf 100644 --- a/res/values-lv/strings.xml +++ b/res/values-lv/strings.xml @@ -189,4 +189,6 @@ Lietotājvārds 1 mape 1 datne + Dalīšanās + Meklēt diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml index 2a5ecce0..a2708d3c 100644 --- a/res/values-mk/strings.xml +++ b/res/values-mk/strings.xml @@ -292,6 +292,9 @@ Инстант прикачувања Безбедност Прикачи патека на видео + %1$s сподели \"%2$s\" со тебе Освежи ја конекцијата Адреса на сервер + Споделување + Барај diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml index 92ace9c1..50f7a44c 100644 --- a/res/values-mn/strings.xml +++ b/res/values-mn/strings.xml @@ -18,4 +18,5 @@ Устгах Аюулгүй байдал + Түгээлт diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml index f60887a3..910ed909 100644 --- a/res/values-ms-rMY/strings.xml +++ b/res/values-ms-rMY/strings.xml @@ -60,4 +60,5 @@ Akaun Alamat pelayan + Cari diff --git a/res/values-nb-rNO/strings.xml b/res/values-nb-rNO/strings.xml index 79bf0b5d..95ad2e54 100644 --- a/res/values-nb-rNO/strings.xml +++ b/res/values-nb-rNO/strings.xml @@ -315,8 +315,8 @@ Sti til video-opplasting delte med deg - %1$s delte \"%2$s\" med deg - \"%1$s\" er blitt delt med deg + %1$s delte \"%2$s\" med deg + \"%1$s\" er blitt delt med deg Oppfrisk forbindelse Server-adresse Ikke nok minne @@ -329,4 +329,9 @@ %1$d filer %1$d filer, 1 mappe %1$d filer, %2$d mapper + Deling + Del med brukere og grupper + Ingen data delt med brukere ennå + Legg til bruker eller gruppe + Søk diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index 74fd1acd..9a3fa847 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -85,6 +85,7 @@ Download hier: %2$s Lijst layout Deel link Link niet meer delen + Delen met gebruiker Ja Nee OK @@ -247,6 +248,9 @@ Hieronder staan de lokale bestanden en de externe bestanden in %5$s waar ze naar Aan: Handtekening: Algoritme: + Dit digest algoritme is niet beschikbaar op uw telefoon. + Vingerafdruk: + Er is een probleem met het laden van het certificaat. Het certificaat kon niet worden getoond. - Geen informatie over de fout Dit is een plaatshouder @@ -321,8 +325,8 @@ Hieronder staan de lokale bestanden en de externe bestanden in %5$s waar ze naar Synchronisatie van map %1$s kon niet worden voltooid gedeeld met u - %1$s deelde \"%2$s\" met u - \"%1$s\" is gedeeld met u + %1$s deelde \"%2$s\" met u + \"%1$s\" is gedeeld met u Verversen verbinding Serveradres Niet voldoende geheugen @@ -335,4 +339,13 @@ Hieronder staan de lokale bestanden en de externe bestanden in %5$s waar ze naar %1$d bestanden %1$d bestanden, 1 map %1$d bestanden, %2$d mappen + Delen + Delen met gebruikers en groepen + Nog geen gegevens met gebruikers gedeeld + Toevoegen gebruiker of groep + Zoeken + Zoeken naar gebruikers en groepen + %1$s (groep) + Sorry, uw serverversie staat niet toe om binnen de clients te delen met gebruikers. +Neem contact op met uw beheerder diff --git a/res/values-nn-rNO/strings.xml b/res/values-nn-rNO/strings.xml index 9225e19c..aa846e38 100644 --- a/res/values-nn-rNO/strings.xml +++ b/res/values-nn-rNO/strings.xml @@ -126,4 +126,6 @@ Vel Tryggleik Tenaradresse + Deling + Søk diff --git a/res/values-oc/strings.xml b/res/values-oc/strings.xml index 54d70618..5ba832c1 100644 --- a/res/values-oc/strings.xml +++ b/res/values-oc/strings.xml @@ -80,13 +80,16 @@ Telecargatz-lo aicí : %2$s Creat lo : Modificat lo : Telecargar + Sincronizar Lo fichièr es estat renomenat en %s pendent lo mandadís Afichatge en lista Partejar lo ligam Partejar pas mai aqueste ligam + Partejar amb d\'Utilizaires Òc Non D\'acòrdi + Anullar la sincronizacion Anullar Salvar & Quitar Error @@ -317,10 +320,11 @@ En rason d\'aquesta modificacion, totes los fichièrs mandats amb de versions an Mandadís immediat Seguretat Repertòri de mandadís de las vidèos + La sincronizacion del dorsièr %1$s a pas pogut èsser acabad a partejat amb vos - %1$s a partejat \"%2$s\" amb vos - \"%1$s\" es estat partejat amb vos + %1$s a partejat \"%2$s\" amb vos + \"%1$s\" es estat partejat amb vos Actualizar la connexion Adreça del servidor Memòria insufisenta @@ -333,4 +337,10 @@ En rason d\'aquesta modificacion, totes los fichièrs mandats amb de versions an %1$d fichièrs %1$d fichièrs, 1 dorsièr %1$d fichièrs, %2$d dorsièrs + Partiment + Partejar amb d\'utilizaires e de gropes + Cap de donada es pas partejada amb d\'utilizaires pel moment + Apondre un utilizaire o un grop + Recercar + Recercar d\'utilizaires e de gropes diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml index 3e5f13e0..35a3769a 100644 --- a/res/values-pa/strings.xml +++ b/res/values-pa/strings.xml @@ -119,4 +119,5 @@ ਅਕਾਊਂਟ ਚੁਣੋ ਸਰਵਰ ਐਡਰੈਸ + ਖੋਜ diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index 8f0d6f8f..f6a6f454 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -307,6 +307,7 @@ Katalog wysyłania dla wideo udostępniony z tobą + %1$s wspólne \"%2$s\" z tobą Odśwież połączenie Adres Serwera Brak wystarczającej pamięci @@ -315,4 +316,6 @@ %1$d folderów 1 plik 1 plik , 1 folder + Udostępnianie + Wyszukaj diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml index 43e87a49..93ce1a12 100644 --- a/res/values-pt-rBR/strings.xml +++ b/res/values-pt-rBR/strings.xml @@ -84,6 +84,7 @@ Lista de Layout Compartilhar link Descompartilhar o link + Compartilhado com usuários Sim Não OK @@ -318,8 +319,8 @@ A sincronização da pasta %1$s não pode ser finalizada compartilhado com você - %1$s compartilhado \"%2$s\" com você - \"%1$s\" foi compartilhado com você + %1$s compartilhado \"%2$s\" com você + \"%1$s\" foi compartilhado com você Reinicializar conexão Endereço do servidor Não há memoria suficiente @@ -332,4 +333,13 @@ %1$d arquivos %1$d arquivos, 1 pasta %1$d arquivos, %2$d pastas + Compartilhamento + Compartilhar com Usuários e Grupos + Ainda não existe nenhum dado compartilhado com usuários + Adicionar Usuário ou Grupo + Perquisar + Pesquisar usuários e grupos + %1$s (grupo) + Desculpe, sua versão do servidor não permite compartilhamento com usuários que também são clientes. + \nEntre em contato com o administrador diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index 8cf3e43d..a1adba9e 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -316,8 +316,8 @@ Não foi possível completar a sincronização da pasta %1$s partilhado consigo - %1$s partilhou \"%2$s\" consigo - \"%1$s\" foi partilhado consigo + %1$s partilhou \"%2$s\" consigo + \"%1$s\" foi partilhado consigo Recarregar ligação Endereço do servidor Falta de memória @@ -330,4 +330,9 @@ %1$d ficheiros %1$d ficheiros, 1 pasta %1$d ficheiros, %2$d pastas + Partilha + Partilhar com Utilizadores e Grupos + Ainda não foram partilhados os dados com os utilizadores + Adicionar Utilziador ou Grupo + Procurar diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index 5e9ae3fb..b997bc9b 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -308,8 +308,8 @@ Calea de încărcare Video partajat cu tine - %1$s a partajat fișierul \"%2$s\" cu tine - „%1$s” a fost partajat cu dumneavoastră + %1$s a partajat fișierul \"%2$s\" cu tine + „%1$s” a fost partajat cu dumneavoastră Reîmprospătează conexiunea Adresa server-ului Memorie insuficientă @@ -322,4 +322,6 @@ %1$d fișiere %1$d fișiere, 1 folder %1$d fișiere, %2$d foldere + Partajare + Căutare diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 05af6892..5f124531 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -316,8 +316,8 @@ Путь для загрузки Видео поделился с вами - %1$s предоставил вам доступ к \"%2$s\" - Вам предоставлен доступ к \"%1$s\" + %1$s предоставил вам доступ к \"%2$s\" + Вам предоставлен доступ к \"%1$s\" Обновить соединение Адрес сервера Недостаточно памяти @@ -330,4 +330,9 @@ %1$d файлов %1$d файлов, 1 каталог %1$d файлов, %2$d каталогов + Общий доступ + Поделиться с пользователями или группами + Нет данных используемых совместно с другими пользователями + Добавить пользователя или группу + Найти diff --git a/res/values-si-rLK/strings.xml b/res/values-si-rLK/strings.xml index 6dca1df8..7ecb8cce 100644 --- a/res/values-si-rLK/strings.xml +++ b/res/values-si-rLK/strings.xml @@ -78,4 +78,6 @@ ගිණුම් තෝරන්න සේවාදායකයේ ලිපිනය + හුවමාරු කිරීම + සොයන්න diff --git a/res/values-sk-rSK/strings.xml b/res/values-sk-rSK/strings.xml index c30b24b4..b48dc6e0 100644 --- a/res/values-sk-rSK/strings.xml +++ b/res/values-sk-rSK/strings.xml @@ -71,6 +71,7 @@ pred sekundami Žiadny súbor. Nahrajte niečo! Načítavam... + Nenašla sa aplikácia pre tento typ súboru! V tomto priečinku nie sú žiadne súbory. Viac informácií získate kliknutím na súbor. Veľkosť: @@ -78,13 +79,16 @@ Vytvorený: Zmenený: Stiahnuť + Synchronizovať Súbor bol premenovaný na %1$s počas nahrávania Rozvrhnutie zoznamu Zdieľať linku Zrušiť zdieľanie odkazu + Zdieľať s používateľmi Áno Nie OK + Zrušiť synchronizáciu Zrušiť Uložiť a ukončiť Chyba @@ -241,6 +245,9 @@ Do: Podpis: Algoritmus: + Algoritmus digest nie je na vašom telefóne dostupný. + Odtlačok: + Nastal problém s načítaním certifikátu. Certifikát nemohol byť zobrazený. - Žiadne informácie o tejto chybe Toto je \"placeholder\" @@ -312,10 +319,11 @@ Okamžité nahratie Zabezpečenie Cesta pre nahrávanie videí + Synchronizáciu priečinka %1$s nebolo možné dokončiť zdieľané s vami - %1$s vám zdieľal \"%2$s\" - \"%1$s\" bol s vami nazdieľaný + %1$s vám zdieľal \"%2$s\" + \"%1$s\" bol s vami nazdieľaný Obnoviť pripojenie Adresa servera Nedostatok pamäte @@ -328,4 +336,13 @@ %1$d súb. %1$d súb., 1 priečinok %1$d súb., %2$d prieč. + Zdieľanie + Zdieľať s používateľmi alebo skupinami + Zatiaľ s používateľmi nezdieľate žiadne dáta. + Pridať používateľa alebo skupinu + Hľadať + Vyhľadať používateľov alebo skupiny + %1$s (skupina) + Je nám ľúto, vaša verzia servera neumožňuje zdieľanie s používateľmi alebo skupinami. +\nProsím, obráťte sa na svojho správcu diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index eecc9bfb..0b5a4a6b 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -310,8 +310,8 @@ Pot videa za pošiljanje v souporabi z vami - Uporabnik %1$s je omogočil souporabo \"%2$s\" z vami - \"%1$s\" je oddan v souporabo z vami + Uporabnik %1$s je omogočil souporabo \"%2$s\" z vami + \"%1$s\" je oddan v souporabo z vami Osveži povezavo Naslov strežnika Ni dovolj pomnilnika @@ -324,4 +324,6 @@ %1$d datotek %1$d datotek, 1 mapa %1$d datotek, %2$d map + Souporaba + Poišči diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml index b5613d74..c4a9dec8 100644 --- a/res/values-sq/strings.xml +++ b/res/values-sq/strings.xml @@ -84,6 +84,7 @@ Skemë Liste Ndajeni lidhjen me të tjerët Zhbëjeni ndarjen e lidhjes me të tjerët + Ndajeni me përdoruesit Po Jo OK @@ -241,6 +242,9 @@ Deri më: Nënshkrim: Algoritëm: + Ky algoritëm digest s’është i passhëm në telefonin tuaj. + Shenja gishtash: + Pati një problem gjatë ngarkimit të dëshmisë. Dëshmia s\’u shfaq dot. - Pa të dhëna rreth gabimit Kjo është një vendmbajtëse @@ -314,8 +318,8 @@ Njëkohësimi i dosjes %1$s s’u plotësua dot ndarë me ju - %1$s ndau me ju \"%2$s\" - \"%1$s\" është ndarë me ju + %1$s ndau me ju \"%2$s\" + \"%1$s\" është ndarë me ju Rifreskoni lidhjen Adresë shërbyesi Pa kujtesë të mjaftueshme @@ -328,4 +332,13 @@ %1$d kartelë %1$d kartela, 1 dosje %1$d kartela, %2$d dosje + Ndarje me të tjerët + Ndani me Përdorues dhe Grupe + Ende pa të dhëna të ndara me përdorues + Shtoni Përdorues ose Grup + Kërko + Kërkoni për grupe dhe përdorues + %1$s (grup) + Na ndjeni, versioni juaj i shërbyesit nuk lejon ndarje me përdorues brenda klientësh. + \nJu lutemi, lidhuni me përgjegjësin tuaj diff --git a/res/values-sr-rSP/strings.xml b/res/values-sr-rSP/strings.xml index b7aa6a76..cde6c3d9 100644 --- a/res/values-sr-rSP/strings.xml +++ b/res/values-sr-rSP/strings.xml @@ -72,4 +72,5 @@ Nalozi Izaberi + Traži diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml index e207263d..f38facb6 100644 --- a/res/values-sr/strings.xml +++ b/res/values-sr/strings.xml @@ -304,7 +304,7 @@ Путања отпремања видеа дељено са вама - %1$s подели „%2$s“ са вама + %1$s подели „%2$s“ са вама Освежи везу Адреса сервера Нема довољно меморије @@ -317,4 +317,6 @@ %1$d фајлова %1$d фајлова, 1 фасцикла %1$d фајлова, %2$d фасцикли + Дељење + Тражи diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index 49887f05..6766749f 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -281,5 +281,8 @@ Direktuppladning Säkerhet Uppladdnings-sökväg för video + %1$s delade \"%2$s\" med dig Serveradress + Dela + Sök diff --git a/res/values-ta-rLK/strings.xml b/res/values-ta-rLK/strings.xml index f5f91dce..19374391 100644 --- a/res/values-ta-rLK/strings.xml +++ b/res/values-ta-rLK/strings.xml @@ -126,4 +126,5 @@ கணக்குகள் தெரிவுசெய்க சேவையக முகவரி + தேடுதல் diff --git a/res/values-th-rTH/strings.xml b/res/values-th-rTH/strings.xml index b751e6bc..562b39e2 100644 --- a/res/values-th-rTH/strings.xml +++ b/res/values-th-rTH/strings.xml @@ -84,6 +84,7 @@ เค้าโครงรายการ แชร์ลิงค์ ยกเลิกการแชร์ลิงค์ + แชร์กับผู้ใช้ ตกลง ไม่ตกลง ตกลง @@ -243,6 +244,9 @@ ถึง: ลายเซ็นต์: อัลกอริทึ่ม: + อัลกอริทึมย่อยนี้ไม่สามารถใช้งานบนโทรศัพท์ของคุณ + ลายนิ้วมือ: + มีปัญหาในการโหลดใบรับรอง ไม่สามารถแสดงใบรับรอง - ไม่มีข้อมูลเกี่ยวกับข้อผิดพลาด นี่คือ placeholder @@ -316,8 +320,8 @@ ประสานข้อมูลโฟลเดอร์ %1$s ไม่สำเร็จ ถูกแชร์ กับคุณ - %1$s ได้แชร์ \"%2$s\" กับคุณ - \"%1$s\" ได้ถูกแชร์กับคุณ + %1$s ได้แชร์ \"%2$s\" กับคุณ + \"%1$s\" ได้ถูกแชร์กับคุณ ฟื้นฟูการเชื่อมต่อ ที่อยู่เซิร์ฟเวอร์ หน่วยความจำไม่พอ @@ -330,4 +334,13 @@ %1$d ไฟล์ %1$d ไฟล์, 1 โฟลเดอร์ %1$d ไฟล์, %2$d โฟลเดอร์ + การแชร์ข้อมูล + แชร์ไปยังผู้ใช้หรือกลุ่ม + ยังไม่มีข้อมูลที่แชร์กับผู้ใช้ในตอนนี้ + เพิ่มผู้ใช่หรือกลุ่ม + ค้นหา + ค้นหาผู้ใช้และกลุ่ม + %1$s (กลุ่ม) + ขออภัย รุ่นเซิร์ฟเวอร์ของคุณไม่อนุญาตให้แชร์กับผู้ใช้ภายในไคลเอนต์ +\nกรุณาติดต่อผู้ดูแลระบบ diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index 5a12caa4..918e5e38 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -314,8 +314,8 @@ Video Yükleme Yolu sizinle paylaştı - %1$s, sizinle \"%2$s\" paylaşımını yaptı - \"%1$s\" sizinle paylaşıldı + %1$s, sizinle \"%2$s\" paylaşımını yaptı + \"%1$s\" sizinle paylaşıldı Bağlantıyı yenile Sunucu adresi Yeterli hafıza yok @@ -328,4 +328,6 @@ %1$d dosya %1$d dosya, 1 klasör %1$d dosya, %2$d klasör + Paylaşım + Ara diff --git a/res/values-ug/strings.xml b/res/values-ug/strings.xml index a129982e..7d64b162 100644 --- a/res/values-ug/strings.xml +++ b/res/values-ug/strings.xml @@ -51,4 +51,6 @@ ھېساباتلار بىخەتەرلىك مۇلازىمېتىر ئادرىسى + ھەمبەھىر + ئىزدە diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index 50fce4c5..fed88cec 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -314,8 +314,8 @@ Шлях завантаження відео поширений з Вами - %1$s поділився \"%2$s\" з вами - З Вами поділилися \"%1$s\" + %1$s поділився \"%2$s\" з вами + З Вами поділилися \"%1$s\" Оновити з\'єднання Ареса серверу Недостатньо пам\'яті @@ -328,4 +328,6 @@ %1$d файлів %1$d файлів, 1 тека %1$d файлів, %2$d тек + Спільний доступ + Пошук diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur-rPK/strings.xml index 3e97d3fa..111a8662 100644 --- a/res/values-ur-rPK/strings.xml +++ b/res/values-ur-rPK/strings.xml @@ -26,4 +26,5 @@ بھجیں منتخب کریں + تلاش diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index 3323430d..6ec75156 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -206,4 +206,6 @@ Tài khoản Chọn Địa chỉ máy chủ + Chia sẻ + Tìm kiếm diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index e22d86e7..39d4ea90 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -314,8 +314,8 @@ 视频上传路径 已共享 与你 - %1$s和你分享了“%2$s” - 已与你分享“%1$s” + %1$s和你分享了“%2$s” + 已与你分享“%1$s” 刷新连接 服务器地址 内存不足 @@ -328,4 +328,6 @@ %1$d 个文件 %1$d 个文件,1 个文件夹 %1$d 个文件,%2$d 个文件夹 + 共享 + 搜索 diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml index c286d0cb..50f708ac 100644 --- a/res/values-zh-rHK/strings.xml +++ b/res/values-zh-rHK/strings.xml @@ -77,4 +77,6 @@ 密碼錯誤 安全 伺服器地址 + 分享 + 尋找 diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index 8dd7201f..c783957b 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -309,8 +309,8 @@ 影片上傳路徑 以分享的 與你 - %1$s 分享了 \"%2$s\" 給您 - \"%1$s\" 已經與您分享 + %1$s 分享了 \"%2$s\" 給您 + \"%1$s\" 已經與您分享 重新連線 伺服器位址 記憶體不足 @@ -323,4 +323,9 @@ %1$d 個檔案 %1$d 個檔案, 1 個資料夾 %1$d 個檔案, %2$d 個資料夾 + 分享 + 與用戶或群組分享 + 目前沒有任何您分享的內容 + 新增使用者或是群組 + 搜尋 diff --git a/res/values/strings.xml b/res/values/strings.xml index 13851dfb..a65d2772 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -253,6 +253,9 @@ To: Signature: Algorithm: + This digest algorithm is not available on your phone. + Fingerprint: + There is a problem loading the certificate. The certificate could not be shown. - No information about the error diff --git a/src/com/owncloud/android/datamodel/FileDataStorageManager.java b/src/com/owncloud/android/datamodel/FileDataStorageManager.java index f3dd3e55..1ba669ee 100644 --- a/src/com/owncloud/android/datamodel/FileDataStorageManager.java +++ b/src/com/owncloud/android/datamodel/FileDataStorageManager.java @@ -50,6 +50,8 @@ import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.lib.resources.files.FileUtils; import com.owncloud.android.lib.resources.shares.OCShare; import com.owncloud.android.lib.resources.shares.ShareType; +import com.owncloud.android.lib.resources.status.CapabilityBooleanType; +import com.owncloud.android.lib.resources.status.OCCapability; import com.owncloud.android.utils.FileStorageUtils; import java.io.FileInputStream; @@ -1732,4 +1734,183 @@ public class FileDataStorageManager { } } + + public OCCapability saveCapabilities(OCCapability capability){ + + // Prepare capabilities data + ContentValues cv = new ContentValues(); + cv.put(ProviderTableMeta.CAPABILITIES_ACCOUNT_NAME, mAccount.name); + cv.put(ProviderTableMeta.CAPABILITIES_VERSION_MAYOR, capability.getVersionMayor()); + cv.put(ProviderTableMeta.CAPABILITIES_VERSION_MINOR, capability.getVersionMinor()); + cv.put(ProviderTableMeta.CAPABILITIES_VERSION_MICRO, capability.getVersionMicro()); + cv.put(ProviderTableMeta.CAPABILITIES_VERSION_STRING, capability.getVersionString()); + cv.put(ProviderTableMeta.CAPABILITIES_VERSION_EDITION, capability.getVersionEdition()); + cv.put(ProviderTableMeta.CAPABILITIES_CORE_POLLINTERVAL, capability.getCorePollinterval()); + cv.put(ProviderTableMeta.CAPABILITIES_SHARING_API_ENABLED, capability.getFilesSharingApiEnabled().getValue()); + cv.put(ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_ENABLED, + capability.getFilesSharingPublicEnabled().getValue()); + cv.put(ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_PASSWORD_ENFORCED, + capability.getFilesSharingPublicPasswordEnforced().getValue()); + cv.put(ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_EXPIRE_DATE_ENABLED, + capability.getFilesSharingPublicExpireDateEnabled().getValue()); + cv.put(ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_EXPIRE_DATE_DAYS, + capability.getFilesSharingPublicExpireDateDays()); + cv.put(ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_EXPIRE_DATE_ENFORCED, + capability.getFilesSharingPublicExpireDateEnforced().getValue()); + cv.put(ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_SEND_MAIL, + capability.getFilesSharingPublicSendMail().getValue()); + cv.put(ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_UPLOAD, + capability.getFilesSharingPublicUpload().getValue()); + cv.put(ProviderTableMeta.CAPABILITIES_SHARING_USER_SEND_MAIL, + capability.getFilesSharingUserSendMail().getValue()); + cv.put(ProviderTableMeta.CAPABILITIES_SHARING_RESHARING, capability.getFilesSharingResharing().getValue()); + cv.put(ProviderTableMeta.CAPABILITIES_SHARING_FEDERATION_OUTGOING, + capability.getFilesSharingFederationOutgoing().getValue()); + cv.put(ProviderTableMeta.CAPABILITIES_SHARING_FEDERATION_INCOMING, + capability.getFilesSharingFederationIncoming().getValue()); + cv.put(ProviderTableMeta.CAPABILITIES_FILES_BIGFILECHUNKING, capability.getFilesBigFileChuncking().getValue()); + cv.put(ProviderTableMeta.CAPABILITIES_FILES_UNDELETE, capability.getFilesUndelete().getValue()); + cv.put(ProviderTableMeta.CAPABILITIES_FILES_VERSIONING, capability.getFilesVersioning().getValue()); + + if (capabilityExists(mAccount.name)) { + if (getContentResolver() != null) { + getContentResolver().update(ProviderTableMeta.CONTENT_URI_CAPABILITIES, cv, + ProviderTableMeta.CAPABILITIES_ACCOUNT_NAME + "=?", + new String[]{mAccount.name}); + } else { + try { + getContentProviderClient().update(ProviderTableMeta.CONTENT_URI_CAPABILITIES, + cv, ProviderTableMeta.CAPABILITIES_ACCOUNT_NAME + "=?", + new String[]{mAccount.name}); + } catch (RemoteException e) { + Log_OC.e(TAG, + "Fail to insert insert file to database " + + e.getMessage()); + } + } + } else { + Uri result_uri = null; + if (getContentResolver() != null) { + result_uri = getContentResolver().insert( + ProviderTableMeta.CONTENT_URI_CAPABILITIES, cv); + } else { + try { + result_uri = getContentProviderClient().insert( + ProviderTableMeta.CONTENT_URI_CAPABILITIES, cv); + } catch (RemoteException e) { + Log_OC.e(TAG, + "Fail to insert insert capability to database " + + e.getMessage()); + } + } + if (result_uri != null) { + long new_id = Long.parseLong(result_uri.getPathSegments() + .get(1)); + capability.setId(new_id); + capability.setAccountName(mAccount.name); + } + } + + return capability; + } + + private boolean capabilityExists(String accountName) { + Cursor c = getCapabilityCursorForAccount(accountName); + boolean exists = false; + if (c != null) { + exists = c.moveToFirst(); + c.close(); + } + return exists; + } + + private Cursor getCapabilityCursorForAccount(String accountName){ + Cursor c = null; + if (getContentResolver() != null) { + c = getContentResolver() + .query(ProviderTableMeta.CONTENT_URI_CAPABILITIES, + null, + ProviderTableMeta.CAPABILITIES_ACCOUNT_NAME + "=? ", + new String[]{accountName}, null); + } else { + try { + c = getContentProviderClient().query( + ProviderTableMeta.CONTENT_URI_CAPABILITIES, + null, + ProviderTableMeta.CAPABILITIES_ACCOUNT_NAME + "=? ", + new String[]{accountName}, null); + } catch (RemoteException e) { + Log_OC.e(TAG, + "Couldn't determine capability existance, assuming non existance: " + + e.getMessage()); + } + } + + return c; + + } + public OCCapability getCapability(String accountName){ + OCCapability capability = null; + Cursor c = getCapabilityCursorForAccount(accountName); + + if (c.moveToFirst()) { + capability = createCapabilityInstance(c); + } + c.close(); + return capability; + } + + private OCCapability createCapabilityInstance(Cursor c) { + OCCapability capability = null; + if (c != null) { + capability = new OCCapability(); + capability.setId(c.getLong(c.getColumnIndex(ProviderTableMeta._ID))); + capability.setAccountName(c.getString(c + .getColumnIndex(ProviderTableMeta.CAPABILITIES_ACCOUNT_NAME))); + capability.setVersionMayor(c.getInt(c + .getColumnIndex(ProviderTableMeta.CAPABILITIES_VERSION_MAYOR))); + capability.setVersionMinor(c.getInt(c + .getColumnIndex(ProviderTableMeta.CAPABILITIES_VERSION_MINOR))); + capability.setVersionMicro(c.getInt(c + .getColumnIndex(ProviderTableMeta.CAPABILITIES_VERSION_MICRO))); + capability.setVersionString(c.getString(c + .getColumnIndex(ProviderTableMeta.CAPABILITIES_VERSION_STRING))); + capability.setVersionEdition(c.getString(c + .getColumnIndex(ProviderTableMeta.CAPABILITIES_VERSION_EDITION))); + capability.setCorePollinterval(c.getInt(c + .getColumnIndex(ProviderTableMeta.CAPABILITIES_CORE_POLLINTERVAL))); + capability.setFilesSharingApiEnabled(CapabilityBooleanType.fromValue(c.getInt(c + .getColumnIndex(ProviderTableMeta.CAPABILITIES_SHARING_API_ENABLED)))); + capability.setFilesSharingPublicEnabled(CapabilityBooleanType.fromValue(c.getInt(c + .getColumnIndex(ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_ENABLED)))); + capability.setFilesSharingPublicPasswordEnforced(CapabilityBooleanType.fromValue(c.getInt(c + .getColumnIndex(ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_PASSWORD_ENFORCED)))); + capability.setFilesSharingPublicExpireDateEnabled(CapabilityBooleanType.fromValue(c.getInt(c + .getColumnIndex(ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_EXPIRE_DATE_ENABLED)))); + capability.setFilesSharingPublicExpireDateDays(c.getInt(c + .getColumnIndex(ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_EXPIRE_DATE_DAYS))); + capability.setFilesSharingPublicExpireDateEnforced(CapabilityBooleanType.fromValue(c.getInt(c + .getColumnIndex(ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_EXPIRE_DATE_ENFORCED)))); + capability.setFilesSharingPublicSendMail(CapabilityBooleanType.fromValue(c.getInt(c + .getColumnIndex(ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_SEND_MAIL)))); + capability.setFilesSharingPublicUpload(CapabilityBooleanType.fromValue(c.getInt(c + .getColumnIndex(ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_UPLOAD)))); + capability.setFilesSharingUserSendMail(CapabilityBooleanType.fromValue(c.getInt(c + .getColumnIndex(ProviderTableMeta.CAPABILITIES_SHARING_USER_SEND_MAIL)))); + capability.setFilesSharingResharing(CapabilityBooleanType.fromValue(c.getInt(c + .getColumnIndex(ProviderTableMeta.CAPABILITIES_SHARING_RESHARING)))); + capability.setFilesSharingFederationOutgoing(CapabilityBooleanType.fromValue(c.getInt(c + .getColumnIndex(ProviderTableMeta.CAPABILITIES_SHARING_FEDERATION_OUTGOING)))); + capability.setFilesSharingFederationIncoming(CapabilityBooleanType.fromValue(c.getInt(c + .getColumnIndex(ProviderTableMeta.CAPABILITIES_SHARING_FEDERATION_INCOMING)))); + capability.setFilesBigFileChuncking(CapabilityBooleanType.fromValue(c.getInt(c + .getColumnIndex(ProviderTableMeta.CAPABILITIES_FILES_BIGFILECHUNKING)))); + capability.setFilesUndelete(CapabilityBooleanType.fromValue(c.getInt(c + .getColumnIndex(ProviderTableMeta.CAPABILITIES_FILES_UNDELETE)))); + capability.setFilesVersioning(CapabilityBooleanType.fromValue(c.getInt(c + .getColumnIndex(ProviderTableMeta.CAPABILITIES_FILES_VERSIONING)))); + + } + return capability; + } } diff --git a/src/com/owncloud/android/datamodel/OCFile.java b/src/com/owncloud/android/datamodel/OCFile.java index 4fcd4394..8cbb95e2 100644 --- a/src/com/owncloud/android/datamodel/OCFile.java +++ b/src/com/owncloud/android/datamodel/OCFile.java @@ -1,6 +1,8 @@ /** * ownCloud Android client application * + * @author Bartek Przybylski + * @author David A. Velasco * Copyright (C) 2012 Bartek Przybylski * Copyright (C) 2015 ownCloud Inc. * @@ -20,6 +22,8 @@ package com.owncloud.android.datamodel; +import android.content.ContentResolver; +import android.net.Uri; import android.os.Parcel; import android.os.Parcelable; import android.webkit.MimeTypeMap; @@ -80,6 +84,12 @@ public class OCFile implements Parcelable, Comparable { private boolean mShareWithSharee; + /** + * URI to the local path of the file contents, if stored in the device; cached after first call + * to {@link #getStorageUri()} + */ + private Uri mLocalUri; + /** * Create new {@link OCFile} with given path. @@ -214,12 +224,31 @@ public class OCFile implements Parcelable, Comparable { } /** + * The URI to the file contents, if stored locally + * + * @return A URI to the local copy of the file, or NULL if not stored in the device + */ + public Uri getStorageUri() { + if (mLocalPath == null || mLocalPath.length() == 0) { + return null; + } + if (mLocalUri == null) { + Uri.Builder builder = new Uri.Builder(); + builder.scheme(ContentResolver.SCHEME_FILE); + builder.path(mLocalPath); + mLocalUri = builder.build(); + } + return mLocalUri; + } + + /** * Can be used to set the path where the file is stored * * @param storage_path to set */ public void setStoragePath(String storage_path) { mLocalPath = storage_path; + mLocalUri = null; } /** diff --git a/src/com/owncloud/android/db/ProviderMeta.java b/src/com/owncloud/android/db/ProviderMeta.java index 82ad94e9..1c674339 100644 --- a/src/com/owncloud/android/db/ProviderMeta.java +++ b/src/com/owncloud/android/db/ProviderMeta.java @@ -31,7 +31,7 @@ import com.owncloud.android.MainApp; public class ProviderMeta { public static final String DB_NAME = "filelist"; - public static final int DB_VERSION = 12; + public static final int DB_VERSION = 13; private ProviderMeta() { } @@ -39,6 +39,7 @@ public class ProviderMeta { static public class ProviderTableMeta implements BaseColumns { public static final String FILE_TABLE_NAME = "filelist"; public static final String OCSHARES_TABLE_NAME = "ocshares"; + public static final String CAPABILITIES_TABLE_NAME = "capabilities"; public static final Uri CONTENT_URI = Uri.parse("content://" + MainApp.getAuthority() + "/"); public static final Uri CONTENT_URI_FILE = Uri.parse("content://" @@ -47,6 +48,8 @@ public class ProviderMeta { + MainApp.getAuthority() + "/dir"); public static final Uri CONTENT_URI_SHARE = Uri.parse("content://" + MainApp.getAuthority() + "/shares"); + public static final Uri CONTENT_URI_CAPABILITIES = Uri.parse("content://" + + MainApp.getAuthority() + "/capabilities"); public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.owncloud.file"; public static final String CONTENT_TYPE_ITEM = "vnd.android.cursor.item/vnd.owncloud.file"; @@ -62,7 +65,7 @@ public class ProviderMeta { public static final String FILE_STORAGE_PATH = "media_path"; public static final String FILE_PATH = "path"; public static final String FILE_ACCOUNT_OWNER = "file_owner"; - public static final String FILE_LAST_SYNC_DATE = "last_sync_date"; // _for_properties, but let's keep it as it is + public static final String FILE_LAST_SYNC_DATE = "last_sync_date";// _for_properties, but let's keep it as it is public static final String FILE_LAST_SYNC_DATE_FOR_DATA = "last_sync_date_for_data"; public static final String FILE_KEEP_IN_SYNC = "keep_in_sync"; public static final String FILE_ETAG = "etag"; @@ -97,5 +100,34 @@ public class ProviderMeta { public static final String OCSHARES_DEFAULT_SORT_ORDER = OCSHARES_FILE_SOURCE + " collate nocase asc"; + // Columns of capabilities table + public static final String CAPABILITIES_ACCOUNT_NAME = "account"; + public static final String CAPABILITIES_VERSION_MAYOR = "version_mayor"; + public static final String CAPABILITIES_VERSION_MINOR = "version_minor"; + public static final String CAPABILITIES_VERSION_MICRO = "version_micro"; + public static final String CAPABILITIES_VERSION_STRING = "version_string"; + public static final String CAPABILITIES_VERSION_EDITION = "version_edition"; + public static final String CAPABILITIES_CORE_POLLINTERVAL = "core_pollinterval"; + public static final String CAPABILITIES_SHARING_API_ENABLED = "sharing_api_enabled"; + public static final String CAPABILITIES_SHARING_PUBLIC_ENABLED = "sharing_public_enabled"; + public static final String CAPABILITIES_SHARING_PUBLIC_PASSWORD_ENFORCED = "sharing_public_password_enforced"; + public static final String CAPABILITIES_SHARING_PUBLIC_EXPIRE_DATE_ENABLED = + "sharing_public_expire_date_enabled"; + public static final String CAPABILITIES_SHARING_PUBLIC_EXPIRE_DATE_DAYS = + "sharing_public_expire_date_days"; + public static final String CAPABILITIES_SHARING_PUBLIC_EXPIRE_DATE_ENFORCED = + "sharing_public_expire_date_enforced"; + public static final String CAPABILITIES_SHARING_PUBLIC_SEND_MAIL = "sharing_public_send_mail"; + public static final String CAPABILITIES_SHARING_PUBLIC_UPLOAD = "sharing_public_upload"; + public static final String CAPABILITIES_SHARING_USER_SEND_MAIL = "sharing_user_send_mail"; + public static final String CAPABILITIES_SHARING_RESHARING = "sharing_resharing"; + public static final String CAPABILITIES_SHARING_FEDERATION_OUTGOING = "sharing_federation_outgoing"; + public static final String CAPABILITIES_SHARING_FEDERATION_INCOMING = "sharing_federation_incoming"; + public static final String CAPABILITIES_FILES_BIGFILECHUNKING = "files_bigfilechunking"; + public static final String CAPABILITIES_FILES_UNDELETE = "files_undelete"; + public static final String CAPABILITIES_FILES_VERSIONING = "files_versioning"; + + public static final String CAPABILITIES_DEFAULT_SORT_ORDER = CAPABILITIES_ACCOUNT_NAME + + " collate nocase asc"; } } diff --git a/src/com/owncloud/android/files/FileMenuFilter.java b/src/com/owncloud/android/files/FileMenuFilter.java index e6638ba0..0b7eb811 100644 --- a/src/com/owncloud/android/files/FileMenuFilter.java +++ b/src/com/owncloud/android/files/FileMenuFilter.java @@ -35,6 +35,8 @@ import com.owncloud.android.files.services.FileDownloader; import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder; import com.owncloud.android.files.services.FileUploader; import com.owncloud.android.files.services.FileUploader.FileUploaderBinder; +import com.owncloud.android.lib.resources.status.CapabilityBooleanType; +import com.owncloud.android.lib.resources.status.OCCapability; import com.owncloud.android.services.OperationsService.OperationsServiceBinder; import com.owncloud.android.ui.activity.ComponentsGetter; @@ -200,7 +202,10 @@ public class FileMenuFilter { } // SHARE FILE, with Users - if (!shareAllowed || mFile == null) { + OCCapability capability = mComponentsGetter.getStorageManager().getCapability(mAccount.name); + boolean shareApiEnabled = capability != null && + (capability.getFilesSharingApiEnabled().isTrue() || capability.getFilesSharingApiEnabled().isUnknown()); + if (!shareAllowed || mFile == null || !shareApiEnabled ) { toHide.add(R.id.action_share_with_users); } else { toShow.add(R.id.action_share_with_users); diff --git a/src/com/owncloud/android/operations/GetCapabilitiesOperarion.java b/src/com/owncloud/android/operations/GetCapabilitiesOperarion.java new file mode 100644 index 00000000..0a63449d --- /dev/null +++ b/src/com/owncloud/android/operations/GetCapabilitiesOperarion.java @@ -0,0 +1,51 @@ +/** + * ownCloud Android client application + * + * @author masensio + * Copyright (C) 2015 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.operations; + +import com.owncloud.android.lib.common.OwnCloudClient; +import com.owncloud.android.lib.common.operations.RemoteOperationResult; +import com.owncloud.android.lib.resources.status.GetRemoteCapabilitiesOperation; +import com.owncloud.android.lib.resources.status.OCCapability; +import com.owncloud.android.operations.common.SyncOperation; + +/** + * Get and save capabilities from the server + */ +public class GetCapabilitiesOperarion extends SyncOperation { + + @Override + protected RemoteOperationResult run(OwnCloudClient client) { + GetRemoteCapabilitiesOperation getCapabilities = new GetRemoteCapabilitiesOperation(); + RemoteOperationResult result = getCapabilities.execute(client); + + if (result.isSuccess()){ + // Read data from the result + if( result.getData()!= null && result.getData().size() > 0) { + OCCapability capability = (OCCapability) result.getData().get(0); + + // Save the capabilities into database + getStorageManager().saveCapabilities(capability); + } + } + + return result; + } + +} diff --git a/src/com/owncloud/android/operations/RefreshFolderOperation.java b/src/com/owncloud/android/operations/RefreshFolderOperation.java index c61446e0..87dde21d 100644 --- a/src/com/owncloud/android/operations/RefreshFolderOperation.java +++ b/src/com/owncloud/android/operations/RefreshFolderOperation.java @@ -187,6 +187,7 @@ public class RefreshFolderOperation extends RemoteOperation { if (OCFile.ROOT_PATH.equals(mLocalFolder.getRemotePath()) && !mSyncFullAccount) { updateOCVersion(client); + } result = checkForChanges(client); @@ -231,10 +232,24 @@ public class RefreshFolderOperation extends RemoteOperation { RemoteOperationResult result = update.execute(client); if (result.isSuccess()) { mIsShareSupported = update.getOCVersion().isSharedSupported(); + + // Update Capabilities for this account + if (update.getOCVersion().isVersionWithCapabilitiesAPI()) { + updateCapabilities(client); + } else { + Log_OC.d(TAG, "Capabilities API disabled"); + } + } + } + + private void updateCapabilities(OwnCloudClient client){ + GetCapabilitiesOperarion getCapabilities = new GetCapabilitiesOperarion(); + RemoteOperationResult result = getCapabilities.execute(mStorageManager,mContext); + if (!result.isSuccess()){ + Log_OC.d(TAG, "Update Capabilities unsuccessfully"); } } - private RemoteOperationResult checkForChanges(OwnCloudClient client) { mRemoteFolderChanged = true; RemoteOperationResult result = null; diff --git a/src/com/owncloud/android/operations/common/SyncOperation.java b/src/com/owncloud/android/operations/common/SyncOperation.java index 5fb5c8cf..3d917d2a 100644 --- a/src/com/owncloud/android/operations/common/SyncOperation.java +++ b/src/com/owncloud/android/operations/common/SyncOperation.java @@ -20,16 +20,15 @@ package com.owncloud.android.operations.common; -import com.owncloud.android.MainApp; +import android.content.Context; +import android.os.Handler; + import com.owncloud.android.datamodel.FileDataStorageManager; import com.owncloud.android.lib.common.OwnCloudClient; import com.owncloud.android.lib.common.operations.OnRemoteOperationListener; import com.owncloud.android.lib.common.operations.RemoteOperation; import com.owncloud.android.lib.common.operations.RemoteOperationResult; -import android.content.Context; -import android.os.Handler; - /** * Operation which execution involves both interactions with an ownCloud server and diff --git a/src/com/owncloud/android/providers/FileContentProvider.java b/src/com/owncloud/android/providers/FileContentProvider.java index d94d5b5a..e652bade 100644 --- a/src/com/owncloud/android/providers/FileContentProvider.java +++ b/src/com/owncloud/android/providers/FileContentProvider.java @@ -22,20 +22,6 @@ package com.owncloud.android.providers; -import java.io.File; -import java.util.ArrayList; -import java.util.HashMap; - -import com.owncloud.android.MainApp; -import com.owncloud.android.R; -import com.owncloud.android.datamodel.OCFile; -import com.owncloud.android.db.ProviderMeta; -import com.owncloud.android.db.ProviderMeta.ProviderTableMeta; -import com.owncloud.android.lib.common.accounts.AccountUtils; -import com.owncloud.android.lib.common.utils.Log_OC; -import com.owncloud.android.lib.resources.shares.ShareType; -import com.owncloud.android.utils.FileStorageUtils; - import android.accounts.Account; import android.accounts.AccountManager; import android.content.ContentProvider; @@ -54,6 +40,19 @@ import android.database.sqlite.SQLiteQueryBuilder; import android.net.Uri; import android.text.TextUtils; +import com.owncloud.android.MainApp; +import com.owncloud.android.R; +import com.owncloud.android.datamodel.OCFile; +import com.owncloud.android.db.ProviderMeta; +import com.owncloud.android.db.ProviderMeta.ProviderTableMeta; +import com.owncloud.android.lib.common.accounts.AccountUtils; +import com.owncloud.android.lib.common.utils.Log_OC; +import com.owncloud.android.lib.resources.shares.ShareType; +import com.owncloud.android.utils.FileStorageUtils; + +import java.io.File; +import java.util.ArrayList; + /** * The ContentProvider for the ownCloud App. */ @@ -61,99 +60,14 @@ public class FileContentProvider extends ContentProvider { private DataBaseHelper mDbHelper; - // Projection for filelist table - private static HashMap mFileProjectionMap; - static { - mFileProjectionMap = new HashMap(); - mFileProjectionMap.put(ProviderTableMeta._ID, ProviderTableMeta._ID); - mFileProjectionMap.put(ProviderTableMeta.FILE_PARENT, - ProviderTableMeta.FILE_PARENT); - mFileProjectionMap.put(ProviderTableMeta.FILE_PATH, - ProviderTableMeta.FILE_PATH); - mFileProjectionMap.put(ProviderTableMeta.FILE_NAME, - ProviderTableMeta.FILE_NAME); - mFileProjectionMap.put(ProviderTableMeta.FILE_CREATION, - ProviderTableMeta.FILE_CREATION); - mFileProjectionMap.put(ProviderTableMeta.FILE_MODIFIED, - ProviderTableMeta.FILE_MODIFIED); - mFileProjectionMap.put(ProviderTableMeta.FILE_MODIFIED_AT_LAST_SYNC_FOR_DATA, - ProviderTableMeta.FILE_MODIFIED_AT_LAST_SYNC_FOR_DATA); - mFileProjectionMap.put(ProviderTableMeta.FILE_CONTENT_LENGTH, - ProviderTableMeta.FILE_CONTENT_LENGTH); - mFileProjectionMap.put(ProviderTableMeta.FILE_CONTENT_TYPE, - ProviderTableMeta.FILE_CONTENT_TYPE); - mFileProjectionMap.put(ProviderTableMeta.FILE_STORAGE_PATH, - ProviderTableMeta.FILE_STORAGE_PATH); - mFileProjectionMap.put(ProviderTableMeta.FILE_LAST_SYNC_DATE, - ProviderTableMeta.FILE_LAST_SYNC_DATE); - mFileProjectionMap.put(ProviderTableMeta.FILE_LAST_SYNC_DATE_FOR_DATA, - ProviderTableMeta.FILE_LAST_SYNC_DATE_FOR_DATA); - mFileProjectionMap.put(ProviderTableMeta.FILE_KEEP_IN_SYNC, - ProviderTableMeta.FILE_KEEP_IN_SYNC); - mFileProjectionMap.put(ProviderTableMeta.FILE_ACCOUNT_OWNER, - ProviderTableMeta.FILE_ACCOUNT_OWNER); - mFileProjectionMap.put(ProviderTableMeta.FILE_ETAG, - ProviderTableMeta.FILE_ETAG); - mFileProjectionMap.put(ProviderTableMeta.FILE_SHARED_VIA_LINK, - ProviderTableMeta.FILE_SHARED_VIA_LINK); - mFileProjectionMap.put(ProviderTableMeta.FILE_SHARED_WITH_SHAREE, - ProviderTableMeta.FILE_SHARED_WITH_SHAREE); - mFileProjectionMap.put(ProviderTableMeta.FILE_PUBLIC_LINK, - ProviderTableMeta.FILE_PUBLIC_LINK); - mFileProjectionMap.put(ProviderTableMeta.FILE_PERMISSIONS, - ProviderTableMeta.FILE_PERMISSIONS); - mFileProjectionMap.put(ProviderTableMeta.FILE_REMOTE_ID, - ProviderTableMeta.FILE_REMOTE_ID); - mFileProjectionMap.put(ProviderTableMeta.FILE_UPDATE_THUMBNAIL, - ProviderTableMeta.FILE_UPDATE_THUMBNAIL); - mFileProjectionMap.put(ProviderTableMeta.FILE_IS_DOWNLOADING, - ProviderTableMeta.FILE_IS_DOWNLOADING); - mFileProjectionMap.put(ProviderTableMeta.FILE_ETAG_IN_CONFLICT, - ProviderTableMeta.FILE_ETAG_IN_CONFLICT); - } - private static final int SINGLE_FILE = 1; private static final int DIRECTORY = 2; private static final int ROOT_DIRECTORY = 3; private static final int SHARES = 4; + private static final int CAPABILITIES = 5; private static final String TAG = FileContentProvider.class.getSimpleName(); - // Projection for ocshares table - private static HashMap mOCSharesProjectionMap; - static { - mOCSharesProjectionMap = new HashMap(); - mOCSharesProjectionMap.put(ProviderTableMeta._ID, ProviderTableMeta._ID); - mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_FILE_SOURCE, - ProviderTableMeta.OCSHARES_FILE_SOURCE); - mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_ITEM_SOURCE, - ProviderTableMeta.OCSHARES_ITEM_SOURCE); - mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_SHARE_TYPE, - ProviderTableMeta.OCSHARES_SHARE_TYPE); - mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_SHARE_WITH, - ProviderTableMeta.OCSHARES_SHARE_WITH); - mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_PATH, - ProviderTableMeta.OCSHARES_PATH); - mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_PERMISSIONS, - ProviderTableMeta.OCSHARES_PERMISSIONS); - mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_SHARED_DATE, - ProviderTableMeta.OCSHARES_SHARED_DATE); - mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_EXPIRATION_DATE, - ProviderTableMeta.OCSHARES_EXPIRATION_DATE); - mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_TOKEN, - ProviderTableMeta.OCSHARES_TOKEN); - mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_SHARE_WITH_DISPLAY_NAME, - ProviderTableMeta.OCSHARES_SHARE_WITH_DISPLAY_NAME); - mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_IS_DIRECTORY, - ProviderTableMeta.OCSHARES_IS_DIRECTORY); - mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_USER_ID, - ProviderTableMeta.OCSHARES_USER_ID); - mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED, - ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED); - mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_ACCOUNT_OWNER, - ProviderTableMeta.OCSHARES_ACCOUNT_OWNER); - } - private UriMatcher mUriMatcher; @Override @@ -253,6 +167,9 @@ public class FileContentProvider extends ContentProvider { case SHARES: count = db.delete(ProviderTableMeta.OCSHARES_TABLE_NAME, where, whereArgs); break; + case CAPABILITIES: + count = db.delete(ProviderTableMeta.CAPABILITIES_TABLE_NAME, where, whereArgs); + break; default: //Log_OC.e(TAG, "Unknown uri " + uri); throw new IllegalArgumentException("Unknown uri: " + uri.toString()); @@ -338,6 +255,17 @@ public class FileContentProvider extends ContentProvider { updateFilesTableAccordingToShareInsertion(db, values); return insertedShareUri; + case CAPABILITIES: + Uri insertedCapUri = null; + long id = db.insert(ProviderTableMeta.CAPABILITIES_TABLE_NAME, null, values); + if (id >0) { + insertedCapUri = + ContentUris.withAppendedId(ProviderTableMeta.CONTENT_URI_CAPABILITIES, id); + } else { + throw new SQLException("ERROR " + uri); + + } + return insertedCapUri; default: throw new IllegalArgumentException("Unknown uri id: " + uri); @@ -379,6 +307,8 @@ public class FileContentProvider extends ContentProvider { mUriMatcher.addURI(authority, "dir/#", DIRECTORY); mUriMatcher.addURI(authority, "shares/", SHARES); mUriMatcher.addURI(authority, "shares/#", SHARES); + mUriMatcher.addURI(authority, "capabilities/", CAPABILITIES); + mUriMatcher.addURI(authority, "capabilities/#", CAPABILITIES); return true; } @@ -417,7 +347,6 @@ public class FileContentProvider extends ContentProvider { SQLiteQueryBuilder sqlQuery = new SQLiteQueryBuilder(); sqlQuery.setTables(ProviderTableMeta.FILE_TABLE_NAME); - sqlQuery.setProjectionMap(mFileProjectionMap); switch (mUriMatcher.match(uri)) { case ROOT_DIRECTORY: @@ -435,7 +364,13 @@ public class FileContentProvider extends ContentProvider { break; case SHARES: sqlQuery.setTables(ProviderTableMeta.OCSHARES_TABLE_NAME); - sqlQuery.setProjectionMap(mOCSharesProjectionMap); + if (uri.getPathSegments().size() > 1) { + sqlQuery.appendWhere(ProviderTableMeta._ID + "=" + + uri.getPathSegments().get(1)); + } + break; + case CAPABILITIES: + sqlQuery.setTables(ProviderTableMeta.CAPABILITIES_TABLE_NAME); if (uri.getPathSegments().size() > 1) { sqlQuery.appendWhere(ProviderTableMeta._ID + "=" + uri.getPathSegments().get(1)); @@ -447,11 +382,16 @@ public class FileContentProvider extends ContentProvider { String order; if (TextUtils.isEmpty(sortOrder)) { - if (mUriMatcher.match(uri) == SHARES) { - order = ProviderTableMeta.OCSHARES_DEFAULT_SORT_ORDER; - } else { - - order = ProviderTableMeta.FILE_DEFAULT_SORT_ORDER; + switch (mUriMatcher.match(uri)) { + case SHARES: + order = ProviderTableMeta.OCSHARES_DEFAULT_SORT_ORDER; + break; + case CAPABILITIES: + order = ProviderTableMeta.CAPABILITIES_DEFAULT_SORT_ORDER; + break; + default: // Files + order = ProviderTableMeta.FILE_DEFAULT_SORT_ORDER; + break; } } else { order = sortOrder; @@ -496,6 +436,10 @@ public class FileContentProvider extends ContentProvider { return db.update( ProviderTableMeta.OCSHARES_TABLE_NAME, values, selection, selectionArgs ); + case CAPABILITIES: + return db.update( + ProviderTableMeta.CAPABILITIES_TABLE_NAME, values, selection, selectionArgs + ); default: return db.update( ProviderTableMeta.FILE_TABLE_NAME, values, selection, selectionArgs @@ -539,30 +483,30 @@ public class FileContentProvider extends ContentProvider { // files table Log_OC.i("SQL", "Entering in onCreate"); db.execSQL("CREATE TABLE " + ProviderTableMeta.FILE_TABLE_NAME + "(" - + ProviderTableMeta._ID + " INTEGER PRIMARY KEY, " - + ProviderTableMeta.FILE_NAME + " TEXT, " - + ProviderTableMeta.FILE_PATH + " TEXT, " - + ProviderTableMeta.FILE_PARENT + " INTEGER, " - + ProviderTableMeta.FILE_CREATION + " INTEGER, " - + ProviderTableMeta.FILE_MODIFIED + " INTEGER, " - + ProviderTableMeta.FILE_CONTENT_TYPE + " TEXT, " - + ProviderTableMeta.FILE_CONTENT_LENGTH + " INTEGER, " - + ProviderTableMeta.FILE_STORAGE_PATH + " TEXT, " - + ProviderTableMeta.FILE_ACCOUNT_OWNER + " TEXT, " - + ProviderTableMeta.FILE_LAST_SYNC_DATE + " INTEGER, " - + ProviderTableMeta.FILE_KEEP_IN_SYNC + " INTEGER, " - + ProviderTableMeta.FILE_LAST_SYNC_DATE_FOR_DATA + " INTEGER, " - + ProviderTableMeta.FILE_MODIFIED_AT_LAST_SYNC_FOR_DATA + " INTEGER, " - + ProviderTableMeta.FILE_ETAG + " TEXT, " - + ProviderTableMeta.FILE_SHARED_VIA_LINK + " INTEGER, " - + ProviderTableMeta.FILE_PUBLIC_LINK + " TEXT, " - + ProviderTableMeta.FILE_PERMISSIONS + " TEXT null," - + ProviderTableMeta.FILE_REMOTE_ID + " TEXT null," - + ProviderTableMeta.FILE_UPDATE_THUMBNAIL + " INTEGER," //boolean - + ProviderTableMeta.FILE_IS_DOWNLOADING + " INTEGER," //boolean - + ProviderTableMeta.FILE_ETAG_IN_CONFLICT + " TEXT," - + ProviderTableMeta.FILE_SHARED_WITH_SHAREE + " INTEGER);" - ); + + ProviderTableMeta._ID + " INTEGER PRIMARY KEY, " + + ProviderTableMeta.FILE_NAME + " TEXT, " + + ProviderTableMeta.FILE_PATH + " TEXT, " + + ProviderTableMeta.FILE_PARENT + " INTEGER, " + + ProviderTableMeta.FILE_CREATION + " INTEGER, " + + ProviderTableMeta.FILE_MODIFIED + " INTEGER, " + + ProviderTableMeta.FILE_CONTENT_TYPE + " TEXT, " + + ProviderTableMeta.FILE_CONTENT_LENGTH + " INTEGER, " + + ProviderTableMeta.FILE_STORAGE_PATH + " TEXT, " + + ProviderTableMeta.FILE_ACCOUNT_OWNER + " TEXT, " + + ProviderTableMeta.FILE_LAST_SYNC_DATE + " INTEGER, " + + ProviderTableMeta.FILE_KEEP_IN_SYNC + " INTEGER, " + + ProviderTableMeta.FILE_LAST_SYNC_DATE_FOR_DATA + " INTEGER, " + + ProviderTableMeta.FILE_MODIFIED_AT_LAST_SYNC_FOR_DATA + " INTEGER, " + + ProviderTableMeta.FILE_ETAG + " TEXT, " + + ProviderTableMeta.FILE_SHARED_VIA_LINK + " INTEGER, " + + ProviderTableMeta.FILE_PUBLIC_LINK + " TEXT, " + + ProviderTableMeta.FILE_PERMISSIONS + " TEXT null," + + ProviderTableMeta.FILE_REMOTE_ID + " TEXT null," + + ProviderTableMeta.FILE_UPDATE_THUMBNAIL + " INTEGER," //boolean + + ProviderTableMeta.FILE_IS_DOWNLOADING + " INTEGER," //boolean + + ProviderTableMeta.FILE_ETAG_IN_CONFLICT + " TEXT," + + ProviderTableMeta.FILE_SHARED_WITH_SHAREE + " INTEGER);" + ); // Create table ocshares db.execSQL("CREATE TABLE " + ProviderTableMeta.OCSHARES_TABLE_NAME + "(" @@ -581,6 +525,10 @@ public class FileContentProvider extends ContentProvider { + ProviderTableMeta.OCSHARES_USER_ID + " INTEGER, " + ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED + " INTEGER," + ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + " TEXT );" ); + + // Create table capabilities + createCapabilitiesTable(db); + } @Override @@ -797,9 +745,52 @@ public class FileContentProvider extends ContentProvider { Log_OC.i("SQL", "OUT of the ADD in onUpgrade; oldVersion == " + oldVersion + ", newVersion == " + newVersion); + if (oldVersion < 13 && newVersion >= 13) { + Log_OC.i("SQL", "Entering in the #13 ADD in onUpgrade"); + db.beginTransaction(); + try { + // Create capabilities table + createCapabilitiesTable(db); + upgraded = true; + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } + } + if (!upgraded) + Log_OC.i("SQL", "OUT of the ADD in onUpgrade; oldVersion == " + oldVersion + + ", newVersion == " + newVersion); + } } + private void createCapabilitiesTable(SQLiteDatabase db){ + // Create table capabilities + db.execSQL("CREATE TABLE " + ProviderTableMeta.CAPABILITIES_TABLE_NAME + "(" + + ProviderTableMeta._ID + " INTEGER PRIMARY KEY, " + + ProviderTableMeta.CAPABILITIES_ACCOUNT_NAME + " TEXT, " + + ProviderTableMeta.CAPABILITIES_VERSION_MAYOR + " INTEGER, " + + ProviderTableMeta.CAPABILITIES_VERSION_MINOR + " INTEGER, " + + ProviderTableMeta.CAPABILITIES_VERSION_MICRO + " INTEGER, " + + ProviderTableMeta.CAPABILITIES_VERSION_STRING + " TEXT, " + + ProviderTableMeta.CAPABILITIES_VERSION_EDITION + " TEXT, " + + ProviderTableMeta.CAPABILITIES_CORE_POLLINTERVAL + " INTEGER, " + + ProviderTableMeta.CAPABILITIES_SHARING_API_ENABLED + " INTEGER, " // boolean + + ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_ENABLED + " INTEGER, " // boolean + + ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_PASSWORD_ENFORCED + " INTEGER, " // boolean + + ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_EXPIRE_DATE_ENABLED + " INTEGER, " // boolean + + ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_EXPIRE_DATE_DAYS + " INTEGER, " + + ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_EXPIRE_DATE_ENFORCED + " INTEGER, " // boolean + + ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_SEND_MAIL + " INTEGER, " // boolean + + ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_UPLOAD + " INTEGER, " // boolean + + ProviderTableMeta.CAPABILITIES_SHARING_USER_SEND_MAIL + " INTEGER, " // boolean + + ProviderTableMeta.CAPABILITIES_SHARING_RESHARING + " INTEGER, " // boolean + + ProviderTableMeta.CAPABILITIES_SHARING_FEDERATION_OUTGOING + " INTEGER, " // boolean + + ProviderTableMeta.CAPABILITIES_SHARING_FEDERATION_INCOMING + " INTEGER, " // boolean + + ProviderTableMeta.CAPABILITIES_FILES_BIGFILECHUNKING + " INTEGER, " // boolean + + ProviderTableMeta.CAPABILITIES_FILES_UNDELETE + " INTEGER, " // boolean + + ProviderTableMeta.CAPABILITIES_FILES_VERSIONING + " INTEGER );" ); // boolean + } /** * Version 10 of database does not modify its scheme. It coincides with the upgrade of the ownCloud account names diff --git a/src/com/owncloud/android/ui/adapter/X509CertificateViewAdapter.java b/src/com/owncloud/android/ui/adapter/X509CertificateViewAdapter.java index 1c8c8c28..742d6d82 100644 --- a/src/com/owncloud/android/ui/adapter/X509CertificateViewAdapter.java +++ b/src/com/owncloud/android/ui/adapter/X509CertificateViewAdapter.java @@ -20,6 +20,9 @@ */ package com.owncloud.android.ui.adapter; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.security.cert.CertificateEncodingException; import java.security.cert.X509Certificate; import java.text.DateFormat; import java.util.Date; @@ -31,6 +34,7 @@ import javax.security.auth.x500.X500Principal; import com.owncloud.android.R; import com.owncloud.android.ui.dialog.SslUntrustedCertDialog; +import android.util.Log; import android.view.View; import android.widget.TextView; @@ -42,7 +46,9 @@ public class X509CertificateViewAdapter implements SslUntrustedCertDialog.Certif //private final static String TAG = X509CertificateViewAdapter.class.getSimpleName(); private X509Certificate mCertificate = null; - + + private static final String TAG = X509CertificateViewAdapter.class.getSimpleName(); + public X509CertificateViewAdapter(X509Certificate certificate) { mCertificate = certificate; } @@ -63,25 +69,68 @@ public class X509CertificateViewAdapter implements SslUntrustedCertDialog.Certif } } + private byte[] getDigest(String algorithm, byte[] message) { + MessageDigest md = null; + + try { + md = MessageDigest.getInstance(algorithm); + } catch (NoSuchAlgorithmException e) { + return null; + } + md.reset(); + return md.digest(message); + } + private void showSignature(View dialogView) { - TextView sigView = ((TextView)dialogView.findViewById(R.id.value_signature)); - TextView algorithmView = ((TextView)dialogView.findViewById(R.id.value_signature_algorithm)); - sigView.setText(getHex(mCertificate.getSignature())); - algorithmView.setText(mCertificate.getSigAlgName()); + byte[] cert = null; + + TextView certFingerprintView = ((TextView) dialogView.findViewById(R.id.value_certificate_fingerprint)); + TextView algorithmView = ((TextView) dialogView.findViewById(R.id.value_signature_algorithm)); + + try { + cert = mCertificate.getEncoded(); + if (cert == null) { + + certFingerprintView.setText(R.string.certificate_load_problem); + algorithmView.setText(R.string.certificate_load_problem); + + } else { + + certFingerprintView.setText( + getDigestHexBytesWithColonsAndNewLines(dialogView, "SHA-256", cert) + + getDigestHexBytesWithColonsAndNewLines(dialogView, "SHA-1", cert) + + getDigestHexBytesWithColonsAndNewLines(dialogView, "MD5", cert)); + algorithmView.setText(mCertificate.getSigAlgName()); + + } + + } catch (CertificateEncodingException e) { + Log.e(TAG, "Problem while trying to decode the certificate."); + } + + } - public String getHex(final byte [] raw) { - if (raw == null) { - return null; + private final String getDigestHexBytesWithColonsAndNewLines(View dialogView, final String digestType, final byte [] cert) { + final byte[] rawDigest; + final String newLine = System.getProperty("line.separator"); + + rawDigest = getDigest(digestType, cert); + + if ( rawDigest == null) { + return digestType + ":" + newLine + dialogView.getContext().getString(R.string.digest_algorithm_not_available) + newLine + newLine; } - final StringBuilder hex = new StringBuilder(2 * raw.length); - for (final byte b : raw) { + + final StringBuilder hex = new StringBuilder(3 * rawDigest.length); + + for (final byte b : rawDigest) { final int hiVal = (b & 0xF0) >> 4; final int loVal = b & 0x0F; hex.append((char) ('0' + (hiVal + (hiVal / 10 * 7)))); hex.append((char) ('0' + (loVal + (loVal / 10 * 7)))); + hex.append(":"); } - return hex.toString(); + return digestType + ":" + newLine + hex.toString().replaceFirst("\\:$","") + newLine + newLine; } private void showValidity(Date notBefore, Date notAfter, View dialogView) { diff --git a/src/com/owncloud/android/ui/preview/PreviewMediaFragment.java b/src/com/owncloud/android/ui/preview/PreviewMediaFragment.java index a749b5ce..a047ab36 100644 --- a/src/com/owncloud/android/ui/preview/PreviewMediaFragment.java +++ b/src/com/owncloud/android/ui/preview/PreviewMediaFragment.java @@ -40,8 +40,6 @@ import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.media.MediaPlayer.OnErrorListener; import android.media.MediaPlayer.OnPreparedListener; -import android.net.Uri; -import android.os.Build; import android.os.Bundle; import android.os.IBinder; import android.view.LayoutInflater; @@ -168,7 +166,7 @@ public class PreviewMediaFragment extends FileFragment implements public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); - Log_OC.e(TAG, "onCreateView"); + Log_OC.v(TAG, "onCreateView"); mView = inflater.inflate(R.layout.file_preview, container, false); @@ -189,7 +187,7 @@ public class PreviewMediaFragment extends FileFragment implements @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); - Log_OC.e(TAG, "onActivityCreated"); + Log_OC.v(TAG, "onActivityCreated"); OCFile file = getFile(); if (savedInstanceState == null) { @@ -255,7 +253,7 @@ public class PreviewMediaFragment extends FileFragment implements @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); - Log_OC.e(TAG, "onSaveInstanceState"); + Log_OC.v(TAG, "onSaveInstanceState"); outState.putParcelable(PreviewMediaFragment.EXTRA_FILE, getFile()); outState.putParcelable(PreviewMediaFragment.EXTRA_ACCOUNT, mAccount); @@ -279,7 +277,7 @@ public class PreviewMediaFragment extends FileFragment implements @Override public void onStart() { super.onStart(); - Log_OC.e(TAG, "onStart"); + Log_OC.v(TAG, "onStart"); OCFile file = getFile(); if (file != null) { @@ -413,7 +411,7 @@ public class PreviewMediaFragment extends FileFragment implements /** * Update the file of the fragment with file value * - * @param file + * @param file Replaces the held file with a new one */ public void updateFile(OCFile file) { setFile(file); @@ -459,7 +457,7 @@ public class PreviewMediaFragment extends FileFragment implements mUri = generateUrlWithCredentials(account, context, getFile()); } - mVideoPreview.setVideoPath(mUri); + mVideoPreview.setVideoURI(getFile().getStorageUri()); } public static String generateUrlWithCredentials(Account account, Context context, OCFile file){ @@ -523,7 +521,7 @@ public class PreviewMediaFragment extends FileFragment implements */ @Override public void onPrepared(MediaPlayer vp) { - Log_OC.e(TAG, "onPrepared"); + Log_OC.v(TAG, "onPrepared"); mVideoPreview.seekTo(mSavedPlaybackPosition); if (mAutoplay) { mVideoPreview.start(); @@ -543,25 +541,9 @@ public class PreviewMediaFragment extends FileFragment implements */ @Override public void onCompletion(MediaPlayer mp) { - Log_OC.e(TAG, "completed"); + Log_OC.v(TAG, "completed"); if (mp != null) { mVideoPreview.seekTo(0); - // next lines are necessary to work around undesired video loops - if (Build.VERSION.SDK_INT == Build.VERSION_CODES.GINGERBREAD) { - mVideoPreview.pause(); - - } - else { - if (Build.VERSION.SDK_INT == Build.VERSION_CODES.GINGERBREAD_MR1) { - // mVideePreview.pause() is not enough - - mMediaController.setEnabled(false); - mVideoPreview.stopPlayback(); - mAutoplay = false; - mSavedPlaybackPosition = 0; - mVideoPreview.setVideoPath(getFile().getStoragePath()); - } - } } // else : called from onError() mMediaController.updatePausePlay(); } @@ -583,25 +565,25 @@ public class PreviewMediaFragment extends FileFragment implements @Override public void onPause() { - Log_OC.e(TAG, "onPause"); + Log_OC.v(TAG, "onPause"); super.onPause(); } @Override public void onResume() { super.onResume(); - Log_OC.e(TAG, "onResume"); + Log_OC.v(TAG, "onResume"); } @Override public void onDestroy() { - Log_OC.e(TAG, "onDestroy"); + Log_OC.v(TAG, "onDestroy"); super.onDestroy(); } @Override public void onStop() { - Log_OC.e(TAG, "onStop"); + Log_OC.v(TAG, "onStop"); mPrepared = false; if (mMediaServiceConnection != null) { @@ -642,12 +624,12 @@ public class PreviewMediaFragment extends FileFragment implements @Override public void onConfigurationChanged(Configuration newConfig) { - Log_OC.e(TAG, "onConfigurationChanged " + this); + Log_OC.v(TAG, "onConfigurationChanged " + this); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { - Log_OC.e(TAG, "onActivityResult " + this); + Log_OC.v(TAG, "onActivityResult " + this); super.onActivityResult(requestCode, resultCode, data); if (resultCode == Activity.RESULT_OK) { mSavedPlaybackPosition = data.getExtras().getInt( @@ -721,7 +703,7 @@ public class PreviewMediaFragment extends FileFragment implements @Override public void onServiceDisconnected(ComponentName component) { if (component.equals(new ComponentName(getActivity(), MediaService.class))) { - Log_OC.e(TAG, "Media service suddenly disconnected"); + Log_OC.w(TAG, "Media service suddenly disconnected"); if (mMediaController != null) { mMediaController.setMediaPlayer(null); } @@ -785,7 +767,7 @@ public class PreviewMediaFragment extends FileFragment implements if (mPrepared) { mSavedPlaybackPosition = mVideoPreview.getCurrentPosition(); } - Log_OC.e(TAG, "getting position: " + mSavedPlaybackPosition); + Log_OC.v(TAG, "getting position: " + mSavedPlaybackPosition); return mSavedPlaybackPosition; } diff --git a/src/com/owncloud/android/ui/preview/PreviewVideoActivity.java b/src/com/owncloud/android/ui/preview/PreviewVideoActivity.java index 383b0828..c1b4125e 100644 --- a/src/com/owncloud/android/ui/preview/PreviewVideoActivity.java +++ b/src/com/owncloud/android/ui/preview/PreviewVideoActivity.java @@ -78,7 +78,7 @@ public class PreviewVideoActivity extends FileActivity implements OnCompletionLi @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - Log_OC.e(TAG, "ACTIVITY\t\tonCreate"); + Log_OC.v(TAG, "onCreate"); setContentView(R.layout.video_layout); @@ -110,7 +110,6 @@ public class PreviewVideoActivity extends FileActivity implements OnCompletionLi @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); - Log_OC.e(TAG, "ACTIVITY\t\tonSaveInstanceState"); outState.putInt(PreviewVideoActivity.EXTRA_START_POSITION, mVideoPlayer.getCurrentPosition()); outState.putBoolean(PreviewVideoActivity.EXTRA_AUTOPLAY , mVideoPlayer.isPlaying()); } @@ -118,7 +117,7 @@ public class PreviewVideoActivity extends FileActivity implements OnCompletionLi @Override public void onBackPressed() { - Log_OC.e(TAG, "ACTIVTIY\t\tonBackPressed"); + Log_OC.v(TAG, "onBackPressed"); Intent i = new Intent(); i.putExtra(EXTRA_AUTOPLAY, mVideoPlayer.isPlaying()); i.putExtra(EXTRA_START_POSITION, mVideoPlayer.getCurrentPosition()); @@ -136,7 +135,7 @@ public class PreviewVideoActivity extends FileActivity implements OnCompletionLi */ @Override public void onPrepared(MediaPlayer mp) { - Log_OC.e(TAG, "ACTIVITY\t\tonPrepare"); + Log_OC.v(TAG, "onPrepare"); mVideoPlayer.seekTo(mSavedPlaybackPosition); if (mAutoplay) { mVideoPlayer.start(); @@ -204,20 +203,20 @@ public class PreviewVideoActivity extends FileActivity implements OnCompletionLi file = getStorageManager().getFileById(file.getFileId()); if (file != null) { if (file.isDown()) { - mVideoPlayer.setVideoPath(file.getStoragePath()); - + mVideoPlayer.setVideoURI(file.getStorageUri()); + } else { String url; url = PreviewMediaFragment.generateUrlWithCredentials(getAccount(), getApplicationContext(), getFile()); mVideoPlayer.setVideoURI(Uri.parse(url)); } - + // create and prepare control panel for the user mMediaController = new MediaController(this); mMediaController.setMediaPlayer(mVideoPlayer); mMediaController.setAnchorView(mVideoPlayer); mVideoPlayer.setMediaController(mMediaController); - + } else { finish(); } diff --git a/user_manual/android_app.rst b/user_manual/android_app.rst index de2b2d57..96612349 100644 --- a/user_manual/android_app.rst +++ b/user_manual/android_app.rst @@ -22,13 +22,13 @@ Dolphin. The first time you log in to a new ownCloud account you'll see a screen with a download link to the ownCloud app in the `Google Play store `_. -.. figure:: images/android-first-screen.jpg +.. figure:: images/android-1.png + :scale: 75% + :alt: Android app new account welcome screen. -You will also find these links on your Personal page in the Web interface, +You will also find these links on your Personal page in the ownCloud Web interface. -You can also get it from the `Amazon App store -`_, and get source code and -more information from the `ownCloud download page +Find source code and more information from the `ownCloud download page `_. Connecting to Your ownCloud Server @@ -39,77 +39,100 @@ screen. Enter your server URL, login name, password, and click the Connect button. (Click the eyeball to the right of your password to expose your password.) -.. figure:: images/android-new-account.png +.. figure:: images/android-2.png + :scale: 75% + :alt: New account creation screen. For best security your ownCloud server should be SSL-enabled, so that you can connect via ``https``. The ownCloud app will test your connection as soon as you enter it and tell you if you entered it correctly. If your server has a -self-signed SSL certificate you'll get a scary warning how it is not to be +self-signed SSL certificate you'll get a warning that it is not to be trusted. Click the OK button to accept the certificate and complete your account setup. -.. figure:: images/android-ssl-cert.png +.. figure:: images/android-3.png + :alt: SSL certificate warning. Managing Files -------------- -Now you should see the Files page of your ownCloud account. Click the overflow -button at the top right (that's the one with three vertical dots, and that is -really what it is called) to open a user menu. ``Refresh account`` refreshes the -page view. ``Settings`` take you to your settings menu. ``Sort`` gives you the -option to sort your files by date, or alphabetically. +Now you should see the Files page of your ownCloud account. -.. figure:: images/android-files-page.png +.. figure:: images/android-4.png + :scale: 75% + :alt: Your ownCloud Files page. -The little file folder icon to the left of the overflow button opens a dialog to -create a new folder. The arrow button opens a file upload dialog, and you can -either upload content from other Android apps such as Google Drive, the Gallery, -your music player, or from your Android filesystem. When you add a new file -you will see a confirmation on the top left when it has uploaded successfully, -and it is immediately synchronized with the server. - -.. figure:: images/android-upload.png - -All files (that you have permission to access) on your ownCloud server are -displayed in your Android app, but are not downloaded until you download them. -Downloaded files are marked with a green arrow. - -.. figure:: images/android-file-list.png - -Download and preview a file with a short press on the filename. When the file -is in preview mode, a short press on the overflow button opens a menu with -options for sharing, opening with an app, removing, sending, and displaying file -details. +The ownCloud menu at the top left shows the name of the logged-in user, has a +shortcut to your files, and contains the Settings button. -.. figure:: images/android-file.png +.. figure:: images/android-5.png + :alt: Top-left menu. +Click the overflow button at the top right (that's the one with three vertical +dots, and that is really what it is called) to open a user menu. ``Refresh +account`` syncs your files, and ``Sort`` gives you the option to sort your files +by date, or alphabetically. -A long press on the filename does not download it, but opens a dialog with -options for sharing, downloading, renaming, moving, removing, sending, and -viewing file details. +.. figure:: images/android-6.png + :alt: Top-right menu. +The little file folder icon to the left of the overflow button opens a dialog to +create a new folder. The arrow button opens a file upload dialog, and you can +either upload content from other Android apps such as Google Drive, the Gallery, +your music player, or from your Android filesystem. -.. figure:: images/android-file-options.png +.. figure:: images/android-7.png + :scale: 75% + :alt: File upload dialogue. +All files (that you have permission to access) on your ownCloud server are +displayed in your Android app, but are not downloaded until you click on them to +download them. Downloaded files are marked with a green arrow. + +.. figure:: images/android-8.png + :scale: 75% + :alt: Downloaded files are marked with green arrows. + +Download and preview a file with a short press on the filename. Then a short +press on the overflow button opens a menu with +options for managing your file. + +.. figure:: images/android-9.png + :scale: 75% + :alt: File management options. Betsy Ross says "Don't believe everything you + read on the Internet." + +When you are on your mail Files page, a long press on any folder displays a +list of options: Share Link, Download, Rename, Move, Copy, and Remove. + +.. figure:: images/android-11.png + :scale: 75% + :alt: Folder and file management options. + +When you enter a folder, a long press on any file or folder has these +additional options: Open With, Refresh File, Send, Favorite, and Details. The +Download option appears on files that have not been downloaded to your Android +device. Settings -------- -The Settings screen offers a number of useful options. In the Accounts -section you can configure multiple ownCloud accounts. +Use the Settings screen to control your ownCloud app functions. + +.. figure:: images/android-10.png + :scale: 75% + :alt: Setting screen. + +In the Accounts section you can set up and manage multiple accounts. The Security section sets up strong two-factor authentication by allowing you to add a PIN (personal identification number) to access your account. -The Instant Uploads section creates a directory, :file:`/InstantUpload`, and -any photos or videos created with your Android device's camera are instantly +The Instant Uploads section creates a directory, :file:`/InstantUpload`, and any +photos or videos created with your Android device's camera are instantly uploaded to this directory. You also have the option to choose any other -existing directory. Another nice option is Upload Pictures/Video via WiFi Only, -to conserve your Internet data usage. - -.. figure:: images/android-settings.png +existing directory, or to create a new one. Another nice option is Upload +Pictures/Video via WiFi Only, to conserve your mobile data usage. The bottom section of the Settings screen has links to help and the app's version number. - -.. figure:: images/android-help.png diff --git a/user_manual/images/android-1.png b/user_manual/images/android-1.png new file mode 100644 index 00000000..ed45645a Binary files /dev/null and b/user_manual/images/android-1.png differ diff --git a/user_manual/images/android-10.png b/user_manual/images/android-10.png new file mode 100644 index 00000000..187a753e Binary files /dev/null and b/user_manual/images/android-10.png differ diff --git a/user_manual/images/android-11.png b/user_manual/images/android-11.png new file mode 100644 index 00000000..c84166ec Binary files /dev/null and b/user_manual/images/android-11.png differ diff --git a/user_manual/images/android-2.png b/user_manual/images/android-2.png new file mode 100644 index 00000000..ddee8e40 Binary files /dev/null and b/user_manual/images/android-2.png differ diff --git a/user_manual/images/android-3.png b/user_manual/images/android-3.png new file mode 100644 index 00000000..14afed9f Binary files /dev/null and b/user_manual/images/android-3.png differ diff --git a/user_manual/images/android-4.png b/user_manual/images/android-4.png new file mode 100644 index 00000000..ee9cf66d Binary files /dev/null and b/user_manual/images/android-4.png differ diff --git a/user_manual/images/android-5.png b/user_manual/images/android-5.png new file mode 100644 index 00000000..d089cc1a Binary files /dev/null and b/user_manual/images/android-5.png differ diff --git a/user_manual/images/android-6.png b/user_manual/images/android-6.png new file mode 100644 index 00000000..20f6fbbd Binary files /dev/null and b/user_manual/images/android-6.png differ diff --git a/user_manual/images/android-7.png b/user_manual/images/android-7.png new file mode 100644 index 00000000..aaa33bf1 Binary files /dev/null and b/user_manual/images/android-7.png differ diff --git a/user_manual/images/android-8.png b/user_manual/images/android-8.png new file mode 100644 index 00000000..b1ecc62f Binary files /dev/null and b/user_manual/images/android-8.png differ diff --git a/user_manual/images/android-9.png b/user_manual/images/android-9.png new file mode 100644 index 00000000..631f6b19 Binary files /dev/null and b/user_manual/images/android-9.png differ diff --git a/user_manual/images/android-downloads.png b/user_manual/images/android-downloads.png deleted file mode 100644 index e0bb5454..00000000 Binary files a/user_manual/images/android-downloads.png and /dev/null differ diff --git a/user_manual/images/android-file-list.png b/user_manual/images/android-file-list.png deleted file mode 100644 index e479b9f0..00000000 Binary files a/user_manual/images/android-file-list.png and /dev/null differ diff --git a/user_manual/images/android-file-options.png b/user_manual/images/android-file-options.png deleted file mode 100644 index 12867a31..00000000 Binary files a/user_manual/images/android-file-options.png and /dev/null differ diff --git a/user_manual/images/android-file.png b/user_manual/images/android-file.png deleted file mode 100644 index 89ffd28b..00000000 Binary files a/user_manual/images/android-file.png and /dev/null differ diff --git a/user_manual/images/android-files-page.png b/user_manual/images/android-files-page.png deleted file mode 100644 index 1c7fc4dd..00000000 Binary files a/user_manual/images/android-files-page.png and /dev/null differ diff --git a/user_manual/images/android-first-screen.jpg b/user_manual/images/android-first-screen.jpg deleted file mode 100644 index f4c5132a..00000000 Binary files a/user_manual/images/android-first-screen.jpg and /dev/null differ diff --git a/user_manual/images/android-help.png b/user_manual/images/android-help.png deleted file mode 100644 index 56a7464f..00000000 Binary files a/user_manual/images/android-help.png and /dev/null differ diff --git a/user_manual/images/android-new-account.png b/user_manual/images/android-new-account.png deleted file mode 100644 index ffbe12e5..00000000 Binary files a/user_manual/images/android-new-account.png and /dev/null differ diff --git a/user_manual/images/android-settings.png b/user_manual/images/android-settings.png deleted file mode 100644 index 7a160845..00000000 Binary files a/user_manual/images/android-settings.png and /dev/null differ diff --git a/user_manual/images/android-ssl-cert.png b/user_manual/images/android-ssl-cert.png deleted file mode 100644 index 9286fe62..00000000 Binary files a/user_manual/images/android-ssl-cert.png and /dev/null differ diff --git a/user_manual/images/android-upload.png b/user_manual/images/android-upload.png deleted file mode 100644 index 6ee1b952..00000000 Binary files a/user_manual/images/android-upload.png and /dev/null differ