Merge branch 'fixed_video_playback_on_rotations' into release-1.5.6
authormasensio <masensio@solidgear.es>
Tue, 27 May 2014 11:20:01 +0000 (13:20 +0200)
committermasensio <masensio@solidgear.es>
Tue, 27 May 2014 11:20:01 +0000 (13:20 +0200)
56 files changed:
res/drawable-hdpi/file.png
res/drawable-hdpi/file_doc.png
res/drawable-hdpi/file_image.png
res/drawable-hdpi/file_movie.png
res/drawable-hdpi/file_pdf.png
res/drawable-hdpi/file_ppt.png [new file with mode: 0644]
res/drawable-hdpi/file_sound.png
res/drawable-hdpi/file_xls.png [new file with mode: 0644]
res/drawable-hdpi/file_zip.png
res/drawable-hdpi/ic_menu_archive.png
res/drawable-ldpi/file.png
res/drawable-ldpi/file_doc.png
res/drawable-ldpi/file_image.png
res/drawable-ldpi/file_movie.png
res/drawable-ldpi/file_pdf.png
res/drawable-ldpi/file_ppt.png [new file with mode: 0644]
res/drawable-ldpi/file_sound.png
res/drawable-ldpi/file_xls.png [new file with mode: 0644]
res/drawable-ldpi/file_zip.png
res/drawable-ldpi/ic_menu_archive.png
res/drawable-mdpi/file.png
res/drawable-mdpi/file_doc.png
res/drawable-mdpi/file_image.png
res/drawable-mdpi/file_movie.png
res/drawable-mdpi/file_pdf.png
res/drawable-mdpi/file_ppt.png [new file with mode: 0644]
res/drawable-mdpi/file_sound.png
res/drawable-mdpi/file_xls.png [new file with mode: 0644]
res/drawable-mdpi/file_zip.png
res/drawable-mdpi/ic_menu_archive.png
res/values-de-rDE/strings.xml
res/values-de/strings.xml
res/values-el/strings.xml
res/values-en-rGB/strings.xml
res/values-es/strings.xml
res/values-fi-rFI/strings.xml
res/values-fr/strings.xml
res/values-gl/strings.xml
res/values-it/strings.xml
res/values-nl/strings.xml
res/values-pl/strings.xml
res/values-pt-rBR/strings.xml
res/values-pt-rPT/strings.xml
res/values-ru/strings.xml
res/values-sv/strings.xml
res/values-tr/strings.xml
res/values/strings.xml
src/com/owncloud/android/authentication/AccountUtils.java
src/com/owncloud/android/files/services/FileDownloader.java
src/com/owncloud/android/files/services/FileUploader.java
src/com/owncloud/android/ui/activity/FileActivity.java
src/com/owncloud/android/ui/activity/FileDisplayActivity.java
src/com/owncloud/android/ui/adapter/FileListListAdapter.java
src/com/owncloud/android/ui/fragment/FileDetailFragment.java
src/com/owncloud/android/utils/DisplayUtils.java
src/com/owncloud/android/utils/ErrorMessageAdapter.java [new file with mode: 0644]

index 08f9937..71d7390 100644 (file)
Binary files a/res/drawable-hdpi/file.png and b/res/drawable-hdpi/file.png differ
index 068ed57..e9c2323 100644 (file)
Binary files a/res/drawable-hdpi/file_doc.png and b/res/drawable-hdpi/file_doc.png differ
index dc40bae..bdb2e65 100644 (file)
Binary files a/res/drawable-hdpi/file_image.png and b/res/drawable-hdpi/file_image.png differ
index 2acfaf8..e178cce 100644 (file)
Binary files a/res/drawable-hdpi/file_movie.png and b/res/drawable-hdpi/file_movie.png differ
index a4af281..85c8953 100644 (file)
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 (file)
index 0000000..4fb809e
Binary files /dev/null and b/res/drawable-hdpi/file_ppt.png differ
index 33045af..30f5367 100644 (file)
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 (file)
index 0000000..f6a2cc8
Binary files /dev/null and b/res/drawable-hdpi/file_xls.png differ
index 398f601..bffacb4 100644 (file)
Binary files a/res/drawable-hdpi/file_zip.png and b/res/drawable-hdpi/file_zip.png differ
index 0bdcac5..7d25b82 100644 (file)
Binary files a/res/drawable-hdpi/ic_menu_archive.png and b/res/drawable-hdpi/ic_menu_archive.png differ
index bbe560b..b669fdf 100644 (file)
Binary files a/res/drawable-ldpi/file.png and b/res/drawable-ldpi/file.png differ
index a407043..0ea07e3 100644 (file)
Binary files a/res/drawable-ldpi/file_doc.png and b/res/drawable-ldpi/file_doc.png differ
index b3af57c..1bf2015 100644 (file)
Binary files a/res/drawable-ldpi/file_image.png and b/res/drawable-ldpi/file_image.png differ
index 53bf0e7..e50c168 100644 (file)
Binary files a/res/drawable-ldpi/file_movie.png and b/res/drawable-ldpi/file_movie.png differ
index ded8249..a05afdd 100644 (file)
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 (file)
index 0000000..11a9cc9
Binary files /dev/null and b/res/drawable-ldpi/file_ppt.png differ
index 6fc963f..26e5a5f 100644 (file)
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 (file)
index 0000000..9855367
Binary files /dev/null and b/res/drawable-ldpi/file_xls.png differ
index 04340f4..88d0040 100644 (file)
Binary files a/res/drawable-ldpi/file_zip.png and b/res/drawable-ldpi/file_zip.png differ
index 7818537..e4d0ee5 100644 (file)
Binary files a/res/drawable-ldpi/ic_menu_archive.png and b/res/drawable-ldpi/ic_menu_archive.png differ
index 0a1ca52..5fa8505 100644 (file)
Binary files a/res/drawable-mdpi/file.png and b/res/drawable-mdpi/file.png differ
index 95651f8..2e7628a 100644 (file)
Binary files a/res/drawable-mdpi/file_doc.png and b/res/drawable-mdpi/file_doc.png differ
index 2b2fff4..eedd41f 100644 (file)
Binary files a/res/drawable-mdpi/file_image.png and b/res/drawable-mdpi/file_image.png differ
index 4c0254c..b37e98d 100644 (file)
Binary files a/res/drawable-mdpi/file_movie.png and b/res/drawable-mdpi/file_movie.png differ
index 306ad99..07aa238 100644 (file)
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 (file)
index 0000000..db7d58d
Binary files /dev/null and b/res/drawable-mdpi/file_ppt.png differ
index 8789e5c..6b8b589 100644 (file)
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 (file)
index 0000000..b0264d7
Binary files /dev/null and b/res/drawable-mdpi/file_xls.png differ
index 92647b8..61974b8 100644 (file)
Binary files a/res/drawable-mdpi/file_zip.png and b/res/drawable-mdpi/file_zip.png differ
index 2c50285..7f29fbc 100644 (file)
Binary files a/res/drawable-mdpi/ic_menu_archive.png and b/res/drawable-mdpi/ic_menu_archive.png differ
index a4fb1ba..64ae589 100644 (file)
   <string name="sync_file_nothing_to_do_msg">Dateiinhalte bereits synchronisiert</string>
   <string name="create_dir_fail_msg">Verzeichnis konnte nicht erstellt werden</string>
   <string name="filename_forbidden_characters">Verbotene Zeichen: / \\ &lt; &gt; : \" | ? *</string>
+  <string name="filename_empty">Dateiname darf nicht leer sein</string>
   <string name="wait_a_moment">Bitte warten Sie einen Moment.</string>
   <string name="filedisplay_unexpected_bad_get_content">Ein unerwartetes Problem ist aufgetreten. Bitte versuchen Sie, die Datei in einer anderen App zu öffnen.</string>
   <string name="filedisplay_no_file_selected">Es wurde keine Datei ausgewählt.</string>
index 0327483..1491b16 100644 (file)
   <string name="sync_file_nothing_to_do_msg">Dateiinhalte bereits synchronisiert</string>
   <string name="create_dir_fail_msg">Verzeichnis konnte nicht erstellt werden</string>
   <string name="filename_forbidden_characters">Verbotene Zeichen: / \\ &lt; &gt; : \" | ? *</string>
+  <string name="filename_empty">Dateiname darf nicht leer sein</string>
   <string name="wait_a_moment">Bitte warte einen Moment.</string>
   <string name="filedisplay_unexpected_bad_get_content">Ein unerwartetes Problem ist aufgetreten. Bitte versuche, die Datei in einer anderen App zu öffnen</string>
   <string name="filedisplay_no_file_selected">Es wurde keine Datei ausgewählt.</string>
index 7c1275b..a133cb8 100644 (file)
@@ -31,6 +31,7 @@
   <string name="prefs_feedback">Σχόλια </string>
   <string name="prefs_imprint">Αποτύπωμα</string>
   <string name="recommend_subject">Δοκιμάστε %1$s στο κινητό σας!</string>
+  <string name="recommend_text">Θέλω να σας προσκαλέσω να χρησιμοποιήσετε το %1$s στο κινητό σας!\nΚατεβάστε το εδώ: %2$s</string>
   <string name="auth_check_server">Έλεγχος Διακομιστή</string>
   <string name="auth_host_url">Διεύθυνση εξυπηρέτη https://…</string>
   <string name="auth_username">Όνομα χρήστη</string>
   <string name="sync_file_nothing_to_do_msg">Τα περιεχόμενα του αρχείου έχουν ήδη συγχρονιστεί</string>
   <string name="create_dir_fail_msg">Δημιουργία φακέλου απέτυχε</string>
   <string name="filename_forbidden_characters">Μη-επιτρεπόμενοι χαρακτήρες: / \\ &lt; &gt; : \" | ? *</string>
+  <string name="filename_empty">Το όνομα αρχείου δεν μπορεί να είναι κενό.</string>
   <string name="wait_a_moment">Παρακαλούμε περιμένετε</string>
   <string name="filedisplay_unexpected_bad_get_content">Απροσδόκητο σφάλμα, δοκιμάστε με άλλη εφαρμογή</string>
   <string name="filedisplay_no_file_selected">Δεν επιλέχθηκαν αρχεία </string>
index c72c6fe..c56ffec 100644 (file)
   <string name="sync_file_nothing_to_do_msg">File contents already synchronised</string>
   <string name="create_dir_fail_msg">Folder could not be created</string>
   <string name="filename_forbidden_characters">Forbidden characters: / \\ &lt; &gt; : \" | ? *</string>
+  <string name="filename_empty">File name cannot be empty</string>
   <string name="wait_a_moment">Wait a moment</string>
   <string name="filedisplay_unexpected_bad_get_content">Unexpected problem; please select the file from a different app</string>
   <string name="filedisplay_no_file_selected">No file was selected</string>
index ee3d5b2..3744433 100644 (file)
   <string name="sync_file_nothing_to_do_msg">Ya está sincronizado</string>
   <string name="create_dir_fail_msg">No se pudo crear la carpeta</string>
   <string name="filename_forbidden_characters">Carácteres ilegales: / \\ &lt; &gt; : \" | ? *</string>
+  <string name="filename_empty">El nombre de archivo no puede estar vacío</string>
   <string name="wait_a_moment">Espere un momento</string>
   <string name="filedisplay_unexpected_bad_get_content">Problema inesperado; por favor, prueba otra app para seleccionar el archivo</string>
   <string name="filedisplay_no_file_selected">No hay ficheros seleccionados.</string>
index 3333ad2..3a02f08 100644 (file)
   <string name="sync_file_fail_msg">Etäpään tiedostoa ei voitu tarkistaa</string>
   <string name="sync_file_nothing_to_do_msg">Tiedoston sisältö on jo synkronoitu</string>
   <string name="filename_forbidden_characters">Kielletyt merkit: / \\ &lt; &gt; : \" | ? *</string>
+  <string name="filename_empty">Tiedoston nimi ei voi olla tyhjä</string>
   <string name="wait_a_moment">Odota hetki</string>
   <string name="filedisplay_unexpected_bad_get_content">Odottamaton ongelma; kokeile valita tiedosto toisella sovelluksella</string>
   <string name="filedisplay_no_file_selected">Tiedostoa ei valittu</string>
index bdaab72..676a61f 100644 (file)
   <string name="sync_file_nothing_to_do_msg">Le contenu des fichiers est déjà synchronisé</string>
   <string name="create_dir_fail_msg">Le dossier n\'a pas pu être créé</string>
   <string name="filename_forbidden_characters">Caractères interdits : / \\ &lt; &gt; : \" | ? *</string>
+  <string name="filename_empty">Le nom du fichier ne peut pas être vide</string>
   <string name="wait_a_moment">Veuillez patienter</string>
   <string name="filedisplay_unexpected_bad_get_content">Problème inattendu ; veuillez essayer une autre app pour la sélection du fichier</string>
   <string name="filedisplay_no_file_selected">Aucun fichier sélectionné</string>
index 5df2c54..7a3a243 100644 (file)
   <string name="sync_file_nothing_to_do_msg">Os contidos do ficheiro xa están sincronizados</string>
   <string name="create_dir_fail_msg">Non foi posíbel crear o cartafol</string>
   <string name="filename_forbidden_characters">Caracteres non permitidos: / \\ &lt; &gt; : \" | ? *</string>
+  <string name="filename_empty">O nome de ficheiro non pode estar baleiro</string>
   <string name="wait_a_moment">Agarde un chisco</string>
   <string name="filedisplay_unexpected_bad_get_content">Produciuse un erro non agardado. Seleccione o ficheiro con outro aplicativo diferente</string>
   <string name="filedisplay_no_file_selected">Non se escolleu ningún ficheiro</string>
index 1401b32..dc4d428 100644 (file)
   <string name="sync_file_nothing_to_do_msg">Contenuti del file già sincronizzati</string>
   <string name="create_dir_fail_msg">La cartella non può essere creata</string>
   <string name="filename_forbidden_characters">Caratteri proibiti: / \\ &lt; &gt; : \" | ? *</string>
+  <string name="filename_empty">Il nome del file non può essere vuoto</string>
   <string name="wait_a_moment">Attendi</string>
   <string name="filedisplay_unexpected_bad_get_content">Problema inatteso; prova un\'altra applicazione per selezionare il file</string>
   <string name="filedisplay_no_file_selected">Non è stato selezionato alcun file</string>
index 00f3ab1..95b3719 100644 (file)
   <string name="sync_file_nothing_to_do_msg">Bestandsinhoud is al gesynchroniseerd</string>
   <string name="create_dir_fail_msg">Map kon niet worden aangemaakt</string>
   <string name="filename_forbidden_characters">Verboden tekens: / \\ &lt; &gt; : \" | ? *</string>
+  <string name="filename_empty">Bestandsnaam mag niet leeg zijn</string>
   <string name="wait_a_moment">Even geduld</string>
   <string name="filedisplay_unexpected_bad_get_content">Onverwacht probleem; probeer een andere app om het bestand te selecteren</string>
   <string name="filedisplay_no_file_selected">Er werd geen bestand geselecteerd</string>
index e3dbfb3..c3c1dc1 100644 (file)
   <string name="sync_file_nothing_to_do_msg">Zawartość pliku została już synchronizowana</string>
   <string name="create_dir_fail_msg">Folder nie może zostać utworzony</string>
   <string name="filename_forbidden_characters">Znaki zabronione: / \\ &lt; &gt; : \" | ? *</string>
+  <string name="filename_empty">Nazwa pliku nie może być pusta.</string>
   <string name="wait_a_moment">Poczekaj chwilę</string>
   <string name="filedisplay_unexpected_bad_get_content">Nieoczekiwany problem; spróbuj wybrać plik z innej aplikacji</string>
   <string name="filedisplay_no_file_selected">Nie wybrano żadnych plików</string>
index bac79ff..dd207c5 100644 (file)
   <string name="sync_file_nothing_to_do_msg">Conteúdo do arquivo já foi sincronizado</string>
   <string name="create_dir_fail_msg">A pasta não pode ser criada</string>
   <string name="filename_forbidden_characters">Caracteres proibidos: / \\ &lt; &gt; : \" | ? *</string>
+  <string name="filename_empty">O nome do arquivo não pode ficar estar vazio</string>
   <string name="wait_a_moment">Aguarde um momento</string>
   <string name="filedisplay_unexpected_bad_get_content">Problema inesperado; por favor, tente selecionar o arquivo com outro app</string>
   <string name="filedisplay_no_file_selected">Nenhum arquivo foi selecionado</string>
index f42850a..1f84ac5 100644 (file)
   <string name="sync_file_nothing_to_do_msg">O conteúdo do ficheiro já foi sincronizado</string>
   <string name="create_dir_fail_msg">Não foi possivel criar a pasta</string>
   <string name="filename_forbidden_characters">Caracteres não permitidos: / \\ &lt; &gt; : \" | ? *</string>
+  <string name="filename_empty">O nome do ficheiro não pode ser vazio.</string>
   <string name="wait_a_moment">Aguarde um momento</string>
   <string name="filedisplay_unexpected_bad_get_content">Erro inesperado. Por favor tente outra aplicação para seleccionar o ficheiro.</string>
   <string name="filedisplay_no_file_selected">Não selecionou nenhum ficheiro</string>
index 89c7811..1b568dc 100644 (file)
   <string name="sync_file_nothing_to_do_msg">Содержимое файла уже синхронизировано</string>
   <string name="create_dir_fail_msg">Не возможно создать папку</string>
   <string name="filename_forbidden_characters">Недопустимые символы: / \\ &lt; &gt; : \" | ? *</string>
+  <string name="filename_empty">Имя файла не может быть пустым</string>
   <string name="wait_a_moment">Подождите немного</string>
   <string name="filedisplay_unexpected_bad_get_content">Неизвестная ошибка; выберите этот файл из другого приложения</string>
   <string name="filedisplay_no_file_selected">Файлы не выбраны</string>
index b635367..d0b4663 100644 (file)
   <string name="sync_file_nothing_to_do_msg">Filinnehåll redan synkroniserat</string>
   <string name="create_dir_fail_msg">Mapp kunde inte skapas</string>
   <string name="filename_forbidden_characters">Förbjudna tecken är: / \\ &lt; &gt; : \" | ? *</string>
+  <string name="filename_empty">Filnamnet får inte lämnas blankt</string>
   <string name="wait_a_moment">Var god vänta</string>
   <string name="filedisplay_unexpected_bad_get_content">Oväntat problem; prova annat program för aktuell fil</string>
   <string name="filedisplay_no_file_selected">Ingen fil vald</string>
index cd41b14..34d17f4 100644 (file)
@@ -6,10 +6,10 @@
   <string name="actionbar_upload">Yükle</string>
   <string name="actionbar_upload_from_apps">Diğer uygulamalardan içerik</string>
   <string name="actionbar_upload_files">Dosyalar</string>
-  <string name="actionbar_open_with">ile aç</string>
+  <string name="actionbar_open_with">Birlikte aç</string>
   <string name="actionbar_mkdir">Yeni klasör</string>
   <string name="actionbar_settings">Ayarlar</string>
-  <string name="actionbar_see_details">Detaylar</string>
+  <string name="actionbar_see_details">Ayrıntılar</string>
   <string name="actionbar_send_file">Gönder</string>
   <string name="prefs_category_general">Genel</string>
   <string name="prefs_category_more">Daha fazla</string>
@@ -21,9 +21,9 @@
   <string name="prefs_instant_upload_summary">Kamera ile çekilen fotoğrafları anında yükle</string>
   <string name="prefs_instant_video_upload">Anında video yüklemeleri</string>
   <string name="prefs_instant_video_upload_summary">Kamera ile çekilen videoları anında yükle</string>
-  <string name="prefs_log_title">Günlük tutmayı etkinleştir</string>
+  <string name="prefs_log_title">Günlük Tutmayı Etkinleştir</string>
   <string name="prefs_log_summary">Bu, sorunları günlük dosyasına kaydetmek için kullanılır</string>
-  <string name="prefs_log_title_history">Günlük geçmişi</string>
+  <string name="prefs_log_title_history">Günlük Geçmişi</string>
   <string name="prefs_log_summary_history">Bu, kayıtlı günlük dosyalarını görüntüler</string>
   <string name="prefs_log_delete_history_button">Geçmişi Sil</string>
   <string name="prefs_help">Yardım</string>
   <string name="prefs_feedback">Geribildirim</string>
   <string name="prefs_imprint">İzlenim</string>
   <string name="recommend_subject">%1$s uygulamasını akıllı telefonunda dene!</string>
-  <string name="recommend_text">\"Sana, akıllı telefonunda kullanmak üzere %1$s daveti yapıyorum!\nBuradan indirebilirsin: %2$s\"</string>
-  <string name="auth_check_server">Sunucuyu kontrol et</string>
+  <string name="recommend_text">\"Seni, akıllı telefonunda %1$s kullanmaya davet ediyorum!\nBuradan indirebilirsin: %2$s\"</string>
+  <string name="auth_check_server">Sunucuyu Denetle</string>
   <string name="auth_host_url">Sunucu adresi https://…</string>
   <string name="auth_username">Kullanıcı Adı</string>
   <string name="auth_password">Parola</string>
-  <string name="auth_register">%1$s senin için yeni mi?</string>
+  <string name="auth_register">%1$s sizin için yeni mi?</string>
   <string name="sync_string_files">Dosyalar</string>
   <string name="setup_btn_connect">Bağlan</string>
   <string name="uploader_btn_upload_text">Yükle</string>
@@ -46,7 +46,7 @@
   <string name="uploader_wrn_no_account_setup_btn_text">Kurulum</string>
   <string name="uploader_wrn_no_account_quit_btn_text">Çıkış</string>
   <string name="uploader_wrn_no_content_title">Yüklenecek içerik yok</string>
-  <string name="uploader_wrn_no_content_text">Yüklenecek içerik yok. Yüklenecek dosya yok.</string>
+  <string name="uploader_wrn_no_content_text">Hiç içerik alınmadı. Yüklenecek hiçbir şey yok.</string>
   <string name="uploader_error_forbidden_content">%1$s için paylaşılan içeriğe erişim izni yok</string>
   <string name="uploader_info_uploading">Yükleniyor</string>
   <string name="file_list_empty">Bu klasörde dosya yok.\nYeni dosyalar \"Yükle\" menü seçeneği ile eklenebilir.</string>
   <string name="delete_account">Hesabı sil</string>
   <string name="create_account">Hesap oluştur</string>
   <string name="upload_chooser_title">Şuradan yükle...</string>
-  <string name="uploader_info_dirname">Klasör ismi</string>
+  <string name="uploader_info_dirname">Klasör adı</string>
   <string name="uploader_upload_in_progress_ticker">Yükleniyor...</string>
-  <string name="uploader_upload_in_progress_content">%%%1$d Yüklenen %2$s</string>
+  <string name="uploader_upload_in_progress_content">%%%1$d Yüklenen: %2$s</string>
   <string name="uploader_upload_succeeded_ticker">Yükleme başarılı</string>
   <string name="uploader_upload_succeeded_content_single">%1$s başarıyla yüklendi</string>
   <string name="uploader_upload_failed_ticker">Yükleme başarısız</string>
   <string name="uploader_upload_failed_content_single">%1$s yüklenmesi tamamlanamadı</string>
-  <string name="downloader_download_in_progress_ticker">İndiriyor...</string>
-  <string name="downloader_download_in_progress_content">%1$d%% İndiriliyor %2$s</string>
+  <string name="downloader_download_in_progress_ticker">İndiriliyor...</string>
+  <string name="downloader_download_in_progress_content">%%%1$d İndirilen: %2$s</string>
   <string name="downloader_download_succeeded_ticker">İndirme başarılı</string>
   <string name="downloader_download_succeeded_content">%1$s başarıyla indirildi</string>
-  <string name="downloader_download_failed_ticker">İndirilme başarısız</string>
-  <string name="downloader_download_failed_content">%1$s indirilmesi tamamlanamadı</string>
+  <string name="downloader_download_failed_ticker">İndirme başarısız</string>
+  <string name="downloader_download_failed_content">%1$s indirmesi tamamlanamadı</string>
   <string name="downloader_not_downloaded_yet">Henüz indirilemedi</string>
   <string name="common_choose_account">Hesap seçin</string>
   <string name="sync_fail_ticker">Eşitleme başarısız</string>
   <string name="sync_fail_content">%1$s eşitlemesi tamamlanamadı</string>
   <string name="sync_fail_content_unauthorized">%1$s için geçersiz parola</string>
   <string name="sync_conflicts_in_favourites_ticker">Çakışma bulundu</string>
-  <string name="sync_conflicts_in_favourites_content">%1$d korumalı eşitleme dosyası, eşitlenemedi</string>
-  <string name="sync_fail_in_favourites_ticker">Korunan dosya eşitlemesi başarısız</string>
+  <string name="sync_conflicts_in_favourites_content">%1$d eşit tut dosyası, eşitlenemedi</string>
+  <string name="sync_fail_in_favourites_ticker">Dosyaları eşit tut işlemi başarısız</string>
   <string name="sync_fail_in_favourites_content">%1$d dosya eşitlenemedi (%2$d çakışma)</string>
   <string name="sync_foreign_files_forgotten_ticker">Bazı yerel dosyalar unutuldu</string>
   <string name="sync_foreign_files_forgotten_content">%2$s klasöründeki %1$d dosya şuraya kopyalanamadı</string>
   <string name="foreign_files_fail">Bazı dosyalar taşınamadı</string>
   <string name="foreign_files_local_text">Yerel: %1$s</string>
   <string name="foreign_files_remote_text">Uzak: %1$s</string>
-  <string name="upload_query_move_foreign_files">Seçilen dosyaları %1$s dizinine kopyalamak için yeterli alan yok. Bunun yerine dosyayı taşımak ister misiniz?</string>
+  <string name="upload_query_move_foreign_files">Seçilen dosyaları %1$s klasörüne kopyalamak için yeterli alan yok. Bunun yerine dosyayı taşımak ister misiniz?</string>
   <string name="pincode_enter_pin_code">Lütfen uygulama PIN\'inizi girin</string>
   <string name="pincode_configure_your_pin">Uygulama PIN\'inizi girin</string>
   <string name="pincode_configure_your_pin_explanation">PIN uygulama yeniden başladığında tekrar sorulacak</string>
   <string name="pincode_reenter_your_pincode">Lütfen, uygulama PIN\'inizi tekrar girin</string>
-  <string name="pincode_remove_your_pincode">Uygulama PIN\'inizi aldırın</string>
+  <string name="pincode_remove_your_pincode">Uygulama PIN\'inizi kaldırın</string>
   <string name="pincode_mismatch">Her iki Uygulama PIN\'i aynı değil</string>
   <string name="pincode_wrong">Yanlış Uygulama PIN\'i</string>
   <string name="pincode_removed">Uygulama PIN\'i kaldırıldı</string>
   <string name="media_notif_ticker">%1$s müzik çalar</string>
   <string name="media_state_playing">%1$s (oynatılıyor)</string>
   <string name="media_state_loading">%1$s (yükleniyor)</string>
-  <string name="media_event_done">%1$s yeniden oynatım sonlandırıldı</string>
-  <string name="media_err_nothing_to_play">Herhangi bir medya öğesi bulunamadı</string>
+  <string name="media_event_done">%1$s yeniden oynatım tamamlandı</string>
+  <string name="media_err_nothing_to_play">Herhangi bir ortam ögesi bulunamadı</string>
   <string name="media_err_no_account">Tanımlı hesap yok</string>
-  <string name="media_err_not_in_owncloud">Dosya doğru bir hesapta değil</string>
-  <string name="media_err_unsupported">Codec desteklenmiyor</string>
-  <string name="media_err_io">Medya öğesi okunamadı</string>
-  <string name="media_err_malformed">Medya öğesi doğru bir şekilde kodlanmadı</string>
-  <string name="media_err_timeout">Oynatmaya çalışırken zaman aşımına uğradı</string>
-  <string name="media_err_invalid_progressive_playback">Medya öğesi aktarılamadı</string>
+  <string name="media_err_not_in_owncloud">Dosya geçerli bir hesapta değil</string>
+  <string name="media_err_unsupported">Ortam kod çözücü desteklenmiyor</string>
+  <string name="media_err_io">Ortam ögesi okunamadı</string>
+  <string name="media_err_malformed">Ortam ögesi doğru bir şekilde kodlanmamış</string>
+  <string name="media_err_timeout">Oynatmaya çalışırken zaman aşımına uğradı</string>
+  <string name="media_err_invalid_progressive_playback">Ortam ögesi akışı yapılamıyor</string>
   <string name="media_err_unknown">Ortam dosyası mevcut ortam oynatıcı ile çalınamaz</string>
   <string name="media_err_security_ex">%1$s oynatılmaya çalışılırken güvenlik hatası oluştu</string>
   <string name="media_err_io_ex">%1$s oynatılmaya çalışılırken girdi hatası oluştu</string>
   <string name="auth_account_not_new">Cihazda aynı kullanıcı adı ve sunucu için bir hesap zaten mevcut</string>
   <string name="auth_account_not_the_same">Girilen kullanıcı bu hesabın kullanıcısı ile eşleşmiyor</string>
   <string name="auth_unknown_error_title">Bilinmeyen hata oluştu!</string>
-  <string name="auth_unknown_host_title">Anabilgisayar bulunamadı</string>
-  <string name="auth_incorrect_path_title">Sunucu örneği bulunamadı.</string>
+  <string name="auth_unknown_host_title">Ana makine bulunamadı</string>
+  <string name="auth_incorrect_path_title">Sunucu örneği bulunamadı</string>
   <string name="auth_timeout_title">Sunucu çok geç cevap veriyor</string>
   <string name="auth_incorrect_address_title">Hatalı biçimlendirilmiş URL</string>
-  <string name="auth_ssl_general_error_title">SSL başlatılmasında hata</string>
+  <string name="auth_ssl_general_error_title">SSL başlatma başarısız</string>
   <string name="auth_ssl_unverified_server_title">SSL sunucu kimliği doğrulanamadı</string>
   <string name="auth_bad_oc_version_title">Bilinmeyen sunucu sürümü</string>
   <string name="auth_wrong_connection_title">Bağlantı kurulamadı</string>
-  <string name="auth_secure_connection">Güvenli bağlantı sağlandı.</string>
+  <string name="auth_secure_connection">Güvenli bağlantı sağlandı</string>
   <string name="auth_unauthorized">Hatalı kullanıcı adı veya parola</string>
   <string name="auth_oauth_error">Kimlik doğrulama başarısız oldu</string>
   <string name="auth_oauth_error_access_denied">Erişim, kimlik doğrulama sunucusu tarafından reddedildi</string>
   <string name="auth_connecting_auth_server">Kimlik doğrulama sunucusuna bağlanılıyor...</string>
   <string name="auth_unsupported_auth_method">Sunucu bu kimlik doğrulama yöntemini desteklemiyor</string>
   <string name="auth_unsupported_multiaccount">%1$s çoklu hesapları desteklemiyor</string>
-  <string name="auth_fail_get_user_name">Sunucunuz geçerli bir kullanıcı kimliği döndürmüyor, lütfen yöneticinizle iletişime geçin</string>
+  <string name="auth_fail_get_user_name">Sunucunuz geçerli bir kullanıcı kimliği döndürmüyor, lütfen yöneticinizle iletişime geçin\n        </string>
   <string name="auth_can_not_auth_against_server">Bu sunucuya karşı kimlik doğrulama yapılamaz</string>
   <string name="fd_keep_in_sync">Dosyayı güncel tut</string>
   <string name="common_rename">Yeniden adlandır</string>
   <string name="confirmation_remove_local">Sadece yerel</string>
   <string name="confirmation_remove_folder_local">Sadece yerel içerik</string>
   <string name="confirmation_remove_remote">Sunucudan kaldır</string>
-  <string name="confirmation_remove_remote_and_local">Uzaktaki ve yereldeki</string>
+  <string name="confirmation_remove_remote_and_local">Uzak ve yerel</string>
   <string name="remove_success_msg">Kaldırma başarılı</string>
   <string name="remove_fail_msg">Kaldırma başarısız</string>
   <string name="rename_dialog_title">Yeni bir isim girin</string>
-  <string name="rename_local_fail_msg">Yerel kopya adlandırılamaz; farklı bir ad deneyin</string>
-  <string name="rename_server_fail_msg">Yeniden  adlandırılma tamamlanmadı</string>
-  <string name="sync_file_fail_msg">Dosya teslim edilemedi</string>
+  <string name="rename_local_fail_msg">Yerel kopya adlandırılama; farklı bir ad deneyin</string>
+  <string name="rename_server_fail_msg">Yeniden  adlandırılma tamamlanamadı</string>
+  <string name="sync_file_fail_msg">Uzak dosya denetlenemedi</string>
   <string name="sync_file_nothing_to_do_msg">Dosya içerikleri zaten eşitlenmiş</string>
   <string name="create_dir_fail_msg">Klasör oluşturulamadı</string>
   <string name="filename_forbidden_characters">Yasaklı karakterler: / \\ &lt; &gt; : \" | ? *</string>
+  <string name="filename_empty">Dosya adı boş olamaz</string>
   <string name="wait_a_moment">Bir süre bekleyin</string>
-  <string name="filedisplay_unexpected_bad_get_content">Beklenmedik sorun; lütfen, dosya seçmek için farklı uygulama kullanın</string>
+  <string name="filedisplay_unexpected_bad_get_content">Beklenmedik sorun; lütfen dosya seçmek için farklı bir uygulama kullanın</string>
   <string name="filedisplay_no_file_selected">Hiçbir dosya seçilmedi</string>
   <string name="activity_chooser_title">Bağlantıyı gönder ...</string>
   <string name="oauth_check_onoff">oAuth2 ile oturum aç</string>
   <string name="oauth_login_connection">oAuth2 sunucusuna bağlanılıyor…</string>
   <string name="ssl_validator_header">Bu sitenin sertifikası doğrulanamadı</string>
-  <string name="ssl_validator_reason_cert_not_trusted">- Sunucu sertifikası güvenilmez</string>
-  <string name="ssl_validator_reason_cert_expired">- Sunucu sertifikasının süresi geçmiş</string>
-  <string name="ssl_validator_reason_cert_not_yet_valid">Sunucu sertifikasının geçerli olacağı tarih</string>
-  <string name="ssl_validator_reason_hostname_not_verified">- URL adresi sunucu isminin sertifikası ile uyuşmuyor</string>
+  <string name="ssl_validator_reason_cert_not_trusted">- Sunucu sertifikasına güvenilmiyor</string>
+  <string name="ssl_validator_reason_cert_expired">- Sunucu sertifikasının süresi dolmuş</string>
+  <string name="ssl_validator_reason_cert_not_yet_valid">- Sunucu sertifikasının geçerlilik tarihi ileride</string>
+  <string name="ssl_validator_reason_hostname_not_verified">- Adres, sertifikadaki sunucu adı ile eşleşmiyor</string>
   <string name="ssl_validator_question">Sertifikaya yine de güvenmek istiyor musunuz?</string>
   <string name="ssl_validator_not_saved">Sertifika kaydedilemedi</string>
   <string name="ssl_validator_btn_details_see">Ayrıntılar</string>
   <string name="ssl_validator_label_ST">Eyalet:</string>
   <string name="ssl_validator_label_L">Konum:</string>
   <string name="ssl_validator_label_validity">Geçerlilik:</string>
-  <string name="ssl_validator_label_validity_from">Kimden:</string>
-  <string name="ssl_validator_label_validity_to">Kime:</string>
+  <string name="ssl_validator_label_validity_from">Başlangıç:</string>
+  <string name="ssl_validator_label_validity_to">Bitiş:</string>
   <string name="ssl_validator_label_signature">İmza:</string>
   <string name="ssl_validator_label_signature_algorithm">Algoritma:</string>
   <string name="ssl_validator_null_cert">Sertifika gösterilemedi.</string>
   <string name="placeholder_filesize">389 KB</string>
   <string name="placeholder_timestamp">2012/05/18 12:23 ÖS</string>
   <string name="placeholder_media_time">12:23:45</string>
-  <string name="instant_upload_on_wifi">Fotoğrafları sadece kablosuz bağlantıda (WiFi) yükle</string>
-  <string name="instant_video_upload_on_wifi">Videoları sadece kablosuz bağlantıda (WiFi) yükle</string>
+  <string name="instant_upload_on_wifi">Fotoğrafları sadece kablosuzda (WiFi) yükle</string>
+  <string name="instant_video_upload_on_wifi">Videoları sadece kablosuzda (WiFi) yükle</string>
   <string name="instant_upload_path">/AnındaYükle</string>
   <string name="conflict_title">Çakışmayı güncelle</string>
   <string name="conflict_message">Uzaktaki %s dosyası, yerel dosya ile eşitlenemedi. İşleme devam etmek sunucudaki dosyanın içeriğini değiştirecektir.</string>
   <string name="conflict_keep_both">İkisini de koru</string>
   <string name="conflict_overwrite">Üzerine yaz</string>
   <string name="conflict_dont_upload">Yükleme</string>
-  <string name="preview_image_description">Görüntü önizleme</string>
+  <string name="preview_image_description">Resim önizleme</string>
   <string name="preview_image_error_unknown_format">Bu resim gösterilemez</string>
-  <string name="error__upload__local_file_not_copied">%1$s, %2$s yerel dizine klasörüne</string>
+  <string name="error__upload__local_file_not_copied">%1$s, %2$s yerel klasörüne kopyalanamadı</string>
   <string name="actionbar_failed_instant_upload">AnındaYükleme başarısız</string>
   <string name="failed_upload_headline_text">Anında yüklemeler başarısız</string>
   <string name="failed_upload_headline_hint">Başarısız olan tüm anında yüklemelerin özeti</string>
-  <string name="failed_upload_all_cb">hepsini seç</string>
+  <string name="failed_upload_all_cb">tümünü seç</string>
   <string name="failed_upload_headline_retryall_btn">tüm seçili olanları tekrar dene</string>
   <string name="failed_upload_headline_delete_all_btn">yükleme kuyruğundaki tüm seçili olanları sil</string>
-  <string name="failed_upload_retry_text">Resmi yeniden yüklemeyi dene:</string>
-  <string name="failed_upload_load_more_images">Daha fazla Görsel yükle</string>
+  <string name="failed_upload_retry_text">fotoğrafı yeniden yüklemeyi dene:</string>
+  <string name="failed_upload_load_more_images">Daha fazla resim yükle</string>
   <string name="failed_upload_retry_do_nothing_text">anında yükleme için çevrimiçi değilsiniz, bir şey yapma</string>
   <string name="failed_upload_failure_text">Hata Mesajı:</string>
   <string name="failed_upload_quota_exceeded_text">Sunucu yapılandırmanızı kontrol edin. Kotanızı aşmış olabilirsiniz.</string>
-  <string name="share_link_no_support_share_api">Üzgünüz, paylaşım sunucunuzda etkin değil. Lütfen yöneticinizle\niletişime geçin.</string>
+  <string name="share_link_no_support_share_api">Üzgünüz, paylaşım sunucunuzda etkin değil. Lütfen yöneticinizle\n                iletişime geçin.</string>
   <string name="share_link_file_no_exist">Bu dosya veya klasör paylaşılamıyor. Lütfen mevcut olup olmadığını denetleyin</string>
   <string name="share_link_file_error">Bu dosya veya klasörü paylaşmaya çalışılırken bir hata oluştu</string>
   <string name="unshare_link_file_no_exist">Bu dosya veya klasörün paylaşımı kaldırılamadı. Mevcut değil.</string>
index 0bd9cef..8304ecb 100644 (file)
@@ -86,6 +86,7 @@
     <string name="uploader_upload_succeeded_content_single">%1$s was successfully uploaded</string>
     <string name="uploader_upload_failed_ticker">Upload failed</string>
     <string name="uploader_upload_failed_content_single">Upload of %1$s could not be completed</string>
+    <string name="uploader_upload_failed_credentials_error">Upload failed, you need to relogin</string>
     <string name="downloader_download_in_progress_ticker">Downloading &#8230;</string>
     <string name="downloader_download_in_progress_content">%1$d%% Downloading %2$s</string>
     <string name="downloader_download_succeeded_ticker">Download succeeded</string>
@@ -93,6 +94,7 @@
     <string name="downloader_download_failed_ticker">Download failed</string>
     <string name="downloader_download_failed_content">Download of %1$s could not be completed</string>
     <string name="downloader_not_downloaded_yet">Not downloaded yet</string>
+    <string name="downloader_download_failed_credentials_error">Download failed, you need to relogin</string>
     <string name="common_choose_account">Choose account</string>
     <string name="sync_fail_ticker">Synchronization failed</string>
     <string name="sync_fail_content">Synchronization of %1$s could not be completed</string>
        <string name="auth_unsupported_multiaccount">%1$s does not support multiple accounts</string>
        <string name="auth_fail_get_user_name">Your server is not returning a correct user id, please contact an administrator
        </string>
-       <string name="auth_can_not_auth_against_server">Can not authenticate against this server</string>
+       <string name="auth_can_not_auth_against_server">Cannot authenticate against this server</string>
     
     <string name="fd_keep_in_sync">Keep file up to date</string>
     <string name="common_rename">Rename</string>
     <string name="common_remove">Remove</string>
-    <string name="confirmation_remove_alert">"Do you really want to remove %1$s ?"</string>
-    <string name="confirmation_remove_folder_alert">"Do you really want to remove %1$s and its contents ?"</string>
+    <string name="confirmation_remove_alert">"Do you really want to remove %1$s?"</string>
+    <string name="confirmation_remove_folder_alert">"Do you really want to remove %1$s and its contents?"</string>
     <string name="confirmation_remove_local">Local only</string>
     <string name="confirmation_remove_folder_local">Local contents only</string>
     <string name="confirmation_remove_remote">Remove from server</string>
     <string name="conflict_dont_upload">Don\'t upload</string>
     
     <string name="preview_image_description">Image preview</string>
-    <string name="preview_image_error_unknown_format">This image can not be shown</string>
+    <string name="preview_image_error_unknown_format">This image cannot be shown</string>
     
     <string name="error__upload__local_file_not_copied">%1$s could not be copied to %2$s local folder</string>
     <string name="actionbar_failed_instant_upload">Failed InstantUpload</string>
        <string name="copy_link">Copy link</string>
        <string name="clipboard_text_copied">Copied to clipboard</string>
 
-       <string name="error_cant_bind_to_operations_service">Critical error: can not perform operations</string>
+       <string name="error_cant_bind_to_operations_service">Critical error: cannot perform operations</string>
+       
+       <string name="network_error_socket_exception">An error occurred while connecting with the server.</string>
+       <string name="network_error_socket_timeout_exception">An error occurred while waiting for the server, the operation couldn\'t have been done</string>
+       <string name="network_error_connect_timeout_exception">An error occurred while waiting for the server, the operation couldn\'t have been done</string>
+       <string name="network_host_not_available">The operation couldn\'t be completed, server is unavaliable</string>
+       
 </resources>
index 10c8796..dc02344 100644 (file)
@@ -18,6 +18,8 @@
 \r
 package com.owncloud.android.authentication;\r
 \r
+import java.util.Locale;\r
+\r
 import com.owncloud.android.MainApp;\r
 import com.owncloud.android.lib.common.accounts.AccountTypeUtils;\r
 import com.owncloud.android.lib.resources.status.OwnCloudVersion;\r
@@ -81,8 +83,18 @@ public class AccountUtils {
                 MainApp.getAccountType());\r
 \r
         if (account != null && account.name != null) {\r
-            for (Account ac : ocAccounts) {\r
-                if (ac.name.equals(account.name)) {\r
+            int lastAtPos = account.name.lastIndexOf("@");\r
+            String hostAndPort = account.name.substring(lastAtPos + 1);\r
+            String username = account.name.substring(0, lastAtPos);\r
+            String otherHostAndPort, otherUsername;\r
+            Locale currentLocale = context.getResources().getConfiguration().locale;\r
+            for (Account otherAccount : ocAccounts) {\r
+                lastAtPos = otherAccount.name.lastIndexOf("@");\r
+                otherHostAndPort = otherAccount.name.substring(lastAtPos + 1);\r
+                otherUsername = otherAccount.name.substring(0, lastAtPos);\r
+                if (otherHostAndPort.equals(hostAndPort) &&\r
+                        otherUsername.toLowerCase(currentLocale).\r
+                            equals(username.toLowerCase(currentLocale))) {\r
                     return true;\r
                 }\r
             }\r
index 461283f..7a03135 100644 (file)
@@ -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());
         }
     }
index 08f9d3d..c6408c2 100644 (file)
@@ -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());
         }
 
     }
index f9d8bb1..0202522 100644 (file)
@@ -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();
-        }
-        
+        } 
     }
     
     
index 940fcdd..4babd9d 100644 (file)
@@ -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();
             }
         }
index 38ade7c..656e004 100644 (file)
@@ -113,7 +113,7 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
 \r
             fileName.setText(name);\r
             ImageView fileIcon = (ImageView) view.findViewById(R.id.imageView1);\r
-            fileIcon.setImageResource(DisplayUtils.getResourceId(file.getMimetype()));\r
+            fileIcon.setImageResource(DisplayUtils.getResourceId(file.getMimetype(), file.getFileName()));\r
             ImageView localStateView = (ImageView) view.findViewById(R.id.imageView2);\r
             FileDownloaderBinder downloaderBinder = mTransferServiceGetter.getFileDownloaderBinder();\r
             FileUploaderBinder uploaderBinder = mTransferServiceGetter.getFileUploaderBinder();\r
index 76cee97..7a247b3 100644 (file)
@@ -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));
         }
     }
 
index 680107b..40bf119 100644 (file)
@@ -25,6 +25,8 @@ import java.util.HashMap;
 import java.util.HashSet;\r
 import java.util.Set;\r
 \r
+import android.util.Log;\r
+\r
 import com.owncloud.android.R;\r
 \r
 /**\r
@@ -63,14 +65,28 @@ public class DisplayUtils {
     private static final String TYPE_VIDEO = "video";\r
     \r
     private static final String SUBTYPE_PDF = "pdf";\r
-    private static final String[] SUBTYPES_DOCUMENT = { "msword", "mspowerpoint", "msexcel", \r
-                                                        "vnd.oasis.opendocument.presentation",\r
-                                                        "vnd.oasis.opendocument.spreadsheet",\r
-                                                        "vnd.oasis.opendocument.text"\r
+    private static final String[] SUBTYPES_DOCUMENT = { "msword",\r
+                                                        "vnd.openxmlformats-officedocument.wordprocessingml.document",\r
+                                                        "vnd.oasis.opendocument.text",\r
+                                                        "rtf"\r
                                                         };\r
     private static Set<String> SUBTYPES_DOCUMENT_SET = new HashSet<String>(Arrays.asList(SUBTYPES_DOCUMENT));\r
+    private static final String[] SUBTYPES_SPREADSHEET = { "msexcel",\r
+                                                           "vnd.openxmlformats-officedocument.spreadsheetml.sheet",\r
+                                                           "vnd.oasis.opendocument.spreadsheet"\r
+                                                           };\r
+    private static Set<String> SUBTYPES_SPREADSHEET_SET = new HashSet<String>(Arrays.asList(SUBTYPES_SPREADSHEET));\r
+    private static final String[] SUBTYPES_PRESENTATION = { "mspowerpoint",\r
+                                                            "vnd.openxmlformats-officedocument.presentationml.presentation",\r
+                                                            "vnd.oasis.opendocument.presentation"\r
+                                                            };\r
+    private static Set<String> SUBTYPES_PRESENTATION_SET = new HashSet<String>(Arrays.asList(SUBTYPES_PRESENTATION));\r
     private static final String[] SUBTYPES_COMPRESSED = {"x-tar", "x-gzip", "zip"};\r
     private static final Set<String> SUBTYPES_COMPRESSED_SET = new HashSet<String>(Arrays.asList(SUBTYPES_COMPRESSED));\r
+    private static final String SUBTYPE_OCTET_STREAM = "octet-stream";\r
+    private static final String EXTENSION_RAR = "rar";\r
+    private static final String EXTENSION_RTF = "rtf";\r
+    private static final String EXTENSION_3GP = "3gp";\r
     \r
     /**\r
      * Converts the file size in bytes to human readable output.\r
@@ -137,7 +153,7 @@ public class DisplayUtils {
      * @param mimetype      MIME type string.\r
      * @return              Resource identifier of an image resource.\r
      */\r
-    public static int getResourceId(String mimetype) {\r
+    public static int getResourceId(String mimetype, String filename) {\r
 \r
         if (mimetype == null || "DIR".equals(mimetype)) {\r
             return R.drawable.ic_menu_archive;\r
@@ -167,12 +183,28 @@ public class DisplayUtils {
                 } else if (SUBTYPES_DOCUMENT_SET.contains(subtype)) {\r
                     return R.drawable.file_doc;\r
 \r
+                } else if (SUBTYPES_SPREADSHEET_SET.contains(subtype)) {\r
+                    return R.drawable.file_xls;\r
+\r
+                } else if (SUBTYPES_PRESENTATION_SET.contains(subtype)) {\r
+                    return R.drawable.file_ppt;\r
+\r
                 } else if (SUBTYPES_COMPRESSED_SET.contains(subtype)) {\r
                     return R.drawable.file_zip;\r
-                }\r
-    \r
+                    \r
+                } else if (SUBTYPE_OCTET_STREAM.equals(subtype) ) {\r
+                    if (getExtension(filename).equalsIgnoreCase(EXTENSION_RAR)) {\r
+                        return R.drawable.file_zip;\r
+                        \r
+                    } else if (getExtension(filename).equalsIgnoreCase(EXTENSION_RTF)) {\r
+                        return R.drawable.file_doc;\r
+                        \r
+                    } else if (getExtension(filename).equalsIgnoreCase(EXTENSION_3GP)) {\r
+                        return R.drawable.file_movie;\r
+                        \r
+                    } \r
+                } \r
             }\r
-            // problems: RAR, RTF, 3GP are send as application/octet-stream from the server ; extension in the filename should be explicitly reviewed\r
         }\r
 \r
         // default icon\r
@@ -180,7 +212,12 @@ public class DisplayUtils {
     }\r
 \r
     \r
-\r
+    private static String getExtension(String filename) {\r
+        String extension = filename.substring(filename.lastIndexOf(".") + 1);\r
+        \r
+        return extension;\r
+    }\r
+    \r
     /**\r
      * Converts Unix time to human readable format\r
      * @param miliseconds that have passed since 01/01/1970\r
diff --git a/src/com/owncloud/android/utils/ErrorMessageAdapter.java b/src/com/owncloud/android/utils/ErrorMessageAdapter.java
new file mode 100644 (file)
index 0000000..c5bda8c
--- /dev/null
@@ -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 <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+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;
+    }
+}