From: masensio Date: Tue, 27 May 2014 11:20:01 +0000 (+0200) Subject: Merge branch 'fixed_video_playback_on_rotations' into release-1.5.6 X-Git-Tag: oc-android-1.7.0_signed~295^2~8 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/e9f0604fb744848b3243596446e5d23e58269089?hp=8a74431926cff4819f4ef01b0134d63b60ced545 Merge branch 'fixed_video_playback_on_rotations' into release-1.5.6 --- diff --git a/res/drawable-hdpi/file.png b/res/drawable-hdpi/file.png index 08f99372..71d73907 100644 Binary files a/res/drawable-hdpi/file.png and b/res/drawable-hdpi/file.png differ diff --git a/res/drawable-hdpi/file_doc.png b/res/drawable-hdpi/file_doc.png index 068ed572..e9c23239 100644 Binary files a/res/drawable-hdpi/file_doc.png and b/res/drawable-hdpi/file_doc.png differ diff --git a/res/drawable-hdpi/file_image.png b/res/drawable-hdpi/file_image.png index dc40bae8..bdb2e65c 100644 Binary files a/res/drawable-hdpi/file_image.png and b/res/drawable-hdpi/file_image.png differ diff --git a/res/drawable-hdpi/file_movie.png b/res/drawable-hdpi/file_movie.png index 2acfaf8d..e178ccee 100644 Binary files a/res/drawable-hdpi/file_movie.png and b/res/drawable-hdpi/file_movie.png differ diff --git a/res/drawable-hdpi/file_pdf.png b/res/drawable-hdpi/file_pdf.png index a4af2815..85c89530 100644 Binary files a/res/drawable-hdpi/file_pdf.png and b/res/drawable-hdpi/file_pdf.png differ diff --git a/res/drawable-hdpi/file_ppt.png b/res/drawable-hdpi/file_ppt.png new file mode 100644 index 00000000..4fb809eb Binary files /dev/null and b/res/drawable-hdpi/file_ppt.png differ diff --git a/res/drawable-hdpi/file_sound.png b/res/drawable-hdpi/file_sound.png index 33045afb..30f5367c 100644 Binary files a/res/drawable-hdpi/file_sound.png and b/res/drawable-hdpi/file_sound.png differ diff --git a/res/drawable-hdpi/file_xls.png b/res/drawable-hdpi/file_xls.png new file mode 100644 index 00000000..f6a2cc8d Binary files /dev/null and b/res/drawable-hdpi/file_xls.png differ diff --git a/res/drawable-hdpi/file_zip.png b/res/drawable-hdpi/file_zip.png index 398f601d..bffacb43 100644 Binary files a/res/drawable-hdpi/file_zip.png and b/res/drawable-hdpi/file_zip.png differ diff --git a/res/drawable-hdpi/ic_menu_archive.png b/res/drawable-hdpi/ic_menu_archive.png index 0bdcac5e..7d25b82b 100644 Binary files a/res/drawable-hdpi/ic_menu_archive.png and b/res/drawable-hdpi/ic_menu_archive.png differ diff --git a/res/drawable-ldpi/file.png b/res/drawable-ldpi/file.png index bbe560bb..b669fdf4 100644 Binary files a/res/drawable-ldpi/file.png and b/res/drawable-ldpi/file.png differ diff --git a/res/drawable-ldpi/file_doc.png b/res/drawable-ldpi/file_doc.png index a4070434..0ea07e3b 100644 Binary files a/res/drawable-ldpi/file_doc.png and b/res/drawable-ldpi/file_doc.png differ diff --git a/res/drawable-ldpi/file_image.png b/res/drawable-ldpi/file_image.png index b3af57ca..1bf20155 100644 Binary files a/res/drawable-ldpi/file_image.png and b/res/drawable-ldpi/file_image.png differ diff --git a/res/drawable-ldpi/file_movie.png b/res/drawable-ldpi/file_movie.png index 53bf0e78..e50c1681 100644 Binary files a/res/drawable-ldpi/file_movie.png and b/res/drawable-ldpi/file_movie.png differ diff --git a/res/drawable-ldpi/file_pdf.png b/res/drawable-ldpi/file_pdf.png index ded82499..a05afdd5 100644 Binary files a/res/drawable-ldpi/file_pdf.png and b/res/drawable-ldpi/file_pdf.png differ diff --git a/res/drawable-ldpi/file_ppt.png b/res/drawable-ldpi/file_ppt.png new file mode 100644 index 00000000..11a9cc96 Binary files /dev/null and b/res/drawable-ldpi/file_ppt.png differ diff --git a/res/drawable-ldpi/file_sound.png b/res/drawable-ldpi/file_sound.png index 6fc963f8..26e5a5fe 100644 Binary files a/res/drawable-ldpi/file_sound.png and b/res/drawable-ldpi/file_sound.png differ diff --git a/res/drawable-ldpi/file_xls.png b/res/drawable-ldpi/file_xls.png new file mode 100644 index 00000000..98553677 Binary files /dev/null and b/res/drawable-ldpi/file_xls.png differ diff --git a/res/drawable-ldpi/file_zip.png b/res/drawable-ldpi/file_zip.png index 04340f46..88d00400 100644 Binary files a/res/drawable-ldpi/file_zip.png and b/res/drawable-ldpi/file_zip.png differ diff --git a/res/drawable-ldpi/ic_menu_archive.png b/res/drawable-ldpi/ic_menu_archive.png index 7818537c..e4d0ee54 100644 Binary files a/res/drawable-ldpi/ic_menu_archive.png and b/res/drawable-ldpi/ic_menu_archive.png differ diff --git a/res/drawable-mdpi/file.png b/res/drawable-mdpi/file.png index 0a1ca52d..5fa8505f 100644 Binary files a/res/drawable-mdpi/file.png and b/res/drawable-mdpi/file.png differ diff --git a/res/drawable-mdpi/file_doc.png b/res/drawable-mdpi/file_doc.png index 95651f8e..2e7628a9 100644 Binary files a/res/drawable-mdpi/file_doc.png and b/res/drawable-mdpi/file_doc.png differ diff --git a/res/drawable-mdpi/file_image.png b/res/drawable-mdpi/file_image.png index 2b2fff49..eedd41f1 100644 Binary files a/res/drawable-mdpi/file_image.png and b/res/drawable-mdpi/file_image.png differ diff --git a/res/drawable-mdpi/file_movie.png b/res/drawable-mdpi/file_movie.png index 4c0254c4..b37e98d6 100644 Binary files a/res/drawable-mdpi/file_movie.png and b/res/drawable-mdpi/file_movie.png differ diff --git a/res/drawable-mdpi/file_pdf.png b/res/drawable-mdpi/file_pdf.png index 306ad99a..07aa2380 100644 Binary files a/res/drawable-mdpi/file_pdf.png and b/res/drawable-mdpi/file_pdf.png differ diff --git a/res/drawable-mdpi/file_ppt.png b/res/drawable-mdpi/file_ppt.png new file mode 100644 index 00000000..db7d58d2 Binary files /dev/null and b/res/drawable-mdpi/file_ppt.png differ diff --git a/res/drawable-mdpi/file_sound.png b/res/drawable-mdpi/file_sound.png index 8789e5cf..6b8b5892 100644 Binary files a/res/drawable-mdpi/file_sound.png and b/res/drawable-mdpi/file_sound.png differ diff --git a/res/drawable-mdpi/file_xls.png b/res/drawable-mdpi/file_xls.png new file mode 100644 index 00000000..b0264d78 Binary files /dev/null and b/res/drawable-mdpi/file_xls.png differ diff --git a/res/drawable-mdpi/file_zip.png b/res/drawable-mdpi/file_zip.png index 92647b83..61974b84 100644 Binary files a/res/drawable-mdpi/file_zip.png and b/res/drawable-mdpi/file_zip.png differ diff --git a/res/drawable-mdpi/ic_menu_archive.png b/res/drawable-mdpi/ic_menu_archive.png index 2c502851..7f29fbc8 100644 Binary files a/res/drawable-mdpi/ic_menu_archive.png and b/res/drawable-mdpi/ic_menu_archive.png differ diff --git a/res/values-de-rDE/strings.xml b/res/values-de-rDE/strings.xml index a4fb1ba4..64ae5897 100644 --- a/res/values-de-rDE/strings.xml +++ b/res/values-de-rDE/strings.xml @@ -184,6 +184,7 @@ Dateiinhalte bereits synchronisiert Verzeichnis konnte nicht erstellt werden Verbotene Zeichen: / \\ < > : \" | ? * + Dateiname darf nicht leer sein Bitte warten Sie einen Moment. Ein unerwartetes Problem ist aufgetreten. Bitte versuchen Sie, die Datei in einer anderen App zu öffnen. Es wurde keine Datei ausgewählt. diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 0327483e..1491b162 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -184,6 +184,7 @@ Dateiinhalte bereits synchronisiert Verzeichnis konnte nicht erstellt werden Verbotene Zeichen: / \\ < > : \" | ? * + Dateiname darf nicht leer sein Bitte warte einen Moment. Ein unerwartetes Problem ist aufgetreten. Bitte versuche, die Datei in einer anderen App zu öffnen Es wurde keine Datei ausgewählt. diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index 7c1275b4..a133cb82 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -31,6 +31,7 @@ Σχόλια Αποτύπωμα Δοκιμάστε %1$s στο κινητό σας! + Θέλω να σας προσκαλέσω να χρησιμοποιήσετε το %1$s στο κινητό σας!\nΚατεβάστε το εδώ: %2$s Έλεγχος Διακομιστή Διεύθυνση εξυπηρέτη https://… Όνομα χρήστη @@ -183,6 +184,7 @@ Τα περιεχόμενα του αρχείου έχουν ήδη συγχρονιστεί Δημιουργία φακέλου απέτυχε Μη-επιτρεπόμενοι χαρακτήρες: / \\ < > : \" | ? * + Το όνομα αρχείου δεν μπορεί να είναι κενό. Παρακαλούμε περιμένετε Απροσδόκητο σφάλμα, δοκιμάστε με άλλη εφαρμογή Δεν επιλέχθηκαν αρχεία diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml index c72c6fe3..c56ffec8 100644 --- a/res/values-en-rGB/strings.xml +++ b/res/values-en-rGB/strings.xml @@ -184,6 +184,7 @@ File contents already synchronised Folder could not be created Forbidden characters: / \\ < > : \" | ? * + File name cannot be empty Wait a moment Unexpected problem; please select the file from a different app No file was selected diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index ee3d5b2b..3744433f 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -184,6 +184,7 @@ Ya está sincronizado No se pudo crear la carpeta Carácteres ilegales: / \\ < > : \" | ? * + El nombre de archivo no puede estar vacío Espere un momento Problema inesperado; por favor, prueba otra app para seleccionar el archivo No hay ficheros seleccionados. diff --git a/res/values-fi-rFI/strings.xml b/res/values-fi-rFI/strings.xml index 3333ad22..3a02f082 100644 --- a/res/values-fi-rFI/strings.xml +++ b/res/values-fi-rFI/strings.xml @@ -159,6 +159,7 @@ Etäpään tiedostoa ei voitu tarkistaa Tiedoston sisältö on jo synkronoitu Kielletyt merkit: / \\ < > : \" | ? * + Tiedoston nimi ei voi olla tyhjä Odota hetki Odottamaton ongelma; kokeile valita tiedosto toisella sovelluksella Tiedostoa ei valittu diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index bdaab726..676a61fd 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -184,6 +184,7 @@ Le contenu des fichiers est déjà synchronisé Le dossier n\'a pas pu être créé Caractères interdits : / \\ < > : \" | ? * + Le nom du fichier ne peut pas être vide Veuillez patienter Problème inattendu ; veuillez essayer une autre app pour la sélection du fichier Aucun fichier sélectionné diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml index 5df2c549..7a3a243c 100644 --- a/res/values-gl/strings.xml +++ b/res/values-gl/strings.xml @@ -184,6 +184,7 @@ Os contidos do ficheiro xa están sincronizados Non foi posíbel crear o cartafol Caracteres non permitidos: / \\ < > : \" | ? * + O nome de ficheiro non pode estar baleiro Agarde un chisco Produciuse un erro non agardado. Seleccione o ficheiro con outro aplicativo diferente Non se escolleu ningún ficheiro diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 1401b32a..dc4d4284 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -184,6 +184,7 @@ Contenuti del file già sincronizzati La cartella non può essere creata Caratteri proibiti: / \\ < > : \" | ? * + Il nome del file non può essere vuoto Attendi Problema inatteso; prova un\'altra applicazione per selezionare il file Non è stato selezionato alcun file diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index 00f3ab16..95b37193 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -184,6 +184,7 @@ Bestandsinhoud is al gesynchroniseerd Map kon niet worden aangemaakt Verboden tekens: / \\ < > : \" | ? * + Bestandsnaam mag niet leeg zijn Even geduld Onverwacht probleem; probeer een andere app om het bestand te selecteren Er werd geen bestand geselecteerd diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index e3dbfb34..c3c1dc15 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -184,6 +184,7 @@ Zawartość pliku została już synchronizowana Folder nie może zostać utworzony Znaki zabronione: / \\ < > : \" | ? * + Nazwa pliku nie może być pusta. Poczekaj chwilę Nieoczekiwany problem; spróbuj wybrać plik z innej aplikacji Nie wybrano żadnych plików diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml index bac79ff4..dd207c5b 100644 --- a/res/values-pt-rBR/strings.xml +++ b/res/values-pt-rBR/strings.xml @@ -184,6 +184,7 @@ Conteúdo do arquivo já foi sincronizado A pasta não pode ser criada Caracteres proibidos: / \\ < > : \" | ? * + O nome do arquivo não pode ficar estar vazio Aguarde um momento Problema inesperado; por favor, tente selecionar o arquivo com outro app Nenhum arquivo foi selecionado diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index f42850a7..1f84ac5c 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -184,6 +184,7 @@ O conteúdo do ficheiro já foi sincronizado Não foi possivel criar a pasta Caracteres não permitidos: / \\ < > : \" | ? * + O nome do ficheiro não pode ser vazio. Aguarde um momento Erro inesperado. Por favor tente outra aplicação para seleccionar o ficheiro. Não selecionou nenhum ficheiro diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 89c78110..1b568dc1 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -184,6 +184,7 @@ Содержимое файла уже синхронизировано Не возможно создать папку Недопустимые символы: / \\ < > : \" | ? * + Имя файла не может быть пустым Подождите немного Неизвестная ошибка; выберите этот файл из другого приложения Файлы не выбраны diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index b6353674..d0b4663a 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -184,6 +184,7 @@ FilinnehÃ¥ll redan synkroniserat Mapp kunde inte skapas Förbjudna tecken är: / \\ < > : \" | ? * + Filnamnet fÃ¥r inte lämnas blankt Var god vänta Oväntat problem; prova annat program för aktuell fil Ingen fil vald diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index cd41b145..34d17f4d 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -6,10 +6,10 @@ Yükle Diğer uygulamalardan içerik Dosyalar - ile aç + Birlikte aç Yeni klasör Ayarlar - Detaylar + Ayrıntılar Gönder Genel Daha fazla @@ -21,9 +21,9 @@ Kamera ile çekilen fotoğrafları anında yükle Anında video yüklemeleri Kamera ile çekilen videoları anında yükle - Günlük tutmayı etkinleştir + Günlük Tutmayı Etkinleştir Bu, sorunları günlük dosyasına kaydetmek için kullanılır - Günlük geçmişi + Günlük Geçmişi Bu, kayıtlı günlük dosyalarını görüntüler Geçmişi Sil Yardım @@ -31,12 +31,12 @@ Geribildirim İzlenim %1$s uygulamasını akıllı telefonunda dene! - \"Sana, akıllı telefonunda kullanmak üzere %1$s daveti yapıyorum!\nBuradan indirebilirsin: %2$s\" - Sunucuyu kontrol et + \"Seni, akıllı telefonunda %1$s kullanmaya davet ediyorum!\nBuradan indirebilirsin: %2$s\" + Sunucuyu Denetle Sunucu adresi https://… Kullanıcı Adı Parola - %1$s senin için yeni mi? + %1$s sizin için yeni mi? Dosyalar Bağlan Yükle @@ -46,7 +46,7 @@ Kurulum Çıkış Yüklenecek içerik yok - Yüklenecek içerik yok. Yüklenecek dosya yok. + Hiç içerik alınmadı. Yüklenecek hiçbir şey yok. %1$s için paylaşılan içeriğe erişim izni yok Yükleniyor Bu klasörde dosya yok.\nYeni dosyalar \"Yükle\" menü seçeneği ile eklenebilir. @@ -75,27 +75,27 @@ Hesabı sil Hesap oluştur Şuradan yükle... - Klasör ismi + Klasör adı Yükleniyor... - %%%1$d Yüklenen %2$s + %%%1$d Yüklenen: %2$s Yükleme başarılı %1$s başarıyla yüklendi Yükleme başarısız %1$s yüklenmesi tamamlanamadı - İndiriyor... - %1$d%% İndiriliyor %2$s + İndiriliyor... + %%%1$d İndirilen: %2$s İndirme başarılı %1$s başarıyla indirildi - İndirilme başarısız - %1$s indirilmesi tamamlanamadı + İndirme başarısız + %1$s indirmesi tamamlanamadı Henüz indirilemedi Hesap seçin Eşitleme başarısız %1$s eşitlemesi tamamlanamadı %1$s için geçersiz parola Çakışma bulundu - %1$d korumalı eşitleme dosyası, eşitlenemedi - Korunan dosya eşitlemesi başarısız + %1$d eşit tut dosyası, eşitlenemedi + Dosyaları eşit tut işlemi başarısız %1$d dosya eşitlenemedi (%2$d çakışma) Bazı yerel dosyalar unutuldu %2$s klasöründeki %1$d dosya şuraya kopyalanamadı @@ -106,12 +106,12 @@ Bazı dosyalar taşınamadı Yerel: %1$s Uzak: %1$s - Seçilen dosyaları %1$s dizinine kopyalamak için yeterli alan yok. Bunun yerine dosyayı taşımak ister misiniz? + Seçilen dosyaları %1$s klasörüne kopyalamak için yeterli alan yok. Bunun yerine dosyayı taşımak ister misiniz? Lütfen uygulama PIN\'inizi girin Uygulama PIN\'inizi girin PIN uygulama yeniden başladığında tekrar sorulacak Lütfen, uygulama PIN\'inizi tekrar girin - Uygulama PIN\'inizi aldırın + Uygulama PIN\'inizi kaldırın Her iki Uygulama PIN\'i aynı değil Yanlış Uygulama PIN\'i Uygulama PIN\'i kaldırıldı @@ -119,15 +119,15 @@ %1$s müzik çalar %1$s (oynatılıyor) %1$s (yükleniyor) - %1$s yeniden oynatım sonlandırıldı - Herhangi bir medya öğesi bulunamadı + %1$s yeniden oynatım tamamlandı + Herhangi bir ortam ögesi bulunamadı Tanımlı hesap yok - Dosya doğru bir hesapta değil - Codec desteklenmiyor - Medya öğesi okunamadı - Medya öğesi doğru bir şekilde kodlanmadı - Oynatmaya çalışırken zaman aşımına uğradı - Medya öğesi aktarılamadı + Dosya geçerli bir hesapta değil + Ortam kod çözücü desteklenmiyor + Ortam ögesi okunamadı + Ortam ögesi doğru bir şekilde kodlanmamış + Oynatmaya çalışılırken zaman aşımına uğradı + Ortam ögesi akışı yapılamıyor Ortam dosyası mevcut ortam oynatıcı ile çalınamaz %1$s oynatılmaya çalışılırken güvenlik hatası oluştu %1$s oynatılmaya çalışılırken girdi hatası oluştu @@ -145,15 +145,15 @@ Cihazda aynı kullanıcı adı ve sunucu için bir hesap zaten mevcut Girilen kullanıcı bu hesabın kullanıcısı ile eşleşmiyor Bilinmeyen hata oluştu! - Anabilgisayar bulunamadı - Sunucu örneği bulunamadı. + Ana makine bulunamadı + Sunucu örneği bulunamadı Sunucu çok geç cevap veriyor Hatalı biçimlendirilmiş URL - SSL başlatılmasında hata + SSL başlatma başarısız SSL sunucu kimliği doğrulanamadı Bilinmeyen sunucu sürümü Bağlantı kurulamadı - Güvenli bağlantı sağlandı. + Güvenli bağlantı sağlandı Hatalı kullanıcı adı veya parola Kimlik doğrulama başarısız oldu Erişim, kimlik doğrulama sunucusu tarafından reddedildi @@ -164,7 +164,7 @@ Kimlik doğrulama sunucusuna bağlanılıyor... Sunucu bu kimlik doğrulama yöntemini desteklemiyor %1$s çoklu hesapları desteklemiyor - Sunucunuz geçerli bir kullanıcı kimliği döndürmüyor, lütfen yöneticinizle iletişime geçin + Sunucunuz geçerli bir kullanıcı kimliği döndürmüyor, lütfen yöneticinizle iletişime geçin\n Bu sunucuya karşı kimlik doğrulama yapılamaz Dosyayı güncel tut Yeniden adlandır @@ -174,27 +174,28 @@ Sadece yerel Sadece yerel içerik Sunucudan kaldır - Uzaktaki ve yereldeki + Uzak ve yerel Kaldırma başarılı Kaldırma başarısız Yeni bir isim girin - Yerel kopya adlandırılamaz; farklı bir ad deneyin - Yeniden adlandırılma tamamlanmadı - Dosya teslim edilemedi + Yerel kopya adlandırılamadı; farklı bir ad deneyin + Yeniden adlandırılma tamamlanamadı + Uzak dosya denetlenemedi Dosya içerikleri zaten eşitlenmiş Klasör oluşturulamadı Yasaklı karakterler: / \\ < > : \" | ? * + Dosya adı boş olamaz Bir süre bekleyin - Beklenmedik sorun; lütfen, dosya seçmek için farklı uygulama kullanın + Beklenmedik sorun; lütfen dosya seçmek için farklı bir uygulama kullanın Hiçbir dosya seçilmedi Bağlantıyı gönder ... oAuth2 ile oturum aç oAuth2 sunucusuna bağlanılıyor… Bu sitenin sertifikası doğrulanamadı - - Sunucu sertifikası güvenilmez - - Sunucu sertifikasının süresi geçmiş - Sunucu sertifikasının geçerli olacağı tarih - - URL adresi sunucu isminin sertifikası ile uyuşmuyor + - Sunucu sertifikasına güvenilmiyor + - Sunucu sertifikasının süresi dolmuş + - Sunucu sertifikasının geçerlilik tarihi ileride + - Adres, sertifikadaki sunucu adı ile eşleşmiyor Sertifikaya yine de güvenmek istiyor musunuz? Sertifika kaydedilemedi Ayrıntılar @@ -208,8 +209,8 @@ Eyalet: Konum: Geçerlilik: - Kimden: - Kime: + Başlangıç: + Bitiş: İmza: Algoritma: Sertifika gösterilemedi. @@ -220,29 +221,29 @@ 389 KB 2012/05/18 12:23 ÖS 12:23:45 - Fotoğrafları sadece kablosuz bağlantıda (WiFi) yükle - Videoları sadece kablosuz bağlantıda (WiFi) yükle + Fotoğrafları sadece kablosuzda (WiFi) yükle + Videoları sadece kablosuzda (WiFi) yükle /AnındaYükle Çakışmayı güncelle Uzaktaki %s dosyası, yerel dosya ile eşitlenemedi. İşleme devam etmek sunucudaki dosyanın içeriğini değiştirecektir. İkisini de koru Üzerine yaz Yükleme - Görüntü önizleme + Resim önizleme Bu resim gösterilemez - %1$s, %2$s yerel dizine klasörüne + %1$s, %2$s yerel klasörüne kopyalanamadı AnındaYükleme başarısız Anında yüklemeler başarısız Başarısız olan tüm anında yüklemelerin özeti - hepsini seç + tümünü seç tüm seçili olanları tekrar dene yükleme kuyruğundaki tüm seçili olanları sil - Resmi yeniden yüklemeyi dene: - Daha fazla Görsel yükle + fotoğrafı yeniden yüklemeyi dene: + Daha fazla resim yükle anında yükleme için çevrimiçi değilsiniz, bir şey yapma Hata Mesajı: Sunucu yapılandırmanızı kontrol edin. Kotanızı aşmış olabilirsiniz. - Üzgünüz, paylaşım sunucunuzda etkin değil. Lütfen yöneticinizle\niletişime geçin. + Üzgünüz, paylaşım sunucunuzda etkin değil. Lütfen yöneticinizle\n iletişime geçin. Bu dosya veya klasör paylaşılamıyor. Lütfen mevcut olup olmadığını denetleyin Bu dosya veya klasörü paylaşmaya çalışılırken bir hata oluştu Bu dosya veya klasörün paylaşımı kaldırılamadı. Mevcut değil. diff --git a/res/values/strings.xml b/res/values/strings.xml index 0bd9cef3..8304ecb8 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -86,6 +86,7 @@ %1$s was successfully uploaded Upload failed Upload of %1$s could not be completed + Upload failed, you need to relogin Downloading … %1$d%% Downloading %2$s Download succeeded @@ -93,6 +94,7 @@ Download failed Download of %1$s could not be completed Not downloaded yet + Download failed, you need to relogin Choose account Synchronization failed Synchronization of %1$s could not be completed @@ -173,13 +175,13 @@ %1$s does not support multiple accounts Your server is not returning a correct user id, please contact an administrator - Can not authenticate against this server + Cannot authenticate against this server Keep file up to date Rename Remove - "Do you really want to remove %1$s ?" - "Do you really want to remove %1$s and its contents ?" + "Do you really want to remove %1$s?" + "Do you really want to remove %1$s and its contents?" Local only Local contents only Remove from server @@ -244,7 +246,7 @@ Don\'t upload Image preview - This image can not be shown + This image cannot be shown %1$s could not be copied to %2$s local folder Failed InstantUpload @@ -271,5 +273,11 @@ Copy link Copied to clipboard - Critical error: can not perform operations + Critical error: cannot perform operations + + An error occurred while connecting with the server. + An error occurred while waiting for the server, the operation couldn\'t have been done + An error occurred while waiting for the server, the operation couldn\'t have been done + The operation couldn\'t be completed, server is unavaliable + diff --git a/src/com/owncloud/android/authentication/AccountUtils.java b/src/com/owncloud/android/authentication/AccountUtils.java index 10c87963..dc023444 100644 --- a/src/com/owncloud/android/authentication/AccountUtils.java +++ b/src/com/owncloud/android/authentication/AccountUtils.java @@ -18,6 +18,8 @@ package com.owncloud.android.authentication; +import java.util.Locale; + import com.owncloud.android.MainApp; import com.owncloud.android.lib.common.accounts.AccountTypeUtils; import com.owncloud.android.lib.resources.status.OwnCloudVersion; @@ -81,8 +83,18 @@ public class AccountUtils { MainApp.getAccountType()); if (account != null && account.name != null) { - for (Account ac : ocAccounts) { - if (ac.name.equals(account.name)) { + int lastAtPos = account.name.lastIndexOf("@"); + String hostAndPort = account.name.substring(lastAtPos + 1); + String username = account.name.substring(0, lastAtPos); + String otherHostAndPort, otherUsername; + Locale currentLocale = context.getResources().getConfiguration().locale; + for (Account otherAccount : ocAccounts) { + lastAtPos = otherAccount.name.lastIndexOf("@"); + otherHostAndPort = otherAccount.name.substring(lastAtPos + 1); + otherUsername = otherAccount.name.substring(0, lastAtPos); + if (otherHostAndPort.equals(hostAndPort) && + otherUsername.toLowerCase(currentLocale). + equals(username.toLowerCase(currentLocale))) { return true; } } diff --git a/src/com/owncloud/android/files/services/FileDownloader.java b/src/com/owncloud/android/files/services/FileDownloader.java index 461283ff..7a031359 100644 --- a/src/com/owncloud/android/files/services/FileDownloader.java +++ b/src/com/owncloud/android/files/services/FileDownloader.java @@ -44,6 +44,7 @@ import com.owncloud.android.ui.activity.FileActivity; import com.owncloud.android.ui.activity.FileDisplayActivity; import com.owncloud.android.ui.preview.PreviewImageActivity; import com.owncloud.android.ui.preview.PreviewImageFragment; +import com.owncloud.android.utils.ErrorMessageAdapter; import com.owncloud.android.utils.Log_OC; import com.owncloud.android.utils.NotificationBuilderWithProgressBar; @@ -461,20 +462,24 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis private void notifyDownloadResult(DownloadFileOperation download, RemoteOperationResult downloadResult) { mNotificationManager.cancel(R.string.downloader_download_in_progress_ticker); if (!downloadResult.isCancelled()) { - int tickerId = (downloadResult.isSuccess()) ? R.string.downloader_download_succeeded_ticker : R.string.downloader_download_failed_ticker; - int contentId = (downloadResult.isSuccess()) ? R.string.downloader_download_succeeded_content : R.string.downloader_download_failed_content; - mNotificationBuilder - .setTicker(getString(tickerId)) - .setContentTitle(getString(tickerId)) - .setAutoCancel(true) - .setOngoing(false) - .setProgress(0, 0, false); + int tickerId = (downloadResult.isSuccess()) ? R.string.downloader_download_succeeded_ticker : + R.string.downloader_download_failed_ticker; + boolean needsToUpdateCredentials = (downloadResult.getCode() == ResultCode.UNAUTHORIZED || - // (downloadResult.isTemporalRedirection() && downloadResult.isIdPRedirection() (downloadResult.isIdPRedirection() && mDownloadClient.getCredentials() == null)); - //&& MainApp.getAuthTokenTypeSamlSessionCookie().equals(mDownloadClient.getAuthTokenType()))); + tickerId = (needsToUpdateCredentials) ? + R.string.downloader_download_failed_credentials_error : tickerId; + + mNotificationBuilder + .setTicker(getString(tickerId)) + .setContentTitle(getString(tickerId)) + .setAutoCancel(true) + .setOngoing(false) + .setProgress(0, 0, false); + if (needsToUpdateCredentials) { + // let the user update credentials with one click Intent updateAccountCredentials = new Intent(this, AuthenticatorActivity.class); updateAccountCredentials.putExtra(AuthenticatorActivity.EXTRA_ACCOUNT, download.getAccount()); @@ -484,9 +489,8 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis updateAccountCredentials.addFlags(Intent.FLAG_FROM_BACKGROUND); mNotificationBuilder .setContentIntent(PendingIntent.getActivity( - this, (int) System.currentTimeMillis(), updateAccountCredentials, PendingIntent.FLAG_ONE_SHOT - )) - .setContentText(String.format(getString(contentId), new File(download.getSavePath()).getName())); + this, (int) System.currentTimeMillis(), updateAccountCredentials, PendingIntent.FLAG_ONE_SHOT)); + mDownloadClient = null; // grant that future retries on the same account will get the fresh credentials } else { @@ -507,10 +511,11 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis } mNotificationBuilder .setContentIntent(PendingIntent.getActivity( - this, (int) System.currentTimeMillis(), showDetailsIntent, 0 - )) - .setContentText(String.format(getString(contentId), new File(download.getSavePath()).getName())); + this, (int) System.currentTimeMillis(), showDetailsIntent, 0)); } + + mNotificationBuilder.setContentText(ErrorMessageAdapter.getErrorCauseMessage(downloadResult, download, getResources())); + mNotificationManager.notify(tickerId, mNotificationBuilder.build()); } } diff --git a/src/com/owncloud/android/files/services/FileUploader.java b/src/com/owncloud/android/files/services/FileUploader.java index 08f9d3d4..c6408c28 100644 --- a/src/com/owncloud/android/files/services/FileUploader.java +++ b/src/com/owncloud/android/files/services/FileUploader.java @@ -54,6 +54,7 @@ import com.owncloud.android.ui.activity.FileDisplayActivity; import com.owncloud.android.ui.activity.InstantUploadActivity; import com.owncloud.android.ui.preview.PreviewImageActivity; import com.owncloud.android.ui.preview.PreviewImageFragment; +import com.owncloud.android.utils.ErrorMessageAdapter; import com.owncloud.android.utils.Log_OC; import com.owncloud.android.utils.NotificationBuilderWithProgressBar; @@ -752,10 +753,7 @@ public class FileUploader extends Service implements OnDatatransferProgressListe )) .setTicker(getString(R.string.uploader_upload_succeeded_ticker)) .setContentTitle(getString(R.string.uploader_upload_succeeded_ticker)) - .setContentText( - String.format(getString(R.string.uploader_upload_succeeded_content_single), - upload.getFileName()) - ); + .setContentText(ErrorMessageAdapter.getErrorCauseMessage(uploadResult, upload, getResources())); mNotificationManager.notify(R.string.uploader_upload_in_progress_ticker, mNotificationBuilder.build()); // NOT // AN @@ -766,20 +764,27 @@ public class FileUploader extends Service implements OnDatatransferProgressListe } else { // / fail -> explicit failure notification - mNotificationManager.cancel(R.string.uploader_upload_in_progress_ticker); + mNotificationManager.cancel(R.string.uploader_upload_in_progress_ticker); + NotificationCompat.Builder errorBuilder = new NotificationCompat.Builder(this); - errorBuilder - .setSmallIcon(R.drawable.notification_icon) - .setTicker(getString(R.string.uploader_upload_failed_ticker)) - .setContentTitle(getString(R.string.uploader_upload_failed_ticker)) - .setAutoCancel(true); - String content = null; - boolean needsToUpdateCredentials = (uploadResult.getCode() == ResultCode.UNAUTHORIZED || - //(uploadResult.isTemporalRedirection() && uploadResult.isIdPRedirection() && + String content = null; + + // check credentials error + boolean needsToUpdateCredentials = (uploadResult.getCode() == ResultCode.UNAUTHORIZED || (uploadResult.isIdPRedirection() && mUploadClient.getCredentials() == null)); - //MainApp.getAuthTokenTypeSamlSessionCookie().equals(mUploadClient.getAuthTokenType()))); + int tickerId = (needsToUpdateCredentials) ? + R.string.uploader_upload_failed_credentials_error : R.string.uploader_upload_failed_ticker; + + errorBuilder + .setSmallIcon(R.drawable.notification_icon) + .setTicker(getString(tickerId)) + .setContentTitle(getString(tickerId)) + .setAutoCancel(true); + + content = ErrorMessageAdapter.getErrorCauseMessage(uploadResult, upload, getResources()); + if (needsToUpdateCredentials) { // let the user update credentials with one click Intent updateAccountCredentials = new Intent(this, AuthenticatorActivity.class); @@ -791,23 +796,10 @@ public class FileUploader extends Service implements OnDatatransferProgressListe errorBuilder.setContentIntent(PendingIntent.getActivity( this, (int) System.currentTimeMillis(), updateAccountCredentials, PendingIntent.FLAG_ONE_SHOT )); - content = String.format(getString(R.string.uploader_upload_failed_content_single), upload.getFileName()); + mUploadClient = null; // grant that future retries on the same account will get the fresh credentials } else { // TODO put something smart in the contentIntent below - - if (uploadResult.getCode() == ResultCode.LOCAL_STORAGE_FULL - || uploadResult.getCode() == ResultCode.LOCAL_STORAGE_NOT_COPIED) { - // TODO we need a class to provide error messages for the users - // from a RemoteOperationResult and a RemoteOperation - content = String.format(getString(R.string.error__upload__local_file_not_copied), upload.getFileName(), - getString(R.string.app_name)); - } else if (uploadResult.getCode() == ResultCode.QUOTA_EXCEEDED) { - content = getString(R.string.failed_upload_quota_exceeded_text); - } else { - content = String - .format(getString(R.string.uploader_upload_failed_content_single), upload.getFileName()); - } // we add only for instant-uploads the InstantUploadActivity and the // db entry @@ -847,7 +839,7 @@ public class FileUploader extends Service implements OnDatatransferProgressListe } errorBuilder.setContentText(content); - mNotificationManager.notify(R.string.uploader_upload_failed_ticker, errorBuilder.build()); + mNotificationManager.notify(tickerId, errorBuilder.build()); } } diff --git a/src/com/owncloud/android/ui/activity/FileActivity.java b/src/com/owncloud/android/ui/activity/FileActivity.java index f9d8bb1f..02025226 100644 --- a/src/com/owncloud/android/ui/activity/FileActivity.java +++ b/src/com/owncloud/android/ui/activity/FileActivity.java @@ -58,6 +58,7 @@ import com.owncloud.android.operations.UnshareLinkOperation; import com.owncloud.android.services.OperationsService; import com.owncloud.android.services.OperationsService.OperationsServiceBinder; import com.owncloud.android.ui.dialog.LoadingDialog; +import com.owncloud.android.utils.ErrorMessageAdapter; import com.owncloud.android.utils.Log_OC; @@ -475,14 +476,11 @@ implements OnRemoteOperationListener, ComponentsGetter { Intent sendIntent = operation.getSendIntent(); startActivity(sendIntent); - } else if (result.getCode() == ResultCode.SHARE_NOT_FOUND) { // Error --> SHARE_NOT_FOUND - Toast t = Toast.makeText(this, getString(R.string.share_link_file_no_exist), Toast.LENGTH_LONG); - t.show(); - } else { // Generic error - // Show a Message, operation finished without success - Toast t = Toast.makeText(this, getString(R.string.share_link_file_error), Toast.LENGTH_LONG); + } else { + Toast t = Toast.makeText(this, ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()), + Toast.LENGTH_LONG); t.show(); - } + } } @@ -492,15 +490,11 @@ implements OnRemoteOperationListener, ComponentsGetter { if (result.isSuccess()){ updateFileFromDB(); - } else if (result.getCode() == ResultCode.SHARE_NOT_FOUND) { // Error --> SHARE_NOT_FOUND - Toast t = Toast.makeText(this, getString(R.string.unshare_link_file_no_exist), Toast.LENGTH_LONG); - t.show(); - } else { // Generic error - // Show a Message, operation finished without success - Toast t = Toast.makeText(this, getString(R.string.unshare_link_file_error), Toast.LENGTH_LONG); + } else { + Toast t = Toast.makeText(this, ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()), + Toast.LENGTH_LONG); t.show(); - } - + } } diff --git a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java index 940fcdd1..4babd9db 100644 --- a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -90,6 +90,7 @@ import com.owncloud.android.ui.preview.PreviewImageFragment; import com.owncloud.android.ui.preview.PreviewMediaFragment; import com.owncloud.android.ui.preview.PreviewVideoActivity; import com.owncloud.android.utils.DisplayUtils; +import com.owncloud.android.utils.ErrorMessageAdapter; import com.owncloud.android.utils.Log_OC; @@ -1294,9 +1295,12 @@ FileFragment.ContainerActivity, OnNavigationListener, OnSslUntrustedCertListener */ private void onRemoveFileOperationFinish(RemoveFileOperation operation, RemoteOperationResult result) { dismissLoadingDialog(); + + Toast msg = Toast.makeText(this, ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()), + Toast.LENGTH_LONG); + msg.show(); + if (result.isSuccess()) { - Toast msg = Toast.makeText(this, R.string.remove_success_msg, Toast.LENGTH_LONG); - msg.show(); OCFile removedFile = operation.getFile(); FileFragment second = getSecondFragment(); if (second != null && removedFile.equals(second.getFile())) { @@ -1311,8 +1315,6 @@ FileFragment.ContainerActivity, OnNavigationListener, OnSslUntrustedCertListener } invalidateOptionsMenu(); } else { - Toast msg = Toast.makeText(this, R.string.remove_fail_msg, Toast.LENGTH_LONG); - msg.show(); if (result.isSslRecoverableException()) { mLastSslUntrustedServerResult = result; showUntrustedCertDialog(mLastSslUntrustedServerResult); @@ -1333,17 +1335,15 @@ FileFragment.ContainerActivity, OnNavigationListener, OnSslUntrustedCertListener refreshListOfFilesFragment(); } else { dismissLoadingDialog(); - if (result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME) { - Toast.makeText(FileDisplayActivity.this, R.string.filename_forbidden_characters, Toast.LENGTH_LONG).show(); - } else { try { - Toast msg = Toast.makeText(FileDisplayActivity.this, R.string.create_dir_fail_msg, Toast.LENGTH_LONG); + Toast msg = Toast.makeText(FileDisplayActivity.this, + ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()), + Toast.LENGTH_LONG); msg.show(); } catch (NotFoundException e) { Log_OC.e(TAG, "Error while trying to show fail message " , e); } - } } } @@ -1381,20 +1381,13 @@ FileFragment.ContainerActivity, OnNavigationListener, OnSslUntrustedCertListener } } else { - if (result.getCode().equals(ResultCode.INVALID_LOCAL_FILE_NAME)) { - Toast msg = Toast.makeText(this, R.string.rename_local_fail_msg, Toast.LENGTH_LONG); - msg.show(); - // TODO throw again the new rename dialog - } if (result.getCode().equals(ResultCode.INVALID_CHARACTER_IN_NAME)) { - Toast msg = Toast.makeText(this, R.string.filename_forbidden_characters, Toast.LENGTH_LONG); - msg.show(); - } else { - Toast msg = Toast.makeText(this, R.string.rename_server_fail_msg, Toast.LENGTH_LONG); - msg.show(); - if (result.isSslRecoverableException()) { - mLastSslUntrustedServerResult = result; - showUntrustedCertDialog(mLastSslUntrustedServerResult); - } + Toast msg = Toast.makeText(this, ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()), + Toast.LENGTH_LONG); + msg.show(); + + if (result.isSslRecoverableException()) { + mLastSslUntrustedServerResult = result; + showUntrustedCertDialog(mLastSslUntrustedServerResult); } } } @@ -1416,7 +1409,8 @@ FileFragment.ContainerActivity, OnNavigationListener, OnSslUntrustedCertListener onTransferStateChanged(syncedFile, true, true); } else { - Toast msg = Toast.makeText(this, R.string.sync_file_nothing_to_do_msg, Toast.LENGTH_LONG); + Toast msg = Toast.makeText(this, ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()), + Toast.LENGTH_LONG); msg.show(); } } diff --git a/src/com/owncloud/android/ui/adapter/FileListListAdapter.java b/src/com/owncloud/android/ui/adapter/FileListListAdapter.java index 38ade7c8..656e0042 100644 --- a/src/com/owncloud/android/ui/adapter/FileListListAdapter.java +++ b/src/com/owncloud/android/ui/adapter/FileListListAdapter.java @@ -113,7 +113,7 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { fileName.setText(name); ImageView fileIcon = (ImageView) view.findViewById(R.id.imageView1); - fileIcon.setImageResource(DisplayUtils.getResourceId(file.getMimetype())); + fileIcon.setImageResource(DisplayUtils.getResourceId(file.getMimetype(), file.getFileName())); ImageView localStateView = (ImageView) view.findViewById(R.id.imageView2); FileDownloaderBinder downloaderBinder = mTransferServiceGetter.getFileDownloaderBinder(); FileUploaderBinder uploaderBinder = mTransferServiceGetter.getFileUploaderBinder(); diff --git a/src/com/owncloud/android/ui/fragment/FileDetailFragment.java b/src/com/owncloud/android/ui/fragment/FileDetailFragment.java index 76cee973..7a247b3d 100644 --- a/src/com/owncloud/android/ui/fragment/FileDetailFragment.java +++ b/src/com/owncloud/android/ui/fragment/FileDetailFragment.java @@ -330,7 +330,7 @@ public class FileDetailFragment extends FileFragment implements OnClickListener // set file details setFilename(file.getFileName()); - setFiletype(file.getMimetype()); + setFiletype(file.getMimetype(), file.getFileName()); setFilesize(file.getFileLength()); if(ocVersionSupportsTimeCreated()){ setTimeCreated(file.getCreationTimestamp()); @@ -383,7 +383,7 @@ public class FileDetailFragment extends FileFragment implements OnClickListener * Updates the MIME type in view * @param mimetype to set */ - private void setFiletype(String mimetype) { + private void setFiletype(String mimetype, String filename) { TextView tv = (TextView) getView().findViewById(R.id.fdType); if (tv != null) { String printableMimetype = DisplayUtils.convertMIMEtoPrettyPrint(mimetype);; @@ -391,7 +391,7 @@ public class FileDetailFragment extends FileFragment implements OnClickListener } ImageView iv = (ImageView) getView().findViewById(R.id.fdIcon); if (iv != null) { - iv.setImageResource(DisplayUtils.getResourceId(mimetype)); + iv.setImageResource(DisplayUtils.getResourceId(mimetype, filename)); } } diff --git a/src/com/owncloud/android/utils/DisplayUtils.java b/src/com/owncloud/android/utils/DisplayUtils.java index 680107b8..40bf1193 100644 --- a/src/com/owncloud/android/utils/DisplayUtils.java +++ b/src/com/owncloud/android/utils/DisplayUtils.java @@ -25,6 +25,8 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Set; +import android.util.Log; + import com.owncloud.android.R; /** @@ -63,14 +65,28 @@ public class DisplayUtils { private static final String TYPE_VIDEO = "video"; private static final String SUBTYPE_PDF = "pdf"; - private static final String[] SUBTYPES_DOCUMENT = { "msword", "mspowerpoint", "msexcel", - "vnd.oasis.opendocument.presentation", - "vnd.oasis.opendocument.spreadsheet", - "vnd.oasis.opendocument.text" + private static final String[] SUBTYPES_DOCUMENT = { "msword", + "vnd.openxmlformats-officedocument.wordprocessingml.document", + "vnd.oasis.opendocument.text", + "rtf" }; private static Set SUBTYPES_DOCUMENT_SET = new HashSet(Arrays.asList(SUBTYPES_DOCUMENT)); + private static final String[] SUBTYPES_SPREADSHEET = { "msexcel", + "vnd.openxmlformats-officedocument.spreadsheetml.sheet", + "vnd.oasis.opendocument.spreadsheet" + }; + private static Set SUBTYPES_SPREADSHEET_SET = new HashSet(Arrays.asList(SUBTYPES_SPREADSHEET)); + private static final String[] SUBTYPES_PRESENTATION = { "mspowerpoint", + "vnd.openxmlformats-officedocument.presentationml.presentation", + "vnd.oasis.opendocument.presentation" + }; + private static Set SUBTYPES_PRESENTATION_SET = new HashSet(Arrays.asList(SUBTYPES_PRESENTATION)); private static final String[] SUBTYPES_COMPRESSED = {"x-tar", "x-gzip", "zip"}; private static final Set SUBTYPES_COMPRESSED_SET = new HashSet(Arrays.asList(SUBTYPES_COMPRESSED)); + private static final String SUBTYPE_OCTET_STREAM = "octet-stream"; + private static final String EXTENSION_RAR = "rar"; + private static final String EXTENSION_RTF = "rtf"; + private static final String EXTENSION_3GP = "3gp"; /** * Converts the file size in bytes to human readable output. @@ -137,7 +153,7 @@ public class DisplayUtils { * @param mimetype MIME type string. * @return Resource identifier of an image resource. */ - public static int getResourceId(String mimetype) { + public static int getResourceId(String mimetype, String filename) { if (mimetype == null || "DIR".equals(mimetype)) { return R.drawable.ic_menu_archive; @@ -167,12 +183,28 @@ public class DisplayUtils { } else if (SUBTYPES_DOCUMENT_SET.contains(subtype)) { return R.drawable.file_doc; + } else if (SUBTYPES_SPREADSHEET_SET.contains(subtype)) { + return R.drawable.file_xls; + + } else if (SUBTYPES_PRESENTATION_SET.contains(subtype)) { + return R.drawable.file_ppt; + } else if (SUBTYPES_COMPRESSED_SET.contains(subtype)) { return R.drawable.file_zip; - } - + + } else if (SUBTYPE_OCTET_STREAM.equals(subtype) ) { + if (getExtension(filename).equalsIgnoreCase(EXTENSION_RAR)) { + return R.drawable.file_zip; + + } else if (getExtension(filename).equalsIgnoreCase(EXTENSION_RTF)) { + return R.drawable.file_doc; + + } else if (getExtension(filename).equalsIgnoreCase(EXTENSION_3GP)) { + return R.drawable.file_movie; + + } + } } - // problems: RAR, RTF, 3GP are send as application/octet-stream from the server ; extension in the filename should be explicitly reviewed } // default icon @@ -180,7 +212,12 @@ public class DisplayUtils { } - + private static String getExtension(String filename) { + String extension = filename.substring(filename.lastIndexOf(".") + 1); + + return extension; + } + /** * Converts Unix time to human readable format * @param miliseconds that have passed since 01/01/1970 diff --git a/src/com/owncloud/android/utils/ErrorMessageAdapter.java b/src/com/owncloud/android/utils/ErrorMessageAdapter.java new file mode 100644 index 00000000..c5bda8ce --- /dev/null +++ b/src/com/owncloud/android/utils/ErrorMessageAdapter.java @@ -0,0 +1,193 @@ +/* ownCloud Android client application + * Copyright (C) 2014 ownCloud Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + + +package com.owncloud.android.utils; + +import java.io.File; +import java.net.SocketTimeoutException; +import org.apache.commons.httpclient.ConnectTimeoutException; +import android.content.res.Resources; + +import com.owncloud.android.R; +import com.owncloud.android.lib.common.operations.RemoteOperation; +import com.owncloud.android.lib.common.operations.RemoteOperationResult; +import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode; +import com.owncloud.android.operations.CreateFolderOperation; +import com.owncloud.android.operations.CreateShareOperation; +import com.owncloud.android.operations.DownloadFileOperation; +import com.owncloud.android.operations.RemoveFileOperation; +import com.owncloud.android.operations.RenameFileOperation; +import com.owncloud.android.operations.SynchronizeFileOperation; +import com.owncloud.android.operations.UnshareLinkOperation; +import com.owncloud.android.operations.UploadFileOperation; + +/** + * Class to choose proper error messages to show to the user depending on the results of operations, always following the same policy + * + * @author masensio + * + */ + +public class ErrorMessageAdapter { + + public ErrorMessageAdapter() { + + } + + public static String getErrorCauseMessage(RemoteOperationResult result, RemoteOperation operation, Resources res) { + + String message = null; + + if (operation instanceof UploadFileOperation) { + + if (result.isSuccess()) { + message = String.format(res.getString(R.string.uploader_upload_succeeded_content_single), + ((UploadFileOperation) operation).getFileName()); + } else { + if (result.getCode() == ResultCode.LOCAL_STORAGE_FULL + || result.getCode() == ResultCode.LOCAL_STORAGE_NOT_COPIED) { + message = String.format(res.getString(R.string.error__upload__local_file_not_copied), + ((UploadFileOperation) operation).getFileName()); + + } else if (result.getCode() == ResultCode.QUOTA_EXCEEDED) { + message = res.getString(R.string.failed_upload_quota_exceeded_text); + + } else { + message = String.format(res.getString(R.string.uploader_upload_failed_content_single), + ((UploadFileOperation) operation).getFileName()); + } + } + + } else if (operation instanceof DownloadFileOperation) { + + if (result.isSuccess()) { + message = String.format(res.getString(R.string.downloader_download_succeeded_content), + new File(((DownloadFileOperation) operation).getSavePath()).getName()); + + } else { + message = String.format(res.getString(R.string.downloader_download_failed_content), + new File(((DownloadFileOperation) operation).getSavePath()).getName()); + } + + } else if (operation instanceof RemoveFileOperation) { + if (result.isSuccess()) { + message = res.getString(R.string.remove_success_msg); + + } else { + if (isNetworkError(result.getCode())) { + message = getErrorMessage(result, res); + + } else { + message = res.getString(R.string.remove_fail_msg); + } + } + + } else if (operation instanceof RenameFileOperation) { + if (result.getCode().equals(ResultCode.INVALID_LOCAL_FILE_NAME)) { + message = res.getString(R.string.rename_local_fail_msg); + + } if (result.getCode().equals(ResultCode.INVALID_CHARACTER_IN_NAME)) { + message = res.getString(R.string.filename_forbidden_characters); + + } else if (isNetworkError(result.getCode())) { + message = getErrorMessage(result, res); + + } else { + message = res.getString(R.string.rename_server_fail_msg); + } + + } else if (operation instanceof SynchronizeFileOperation) { + if (!((SynchronizeFileOperation) operation).transferWasRequested()) { + message = res.getString(R.string.sync_file_nothing_to_do_msg); + } + + } else if (operation instanceof CreateFolderOperation) { + if (result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME) { + message = res.getString(R.string.filename_forbidden_characters); + + } else if (isNetworkError(result.getCode())) { + message = getErrorMessage(result, res); + + } else { + message = res.getString(R.string.create_dir_fail_msg); + } + } else if (operation instanceof CreateShareOperation) { + if (result.getCode() == ResultCode.SHARE_NOT_FOUND) { // Error --> SHARE_NOT_FOUND + message = res.getString(R.string.share_link_file_no_exist); + + } else if (isNetworkError(result.getCode())) { + message = getErrorMessage(result, res); + + } else { // Generic error + // Show a Message, operation finished without success + message = res.getString(R.string.share_link_file_error); + } + + } else if (operation instanceof UnshareLinkOperation) { + + if (result.getCode() == ResultCode.SHARE_NOT_FOUND) { // Error --> SHARE_NOT_FOUND + message = res.getString(R.string.unshare_link_file_no_exist); + + } else if (isNetworkError(result.getCode())) { + message = getErrorMessage(result, res); + + } else { // Generic error + // Show a Message, operation finished without success + message = res.getString(R.string.unshare_link_file_error); + } + } + + return message; + } + + private static String getErrorMessage(RemoteOperationResult result , Resources res) { + + String message = null; + + if (!result.isSuccess()) { + + if (result.getCode() == ResultCode.WRONG_CONNECTION) { + message = res.getString(R.string.network_error_socket_exception); + + } else if (result.getCode() == ResultCode.TIMEOUT) { + message = res.getString(R.string.network_error_socket_exception); + + if (result.getException() instanceof SocketTimeoutException) { + message = res.getString(R.string.network_error_socket_timeout_exception); + } else if(result.getException() instanceof ConnectTimeoutException) { + message = res.getString(R.string.network_error_connect_timeout_exception); + } + + } else if (result.getCode() == ResultCode.HOST_NOT_AVAILABLE) { + message = res.getString(R.string.network_host_not_available); + } + } + + return message; + } + + private static boolean isNetworkError(RemoteOperationResult.ResultCode code) { + if (code == ResultCode.WRONG_CONNECTION || + code == ResultCode.TIMEOUT || + code == ResultCode.HOST_NOT_AVAILABLE) { + return true; + } + else + return false; + } +}