Magnus Sjoqvist 10 years ago
parent
commit
437d3315e0
37 changed files with 393 additions and 71 deletions
  1. 1 1
      owncloud-android-library
  2. 4 4
      res/layout/list_item.xml
  3. 11 0
      res/menu/file_select_all.xml
  4. 2 0
      res/values-bg-rBG/strings.xml
  5. 2 0
      res/values-cs-rCZ/strings.xml
  6. 2 0
      res/values-da/strings.xml
  7. 2 0
      res/values-de-rDE/strings.xml
  8. 2 0
      res/values-de/strings.xml
  9. 4 0
      res/values-el/strings.xml
  10. 2 0
      res/values-en-rGB/strings.xml
  11. 2 0
      res/values-es/strings.xml
  12. 6 0
      res/values-et-rEE/strings.xml
  13. 10 0
      res/values-eu/strings.xml
  14. 3 0
      res/values-fi-rFI/strings.xml
  15. 5 3
      res/values-fr/strings.xml
  16. 5 3
      res/values-id/strings.xml
  17. 2 0
      res/values-it/strings.xml
  18. 9 0
      res/values-ja-rJP/strings.xml
  19. 4 2
      res/values-nl/strings.xml
  20. 2 0
      res/values-pt-rBR/strings.xml
  21. 24 22
      res/values-pt-rPT/strings.xml
  22. 8 0
      res/values-ro/strings.xml
  23. 9 0
      res/values-ru/strings.xml
  24. 2 0
      res/values-sl/strings.xml
  25. 2 0
      res/values-tr/strings.xml
  26. 21 0
      res/values/dims.xml
  27. 4 2
      res/values/strings.xml
  28. 1 1
      src/com/owncloud/android/MainApp.java
  29. 1 0
      src/com/owncloud/android/datamodel/FileDataStorageManager.java
  30. 64 8
      src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java
  31. 6 1
      src/com/owncloud/android/operations/SynchronizeFolderOperation.java
  32. 1 1
      src/com/owncloud/android/ui/activity/FileDisplayActivity.java
  33. 40 4
      src/com/owncloud/android/ui/activity/UploadFilesActivity.java
  34. 91 9
      src/com/owncloud/android/ui/activity/Uploader.java
  35. 4 2
      src/com/owncloud/android/ui/adapter/FileListListAdapter.java
  36. 30 7
      src/com/owncloud/android/ui/fragment/LocalFileListFragment.java
  37. 5 1
      src/com/owncloud/android/utils/DisplayUtils.java

+ 1 - 1
owncloud-android-library

@@ -1 +1 @@
-Subproject commit 99f8c869702a3261d9868207968700277e208507
+Subproject commit d7097983594347167b5bde3fa5b2b4ad1d843392

+ 4 - 4
res/layout/list_item.xml

@@ -32,16 +32,16 @@
 
         <ImageView
             android:id="@+id/imageView2"
-            android:layout_width="32dp"
-            android:layout_height="32dp"
+            android:layout_width="@dimen/file_icon_size"
+            android:layout_height="@dimen/file_icon_size"
             android:layout_gravity="center_vertical"
             android:layout_marginLeft="22dp"
             android:src="@drawable/local_file_indicator" />
 
         <ImageView
             android:id="@+id/imageView1"
-            android:layout_width="32dp"
-            android:layout_height="32dp"
+            android:layout_width="@dimen/file_icon_size"
+            android:layout_height="@dimen/file_icon_size"
             android:layout_gravity="center_vertical"
             android:layout_marginLeft="9dp"
             android:src="@drawable/ic_menu_archive" />

+ 11 - 0
res/menu/file_select_all.xml

@@ -0,0 +1,11 @@
+<?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-bg-rBG/strings.xml

@@ -38,6 +38,8 @@
   <string name="prefs_recommend">Препоръчай на приятел</string>
   <string name="prefs_feedback">Обратна Връзка</string>
   <string name="prefs_imprint">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 на своя смартфон!\nИзтеглия я от тук:%2$s</string>
   <string name="auth_check_server">Проверка на сървъра</string>

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

@@ -38,6 +38,8 @@
   <string name="prefs_recommend">Doporučit přátelům</string>
   <string name="prefs_feedback">Odezva</string>
   <string name="prefs_imprint">Imprint</string>
+  <string name="prefs_remember_last_share_location">Zapamatovat umístění sdílení</string>
+  <string name="prefs_remember_last_upload_location_summary">Zapamatovat poslední umístění pro nahrání sdílených souborů</string>
   <string name="recommend_subject">Zkuste %1$s na vašem smartphonu!</string>
   <string name="recommend_text">Chtěl bych vás pozvat k používání %1$s na vašem chytrém telefonu!\nKe stažení zde: %2$s</string>
   <string name="auth_check_server">Zkontrolovat server</string>

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

@@ -38,6 +38,8 @@
   <string name="prefs_recommend">Anbefal til en ven</string>
   <string name="prefs_feedback">Feedback</string>
   <string name="prefs_imprint">Imprint</string>
+  <string name="prefs_remember_last_share_location">Husk delt placering</string>
+  <string name="prefs_remember_last_upload_location_summary">Husk seneste delte placering for overførsel</string>
   <string name="recommend_subject">Prøv %1$s på din smartphone!</string>
   <string name="recommend_text">Jeg ønsker at invitere dig til at bruge %1$s på din smartphone!\nHent den her: %2$s</string>
   <string name="auth_check_server">Tjek server</string>

+ 2 - 0
res/values-de-rDE/strings.xml

@@ -38,6 +38,8 @@
   <string name="prefs_recommend">Dieses 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="auth_check_server">Server überprüfen</string>

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

@@ -38,6 +38,8 @@
   <string name="prefs_recommend">Empfehle dies einem Freund</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">Probiere %1$s auf Deinem Smartphone!</string>
   <string name="recommend_text">Ich möchte Dich zum Benutzen von %1$s auf Deinem Smartphone einladen!\nLade es hier herunter: %2$s</string>
   <string name="auth_check_server">Überprüfe den Server</string>

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

@@ -11,6 +11,10 @@
   <string name="actionbar_settings">Ρυθμίσεις</string>
   <string name="actionbar_see_details">Λεπτομέρειες</string>
   <string name="actionbar_send_file">Αποστολή</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>

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

@@ -38,6 +38,8 @@
   <string name="prefs_recommend">Recommend to a friend</string>
   <string name="prefs_feedback">Feedback</string>
   <string name="prefs_imprint">Imprint</string>
+  <string name="prefs_remember_last_share_location">Remember share location</string>
+  <string name="prefs_remember_last_upload_location_summary">Remember last share upload location</string>
   <string name="recommend_subject">Try %1$s on your smartphone!</string>
   <string name="recommend_text">I want to invite you to use %1$s on your smartphone!\nDownload here: %2$s</string>
   <string name="auth_check_server">Check Server</string>

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

@@ -38,6 +38,8 @@
   <string name="prefs_recommend">Recomendar a un amigo</string>
   <string name="prefs_feedback">Mensajes de retroalimentación</string>
   <string name="prefs_imprint">pie de imprenta</string>
+  <string name="prefs_remember_last_share_location">Recordar la ubicación de los archivos compartidos</string>
+  <string name="prefs_remember_last_upload_location_summary">Recordar la ubicación de los últimos archivos compartidos subidos</string>
   <string name="recommend_subject">Prueba  %1$s en tu smarthphone!</string>
   <string name="recommend_text">¡Quiero invitarle a usar %1$s en su smartphone!\nDescárguelo aquí: %2$s</string>
   <string name="auth_check_server">Compruebe el servidor.</string>

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

@@ -11,6 +11,12 @@
   <string name="actionbar_settings">Seaded</string>
   <string name="actionbar_see_details">Üksikasjad</string>
   <string name="actionbar_send_file">Saada</string>
+  <string name="actionbar_sort">Sorteeri</string>
+  <string name="actionbar_sort_title">Sorteeri</string>
+  <string-array name="actionbar_sortby">
+    <item>A-Z</item>
+    <item>Uuem - vanem</item>
+  </string-array>
   <!--TODO re-enable when server-side folder size calculation is available   
     	<item>Biggest - Smallest</item>-->
   <string name="prefs_category_general">Üldine</string>

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

@@ -11,6 +11,11 @@
   <string name="actionbar_settings">Ezarpenak</string>
   <string name="actionbar_see_details">Xehetasunak</string>
   <string name="actionbar_send_file">Bidali</string>
+  <string name="actionbar_sort">Ordenatu</string>
+  <string-array name="actionbar_sortby">
+    <item>A-Z</item>
+    <item>Berrienak - Zaharrenak</item>
+  </string-array>
   <!--TODO re-enable when server-side folder size calculation is available   
     	<item>Biggest - Smallest</item>-->
   <string name="prefs_category_general">Orokorra</string>
@@ -238,6 +243,7 @@ Mesedez, baimendu berriz</string>
   <string name="preview_image_description">Irudi aurreikuspena</string>
   <string name="preview_image_error_unknown_format">Ezin da irudi hau erakutsi</string>
   <string name="error__upload__local_file_not_copied">%1$s ezin da %2$s karpeta lokalera kopiatu</string>
+  <string name="prefs_instant_upload_path_title">Igotzetarako Bidea</string>
   <string name="share_link_no_support_share_api">Sentitzen dut, partekatzea ez dago zure zerbitzarian gaituta. Mesedez jarri harremanetan zure administratzailearekin.</string>
   <string name="share_link_file_error">Errore bat egon da fitxategaia edo karpeta partekatzerakoan</string>
   <string name="unshare_link_file_error">Errore bat egon da fitxategaia edo karpeta partekatzeari uzterakoan</string>
@@ -260,8 +266,12 @@ Mesedez, baimendu berriz</string>
   <string name="downloader_download_file_not_found">Fitxategia jadanik ez dago eskuragarri zerbitzarian</string>
   <string name="prefs_category_accounts">Kontuak</string>
   <string name="prefs_add_account">Gehitu kontua</string>
+  <string name="log_mail_subject">ownCloud Android programaren egunerokoak</string>
+  <string name="log_progress_dialog_text">Datuak kargatzen...</string>
   <string name="saml_authentication_required_text">Autentikazioa beharrezkoa</string>
   <string name="saml_authentication_wrong_pass">Pasahitz okerra</string>
+  <string name="actionbar_move">Mugitu</string>
   <string name="move_choose_button_text">Aukeratu</string>
+  <string name="prefs_category_instant_uploading">Berehalako Igoerak</string>
   <string name="prefs_category_security">Segurtasuna</string>
 </resources>

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

@@ -37,6 +37,8 @@
   <string name="prefs_help">Ohje</string>
   <string name="prefs_recommend">Suosittele kaverille</string>
   <string name="prefs_feedback">Palaute</string>
+  <string name="prefs_remember_last_share_location">Muista jaon sijainti</string>
+  <string name="prefs_remember_last_upload_location_summary">Muista viimeisin jaon lähetyssijainti</string>
   <string name="recommend_subject">Kokeile %1$sia älypuhelimellasi!</string>
   <string name="recommend_text">Kutsun sinut käyttämään %1$sia älypuhelimellasi!\nLataa se tästä: %2$s</string>
   <string name="auth_check_server">Tarkista palvelin</string>
@@ -249,6 +251,7 @@
   <string name="downloader_download_file_not_found">Tämä tiedosto ei ole enää palvelimella käytettävissä</string>
   <string name="prefs_category_accounts">Tilit</string>
   <string name="prefs_add_account">Lisää tili</string>
+  <string name="auth_redirect_non_secure_connection_title">Salattu yhteys on ohjattu uudelleen salaamatonta reittiä pitkin.</string>
   <string name="actionbar_logger">Lokit</string>
   <string name="log_send_history_button">Lähetä historia</string>
   <string name="log_mail_subject">ownCloudin Android-sovelluksen lokit</string>

+ 5 - 3
res/values-fr/strings.xml

@@ -38,6 +38,8 @@
   <string name="prefs_recommend">Recommander à un ami</string>
   <string name="prefs_feedback">Commentaires</string>
   <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_text">J\'aimerais vous inviter à utiliser %1$s sur votre smartphone !
 Téléchargez-le ici : %2$s</string>
@@ -88,7 +90,7 @@ Téléchargez-le ici : %2$s</string>
   <string name="upload_chooser_title">Téléverser un fichier depuis…</string>
   <string name="uploader_info_dirname">Nom du dossier</string>
   <string name="uploader_upload_in_progress_ticker">Téléversement…</string>
-  <string name="uploader_upload_in_progress_content">Envoi du fichier %2$s en cours, %1$d%% effectués</string>
+  <string name="uploader_upload_in_progress_content">Envoi du fichier %2$s : %1$d%% effectués</string>
   <string name="uploader_upload_succeeded_ticker">Téléversement réussi</string>
   <string name="uploader_upload_succeeded_content_single">Le fichier %1$s a été envoyé avec succès</string>
   <string name="uploader_upload_failed_ticker">Échec de l\'envoi</string>
@@ -123,7 +125,7 @@ Ci-dessous la liste des fichiers locaux, et les fichiers distants dans %5$s auxq
   <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_remote_text">Distant: %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>
   <string name="pincode_configure_your_pin">Veuillez saisir votre code de sécurité </string>
@@ -205,7 +207,7 @@ Ci-dessous la liste des fichiers locaux, et les fichiers distants dans %5$s auxq
   <string name="filename_forbidden_characters">Caractères interdits : / \\ &lt; &gt; : \" | ? *</string>
   <string name="filename_empty">Le nom du fichier ne peut pas être vide</string>
   <string name="wait_a_moment">Veuillez patienter</string>
-  <string name="filedisplay_unexpected_bad_get_content">Problème inattendu ; veuillez essayer une autre app pour la sélection du fichier</string>
+  <string name="filedisplay_unexpected_bad_get_content">Problème inattendu. Veuillez essayer une autre app pour la sélection du fichier</string>
   <string name="filedisplay_no_file_selected">Aucun fichier sélectionné</string>
   <string name="activity_chooser_title">Envoyer un lien à…</string>
   <string name="oauth_check_onoff">Connexion avec aAuth2.</string>

+ 5 - 3
res/values-id/strings.xml

@@ -38,8 +38,10 @@
   <string name="prefs_recommend">Rekomendasikan ke teman</string>
   <string name="prefs_feedback">Umpan balik</string>
   <string name="prefs_imprint">Jejak</string>
+  <string name="prefs_remember_last_share_location">Ingat lokasi berbagi</string>
+  <string name="prefs_remember_last_upload_location_summary">Ingat lokasi unggahan berbagi terakhir</string>
   <string name="recommend_subject">Cobalah %1$s pada ponsel cerdas Anda!</string>
-  <string name="recommend_text">Saya ingin mengajak Anda untuk menggunakan %1$s di ponsel cerdas Anda!\nUnduh gratis disini: %2$s</string>
+  <string name="recommend_text">Saya mengajak Anda untuk menggunakan %1$s di ponsel cerdas Anda!\nUnduh gratis disini: %2$s</string>
   <string name="auth_check_server">Periksa Server</string>
   <string name="auth_host_url">Alamat server https://…</string>
   <string name="auth_username">Nama Pengguna</string>
@@ -112,7 +114,7 @@
   <string name="sync_fail_in_favourites_content">Konten berkas %1$d tidak dapat disinkronasikan (%2$d konflik)</string>
   <string name="sync_foreign_files_forgotten_ticker">Beberapa berkas lokal terlupakan</string>
   <string name="sync_foreign_files_forgotten_content">%1$d berkas diluar folder %2$s tidak dapat disalin kedalamnya</string>
-  <string name="sync_foreign_files_forgotten_explanation">Sejak versi  1.3.16, berkas-berkas yang diunggah dari piranti ini akan disalin kedalam folder %1$s lokal untuk mencagah kehilangan data ketika berkas tunggal disinkronkan dengan akun lebih dari satu.\n\nAkibat perubahan ini, semua berkas yang diunggah di versi aplikasi sebelumnya disalin kedalam folder %2$s. Namun, sebuah kesalahan mencegah penyelesaian operasi ini saat sinkronisasi berlangsung akun. Anda boleh meninggalkan berkas seperti ini dan menghapus tautan ke %3$s atau memindahkan berkas kedalam folder %1$s dan membiarkan tautan ke %4$s.\n\nYang tampak dibawah adalah berkas lokal, dan berkas remote didalam %5$s yang dihubungkan dengannya.</string>
+  <string name="sync_foreign_files_forgotten_explanation">Sejak versi  1.3.16, berkas-berkas yang diunggah dari piranti ini akan disalin kedalam folder %1$s lokal untuk mencagah kehilangan data saat berkas tunggal disinkronkan dengan akun lebih dari satu.\n\nAkibat perubahan ini, semua berkas yang diunggah di versi aplikasi sebelumnya disalin kedalam folder %2$s. Namun, sebuah kesalahan mencegah penyelesaian operasi ini saat sinkronisasi akun. Anda boleh meninggalkan berkas seperti ini dan menghapus tautan ke %3$s atau memindahkan berkas kedalam folder %1$s dan membiarkan tautan ke %4$s.\n\nYang tampak dibawah adalah berkas lokal, dan berkas remote didalam %5$s yang dihubungkan dengannya.</string>
   <string name="sync_current_folder_was_removed">Folder %1$s tidak ada lagi</string>
   <string name="foreign_files_move">Pindahkan semua</string>
   <string name="foreign_files_success">Semua berkas sudah dipindahkan</string>
@@ -228,7 +230,7 @@
   <string name="ssl_validator_label_signature">Tanda tangan:</string>
   <string name="ssl_validator_label_signature_algorithm">Algoritma:</string>
   <string name="ssl_validator_null_cert">Sertifikat tidak dapat ditampilkan.</string>
-  <string name="ssl_validator_no_info_about_error">- Tidak ada informasi tantang terror</string>
+  <string name="ssl_validator_no_info_about_error">- Tidak ada informasi tantang error</string>
   <string name="placeholder_sentence">Ini adalah placeholder</string>
   <string name="placeholder_filename">placeholder.txt</string>
   <string name="placeholder_filetype">Gambar PNG</string>

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

@@ -38,6 +38,8 @@
   <string name="prefs_recommend">Consiglia ad un amico</string>
   <string name="prefs_feedback">Segnalazioni</string>
   <string name="prefs_imprint">Imprint</string>
+  <string name="prefs_remember_last_share_location">Ricorda la posizione della condivisione</string>
+  <string name="prefs_remember_last_upload_location_summary">Ricorda l\'ultima posizione di caricamento della condivisione</string>
   <string name="recommend_subject">Prova %1$s sul tuo smartphone!</string>
   <string name="recommend_text">Vorrei invitarti a usare %1$s sul tuo smartphone!\nScarica qui: %2$s</string>
   <string name="auth_check_server">Verifica server</string>

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

@@ -13,6 +13,10 @@
   <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>
@@ -34,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>
@@ -243,6 +249,7 @@
   <string name="preview_image_description">イメージプレビュー</string>
   <string name="preview_image_error_unknown_format">この画像は表示できません</string>
   <string name="error__upload__local_file_not_copied">%1$s は、ローカルフォルダー %2$s  にコピーできませんでした。</string>
+  <string name="prefs_instant_upload_path_title">アップロードパス</string>
   <string name="share_link_no_support_share_api">申し訳ございません。共有がサーバー上で有効になっていません。 管理者に
 		ご連絡ください。</string>
   <string name="share_link_file_no_exist">共有できません。ファイルがあるか確認してください。</string>
@@ -268,6 +275,7 @@
   <string name="downloader_download_file_not_found">ファイルはサーバー上で利用できません</string>
   <string name="prefs_category_accounts">アカウント</string>
   <string name="prefs_add_account">アカウントを追加</string>
+  <string name="auth_redirect_non_secure_connection_title">暗号化接続は非暗号化接続にリダイレクトされました。</string>
   <string name="actionbar_logger">ログ</string>
   <string name="log_send_history_button">ログを送信</string>
   <string name="log_mail_subject">ownCloud Android アプリログ</string>
@@ -282,5 +290,6 @@
   <string name="move_file_invalid_overwrite">そのファイルは、宛先フォルダに既に存在しています。</string>
   <string name="move_file_error">このファイルまたはフォルダーを移動する際にエラーが発生しました</string>
   <string name="forbidden_permissions_move">このファイルを移動</string>
+  <string name="prefs_category_instant_uploading">自動アップロード</string>
   <string name="prefs_category_security">セキュリティ</string>
 </resources>

+ 4 - 2
res/values-nl/strings.xml

@@ -38,6 +38,8 @@
   <string name="prefs_recommend">Aanbevelen bij een vriend</string>
   <string name="prefs_feedback">Feedback</string>
   <string name="prefs_imprint">afdruk</string>
+  <string name="prefs_remember_last_share_location">Onthoud de share locatie</string>
+  <string name="prefs_remember_last_upload_location_summary">Onthoud de laatste upload locatie</string>
   <string name="recommend_subject">Probeer %1$s op uw smartphone!</string>
   <string name="recommend_text">Uitnodiging om %1$s op uw smartphone uit te proberen!
 Download hier: %2$s</string>
@@ -68,7 +70,7 @@ Download hier: %2$s</string>
   <string name="filedetails_modified">Aangepast:</string>
   <string name="filedetails_download">Download</string>
   <string name="filedetails_sync_file">Bestand verversen</string>
-  <string name="filedetails_renamed_in_upload_msg">Bestand was hernoemt naar %1$s tijdens het uploaden</string>
+  <string name="filedetails_renamed_in_upload_msg">Bestand is tijdens het uploaden hernoemd naar %1$s</string>
   <string name="action_share_file">Deel link</string>
   <string name="action_unshare_file">Link niet meer delen</string>
   <string name="common_yes">Ja</string>
@@ -117,7 +119,7 @@ Download hier: %2$s</string>
 Door deze aanpassing werden alle bestanden die met een eerdere versie zijn ge-uploaded gekopieerd naar de %2$s map. Maar een fout voorkwam het succesvol afronden van deze actie tijdens het synchroniseren. U kunt de/het bestand(en) laten staan zoals ze nu zijn en de link naar %3$s verwijderen, of u kunt de bestanden verplaatsen naar de %1$s map en de link naar %4$s laten staan.
 Hieronder staan de lokale bestanden en de externe bestanden in %5$s waar ze naar verwezen.</string>
   <string name="sync_current_folder_was_removed">Map %1$s bestaat niet meer</string>
-  <string name="foreign_files_move">Alle verplaatsen</string>
+  <string name="foreign_files_move">Alles verplaatsen</string>
   <string name="foreign_files_success">Alle bestanden zijn verplaatst</string>
   <string name="foreign_files_fail">Een paar bestanden konden niet worden verplaatst</string>
   <string name="foreign_files_local_text">Lokaal: %1$s</string>

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

@@ -38,6 +38,8 @@
   <string name="prefs_recommend">Recomendar a um amigo</string>
   <string name="prefs_feedback">Feedback</string>
   <string name="prefs_imprint">Imprint</string>
+  <string name="prefs_remember_last_share_location">Lembre-se do local de compartilhamento</string>
+  <string name="prefs_remember_last_upload_location_summary">Lembrar do último local de envio de compartilhamento</string>
   <string name="recommend_subject">Tentar %1$s em seu smartfone!</string>
   <string name="recommend_text">Gostaria de convida-lo a usar %1$s em seu smartphone!\nBaixe aqui: %2$s</string>
   <string name="auth_check_server">Verificar Servidor</string>

+ 24 - 22
res/values-pt-rPT/strings.xml

@@ -2,9 +2,9 @@
 <resources>
   <string name="about_android">%1$s Aplicação(ões) Android</string>
   <string name="about_version">versão %1$s</string>
-  <string name="actionbar_sync">Actualizar</string>
+  <string name="actionbar_sync">Atualizar conta</string>
   <string name="actionbar_upload">Enviar</string>
-  <string name="actionbar_upload_from_apps">Conteúdo das outras apps</string>
+  <string name="actionbar_upload_from_apps">Conteúdo de outras apps</string>
   <string name="actionbar_upload_files">Ficheiros</string>
   <string name="actionbar_open_with">Abrir com</string>
   <string name="actionbar_mkdir">Nova Pasta</string>
@@ -22,22 +22,24 @@
   <string name="prefs_category_general">Geral</string>
   <string name="prefs_category_more">Mais</string>
   <string name="prefs_accounts">Contas</string>
-  <string name="prefs_manage_accounts">Gerir contas</string>
-  <string name="prefs_pincode">App PIN</string>
+  <string name="prefs_manage_accounts">Gerir Contas</string>
+  <string name="prefs_pincode">PIN da App</string>
   <string name="prefs_pincode_summary">Proteja o seu cliente</string>
-  <string name="prefs_instant_upload">Transferência instantânea de imagens</string>
-  <string name="prefs_instant_upload_summary">Transferência instantânea de imagens tiradas com câmara</string>
+  <string name="prefs_instant_upload">Envios instantâneos de imagens</string>
+  <string name="prefs_instant_upload_summary">Envio instantâneo de imagens tiradas com a câmara</string>
   <string name="prefs_instant_video_upload">Envios instantâneos dos vídeos</string>
-  <string name="prefs_instant_video_upload_summary">Carregamento instantâneo de vídeos registados com a camera  </string>
-  <string name="prefs_log_title">Ativar Rastreio</string>
-  <string name="prefs_log_summary">Isto é usado para registar problemas</string>
-  <string name="prefs_log_title_history">Historico do rastreio</string>
+  <string name="prefs_instant_video_upload_summary">Envio instantâneo de vídeos gravados com a câmara  </string>
+  <string name="prefs_log_title">Ativar Registo de Eventos</string>
+  <string name="prefs_log_summary">Isto é utilizado para registar problemas</string>
+  <string name="prefs_log_title_history">Histórico dos Registos</string>
   <string name="prefs_log_summary_history">Isto mostra os registos guardados</string>
-  <string name="prefs_log_delete_history_button">Eliminar Histórico</string>
+  <string name="prefs_log_delete_history_button">Apagar Histórico</string>
   <string name="prefs_help">Ajuda</string>
   <string name="prefs_recommend">Recomendar a um amigo</string>
-  <string name="prefs_feedback">Resposta</string>
+  <string name="prefs_feedback">Feedback</string>
   <string name="prefs_imprint">Imprint</string>
+  <string name="prefs_remember_last_share_location">Lembrar localização de partilha</string>
+  <string name="prefs_remember_last_upload_location_summary">Lembrar da última localização de envio de partilha</string>
   <string name="recommend_subject">Experimente %1$s no seu smartphone!</string>
   <string name="recommend_text">Quero convidar-te a usares %1$s no teu smartphone!\nFaz download aqui: %2$s</string>
   <string name="auth_check_server">Verificar Servidor</string>
@@ -58,42 +60,42 @@
   <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_empty">Vazio. Envie alguma coisa!</string>
-  <string name="file_list_loading">A carregar...</string>
+  <string name="file_list_loading">A carregar ...</string>
   <string name="local_file_list_empty">Não existem ficheiros nesta pasta.</string>
   <string name="filedetails_select_file">Clique no ficheiro para visualizar informação adicional.</string>
   <string name="filedetails_size">Tamanho:</string>
   <string name="filedetails_type">Tipo:</string>
   <string name="filedetails_created">Criado:</string>
   <string name="filedetails_modified">Modificado:</string>
-  <string name="filedetails_download">Descarregar</string>
+  <string name="filedetails_download">Transferir</string>
   <string name="filedetails_sync_file">Atualizar ficheiro</string>
   <string name="filedetails_renamed_in_upload_msg">O nome do ficheiro foi alterado para %1$s durante o envio.</string>
-  <string name="action_share_file">Partilhar o link</string>
+  <string name="action_share_file">Partilhar a hiperligação</string>
   <string name="action_unshare_file">Deixar de partilhar a ligação</string>
   <string name="common_yes">Sim</string>
   <string name="common_no">Não</string>
   <string name="common_ok">OK</string>
   <string name="common_cancel_download">Cancelar a transferência</string>
-  <string name="common_cancel_upload">Cancelar envio</string>
+  <string name="common_cancel_upload">Cancelar o envio</string>
   <string name="common_cancel">Cancelar</string>
   <string name="common_save_exit">Guardar &amp; Sair</string>
   <string name="common_error">Erro</string>
-  <string name="common_loading">A carregar...</string>
+  <string name="common_loading">A carregar ...</string>
   <string name="common_error_unknown">Erro Desconhecido</string>
   <string name="about_title">Sobre</string>
-  <string name="change_password">Alterar palavra-chave</string>
+  <string name="change_password">Alterar senha</string>
   <string name="delete_account">Apagar conta</string>
   <string name="create_account">Criar conta</string>
-  <string name="upload_chooser_title">Carregar de...</string>
+  <string name="upload_chooser_title">Enviar de ...</string>
   <string name="uploader_info_dirname">Nome da pasta</string>
-  <string name="uploader_upload_in_progress_ticker">A carregar...</string>
+  <string name="uploader_upload_in_progress_ticker">A enviar ...</string>
   <string name="uploader_upload_in_progress_content">A enviar %1$d%% , %2$s completo.</string>
   <string name="uploader_upload_succeeded_ticker">Carregado com sucesso</string>
   <string name="uploader_upload_succeeded_content_single">%1$s foi carregado com sucesso</string>
   <string name="uploader_upload_failed_ticker">Carregamento falhou</string>
   <string name="uploader_upload_failed_content_single">O envio do ficheiro %1$s não foi concluído.</string>
   <string name="uploader_upload_failed_credentials_error">Falha no carregamento, é necessário fazer novo login</string>
-  <string name="downloader_download_in_progress_ticker">A descarregar...</string>
+  <string name="downloader_download_in_progress_ticker">A transferir ...</string>
   <string name="downloader_download_in_progress_content">%1$d%% A decarregar %2$s</string>
   <string name="downloader_download_succeeded_ticker">Descarga com sucesso</string>
   <string name="downloader_download_succeeded_content">%1$s foi descarregado com sucesso</string>
@@ -105,7 +107,7 @@
   <string name="sync_fail_ticker">Falhou a sincronização</string>
   <string name="sync_fail_ticker_unauthorized">Falhou a sincronização, necessita fazer um novo login</string>
   <string name="sync_fail_content">Não foi possível sincronizar %1$s</string>
-  <string name="sync_fail_content_unauthorized">Password inválida para %1$s</string>
+  <string name="sync_fail_content_unauthorized">Senha inválida para %1$s</string>
   <string name="sync_conflicts_in_favourites_ticker">Foram encontrados conflitos</string>
   <string name="sync_conflicts_in_favourites_content">Não foi possível sincronizar o ficheiro %1$d</string>
   <string name="sync_fail_in_favourites_ticker">Falhou a operação de manter os ficheiros sincronizados</string>

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

@@ -11,6 +11,8 @@
   <string name="actionbar_settings">Setări</string>
   <string name="actionbar_see_details">Detalii</string>
   <string name="actionbar_send_file">Expediază</string>
+  <string name="actionbar_sort">Sortare</string>
+  <string name="actionbar_sort_title">Sortare după</string>
   <!--TODO re-enable when server-side folder size calculation is available   
     	<item>Biggest - Smallest</item>-->
   <string name="prefs_category_general">General</string>
@@ -259,7 +261,13 @@
   <string name="uploader_upload_forbidden_permissions">pentru a încărca în acest folder</string>
   <string name="downloader_download_file_not_found">Fișierul nu mai este disponibil pe server</string>
   <string name="prefs_category_accounts">Conturi</string>
+  <string name="prefs_add_account">Adaugă cont</string>
+  <string name="log_progress_dialog_text">Se încarcă datele...</string>
+  <string name="saml_authentication_required_text">Autentificare necesară</string>
   <string name="saml_authentication_wrong_pass">Parolă greșită</string>
+  <string name="actionbar_move">Mutare</string>
+  <string name="file_list_empty_moving">Nu este nimic aici. Poți adăuga un director!</string>
   <string name="move_choose_button_text">Alege</string>
+  <string name="forbidden_permissions_move">pentru a muta acest fișier</string>
   <string name="prefs_category_security">Securitate</string>
 </resources>

+ 9 - 0
res/values-ru/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>А-Я</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>
@@ -241,6 +247,7 @@
   <string name="preview_image_description">Предпросмотр</string>
   <string name="preview_image_error_unknown_format">Это изображение не может быть отображено</string>
   <string name="error__upload__local_file_not_copied">%1$s не возможно скопировать в локальною папку %2$s </string>
+  <string name="prefs_instant_upload_path_title">Путь для загрузки</string>
   <string name="share_link_no_support_share_api">К сожалению, на вашем сервере отключен совместный доступ. Пожалуйста, свяжитесь с вашим администратором.</string>
   <string name="share_link_file_no_exist">Невозможно добавить в общий доступ. Пожалуйста, проверьте, существует ли файл</string>
   <string name="share_link_file_error">Ошибка предоставления общего доступа к этому файлу или каталогу</string>
@@ -265,6 +272,7 @@
   <string name="downloader_download_file_not_found">Этот файл больше недоступен на сервере</string>
   <string name="prefs_category_accounts">Учётные записи</string>
   <string name="prefs_add_account">Добавить учетную запись</string>
+  <string name="auth_redirect_non_secure_connection_title">Защищённое соединение перенаправлено по незащищённому маршруту</string>
   <string name="actionbar_logger">Журналы</string>
   <string name="log_send_history_button">История Отправлений</string>
   <string name="log_mail_subject">Журналы Андроид-приложения ownCloud</string>
@@ -279,5 +287,6 @@
   <string name="move_file_invalid_overwrite">Файл уже существует в папке назначения</string>
   <string name="move_file_error">Произошла ошибка при попытке перемещения этого файла или папки</string>
   <string name="forbidden_permissions_move">переместить этот файл</string>
+  <string name="prefs_category_instant_uploading">Мгновенные загрузки</string>
   <string name="prefs_category_security">Безопасность</string>
 </resources>

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

@@ -38,6 +38,8 @@
   <string name="prefs_recommend">Priporoči prijateljem</string>
   <string name="prefs_feedback">Odziv</string>
   <string name="prefs_imprint">Natis</string>
+  <string name="prefs_remember_last_share_location">Zapomni si mesto souporabe</string>
+  <string name="prefs_remember_last_upload_location_summary">Zapomni si zadnje mesto za pošiljanje v oblak</string>
   <string name="recommend_subject">Preizkusi %1$s na pametnem telefonu!</string>
   <string name="recommend_text">Želim ti predstaviti %1$s na pametnem telefonu!\nPrejmeš ga lahko na: %2$s</string>
   <string name="auth_check_server">Preveri strežnik</string>

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

@@ -38,6 +38,8 @@
   <string name="prefs_recommend">Bir arkadaşa öner</string>
   <string name="prefs_feedback">Geribildirim</string>
   <string name="prefs_imprint">İzlenim</string>
+  <string name="prefs_remember_last_share_location">Konum paylaşmayı hatırla</string>
+  <string name="prefs_remember_last_upload_location_summary">Son paylaşma yükleme konumunu hatırla</string>
   <string name="recommend_subject">%1$s uygulamasını akıllı telefonunda dene!</string>
   <string name="recommend_text">Seni, akıllı telefonunda %1$s kullanmaya davet ediyorum!\nBuradan indirebilirsin: %2$s</string>
   <string name="auth_check_server">Sunucuyu Denetle</string>

+ 21 - 0
res/values/dims.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ownCloud Android client application
+
+  Copyright (C) 2014 ownCloud Inc.
+
+  This program is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License version 2,
+  as published by the Free Software Foundation.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+-->
+<resources>
+	<dimen name="file_icon_size">32dp</dimen>
+</resources>

+ 4 - 2
res/values/strings.xml

@@ -39,7 +39,9 @@
     <string name="prefs_recommend">Recommend to a friend</string>
     <string name="prefs_feedback">Feedback</string>
     <string name="prefs_imprint">Imprint</string>
-    
+    <string name="prefs_remember_last_share_location">Remember share location</string>
+    <string name="prefs_remember_last_upload_location_summary">Remember last share upload location</string>
+
 	<string name="recommend_subject">"Try %1$s on your smartphone!"</string>
 	<string name="recommend_text">"I want to invite you to use %1$s on your smartphone!\nDownload here: %2$s"</string>
 
@@ -279,6 +281,7 @@
 	<string name="network_error_socket_timeout_exception">An error occurred while waiting for the server, the operation couldn\'t have been done</string>
 	<string name="network_error_connect_timeout_exception">An error occurred while waiting for the server, the operation couldn\'t have been done</string>
 	<string name="network_host_not_available">The operation couldn\'t be completed, server is unavailable</string>
+
 	<string name="empty"></string>
 	
 	<string name="forbidden_permissions">You do not have permission %s</string>
@@ -313,5 +316,4 @@
 
 	<string name="prefs_category_instant_uploading">Instant Uploads</string>
 	<string name="prefs_category_security">Security</string>
-
 </resources>

+ 1 - 1
src/com/owncloud/android/MainApp.java

@@ -55,7 +55,7 @@ public class MainApp extends Application {
         } else {
             OwnCloudClientManagerFactory.setDefaultPolicy(Policy.ALWAYS_NEW_CLIENT);
         }
-        
+
         // initialise thumbnails cache on background thread
         new ThumbnailsCacheManager.InitDiskCacheTask().execute();
         

+ 1 - 0
src/com/owncloud/android/datamodel/FileDataStorageManager.java

@@ -300,6 +300,7 @@ public class FileDataStorageManager {
             cv.put(ProviderTableMeta.FILE_PUBLIC_LINK, file.getPublicLink());
             cv.put(ProviderTableMeta.FILE_PERMISSIONS, file.getPermissions());
             cv.put(ProviderTableMeta.FILE_REMOTE_ID, file.getRemoteId());
+            cv.put(ProviderTableMeta.FILE_UPDATE_THUMBNAIL, file.needsUpdateThumbnail());
 
             boolean existsByPath = fileExists(file.getRemotePath());
             if (existsByPath || fileExists(file.getFileId())) {

+ 64 - 8
src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java

@@ -20,19 +20,30 @@ package com.owncloud.android.datamodel;
 import java.io.File;
 import java.lang.ref.WeakReference;
 
+import org.apache.commons.httpclient.HttpStatus;
+import org.apache.commons.httpclient.methods.GetMethod;
+
+import android.accounts.Account;
+import android.accounts.AccountManager;
 import android.content.res.Resources;
 import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
 import android.graphics.Bitmap.CompressFormat;
+import android.graphics.BitmapFactory;
 import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
 import android.media.ThumbnailUtils;
+import android.net.Uri;
 import android.os.AsyncTask;
-import android.util.TypedValue;
 import android.widget.ImageView;
 
 import com.owncloud.android.MainApp;
+import com.owncloud.android.R;
+import com.owncloud.android.lib.common.OwnCloudAccount;
+import com.owncloud.android.lib.common.OwnCloudClient;
+import com.owncloud.android.lib.common.OwnCloudClientManagerFactory;
+import com.owncloud.android.lib.common.accounts.AccountUtils.Constants;
 import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.lib.resources.status.OwnCloudVersion;
 import com.owncloud.android.ui.adapter.DiskLruImageCache;
 import com.owncloud.android.utils.BitmapUtils;
 import com.owncloud.android.utils.DisplayUtils;
@@ -47,7 +58,8 @@ public class ThumbnailsCacheManager {
     
     private static final String TAG = ThumbnailsCacheManager.class.getSimpleName();
     
-    private static final String CACHE_FOLDER = "thumbnailCache"; 
+    private static final String CACHE_FOLDER = "thumbnailCache";
+    private static final String MINOR_SERVER_VERSION_FOR_THUMBS = "7.8.0";
     
     private static final Object mThumbnailsDiskCacheLock = new Object();
     private static DiskLruImageCache mThumbnailCache = null;
@@ -56,7 +68,9 @@ public class ThumbnailsCacheManager {
     private static final int DISK_CACHE_SIZE = 1024 * 1024 * 10; // 10MB
     private static final CompressFormat mCompressFormat = CompressFormat.JPEG;
     private static final int mCompressQuality = 70;
-    
+    private static OwnCloudClient mClient = null;
+    private static String mServerVersion = null;
+
     public static Bitmap mDefaultImg = 
             BitmapFactory.decodeResource(
                     MainApp.getAppContext().getResources(), 
@@ -65,10 +79,12 @@ public class ThumbnailsCacheManager {
 
     
     public static class InitDiskCacheTask extends AsyncTask<File, Void, Void> {
+
         @Override
         protected Void doInBackground(File... params) {
             synchronized (mThumbnailsDiskCacheLock) {
                 mThumbnailCacheStarting = true;
+
                 if (mThumbnailCache == null) {
                     try {
                         // Check if media is mounted or storage is built-in, if so, 
@@ -153,15 +169,17 @@ public class ThumbnailsCacheManager {
 
     public static class ThumbnailGenerationTask extends AsyncTask<OCFile, Void, Bitmap> {
         private final WeakReference<ImageView> mImageViewReference;
+        private static Account mAccount;
         private OCFile mFile;
         private FileDataStorageManager mStorageManager;
         
-        public ThumbnailGenerationTask(ImageView imageView, FileDataStorageManager storageManager) {
+        public ThumbnailGenerationTask(ImageView imageView, FileDataStorageManager storageManager, Account account) {
          // Use a WeakReference to ensure the ImageView can be garbage collected
             mImageViewReference = new WeakReference<ImageView>(imageView);
             if (storageManager == null)
                 throw new IllegalArgumentException("storageManager must not be NULL");
             mStorageManager = storageManager;
+            mAccount = account;
         }
 
         // Decode image in background.
@@ -170,6 +188,15 @@ public class ThumbnailsCacheManager {
             Bitmap thumbnail = null;
             
             try {
+                if (mAccount != null) {
+                    AccountManager accountMgr = AccountManager.get(MainApp.getAppContext());
+                    
+                    mServerVersion = accountMgr.getUserData(mAccount, Constants.KEY_OC_VERSION);
+                    OwnCloudAccount ocAccount = new OwnCloudAccount(mAccount, MainApp.getAppContext());
+                    mClient = OwnCloudClientManagerFactory.getDefaultSingleton().
+                            getClientFor(ocAccount, MainApp.getAppContext());
+                }
+                
                 mFile = params[0];
                 final String imageKey = String.valueOf(mFile.getRemoteId());
     
@@ -180,9 +207,8 @@ public class ThumbnailsCacheManager {
                 if (thumbnail == null || mFile.needsUpdateThumbnail()) { 
                     // Converts dp to pixel
                     Resources r = MainApp.getAppContext().getResources();
-                    int px = (int) Math.round(TypedValue.applyDimension(
-                            TypedValue.COMPLEX_UNIT_DIP, 150, r.getDisplayMetrics()
-                    ));
+                    
+                    int px = (int) Math.round(r.getDimension(R.dimen.file_icon_size));
                     
                     if (mFile.isDown()){
                         Bitmap bitmap = BitmapUtils.decodeSampledBitmapFromFile(
@@ -198,6 +224,36 @@ public class ThumbnailsCacheManager {
                             mStorageManager.saveFile(mFile);
                         }
     
+                    } else {
+                        // Download thumbnail from server
+                        if (mClient != null && mServerVersion != null) {
+                            OwnCloudVersion serverOCVersion = new OwnCloudVersion(mServerVersion);
+                            if (serverOCVersion.compareTo(new OwnCloudVersion(MINOR_SERVER_VERSION_FOR_THUMBS)) >= 0) {
+                                try {
+                                    int status = -1;
+
+                                    String uri = mClient.getBaseUri() + "/index.php/apps/files/api/v1/thumbnail/" + 
+                                            px + "/" + px + Uri.encode(mFile.getRemotePath(), "/");
+                                    Log_OC.d("Thumbnail", "URI: " + uri);
+                                    GetMethod get = new GetMethod(uri);
+                                    status = mClient.executeMethod(get);
+                                    if (status == HttpStatus.SC_OK) {
+                                        byte[] bytes = get.getResponseBody();
+                                        Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
+                                        thumbnail = ThumbnailUtils.extractThumbnail(bitmap, px, px);
+
+                                        // Add thumbnail to cache
+                                        if (thumbnail != null) {
+                                            addBitmapToCache(imageKey, thumbnail);
+                                        }
+                                    }
+                                } catch (Exception e) {
+                                    e.printStackTrace();
+                                }
+                            } else {
+                                Log_OC.d(TAG, "Server too old");
+                            }
+                        }
                     }
                 }
                 

+ 6 - 1
src/com/owncloud/android/operations/SynchronizeFolderOperation.java

@@ -33,6 +33,7 @@ import org.apache.http.HttpStatus;
 import android.accounts.Account;
 import android.content.Context;
 import android.content.Intent;
+import android.util.Log;
 //import android.support.v4.content.LocalBroadcastManager;
 
 import com.owncloud.android.datamodel.FileDataStorageManager;
@@ -325,7 +326,7 @@ public class SynchronizeFolderOperation extends RemoteOperation {
     private void synchronizeData(ArrayList<Object> folderAndFiles, OwnCloudClient client) {
         // get 'fresh data' from the database
         mLocalFolder = mStorageManager.getFileByPath(mLocalFolder.getRemotePath());
-        
+
         // parse data from remote folder 
         OCFile remoteFolder = fillOCFile((RemoteFile)folderAndFiles.get(0));
         remoteFolder.setParentId(mLocalFolder.getParentId());
@@ -372,6 +373,10 @@ public class SynchronizeFolderOperation extends RemoteOperation {
                 if (remoteFile.isFolder()) {
                     remoteFile.setFileLength(localFile.getFileLength()); 
                         // TODO move operations about size of folders to FileContentProvider
+                } else if (mRemoteFolderChanged && remoteFile.isImage() &&
+                        remoteFile.getModificationTimestamp() != localFile.getModificationTimestamp()) {
+                    remoteFile.setNeedsUpdateThumbnail(true);
+                    Log.d(TAG, "Image " + remoteFile.getFileName() + " updated on the server");
                 }
                 remoteFile.setPublicLink(localFile.getPublicLink());
                 remoteFile.setShareByLink(localFile.isShareByLink());

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

@@ -851,7 +851,7 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener {
                     } else if (item == 1) {
                         Intent action = new Intent(Intent.ACTION_GET_CONTENT);
                         action = action.setType("*/*").addCategory(Intent.CATEGORY_OPENABLE);
-                        //putExtra is only supported on api level 18+
+                        //Intent.EXTRA_ALLOW_MULTIPLE is only supported on api level 18+
                         if(Build.VERSION.SDK_INT >= 18) {
                             action.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
                         }

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

@@ -34,6 +34,9 @@ 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;
@@ -73,6 +76,8 @@ 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) {
@@ -119,6 +124,7 @@ public class UploadFilesActivity extends FileActivity implements
         actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
         actionBar.setListNavigationCallbacks(mDirectories, this);
         
+        
         // wait dialog
         if (mCurrentDialog != null) {
             mCurrentDialog.dismiss();
@@ -127,8 +133,15 @@ 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;
@@ -139,12 +152,33 @@ 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) {
@@ -175,6 +209,7 @@ public class UploadFilesActivity extends FileActivity implements
             ActionBar actionBar = getSupportActionBar(); 
             actionBar.setDisplayHomeAsUpEnabled(false);
         } 
+        toggleOffSelectAll();
     }
 
     
@@ -242,10 +277,11 @@ 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();
     }
     
     

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

@@ -39,22 +39,22 @@ import android.accounts.AccountManager;
 import android.app.AlertDialog;
 import android.app.AlertDialog.Builder;
 import android.app.Dialog;
-import android.app.ListActivity;
 import android.app.ProgressDialog;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.DialogInterface.OnCancelListener;
 import android.content.DialogInterface.OnClickListener;
 import android.content.Intent;
+import android.content.SharedPreferences;
 import android.database.Cursor;
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Parcelable;
+import android.preference.PreferenceManager;
 import android.provider.MediaStore.Audio;
 import android.provider.MediaStore.Images;
 import android.provider.MediaStore.Video;
 import android.view.View;
-import android.view.Window;
 import android.widget.AdapterView;
 import android.widget.AdapterView.OnItemClickListener;
 import android.widget.Button;
@@ -62,6 +62,10 @@ import android.widget.EditText;
 import android.widget.SimpleAdapter;
 import android.widget.Toast;
 
+import com.actionbarsherlock.app.ActionBar;
+import com.actionbarsherlock.app.SherlockListActivity;
+import com.actionbarsherlock.view.MenuItem;
+import com.owncloud.android.utils.DisplayUtils;
 
 /**
  * This can be used to upload things to an ownCloud instance.
@@ -69,7 +73,7 @@ import android.widget.Toast;
  * @author Bartek Przybylski
  * 
  */
-public class Uploader extends ListActivity implements OnItemClickListener, android.view.View.OnClickListener {
+public class Uploader extends SherlockListActivity implements OnItemClickListener, android.view.View.OnClickListener {
     private static final String TAG = "ownCloudUploader";
 
     private Account mAccount;
@@ -91,9 +95,11 @@ public class Uploader extends ListActivity implements OnItemClickListener, andro
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        getWindow().requestFeature(Window.FEATURE_NO_TITLE);
         mParents = new Stack<String>();
-        mParents.add("");
+
+        ActionBar actionBar = getSupportActionBar();
+        actionBar.setIcon(DisplayUtils.getSeasonalIconId());
+
         if (prepareStreamsToUpload()) {
             mAccountManager = (AccountManager) getSystemService(Context.ACCOUNT_SERVICE);
             Account[] accounts = mAccountManager.getAccountsByType(MainApp.getAccountType());
@@ -106,8 +112,11 @@ public class Uploader extends ListActivity implements OnItemClickListener, andro
             } else {
                 mAccount = accounts[0];
                 mStorageManager = new FileDataStorageManager(mAccount, getContentResolver());
+                initTargetFolder();
                 populateDirectoryList();
+                
             }
+            
         } else {
             showDialog(DIALOG_NO_STREAM);
         }
@@ -169,6 +178,7 @@ public class Uploader extends ListActivity implements OnItemClickListener, andro
                 public void onClick(DialogInterface dialog, int which) {
                     mAccount = mAccountManager.getAccountsByType(MainApp.getAccountType())[which];
                     mStorageManager = new FileDataStorageManager(mAccount, getContentResolver());
+                    initTargetFolder();
                     populateDirectoryList();
                 }
             });
@@ -288,12 +298,22 @@ public class Uploader extends ListActivity implements OnItemClickListener, andro
     private void populateDirectoryList() {
         setContentView(R.layout.uploader_layout);
 
-        String full_path = "";
-        for (String a : mParents)
-            full_path += a + "/";
+        String current_dir = mParents.peek();
+        if(current_dir.equals("")){
+            getSupportActionBar().setTitle(getString(R.string.default_display_name_for_root_folder));
+        }
+        else{
+            getSupportActionBar().setTitle(current_dir);
+        }
+        boolean notRoot = (mParents.size() > 1);
+        ActionBar actionBar = getSupportActionBar();
+        actionBar.setDisplayHomeAsUpEnabled(notRoot);
+        actionBar.setHomeButtonEnabled(notRoot);
+
+        String full_path = generatePath(mParents);
         
         Log_OC.d(TAG, "Populating view with content of : " + full_path);
-        
+
         mFile = mStorageManager.getFileByPath(full_path);
         if (mFile != null) {
             Vector<OCFile> files = mStorageManager.getFolderContent(mFile);
@@ -317,6 +337,14 @@ public class Uploader extends ListActivity implements OnItemClickListener, andro
         }
     }
 
+    private String generatePath(Stack<String> dirs) {
+        String full_path = "";
+
+        for (String a : dirs)
+            full_path += a + "/";
+        return full_path;
+    }
+
     private boolean prepareStreamsToUpload() {
         if (getIntent().getAction().equals(Intent.ACTION_SEND)) {
             mStreamsToUpload = new ArrayList<Parcelable>();
@@ -408,6 +436,13 @@ public class Uploader extends ListActivity implements OnItemClickListener, andro
             intent.putExtra(FileUploader.KEY_REMOTE_FILE, remote.toArray(new String[remote.size()]));
             intent.putExtra(FileUploader.KEY_ACCOUNT, mAccount);
             startService(intent);
+
+            //Save the path to shared preferences
+            SharedPreferences.Editor appPrefs = PreferenceManager
+                    .getDefaultSharedPreferences(getApplicationContext()).edit();
+            appPrefs.putString("last_upload_path", mUploadPath);
+            appPrefs.apply();
+
             finish();
             }
             
@@ -416,5 +451,52 @@ public class Uploader extends ListActivity implements OnItemClickListener, andro
             Toast.makeText(this, message, Toast.LENGTH_LONG).show();            
         }
     }
+    
+    /**
+     *  Loads the target folder initialize shown to the user.
+     * 
+     *  The target account has to be chosen before this method is called. 
+     */
+    private void initTargetFolder() {
+        if (mStorageManager == null) {
+            throw new IllegalStateException("Do not call this method before initializing mStorageManager");
+        }
+        
+        SharedPreferences appPreferences = PreferenceManager
+                .getDefaultSharedPreferences(getApplicationContext());
+
+        String last_path = appPreferences.getString("last_upload_path", "");
+        // "/" equals root-directory
+        if(last_path.equals("/")) {
+            mParents.add("");
+        }
+        else{
+            String[] dir_names = last_path.split("/");
+            for (String dir : dir_names)
+                mParents.add(dir);
+        }
+        //Make sure that path still exists, if it doesn't pop the stack and try the previous path
+            while(!mStorageManager.fileExists(generatePath(mParents)) && mParents.size() > 1){
+                mParents.pop();
+            }
+    }
+
+    
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        boolean retval = true;
+        switch (item.getItemId()) {
+        case android.R.id.home: {
+            if((mParents.size() > 1)) {                
+                onBackPressed(); 
+            }
+            break;
+        }
+        default:
+            retval = super.onOptionsItemSelected(item);
+        }
+        return retval;
+    }
 
+    
 }

+ 4 - 2
src/com/owncloud/android/ui/adapter/FileListListAdapter.java

@@ -82,10 +82,11 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
             Context context, 
             ComponentsGetter transferServiceGetter
             ) {
-        
+
         mJustFolders = justFolders;
         mContext = context;
         mAccount = AccountUtils.getCurrentOwnCloudAccount(mContext);
+
         mTransferServiceGetter = transferServiceGetter;
         
         mAppPreferences = PreferenceManager
@@ -98,6 +99,7 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
         
         // initialise thumbnails cache on background thread
         new ThumbnailsCacheManager.InitDiskCacheTask().execute();
+
     }
     
     @Override
@@ -217,7 +219,7 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
                         if (ThumbnailsCacheManager.cancelPotentialWork(file, fileIcon)) {
                             final ThumbnailsCacheManager.ThumbnailGenerationTask task = 
                                     new ThumbnailsCacheManager.ThumbnailGenerationTask(
-                                            fileIcon, mStorageManager
+                                            fileIcon, mStorageManager, mAccount
                                     );
                             if (thumbnail == null) {
                                 thumbnail = ThumbnailsCacheManager.mDefaultImg;

+ 30 - 7
src/com/owncloud/android/ui/fragment/LocalFileListFragment.java

@@ -18,6 +18,7 @@
 package com.owncloud.android.ui.fragment;
 
 import java.io.File;
+import java.util.ArrayList;
 
 import android.app.Activity;
 import android.os.Bundle;
@@ -97,13 +98,33 @@ 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()) {
@@ -209,16 +230,18 @@ public class LocalFileListFragment extends ExtendedListFragment {
      * @return      File paths to the files checked by the user.
      */
     public String[] getCheckedFilePaths() {
-        String [] result = null;
+        ArrayList<String> result = new ArrayList<String>();
         SparseBooleanArray positions = mList.getCheckedItemPositions();
         if (positions.size() > 0) {
-            Log_OC.d(TAG, "Returning " + positions.size() + " selected files");
-            result = new String[positions.size()];
-            for (int i=0; i<positions.size(); i++) {
-                result[i] = ((File) mList.getItemAtPosition(positions.keyAt(i))).getAbsolutePath();
+            for (int i = 0; i < positions.size(); i++) {
+                if (positions.get(positions.keyAt(i)) == true) {
+                    result.add(((File) mList.getItemAtPosition(positions.keyAt(i))).getAbsolutePath());
+                }
             }
+
+            Log_OC.d(TAG, "Returning " + result.size() + " selected files");
         }
-        return result;
+        return result.toArray(new String[result.size()]);
     }
 
     

+ 5 - 1
src/com/owncloud/android/utils/DisplayUtils.java

@@ -29,6 +29,7 @@ import java.util.Set;
 import android.annotation.TargetApi;
 import android.os.Build;
 
+import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 
 /**
@@ -39,6 +40,8 @@ import com.owncloud.android.R;
  */
 public class DisplayUtils {
     
+    private static final String OWNCLOUD_APP_NAME = "ownCloud";
+
     //private static String TAG = DisplayUtils.class.getSimpleName(); 
     
     private static final String[] sizeSuffixes = { "B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB" };
@@ -233,7 +236,8 @@ public class DisplayUtils {
     
     
     public static int getSeasonalIconId() {
-        if (Calendar.getInstance().get(Calendar.DAY_OF_YEAR) >= 354) {
+        if (Calendar.getInstance().get(Calendar.DAY_OF_YEAR) >= 354 &&
+                MainApp.getAppContext().getString(R.string.app_name).equals(OWNCLOUD_APP_NAME)) {
             return R.drawable.winter_holidays_icon;
         } else {
             return R.drawable.icon;