From: jabarros Date: Fri, 26 Dec 2014 08:04:02 +0000 (+0100) Subject: Merge pull request #784 from ekeitho/develop X-Git-Tag: oc-android-1.7.0_signed~61 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/f0905fbaac2249eb08a57a27e4471d1b2ddfac98?hp=150050aeb07f6b4cb6b7694940cf49eb70f94487 Merge pull request #784 from ekeitho/develop subject mail populated when user shares >>file/folder<< --- diff --git a/res/layout/preference_widget_radiobutton.xml b/res/layout/preference_widget_radiobutton.xml new file mode 100644 index 00000000..85f8f600 --- /dev/null +++ b/res/layout/preference_widget_radiobutton.xml @@ -0,0 +1,21 @@ + + + + \ No newline at end of file diff --git a/res/values-af-rZA/strings.xml b/res/values-af-rZA/strings.xml index 0e39030a..634d2672 100644 --- a/res/values-af-rZA/strings.xml +++ b/res/values-af-rZA/strings.xml @@ -7,6 +7,8 @@ Gebruikersnaam Wagwoord sekondes gelede + Ja + Nee OK Kanseleer Fout diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index 5134014b..49d6c3c7 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -53,6 +53,10 @@ منذ ثواني لا يوجد شيء هنا. إرفع بعض الملفات! جاري التحميل ... + مجلد + مجلدات + ملف + ملفات اضغظ على الملف ليتم عرض خيارات أكثر الحجم : النوع : diff --git a/res/values-bg-rBG/strings.xml b/res/values-bg-rBG/strings.xml index 4b3ecfd1..27178f21 100644 --- a/res/values-bg-rBG/strings.xml +++ b/res/values-bg-rBG/strings.xml @@ -66,6 +66,7 @@ папка папки файл + файл Натисни върху файл, за да видиш допълнителна информация. Размер: Тип: @@ -281,8 +282,6 @@ Сигурна връзка е пренасочена по несигурен път. Доклади Изпрати История - ownCloud Android доклади - Зареждане на информация... Нужна е идентификация Грешна парола Премести diff --git a/res/values-cs-rCZ/strings.xml b/res/values-cs-rCZ/strings.xml index 03387293..56b77025 100644 --- a/res/values-cs-rCZ/strings.xml +++ b/res/values-cs-rCZ/strings.xml @@ -281,8 +281,9 @@ správce systému. Bezpečné spojení je přesměrováno na nezabezpečenou trasu. Logy Odeslat historii - Logy aplikace ownCloud pro Android - Načítám data... + Nebyla nalezena žádná aplikace pro zasílání logů. Nainstalujte poÅ¡tovní aplikaci! + %1$s logy aplikace pro Android + Načítání dat… Vyžadováno přihlášení Nesprávné heslo Přesunout diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index ee807fca..149862b0 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -280,8 +280,9 @@ Sikker forbindelse videredirigeres til en usikker rute. Logge Send historik - App-logregistreringer for ownCloud Android - Indlæser data... + Der blev ikke fundet apps, der kan sende logge. Installér mail-app\'en! + %1$s Android-app - logge + Indlæser data ... Godkendelse pÃ¥krævet Forkert kodeord Flyt diff --git a/res/values-de-rDE/strings.xml b/res/values-de-rDE/strings.xml index dca43024..b1a9e68a 100644 --- a/res/values-de-rDE/strings.xml +++ b/res/values-de-rDE/strings.xml @@ -282,8 +282,9 @@ Die gesicherte Verbindung wird auf eine unsichere Route weitergeleitet. Protokolle Verlauf senden - Protokolle der ownCloud-Android-App - Daten werden geladen … + Keine App zum Versenden der Meldungen gefunden. Bitte installieren Sie die Mail-App! + %1$s Android-App Meldungen + Lade Daten… Legitimierung benötigt Falsches Passwort Verschieben @@ -296,5 +297,5 @@ um diese Datei zu verschieben Sofortiges Hochladen Sicherheit - Upload-Verzeichnis für Videos + Verzeichnis zum Hochladen der Videos diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index bfc86cee..23cdb642 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -282,8 +282,9 @@ Die gesicherte Verbindung wird auf eine unsichere Route weitergeleitet. Protokolle Verlauf senden - Protokolle der ownCloud-Android-App - Daten werden geladen … + Keine App zum Versenden der Meldungen gefunden. Bitte installiere die Mail-App! + %1$s Android-App Meldungen + Lade Daten… Legitimierung benötigt Falsches Passwort Verschieben @@ -296,4 +297,5 @@ um diese Datei zu verschieben Sofortiges Hochladen Sicherheit + Verzeichnis zum Hochladen der Videos diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index 917ca39c..805c7257 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -11,6 +11,8 @@ Ρυθμίσεις Λεπτομέρειες Αποστολή + Ταξινόμηση + Ταξινόμηση κατά A-Z Νεότερο - Παλαιότερο @@ -36,6 +38,8 @@ Προτείνετε σε φίλο Σχόλια Αποτύπωμα + Αποθήκευση σημείου διαμοιρασμού + Αποθήκευση τελευταίου σημείου διαμοιρασμού μεταφόρτωσης Δοκιμάστε %1$s στο κινητό σας! Θα ήθελα να σε προσκαλέσω να χρησιμοποιήσεις το %1$s στο κινητό σου!\nΛήψη εδώ: %2$s Έλεγχος Διακομιστή @@ -278,7 +282,8 @@ Ασφαλής σύνδεση ανακατευθύνεται σε μια μη ασφαλή διαδρομή. Αρχεία καταγραφών Αποστολή ιστορικού - αρχεία καταγραφής της εφαρμογής ownCloud Android + Δεν εντοπίστηκε εφαρμογή αποστολής αναφορών συστήματος. Εγκαταστήστε το mail app! + %1$s αναφορές του Android app Φόρτωση δεδομένων.... Απαιτείται πιστοποίηση Εσφαλμένο συνθηματικό @@ -292,4 +297,5 @@ για μετακίνηση αυτού του αρχείου Στιγμιαίες Μεταφορτώσεις Ασφάλεια + Διαδρομή Μεταφόρτωσης Βίντεο diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml index 27e95793..054cb6b2 100644 --- a/res/values-en-rGB/strings.xml +++ b/res/values-en-rGB/strings.xml @@ -282,8 +282,9 @@ Secure connection is redirected to an unsecured route. Logs Send History - ownCloud Android app logs - Loading data... + No app for sending logs found. Install mail app! + %1$s Android app logs + Loading data… Authentication required Incorrect password Move diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index 63e96215..793c094b 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -282,7 +282,8 @@ La conexión segura está siendo desviada por una ruta insegura. Logs Enviar historial - Logs de las apps ownCloud Android + No se ha encontrado una app para enviar logs. Instale la app mail! + Se han encontrado %1$s logs de la app Android Cargando datos... Se necesita autenticación Contraseña incorrecta diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml index 5c25d132..e7ac96be 100644 --- a/res/values-et-rEE/strings.xml +++ b/res/values-et-rEE/strings.xml @@ -286,8 +286,6 @@ Allpool on loend kohalikest failidest ning serveris asuvatest failidest %5$s, mi Turvaline ühendus suunatakse läbi turvamata ühenduse. Logid Saada ajalugu - ownCloud Android rakenduse logid - Andmete laadimine... Autentimine on vajalik Vale parool Tõsta ümber diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml index ac6f3252..d8dd2639 100644 --- a/res/values-eu/strings.xml +++ b/res/values-eu/strings.xml @@ -271,8 +271,6 @@ Mesedez, baimendu berriz Fitxategia jadanik ez dago eskuragarri zerbitzarian Kontuak Gehitu kontua - ownCloud Android programaren egunerokoak - Datuak kargatzen... Autentikazioa beharrezkoa Pasahitz okerra Mugitu diff --git a/res/values-fi-rFI/strings.xml b/res/values-fi-rFI/strings.xml index 571a9123..2fe99bf5 100644 --- a/res/values-fi-rFI/strings.xml +++ b/res/values-fi-rFI/strings.xml @@ -75,6 +75,7 @@ Päivitä tiedosto Tiedoston nimeksi muutettiin %1$s siirron yhteydessä Jaa linkki + Poista linkin jako Kyllä Ei OK @@ -151,6 +152,7 @@ Testataan yhteyttä... Väärin tehdyt palvelin-asetukset Laitteella on jo tili samalle käyttäjälle ja palvelimelle + Syötetty käyttäjä ei täsmää tämän tilin käyttäjän kanssa Tuntematon virhe Isäntää ei löydy Palvelin-instanssia ei löydetty @@ -259,8 +261,8 @@ Salattu yhteys on ohjattu uudelleen salaamatonta reittiä pitkin. Lokit Lähetä historia - ownCloudin Android-sovelluksen lokit - Ladataan tietoja... + Lokien lähettämistä varten ei löytynyt sovellusta. Asenna sähköpostisovellus! + Ladataan tietoja… Tunnistautuminen vaaditaan Väärä salasana Siirrä diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml new file mode 100644 index 00000000..52444048 --- /dev/null +++ b/res/values-fi/strings.xml @@ -0,0 +1,43 @@ + + + Lähetä + Avaa sovelluksessa + Luo kansio + Asetukset + + Lisää + Hallitse tilejä + Sovelluksen PIN + Apua + http://esimerkki.fi/palvelu/ + Käyttäjätunnus + Salasana + Lähetä + Ei sisältöä. Siirrä tänne jotakin! + Ladataan... + kansio + kansiot + tiedosto + Tiedostot + Jaa linkki + Poista linkin jako + KYLLÄ + EI + Ok + Peruuta + Virhe + Virheellinen PIN + Sovelluksen PIN poistettu + Sovelluksen PIN tallennettu + Syötetty käyttäjä ei täsmää tämän tilin käyttäjän kanssa + Palvelin ei tue tätä autentikointitapaa + Nimeä uudelleen + Sijainti: + Ylikirjoita + Kopioi linkki + + Siirrä + Valitse + Tiedosto on jo kohdekansiossa. + diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 73d97d56..5876c04b 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -144,7 +144,7 @@ Ci-dessous la liste des fichiers locaux, et les fichiers distants dans %5$s auxq %1$s lecteur de musique %1$s (lecture) %1$s (chargement) - %1$s pourcentage de lecture finie + Lecture de %1$s terminée Fichier média introuvable Aucun compte n\'a été trouvé Le fichier n\'est pas dans un compte valide @@ -286,7 +286,7 @@ Ci-dessous la liste des fichiers locaux, et les fichiers distants dans %5$s auxq La connexion sécurisée est redirigée via une route non-sécurisée. Journaux Envoyer l\'historique - Journaux de l\'application Android ownCloud + Journaux de l\'application Android %1$s Chargement des données... Authentification requise Mot de passe incorrect @@ -300,4 +300,5 @@ Ci-dessous la liste des fichiers locaux, et les fichiers distants dans %5$s auxq de déplacer ce fichier Téléchargements instantanés Sécurité + Chemin d\'accès pour le téléversement diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml index a7605641..c3a178a5 100644 --- a/res/values-gl/strings.xml +++ b/res/values-gl/strings.xml @@ -283,7 +283,8 @@ Descárgueo de aquí: %2$s A conexión segura está a ser redirixida a unha ruta non segura. Rexistros Enviar o historial - Rexistros da app ownCloud Android + Non se atopou unha aplicación para enviar os rexistros. Instale unha aplicación de correo! + Rexistros da aplicación %1$s Android Cargando os datos... Requírese autenticación Contrasinal incorrecto diff --git a/res/values-hu-rHU/strings.xml b/res/values-hu-rHU/strings.xml index bdfb3e5c..ff42f941 100644 --- a/res/values-hu-rHU/strings.xml +++ b/res/values-hu-rHU/strings.xml @@ -246,8 +246,11 @@ Bemásolva a vágólapra Fiókok + Fiók hozzáadása + Naplók Felhasználóazonosítás szükséges Hibás jelszó + Mozgatás Válasszon Biztonság diff --git a/res/values-id/strings.xml b/res/values-id/strings.xml index 795cfde0..1b0dd761 100644 --- a/res/values-id/strings.xml +++ b/res/values-id/strings.xml @@ -282,8 +282,6 @@ Sambungan aman dialihkan ke rute yang tidak aman. Log Kirim Riwayat - Log apl ownCloud Android - Memuat data... Diperlukan otentikasi Sandi salah Pindah diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 5f66521c..94fc138e 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -35,7 +35,7 @@ Mostra i log registrati Elimina la cronologia Aiuto - Consiglia ad un amico + Consiglia a un amico Segnalazioni Imprint Ricorda la posizione della condivisione @@ -282,7 +282,8 @@ La connessione sicura è rediretta su un percorso non sicuro. Registri Invia cronologia - Registri applicazione ownCloud Android + Non è stata trovata alcuna applicazione per l\'invio dei registri. Installa l\'applicazione mail! + Registri applicazione %1$s Android Caricamento dati in corso... Autenticazione richiesta Password errata diff --git a/res/values-ja-rJP/strings.xml b/res/values-ja-rJP/strings.xml index a3c0452e..cbc84bb5 100644 --- a/res/values-ja-rJP/strings.xml +++ b/res/values-ja-rJP/strings.xml @@ -283,8 +283,6 @@ 暗号化接続は非暗号化接続にリダイレクトされました。 ログ ログを送信 - ownCloud Android アプリログ - 読込中 ... 認証を必要とする 無効なパスワード 移動 @@ -297,4 +295,5 @@ このファイルを移動 自動アップロード セキュリティ + 動画のアップロードパス diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml index 69623e19..f55428eb 100644 --- a/res/values-kn/strings.xml +++ b/res/values-kn/strings.xml @@ -1,6 +1,35 @@ + ಪೇರಿಸು + ಕಡತಗಳು + ಹೊಸ ಕಡತಕೋಶ + ಆಯ್ಕೆ + ಕಳುಹಿಸಿ + ಇನ್ನಷ್ಟು + ಸಹಾಯ + ಮುದ್ರೆ + ಬಳಕೆಯ ಹೆಸರು + ಗುಪ್ತ ಪದ + ಕಡತಗಳು + ಪೇರಿಸು + ಪ್ರತಿಯನ್ನು ಸ್ಥಳೀಯವಾಗಿ ಉಳಿಸಿಕೊಳ್ಳಿ + ಸಂಪರ್ಕ ಕೊಂಡಿಯನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು + ಹೌದು + ಇಲ್ಲ + ಸರಿ + ವರ್ಗಾವಣೆ ರದ್ದು ಮಾಡಿ + ರದ್ದು + ತಪ್ಪಾಗಿದೆ + ಗೊತ್ತಿಲ್ಲದ ದೋಷ + ಗುಪ್ತ ಪದವನ್ನು ಬದಲಾಯಿಸಿ + ಮರುಹೆಸರಿಸು + ತೆಗೆದುಹಾಕಿ + ಕಳುಹಿಸಿ + ದೃಢೀಕರಣ ಅಗತ್ಯವಿದೆ + ದುರ್ಬಲ ಗುಪ್ತಪದ + ಆಯ್ಕೆ + ಭದ್ರತೆ diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml new file mode 100644 index 00000000..69623e19 --- /dev/null +++ b/res/values-lo/strings.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/res/values-lt-rLT/strings.xml b/res/values-lt-rLT/strings.xml index 30cca384..76e0e523 100644 --- a/res/values-lt-rLT/strings.xml +++ b/res/values-lt-rLT/strings.xml @@ -11,6 +11,12 @@ Nustatymai Informacija Siųsti + Rikiuoti + Rikiuoti pagal + + A-Z + Naujausi - Seniausi + Bendras @@ -32,6 +38,8 @@ Rekomenduoti draugui Atsiliepimai Imprint + Prisiminti bendrinimo vietą + Prisiminti paskutinio bendrinimo įkėlimo vietą IÅ¡bandykite %1$s savo iÅ¡maniajame telefone! Patikrinti Serverį Serverio adresas diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml index 69623e19..b4185fd3 100644 --- a/res/values-mn/strings.xml +++ b/res/values-mn/strings.xml @@ -1,6 +1,17 @@ + Байршуулах + Файлууд + Тохиргоо + Ерөнхий + Хэрэглэгчийн нэр + Нууц үг + Файлууд + Байршуулах + Аккаунт үүсгэх + Устгах + Аюулгүй байдал diff --git a/res/values-nb-rNO/strings.xml b/res/values-nb-rNO/strings.xml index c9a09ab1..98f4ff6b 100644 --- a/res/values-nb-rNO/strings.xml +++ b/res/values-nb-rNO/strings.xml @@ -272,8 +272,6 @@ Legg til en konto Logger Send historikk - logger for ownCloud Android app - Laster data... Autentisering kreves Feil passord Flytt diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index 600e182d..a6fc894b 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -285,7 +285,8 @@ Hieronder staan de lokale bestanden en de externe bestanden in %5$s waar ze naar De beveiligde verbinding is omgeleid naar een onveilige route. Logs Verstuur geschiedenis - ownCloud Android app logs + Geen app voor versturen van logs gevonden. Installeer de mail app! + %1$s Android app logs Laden data... Authenticatie vereist Onjuist wachtwoord @@ -299,4 +300,5 @@ Hieronder staan de lokale bestanden en de externe bestanden in %5$s waar ze naar om dit bestand te verplaatsen Directe uploads Beveiliging + Upload Video Pad diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index 7715d945..2049b35f 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -38,6 +38,7 @@ Poleć znajomemu Wsparcie Stopka + Zapamiętaj położenie udostępnienia Wypróbuj %1$s na swoim smartphonie! Chciałbym zaprosić Cię do używania %1$s na swoim smartfonie!\nŚciągnij tutaj: %2$s Sprawdź serwer @@ -280,7 +281,7 @@ Bezpieczne połączenie jest przekierowywane przez niezabezpieczone trasy. Logi Wyślij historię - Logi aplikacji ownCloud Android + %1$s Logi aplikacji Android Ładuję dane... Wymagana autoryzacja Złe hasło @@ -294,4 +295,5 @@ aby przenieść ten plik Automatyczne wysyłanie Bezpieczeństwo + Katalog wysyłania dla wideo diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml index 004c2ab3..45909b45 100644 --- a/res/values-pt-rBR/strings.xml +++ b/res/values-pt-rBR/strings.xml @@ -282,8 +282,9 @@ Conexão segura esta redirecionada para uma rota não segura. Logs Enviar Histórico - Logs do aplicativo ownCloud Android - Carregamento de dados... + Não foi encontrado nenhum app para envio de logs. Instale o mail app! + %1$s logs do Android app + Carregando dados... Autenticação é requerida Senha incorreta Mover diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index f5ccd30f..60d9377b 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -40,7 +40,7 @@ Imprint Lembrar localização de partilha Lembrar da última localização de envio de partilha - Experimente %1$s no seu smartphone! + Test %1$s no seu smartphone! Quero convidar-te a usares %1$s no teu smartphone!\nFaz download aqui: %2$s Verificar Servidor Endereço do servidor https://.. @@ -60,26 +60,26 @@ O %1$s não está autorizado a aceder aos ficheiro partilhados. A enviar segundos atrás - Vazio. Envie alguma coisa! + Aqui não existe nada. Envie alguma coisa! A carregar ... Não existem ficheiros nesta pasta. pasta pastas ficheiro ficheiros - Clique no ficheiro para visualizar informação adicional. + Toque num ficheiro para visualizar a informação adicional. Tamanho: Tipo: Criado: Modificado: Transferir Atualizar ficheiro - O nome do ficheiro foi alterado para %1$s durante o envio. + O ficheiro foi renomeado para %1$s durante o envio. Partilhar a hiperligação Deixar de partilhar a ligação Sim Não - OK + ACEITAR Cancelar a transferência Cancelar o envio Cancelar @@ -94,20 +94,20 @@ Enviar de ... Nome da pasta A enviar ... - A enviar %1$d%% , %2$s completo. - Carregado com sucesso - %1$s foi carregado com sucesso - Carregamento falhou + %1$d%% A enviar %2$s + Envio bem sucedido + %1$s foi enviado com sucesso + Não foi possível enviar O envio do ficheiro %1$s não foi concluído. Falha no carregamento, é necessário fazer novo login A transferir ... - %1$d%% A decarregar %2$s - Descarga com sucesso + %1$d%% A transferir %2$s + Transferência bem sucedida %1$s foi descarregado com sucesso Descarga falhou O descarregamento %1$s não foi possível descarregar - Não transferido - Falha no download, é necessário fazer login + Ainda não foi transferido + Não foi possível transferir, tem de iniciar a sessão novamente Escolha a conta Falhou a sincronização Falhou a sincronização, necessita fazer um novo login @@ -122,23 +122,23 @@ Tal como na versão 1.3.16, os ficheiros que foram enviados deste dispositivo são copiados para a pasta local %1$s para prevenir perda de dados quando um ficheiro é partilhado com várias contas.\n\nDevido a esta alteração, todos os ficheiros das versões anteriores foram copiados para a pasta %2$s. No entanto, um erro impediu a conclusão deste processo durante a sincronização da conta. Pode deixar o ficheiro(s) como estão e remover o link para %3$s, ou mover o(s) ficheiro(s) para a pasta %1$s e guardar o link para %4$s. \n\nEm baixo estão listados ficheiro(s) locais e remotos em %5$s que foram ligados. A pasta %1$s já não existe Mover Todos - Todos os ficheiros foram movidos + Foram movidos todos os ficheiros Não foi possível mover alguns ficheiros Local: %1$s Remoto: %1$s Não existe espaço disponível para copiar o ficheiro seleccionado para a pasta %1$s . Em vez disso deseja mover o ficheiro? - Por favor escreva o PIN da Aplicação - Escreva o PIN da Aplicação - O PIN vai ser pedido todas as vezes que iniciar a aplicação. - Volte a inserir o App PIN, por favor - Remover o PIN do aplicação. + Por favor, insira o PIN da App + Insira o PIN da App + O PIN será pedido sempre que a app seja iniciada. + Por favor, reinsira o PIN da App + Remover o seu PIN da App Os códigos PIN introduzidos não são iguais. Código PIN Incorrecto. PIN da aplicação removido PIN da aplicação guardado %1$s leitor de música - A tocar: %1$s - %1$s (A carregar) + %1$s (a reproduzir) + %1$s (a carregar) %1$s leitura terminada Não foi encontrado nenhum ficheiro de média Não foi fornecida conta @@ -280,8 +280,9 @@ Ligação segura é redireccionada para um caminho inseguro. Registos de Alterações Enviar Histórico - Registos das alterações da app ownCloud Android - A carregar os dados ... + Não foi encontrado o aplicativo para envio de registos . Instale app e-mail! + %1$s Android Aplicação de Registyos + A carregar os dados... Autenticação necessária Palavra-passe errada Mover @@ -294,4 +295,5 @@ para mover este ficheiro Envios Instantâneos Segurança + Envio do Caminho do Vídeo diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index 123c779b..bb03b024 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -267,7 +267,6 @@ Fișierul nu mai este disponibil pe server Conturi Adaugă cont - Se încarcă datele... Autentificare necesară Parolă greșită Mutare diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 8a628018..99b9acf1 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -38,6 +38,8 @@ Рекомендовать другу Обратная связь Штамп + Запомнить расположение публикации + Запомнить расположение загрузки последней публикации Попробуйте %1$s на вашем смартфоне! Хочу предложить вам использовать %1$s на смартфоне!\nЗагрузить можно здесь: %2$s @@ -280,8 +282,9 @@ Защищённое соединение перенаправлено по незащищённому маршруту Журналы История Отправлений - Журналы Андроид-приложения ownCloud - Загружаются данные... + Приложение для отправки журнала не найдено. Установите почтовое приложение! + Журналы приложения %1$s для Android + Загрузка данных… Требуется аутентификация Неправильный пароль Переместить @@ -294,4 +297,5 @@ переместить этот файл Мгновенные загрузки Безопасность + Путь для загрузки Видео diff --git a/res/values-sk-rSK/strings.xml b/res/values-sk-rSK/strings.xml index 5c097d37..1566dede 100644 --- a/res/values-sk-rSK/strings.xml +++ b/res/values-sk-rSK/strings.xml @@ -282,8 +282,6 @@ Zabezpečené pripojenie je presmerované na nezabezpečenú trasu. Logy OdoslaÅ¥ históriu - Logy aplikácie ownCloud pre Android - Nahrávam dáta... Vyžaduje sa overenie Nesprávne heslo Presunúť diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index b283b274..731bd67f 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -282,7 +282,8 @@ Varna povezava je preusmerjena preko ne-varne poti. Dnevnik PoÅ¡lji zgodovino - Dnevnik programa ownCloud + Ni nameščenega poÅ¡tnega programa za poÅ¡iljanje dnevnikov. + %1$s dnevniki programa Poteka nalaganje podatkov ... Zahtevana je overitev Napačno geslo @@ -296,4 +297,5 @@ med premikanjem datoteke TakojÅ¡nje poÅ¡iljanje v oblak Varnost + Pot videa za poÅ¡iljanje diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index feb002e0..f87edff8 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -267,7 +267,6 @@ Filen är inte längre tillgänglig pÃ¥ servern Konton Lägg till konto - Laddar data... Autentisering krävs Fel lösenord Flytta diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index ec1c6a70..680190c8 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -282,8 +282,9 @@ Güvenli bağlantı, güvenli olmayan bir rotaya yönlendirildi. Günlükler Geçmişi Gönder - ownCloud Android uygulama kayıtları - Veri yükleniyor... + Logları göndermek için uygulama bulunamadı. Eposta uygulamasını yükleyin! + %1$s Android uygulama kayıtları + Yükleniyor... Kimlik doğrulama gerekli Hatalı parola Taşı @@ -296,4 +297,5 @@ bu dosyayı taşımak için Anında Yüklemeler Güvenlik + Video Yükleme Yolu diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index e66a5405..4c07d79b 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -279,8 +279,6 @@ Безпечне підключення перенаправляється через незабезпечений маршрут. Журнали Надіслати історію - Журнали Android-додатка ownCloud - Завантаження даних... Потрібна аутентифікація Невірний пароль Перемістити diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index 3f198464..ba02f55c 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -4,13 +4,19 @@ 版本:%1$s 刷新帐户 上传 - 来自其它app的内容 + 来自其它应用的内容 文件 - 打开 - 增加文件夹 + 打开方式 + 新建文件夹 设置 详细信息 发送 + 排序 + 排序方式 + + A - Z + 新 - 旧 + 常规 @@ -18,13 +24,13 @@ 账号 管理账号 App PIN - 保护您的App客户端 + 保护客户端 即时图片上传 即时上传相机拍摄的图片 - 立即上传视频 + 即时上传视频 即时上传由相机拍摄的视频 开启日志 - 这过去是日志问题 + 用于记录问题 日志历史 这显示已经保存的日志 删除历史 @@ -32,27 +38,28 @@ 推荐给朋友 反馈 版本说明 - 在您的智能手机上试用一下 %1$s! - “我邀请你使用在你的智能手机上使用 %1$s,在这下载:%2$s” - + 记住共享位置 + 记住上次共享上传的位置 + 在您的智能手机上试用 %1$s! + 我邀请你在智能手机上使用 %1$s\n下载路径:%2$s 检查服务器 服务器地址 https://... 用户名 密码 - 新增到 %1$s? + 初次使用 %1$s? 文件 连接 上传 选择上传文件夹: 未找到账号 - 设备上未找到账号,请先创建账号。 + 设备上未找到 %1$s 账号,请先设置账号。 设置 退出 - 没有上传的内容 - 没有接收到内容,无可上传。 + 没有需要上传的内容 + 没有接收到内容,没有需要上传的内容。 %1$s未被允许访问共享内容。 上传 - 秒前 + 几秒前 这里还什么都没有。上传些东西吧! 载入中.... 在该文件夹中不存在文件。 @@ -60,19 +67,19 @@ 文件夹 文件 文件 - 点击一个文件来显示额外的信息。 + 点击一个文件可以显示额外的信息。 大小: 类型: 创建于: - 已修改: + 修改于: 下载 刷新文件 上传过程中文件被更名为了 %1$s 分享链接 - 取消共享链接 + 取消分享链接 是 否 - OK + 确定 取消下载 取消上传 取消 @@ -85,35 +92,35 @@ 删除账号 创建账号 上传自... - 目录名称 + 文件夹名称 上传... %1$d%% 上传 %2$s 上传成功 %1$s 成功上传 上传失败 - 1$上传未能完成 + %1$s 未能成功上传 上传失败,您需要重新登录 - 下载中…… + 下载中... %1$d%% 下载中 %2$s 下载成功 - %1$s 成功下载 + 成功下载 %1$s 下载失败 - 下载1$s 未能完成 + %1$s 下载未能完成 未下载完毕 下载失败,您需要重新登录 选择账户 同步失败 同步失败,您需要重新登录 %1$s同步未完成。 - 密码错误%1$s + %1$s 的密码错误 发现冲突 %1$d 文件无法同步 文件同步失败 - 无法同步 %1$d 文件内容(与 %2$d 冲突) + 无法同步 %1$d 文件内容(%2$d 冲突) 某些本地文件已被遗忘 %2$s 目录中的 %1$d 个文件不能被复制到 从 1.3.16 版起,从此设备上传的文件将被复制到本地的 %1$s 文件夹,以防止某个单一文件在多个账户间同步而造成的数据损失。\n\n 由于此项变化,此应用之前的版本上传的全部文件都已被复制到了 %2$s 文件夹。然而,账户同步期间有一个错误阻止了此操作的完成。您可能想保持文件不动,并移除指向 %3$s 的链接,或将文件移动到 %1$s 文件夹中并保持其到 %4$s 的链接。下面列出的是本地文件,以及它们被链接到的 %5$s 中的远程文件。 - 文件夹%1$s 不存在 + 文件夹%1$s 已经不存在 移动所有 所有文件已被移动 某些文件无法被移动 @@ -128,7 +135,7 @@ 两次 App PIN码不同 App PIN码不正确 App PIN码已移除 - App PIN码已保存。 + App PIN码已保存 %1$s 音乐播放器 %1$s (播放中) %1$s (载入中) @@ -149,16 +156,16 @@ 播放暂停按钮 快进按钮 正在认证... - 尝试登录 + 尝试登录... 没有网络连接 - 安全链接无效。 + 安全连接不可用。 连接已建立。 测试连接…… - 服务器配置不正确。 + 服务器配置不正确 此设备中已经存在同名同服务器的帐号 输入用户与此帐户的用户不符 发生未知错误! - 无法找到服务器 + 无法找到主机 未发现服务器实例 看起来服务器不太给力 网址不正确 @@ -166,13 +173,13 @@ 无法验证 SSL 服务器的身份 不可辨识的服务器服务器版本 无法建立连接 - 加密连接已建立 - 用户名或密码错误! + 安全连接已建立 + 用户名或密码错误 认证不成功 访问被认证服务器拒绝 意外状态;请再次输入服务器的地址 你的授权已经过期。请重新授权。 - 请输入当前密码: + 请输入当前密码 您的会话超时了,请重新连接 正在连接到认证服务器.... 服务器不支持这种验证方式 @@ -201,15 +208,15 @@ 文件名不能为空 请稍候 未知问题;请试试用其他程序选择此文件 - 未选择文件。 + 未选择文件 发送链接给 … 使用oAuth2登陆 连接oAuth2 服务器... 站点身份无法验证 - 不受信任的服务器证书 - 服务器证书过期 - 服务器证书过新 - 主机名与证书中的记录不匹配 + - 不受信任的服务器证书 + - 服务器证书过期 + - 服务器证书时间比当前时间还晚 + - 主机名与证书中的记录不匹配 是否信任此证书? 证书无法保存 详细信息 @@ -235,8 +242,8 @@ 389字节 2012/05/18 下午12:23 12:23:45 - 仅通过WIFI上传图片。 - 仅在 WIFI 下上传视频 + 仅通过 WIFI 上传图片。 + 仅通过 WIFI 上传视频 /InstantUpload 上传冲突 远程文件 %s 未与本地文件同步。继续将替换服务器上的文件内容。 @@ -244,8 +251,9 @@ 覆盖 不上传 图片预览 - 不能显示图片 + 无法显示图片 无法复制 %1$s 到本地目录 %2$s + 上传路径 抱歉,共享功能未启用。请联系管理员。 无法共享。请检查文件是否存在 共享文件或目录出错 @@ -260,29 +268,33 @@ 等待服务器响应时发生了一个错误,此操作无法完成 服务器不可用,此操作无法完成 - 你没有许可%s + 你没有权限%s 重命名该文件 删除该文件 - 分享该文件 + 共享该文件 取消共享该文件 创建文件 - 上传此文件夹 + 在此文件夹上传 该文件在服务器上不可用 账号 添加账号 + 安全连接被重定向到非安全路径. 日志 发送历史 - ownCloud安卓客户端日志 - 加载数据中... + 未找到可以发送日志的程序。请安装 mail! + %1$s Android 程序日志 + 载入数据... 需要认证 错误密码 移动 这里还什么都没有。上传些东西吧! - 选择(&C)... + 选择 无法移动。请检查文件是否存在 - b不能够把一个目录移动到它的下级 + 无法把一个目录移动到它的下级 该文件已经存在在目标文件夹 尝试移动该文件或文件夹时发生错误 移动该文件 + 即时上传 安全 + 视频上传路径 diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index c8da742d..45ccd3fd 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -282,7 +282,8 @@ 安全連線被轉向到一個非安全的連線 紀錄 傳送歷史記錄 - ownCloud Android 應用程式記錄 + 找不到可以傳送記錄的電子郵件程式. 請安裝電子郵件軟體! + %1$s Android 應用程式記錄 資料載入中... 必須驗證 密碼錯誤 @@ -296,4 +297,5 @@ 移動這個檔案 即時上傳 安全性 + 影片上傳路徑 diff --git a/res/values/strings.xml b/res/values/strings.xml index 4898a435..27751d14 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -304,8 +304,9 @@ Logs Send History - ownCloud Android app logs - Loading data... + No app for sending logs found. Install mail app! + %1$s Android app logs + Loading data… Authentication required Wrong password diff --git a/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java b/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java index 1d2cda8c..ce53c444 100644 --- a/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java +++ b/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java @@ -29,8 +29,10 @@ import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Bitmap.CompressFormat; import android.graphics.BitmapFactory; +import android.graphics.Matrix; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; +import android.media.ExifInterface; import android.media.ThumbnailUtils; import android.net.Uri; import android.os.AsyncTask; @@ -216,6 +218,9 @@ public class ThumbnailsCacheManager { if (bitmap != null) { thumbnail = ThumbnailUtils.extractThumbnail(bitmap, px, px); + + // Rotate image, obeying exif tag + thumbnail = BitmapUtils.rotateImage(thumbnail, mFile.getStoragePath()); // Add thumbnail to cache addBitmapToCache(imageKey, thumbnail); @@ -317,5 +322,5 @@ public class ThumbnailsCacheManager { mThumbnailsDiskCacheLock.notifyAll(); // Wake any waiting threads } } - + } diff --git a/src/com/owncloud/android/ui/LongClickableCheckBoxPreference.java b/src/com/owncloud/android/ui/LongClickableCheckBoxPreference.java deleted file mode 100644 index 5befe64a..00000000 --- a/src/com/owncloud/android/ui/LongClickableCheckBoxPreference.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.owncloud.android.ui; - -import android.content.Context; -import android.preference.CheckBoxPreference; -import android.view.View; - -public class LongClickableCheckBoxPreference extends CheckBoxPreference implements View.OnLongClickListener { - - public LongClickableCheckBoxPreference(Context context) { - super(context); - } - - @Override - public boolean onLongClick(View v) { - return true; - } -} diff --git a/src/com/owncloud/android/ui/RadioButtonPreference.java b/src/com/owncloud/android/ui/RadioButtonPreference.java new file mode 100644 index 00000000..8f562b36 --- /dev/null +++ b/src/com/owncloud/android/ui/RadioButtonPreference.java @@ -0,0 +1,20 @@ +package com.owncloud.android.ui; + +import android.content.Context; +import android.preference.CheckBoxPreference; +import android.view.View; + +import com.owncloud.android.R; + +public class RadioButtonPreference extends CheckBoxPreference implements View.OnLongClickListener { + + public RadioButtonPreference(Context context) { + super(context, null, android.R.attr.checkBoxPreferenceStyle); + setWidgetLayoutResource(R.layout.preference_widget_radiobutton); + } + + @Override + public boolean onLongClick(View v) { + return true; + } +} diff --git a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java index 762cb999..f5837493 100644 --- a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -25,6 +25,8 @@ import android.accounts.Account; import android.accounts.AccountManager; import android.accounts.AuthenticatorException; import android.accounts.OperationCanceledException; +import android.annotation.SuppressLint; +import android.annotation.TargetApi; import android.app.AlertDialog; import android.app.Dialog; import android.app.ProgressDialog; @@ -605,13 +607,23 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener { /** * Called, when the user selected something for uploading + * */ + @TargetApi(Build.VERSION_CODES.JELLY_BEAN) protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == ACTION_SELECT_CONTENT_FROM_APPS && (resultCode == RESULT_OK || resultCode == UploadFilesActivity.RESULT_OK_AND_MOVE)) { - requestSimpleUpload(data, resultCode); - + //getClipData is only supported on api level 16+, Jelly Bean + if (data.getData() == null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN){ + for( int i = 0; i < data.getClipData().getItemCount(); i++){ + Intent intent = new Intent(); + intent.setData(data.getClipData().getItemAt(i).getUri()); + requestSimpleUpload(intent, resultCode); + } + }else { + requestSimpleUpload(data, resultCode); + } } else if (requestCode == ACTION_SELECT_MULTIPLE_FILES && (resultCode == RESULT_OK || resultCode == UploadFilesActivity.RESULT_OK_AND_MOVE)) { requestMultipleUpload(data, resultCode); @@ -877,6 +889,10 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener { } else if (item == 1) { Intent action = new Intent(Intent.ACTION_GET_CONTENT); action = action.setType("*/*").addCategory(Intent.CATEGORY_OPENABLE); + //Intent.EXTRA_ALLOW_MULTIPLE is only supported on api level 18+, Jelly Bean + if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { + action.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); + } startActivityForResult(Intent.createChooser(action, getString(R.string.upload_chooser_title)), ACTION_SELECT_CONTENT_FROM_APPS); } diff --git a/src/com/owncloud/android/ui/activity/LogHistoryActivity.java b/src/com/owncloud/android/ui/activity/LogHistoryActivity.java index 676388d2..793b3d9d 100644 --- a/src/com/owncloud/android/ui/activity/LogHistoryActivity.java +++ b/src/com/owncloud/android/ui/activity/LogHistoryActivity.java @@ -25,6 +25,7 @@ import java.lang.ref.WeakReference; import java.lang.reflect.Field; import java.util.ArrayList; +import android.content.ActivityNotFoundException; import android.content.Intent; import android.net.Uri; import android.os.AsyncTask; @@ -36,6 +37,7 @@ import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; +import android.widget.Toast; import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.app.SherlockFragmentActivity; @@ -51,12 +53,15 @@ public class LogHistoryActivity extends SherlockFragmentActivity { private static final String MAIL_ATTACHMENT_TYPE = "text/plain"; + private static final String KEY_LOG_TEXT = "LOG_TEXT"; + private static final String TAG = LogHistoryActivity.class.getSimpleName(); private static final String DIALOG_WAIT_TAG = "DIALOG_WAIT"; private String mLogPath = FileStorageUtils.getLogPath(); private File logDIR = null; + private String mLogText; @Override @@ -70,6 +75,7 @@ public class LogHistoryActivity extends SherlockFragmentActivity { actionBar.setDisplayHomeAsUpEnabled(true); Button deleteHistoryButton = (Button) findViewById(R.id.deleteLogHistoryButton); Button sendHistoryButton = (Button) findViewById(R.id.sendLogHistoryButton); + TextView logTV = (TextView) findViewById(R.id.logTV); deleteHistoryButton.setOnClickListener(new OnClickListener() { @@ -89,20 +95,22 @@ public class LogHistoryActivity extends SherlockFragmentActivity { } }); - if (mLogPath != null) { - logDIR = new File(mLogPath); - } - - if (logDIR != null && logDIR.isDirectory()) { - // Show a dialog while log data is being loaded - showLoadingDialog(); - - TextView logTV = (TextView) findViewById(R.id.logTV); + if (savedInstanceState == null) { + if (mLogPath != null) { + logDIR = new File(mLogPath); + } - // Start a new thread that will load all the log data - LoadingLogTask task = new LoadingLogTask(logTV); - task.execute(); + if (logDIR != null && logDIR.isDirectory()) { + // Show a dialog while log data is being loaded + showLoadingDialog(); + // Start a new thread that will load all the log data + LoadingLogTask task = new LoadingLogTask(logTV); + task.execute(); + } + } else { + mLogText = savedInstanceState.getString(KEY_LOG_TEXT); + logTV.setText(mLogText); } } @@ -125,41 +133,45 @@ public class LogHistoryActivity extends SherlockFragmentActivity { */ private void sendMail() { + // For the moment we need to consider the possibility that setup.xml + // does not include the "mail_logger" entry. This block prevents that + // compilation fails in this case. String emailAddress; try { Class stringClass = R.string.class; Field mailLoggerField = stringClass.getField("mail_logger"); - int emailAddressId = (Integer)mailLoggerField.get(null); + int emailAddressId = (Integer) mailLoggerField.get(null); emailAddress = getString(emailAddressId); - } catch (Exception e) { emailAddress = ""; } - + ArrayList uris = new ArrayList(); // Convert from paths to Android friendly Parcelable Uri's for (String file : Log_OC.getLogFileNames()) { - if (new File(mLogPath + File.separator, file).exists()) { - Uri u = Uri.parse("file://" + mLogPath + File.separator + file); - uris.add(u); + File logFile = new File(mLogPath, file); + if (logFile.exists()) { + uris.add(Uri.fromFile(logFile)); } } Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE); - // Explicitly only use Gmail to send - intent.setClassName("com.google.android.gm","com.google.android.gm.ComposeActivityGmail"); - intent.putExtra(Intent.EXTRA_EMAIL, new String[]{ emailAddress }); - intent.putExtra(Intent.EXTRA_SUBJECT, getText(R.string.log_mail_subject)); + intent.putExtra(Intent.EXTRA_EMAIL, emailAddress); + String subject = String.format(getString(R.string.log_send_mail_subject), getString(R.string.app_name)); + intent.putExtra(Intent.EXTRA_SUBJECT, subject); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setType(MAIL_ATTACHMENT_TYPE); intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris); - - if (intent.resolveActivity(getPackageManager()) != null) { + try { startActivity(intent); + } catch (ActivityNotFoundException e) { + Toast.makeText(this, getString(R.string.log_send_no_mail_app), Toast.LENGTH_LONG).show(); + Log_OC.i(TAG, "Could not find app for sending log history."); } + } /** @@ -183,7 +195,8 @@ public class LogHistoryActivity extends SherlockFragmentActivity { if (textViewReference != null && result != null) { final TextView logTV = textViewReference.get(); if (logTV != null) { - logTV.setText(result); + mLogText = result; + logTV.setText(mLogText); dismissLoadingDialog(); } } @@ -258,4 +271,12 @@ public class LogHistoryActivity extends SherlockFragmentActivity { loading.dismiss(); } } + + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + + /// global state + outState.putString(KEY_LOG_TEXT, mLogText); + } } \ No newline at end of file diff --git a/src/com/owncloud/android/ui/activity/Preferences.java b/src/com/owncloud/android/ui/activity/Preferences.java index f794cf15..1d80a703 100644 --- a/src/com/owncloud/android/ui/activity/Preferences.java +++ b/src/com/owncloud/android/ui/activity/Preferences.java @@ -53,7 +53,7 @@ import com.owncloud.android.authentication.AuthenticatorActivity; import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.db.DbHandler; import com.owncloud.android.lib.common.utils.Log_OC; -import com.owncloud.android.ui.LongClickableCheckBoxPreference; +import com.owncloud.android.ui.RadioButtonPreference; import com.owncloud.android.utils.DisplayUtils; @@ -107,9 +107,9 @@ public class Preferences extends SherlockPreferenceActivity implements AccountMa ListAdapter listAdapter = listView.getAdapter(); Object obj = listAdapter.getItem(position); - if (obj != null && obj instanceof LongClickableCheckBoxPreference) { + if (obj != null && obj instanceof RadioButtonPreference) { mShowContextMenu = true; - mAccountName = ((LongClickableCheckBoxPreference) obj).getKey(); + mAccountName = ((RadioButtonPreference) obj).getKey(); Preferences.this.openContextMenu(listView); @@ -119,7 +119,18 @@ public class Preferences extends SherlockPreferenceActivity implements AccountMa return false; } }); - + + // Load package info + String temp; + try { + PackageInfo pkg = getPackageManager().getPackageInfo(getPackageName(), 0); + temp = pkg.versionName; + } catch (NameNotFoundException e) { + temp = ""; + Log_OC.e(TAG, "Error while showing about dialog", e); + } + final String appVersion = temp; + // Register context menu for list of preferences. registerForContextMenu(getListView()); @@ -208,7 +219,7 @@ public class Preferences extends SherlockPreferenceActivity implements AccountMa @Override public boolean onPreferenceClick(Preference preference) { String feedbackMail =(String) getText(R.string.mail_feedback); - String feedback =(String) getText(R.string.prefs_feedback); + String feedback =(String) getText(R.string.prefs_feedback) + " - android v" + appVersion; Intent intent = new Intent(Intent.ACTION_SENDTO); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_SUBJECT, feedback); @@ -286,13 +297,7 @@ public class Preferences extends SherlockPreferenceActivity implements AccountMa pAboutApp = (Preference) findPreference("about_app"); if (pAboutApp != null) { pAboutApp.setTitle(String.format(getString(R.string.about_android), getString(R.string.app_name))); - PackageInfo pkg; - try { - pkg = getPackageManager().getPackageInfo(getPackageName(), 0); - pAboutApp.setSummary(String.format(getString(R.string.about_version), pkg.versionName)); - } catch (NameNotFoundException e) { - Log_OC.e(TAG, "Error while showing about dialog", e); - } + pAboutApp.setSummary(String.format(getString(R.string.about_version), appVersion)); } loadInstantUploadPath(); @@ -463,7 +468,7 @@ public class Preferences extends SherlockPreferenceActivity implements AccountMa else { for (Account a : accounts) { - LongClickableCheckBoxPreference accountPreference = new LongClickableCheckBoxPreference(this); + RadioButtonPreference accountPreference = new RadioButtonPreference(this); accountPreference.setKey(a.name); // Handle internationalized domain names accountPreference.setTitle(DisplayUtils.convertIdn(a.name, false)); @@ -483,7 +488,7 @@ public class Preferences extends SherlockPreferenceActivity implements AccountMa AccountManager am = (AccountManager) getSystemService(ACCOUNT_SERVICE); Account accounts[] = am.getAccountsByType(MainApp.getAccountType()); for (Account a : accounts) { - CheckBoxPreference p = (CheckBoxPreference) findPreference(a.name); + RadioButtonPreference p = (RadioButtonPreference) findPreference(a.name); if (key.equals(a.name)) { boolean accountChanged = !p.isChecked(); p.setChecked(true); diff --git a/src/com/owncloud/android/ui/preview/PreviewImageActivity.java b/src/com/owncloud/android/ui/preview/PreviewImageActivity.java index c06f341f..1cee30e8 100644 --- a/src/com/owncloud/android/ui/preview/PreviewImageActivity.java +++ b/src/com/owncloud/android/ui/preview/PreviewImageActivity.java @@ -79,7 +79,9 @@ ViewPager.OnPageChangeListener, OnRemoteOperationListener { private static final int INITIAL_HIDE_DELAY = 0; // immediate hide private ExtendedViewPager mViewPager; - private PreviewImagePagerAdapter mPreviewImagePagerAdapter; + private PreviewImagePagerAdapter mPreviewImagePagerAdapter; + private int mSavedPosition = 0; + private boolean mHasSavedPosition = false; private boolean mRequestWaitingForBinder; @@ -146,7 +148,7 @@ ViewPager.OnPageChangeListener, OnRemoteOperationListener { } mPreviewImagePagerAdapter = new PreviewImagePagerAdapter(getSupportFragmentManager(), parentFolder, getAccount(), getStorageManager()); mViewPager = (ExtendedViewPager) findViewById(R.id.fragmentPager); - int position = mPreviewImagePagerAdapter.getFilePosition(getFile()); + int position = mHasSavedPosition ? mSavedPosition : mPreviewImagePagerAdapter.getFilePosition(getFile()); position = (position >= 0) ? position : 0; mViewPager.setAdapter(mPreviewImagePagerAdapter); mViewPager.setOnPageChangeListener(this); @@ -378,6 +380,8 @@ ViewPager.OnPageChangeListener, OnRemoteOperationListener { */ @Override public void onPageSelected(int position) { + mSavedPosition = position; + mHasSavedPosition = true; if (mDownloaderBinder == null) { mRequestWaitingForBinder = true; diff --git a/src/com/owncloud/android/ui/preview/PreviewImageFragment.java b/src/com/owncloud/android/ui/preview/PreviewImageFragment.java index a3814c77..0995793d 100644 --- a/src/com/owncloud/android/ui/preview/PreviewImageFragment.java +++ b/src/com/owncloud/android/ui/preview/PreviewImageFragment.java @@ -53,6 +53,7 @@ import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.ui.dialog.ConfirmationDialogFragment; import com.owncloud.android.ui.dialog.RemoveFileDialogFragment; import com.owncloud.android.ui.fragment.FileFragment; +import com.owncloud.android.utils.BitmapUtils; import com.owncloud.android.utils.TouchImageViewCustom; @@ -82,6 +83,8 @@ public class PreviewImageFragment extends FileFragment { private static final String TAG = PreviewImageFragment.class.getSimpleName(); private boolean mIgnoreFirstSavedState; + + private LoadBitmapTask mLoadBitmapTask = null; /** @@ -190,12 +193,22 @@ public class PreviewImageFragment extends FileFragment { public void onStart() { super.onStart(); if (getFile() != null) { - BitmapLoader bl = new BitmapLoader(mImageView, mMessageView, mProgressWheel); - bl.execute(new String[]{getFile().getStoragePath()}); + mLoadBitmapTask = new LoadBitmapTask(mImageView, mMessageView, mProgressWheel); + mLoadBitmapTask.execute(new String[]{getFile().getStoragePath()}); } } + @Override + public void onStop() { + super.onStop(); + if (mLoadBitmapTask != null) { + mLoadBitmapTask.cancel(true); + mLoadBitmapTask = null; + } + + } + /** * {@inheritDoc} */ @@ -328,8 +341,8 @@ public class PreviewImageFragment extends FileFragment { finish(); } - - private class BitmapLoader extends AsyncTask { + + private class LoadBitmapTask extends AsyncTask { /** * Weak reference to the target {@link ImageView} where the bitmap will be loaded into. @@ -365,7 +378,7 @@ public class PreviewImageFragment extends FileFragment { * * @param imageView Target {@link ImageView} where the bitmap will be loaded into. */ - public BitmapLoader(ImageViewCustom imageView, TextView messageView, ProgressBar progressWheel) { + public LoadBitmapTask(ImageViewCustom imageView, TextView messageView, ProgressBar progressWheel) { mImageViewRef = new WeakReference(imageView); mMessageViewRef = new WeakReference(messageView); mProgressWheelRef = new WeakReference(progressWheel); @@ -379,43 +392,65 @@ public class PreviewImageFragment extends FileFragment { String storagePath = params[0]; try { + if (isCancelled()) return result; + File picture = new File(storagePath); if (picture != null) { - //Decode file into a bitmap in real size for being able to make zoom on the image + // Decode file into a bitmap in real size for being able to make zoom on + // the image result = BitmapFactory.decodeStream(new FlushedInputStream (new BufferedInputStream(new FileInputStream(picture)))); } + if (isCancelled()) return result; + if (result == null) { mErrorMessageId = R.string.preview_image_error_unknown_format; Log_OC.e(TAG, "File could not be loaded as a bitmap: " + storagePath); + } else { + // Rotate image, obeying exif tag. + result = BitmapUtils.rotateImage(result, storagePath); } } catch (OutOfMemoryError e) { Log_OC.e(TAG, "Out of memory occured for file " + storagePath, e); - // If out of memory error when loading image, try to load it scaled + if (isCancelled()) return result; + + // If out of memory error when loading or rotating image, try to load it scaled result = loadScaledImage(storagePath); if (result == null) { mErrorMessageId = R.string.preview_image_error_unknown_format; Log_OC.e(TAG, "File could not be loaded as a bitmap: " + storagePath); + } else { + // Rotate scaled image, obeying exif tag + result = BitmapUtils.rotateImage(result, storagePath); } } catch (NoSuchFieldError e) { mErrorMessageId = R.string.common_error_unknown; - Log_OC.e(TAG, "Error from access to unexisting field despite protection; file " + storagePath, e); + Log_OC.e(TAG, "Error from access to unexisting field despite protection; file " + + storagePath, e); } catch (Throwable t) { mErrorMessageId = R.string.common_error_unknown; Log_OC.e(TAG, "Unexpected error loading " + getFile().getStoragePath(), t); } + return result; } @Override + protected void onCancelled(Bitmap result) { + if (result != null) { + result.recycle(); + } + } + + @Override protected void onPostExecute(Bitmap result) { hideProgressWheel(); if (result != null) { @@ -424,7 +459,7 @@ public class PreviewImageFragment extends FileFragment { showErrorMessage(); } } - + @SuppressLint("InlinedApi") private void showLoadedImage(Bitmap result) { if (mImageViewRef != null) { diff --git a/src/com/owncloud/android/utils/BitmapUtils.java b/src/com/owncloud/android/utils/BitmapUtils.java index 687b5a4f..70367278 100644 --- a/src/com/owncloud/android/utils/BitmapUtils.java +++ b/src/com/owncloud/android/utils/BitmapUtils.java @@ -16,9 +16,13 @@ */ package com.owncloud.android.utils; +import com.owncloud.android.lib.common.utils.Log_OC; + import android.graphics.Bitmap; import android.graphics.BitmapFactory; +import android.graphics.Matrix; import android.graphics.BitmapFactory.Options; +import android.media.ExifInterface; /** * Utility class with methods for decoding Bitmaps. @@ -96,4 +100,75 @@ public class BitmapUtils { return inSampleSize; } + /** + * Rotate bitmap according to EXIF orientation. + * Cf. http://www.daveperrett.com/articles/2012/07/28/exif-orientation-handling-is-a-ghetto/ + * @param bitmap Bitmap to be rotated + * @param storagePath Path to source file of bitmap. Needed for EXIF information. + * @return correctly EXIF-rotated bitmap + */ + public static Bitmap rotateImage(Bitmap bitmap, String storagePath){ + Bitmap resultBitmap = bitmap; + + try + { + ExifInterface exifInterface = new ExifInterface(storagePath); + int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, 1); + + Matrix matrix = new Matrix(); + + // 1: nothing to do + + // 2 + if (orientation == ExifInterface.ORIENTATION_FLIP_HORIZONTAL) + { + matrix.postScale(-1.0f, 1.0f); + } + // 3 + else if (orientation == ExifInterface.ORIENTATION_ROTATE_180) + { + matrix.postRotate(180); + } + // 4 + else if (orientation == ExifInterface.ORIENTATION_FLIP_VERTICAL) + { + matrix.postScale(1.0f, -1.0f); + } + // 5 + else if (orientation == ExifInterface.ORIENTATION_TRANSPOSE) + { + matrix.postRotate(-90); + matrix.postScale(1.0f, -1.0f); + } + // 6 + else if (orientation == ExifInterface.ORIENTATION_ROTATE_90) + { + matrix.postRotate(90); + } + // 7 + else if (orientation == ExifInterface.ORIENTATION_TRANSVERSE) + { + matrix.postRotate(90); + matrix.postScale(1.0f, -1.0f); + } + // 8 + else if (orientation == ExifInterface.ORIENTATION_ROTATE_270) + { + matrix.postRotate(270); + } + + // Rotate the bitmap + resultBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); + if (resultBitmap != bitmap) { + bitmap.recycle(); + } + } + catch (Exception exception) + { + Log_OC.e("BitmapUtil", "Could not rotate the image: " + storagePath); + } + return resultBitmap; + } + + }