فهرست منبع

Merged with owncloud develop

Sam 10 سال پیش
والد
کامیت
382191d1f9
88فایلهای تغییر یافته به همراه704 افزوده شده و 291 حذف شده
  1. 1 1
      .gitignore
  2. 2 2
      .gitmodules
  3. 3 1
      SETUP.md
  4. 1 1
      owncloud-android-library
  5. 18 0
      res/layout/list_footer.xml
  6. 7 5
      res/layout/list_fragment.xml
  7. 5 4
      res/layout/video_layout.xml
  8. 0 11
      res/menu/file_select_all.xml
  9. 2 0
      res/values-af-rZA/strings.xml
  10. 1 0
      res/values-ar/strings.xml
  11. 1 0
      res/values-be/strings.xml
  12. 1 0
      res/values-bg-rBG/strings.xml
  13. 1 0
      res/values-bn-rBD/strings.xml
  14. 1 0
      res/values-ca/strings.xml
  15. 3 2
      res/values-cs-rCZ/strings.xml
  16. 1 0
      res/values-cy-rGB/strings.xml
  17. 1 0
      res/values-da/strings.xml
  18. 20 19
      res/values-de-rDE/strings.xml
  19. 1 0
      res/values-de/strings.xml
  20. 1 0
      res/values-el/strings.xml
  21. 1 0
      res/values-en-rGB/strings.xml
  22. 1 0
      res/values-eo/strings.xml
  23. 1 0
      res/values-es-rAR/strings.xml
  24. 1 0
      res/values-es-rCL/strings.xml
  25. 1 0
      res/values-es-rMX/strings.xml
  26. 1 0
      res/values-es/strings.xml
  27. 3 0
      res/values-et-rEE/strings.xml
  28. 1 0
      res/values-eu/strings.xml
  29. 1 0
      res/values-fa/strings.xml
  30. 1 0
      res/values-fi-rFI/strings.xml
  31. 43 42
      res/values-fr/strings.xml
  32. 1 0
      res/values-gl/strings.xml
  33. 1 0
      res/values-he/strings.xml
  34. 1 0
      res/values-hr/strings.xml
  35. 1 0
      res/values-hu-rHU/strings.xml
  36. 1 0
      res/values-ia/strings.xml
  37. 1 0
      res/values-id/strings.xml
  38. 1 0
      res/values-is/strings.xml
  39. 4 3
      res/values-it/strings.xml
  40. 1 0
      res/values-ja-rJP/strings.xml
  41. 1 0
      res/values-ka-rGE/strings.xml
  42. 1 0
      res/values-km/strings.xml
  43. 1 0
      res/values-ko/strings.xml
  44. 1 0
      res/values-lb/strings.xml
  45. 1 0
      res/values-lt-rLT/strings.xml
  46. 1 0
      res/values-lv/strings.xml
  47. 1 0
      res/values-mk/strings.xml
  48. 1 0
      res/values-my/strings.xml
  49. 1 0
      res/values-nb-rNO/strings.xml
  50. 1 0
      res/values-nl/strings.xml
  51. 1 0
      res/values-nn-rNO/strings.xml
  52. 1 0
      res/values-oc/strings.xml
  53. 1 0
      res/values-pa/strings.xml
  54. 1 0
      res/values-pl/strings.xml
  55. 1 0
      res/values-pt-rBR/strings.xml
  56. 31 30
      res/values-pt-rPT/strings.xml
  57. 1 0
      res/values-ro/strings.xml
  58. 1 0
      res/values-ru/strings.xml
  59. 1 0
      res/values-si-rLK/strings.xml
  60. 26 0
      res/values-sk-rSK/strings.xml
  61. 1 0
      res/values-sl/strings.xml
  62. 2 0
      res/values-sq/strings.xml
  63. 1 0
      res/values-sr-rSP/strings.xml
  64. 1 0
      res/values-sr/strings.xml
  65. 1 0
      res/values-sv/strings.xml
  66. 1 0
      res/values-ta-rLK/strings.xml
  67. 1 0
      res/values-te/strings.xml
  68. 1 0
      res/values-th-rTH/strings.xml
  69. 1 0
      res/values-tr/strings.xml
  70. 1 0
      res/values-uk/strings.xml
  71. 1 0
      res/values-ur-rPK/strings.xml
  72. 1 0
      res/values-vi/strings.xml
  73. 1 0
      res/values-zh-rCN/strings.xml
  74. 1 0
      res/values-zh-rHK/strings.xml
  75. 9 0
      res/values-zh-rTW/strings.xml
  76. 5 0
      res/values/strings.xml
  77. 36 12
      src/com/owncloud/android/files/services/FileUploader.java
  78. 73 47
      src/com/owncloud/android/operations/UploadFileOperation.java
  79. 106 15
      src/com/owncloud/android/ui/activity/FileDisplayActivity.java
  80. 4 40
      src/com/owncloud/android/ui/activity/UploadFilesActivity.java
  81. 1 1
      src/com/owncloud/android/ui/activity/Uploader.java
  82. 10 7
      src/com/owncloud/android/ui/adapter/FileListListAdapter.java
  83. 23 19
      src/com/owncloud/android/ui/fragment/ExtendedListFragment.java
  84. 1 21
      src/com/owncloud/android/ui/fragment/LocalFileListFragment.java
  85. 57 6
      src/com/owncloud/android/ui/fragment/OCFileListFragment.java
  86. 46 0
      src/com/owncloud/android/utils/DisplayUtils.java
  87. 103 0
      src/com/owncloud/android/utils/UriUtils.java
  88. 2 2
      tests/.classpath

+ 1 - 1
.gitignore

@@ -39,4 +39,4 @@ tests/proguard-project.txt
 build
 
 # Actionbarsherlock is now ignored since scripts takes care of init the sub-modules.
-actionbarsherlock
+actionbarsherlock

+ 2 - 2
.gitmodules

@@ -1,5 +1,5 @@
 
 [submodule "owncloud-android-library"]
 	path = owncloud-android-library
-	url = git://github.com/owncloudChalmers/android-library.git
-	branch = buildsystem/gradle_develop
+	url = git://github.com/owncloud/android-library.git
+	branch = develop

+ 3 - 1
SETUP.md

@@ -1,5 +1,7 @@
 
-If you want to start help developing ownCloud please follow the [contribution guidelines][0] and observe these instructions:
+If you want to start help developing ownCloud please follow the [contribution guidelines][0] and observe these instructions.
+
+If you have any problems, start again with 1) and work your way down. If something still does not work as described here, please open a new issue describing exactly what you did, what happened, and what should have happened.
 
 ### 1. Fork and download android/develop repository:
 

+ 1 - 1
owncloud-android-library

@@ -1 +1 @@
-Subproject commit d7097983594347167b5bde3fa5b2b4ad1d843392
+Subproject commit 7ff0bc0d837edea90b075140f8caba308ce7d378

+ 18 - 0
res/layout/list_footer.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="wrap_content"
+    android:layout_height="56dp"
+    android:layout_gravity="center_horizontal"
+    android:gravity="center_horizontal"
+    android:orientation="vertical"
+    android:showDividers="none" >
+
+    <TextView
+        android:id="@+id/footerText"
+        android:layout_width="match_parent"
+        android:layout_height="56dp"
+        android:layout_gravity="center"
+        android:gravity="center"
+        android:textColor="@color/setup_text_hint" />
+
+</LinearLayout> 

+ 7 - 5
res/layout/list_fragment.xml

@@ -25,16 +25,18 @@
     <android.support.v4.widget.SwipeRefreshLayout
         android:id="@+id/swipe_refresh_files"
         android:layout_width="match_parent"
-        android:layout_height="match_parent" >
-
+        android:layout_height="match_parent" 
+        android:layout_weight="1"
+        android:footerDividersEnabled="false" > 
+        
         <com.owncloud.android.ui.ExtendedListView
             android:id="@+id/list_root"
             android:layout_width="match_parent"
             android:layout_height="match_parent" />
-        
+            
     </android.support.v4.widget.SwipeRefreshLayout>
-
-    <android.support.v4.widget.SwipeRefreshLayout
+    	
+    	<android.support.v4.widget.SwipeRefreshLayout
         android:id="@+id/swipe_refresh_files_emptyView"
         android:layout_width="match_parent"
         android:layout_height="match_parent"

+ 5 - 4
res/layout/video_layout.xml

@@ -3,9 +3,10 @@
 				android:layout_width="match_parent"
 				android:layout_height="match_parent" >
 
-	<VideoView  android:id="@+id/videoPlayer"
-				android:layout_width="wrap_content"
-				android:layout_height="wrap_content"  
-				android:layout_gravity="center" />
+	<VideoView
+	    android:id="@+id/videoPlayer"
+	    android:layout_width="match_parent"
+	    android:layout_height="match_parent"
+	    android:layout_gravity="center" />
 	
 </FrameLayout>

+ 0 - 11
res/menu/file_select_all.xml

@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<menu xmlns:android="http://schemas.android.com/apk/res/android" >
-    <item
-        android:id="@+id/actionbar_select_all"
-        android:icon="@android:drawable/checkbox_off_background"
-        android:orderInCategory="1"
-        android:showAsAction="always"
-        android:title="actionbar_select_all"/>
-    
-
-</menu>

+ 2 - 0
res/values-af-rZA/strings.xml

@@ -6,8 +6,10 @@
   <string name="prefs_help">Hulp</string>
   <string name="auth_username">Gebruikersnaam</string>
   <string name="auth_password">Wagwoord</string>
+  <string name="file_list_seconds_ago">sekondes gelede</string>
   <string name="common_ok">OK</string>
   <string name="common_cancel">Kanseleer</string>
+  <string name="common_error">Fout</string>
   <string name="empty"></string>
   <string name="move_choose_button_text">Kies</string>
 </resources>

+ 1 - 0
res/values-ar/strings.xml

@@ -50,6 +50,7 @@
   <string name="uploader_wrn_no_content_text">لم يتم استلام أي محتوى. لا شيء للرفع.</string>
   <string name="uploader_error_forbidden_content">%1$s  غير مسموح له بالوصول للمحتوى المشارك</string>
   <string name="uploader_info_uploading">يتم الرفع</string>
+  <string name="file_list_seconds_ago">منذ ثواني</string>
   <string name="file_list_empty">لا يوجد شيء هنا. إرفع بعض الملفات!</string>
   <string name="file_list_loading">جاري التحميل ...</string>
   <string name="filedetails_select_file">اضغظ على الملف ليتم عرض خيارات أكثر</string>

+ 1 - 0
res/values-be/strings.xml

@@ -3,6 +3,7 @@
   <string name="actionbar_settings">Налады</string>
   <!--TODO re-enable when server-side folder size calculation is available   
     	<item>Biggest - Smallest</item>-->
+  <string name="file_list_seconds_ago">Секунд таму</string>
   <string name="common_yes">Так</string>
   <string name="common_no">Не</string>
   <string name="common_ok">Добра</string>

+ 1 - 0
res/values-bg-rBG/strings.xml

@@ -59,6 +59,7 @@
   <string name="uploader_wrn_no_content_text">Не беше получено съдържание. Няма какво да се качи.</string>
   <string name="uploader_error_forbidden_content">%1$s няма разрешен достъп до споделеното съдържание.</string>
   <string name="uploader_info_uploading">Качване</string>
+  <string name="file_list_seconds_ago">преди секунди</string>
   <string name="file_list_empty">Тук няма нищо. Качете нещо!</string>
   <string name="file_list_loading">Зареждане...</string>
   <string name="local_file_list_empty">Няма файлове в тази папка.</string>

+ 1 - 0
res/values-bn-rBD/strings.xml

@@ -50,6 +50,7 @@
   <string name="uploader_wrn_no_content_text">কোন কনটেনট আসেনি৷ আপলোডের কনটেনট নেই</string>
   <string name="uploader_error_forbidden_content">এই যৌথ কনটেন্ট এ %1$s এর প্রবেশ অনুমোদিত নয়</string>
   <string name="uploader_info_uploading">আপলোড করা হচ্ছে</string>
+  <string name="file_list_seconds_ago">সেকেন্ড পূর্বে</string>
   <string name="file_list_empty">এখানে কিছুই নেই। কিছু আপলোড করুন !</string>
   <string name="file_list_loading">লোড হচ্ছে....</string>
   <string name="local_file_list_empty">এই ফোলডারে কোন ফাইল নেই</string>

+ 1 - 0
res/values-ca/strings.xml

@@ -50,6 +50,7 @@
   <string name="uploader_wrn_no_content_text">No s\'ha rebut cap contingut. Res per pujar</string>
   <string name="uploader_error_forbidden_content">%1$s no pot accedir al contingut compartit</string>
   <string name="uploader_info_uploading">S\'està pujant</string>
+  <string name="file_list_seconds_ago">segons enrere</string>
   <string name="file_list_empty">Res per aquí. Pugeu alguna cosa!</string>
   <string name="file_list_loading">Carregant...</string>
   <string name="local_file_list_empty">No hi ha arxius a aquesta carpeta</string>

+ 3 - 2
res/values-cs-rCZ/strings.xml

@@ -59,6 +59,7 @@
   <string name="uploader_wrn_no_content_text">Neobdržen žádný obsah. Nic k odeslání.</string>
   <string name="uploader_error_forbidden_content">%1$s nemá právo přistupovat ke sdílenému obsahu</string>
   <string name="uploader_info_uploading">Odesílání</string>
+  <string name="file_list_seconds_ago">před pár sekundami</string>
   <string name="file_list_empty">Žádný obsah. Nahrajte něco!</string>
   <string name="file_list_loading">Načítám...</string>
   <string name="local_file_list_empty">V tomto adresáři nejsou žádné soubory.</string>
@@ -179,7 +180,7 @@
   <string name="auth_connecting_auth_server">Připojuji se k přihlašovacímu serveru...</string>
   <string name="auth_unsupported_auth_method">Server nepodporuje tuto přihlašovací metodu</string>
   <string name="auth_unsupported_multiaccount">%1$s nepodporuje více účtů</string>
-  <string name="auth_fail_get_user_name">Váš server nevrací správné přihlašovací ID, kontaktujte vašeho administrátora</string>
+  <string name="auth_fail_get_user_name">Váš server nevrací správné přihlašovací ID, kontaktujte prosím svého správce systému</string>
   <string name="auth_can_not_auth_against_server">Není možné provést ověření  </string>
   <string name="fd_keep_in_sync">Udržovat soubor aktuální</string>
   <string name="common_rename">Přejmenovat</string>
@@ -249,7 +250,7 @@
   <string name="error__upload__local_file_not_copied">%1$s nelze zkopírovat do místního adresáře %2$s</string>
   <string name="prefs_instant_upload_path_title">Cesta pro nahrání</string>
   <string name="share_link_no_support_share_api">Je nám líto, ale sdílení není na vašem serveru povoleno. Kontaktujte svého
-administrátora.</string>
+správce systému.</string>
   <string name="share_link_file_no_exist">Nelze sdílet. Zkontrolujte prosím že soubor existuje</string>
   <string name="share_link_file_error">Při pokusu o sdílení tohoto souboru či složky nastala chyba</string>
   <string name="unshare_link_file_no_exist">Nelze ukončit sdílení. Zkontrolujte prosím že soubor existuje</string>

+ 1 - 0
res/values-cy-rGB/strings.xml

@@ -27,6 +27,7 @@
   <string name="uploader_wrn_no_content_text">Heb dderbyn cynnwys. Dim cynnwys i lwytho i fyny</string>
   <string name="uploader_error_forbidden_content">Does dim mynediad gan %1$s i gynnwys a rennir</string>
   <string name="uploader_info_uploading">Yn llwytho i fyny</string>
+  <string name="file_list_seconds_ago">eiliad yn ôl</string>
   <string name="file_list_empty">Does dim byd fan hyn. Llwythwch rhywbeth i fyny!</string>
   <string name="filedetails_select_file">Tapiwch ffeil i ddangos gwybodaeth ychwanegol</string>
   <string name="filedetails_size">Maint:</string>

+ 1 - 0
res/values-da/strings.xml

@@ -59,6 +59,7 @@
   <string name="uploader_wrn_no_content_text">Intet indhold blev modtaget. Intet at uploade.</string>
   <string name="uploader_error_forbidden_content">%1$s er ikke tilladt adgang til delt indhold</string>
   <string name="uploader_info_uploading">Uploader</string>
+  <string name="file_list_seconds_ago">sekunder siden</string>
   <string name="file_list_empty">Her er tomt. Upload noget!</string>
   <string name="file_list_loading">Indlæser...</string>
   <string name="local_file_list_empty">Der er ingen filer i denne mappe.</string>

+ 20 - 19
res/values-de-rDE/strings.xml

@@ -25,23 +25,23 @@
   <string name="prefs_manage_accounts">Konten verwalten</string>
   <string name="prefs_pincode">App-PIN</string>
   <string name="prefs_pincode_summary">Schützen Sie Ihren Client</string>
-  <string name="prefs_instant_upload">Sofortiges Bilderhochladen</string>
+  <string name="prefs_instant_upload">Sofortiger Bilderupload</string>
   <string name="prefs_instant_upload_summary">Fotos von der Kamera sofort hochladen</string>
-  <string name="prefs_instant_video_upload">Sofortiges Videohochladen</string>
+  <string name="prefs_instant_video_upload">Sofortiger Videoupload</string>
   <string name="prefs_instant_video_upload_summary">Videos von der Kamera sofort hochladen</string>
   <string name="prefs_log_title">Protokollierung aktivieren</string>
-  <string name="prefs_log_summary">Dieses wird zur Protokollierung von Problemen benutzt</string>
-  <string name="prefs_log_title_history">Protokollierungsverlauf</string>
-  <string name="prefs_log_summary_history">Dieses zeigt die gespeicherten Protokollierungen</string>
+  <string name="prefs_log_summary">Dies wird zur Protokollierung von Problemen benutzt</string>
+  <string name="prefs_log_title_history">Protokollverlauf</string>
+  <string name="prefs_log_summary_history">Dies zeigt die gespeicherten Protokolle</string>
   <string name="prefs_log_delete_history_button">Verlauf löschen</string>
   <string name="prefs_help">Hilfe</string>
-  <string name="prefs_recommend">Dieses einem Freund empfehlen</string>
+  <string name="prefs_recommend">Dies einem Freund empfehlen</string>
   <string name="prefs_feedback">Rückmeldungen</string>
   <string name="prefs_imprint">Impressum</string>
   <string name="prefs_remember_last_share_location">Geteilten Speicherort merken</string>
   <string name="prefs_remember_last_upload_location_summary">Geteilten Upload-Speicherort merken</string>
   <string name="recommend_subject">%1$s auf Ihrem Smartphone ausprobieren!</string>
-  <string name="recommend_text">Ich möchte Sie zum Benutzen von %1$s auf Ihrem Smartphone einladen!\nHier herunterladen: %2$s</string>
+  <string name="recommend_text">Ich möchte Sie einladen, %1$s auf Ihrem Smartphone zu verwenden!\nHier herunterladen: %2$s</string>
   <string name="auth_check_server">Server überprüfen</string>
   <string name="auth_host_url">Server-Adresse https://…</string>
   <string name="auth_username">Benutzername</string>
@@ -50,7 +50,7 @@
   <string name="sync_string_files">Dateien</string>
   <string name="setup_btn_connect">Verbinden</string>
   <string name="uploader_btn_upload_text">Hochladen</string>
-  <string name="uploader_top_message">Zielordner auswählen:</string>
+  <string name="uploader_top_message">Uploadordner auswählen:</string>
   <string name="uploader_wrn_no_account_title">Kein Konto gefunden</string>
   <string name="uploader_wrn_no_account_text">Es sind keine %1$s-Konten auf Ihrem Gerät eingerichtet. Bitte richten Sie zuerst ein Konto ein.</string>
   <string name="uploader_wrn_no_account_setup_btn_text">Einrichten</string>
@@ -59,6 +59,7 @@
   <string name="uploader_wrn_no_content_text">Es wurden keine Inhalte empfangen. Es gibt nichts zum Hochladen.</string>
   <string name="uploader_error_forbidden_content">%1$s darf den freigegebenen Inhalt nicht nutzen.</string>
   <string name="uploader_info_uploading">Lade hoch</string>
+  <string name="file_list_seconds_ago">Gerade eben</string>
   <string name="file_list_empty">Alles leer. Laden Sie etwas hoch!</string>
   <string name="file_list_loading">Ladevorgang …</string>
   <string name="local_file_list_empty">Es befinden sich keine Dateien in diesem Ordner.</string>
@@ -94,7 +95,7 @@
   <string name="uploader_upload_succeeded_content_single">%1$s wurde(n) erfolgreich hochgeladen</string>
   <string name="uploader_upload_failed_ticker">Hochladen fehlgeschlagen</string>
   <string name="uploader_upload_failed_content_single">Hochladen von  %1$s konnte nicht abgeschlossen werden</string>
-  <string name="uploader_upload_failed_credentials_error">Hochladen fehlgeschlagen, Sie müssen sich nochmals anmelden</string>
+  <string name="uploader_upload_failed_credentials_error">Hochladen fehlgeschlagen, Sie müssen sich neu anmelden</string>
   <string name="downloader_download_in_progress_ticker">Herunterladen...</string>
   <string name="downloader_download_in_progress_content">%1$d%% Herunterladen %2$s</string>
   <string name="downloader_download_succeeded_ticker">Herunterladen erfolgreich</string>
@@ -102,7 +103,7 @@
   <string name="downloader_download_failed_ticker">Herunterladen fehlgeschlagen</string>
   <string name="downloader_download_failed_content">Herunterladen von %1$s konnte nicht abgeschlossen werden</string>
   <string name="downloader_not_downloaded_yet">Noch nicht heruntergeladen</string>
-  <string name="downloader_download_failed_credentials_error">Herunterladen fehlgeschlagen, Sie müssen sich nochmals anmelden</string>
+  <string name="downloader_download_failed_credentials_error">Herunterladen fehlgeschlagen, Sie müssen sich neu anmelden</string>
   <string name="common_choose_account">Konto auswählen</string>
   <string name="sync_fail_ticker">Synchronisation fehlgeschlagen</string>
   <string name="sync_fail_ticker_unauthorized">Synchronisation fehlgeschlagen, Sie müssen sich neu anmelden</string>
@@ -121,7 +122,7 @@
   <string name="foreign_files_fail">Einige Dateien konnten nicht verschoben werden</string>
   <string name="foreign_files_local_text">Lokal: %1$s</string>
   <string name="foreign_files_remote_text">Remote: %1$s</string>
-  <string name="upload_query_move_foreign_files">Es steht nicht genügend Speicherplatz zur Verfügung um die ausgewählten Dateien in den %1$s Ordner zu kopieren. Möchten Sie diese stattdessen verschieben?</string>
+  <string name="upload_query_move_foreign_files">Es steht nicht genügend Speicherplatz zur Verfügung um die ausgewählten Dateien in den Ordner %1$s zu kopieren. Möchten Sie diese stattdessen verschieben?</string>
   <string name="pincode_enter_pin_code">Bitte geben Sie Ihre App-PIN ein</string>
   <string name="pincode_configure_your_pin">Bitte geben Sie Ihre App-PIN ein</string>
   <string name="pincode_configure_your_pin_explanation">PIN-Abfrage erfolgt nach Starten der App.</string>
@@ -176,9 +177,9 @@
   <string name="auth_expired_oauth_token_toast">Ihre Legitimierung ist abgelaufen. Bitte Legitimierung nochmals durchführen</string>
   <string name="auth_expired_basic_auth_toast">Bitte geben Sie Ihr aktuelles Passwort ein</string>
   <string name="auth_expired_saml_sso_token_toast">Ihre Sitzung ist abgelaufen. Bitte Anmeldung nochmals durchführen</string>
-  <string name="auth_connecting_auth_server">Zum Legitimierungsserver wird verbunden …</string>
+  <string name="auth_connecting_auth_server">Zum Legitimierungsserver verbinden…</string>
   <string name="auth_unsupported_auth_method">Der Server unterstützt diese Legitimierungsmethode nicht</string>
-  <string name="auth_unsupported_multiaccount">%1$s unterstützt nicht mehrere Benutzerkonten</string>
+  <string name="auth_unsupported_multiaccount">%1$s unterstützt mehrere Benutzerkonten nicht</string>
   <string name="auth_fail_get_user_name">Ihr Server gibt keine richtige Benutzerkennung zurück, bitte kontaktieren Sie einen Administrator
 ⇥</string>
   <string name="auth_can_not_auth_against_server">Die Legitimierung gegenüber dem Server konnte nicht durchgeführt werden</string>
@@ -248,20 +249,20 @@
   <string name="preview_image_description">Bildvorschau</string>
   <string name="preview_image_error_unknown_format">Dieses Bild kann nicht angezeigt werden</string>
   <string name="error__upload__local_file_not_copied">%1$s konnte nicht in den lokalen %2$s Ordner kopiert werden</string>
-  <string name="prefs_instant_upload_path_title">Pfad hochladen</string>
+  <string name="prefs_instant_upload_path_title">Upload Pfad</string>
   <string name="share_link_no_support_share_api">Entschuldigung, Freigaben sind auf Ihrem Server nicht aktiviert. Bitte kontaktieren Sie Ihren
 ⇥⇥Administrator.</string>
-  <string name="share_link_file_no_exist">Teilen nicht möglich. Prüfen Sie, dass die Datei existiert</string>
+  <string name="share_link_file_no_exist">Teilen nicht möglich. Prüfen Sie, ob die Datei existiert</string>
   <string name="share_link_file_error">Es ist ein Fehler beim Freigeben der Datei oder des Ordners aufgetreten.</string>
-  <string name="unshare_link_file_no_exist">Entfernen der Freigabe nicht möglich. Prüfen Sie, dass die Datei existiert</string>
+  <string name="unshare_link_file_no_exist">Entfernen der Freigabe nicht möglich. Prüfen Sie, ob die Datei existiert</string>
   <string name="unshare_link_file_error">Es ist ein Fehler beim Entfernen der Freigabe für diese Datei oder den Ordner aufgetreten.</string>
   <string name="activity_chooser_send_file_title">Senden</string>
   <string name="copy_link">Link kopieren</string>
   <string name="clipboard_text_copied">In die Zwischenablage kopiert</string>
   <string name="error_cant_bind_to_operations_service">Kritischer Fehler: Operationen können nicht ausgeführt werden</string>
-  <string name="network_error_socket_exception">Es ist ein Fehler beim Verbinden mit dem Server aufgetreten.</string>
-  <string name="network_error_socket_timeout_exception">Es ist ein Fehler beim Warten auf den Server aufgetreten, die Operation kann nicht ausgeführt werden</string>
-  <string name="network_error_connect_timeout_exception">Es ist ein Fehler beim Warten auf den Server aufgetreten, die Operation kann nicht ausgeführt werden</string>
+  <string name="network_error_socket_exception">Es ist ein Fehler bei der Verbindung mit dem Server aufgetreten.</string>
+  <string name="network_error_socket_timeout_exception">Es ist ein Fehler während des Wartens auf den Server aufgetreten, die Operation kann nicht ausgeführt werden</string>
+  <string name="network_error_connect_timeout_exception">Es ist ein Fehler während des Wartens auf den Server aufgetreten, die Operation kann nicht ausgeführt werden</string>
   <string name="network_host_not_available">Die Operation kann nicht abgeschlossen werden, der Server ist nicht erreichbar</string>
   <string name="empty"></string>
   <string name="forbidden_permissions">Sie haben keine Berechtigung %s</string>

+ 1 - 0
res/values-de/strings.xml

@@ -59,6 +59,7 @@
   <string name="uploader_wrn_no_content_text">Es wurden keine Inhalte empfangen. Es gibt nichts zum Hochladen.</string>
   <string name="uploader_error_forbidden_content">%1$s darf den freigegebenen Inhalt nicht nutzen.</string>
   <string name="uploader_info_uploading">Lade hoch</string>
+  <string name="file_list_seconds_ago">Gerade eben</string>
   <string name="file_list_empty">Alles leer. Lade etwas hoch!</string>
   <string name="file_list_loading">Ladevorgang …</string>
   <string name="local_file_list_empty">Es befinden sich keine Dateien in diesem Ordner.</string>

+ 1 - 0
res/values-el/strings.xml

@@ -55,6 +55,7 @@
   <string name="uploader_wrn_no_content_text">Δεν ελήφθη περιεχόμενο. Δεν υπάρχει τίποτα να μεταφορτώσετε.</string>
   <string name="uploader_error_forbidden_content">Ο %1$s δεν επιτρέπεται να έχει πρόσβαση στο κοινόχρηστο περιεχόμενο</string>
   <string name="uploader_info_uploading">Μεταφόρτωση</string>
+  <string name="file_list_seconds_ago">δευτερόλεπτα πριν</string>
   <string name="file_list_empty">Δεν υπάρχει τίποτα εδώ. Ανεβάστε κάτι!</string>
   <string name="file_list_loading">Φόρτωση ...</string>
   <string name="local_file_list_empty">Δεν υπάρχουν αρχεία σε αυτό τον φάκελο.</string>

+ 1 - 0
res/values-en-rGB/strings.xml

@@ -59,6 +59,7 @@
   <string name="uploader_wrn_no_content_text">No content was received. Nothing to upload.</string>
   <string name="uploader_error_forbidden_content">%1$s is not allowed to access the shared content</string>
   <string name="uploader_info_uploading">Uploading</string>
+  <string name="file_list_seconds_ago">seconds ago</string>
   <string name="file_list_empty">Nothing in here. Upload something!</string>
   <string name="file_list_loading">Loading...</string>
   <string name="local_file_list_empty">There are no files in this folder.</string>

+ 1 - 0
res/values-eo/strings.xml

@@ -36,6 +36,7 @@
   <string name="uploader_wrn_no_content_text">Neniu enhavo riceviĝis. Nenio alŝutota.</string>
   <string name="uploader_error_forbidden_content">$1%s ne estas permesata aliri la kunhavigitan enhavon</string>
   <string name="uploader_info_uploading">Alŝutante</string>
+  <string name="file_list_seconds_ago">sekundoj antaŭe</string>
   <string name="file_list_empty">Nenio estas ĉi tie. Alŝutu ion!</string>
   <string name="filedetails_size">Grando:</string>
   <string name="filedetails_type">Tipo:</string>

+ 1 - 0
res/values-es-rAR/strings.xml

@@ -50,6 +50,7 @@
   <string name="uploader_wrn_no_content_text">No se recibió ningún contenido. No hay nada para subir.</string>
   <string name="uploader_error_forbidden_content">%1$s no está autorizado para acceder al contenido compartido</string>
   <string name="uploader_info_uploading">Subiendo</string>
+  <string name="file_list_seconds_ago">segundos atrás</string>
   <string name="file_list_empty">No hay nada. ¡Subí contenido!</string>
   <string name="file_list_loading">Cargando...</string>
   <string name="local_file_list_empty">No existen archivos en esta carpeta.</string>

+ 1 - 0
res/values-es-rCL/strings.xml

@@ -33,6 +33,7 @@
   <string name="uploader_wrn_no_content_text">No se ha recibido ningún contenido. No hay nada para subir.</string>
   <string name="uploader_error_forbidden_content">%1$s no esta autorizado para acceder al contenido compartido</string>
   <string name="uploader_info_uploading">Subiendo</string>
+  <string name="file_list_seconds_ago">segundos antes</string>
   <string name="filedetails_select_file">Seleccione un archivo para desplegar información adicional.</string>
   <string name="filedetails_size">Tamaño:</string>
   <string name="filedetails_type">Tipo:</string>

+ 1 - 0
res/values-es-rMX/strings.xml

@@ -45,6 +45,7 @@
   <string name="uploader_wrn_no_content_text">Ningún contenido ha sido recibido. No hay nada que subir.</string>
   <string name="uploader_error_forbidden_content">%1$s no está autorizado para acceder al contenido compartido</string>
   <string name="uploader_info_uploading">Enviando</string>
+  <string name="file_list_seconds_ago">hace segundos</string>
   <string name="file_list_empty">No hay nada aquí. ¡Suba algo!</string>
   <string name="filedetails_select_file">Pulsa sobre un archivo para mostrar información adicional.</string>
   <string name="filedetails_size">Tamaño:</string>

+ 1 - 0
res/values-es/strings.xml

@@ -59,6 +59,7 @@
   <string name="uploader_wrn_no_content_text">Ningún contenido ha sido recibido. No hay nada que subir.</string>
   <string name="uploader_error_forbidden_content">%1$s no está autorizado para acceder al contenido compartido</string>
   <string name="uploader_info_uploading">Subiendo...</string>
+  <string name="file_list_seconds_ago">hace segundos</string>
   <string name="file_list_empty">No hay nada aquí. ¡Suba algo!</string>
   <string name="file_list_loading">Cargando...</string>
   <string name="local_file_list_empty">No hay archivos en esta carpeta.</string>

+ 3 - 0
res/values-et-rEE/strings.xml

@@ -38,6 +38,8 @@
   <string name="prefs_recommend">Soovita sõbrale</string>
   <string name="prefs_feedback">Tagasiside</string>
   <string name="prefs_imprint">Impressum</string>
+  <string name="prefs_remember_last_share_location">Jäta meelde jagamise asukoht</string>
+  <string name="prefs_remember_last_upload_location_summary">Jäta meelde viimase jagamise üleslaadimise asukoht</string>
   <string name="recommend_subject">Proovi oma nutitelefonil rakendust %1$s!</string>
   <string name="recommend_text">Kutsun sind kasutama oma nutitelefonis rakendust %1$s!\nLaadi see alla siit: %2$s</string>
   <string name="auth_check_server">Kontrolli serverit</string>
@@ -57,6 +59,7 @@
   <string name="uploader_wrn_no_content_text">Sisu ei saadud. Pole midagi üles laadida.</string>
   <string name="uploader_error_forbidden_content">%1$sile pole lubatud ligipääs jagatud sisule</string>
   <string name="uploader_info_uploading">Üleslaadimine</string>
+  <string name="file_list_seconds_ago">sekundit tagasi</string>
   <string name="file_list_empty">Siin pole midagi. Lae midagi üles!</string>
   <string name="file_list_loading">Laen ...</string>
   <string name="local_file_list_empty">Kaustas pole faile.</string>

+ 1 - 0
res/values-eu/strings.xml

@@ -55,6 +55,7 @@
   <string name="uploader_wrn_no_content_text">Ez da edukirik jaso. Ez dago ezer igotzeko.</string>
   <string name="uploader_error_forbidden_content">%1$s-(e)k ez du baimenik elkarbanatutako edukian sartzeko</string>
   <string name="uploader_info_uploading">Igotzen</string>
+  <string name="file_list_seconds_ago">segundu</string>
   <string name="file_list_empty">Ez dago ezer. Igo zerbait!</string>
   <string name="file_list_loading">Kargatzen...</string>
   <string name="local_file_list_empty">Ez dago fitxategirik karpeta honetan.</string>

+ 1 - 0
res/values-fa/strings.xml

@@ -46,6 +46,7 @@
   <string name="uploader_wrn_no_content_text">هیچ مطلبی دریافت نشده است. هیچ‌‌چیزی بارگزاری نشده.</string>
   <string name="uploader_error_forbidden_content">%1$s اجازه ی دسترسی به محتوای مشترک را نمی دهد</string>
   <string name="uploader_info_uploading">در حال بارگزاری</string>
+  <string name="file_list_seconds_ago">ثانیه‌ها پیش</string>
   <string name="file_list_empty">اینجا هیچ چیز نیست.</string>
   <string name="file_list_loading">درحال بارگذاری...</string>
   <string name="local_file_list_empty">هیچ فایلی در این پوشه نیست.</string>

+ 1 - 0
res/values-fi-rFI/strings.xml

@@ -58,6 +58,7 @@
   <string name="uploader_wrn_no_content_text">Sisältöä ei saatu. Ei lähetettävää palvelimelle.</string>
   <string name="uploader_error_forbidden_content">%1$silla ei ole oikeuksia jaettuun sisältöön</string>
   <string name="uploader_info_uploading">Lähetetään</string>
+  <string name="file_list_seconds_ago">sekuntia sitten</string>
   <string name="file_list_empty">Täällä ei ole mitään. Lähetä tänne jotakin!</string>
   <string name="file_list_loading">Ladataan...</string>
   <string name="local_file_list_empty">Tässä kansiossa ei ole tiedostoja</string>

+ 43 - 42
res/values-fr/strings.xml

@@ -40,14 +40,14 @@
   <string name="prefs_imprint">Empreinte</string>
   <string name="prefs_remember_last_share_location">Mémoriser l\'emplacement de partage</string>
   <string name="prefs_remember_last_upload_location_summary">Mémoriser le dernier emplacement d\'upload</string>
-  <string name="recommend_subject">Essayez %1$s sur votre smartphone !</string>
+  <string name="recommend_subject">Essayez %1$s sur votre smartphone&amp;nbsp;!</string>
   <string name="recommend_text">J\'aimerais vous inviter à utiliser %1$s sur votre smartphone !
 Téléchargez-le ici : %2$s</string>
   <string name="auth_check_server">Vérifier le serveur</string>
-  <string name="auth_host_url">Adresse du serveur https://...</string>
+  <string name="auth_host_url">Adresse du serveur https://</string>
   <string name="auth_username">Nom d\'utilisateur</string>
   <string name="auth_password">Mot de passe</string>
-  <string name="auth_register">Nouveau dans %1$s ?</string>
+  <string name="auth_register">Nouveau dans %1$s&amp;nbsp;?</string>
   <string name="sync_string_files">Fichiers</string>
   <string name="setup_btn_connect">Connecter</string>
   <string name="uploader_btn_upload_text">Téléverser</string>
@@ -60,6 +60,7 @@ Téléchargez-le ici : %2$s</string>
   <string name="uploader_wrn_no_content_text">Aucun contenu reçu. Rien à envoyer.</string>
   <string name="uploader_error_forbidden_content">%1$s n\'est pas autorisé à accéder au contenu partagé</string>
   <string name="uploader_info_uploading">Téléversement</string>
+  <string name="file_list_seconds_ago">il y a quelques secondes</string>
   <string name="file_list_empty">Il n\'y a rien ici ! Envoyez donc quelque chose :)</string>
   <string name="file_list_loading">Chargement…</string>
   <string name="local_file_list_empty">Aucun fichier n\'est présent dans ce dossier.</string>
@@ -81,8 +82,8 @@ Téléchargez-le ici : %2$s</string>
   <string name="common_cancel">Annuler</string>
   <string name="common_save_exit">Sauvegarder &amp; Quitter</string>
   <string name="common_error">Erreur</string>
-  <string name="common_loading">Chargement ...</string>
-  <string name="common_error_unknown">Erreur Inconnue </string>
+  <string name="common_loading">Chargement</string>
+  <string name="common_error_unknown">Erreur inconnue </string>
   <string name="about_title">À propos de</string>
   <string name="change_password">Changer de mot de passe</string>
   <string name="delete_account">Effacer ce compte</string>
@@ -112,7 +113,7 @@ Téléchargez-le ici : %2$s</string>
   <string name="sync_conflicts_in_favourites_ticker">Des conflits ont été trouvés</string>
   <string name="sync_conflicts_in_favourites_content">%1$d fichiers à garder synchronisés n\'ont put être synchronisé</string>
   <string name="sync_fail_in_favourites_ticker">La synchronisation des fichiers a échoué</string>
-  <string name="sync_fail_in_favourites_content">Le contenu de %1$d fichiers n\'a put être synchronisé (%2$d conflits)</string>
+  <string name="sync_fail_in_favourites_content">Le contenu de %1$d fichiers n\'a pu être synchronisé (%2$d conflits)</string>
   <string name="sync_foreign_files_forgotten_ticker">Certains fichiers locaux ont été oubliés</string>
   <string name="sync_foreign_files_forgotten_content">%1$d fichiers du dossier %2$s n\'ont pas pu être copiés dans</string>
   <string name="sync_foreign_files_forgotten_explanation">Depuis la version 1.3.16, les fichiers envoyé depuis ce périphérique sont copiés dans le dossier local %1$s pour éviter une perte de données lorsqu\'un même fichier est synchronisé avec plusieurs comptes.
@@ -124,7 +125,7 @@ Ci-dessous la liste des fichiers locaux, et les fichiers distants dans %5$s auxq
   <string name="foreign_files_move">Tout déplacer</string>
   <string name="foreign_files_success">Tous les fichiers ont été déplacés</string>
   <string name="foreign_files_fail">Certains fichiers n\'ont pu être déplacés</string>
-  <string name="foreign_files_local_text">Local: %1$s</string>
+  <string name="foreign_files_local_text">Local&amp;nbsp;: %1$s</string>
   <string name="foreign_files_remote_text">Distant : %1$s</string>
   <string name="upload_query_move_foreign_files">Il n\'y a pas assez de place disponible pour copier les fichiers sélectionnés dans le dossier %1$s. Voulez-vous quand même les déplacer ?</string>
   <string name="pincode_enter_pin_code">Veuillez saisir votre code de sécurité</string>
@@ -143,20 +144,20 @@ Ci-dessous la liste des fichiers locaux, et les fichiers distants dans %5$s auxq
   <string name="media_err_nothing_to_play">Fichier média introuvable </string>
   <string name="media_err_no_account">Aucun compte n\'a été trouvé</string>
   <string name="media_err_not_in_owncloud">Le fichier n\'est pas dans un compte valide</string>
-  <string name="media_err_unsupported">Le codec de ce média n\'est pas supporté </string>
+  <string name="media_err_unsupported">Le codec de ce média n\'est pas pris en charge </string>
   <string name="media_err_io">Le fichier média ne peut pas être lu</string>
   <string name="media_err_malformed">Le fichier média n\'est pas correctement encodé</string>
   <string name="media_err_timeout">Délai dépassé pour la lecture du morceau.</string>
   <string name="media_err_invalid_progressive_playback">Le fichier média ne peut pas être diffusé</string>
-  <string name="media_err_unknown">Fichier média ne peut être joué avec le stock de media player</string>
-  <string name="media_err_security_ex">taux %1$s erreurs de sécurité essayant de jouer</string>
-  <string name="media_err_io_ex">Taux %1$s d\'erreurs de saisie essayant de jouer</string>
-  <string name="media_err_unexpected">Taux %1$s d\'erreurs inattendues essayant de jouer</string>
-  <string name="media_rewind_description">Bouton de rem-bobinage</string>
-  <string name="media_play_pause_description">Bouton de Lecture ou de Pause</string>
+  <string name="media_err_unknown">Le fichier média ne peut être joué avec le lecteur standard</string>
+  <string name="media_err_security_ex">Erreur de sécurité à la lecture de %1$s</string>
+  <string name="media_err_io_ex">Erreur de lecture de fichier à la lecture de %1$s</string>
+  <string name="media_err_unexpected">Erreur inattendue à la lecture de %1$s </string>
+  <string name="media_rewind_description">Bouton de rembobinage</string>
+  <string name="media_play_pause_description">Bouton de lecture ou de pause</string>
   <string name="media_forward_description">Bouton d\'avance rapide</string>
-  <string name="auth_getting_authorization">Demande d\'autorisation...</string>
-  <string name="auth_trying_to_login">Tentative de connexion …</string>
+  <string name="auth_getting_authorization">Demande d\'autorisation</string>
+  <string name="auth_trying_to_login">Tentative de connexion…</string>
   <string name="auth_no_net_conn_title">Pas de connexion réseau</string>
   <string name="auth_nossl_plain_ok_title">Connexion sécurisée non disponible</string>
   <string name="auth_connection_established">Connexion établie</string>
@@ -170,28 +171,28 @@ Ci-dessous la liste des fichiers locaux, et les fichiers distants dans %5$s auxq
   <string name="auth_timeout_title">Le serveur met trop longtemps à répondre</string>
   <string name="auth_incorrect_address_title">Adresse invalide</string>
   <string name="auth_ssl_general_error_title">Échec de l\'initialisation SSL</string>
-  <string name="auth_ssl_unverified_server_title">Impossible de vérifier l\'identité du serveur SSL.</string>
+  <string name="auth_ssl_unverified_server_title">Impossible de vérifier l\'identité du serveur SSL</string>
   <string name="auth_bad_oc_version_title">La version du serveur n\'est pas reconnue</string>
   <string name="auth_wrong_connection_title">Impossible d\'établir la connexion</string>
   <string name="auth_secure_connection">Connexion sécurisée établie</string>
   <string name="auth_unauthorized">Nom d\'utilisateur ou mot de passe incorrect</string>
   <string name="auth_oauth_error">Échec d\'autorisation</string>
   <string name="auth_oauth_error_access_denied">Accès refusé par le serveur d\'autorisation</string>
-  <string name="auth_wtf_reenter_URL">État inattendu ; veuillez entrer à nouveau l\'URL du serveur</string>
+  <string name="auth_wtf_reenter_URL">État inattendu ; veuillez saisir à nouveau l\'URL du serveur</string>
   <string name="auth_expired_oauth_token_toast">Votre autorisation a expiré. Merci de vous authentifier à nouveau</string>
   <string name="auth_expired_basic_auth_toast">Veuillez saisir le mot de passe courant</string>
   <string name="auth_expired_saml_sso_token_toast">Votre session a expiré. Merci de vous reconnecter</string>
-  <string name="auth_connecting_auth_server">Connexion au serveur d\'authentification...</string>
-  <string name="auth_unsupported_auth_method">Le serveur ne supporte pas cette méthode d\'authentification</string>
-  <string name="auth_unsupported_multiaccount">%1$s ne supporte pas les comptes multiples</string>
+  <string name="auth_connecting_auth_server">Connexion au serveur d\'authentification</string>
+  <string name="auth_unsupported_auth_method">Le serveur ne prend pas en charge pas cette méthode d\'authentification</string>
+  <string name="auth_unsupported_multiaccount">%1$s ne prend pas en charge les comptes multiples</string>
   <string name="auth_fail_get_user_name">Votre serveur a retourné un identifiant d\'utilisateur incorrect. Veuillez prendre contact avec votre administrateur
 </string>
   <string name="auth_can_not_auth_against_server">Impossible de s\'authentifier sur ce serveur</string>
   <string name="fd_keep_in_sync">Maintenir le fichier à jour</string>
   <string name="common_rename">Renommer</string>
   <string name="common_remove">Supprimer</string>
-  <string name="confirmation_remove_alert">Voulez-vous vraiment supprimer %1$s ?</string>
-  <string name="confirmation_remove_folder_alert">Voulez-vous vraiment supprimer %1$s et son contenu ?</string>
+  <string name="confirmation_remove_alert">Voulez-vous vraiment supprimer %1$s&amp;nbsp;?</string>
+  <string name="confirmation_remove_folder_alert">Voulez-vous vraiment supprimer %1$s et son contenu&amp;nbsp;?</string>
   <string name="confirmation_remove_local">Local seulement</string>
   <string name="confirmation_remove_folder_local">Le contenu local uniquement</string>
   <string name="confirmation_remove_remote">Effacer du serveur</string>
@@ -204,36 +205,36 @@ Ci-dessous la liste des fichiers locaux, et les fichiers distants dans %5$s auxq
   <string name="sync_file_fail_msg">Le fichier distant n\'a pu être vérifié</string>
   <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_forbidden_characters">Caractères interdits&amp;nbsp;: / \\ &amp;lt; &amp;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_unexpected_bad_get_content">Problème inattendu. Veuillez essayer une autre application pour la sélection du fichier</string>
   <string name="filedisplay_no_file_selected">Aucun fichier sélectionné</string>
   <string name="activity_chooser_title">Envoyer un lien à…</string>
-  <string name="oauth_check_onoff">Connexion avec aAuth2.</string>
-  <string name="oauth_login_connection">Connexion au serveur aAuth2...</string>
+  <string name="oauth_check_onoff">Connexion avec oAuth2</string>
+  <string name="oauth_login_connection">Connexion au serveur oAuth2…</string>
   <string name="ssl_validator_header">L\'identité du site ne peut être vérifiée</string>
   <string name="ssl_validator_reason_cert_not_trusted">- Le certificat du serveur n\'est pas sûr</string>
   <string name="ssl_validator_reason_cert_expired">- Le certificat du serveur a expiré</string>
   <string name="ssl_validator_reason_cert_not_yet_valid">- Le certificat du serveur n\'est pas encore valide</string>
   <string name="ssl_validator_reason_hostname_not_verified">- L\'URL ne correspond pas au nom d\'hôte du certificat</string>
-  <string name="ssl_validator_question">Voulez-vous tout de même faire confiance à ce certificat ?</string>
+  <string name="ssl_validator_question">Voulez-vous tout de même faire confiance à ce certificat&amp;nbsp;?</string>
   <string name="ssl_validator_not_saved">Impossible de sauvegarder le certificat</string>
   <string name="ssl_validator_btn_details_see">Détails</string>
   <string name="ssl_validator_btn_details_hide">Masquer</string>
-  <string name="ssl_validator_label_subject">Délivré à :</string>
-  <string name="ssl_validator_label_issuer">Délivré par :</string>
+  <string name="ssl_validator_label_subject">Délivré à&amp;nbsp;:</string>
+  <string name="ssl_validator_label_issuer">Délivré par&amp;nbsp;:</string>
   <string name="ssl_validator_label_CN">Nom d\'usage :</string>
-  <string name="ssl_validator_label_O">Organisation :</string>
-  <string name="ssl_validator_label_OU">Unité organisationnelle :</string>
-  <string name="ssl_validator_label_C">Pays :</string>
-  <string name="ssl_validator_label_ST">Région :</string>
-  <string name="ssl_validator_label_L">Localisation :</string>
-  <string name="ssl_validator_label_validity">Validité :</string>
-  <string name="ssl_validator_label_validity_from">De :</string>
-  <string name="ssl_validator_label_validity_to">À :</string>
-  <string name="ssl_validator_label_signature">Signature :</string>
-  <string name="ssl_validator_label_signature_algorithm">Algorithme :</string>
+  <string name="ssl_validator_label_O">Organisation&amp;nbsp;:</string>
+  <string name="ssl_validator_label_OU">Unité organisationnelle&amp;nbsp;:</string>
+  <string name="ssl_validator_label_C">Pays&amp;nbsp;:</string>
+  <string name="ssl_validator_label_ST">Région&amp;nbsp;:</string>
+  <string name="ssl_validator_label_L">Localisation&amp;nbsp;:</string>
+  <string name="ssl_validator_label_validity">Validité&amp;nbsp;:</string>
+  <string name="ssl_validator_label_validity_from">De&amp;nbsp;:</string>
+  <string name="ssl_validator_label_validity_to">À&amp;nbsp;:</string>
+  <string name="ssl_validator_label_signature">Signature&amp;nbsp;:</string>
+  <string name="ssl_validator_label_signature_algorithm">Algorithme&amp;nbsp;:</string>
   <string name="ssl_validator_null_cert">Impossible d\'afficher le certificat.</string>
   <string name="ssl_validator_no_info_about_error">- Aucune information sur l\'erreur</string>
   <string name="placeholder_sentence">Ceci est un espace réservé</string>
@@ -254,7 +255,7 @@ Ci-dessous la liste des fichiers locaux, et les fichiers distants dans %5$s auxq
   <string name="preview_image_error_unknown_format">Cette image ne peut pas être affichée</string>
   <string name="error__upload__local_file_not_copied">%1$s n\'a pas pu être copié dans le dossier local %2$s</string>
   <string name="prefs_instant_upload_path_title">Chemin d\'accès pour le téléversement</string>
-  <string name="share_link_no_support_share_api">Désolé, le partage n\'est pas disponible sur votre serveur. Contactez votre administrateur, s\'il vous plait.</string>
+  <string name="share_link_no_support_share_api">Désolé, le partage n\'est pas disponible sur votre serveur. Veuillez contacter votre administrateur.</string>
   <string name="share_link_file_no_exist">Impossible de partager. Vérifiez que le fichier est bien présent</string>
   <string name="share_link_file_error">Une erreur est survenue lors de la tentative de partage de ce fichier ou répertoire</string>
   <string name="unshare_link_file_no_exist">Impossible de supprimer le partage. Vérifiez que le fichier est bien présent</string>
@@ -262,7 +263,7 @@ Ci-dessous la liste des fichiers locaux, et les fichiers distants dans %5$s auxq
   <string name="activity_chooser_send_file_title">Envoyer</string>
   <string name="copy_link">Copier le lien</string>
   <string name="clipboard_text_copied">Copié dans le presse-papiers</string>
-  <string name="error_cant_bind_to_operations_service">Erreur critique : impossible de réaliser des opérations</string>
+  <string name="error_cant_bind_to_operations_service">Erreur critique&amp;nbsp;: impossible de réaliser des opérations</string>
   <string name="network_error_socket_exception">Une erreur s\'est produite pendant la connection au serveur</string>
   <string name="network_error_socket_timeout_exception">Une erreur est survenue pendant l\'attente du serveur. L\'opération n\'a pas pu être effectuée.</string>
   <string name="network_error_connect_timeout_exception">Une erreur est survenue pendant l\'attente du serveur. L\'opération n\'a pas pu être effectuée.</string>

+ 1 - 0
res/values-gl/strings.xml

@@ -50,6 +50,7 @@
   <string name="uploader_wrn_no_content_text">Non se recibiu contido. Non hai nada para enviar.</string>
   <string name="uploader_error_forbidden_content">%1$s non ten permiso para acceder ao contido compartido</string>
   <string name="uploader_info_uploading">Enviando</string>
+  <string name="file_list_seconds_ago">segundos atrás</string>
   <string name="file_list_empty">Aquí non hai nada. Envíe algo!</string>
   <string name="file_list_loading">Cargando...</string>
   <string name="local_file_list_empty">Non hai ficheiros neste cartafol.</string>

+ 1 - 0
res/values-he/strings.xml

@@ -50,6 +50,7 @@
   <string name="uploader_wrn_no_content_text">לא התקבל תוכן. אין מה להעלות.</string>
   <string name="uploader_error_forbidden_content">ל־%1$s אין הרשאה לגשת לתוכן המשותף שלך</string>
   <string name="uploader_info_uploading">בהעלאה</string>
+  <string name="file_list_seconds_ago">שניות</string>
   <string name="file_list_empty">אין כאן שום דבר. אולי ברצונך להעלות משהו?</string>
   <string name="file_list_loading">בטעינה...</string>
   <string name="local_file_list_empty">אין קבצים בתיקייה זו:</string>

+ 1 - 0
res/values-hr/strings.xml

@@ -17,6 +17,7 @@
   <string name="setup_btn_connect">Poveži</string>
   <string name="uploader_btn_upload_text">Učitaj</string>
   <string name="uploader_wrn_no_account_quit_btn_text">Izlaz</string>
+  <string name="file_list_seconds_ago">prije par sekundi</string>
   <string name="file_list_empty">Nema ničega u ovoj mapi. Pošalji nešto!</string>
   <string name="filedetails_download">Preuzimanje</string>
   <string name="action_share_file">Podijelite vezu</string>

+ 1 - 0
res/values-hu-rHU/strings.xml

@@ -50,6 +50,7 @@
   <string name="uploader_wrn_no_content_text">Nem jött tartalom. Nincs mit feltölteni.</string>
   <string name="uploader_error_forbidden_content">%1$s nem jogosult a megosztott tartalom elérésére</string>
   <string name="uploader_info_uploading">Feltöltés</string>
+  <string name="file_list_seconds_ago">pár másodperce</string>
   <string name="file_list_empty">Itt nincs semmi. Töltsön fel valamit!</string>
   <string name="file_list_loading">Betöltés...</string>
   <string name="local_file_list_empty">Nincs fájl ebben a mappában.</string>

+ 1 - 0
res/values-ia/strings.xml

@@ -15,6 +15,7 @@
   <string name="sync_string_files">Files</string>
   <string name="setup_btn_connect">Connecte</string>
   <string name="uploader_btn_upload_text">Incargar</string>
+  <string name="file_list_seconds_ago">secundas passate</string>
   <string name="file_list_empty">Nihil hic. Incarga alcun cosa!</string>
   <string name="filedetails_download">Discargar</string>
   <string name="action_share_file">Compartir ligamine</string>

+ 1 - 0
res/values-id/strings.xml

@@ -59,6 +59,7 @@
   <string name="uploader_wrn_no_content_text">Tidak ada konten yang diterima. Tidak ada yang diunggah</string>
   <string name="uploader_error_forbidden_content">%1$s tidak diizinkan mengakses konten berbagi</string>
   <string name="uploader_info_uploading">Mengunggah</string>
+  <string name="file_list_seconds_ago">beberapa detik yang lalu</string>
   <string name="file_list_empty">Tidak ada apa-apa di sini. Unggah sesuatu!</string>
   <string name="file_list_loading">Memuat...</string>
   <string name="local_file_list_empty">Tidak ada satupun berkas dalam folder ini.</string>

+ 1 - 0
res/values-is/strings.xml

@@ -12,6 +12,7 @@
   <string name="auth_password">Lykilorð</string>
   <string name="sync_string_files">Skrár</string>
   <string name="uploader_btn_upload_text">Senda inn</string>
+  <string name="file_list_seconds_ago">sek.</string>
   <string name="file_list_empty">Ekkert hér. Settu eitthvað inn!</string>
   <string name="filedetails_download">Niðurhal</string>
   <string name="common_yes">Já</string>

+ 4 - 3
res/values-it/strings.xml

@@ -59,6 +59,7 @@
   <string name="uploader_wrn_no_content_text">Non è stato ricevuto alcun contenuto. Niente da caricare.</string>
   <string name="uploader_error_forbidden_content">%1$s non è abilitato ad accedere al contenuto condiviso</string>
   <string name="uploader_info_uploading">Caricamento in corso</string>
+  <string name="file_list_seconds_ago">secondi fa</string>
   <string name="file_list_empty">Non c\'è niente qui. Carica qualcosa!</string>
   <string name="file_list_loading">Caricamento in corso...</string>
   <string name="local_file_list_empty">Non ci sono file in questa cartella.</string>
@@ -76,7 +77,7 @@
   <string name="common_no">No</string>
   <string name="common_ok">OK</string>
   <string name="common_cancel_download">Annulla lo scaricamento</string>
-  <string name="common_cancel_upload">Annulla invio</string>
+  <string name="common_cancel_upload">Annulla caricamento</string>
   <string name="common_cancel">Annulla</string>
   <string name="common_save_exit">Salva ed esci</string>
   <string name="common_error">Errore</string>
@@ -244,7 +245,7 @@
   <string name="conflict_message">Il file remoto %s non è sincronizzato con il file locale. Se continui, il contenuto del file sarà sostituito sul server.</string>
   <string name="conflict_keep_both">Mantieni entrambi</string>
   <string name="conflict_overwrite">Sovrascrivi</string>
-  <string name="conflict_dont_upload">Non inviare</string>
+  <string name="conflict_dont_upload">Non caricare</string>
   <string name="preview_image_description">Anteprima dell\'immagine</string>
   <string name="preview_image_error_unknown_format">Questa immagine non può essere mostrata</string>
   <string name="error__upload__local_file_not_copied">%1$s non può essere copiato nella cartella locale %2$s</string>
@@ -278,7 +279,7 @@
   <string name="actionbar_logger">Registri</string>
   <string name="log_send_history_button">Invia cronologia</string>
   <string name="log_mail_subject">Registri applicazione ownCloud Android</string>
-  <string name="log_progress_dialog_text">Caricamento dati...</string>
+  <string name="log_progress_dialog_text">Caricamento dati in corso...</string>
   <string name="saml_authentication_required_text">Autenticazione richiesta</string>
   <string name="saml_authentication_wrong_pass">Password errata</string>
   <string name="actionbar_move">Sposta</string>

+ 1 - 0
res/values-ja-rJP/strings.xml

@@ -60,6 +60,7 @@
   <string name="uploader_wrn_no_content_text">コンテンツを受信しませんでした。アップロードするものはありません。</string>
   <string name="uploader_error_forbidden_content">%1$sで共有コンテンツへのアクセスが許可されていません。</string>
   <string name="uploader_info_uploading">アップロード中</string>
+  <string name="file_list_seconds_ago">数秒前</string>
   <string name="file_list_empty">ここには何もありません。何かアップロードしてください。</string>
   <string name="file_list_loading">読込中 ...</string>
   <string name="local_file_list_empty">このフォルダーにはファイルがありません。</string>

+ 1 - 0
res/values-ka-rGE/strings.xml

@@ -30,6 +30,7 @@
   <string name="uploader_wrn_no_content_text">კონტენტი არ იქნა მიღებული. არაფერია ასატვირთად.</string>
   <string name="uploader_error_forbidden_content">%1$s–ი არ დაიშვება გაზიარებული კონტენტის სანახავად</string>
   <string name="uploader_info_uploading">მიმდინარეობს ატვირთვა</string>
+  <string name="file_list_seconds_ago">წამის წინ</string>
   <string name="file_list_empty">აქ არაფერი არ არის. ატვირთე რამე!</string>
   <string name="filedetails_select_file">დააჭირეთ ფაილს დამატებითი ინფორმაციის გამოსაჩენად.</string>
   <string name="filedetails_size">ზომა:</string>

+ 1 - 0
res/values-km/strings.xml

@@ -23,6 +23,7 @@
   <string name="uploader_wrn_no_account_setup_btn_text">ដំឡើង</string>
   <string name="uploader_wrn_no_account_quit_btn_text">ចាក់ចេញ</string>
   <string name="uploader_info_uploading">កំពុង​ផ្ទុក​ឡើង</string>
+  <string name="file_list_seconds_ago">វិនាទី​មុន</string>
   <string name="file_list_empty">គ្មាន​អ្វី​នៅ​ទីនេះ​ទេ។ ផ្ទុក​ឡើង​អ្វី​មួយ!</string>
   <string name="filedetails_select_file">ចុចមួយ​លើឯកសារ ដើម្បី​បង្ហាញ​ព័ត៌មាន​បន្ថែម។</string>
   <string name="filedetails_size">ទំហំ៖</string>

+ 1 - 0
res/values-ko/strings.xml

@@ -45,6 +45,7 @@
   <string name="uploader_wrn_no_content_text">받은 콘텐츠가 없습니다. 업로드할 항목이 없습니다.</string>
   <string name="uploader_error_forbidden_content">%1$s에서 공유된 콘텐츠에 접근할 수 없습니다</string>
   <string name="uploader_info_uploading">업로드 중</string>
+  <string name="file_list_seconds_ago">초 전</string>
   <string name="file_list_empty">내용이 없습니다. 업로드할 수 있습니다!</string>
   <string name="filedetails_select_file">파일을 누르면 추가 정보가 표시됩니다.</string>
   <string name="filedetails_size">크기:</string>

+ 1 - 0
res/values-lb/strings.xml

@@ -24,6 +24,7 @@
   <string name="uploader_wrn_no_account_setup_btn_text">Setup</string>
   <string name="uploader_wrn_no_account_quit_btn_text">Erausgoen</string>
   <string name="uploader_info_uploading">Eroplueden</string>
+  <string name="file_list_seconds_ago">Sekonnen hir</string>
   <string name="file_list_empty">Hei ass näischt. Lued eppes rop!</string>
   <string name="filedetails_size">Gréisst:</string>
   <string name="filedetails_type">Typ:</string>

+ 1 - 0
res/values-lt-rLT/strings.xml

@@ -50,6 +50,7 @@
   <string name="uploader_wrn_no_content_text">nebuvo gauta turinio. Nėra įkeltino turinio</string>
   <string name="uploader_error_forbidden_content">%1$s neleidžiama prieiti prie turinio, kuriuo dalijamasi</string>
   <string name="uploader_info_uploading">Išsiunčiama</string>
+  <string name="file_list_seconds_ago">prieš sekundę</string>
   <string name="file_list_empty">Čia tuščia. Įkelkite ką nors!</string>
   <string name="file_list_loading">Įkeliama ...</string>
   <string name="local_file_list_empty">Šiame aplanke nėra failų.</string>

+ 1 - 0
res/values-lv/strings.xml

@@ -28,6 +28,7 @@
   <string name="uploader_wrn_no_content_text">Nav saņemts nekāds saturs. Nav ko augšupielādēt.</string>
   <string name="uploader_error_forbidden_content">%1$s nedrīkst piekļūt koplietotajam saturam</string>
   <string name="uploader_info_uploading">Augšupielādē</string>
+  <string name="file_list_seconds_ago">sekundes atpakaļ</string>
   <string name="file_list_empty">Te vēl nekas nav. Rīkojies, sāc augšupielādēt!</string>
   <string name="filedetails_select_file">Uzsitiet uz datnes, lai redzētu papildinformāciju.</string>
   <string name="filedetails_size">Izmērs:</string>

+ 1 - 0
res/values-mk/strings.xml

@@ -28,6 +28,7 @@
   <string name="uploader_wrn_no_account_title">Не е пронајдена сметка</string>
   <string name="uploader_wrn_no_account_setup_btn_text">Нагодување</string>
   <string name="uploader_wrn_no_account_quit_btn_text">Прекини</string>
+  <string name="file_list_seconds_ago">пред секунди</string>
   <string name="file_list_empty">Тука нема ништо. Снимете нешто!</string>
   <string name="filedetails_size">Големина:</string>
   <string name="filedetails_type">Тип:</string>

+ 1 - 0
res/values-my/strings.xml

@@ -7,6 +7,7 @@
   <string name="auth_username">သုံးစွဲသူအမည်</string>
   <string name="auth_password">စကားဝှက်</string>
   <string name="sync_string_files">ဖိုင်များ</string>
+  <string name="file_list_seconds_ago">စက္ကန့်အနည်းငယ်က</string>
   <string name="filedetails_download">ဒေါင်းလုတ်</string>
   <string name="common_yes">ဟုတ်</string>
   <string name="common_no">မဟုတ်ဘူး</string>

+ 1 - 0
res/values-nb-rNO/strings.xml

@@ -51,6 +51,7 @@
   <string name="uploader_wrn_no_content_text">Intet innhold ble mottatt. Intet å laste opp.</string>
   <string name="uploader_error_forbidden_content">%1$s har ikke tilgang til det delte innholdet</string>
   <string name="uploader_info_uploading">Laster opp</string>
+  <string name="file_list_seconds_ago">for få sekunder siden</string>
   <string name="file_list_empty">Ingenting her. Last opp noe!</string>
   <string name="file_list_loading">Laster...</string>
   <string name="local_file_list_empty">Det er ingen filer i denne mappen.</string>

+ 1 - 0
res/values-nl/strings.xml

@@ -60,6 +60,7 @@ Download hier: %2$s</string>
   <string name="uploader_wrn_no_content_text">Er werd geen inhoud ontvangen. Niets om te uploaden.</string>
   <string name="uploader_error_forbidden_content">%1$s is niet toegestaan om toegang te hebben tot de publieke inhoud</string>
   <string name="uploader_info_uploading">Uploaden</string>
+  <string name="file_list_seconds_ago">seconden geleden</string>
   <string name="file_list_empty">Er bevindt zich hier niets. Upload een bestand!</string>
   <string name="file_list_loading">Laden ...</string>
   <string name="local_file_list_empty">Er staan geen bestanden in deze map.</string>

+ 1 - 0
res/values-nn-rNO/strings.xml

@@ -46,6 +46,7 @@
   <string name="uploader_wrn_no_content_title">Inga innhald å lasta opp</string>
   <string name="uploader_wrn_no_content_text">Mottok ikkje noko innhald. Ingenting å lasta opp.</string>
   <string name="uploader_info_uploading">Lastar opp</string>
+  <string name="file_list_seconds_ago">sekund sidan</string>
   <string name="file_list_empty">Ingenting her. Last noko opp!</string>
   <string name="filedetails_select_file">Trykk på ei fil for å visa meir informasjon.</string>
   <string name="filedetails_size">Storleik:</string>

+ 1 - 0
res/values-oc/strings.xml

@@ -19,6 +19,7 @@
   <string name="uploader_wrn_no_account_setup_btn_text">Configuracion</string>
   <string name="uploader_wrn_no_account_quit_btn_text">Quita</string>
   <string name="uploader_info_uploading">Al amontcargar</string>
+  <string name="file_list_seconds_ago">segonda a</string>
   <string name="file_list_empty">Pas res dedins. Amontcarga qualquaren</string>
   <string name="filedetails_size">Talha :</string>
   <string name="filedetails_type">Tipe :</string>

+ 1 - 0
res/values-pa/strings.xml

@@ -29,6 +29,7 @@
   <string name="uploader_wrn_no_content_title">ਅੱਪਲੋਡ ਕਰਨ ਲਈ ਕੋਈ ਸਮੱਗਰੀ ਨਹੀਂ</string>
   <string name="uploader_wrn_no_content_text">ਕੋਈ ਸਮੱਗਰੀ ਨਹੀਂ ਮਿਲੀ। ਅੱਪਲੋਡ ਕਰਨ ਲਈ ਕੁਝ ਨਹੀਂ ਹੈ।</string>
   <string name="uploader_info_uploading">ਅੱਪਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ</string>
+  <string name="file_list_seconds_ago">ਸਕਿੰਟ ਪਹਿਲਾਂ</string>
   <string name="filedetails_select_file">ਹੋਰ ਜਾਣਕਾਰੀ ਵੇਖਣ ਲਈ ਫਾਇਲ ਉੱਤੇ ਛੂਹੋ</string>
   <string name="filedetails_size">ਆਕਾਰ:</string>
   <string name="filedetails_type">ਕਿਸਮ:</string>

+ 1 - 0
res/values-pl/strings.xml

@@ -57,6 +57,7 @@
   <string name="uploader_wrn_no_content_text">Nie otrzymano danych. Nie ma nic do wysłania.</string>
   <string name="uploader_error_forbidden_content">%1$s nie ma dostępu do udostępnionych treści</string>
   <string name="uploader_info_uploading">Wysyłanie</string>
+  <string name="file_list_seconds_ago">sekund temu</string>
   <string name="file_list_empty">Pusto. Wyślij coś!</string>
   <string name="file_list_loading">Ładowanie...</string>
   <string name="local_file_list_empty">Nie ma plików w tym folderze.</string>

+ 1 - 0
res/values-pt-rBR/strings.xml

@@ -59,6 +59,7 @@
   <string name="uploader_wrn_no_content_text">Nenhum conteúdo foi recebido. Nada para enviar.</string>
   <string name="uploader_error_forbidden_content">%1$s não é permitido acessar o conteúdo compartilhado</string>
   <string name="uploader_info_uploading">Enviando</string>
+  <string name="file_list_seconds_ago">segundos atrás</string>
   <string name="file_list_empty">Nada aqui. Envie alguma coisa!</string>
   <string name="file_list_loading">Carregando...</string>
   <string name="local_file_list_empty">Não existe nenhum arquivo nesta pasta.</string>

+ 31 - 30
res/values-pt-rPT/strings.xml

@@ -1,6 +1,6 @@
 <?xml version='1.0' encoding='UTF-8'?>
 <resources>
-  <string name="about_android">%1$s Aplicação(ões) Android</string>
+  <string name="about_android">%1$s App(s) Android</string>
   <string name="about_version">versão %1$s</string>
   <string name="actionbar_sync">Atualizar conta</string>
   <string name="actionbar_upload">Enviar</string>
@@ -51,14 +51,15 @@
   <string name="setup_btn_connect">Ligar</string>
   <string name="uploader_btn_upload_text">Enviar</string>
   <string name="uploader_top_message">Escolha a pasta de envio:</string>
-  <string name="uploader_wrn_no_account_title">Nenhuma conta encontrada</string>
-  <string name="uploader_wrn_no_account_text">Não tem nenhuma conta  %1$s no seu dispositivo. Configure uma conta.</string>
+  <string name="uploader_wrn_no_account_title">A conta não foi encontrada</string>
+  <string name="uploader_wrn_no_account_text">Não tem nenhuma conta  %1$s no seu dispositivo. Por favor, configure primeiro uma conta.</string>
   <string name="uploader_wrn_no_account_setup_btn_text">Configurar</string>
   <string name="uploader_wrn_no_account_quit_btn_text">Sair</string>
-  <string name="uploader_wrn_no_content_title">Sem conteúdo para carregar</string>
+  <string name="uploader_wrn_no_content_title">Sem conteúdo para enviar</string>
   <string name="uploader_wrn_no_content_text">Não foi recebido nenhum conteúdo. Nada para enviar.</string>
   <string name="uploader_error_forbidden_content">O  %1$s não está autorizado a aceder aos ficheiro partilhados.</string>
   <string name="uploader_info_uploading">A enviar</string>
+  <string name="file_list_seconds_ago">segundos atrás</string>
   <string name="file_list_empty">Vazio. Envie alguma coisa!</string>
   <string name="file_list_loading">A carregar ...</string>
   <string name="local_file_list_empty">Não existem ficheiros nesta pasta.</string>
@@ -214,12 +215,12 @@
   <string name="ssl_validator_question">Quer confiar neste certificado de qualquer maneira?</string>
   <string name="ssl_validator_not_saved">O certificado não pôde ser guardado</string>
   <string name="ssl_validator_btn_details_see">Detalhes</string>
-  <string name="ssl_validator_btn_details_hide">Esconder</string>
+  <string name="ssl_validator_btn_details_hide">Ocultar</string>
   <string name="ssl_validator_label_subject">Emitido para:</string>
   <string name="ssl_validator_label_issuer">Emitido por:</string>
   <string name="ssl_validator_label_CN">Nome comum.</string>
   <string name="ssl_validator_label_O">Organização:</string>
-  <string name="ssl_validator_label_OU">Unidade organizaconal.</string>
+  <string name="ssl_validator_label_OU">Unidade organizacional.</string>
   <string name="ssl_validator_label_C">País:</string>
   <string name="ssl_validator_label_ST">Estado:</string>
   <string name="ssl_validator_label_L">Localização:</string>
@@ -228,33 +229,33 @@
   <string name="ssl_validator_label_validity_to">Para:</string>
   <string name="ssl_validator_label_signature">Assinatura:</string>
   <string name="ssl_validator_label_signature_algorithm">Algoritmo</string>
-  <string name="ssl_validator_null_cert">O certificado não pôde ser mostrado.</string>
-  <string name="ssl_validator_no_info_about_error">- Nenhuma informação acerca do erro</string>
+  <string name="ssl_validator_null_cert">Não foi possível mostrar o certificado.</string>
+  <string name="ssl_validator_no_info_about_error">- Nenhuma informação sobre o erro</string>
   <string name="placeholder_sentence">Isto é uma variável.</string>
   <string name="placeholder_filename">placeholder.txt</string>
   <string name="placeholder_filetype">Imagem PNG</string>
   <string name="placeholder_filesize">389 KB</string>
-  <string name="placeholder_timestamp">2012/05/18 12:23 PM</string>
+  <string name="placeholder_timestamp">2012/05/18 12:23</string>
   <string name="placeholder_media_time">12:23:45</string>
-  <string name="instant_upload_on_wifi">Enviar fotografias apenas via WiFi</string>
-  <string name="instant_video_upload_on_wifi">Enviar videos apenas por WiFi</string>
-  <string name="instant_upload_path">/Upload-Instantâneo </string>
-  <string name="conflict_title">Conflito na actualização</string>
+  <string name="instant_upload_on_wifi">Só enviar as fotografias via wi-fi</string>
+  <string name="instant_video_upload_on_wifi">Só enviar os vídeos por wi-fi</string>
+  <string name="instant_upload_path">/Envio Instantâneo </string>
+  <string name="conflict_title">Conflito na atualização</string>
   <string name="conflict_message">O ficheiro remoto %s não está sincronizado com o ficheiro local. Se continuar ira substituir o ficheiro no servidor.</string>
-  <string name="conflict_keep_both">Manter os dois</string>
-  <string name="conflict_overwrite">Sobrepor</string>
+  <string name="conflict_keep_both">Manter ambos</string>
+  <string name="conflict_overwrite">Substituir</string>
   <string name="conflict_dont_upload">Não enviar.</string>
-  <string name="preview_image_description">Pré-Visualização da imagem</string>
+  <string name="preview_image_description">Pré-Visualizar imagem</string>
   <string name="preview_image_error_unknown_format">Esta imagem não pode ser mostrada</string>
   <string name="error__upload__local_file_not_copied">Não foi possível copiar %1$s para a pasta local %2$s</string>
-  <string name="prefs_instant_upload_path_title">Caminho de Upload</string>
+  <string name="prefs_instant_upload_path_title">Caminho de \'A Enviar\'</string>
   <string name="share_link_no_support_share_api">Lamentamos mas não é possível partilhar através do seu servidor. Por favor contacte o seu administrador.</string>
   <string name="share_link_file_no_exist">Não é possivel partilhar. Por favor verifique se o ficheiro existe</string>
   <string name="share_link_file_error">Ocorreu um erro enquanto tentava partilhar este ficheiro ou pasta</string>
   <string name="unshare_link_file_no_exist">Não é possível retirar a partilha. Verifique se o ficheiro existe</string>
   <string name="unshare_link_file_error">Ocorreu um erro enquanto retirava a partilha deste ficheiro ou pasta</string>
   <string name="activity_chooser_send_file_title">Enviar</string>
-  <string name="copy_link">Copiar ligação</string>
+  <string name="copy_link">Copiar hiperligação</string>
   <string name="clipboard_text_copied">Copiado para a área de transferência</string>
   <string name="error_cant_bind_to_operations_service">Erro crítico: não é possível executar as operações</string>
   <string name="network_error_socket_exception">Ocorreu um erro durante a ligação ao servidos.</string>
@@ -262,31 +263,31 @@
   <string name="network_error_connect_timeout_exception">Ocorreu um erro durante a ligação ao servidor, não foi possível realizar a operação.</string>
   <string name="network_host_not_available">A operação não foi concluída, o servidor está inacessível.</string>
   <string name="empty"></string>
-  <string name="forbidden_permissions">Você não tem permissão %s</string>
+  <string name="forbidden_permissions">Não tem permissão %s</string>
   <string name="forbidden_permissions_rename">para renomear este ficheiro</string>
-  <string name="forbidden_permissions_delete">para eliminar este ficheiro</string>
+  <string name="forbidden_permissions_delete">para apagar este ficheiro</string>
   <string name="share_link_forbidden_permissions">para partilhar este ficheiro</string>
-  <string name="unshare_link_forbidden_permissions">para eliminar a partilha deste ficheiro</string>
+  <string name="unshare_link_forbidden_permissions">para cancelar a partilha deste ficheiro</string>
   <string name="forbidden_permissions_create">para criar o ficheiro</string>
-  <string name="uploader_upload_forbidden_permissions">para carregar dentro desta pasta</string>
+  <string name="uploader_upload_forbidden_permissions">para enviar nesta pasta</string>
   <string name="downloader_download_file_not_found">O ficheiro não está mais disponível no servidor</string>
   <string name="prefs_category_accounts">Contas</string>
   <string name="prefs_add_account">Adicionar conta</string>
   <string name="auth_redirect_non_secure_connection_title">Ligação segura é redireccionada para um caminho inseguro.</string>
-  <string name="actionbar_logger">Logs</string>
+  <string name="actionbar_logger">Registos de Alterações</string>
   <string name="log_send_history_button">Enviar Histórico</string>
-  <string name="log_mail_subject">Logs da app ownCloud Android</string>
-  <string name="log_progress_dialog_text">A carregar os dados...</string>
+  <string name="log_mail_subject">Registos das alterações da app ownCloud Android</string>
+  <string name="log_progress_dialog_text">A carregar os dados ...</string>
   <string name="saml_authentication_required_text">Autenticação necessária</string>
-  <string name="saml_authentication_wrong_pass">Password errada</string>
+  <string name="saml_authentication_wrong_pass">Palavra-passe errada</string>
   <string name="actionbar_move">Mover</string>
   <string name="file_list_empty_moving">Não está aqui nada. Pode adicionar uma pasta!</string>
-  <string name="move_choose_button_text">Escolha</string>
-  <string name="move_file_not_found">Não é possível mover. Verifique se o ficheiro existe</string>
+  <string name="move_choose_button_text">Escolher</string>
+  <string name="move_file_not_found">Não é possível mover. Por favor, verifique se o ficheiro existe</string>
   <string name="move_file_invalid_into_descendent">Não é possível mover esta pasta deste modo</string>
   <string name="move_file_invalid_overwrite">O ficheiro já existe na pasta de destino</string>
-  <string name="move_file_error">Um erro ocorreu ao tentar mover este ficheiro ou pasta</string>
+  <string name="move_file_error">Ocorreu um ocorreu quando tentava mover este ficheiro ou pasta</string>
   <string name="forbidden_permissions_move">para mover este ficheiro</string>
-  <string name="prefs_category_instant_uploading">Uploads Instantâneos</string>
+  <string name="prefs_category_instant_uploading">Envios Instantâneos</string>
   <string name="prefs_category_security">Segurança</string>
 </resources>

+ 1 - 0
res/values-ro/strings.xml

@@ -52,6 +52,7 @@
   <string name="uploader_wrn_no_content_text">Nu a fost primit nici un conţinut .Nu exista nimic de încărcat .</string>
   <string name="uploader_error_forbidden_content">%1$s nu este permis sa acceseze conținutul shared</string>
   <string name="uploader_info_uploading">Încărcare</string>
+  <string name="file_list_seconds_ago">secunde în urmă</string>
   <string name="file_list_empty">Nimic aici. Încarcă ceva!</string>
   <string name="file_list_loading">Se incarca</string>
   <string name="local_file_list_empty">In acest folder nu sunt fisiere.</string>

+ 1 - 0
res/values-ru/strings.xml

@@ -58,6 +58,7 @@
   <string name="uploader_wrn_no_content_text">Содержимое не получено. Нечего загружать.</string>
   <string name="uploader_error_forbidden_content">%1$s не имеет доступа к опубликованным данным</string>
   <string name="uploader_info_uploading">Загрузка</string>
+  <string name="file_list_seconds_ago">только что</string>
   <string name="file_list_empty">Здесь ничего нет. Загрузите что-нибудь!</string>
   <string name="file_list_loading">Загрузка...</string>
   <string name="local_file_list_empty">В данной папке нет файлов.</string>

+ 1 - 0
res/values-si-rLK/strings.xml

@@ -21,6 +21,7 @@
   <string name="uploader_wrn_no_account_setup_btn_text">ස්ථාපනය</string>
   <string name="uploader_wrn_no_account_quit_btn_text">නික්මෙන්න</string>
   <string name="uploader_info_uploading">උඩුගතවේ</string>
+  <string name="file_list_seconds_ago">තත්පරයන්ට පෙර</string>
   <string name="file_list_empty">මෙහි කිසිවක් නොමැත. යමක් උඩුගත කරන්න</string>
   <string name="filedetails_select_file">වැඩි විස්තර සඳහා ගොනුවක් ස්පර්ෂ කරන්න</string>
   <string name="filedetails_size">විශාලත්වය:</string>

+ 26 - 0
res/values-sk-rSK/strings.xml

@@ -11,6 +11,12 @@
   <string name="actionbar_settings">Nastavenia</string>
   <string name="actionbar_see_details">Podrobnosti</string>
   <string name="actionbar_send_file">Odoslať</string>
+  <string name="actionbar_sort">Zoradiť</string>
+  <string name="actionbar_sort_title">Zoradiť podľa</string>
+  <string-array name="actionbar_sortby">
+    <item>A-Z</item>
+    <item>Najnovšie - Najstaršie</item>
+  </string-array>
   <!--TODO re-enable when server-side folder size calculation is available   
     	<item>Biggest - Smallest</item>-->
   <string name="prefs_category_general">Všeobecné</string>
@@ -32,7 +38,10 @@
   <string name="prefs_recommend">Doporučiť známemu</string>
   <string name="prefs_feedback">Spätná väzba</string>
   <string name="prefs_imprint">Podmienky používania</string>
+  <string name="prefs_remember_last_share_location">Zapamätať umiestnenie zdieľania</string>
+  <string name="prefs_remember_last_upload_location_summary">Zapamätať posledné umiestnenie pre nahranie zdieľaných súborov</string>
   <string name="recommend_subject">Skúste %1$s na vašom telefóne!</string>
+  <string name="recommend_text">Chcel by som vám odporučiť %1$s na vašom smartfóne!\nSťahujte tu: %2$s</string>
   <string name="auth_check_server">Skontrolovať Server</string>
   <string name="auth_host_url">Adresa servera https://...</string>
   <string name="auth_username">Používateľské meno</string>
@@ -50,6 +59,7 @@
   <string name="uploader_wrn_no_content_text">Nedodaný žiaden obsah. Nič na odoslanie.</string>
   <string name="uploader_error_forbidden_content">%1$s nemá práva pre prístup k zdieľanému obsahu</string>
   <string name="uploader_info_uploading">Nahrávanie</string>
+  <string name="file_list_seconds_ago">pred sekundami</string>
   <string name="file_list_empty">Žiadny súbor. Nahrajte niečo!</string>
   <string name="file_list_loading">Nahráva sa...</string>
   <string name="local_file_list_empty">V tomto priečinku nie sú žiadne súbory.</string>
@@ -105,6 +115,7 @@
   <string name="sync_fail_in_favourites_content">Obsah %1$d súborov nemohol byť synchronizovaný (%2$d konfliktov)</string>
   <string name="sync_foreign_files_forgotten_ticker">Niektoré lokálne súbory boli zabudnuté</string>
   <string name="sync_foreign_files_forgotten_content">%1$d súborov z %2$s priečinkov sa nepodarilo skopírovať do</string>
+  <string name="sync_foreign_files_forgotten_explanation">Od verzie 1.3.16 sú súbory nahrané z tohoto zariadenia kopírované do lokálneho priečinka %1$s, aby sa zabránilo strate dát pri synchronizácii jedného súboru s viacerými účtami.\n\nVšetky súbory nahraté predchádzajúcimi verziami aplikácie boli z tohoto dôvodu prekopírované do priečinka %2$s. Bohužiaľ sa objavila chyba zabraňujúca dokončeniu tejto operácie v priebehu synchronizácie účtu. Buď môžete súbor(y) ponechať ako sú a odobrať odkaz z priečinka %3$s, alebo presunúť súbor(y) do priečinka %1$s a zachovať odkaz na %4$s.\n\nNižšie je uvedený lokálny súbor(y) a vzdialený súbor(y) v %5$s, s ktorým je prepojený.</string>
   <string name="sync_current_folder_was_removed">Priečinok %1$s už existuje</string>
   <string name="foreign_files_move">Premiestniť všetko</string>
   <string name="foreign_files_success">Všetky súbory boli premiestnené</string>
@@ -238,9 +249,12 @@
   <string name="preview_image_description">Ukážka obrazu</string>
   <string name="preview_image_error_unknown_format">Obrázok nemožno zobraziť</string>
   <string name="error__upload__local_file_not_copied">%1$s nemožno skopírovať do lokálneho priečinka %2$s</string>
+  <string name="prefs_instant_upload_path_title">Cesta pre nahrávanie</string>
   <string name="share_link_no_support_share_api">Je nám to ľúto, ale zdieľanie nie je na vašom serveri povolené. Prosím kontaktujte vášho
 		administrátora.</string>
+  <string name="share_link_file_no_exist">Nemožno zdieľať. Skontrolujte, či súbor existuje</string>
   <string name="share_link_file_error">Pri pokuse o zdieľanie tohto súboru alebo priečinka došlo k chybe</string>
+  <string name="unshare_link_file_no_exist">Nemožno ukončiť zdieľanie. Skontrolujte, či súbor existuje</string>
   <string name="unshare_link_file_error">Pri pokuse zrušiť zdieľanie tohto súboru alebo priečinka došlo k chybe</string>
   <string name="activity_chooser_send_file_title">Odoslať</string>
   <string name="copy_link">Kopíruj odkaz</string>
@@ -261,9 +275,21 @@
   <string name="downloader_download_file_not_found">Súbor už na serveri nie je dostupný</string>
   <string name="prefs_category_accounts">Účty</string>
   <string name="prefs_add_account">Pridať účet</string>
+  <string name="auth_redirect_non_secure_connection_title">Zabezpečené pripojenie je presmerované na nezabezpečenú trasu.</string>
+  <string name="actionbar_logger">Logy</string>
+  <string name="log_send_history_button">Odoslať históriu</string>
+  <string name="log_mail_subject">Logy aplikácie ownCloud pre Android</string>
+  <string name="log_progress_dialog_text">Nahrávam dáta...</string>
   <string name="saml_authentication_required_text">Vyžaduje sa overenie</string>
   <string name="saml_authentication_wrong_pass">Nesprávne heslo</string>
   <string name="actionbar_move">Presunúť</string>
+  <string name="file_list_empty_moving">Nič tu nie je. Pridajte priečinok!</string>
   <string name="move_choose_button_text">Vybrať</string>
+  <string name="move_file_not_found">Nemožno presunúť. Skontrolujte, či súbor existuje</string>
+  <string name="move_file_invalid_into_descendent">Priečinok nemožno presunúť do vlastného podpriečinka</string>
+  <string name="move_file_invalid_overwrite">Súbor už v cieľovom priečinku existuje</string>
+  <string name="move_file_error">Pri pokuse o presun tohoto súboru alebo priečinka nastala chyba</string>
+  <string name="forbidden_permissions_move">pre presun tohoto súboru</string>
+  <string name="prefs_category_instant_uploading">Okamžité nahratie</string>
   <string name="prefs_category_security">Zabezpečenie</string>
 </resources>

+ 1 - 0
res/values-sl/strings.xml

@@ -59,6 +59,7 @@
   <string name="uploader_wrn_no_content_text">Ni prejete vsebine. Ni datotek za pošiljanje.</string>
   <string name="uploader_error_forbidden_content">Oblak %1$s nima nastavljenih dovoljenj za dostop do vsebine v souporabi</string>
   <string name="uploader_info_uploading">Pošiljanje</string>
+  <string name="file_list_seconds_ago">pred nekaj sekundami</string>
   <string name="file_list_empty">Tukaj še ni ničesar. Najprej je treba datoteke poslati v oblak!</string>
   <string name="file_list_loading">Poteka nalaganje ...</string>
   <string name="local_file_list_empty">V tej mapi ni datotek.</string>

+ 2 - 0
res/values-sq/strings.xml

@@ -24,6 +24,7 @@
   <string name="uploader_wrn_no_account_setup_btn_text">Ndërto</string>
   <string name="uploader_wrn_no_account_quit_btn_text">Dil</string>
   <string name="uploader_info_uploading">Ngarko</string>
+  <string name="file_list_seconds_ago">sekonda më parë</string>
   <string name="file_list_empty">Këtu nuk ka asgje. Ngarko dicka</string>
   <string name="filedetails_select_file">Trokitje e lehtë në një dokument për të shfaqur informacion shtesë.</string>
   <string name="filedetails_size">Dimensioni:</string>
@@ -31,6 +32,7 @@
   <string name="filedetails_created">Krijuar:</string>
   <string name="filedetails_modified">Modifikuar:</string>
   <string name="filedetails_download">Shkarko</string>
+  <string name="action_share_file">Ndaje lidhjen</string>
   <string name="common_yes">Po</string>
   <string name="common_no">Jo</string>
   <string name="common_ok">Ok</string>

+ 1 - 0
res/values-sr-rSP/strings.xml

@@ -17,6 +17,7 @@
   <string name="uploader_btn_upload_text">Pošalji</string>
   <string name="uploader_wrn_no_account_title">Nalog nije nađen</string>
   <string name="uploader_info_uploading">Šalje se</string>
+  <string name="file_list_seconds_ago">Pre par sekundi</string>
   <string name="file_list_empty">Ovde nema ničeg. Pošaljite nešto!</string>
   <string name="filedetails_size">Veličina:</string>
   <string name="filedetails_type">Tip:</string>

+ 1 - 0
res/values-sr/strings.xml

@@ -22,6 +22,7 @@
   <string name="uploader_wrn_no_content_title">Нема садржаја за отпремање</string>
   <string name="uploader_wrn_no_content_text">Садржај није примљен. Нема ништа да се отпреми.</string>
   <string name="uploader_info_uploading">Отпремање</string>
+  <string name="file_list_seconds_ago">пре неколико секунди</string>
   <string name="file_list_empty">Овде нема ничег. Отпремите нешто!</string>
   <string name="filedetails_select_file">Додирните датотеку ради приказа додатних информација.</string>
   <string name="filedetails_size">Величина:</string>

+ 1 - 0
res/values-sv/strings.xml

@@ -51,6 +51,7 @@
   <string name="uploader_wrn_no_content_text">Inget innehåll mottaget. Inget att ladda upp.</string>
   <string name="uploader_error_forbidden_content">%1$s har inte rättighet till det delade innehållet</string>
   <string name="uploader_info_uploading">Laddar upp</string>
+  <string name="file_list_seconds_ago">sekunder sedan</string>
   <string name="file_list_empty">Ingenting här. Ladda upp något!</string>
   <string name="file_list_loading">Laddar...</string>
   <string name="local_file_list_empty">Det finns inga filer i den här mappen.</string>

+ 1 - 0
res/values-ta-rLK/strings.xml

@@ -27,6 +27,7 @@
   <string name="uploader_wrn_no_content_text">ஒரு உள்ளடக்கமும் பெறப்படவில்லை. பதிவேற்றுவதற்கு ஒன்றும் இல்லை</string>
   <string name="uploader_error_forbidden_content">பகிரப்பட்ட உள்ளடக்ககங்களை அணுகுவதற்கு %1$s  அனுமதிக்கமாட்டாது</string>
   <string name="uploader_info_uploading">பதிவேற்றல்</string>
+  <string name="file_list_seconds_ago">செக்கன்களுக்கு முன்</string>
   <string name="file_list_empty">இங்கு ஒன்றும் இல்லை. ஏதாவது பதிவேற்றுக!</string>
   <string name="filedetails_select_file">மேலதிக தகவல்களை காட்சிப்படுத்துவதற்கு கோப்பின் மேல் தட்டுக.</string>
   <string name="filedetails_size">அளவு:</string>

+ 1 - 0
res/values-te/strings.xml

@@ -9,6 +9,7 @@
   <string name="prefs_help">సహాయం</string>
   <string name="auth_username">వాడుకరి పేరు</string>
   <string name="auth_password">సంకేతపదం</string>
+  <string name="file_list_seconds_ago">క్షణాల క్రితం</string>
   <string name="common_yes">అవును</string>
   <string name="common_no">కాదు</string>
   <string name="common_ok">సరే</string>

+ 1 - 0
res/values-th-rTH/strings.xml

@@ -29,6 +29,7 @@
   <string name="uploader_wrn_no_content_text">ยังไม่ได้รับเนื้อหา ไม่มีอะไรให้ต้องอัพโหลด</string>
   <string name="uploader_error_forbidden_content">%1$s ไม่อนุญาตให้เข้าถึงเนื้อหาที่ถูกแชร์ไว้</string>
   <string name="uploader_info_uploading">กำลังอัพโหลด</string>
+  <string name="file_list_seconds_ago">วินาที ก่อนหน้านี้</string>
   <string name="file_list_empty">ยังไม่มีไฟล์ใดๆอยู่ที่นี่ กรุณาอัพโหลดไฟล์!</string>
   <string name="filedetails_select_file">แตะที่ไฟล์ เพื่อแสดงข้อมูลเพิ่มเติม</string>
   <string name="filedetails_size">ขนาด:</string>

+ 1 - 0
res/values-tr/strings.xml

@@ -59,6 +59,7 @@
   <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_seconds_ago">saniyeler önce</string>
   <string name="file_list_empty">Burada hiçbir şey yok. Bir şeyler yükleyin!</string>
   <string name="file_list_loading">Yükleniyor...</string>
   <string name="local_file_list_empty">Bu klasörde dosya yok.</string>

+ 1 - 0
res/values-uk/strings.xml

@@ -57,6 +57,7 @@
   <string name="uploader_wrn_no_content_text">Не отримано даних. Нічого завантажувати.</string>
   <string name="uploader_error_forbidden_content">%1$s не може отримати доступ до спільного контенту</string>
   <string name="uploader_info_uploading">Завантаження</string>
+  <string name="file_list_seconds_ago">секунди тому</string>
   <string name="file_list_empty">Тут нічого немає. Відвантажте що-небудь!</string>
   <string name="file_list_loading">Завантаження...</string>
   <string name="local_file_list_empty">В цій теці немає файлів.</string>

+ 1 - 0
res/values-ur-rPK/strings.xml

@@ -9,6 +9,7 @@
   <string name="auth_username">یوزر نیم</string>
   <string name="auth_password">پاسورڈ</string>
   <string name="setup_btn_connect">منسلک</string>
+  <string name="file_list_seconds_ago">سیکنڈز پہلے</string>
   <string name="filedetails_download">ڈاؤن لوڈ،</string>
   <string name="action_share_file">اشتراک لنک</string>
   <string name="common_yes">ہاں</string>

+ 1 - 0
res/values-vi/strings.xml

@@ -45,6 +45,7 @@
   <string name="uploader_wrn_no_content_text">Không có nội dung được nhận. Không có gì để tải lên.</string>
   <string name="uploader_error_forbidden_content">%1$s không cho phép truy cập vào các nội dung chia sẻ</string>
   <string name="uploader_info_uploading">Đang tải lên</string>
+  <string name="file_list_seconds_ago">vài giây trước</string>
   <string name="file_list_empty">Không có gì ở đây .Hãy tải lên một cái gì đó !</string>
   <string name="filedetails_select_file">Tap vào một tập tin để hiển thị thêm thông tin</string>
   <string name="filedetails_size">Kích thước:</string>

+ 1 - 0
res/values-zh-rCN/strings.xml

@@ -52,6 +52,7 @@
   <string name="uploader_wrn_no_content_text">没有接收到内容,无可上传。</string>
   <string name="uploader_error_forbidden_content">%1$s未被允许访问共享内容。</string>
   <string name="uploader_info_uploading">上传</string>
+  <string name="file_list_seconds_ago">秒前</string>
   <string name="file_list_empty">这里还什么都没有。上传些东西吧!</string>
   <string name="file_list_loading">载入中....</string>
   <string name="local_file_list_empty">在该文件夹中不存在文件。</string>

+ 1 - 0
res/values-zh-rHK/strings.xml

@@ -25,6 +25,7 @@
   <string name="uploader_wrn_no_account_setup_btn_text">設定</string>
   <string name="uploader_wrn_no_account_quit_btn_text">退出</string>
   <string name="uploader_info_uploading">正在上戴</string>
+  <string name="file_list_seconds_ago">秒前</string>
   <string name="filedetails_select_file">按一下文件顯示更多資料。</string>
   <string name="filedetails_size">大小:</string>
   <string name="filedetails_type">類別:</string>

+ 9 - 0
res/values-zh-rTW/strings.xml

@@ -11,6 +11,12 @@
   <string name="actionbar_settings">設定</string>
   <string name="actionbar_see_details">詳細資料</string>
   <string name="actionbar_send_file">寄出</string>
+  <string name="actionbar_sort">排序</string>
+  <string name="actionbar_sort_title">排序依照</string>
+  <string-array name="actionbar_sortby">
+    <item>A-Z</item>
+    <item>最新 - 最舊</item>
+  </string-array>
   <!--TODO re-enable when server-side folder size calculation is available   
     	<item>Biggest - Smallest</item>-->
   <string name="prefs_category_general">一般</string>
@@ -32,6 +38,8 @@
   <string name="prefs_recommend">推薦給朋友</string>
   <string name="prefs_feedback">反饋</string>
   <string name="prefs_imprint">法律聲明</string>
+  <string name="prefs_remember_last_share_location">記住分享位置</string>
+  <string name="prefs_remember_last_upload_location_summary">記住上次分享上傳位置</string>
   <string name="recommend_subject">在您的手機中試用%1$s!</string>
   <string name="recommend_text">我想邀請您在您的手機上使用 %1$s ! 可以由這兒下載: %2$s</string>
   <string name="auth_check_server">檢查伺服器</string>
@@ -51,6 +59,7 @@
   <string name="uploader_wrn_no_content_text">沒接到任何內容。沒有什麼可上載。</string>
   <string name="uploader_error_forbidden_content">%1$s 並沒有被允許存取分享的內容</string>
   <string name="uploader_info_uploading">上傳中</string>
+  <string name="file_list_seconds_ago">幾秒前</string>
   <string name="file_list_empty">這裡還沒有東西,上傳一些吧!</string>
   <string name="file_list_loading">載入中…</string>
   <string name="local_file_list_empty">這個目錄中沒有任何檔案.</string>

+ 5 - 0
res/values/strings.xml

@@ -62,9 +62,14 @@
     <string name="uploader_wrn_no_content_text">No content was received. Nothing to upload.</string>
     <string name="uploader_error_forbidden_content">%1$s is not allowed to access the shared content</string>
     <string name="uploader_info_uploading">Uploading</string>
+    <string name="file_list_seconds_ago">seconds ago</string>
     <string name="file_list_empty">Nothing in here. Upload something!</string>
     <string name="file_list_loading">Loading...</string>
     <string name="local_file_list_empty">There are no files in this folder.</string>
+    <string name="file_list_folder">folder</string>
+    <string name="file_list_folders">folders</string>
+    <string name="file_list_file">file</string>
+    <string name="file_list_files">files</string>
     <string name="filedetails_select_file">Tap on a file to display additional information.</string>
     <string name="filedetails_size">Size:</string>
     <string name="filedetails_type">Type:</string>

+ 36 - 12
src/com/owncloud/android/files/services/FileUploader.java

@@ -73,6 +73,7 @@ import com.owncloud.android.operations.common.SyncOperation;
 import com.owncloud.android.ui.activity.FileActivity;
 import com.owncloud.android.ui.activity.FileDisplayActivity;
 import com.owncloud.android.utils.ErrorMessageAdapter;
+import com.owncloud.android.utils.UriUtils;
 
 
 
@@ -120,6 +121,9 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
     private NotificationCompat.Builder mNotificationBuilder;
     private int mLastPercent;
 
+    private static final String MIME_TYPE_PDF = "application/pdf";
+    private static final String FILE_EXTENSION_PDF = ".pdf";
+
     
     public static String getUploadFinishMessage() {
         return FileUploader.class.getName().toString() + UPLOAD_FINISH_MESSAGE;
@@ -646,18 +650,6 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
 
     private OCFile obtainNewOCFileToUpload(String remotePath, String localPath, String mimeType,
             FileDataStorageManager storageManager) {
-        OCFile newFile = new OCFile(remotePath);
-        newFile.setStoragePath(localPath);
-        newFile.setLastSyncDateForProperties(0);
-        newFile.setLastSyncDateForData(0);
-
-        // size
-        if (localPath != null && localPath.length() > 0) {
-            File localFile = new File(localPath);
-            newFile.setFileLength(localFile.length());
-            newFile.setLastSyncDateForData(localFile.lastModified());
-        } // don't worry about not assigning size, the problems with localPath
-          // are checked when the UploadFileOperation instance is created
 
         // MIME type
         if (mimeType == null || mimeType.length() <= 0) {
@@ -671,6 +663,25 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
         if (mimeType == null) {
             mimeType = "application/octet-stream";
         }
+
+        if (isPdfFileFromContentProviderWithoutExtension(localPath, mimeType)){
+            remotePath += FILE_EXTENSION_PDF;
+        }
+
+        OCFile newFile = new OCFile(remotePath);
+        newFile.setStoragePath(localPath);
+        newFile.setLastSyncDateForProperties(0);
+        newFile.setLastSyncDateForData(0);
+
+        // size
+        if (localPath != null && localPath.length() > 0) {
+            File localFile = new File(localPath);
+            newFile.setFileLength(localFile.length());
+            newFile.setLastSyncDateForData(localFile.lastModified());
+        } // don't worry about not assigning size, the problems with localPath
+          // are checked when the UploadFileOperation instance is created
+
+
         newFile.setMimetype(mimeType);
 
         return newFile;
@@ -856,4 +867,17 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
         sendStickyBroadcast(end);
     }
 
+    /**
+     * Checks if content provider, using the content:// scheme, returns a file with mime-type 
+     * 'application/pdf' but file has not extension
+     * @param localPath
+     * @param mimeType
+     * @return true if is needed to add the pdf file extension to the file
+     */
+    private boolean isPdfFileFromContentProviderWithoutExtension(String localPath, String mimeType) {
+        return localPath.startsWith(UriUtils.URI_CONTENT_SCHEME) && 
+                mimeType.equals(MIME_TYPE_PDF) && 
+                !localPath.endsWith(FILE_EXTENSION_PDF);
+    }
+
 }

+ 73 - 47
src/com/owncloud/android/operations/UploadFileOperation.java

@@ -31,11 +31,16 @@ import java.util.concurrent.atomic.AtomicBoolean;
 import org.apache.commons.httpclient.methods.PutMethod;
 import org.apache.commons.httpclient.methods.RequestEntity;
 
+import android.accounts.Account;
+import android.content.Context;
+import android.net.Uri;
+
+import com.owncloud.android.MainApp;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.files.services.FileUploader;
-import com.owncloud.android.lib.common.network.ProgressiveDataTransferer;
-import com.owncloud.android.lib.common.network.OnDatatransferProgressListener;
 import com.owncloud.android.lib.common.OwnCloudClient;
+import com.owncloud.android.lib.common.network.OnDatatransferProgressListener;
+import com.owncloud.android.lib.common.network.ProgressiveDataTransferer;
 import com.owncloud.android.lib.common.operations.OperationCancelledException;
 import com.owncloud.android.lib.common.operations.RemoteOperation;
 import com.owncloud.android.lib.common.operations.RemoteOperationResult;
@@ -45,9 +50,7 @@ import com.owncloud.android.lib.resources.files.ChunkedUploadRemoteFileOperation
 import com.owncloud.android.lib.resources.files.ExistenceCheckRemoteOperation;
 import com.owncloud.android.lib.resources.files.UploadRemoteFileOperation;
 import com.owncloud.android.utils.FileStorageUtils;
-
-import android.accounts.Account;
-import android.content.Context;
+import com.owncloud.android.utils.UriUtils;
 
 
 /**
@@ -92,10 +95,9 @@ public class UploadFileOperation extends RemoteOperation {
             throw new IllegalArgumentException("Illegal NULL account in UploadFileOperation creation");
         if (file == null)
             throw new IllegalArgumentException("Illegal NULL file in UploadFileOperation creation");
-        if (file.getStoragePath() == null || file.getStoragePath().length() <= 0
-                || !(new File(file.getStoragePath()).exists())) {
+        if (file.getStoragePath() == null || file.getStoragePath().length() <= 0) {
             throw new IllegalArgumentException(
-                    "Illegal file in UploadFileOperation; storage path invalid or file not found: "
+                    "Illegal file in UploadFileOperation; storage path invalid: "
                             + file.getStoragePath());
         }
 
@@ -218,52 +220,77 @@ public class UploadFileOperation extends RemoteOperation {
                                    // copied
 
                 } else {
+
                     String temporalPath = FileStorageUtils.getTemporalPath(mAccount.name) + mFile.getRemotePath();
                     mFile.setStoragePath(temporalPath);
                     temporalFile = new File(temporalPath);
-                    if (!mOriginalStoragePath.equals(temporalPath)) { // preventing
-                                                                      // weird
-                                                                      // but
-                                                                      // possible
-                                                                      // situation
-                        InputStream in = null;
-                        OutputStream out = null;
-                        try {
-                            File temporalParent = temporalFile.getParentFile();
-                            temporalParent.mkdirs();
-                            if (!temporalParent.isDirectory()) {
-                                throw new IOException("Unexpected error: parent directory could not be created");
-                            }
-                            temporalFile.createNewFile();
-                            if (!temporalFile.isFile()) {
-                                throw new IOException("Unexpected error: target file could not be created");
-                            }
-                            in = new FileInputStream(originalFile);
+
+                    File temporalParent = temporalFile.getParentFile();
+                    temporalParent.mkdirs();
+                    if (!temporalParent.isDirectory()) {
+                        throw new IOException("Unexpected error: parent directory could not be created");
+                    }
+                    temporalFile.createNewFile();
+                    if (!temporalFile.isFile()) {
+                        throw new IOException("Unexpected error: target file could not be created");
+                    }
+
+                    InputStream in = null;
+                    OutputStream out = null;
+
+                    try {
+
+                        // In case document provider schema as 'content://'
+                        if (mOriginalStoragePath.startsWith(UriUtils.URI_CONTENT_SCHEME)) {
+
+                            Uri uri = Uri.parse(mOriginalStoragePath);
+
+                            in = MainApp.getAppContext().getContentResolver().openInputStream(uri);
                             out = new FileOutputStream(temporalFile);
-                            byte[] buf = new byte[1024];
-                            int len;
-                            while ((len = in.read(buf)) > 0) {
-                                out.write(buf, 0, len);
-                            }
 
-                        } catch (Exception e) {
-                            result = new RemoteOperationResult(ResultCode.LOCAL_STORAGE_NOT_COPIED);
-                            return result;
-
-                        } finally {
-                            try {
-                                if (in != null)
-                                    in.close();
-                            } catch (Exception e) {
-                                Log_OC.d(TAG, "Weird exception while closing input stream for " + mOriginalStoragePath + " (ignoring)", e);
+                            int nRead;
+                            byte[] data = new byte[16384];
+
+                            while ((nRead = in.read(data, 0, data.length)) != -1) {
+                                out.write(data, 0, nRead);
                             }
-                            try {
-                                if (out != null)
-                                    out.close();
-                            } catch (Exception e) {
-                                Log_OC.d(TAG, "Weird exception while closing output stream for " + expectedPath + " (ignoring)", e);
+
+                            out.flush();
+
+                        } else {
+                            if (!mOriginalStoragePath.equals(temporalPath)) { // preventing
+                                                                          // weird
+                                                                          // but
+                                                                          // possible
+                                                                          // situation
+
+                                in = new FileInputStream(originalFile);
+                                out = new FileOutputStream(temporalFile);
+                                byte[] buf = new byte[1024];
+                                int len;
+                                while ((len = in.read(buf)) > 0) {
+                                    out.write(buf, 0, len);
+                                }
                             }
                         }
+
+                    } catch (Exception e) {
+                        result = new RemoteOperationResult(ResultCode.LOCAL_STORAGE_NOT_COPIED);
+                        return result;
+
+                    } finally {
+                        try {
+                            if (in != null)
+                                in.close();
+                        } catch (Exception e) {
+                            Log_OC.d(TAG, "Weird exception while closing input stream for " + mOriginalStoragePath + " (ignoring)", e);
+                        }
+                        try {
+                            if (out != null)
+                                out.close();
+                        } catch (Exception e) {
+                            Log_OC.d(TAG, "Weird exception while closing output stream for " + expectedPath + " (ignoring)", e);
+                        }
                     }
                 }
             }
@@ -417,5 +444,4 @@ public class UploadFileOperation extends RemoteOperation {
     public void cancel() {
         mUploadOperation.cancel();
     }
-
 }

+ 106 - 15
src/com/owncloud/android/ui/activity/FileDisplayActivity.java

@@ -33,6 +33,7 @@ import android.app.ProgressDialog;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.ContentResolver;
+import android.content.ContentUris;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
@@ -45,12 +46,16 @@ import android.database.Cursor;
 import android.net.Uri;
 import android.os.Build;
 import android.os.Bundle;
+import android.os.Environment;
 import android.os.IBinder;
 import android.preference.PreferenceManager;
+import android.provider.DocumentsContract;
 import android.provider.MediaStore;
+import android.provider.OpenableColumns;
 import android.support.v4.app.Fragment;
 import android.support.v4.app.FragmentManager;
 import android.support.v4.app.FragmentTransaction;
+import android.util.Log;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.ArrayAdapter;
@@ -104,6 +109,7 @@ import com.owncloud.android.ui.preview.PreviewMediaFragment;
 import com.owncloud.android.ui.preview.PreviewVideoActivity;
 import com.owncloud.android.utils.DisplayUtils;
 import com.owncloud.android.utils.ErrorMessageAdapter;
+import com.owncloud.android.utils.UriUtils;
 
 
 /**
@@ -154,7 +160,7 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener {
     private String DIALOG_UNTRUSTED_CERT;
     
     private OCFile mWaitingToSend;
-    
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         Log_OC.d(TAG, "onCreate() start");
@@ -566,6 +572,11 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener {
             builder.setExpedited(true);
             builder.setManual(true);
             builder.syncOnce();
+
+            // Fix bug in Android Lollipop when you click on refresh the whole account
+            Bundle extras = new Bundle();
+            builder.setExtras(extras);
+
             SyncRequest request = builder.build();
             ContentResolver.requestSync(request);
         }
@@ -667,8 +678,12 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener {
 
     private void requestSimpleUpload(Intent data, int resultCode) {
         String filepath = null;
+        String mimeType = null;
+
+        Uri selectedImageUri = data.getData();
+
         try {
-            Uri selectedImageUri = data.getData();
+            mimeType = getContentResolver().getType(selectedImageUri);
 
             String filemanagerstring = selectedImageUri.getPath();
             String selectedImagePath = getPath(selectedImageUri);
@@ -700,10 +715,34 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener {
         }
         if (!remotepath.endsWith(OCFile.PATH_SEPARATOR))
             remotepath += OCFile.PATH_SEPARATOR;
-        remotepath += new File(filepath).getName();
+
+        if (filepath.startsWith(UriUtils.URI_CONTENT_SCHEME)) {
+
+            Cursor cursor = MainApp.getAppContext().getContentResolver()
+                    .query(Uri.parse(filepath), null, null, null, null, null);
+
+            try {
+                if (cursor != null && cursor.moveToFirst()) {
+                    String displayName = cursor.getString(
+                            cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
+                    Log.i(TAG, "Display Name: " + displayName + "; mimeType: " + mimeType);
+
+                    displayName.replace(File.separatorChar, '_');
+                    displayName.replace(File.pathSeparatorChar, '_');
+                    remotepath += displayName + DisplayUtils.getComposedFileExtension(filepath);
+
+                }
+            } finally {
+                cursor.close();
+            }
+
+        } else {
+            remotepath += new File(filepath).getName();
+        }
 
         i.putExtra(FileUploader.KEY_LOCAL_FILE, filepath);
         i.putExtra(FileUploader.KEY_REMOTE_FILE, remotepath);
+        i.putExtra(FileUploader.KEY_MIME_TYPE, mimeType);
         i.putExtra(FileUploader.KEY_UPLOAD_TYPE, FileUploader.UPLOAD_SINGLE_FILE);
         if (resultCode == UploadFilesActivity.RESULT_OK_AND_MOVE)
             i.putExtra(FileUploader.KEY_LOCAL_BEHAVIOUR, FileUploader.LOCAL_BEHAVIOUR_MOVE);
@@ -883,22 +922,74 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener {
         return dialog;
     }
 
-
     /**
-     * Translates a content URI of an image to a physical path
-     * on the disk
+     * Translates a content URI of an content to a physical path on the disk
+     * 
      * @param uri The URI to resolve
-     * @return The path to the image or null if it could not be found
+     * @return The path to the content or null if it could not be found
      */
     public String getPath(Uri uri) {
-        String[] projection = { MediaStore.Images.Media.DATA };
-        Cursor cursor = managedQuery(uri, projection, null, null, null);
-        if (cursor != null) {
-            int column_index = cursor
-                    .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
-            cursor.moveToFirst();
-            return cursor.getString(column_index);
-        } 
+        final boolean isKitKatOrLater = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
+
+        // DocumentProvider
+        if (isKitKatOrLater && DocumentsContract.isDocumentUri(getApplicationContext(), uri)) {
+            // ExternalStorageProvider
+            if (UriUtils.isExternalStorageDocument(uri)) {
+                final String docId = DocumentsContract.getDocumentId(uri);
+                final String[] split = docId.split(":");
+                final String type = split[0];
+
+                if ("primary".equalsIgnoreCase(type)) {
+                    return Environment.getExternalStorageDirectory() + "/" + split[1];
+                }
+            }
+            // DownloadsProvider
+            else if (UriUtils.isDownloadsDocument(uri)) {
+
+                final String id = DocumentsContract.getDocumentId(uri);
+                final Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"),
+                        Long.valueOf(id));
+
+                return UriUtils.getDataColumn(getApplicationContext(), contentUri, null, null);
+            }
+            // MediaProvider
+            else if (UriUtils.isMediaDocument(uri)) {
+                final String docId = DocumentsContract.getDocumentId(uri);
+                final String[] split = docId.split(":");
+                final String type = split[0];
+
+                Uri contentUri = null;
+                if ("image".equals(type)) {
+                    contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
+                } else if ("video".equals(type)) {
+                    contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
+                } else if ("audio".equals(type)) {
+                    contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
+                }
+
+                final String selection = "_id=?";
+                final String[] selectionArgs = new String[] { split[1] };
+
+                return UriUtils.getDataColumn(getApplicationContext(), contentUri, selection, selectionArgs);
+            }
+            // Documents providers returned as content://...
+            else if (UriUtils.isContentDocument(uri)) {
+                return uri.toString();
+            }
+        }
+        // MediaStore (and general)
+        else if ("content".equalsIgnoreCase(uri.getScheme())) {
+
+            // Return the remote address
+            if (UriUtils.isGooglePhotosUri(uri))
+                return uri.getLastPathSegment();
+
+            return UriUtils.getDataColumn(getApplicationContext(), uri, null, null);
+        }
+        // File
+        else if ("file".equalsIgnoreCase(uri.getScheme())) {
+            return uri.getPath();
+        }
         return null;
     }
 

+ 4 - 40
src/com/owncloud/android/ui/activity/UploadFilesActivity.java

@@ -34,9 +34,6 @@ import android.widget.TextView;
 
 import com.actionbarsherlock.app.ActionBar;
 import com.actionbarsherlock.app.ActionBar.OnNavigationListener;
-import com.actionbarsherlock.internal.view.menu.ActionMenuItemView;
-import com.actionbarsherlock.view.Menu;
-import com.actionbarsherlock.view.MenuInflater;
 import com.actionbarsherlock.view.MenuItem;
 import com.owncloud.android.R;
 import com.owncloud.android.lib.common.utils.Log_OC;
@@ -76,8 +73,6 @@ public class UploadFilesActivity extends FileActivity implements
     private static final String WAIT_DIALOG_TAG = "WAIT";
     private static final String QUERY_TO_MOVE_DIALOG_TAG = "QUERY_TO_MOVE";
     
-    private boolean selectAllToggled = false;
-    private Menu menu;
     
     @Override
     public void onCreate(Bundle savedInstanceState) {
@@ -124,7 +119,6 @@ public class UploadFilesActivity extends FileActivity implements
         actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
         actionBar.setListNavigationCallbacks(mDirectories, this);
         
-        
         // wait dialog
         if (mCurrentDialog != null) {
             mCurrentDialog.dismiss();
@@ -133,15 +127,8 @@ public class UploadFilesActivity extends FileActivity implements
             
         Log_OC.d(TAG, "onCreate() end");
     }
-    @Override
-    public boolean onCreateOptionsMenu(Menu menu) {
-        // Inflate the menu items for use in the action bar
-        MenuInflater inflater = getSherlock().getMenuInflater();
-        inflater.inflate(R.menu.file_select_all, menu);     
-        this.menu = menu;
-        return true;
-    }
- 
+
+
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
         boolean retval = true;
@@ -152,33 +139,12 @@ public class UploadFilesActivity extends FileActivity implements
                 }
                 break;
             }
-            case R.id.actionbar_select_all:{
-                if(selectAllToggled){
-                    toggleOffSelectAll();
-                }else{
-                    toggleOnSelectAll(item);
-                }
-                break;
-            }
             default:
                 retval = super.onOptionsItemSelected(item);
         }
         return retval;
     }
-    public void toggleOffSelectAll(MenuItem item){
-        selectAllToggled = false;
-        item.setIcon(android.R.drawable.checkbox_off_background);
-        mFileListFragment.deselectAll();
-    }
-    public void toggleOffSelectAll(){
-        MenuItem item = menu.findItem(R.id.actionbar_select_all);
-        toggleOffSelectAll(item);
-    }
-    public void toggleOnSelectAll(MenuItem item){
-        selectAllToggled = true;
-        item.setIcon(android.R.drawable.checkbox_on_background);        
-        mFileListFragment.selectAll();
-    }
+
     
     @Override
     public boolean onNavigationItemSelected(int itemPosition, long itemId) {
@@ -209,7 +175,6 @@ public class UploadFilesActivity extends FileActivity implements
             ActionBar actionBar = getSupportActionBar(); 
             actionBar.setDisplayHomeAsUpEnabled(false);
         } 
-        toggleOffSelectAll();
     }
 
     
@@ -277,11 +242,10 @@ public class UploadFilesActivity extends FileActivity implements
      * {@inheritDoc}
      */
     @Override
-    public void onDirectoryClick(File directory) { 
+    public void onDirectoryClick(File directory) {
         pushDirname(directory);
         ActionBar actionBar = getSupportActionBar();
         actionBar.setDisplayHomeAsUpEnabled(true);
-        toggleOffSelectAll();
     }
     
     

+ 1 - 1
src/com/owncloud/android/ui/activity/Uploader.java

@@ -170,7 +170,7 @@ public class Uploader extends SherlockListActivity implements OnItemClickListene
         case DIALOG_MULTIPLE_ACCOUNT:
             CharSequence ac[] = new CharSequence[mAccountManager.getAccountsByType(MainApp.getAccountType()).length];
             for (int i = 0; i < ac.length; ++i) {
-                ac[i] = mAccountManager.getAccountsByType(MainApp.getAccountType())[i].name;
+                ac[i] = DisplayUtils.convertIdn(mAccountManager.getAccountsByType(MainApp.getAccountType())[i].name, false);
             }
             builder.setTitle(R.string.common_choose_account);
             builder.setItems(ac, new OnClickListener() {

+ 10 - 7
src/com/owncloud/android/ui/adapter/FileListListAdapter.java

@@ -29,6 +29,7 @@ import android.content.Context;
 import android.content.SharedPreferences;
 import android.graphics.Bitmap;
 import android.preference.PreferenceManager;
+import android.text.format.DateUtils;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -46,6 +47,7 @@ import com.owncloud.android.datamodel.ThumbnailsCacheManager;
 import com.owncloud.android.datamodel.ThumbnailsCacheManager.AsyncDrawable;
 import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;
 import com.owncloud.android.files.services.FileUploader.FileUploaderBinder;
+import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.ui.activity.ComponentsGetter;
 import com.owncloud.android.utils.DisplayUtils;
 import com.owncloud.android.utils.FileStorageUtils;
@@ -183,9 +185,7 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
                 fileSizeV.setVisibility(View.VISIBLE);
                 fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.getFileLength()));
                 lastModV.setVisibility(View.VISIBLE);
-                lastModV.setText(
-                        DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp())
-                );
+                lastModV.setText(showRelativeTimestamp(file));
                 // this if-else is needed even thoe fav icon is visible by default
                 // because android reuses views in listview
                 if (!file.keepInSync()) {
@@ -253,9 +253,7 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
 //                }
 
                 lastModV.setVisibility(View.VISIBLE);
-                lastModV.setText(
-                        DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp())
-                );
+                lastModV.setText(showRelativeTimestamp(file));
                 checkBoxV.setVisibility(View.GONE);
                 view.findViewById(R.id.imageView3).setVisibility(View.GONE);
 
@@ -517,5 +515,10 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
         mSortAscending = ascending;
         
         sortDirectory();
-    }    
+    }    
+    
+    private CharSequence showRelativeTimestamp(OCFile file){
+        return DisplayUtils.getRelativeDateTimeString(mContext, file.getModificationTimestamp(),
+                DateUtils.SECOND_IN_MILLIS, DateUtils.WEEK_IN_MILLIS, 0);
+    }
 }

+ 23 - 19
src/com/owncloud/android/ui/fragment/ExtendedListFragment.java

@@ -38,14 +38,14 @@ import com.owncloud.android.ui.ExtendedListView;
 import com.owncloud.android.ui.activity.OnEnforceableRefreshListener;
 
 /**
- *  TODO extending SherlockListFragment instead of SherlockFragment 
+ * TODO extending SherlockListFragment instead of SherlockFragment
  */
 public class ExtendedListFragment extends SherlockFragment 
 implements OnItemClickListener, OnEnforceableRefreshListener {
-    
+
     private static final String TAG = ExtendedListFragment.class.getSimpleName();
 
-    private static final String KEY_SAVED_LIST_POSITION = "SAVED_LIST_POSITION"; 
+    private static final String KEY_SAVED_LIST_POSITION = "SAVED_LIST_POSITION";
     private static final String KEY_INDEXES = "INDEXES";
     private static final String KEY_FIRST_POSITIONS= "FIRST_POSITIONS";
     private static final String KEY_TOPS = "TOPS";
@@ -53,7 +53,7 @@ implements OnItemClickListener, OnEnforceableRefreshListener {
     private static final String KEY_EMPTY_LIST_MESSAGE = "EMPTY_LIST_MESSAGE";
 
     protected ExtendedListView mList;
-    
+
     private SwipeRefreshLayout mRefreshLayout;
     private SwipeRefreshLayout mRefreshEmptyLayout;
     private TextView mEmptyListMessage;
@@ -72,18 +72,22 @@ implements OnItemClickListener, OnEnforceableRefreshListener {
         mList.invalidate();
     }
 
+    public void setFooterView(View footer) {
+        mList.addFooterView(footer, null, false);
+        mList.invalidate();
+    }
+
     public ListView getListView() {
         return mList;
     }
-    
-    
+
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
         Log_OC.e(TAG, "onCreateView");
-        
+
         View v = inflater.inflate(R.layout.list_fragment, null);
         mEmptyListMessage = (TextView) v.findViewById(R.id.empty_list_view);
-        mList = (ExtendedListView)(v.findViewById(R.id.list_root));
+        mList = (ExtendedListView) (v.findViewById(R.id.list_root));
         mList.setOnItemClickListener(this);
 
         mList.setDivider(getResources().getDrawable(R.drawable.uploader_list_separator));
@@ -93,7 +97,7 @@ implements OnItemClickListener, OnEnforceableRefreshListener {
             int referencePosition = savedInstanceState.getInt(KEY_SAVED_LIST_POSITION);
             setReferencePosition(referencePosition);
         }
-        
+
         // Pull down refresh
         mRefreshLayout = (SwipeRefreshLayout) v.findViewById(R.id.swipe_refresh_files);
         mRefreshEmptyLayout = (SwipeRefreshLayout) v.findViewById(R.id.swipe_refresh_files_emptyView);
@@ -106,7 +110,6 @@ implements OnItemClickListener, OnEnforceableRefreshListener {
         return v;
     }
 
-    
     /**
      * {@inheritDoc}
      */
@@ -142,14 +145,16 @@ implements OnItemClickListener, OnEnforceableRefreshListener {
         savedInstanceState.putString(KEY_EMPTY_LIST_MESSAGE, getEmptyViewText());
     }
 
-    
     /**
-     * Calculates the position of the item that will be used as a reference to reposition the visible items in the list when
-     * the device is turned to other position. 
+     * Calculates the position of the item that will be used as a reference to
+     * reposition the visible items in the list when the device is turned to
+     * other position.
      * 
-     * THe current policy is take as a reference the visible item in the center of the screen.  
+     * THe current policy is take as a reference the visible item in the center
+     * of the screen.
      * 
-     * @return      The position in the list of the visible item in the center of the screen.
+     * @return The position in the list of the visible item in the center of the
+     *         screen.
      */
     protected int getReferencePosition() {
         if (mList != null) {
@@ -159,11 +164,11 @@ implements OnItemClickListener, OnEnforceableRefreshListener {
         }
     }
 
-    
     /**
      * Sets the visible part of the list from the reference position.
      * 
-     * @param   position    Reference position previously returned by {@link LocalFileListFragment#getReferencePosition()}
+     * @param position Reference position previously returned by
+     *            {@link LocalFileListFragment#getReferencePosition()}
      */
     protected void setReferencePosition(int position) {
         if (mList != null) {
@@ -227,7 +232,7 @@ implements OnItemClickListener, OnEnforceableRefreshListener {
     
     @Override
     public void onItemClick (AdapterView<?> parent, View view, int position, long id) {
-        // to be @overriden  
+        // to be @overriden
     }
 
     @Override
@@ -240,7 +245,6 @@ implements OnItemClickListener, OnEnforceableRefreshListener {
             mOnRefreshListener.onRefresh();
         }
     }
-    
     public void setOnRefreshListener(OnEnforceableRefreshListener listener) {
         mOnRefreshListener = listener;
     }

+ 1 - 21
src/com/owncloud/android/ui/fragment/LocalFileListFragment.java

@@ -98,33 +98,13 @@ public class LocalFileListFragment extends ExtendedListFragment {
         Log_OC.i(TAG, "onActivityCreated() stop");
     }
     
-    public void selectAll(){
-        int numberOfFiles = mAdapter.getCount();
-        for(int i = 0; i < numberOfFiles; i++){
-            File file = (File) mAdapter.getItem(i);
-            if (file != null) {                
-                if (!file.isDirectory()) {  
-                    /// Click on a file
-                    getListView().setItemChecked(i, true);                       
-                    // notify the change to the container Activity
-                    mContainerActivity.onFileClick(file);
-                }
-            }
-        }
-    }
-    
-    public void deselectAll(){        
-        mAdapter = new LocalFileListAdapter(mContainerActivity.getInitialDirectory(), getActivity());
-        setListAdapter(mAdapter);
-    }
     
     /**
      * Checks the file clicked over. Browses inside if it is a directory. Notifies the container activity in any case.
      */
     @Override
     public void onItemClick(AdapterView<?> l, View v, int position, long id) {
-        File file = (File) mAdapter.getItem(position);
-        
+        File file = (File) mAdapter.getItem(position); 
         if (file != null) {
             /// Click on a directory
             if (file.isDirectory()) {

+ 57 - 6
src/com/owncloud/android/ui/fragment/OCFileListFragment.java

@@ -18,8 +18,10 @@
 package com.owncloud.android.ui.fragment;
 
 import java.io.File;
+import java.util.Vector;
 
 import android.app.Activity;
+import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
 import android.support.v4.widget.SwipeRefreshLayout;
@@ -29,6 +31,8 @@ import android.view.MenuItem;
 import android.view.View;
 import android.widget.AdapterView;
 import android.widget.AdapterView.AdapterContextMenuInfo;
+import android.widget.TextView;
+import android.view.LayoutInflater;
 
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.FileDataStorageManager;
@@ -70,6 +74,7 @@ public class OCFileListFragment extends ExtendedListFragment {
    
     private OCFile mFile = null;
     private FileListListAdapter mAdapter;
+    private View mFooterView;
     
     private OCFile mTargetFile;
 
@@ -112,24 +117,28 @@ public class OCFileListFragment extends ExtendedListFragment {
     public void onActivityCreated(Bundle savedInstanceState) {
         super.onActivityCreated(savedInstanceState);
         Log_OC.e(TAG, "onActivityCreated() start");
-        
+
         if (savedInstanceState != null) {
             mFile = savedInstanceState.getParcelable(KEY_FILE);
         }
-        
+
+        mFooterView = ((LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(
+                        R.layout.list_footer, null, false);
+        setFooterView(mFooterView);
+
         Bundle args = getArguments();
         boolean justFolders = (args == null) ? false : args.getBoolean(ARG_JUST_FOLDERS, false); 
         mAdapter = new FileListListAdapter(
                 justFolders,
                 getSherlockActivity(), 
                 mContainerActivity
-        );
+                );
         setListAdapter(mAdapter);
-        
+
         registerForContextMenu(getListView());
         getListView().setOnCreateContextMenuListener(this);
-  }
-    
+    }
+
     /**
      * Saves the current listed folder.
      */
@@ -384,9 +393,51 @@ public class OCFileListFragment extends ExtendedListFragment {
                 mList.setSelectionFromTop(0, 0);
             }
             mFile = directory;
+            
+            // Update Footer
+            TextView footerText = (TextView) mFooterView.findViewById(R.id.footerText);
+            Log_OC.d("footer", String.valueOf(System.currentTimeMillis()));
+            footerText.setText(generateFooterText(directory));
+            Log_OC.d("footer", String.valueOf(System.currentTimeMillis()));
         }
     }
     
+    private String generateFooterText(OCFile directory) {
+        Integer files = 0;
+        Integer folders = 0;
+
+        FileDataStorageManager storageManager = mContainerActivity.getStorageManager();
+        Vector<OCFile> mFiles = storageManager.getFolderContent(mFile);
+
+        for (OCFile ocFile : mFiles) {
+            if (ocFile.isFolder()) {
+                folders++;
+            } else {
+                files++;
+            }
+        }
+
+        String output = "";
+       
+        if (files > 0){
+            if (files == 1) {
+                output = output + files.toString() + " " + getResources().getString(R.string.file_list_file);
+            } else {
+                output = output + files.toString() + " " + getResources().getString(R.string.file_list_files);
+            }
+        }
+        if (folders > 0 && files > 0){
+            output = output + ", ";
+        }
+        if (folders == 1) {
+            output = output + folders.toString() + " " + getResources().getString(R.string.file_list_folder);
+        } else if (folders > 1) {
+            output = output + folders.toString() + " " + getResources().getString(R.string.file_list_folders);
+        }
+        
+        return output;
+    }
+    
     public void sortByName(boolean descending) {
         mAdapter.setSortOrder(FileListListAdapter.SORT_NAME, descending);
     }

+ 46 - 0
src/com/owncloud/android/utils/DisplayUtils.java

@@ -27,7 +27,10 @@ import java.util.HashSet;
 import java.util.Set;
 
 import android.annotation.TargetApi;
+import android.content.Context;
 import android.os.Build;
+import android.text.format.DateFormat;
+import android.text.format.DateUtils;
 
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
@@ -274,4 +277,47 @@ public class DisplayUtils {
             return url;
         }
     }
+
+    /**
+     * Get the file extension if it is on path as type "content://.../DocInfo.doc"
+     * @param filepath: Content Uri converted to string format
+     * @return String: fileExtension (type '.pdf'). Empty if no extension
+     */
+    public static String getComposedFileExtension(String filepath) {
+        String fileExtension = "";
+        String fileNameInContentUri = filepath.substring(filepath.lastIndexOf("/"));
+
+        // Check if extension is included in uri
+        int pos = fileNameInContentUri.lastIndexOf('.');
+        if (pos >= 0) {
+            fileExtension = fileNameInContentUri.substring(pos);
+        }
+        return fileExtension;
+    }
+
+    public static CharSequence getRelativeDateTimeString(Context c, long time, long minResolution, long transitionResolution, int flags){
+        CharSequence dateString = "";
+        
+        // in Future
+        if (time > System.currentTimeMillis()){
+            return DisplayUtils.unixTimeToHumanReadable(time);
+        } 
+        // < 60 seconds -> seconds ago
+        else if ((System.currentTimeMillis() - time) < 60 * 1000) {
+            return c.getString(R.string.file_list_seconds_ago);
+        } else {
+            // Workaround 2.x bug (see https://github.com/owncloud/android/issues/716)
+            if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.HONEYCOMB && (System.currentTimeMillis() - time) > 24 * 60 * 60 * 1000){
+                Date date = new Date(time);
+                date.setHours(0);
+                date.setMinutes(0);
+                date.setSeconds(0);
+                dateString = DateUtils.getRelativeDateTimeString(c, date.getTime(), minResolution, transitionResolution, flags);
+            } else {
+                dateString = DateUtils.getRelativeDateTimeString(c, time, minResolution, transitionResolution, flags);
+            }
+        }
+        
+        return dateString.toString().split(",")[0];
+    }
 }

+ 103 - 0
src/com/owncloud/android/utils/UriUtils.java

@@ -0,0 +1,103 @@
+/* ownCloud Android client application
+ *   Copyright (C) 2012-2014 ownCloud Inc.
+ *
+ *   This program is free software: you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License version 2,
+ *   as published by the Free Software Foundation.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+package com.owncloud.android.utils;
+
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
+
+
+/**
+ * A helper class for some Uri operations.
+ */
+public class UriUtils {
+    
+    public static final String URI_CONTENT_SCHEME = "content://";
+    
+    
+    /**
+     * Get the value of the data column for this Uri. This is useful for
+     * MediaStore Uris, and other file-based ContentProviders.
+     * 
+     * @param context The context.
+     * @param uri The Uri to query.
+     * @param selection (Optional) Filter used in the query.
+     * @param selectionArgs (Optional) Selection arguments used in the query.
+     * @return The value of the _data column, which is typically a file path.
+     */
+    public static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) {
+
+        Cursor cursor = null;
+        final String column = "_data";
+        final String[] projection = { column };
+
+        try {
+            cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null);
+            if (cursor != null && cursor.moveToFirst()) {
+
+                final int column_index = cursor.getColumnIndexOrThrow(column);
+                return cursor.getString(column_index);
+            }
+        } finally {
+            if (cursor != null)
+                cursor.close();
+        }
+        return null;
+    }
+
+    /**
+     * @param uri The Uri to check.
+     * @return Whether the Uri authority is ExternalStorageProvider.
+     */
+    public static boolean isExternalStorageDocument(Uri uri) {
+        return "com.android.externalstorage.documents".equals(uri.getAuthority());
+    }
+
+    /**
+     * @param uri The Uri to check.
+     * @return Whether the Uri authority is DownloadsProvider.
+     */
+    public static boolean isDownloadsDocument(Uri uri) {
+        return "com.android.providers.downloads.documents".equals(uri.getAuthority());
+    }
+
+    /**
+     * @param uri The Uri to check.
+     * @return Whether the Uri authority is MediaProvider.
+     */
+    public static boolean isMediaDocument(Uri uri) {
+        return "com.android.providers.media.documents".equals(uri.getAuthority());
+    }
+
+    /**
+     * @param uri The Uri to check.
+     * @return Whether the Uri authority is Google Photos.
+     */
+    public static boolean isGooglePhotosUri(Uri uri) {
+        return "com.google.android.apps.photos.content".equals(uri.getAuthority());
+    }
+
+    /**
+     * 
+     * @param uri The Uri to check.
+     * @return Whether the Uri is from a content provider as kind "content://..."
+     */
+    public static boolean isContentDocument(Uri uri) {
+        return uri.toString().startsWith(URI_CONTENT_SCHEME);
+    }
+}

+ 2 - 2
tests/.classpath

@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="src" path="gen"/>
 	<classpathentry combineaccessrules="false" kind="src" path="/owncloud-android"/>
 	<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
 	<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
 	<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="src" path="gen"/>
 	<classpathentry kind="output" path="bin/classes"/>
 </classpath>