Browse Source

Merge branch 'develop' into better_loggin_system

jabarros 10 years ago
parent
commit
2ef886af31
95 changed files with 1970 additions and 355 deletions
  1. 7 3
      AndroidManifest.xml
  2. 25 2
      pom.xml
  3. 36 0
      res/layout/files_move.xml
  4. 2 1
      res/menu/file_actions_menu.xml
  5. 1 0
      res/values-af-rZA/strings.xml
  6. 2 2
      res/values-ar/strings.xml
  7. 87 2
      res/values-az/strings.xml
  8. 1 0
      res/values-be/strings.xml
  9. 13 3
      res/values-bg-rBG/strings.xml
  10. 2 3
      res/values-bn-rBD/strings.xml
  11. 3 3
      res/values-ca/strings.xml
  12. 13 3
      res/values-cs-rCZ/strings.xml
  13. 1 0
      res/values-cy-rGB/strings.xml
  14. 33 24
      res/values-da/strings.xml
  15. 1 0
      res/values-de-rCH/strings.xml
  16. 40 30
      res/values-de-rDE/strings.xml
  17. 14 4
      res/values-de/strings.xml
  18. 3 2
      res/values-el/strings.xml
  19. 13 4
      res/values-en-rGB/strings.xml
  20. 3 0
      res/values-eo/strings.xml
  21. 3 0
      res/values-es-rAR/strings.xml
  22. 1 0
      res/values-es-rCL/strings.xml
  23. 2 0
      res/values-es-rMX/strings.xml
  24. 12 2
      res/values-es/strings.xml
  25. 17 4
      res/values-et-rEE/strings.xml
  26. 3 2
      res/values-eu/strings.xml
  27. 3 2
      res/values-fa/strings.xml
  28. 10 4
      res/values-fi-rFI/strings.xml
  29. 4 2
      res/values-fr/strings.xml
  30. 4 2
      res/values-gl/strings.xml
  31. 1 4
      res/values-he/strings.xml
  32. 9 0
      res/values-hr/strings.xml
  33. 9 2
      res/values-hu-rHU/strings.xml
  34. 1 0
      res/values-ia/strings.xml
  35. 3 0
      res/values-id/strings.xml
  36. 1 0
      res/values-is/strings.xml
  37. 12 4
      res/values-it/strings.xml
  38. 16 2
      res/values-ja-rJP/strings.xml
  39. 1 0
      res/values-ka-rGE/strings.xml
  40. 2 0
      res/values-km/strings.xml
  41. 3 0
      res/values-ko/strings.xml
  42. 1 0
      res/values-lb/strings.xml
  43. 2 2
      res/values-lt-rLT/strings.xml
  44. 1 0
      res/values-lv/strings.xml
  45. 3 0
      res/values-mk/strings.xml
  46. 1 0
      res/values-my/strings.xml
  47. 3 2
      res/values-nb-rNO/strings.xml
  48. 14 5
      res/values-nl/strings.xml
  49. 2 0
      res/values-nn-rNO/strings.xml
  50. 1 0
      res/values-oc/strings.xml
  51. 1 0
      res/values-pa/strings.xml
  52. 14 2
      res/values-pl/strings.xml
  53. 13 3
      res/values-pt-rBR/strings.xml
  54. 7 4
      res/values-pt-rPT/strings.xml
  55. 2 2
      res/values-ro/strings.xml
  56. 5 2
      res/values-ru/strings.xml
  57. 1 0
      res/values-si-rLK/strings.xml
  58. 4 2
      res/values-sk-rSK/strings.xml
  59. 11 4
      res/values-sl/strings.xml
  60. 2 0
      res/values-sq/strings.xml
  61. 1 0
      res/values-sr-rSP/strings.xml
  62. 1 0
      res/values-sr/strings.xml
  63. 3 2
      res/values-sv/strings.xml
  64. 1 0
      res/values-ta-rLK/strings.xml
  65. 1 0
      res/values-th-rTH/strings.xml
  66. 13 4
      res/values-tr/strings.xml
  67. 1 0
      res/values-uk/strings.xml
  68. 1 0
      res/values-ur-rPK/strings.xml
  69. 1 2
      res/values-vi/strings.xml
  70. 22 2
      res/values-zh-rCN/strings.xml
  71. 1 0
      res/values-zh-rHK/strings.xml
  72. 3 2
      res/values-zh-rTW/strings.xml
  73. 15 4
      res/values/strings.xml
  74. 43 1
      src/com/owncloud/android/authentication/AuthenticatorActivity.java
  75. 4 1
      src/com/owncloud/android/authentication/SsoWebViewClient.java
  76. 121 0
      src/com/owncloud/android/datamodel/FileDataStorageManager.java
  77. 8 0
      src/com/owncloud/android/files/FileMenuFilter.java
  78. 18 1
      src/com/owncloud/android/files/FileOperationsHelper.java
  79. 4 0
      src/com/owncloud/android/files/services/FileUploader.java
  80. 103 0
      src/com/owncloud/android/operations/MoveFileOperation.java
  81. 8 0
      src/com/owncloud/android/services/OperationsService.java
  82. 8 5
      src/com/owncloud/android/ui/activity/FileActivity.java
  83. 79 7
      src/com/owncloud/android/ui/activity/FileDisplayActivity.java
  84. 568 0
      src/com/owncloud/android/ui/activity/MoveActivity.java
  85. 17 28
      src/com/owncloud/android/ui/activity/Preferences.java
  86. 29 1
      src/com/owncloud/android/ui/adapter/FileListListAdapter.java
  87. 2 0
      src/com/owncloud/android/ui/dialog/CreateFolderDialogFragment.java
  88. 152 0
      src/com/owncloud/android/ui/dialog/CredentialsDialogFragment.java
  89. 109 2
      src/com/owncloud/android/ui/fragment/ExtendedListFragment.java
  90. 7 0
      src/com/owncloud/android/ui/fragment/FileDetailFragment.java
  91. 6 1
      src/com/owncloud/android/ui/fragment/LocalFileListFragment.java
  92. 81 148
      src/com/owncloud/android/ui/fragment/OCFileListFragment.java
  93. 7 0
      src/com/owncloud/android/ui/preview/PreviewImageFragment.java
  94. 7 0
      src/com/owncloud/android/ui/preview/PreviewMediaFragment.java
  95. 20 0
      src/com/owncloud/android/utils/ErrorMessageAdapter.java

+ 7 - 3
AndroidManifest.xml

@@ -185,10 +185,14 @@
         </receiver>
         <service android:name=".services.observer.FileObserverService"/>
         
+		<activity
+			android:name=".ui.activity.CopyToClipboardActivity"
+			android:label="@string/copy_link"
+			android:icon="@drawable/copy_link"/>
+
         <activity 
-            android:name=".ui.activity.CopyToClipboardActivity" 
-           	android:label="@string/copy_link"
-           	android:icon="@drawable/copy_link" />
+			android:name=".ui.activity.MoveActivity"
+			android:label="@string/app_name"/>
         
     </application>
 

+ 25 - 2
pom.xml

@@ -13,7 +13,7 @@
         <owncloud.version>1.5.1-SNAPSHOT</owncloud.version>
         <java-version>1.6</java-version>
         <!-- Given by maven-android-sdk-deployer -->
-        <google.android-version>4.4.2_r2</google.android-version>
+        <google.android-version>4.4.2_r3</google.android-version>
         <!-- Usually the latest Android API -->
         <google.android-api>19</google.android-api>
         <actionbarsherlock-version>4.2.0</actionbarsherlock-version>
@@ -28,7 +28,30 @@
     </scm>
     
     <dependencies>
-
+        <!-- Dirty trick, but it works. TouchImageView library is not available as Maven project. -->
+        <dependency>
+            <groupId>touch-image-view.jar</groupId>
+            <artifactId>touch-image-view.jar</artifactId>
+            <version>1.0</version>
+            <scope>system</scope>
+            <systemPath>${basedir}/libs/touch-image-view.jar</systemPath>
+        </dependency>
+          
+        <!-- This causes a (version?) conflict during packaging since sherlockactionbar also includes compatibility-v4 -->
+        <!--<dependency>
+            <groupId>android.support</groupId>
+            <artifactId>compatibility-v4</artifactId>
+            <version>19.1.0</version>
+        </dependency>-->
+        <!-- Instead we need to include the exact same version -->
+        <dependency>
+            <groupId>android-support-v4.jar</groupId>
+            <artifactId>android-support-v4.jar</artifactId>
+            <version>1.0</version>
+            <scope>system</scope>
+            <systemPath>${basedir}/third_party/android-support-library/android-support-v4.jar</systemPath>
+        </dependency>
+        
         <dependency>
             <groupId>android</groupId>
             <artifactId>android</artifactId>

+ 36 - 0
res/layout/files_move.xml

@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/background_color"
+    android:orientation="vertical" >
+
+	<FrameLayout 
+		android:layout_width="match_parent"
+		android:layout_height="0dip"
+        android:layout_weight="1"
+		android:id="@+id/fragment_container" />
+	
+	<LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:gravity="center"
+        android:orientation="horizontal" >
+
+        <Button
+            android:id="@+id/move_files_btn_cancel"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:text="@string/common_cancel" />
+
+		<Button
+		    android:id="@+id/move_files_btn_choose"
+		    android:layout_width="wrap_content"
+		    android:layout_height="wrap_content"
+		    android:layout_weight="1"
+		    android:text="@string/move_choose_button_text" />
+
+	</LinearLayout>
+
+ </LinearLayout>

+ 2 - 1
res/menu/file_actions_menu.xml

@@ -27,8 +27,9 @@
 	<item 	android:id="@+id/action_cancel_download"		android:title="@string/common_cancel_download"	 	android:icon="@android:drawable/ic_menu_close_clear_cancel"		android:orderInCategory="1" />
 	<item 	android:id="@+id/action_cancel_upload" 			android:title="@string/common_cancel_upload"		android:icon="@android:drawable/ic_menu_close_clear_cancel"		android:orderInCategory="1" />
 	<item 	android:id="@+id/action_rename_file"			android:title="@string/common_rename"				android:icon="@android:drawable/ic_menu_edit"					android:orderInCategory="1" />
+    <item 	android:id="@+id/action_move"					android:title="@string/actionbar_move"				android:icon="@android:drawable/ic_menu_set_as"					android:orderInCategory="1" />
     <item 	android:id="@+id/action_remove_file"			android:title="@string/common_remove"				android:icon="@android:drawable/ic_menu_delete"					android:orderInCategory="1" />
     <item 	android:id="@+id/action_send_file"				android:title="@string/actionbar_send_file"			android:icon="@android:drawable/ic_menu_set_as"					android:orderInCategory="1" />
     <item 	android:id="@+id/action_see_details"			android:title="@string/actionbar_see_details"		android:icon="@android:drawable/ic_menu_info_details"			android:orderInCategory="1" />
-    
+
 </menu>

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

@@ -7,4 +7,5 @@
   <string name="common_ok">OK</string>
   <string name="common_cancel">Kanseleer</string>
   <string name="empty"></string>
+  <string name="move_choose_button_text">Kies</string>
 </resources>

+ 2 - 2
res/values-ar/strings.xml

@@ -236,9 +236,7 @@
   <string name="error__upload__local_file_not_copied">%1$s تعذر نسخه %2$s للمجلد المحلي</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>
-  <string name="unshare_link_file_no_exist">غير قادر على إلغاء مشاركة هذا الملف أو المجلد.لا وجود له</string>
   <string name="unshare_link_file_error">حدث خطأ ما أثناء محاولة إلغاء مشاركة هذا الملف أو المجلد</string>
   <string name="activity_chooser_send_file_title">أرسل</string>
   <string name="copy_link">نسخ الرابط</string>
@@ -250,4 +248,6 @@
   <string name="network_host_not_available">تعذر إكمال العملية، الخادم غير متوفر</string>
   <string name="empty"></string>
   <string name="prefs_category_accounts">حسابات</string>
+  <string name="saml_authentication_wrong_pass">كلمة مرور خاطئة</string>
+  <string name="move_choose_button_text">اختيار</string>
 </resources>

+ 87 - 2
res/values-az/strings.xml

@@ -12,7 +12,7 @@
   <string name="actionbar_see_details">Detallar</string>
   <string name="actionbar_send_file">Göndər</string>
   <string name="prefs_category_general">Ümumi</string>
-  <string name="prefs_category_more">Yenə</string>
+  <string name="prefs_category_more">Daha da</string>
   <string name="prefs_accounts">Hesablar</string>
   <string name="prefs_manage_accounts">İstifadəçilərin idarəedilməsi</string>
   <string name="prefs_pincode">Proqram təminatının PİN-i</string>
@@ -35,17 +35,101 @@
   <string name="auth_host_url">Server ünvanı https://…</string>
   <string name="auth_username">İstifadəçi adı</string>
   <string name="auth_password">Şifrə</string>
+  <string name="auth_register">Yeni edək %1$s?</string>
   <string name="sync_string_files">Fayllar</string>
   <string name="setup_btn_connect">Qoşul</string>
   <string name="uploader_btn_upload_text">Serverə yüklə</string>
+  <string name="uploader_top_message">Yüklənmə qovluöunu seçin:</string>
+  <string name="uploader_wrn_no_account_title">Hesab tapılmadı</string>
+  <string name="uploader_wrn_no_account_text">Sizin alətinizda %1$s hesabi tapılmadı. Xahiş olunur öncə hesabi quraşdırasınız.</string>
+  <string name="uploader_wrn_no_account_setup_btn_text">Qurulum</string>
+  <string name="uploader_wrn_no_account_quit_btn_text">Çıx</string>
+  <string name="uploader_wrn_no_content_title">Yükləmək üçün kontent yoxdur</string>
+  <string name="uploader_wrn_no_content_text">Heç bir kontent gəlmədi. Yukləmək üçün heçnə yoxdur.</string>
+  <string name="uploader_error_forbidden_content">%1$s yayımlanmış kontent üçün yetkili deyil</string>
+  <string name="uploader_info_uploading">Yüklənmə gedir</string>
+  <string name="file_list_empty">Burda heçnə yoxdur. Nese yükləyin!</string>
+  <string name="file_list_loading">Yüklənir...</string>
+  <string name="local_file_list_empty">Bu qovluqda heç bir fayl movcud deyil.</string>
+  <string name="filedetails_select_file">Faylın üstünə sıxın ki, əlavə məlumat ekrana çıxsın.</string>
+  <string name="filedetails_size">Həcm:</string>
+  <string name="filedetails_type">Tip:</string>
+  <string name="filedetails_created">Yaradıldı:</string>
+  <string name="filedetails_modified">Dəyişdirildi:</string>
   <string name="filedetails_download">Yüklə</string>
+  <string name="filedetails_sync_file">Faylı yenilə</string>
+  <string name="filedetails_renamed_in_upload_msg">Yüklənmə müddətində fayl buna %1$s yeniləndi</string>
+  <string name="action_share_file">Linki yayımla</string>
+  <string name="action_unshare_file">Link yayımlanmasını dayandır</string>
+  <string name="common_yes">Bəli</string>
+  <string name="common_no">Xeyir</string>
+  <string name="common_ok">Oldu</string>
+  <string name="common_cancel_download">Endirimi dayandır</string>
+  <string name="common_cancel_upload">Yüklənməni dayandır</string>
   <string name="common_cancel">Dayandır</string>
+  <string name="common_save_exit">Saxla &amp; Çıx</string>
   <string name="common_error">Səhv</string>
+  <string name="common_loading">Yüklənir...</string>
   <string name="common_error_unknown">Bəlli olmayan səhv baş verdi</string>
+  <string name="about_title">Haqqında</string>
+  <string name="change_password">Şifrəni dəyiş</string>
+  <string name="delete_account">Hesabı sil</string>
+  <string name="create_account">Hesab yarat</string>
+  <string name="upload_chooser_title">Burdan yüklə ...</string>
   <string name="uploader_info_dirname">Qovluq adı</string>
+  <string name="uploader_upload_in_progress_ticker">Yüklənmə gedir ...</string>
+  <string name="uploader_upload_in_progress_content">%1$d%% Yüklənmə gedir %2$s</string>
+  <string name="uploader_upload_succeeded_ticker">Uğurla yükləndi</string>
+  <string name="uploader_upload_succeeded_content_single">%1$s uğurla yüklənmişdir</string>
+  <string name="uploader_upload_failed_ticker">Yüklənmədə səhv baş verdi</string>
+  <string name="uploader_upload_failed_content_single">%1$s yüklənməsi bitə bilməz</string>
+  <string name="uploader_upload_failed_credentials_error">Yüklənmədə səhv baş verdi, siz yenidən daxil olmalısınız</string>
+  <string name="downloader_download_in_progress_ticker">Endirilir ...</string>
+  <string name="downloader_download_in_progress_content">%1$d%% Endirilir %2$s</string>
+  <string name="downloader_download_succeeded_ticker">Endirim uğurla bitdi</string>
+  <string name="downloader_download_succeeded_content">%1$s uğurla endirildi</string>
+  <string name="downloader_download_failed_ticker">Endirim olmadı</string>
+  <string name="downloader_download_failed_content">%1$s endirimi bitə bilməz</string>
+  <string name="downloader_not_downloaded_yet">Hələ endirilməyib</string>
+  <string name="downloader_download_failed_credentials_error">Endirmədə səhv, siz yenidən daxil olmalısınız</string>
+  <string name="common_choose_account">Hesabı seç</string>
+  <string name="sync_fail_ticker">Sinxronizasiyada səhv oldu</string>
+  <string name="sync_fail_ticker_unauthorized">Sinxronizasiyada səhv oldu, siz yenidən daxil olmalısınız</string>
+  <string name="sync_fail_content">%1$s sinxronizasiyası bitə bilməyəcək</string>
+  <string name="sync_fail_content_unauthorized">%1$s üçün yalnış şifrə</string>
+  <string name="sync_conflicts_in_favourites_ticker">Konflikt tapıldı</string>
+  <string name="sync_conflicts_in_favourites_content">%1$d sinxronizasiyada olan fayllar sinxronizasiya edilə bilməz</string>
+  <string name="sync_fail_in_favourites_ticker">Sinxronizasiyada saxlanılan fayllarda səhv baş verdi</string>
+  <string name="sync_fail_in_favourites_content">%1$d fayllarin kontentləri sinxronizasiya edilə bilməz (%2$d konfliktdədir)</string>
+  <string name="sync_foreign_files_forgotten_ticker">Bəzi lokal fayllar unudulmuşdur</string>
+  <string name="sync_foreign_files_forgotten_content">%1$d faylları %2$s qovluğundan kənardadır və qovluğun daxilinə nüsxələnə bilməz </string>
+  <string name="sync_foreign_files_forgotten_explanation">1.3.16 versiyasından başlayaraq, bu alətdən nüsxələnən fayllar daxili %1$s qovluğuna nüsxələnmişdir ki, bir fayl bir neçə hesabla sinxronizasiya edildikdə, data itkisinin qarşısı alınsın.
+
+Bu dəyişikliklə bağlı, bu proqramın öncəki versiyasında yüklənmiş olan fayllar %2$s qovluğuna nüsxələnmişdir. Ancaq bu hesabın sinxronizasiyası zamanı səhv baş vermişdir.\n\nSiz ya fayl(ları) saxlaya və %3$s üçün linki silə bilər, yada fayl(ları)  %1$s qovluğuna köçürə və linki %4$s -ə saxlaya bilərsiniz.
+
+Aşağıda göstərilən %5$s-də olan daxili və xarici fayl(lar) link edilmişdir.</string>
+  <string name="sync_current_folder_was_removed">%1$s qovluğu heç bir yerdə mövcud deyil</string>
+  <string name="foreign_files_move">Hamısını köçür</string>
+  <string name="foreign_files_success">Bütün fayllar köçürüldü</string>
+  <string name="foreign_files_fail">Bəzi fayllar köçürülə bilməz</string>
+  <string name="foreign_files_local_text">Daxili: %1$s</string>
+  <string name="foreign_files_remote_text">Uzaq: %1$s</string>
+  <string name="upload_query_move_foreign_files">Seçdiyiniz faylların %1$s qovluğuna köçüçrülməsi üçün kifayət qədər yer yoxdur. Əvəzinə onları köçürmək istəyirsinizmi?</string>
+  <string name="pincode_enter_pin_code">Xahiş olunur öz proqramınızın PİN-ni daxil edəsiniz</string>
+  <string name="pincode_configure_your_pin">Proqramınızın PİN-ni daxil edin</string>
+  <string name="pincode_configure_your_pin_explanation">Proqram hər dəfə işə düşdükdə PİN yenidən istəniləcək</string>
+  <string name="pincode_reenter_your_pincode">Öz proqramınızn PİN-ni yenidən daxil etməyi xahiş edirik</string>
+  <string name="pincode_remove_your_pincode">Öz proqramınızın PİN-ni silin</string>
+  <string name="pincode_mismatch">Proqram PİN-ləri eyni deyil</string>
+  <string name="pincode_wrong">Yalnış proqram PİN-i</string>
+  <string name="pincode_removed">Proqram PİN-i silindi</string>
+  <string name="pincode_stored">Proqram PİN-i saxlanıldı </string>
+  <string name="media_notif_ticker">%1$s musiqi oxuducusu</string>
+  <string name="media_state_playing">%1$s (oxuyur)</string>
+  <string name="media_state_loading">%1$s (yüklənir)</string>
+  <string name="media_event_done">%1$s geriyə oxunuş bitib</string>
   <string name="common_remove">Sil</string>
   <string name="ssl_validator_btn_details_see">Detallar</string>
-  <string name="unshare_link_file_no_exist">Fayl və ya qovluğun yayımlanmasını dayandırmaq olmur. Bu mövcud deyil.</string>
   <string name="unshare_link_file_error">Bu fayl və ya qovluğun yayımlanmasının dayandırılmasında səhv baş verdi</string>
   <string name="activity_chooser_send_file_title">Göndər</string>
   <string name="copy_link">linki nüsxələ</string>
@@ -58,4 +142,5 @@
   <string name="uploader_upload_forbidden_permissions">bu qovluğa yükləmək üçün</string>
   <string name="prefs_category_accounts">Hesablar</string>
   <string name="prefs_add_account">Hesab əlavə et</string>
+  <string name="saml_authentication_wrong_pass">Yalnış şifrə</string>
 </resources>

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

@@ -6,4 +6,5 @@
   <string name="common_ok">Добра</string>
   <string name="common_error">Памылка</string>
   <string name="empty"></string>
+  <string name="move_choose_button_text">Выбар</string>
 </resources>

+ 13 - 3
res/values-bg-rBG/strings.xml

@@ -31,7 +31,7 @@
   <string name="prefs_feedback">Обратна Връзка</string>
   <string name="prefs_imprint">Imprint</string>
   <string name="recommend_subject">Опитай %1$s на смартфона си!</string>
-  <string name="recommend_text">\"Искам да те поканя да опиташ %1$s на своя смартфон!\nИзтегли от %2$s\"</string>
+  <string name="recommend_text">Бих желал да те поканя да ползваш %1$s на своя смартфон!\nИзтеглия я от тук:%2$s</string>
   <string name="auth_check_server">Проверка на сървъра</string>
   <string name="auth_host_url">Адрес на сървъра https://…</string>
   <string name="auth_username">Потребител</string>
@@ -240,9 +240,9 @@
   <string name="error__upload__local_file_not_copied">%1$s не може да бъде копиран в локалната папка %2$s</string>
   <string name="share_link_no_support_share_api">За съжаление споделянето не е включено на сървъра ви. 
 Моля, свържете се с администратора.</string>
-  <string name="share_link_file_no_exist">Неуспешен опит за споделяне на този файл или папка. Моля, проверете дали съществува.</string>
+  <string name="share_link_file_no_exist">Неуспешен опит за споделяне. Моля, провери дали файла съществува.</string>
   <string name="share_link_file_error">Настъпи грешка при опита за споделяне на този файл или папка.</string>
-  <string name="unshare_link_file_no_exist">Неуспешен опит за премахване на споделянето на този файл или папка. Той не съществува.</string>
+  <string name="unshare_link_file_no_exist">Неуспешен опит за прекратяване на споделянето. Моля, провери дали файла съществува.</string>
   <string name="unshare_link_file_error">Настъпи грешка при опита за премахване на споделянето на този файл или папка.</string>
   <string name="activity_chooser_send_file_title">Изпращане</string>
   <string name="copy_link">Копиране на връзката</string>
@@ -264,4 +264,14 @@
   <string name="prefs_category_accounts">Профили</string>
   <string name="prefs_add_account">Добавяне на профил</string>
   <string name="auth_redirect_non_secure_connection_title">Сигурна връзка е пренасочена по несигурен път.</string>
+  <string name="saml_authentication_required_text">Нужна е идентификация</string>
+  <string name="saml_authentication_wrong_pass">Грешна парола</string>
+  <string name="actionbar_move">Премести</string>
+  <string name="file_list_empty_moving">Тук няма нищо. Можеш да добавиш папка!</string>
+  <string name="move_choose_button_text">Избери</string>
+  <string name="move_file_not_found">Неуспешно преместване. Моля, провери дали файла съществува.</string>
+  <string name="move_file_invalid_into_descendent">Не е възможно да преместиш папка в нейна под папка.</string>
+  <string name="move_file_invalid_overwrite">Файлът вече съществува в отдалечената папка.</string>
+  <string name="move_file_error">Настъпи грешка при опита за преместване на този файл или папка.</string>
+  <string name="forbidden_permissions_move">за да преместиш този файл</string>
 </resources>

+ 2 - 3
res/values-bn-rBD/strings.xml

@@ -24,7 +24,7 @@
   <string name="prefs_log_title">লগিং সক্রিয় কর</string>
   <string name="prefs_log_summary">সমস্যা তালিকাভুক্ত করার জায়গা</string>
   <string name="prefs_log_title_history">লগিং ইতিহাস </string>
-  <string name="prefs_log_summary_history">রেকরডেড লগ এখানে দেখেন</string>
+  <string name="prefs_log_summary_history">রেকরডেড লগ এখানে দেখেন</string>
   <string name="prefs_log_delete_history_button">ইতিহাস ডিলিট করেন</string>
   <string name="prefs_help">সহায়িকা</string>
   <string name="prefs_recommend">বন্ধুর কাছে সুপারিশ করুন</string>
@@ -238,9 +238,7 @@
   <string name="error__upload__local_file_not_copied">%1$s কে %2$s স্থানীয় ফোল্ডারে কপি করা গেলনা </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>
-  <string name="unshare_link_file_no_exist">এই ফাইল বা ফোল্ডার এর ভাগাভাগি রদ করা সম্ভব নয়। এর অস্তিত্ব নেই।</string>
   <string name="unshare_link_file_error">এই ফাইল অথবা ফোল্ডার ভাগাভাগি রদ করার চেষ্টা করতে যেয়ে একটি জটিলতা হয়েছে</string>
   <string name="activity_chooser_send_file_title">পাঠাও</string>
   <string name="copy_link">লিঙ্ক কপি করো</string>
@@ -262,4 +260,5 @@
   <string name="prefs_category_accounts">একাউন্ট</string>
   <string name="prefs_add_account">একাউন্ট যোগ কর</string>
   <string name="auth_redirect_non_secure_connection_title">নিরাপদ সংযোগকে একটি অনিরাপদ পথে দিকবদল করা হয়েছে</string>
+  <string name="move_choose_button_text">বেছে নিন</string>
 </resources>

+ 3 - 3
res/values-ca/strings.xml

@@ -31,7 +31,6 @@
   <string name="prefs_feedback">Comentaris</string>
   <string name="prefs_imprint">Imprint</string>
   <string name="recommend_subject">Proveu %1$s a un telèfon avançat!</string>
-  <string name="recommend_text">\"Vull convidar-te a utilitzar l\'aplicació %1$s al teu smartphone! Baixa\'l aquí: %2$s\"</string>
   <string name="auth_check_server">Comprova el servidor</string>
   <string name="auth_host_url">Adreça del servidor https://…</string>
   <string name="auth_username">Nom d\'usuari</string>
@@ -237,9 +236,7 @@
   <string name="preview_image_error_unknown_format">Aquesta imatge no es pot mostrar</string>
   <string name="error__upload__local_file_not_copied">%1$s no s\'ha pogut copiar a la carpeta local %2$s</string>
   <string name="share_link_no_support_share_api">La compartició no es troba disponible al vostre servidor. Contacteu amb l\'administrador.</string>
-  <string name="share_link_file_no_exist">No es pot compartir aquest fitxer o carpeta. Assegureu-vos que existeix</string>
   <string name="share_link_file_error">S\'ha produït un error en intentar compartir aquest fitxer o carpeta</string>
-  <string name="unshare_link_file_no_exist">No es pot deixar de compartir aquest fitxer o carpeta. No existeix.</string>
   <string name="unshare_link_file_error">S\'ha produït un error en intentar deixar de compartir aquest fitxer o carpeta</string>
   <string name="activity_chooser_send_file_title">Envia</string>
   <string name="copy_link">Copia l\'enllaç</string>
@@ -261,4 +258,7 @@
   <string name="prefs_category_accounts">Comptes</string>
   <string name="prefs_add_account">Afegeix compte</string>
   <string name="auth_redirect_non_secure_connection_title">La connexió segura està essent redirigida a través d\'una ruta insegura</string>
+  <string name="saml_authentication_required_text">Es requereix autenticació</string>
+  <string name="saml_authentication_wrong_pass">Contrasenya incorrecta</string>
+  <string name="move_choose_button_text">Escull</string>
 </resources>

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

@@ -31,7 +31,7 @@
   <string name="prefs_feedback">Odezva</string>
   <string name="prefs_imprint">Imprint</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 smartphonu!\nKe stažení zde: %2$s\"</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>
   <string name="auth_host_url">Adresa serveru https://...</string>
   <string name="auth_username">Uživatelské jméno</string>
@@ -239,9 +239,9 @@
   <string name="error__upload__local_file_not_copied">%1$s nelze zkopírovat do místního adresáře %2$s</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>
-  <string name="share_link_file_no_exist">Nepodařilo se sdílet tento soubor či složku. Ujistěte se, že existuje.</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">Nepodařilo se zrušit sdílení tohoto souboru nebo složky, protože neexistuje.</string>
+  <string name="unshare_link_file_no_exist">Nelze ukončit sdílení. Zkontrolujte prosím že soubor existuje</string>
   <string name="unshare_link_file_error">Při pokusu o zrušení sdílení tohoto souboru či složky nastala chyba</string>
   <string name="activity_chooser_send_file_title">Odeslat</string>
   <string name="copy_link">Zkopírovat odkaz</string>
@@ -263,4 +263,14 @@ administrátora.</string>
   <string name="prefs_category_accounts">Účty</string>
   <string name="prefs_add_account">Přidat účet</string>
   <string name="auth_redirect_non_secure_connection_title">Zabezpečené spojení je přesměrováváno nezabezpečenou trasou.</string>
+  <string name="saml_authentication_required_text">Vyžadováno přihlášení</string>
+  <string name="saml_authentication_wrong_pass">Nesprávné heslo</string>
+  <string name="actionbar_move">Přesunout</string>
+  <string name="file_list_empty_moving">Zde nic není. Můžete přidat adresář!</string>
+  <string name="move_choose_button_text">Vybrat</string>
+  <string name="move_file_not_found">Nelze přesunout. Zkontrolujte prosím že soubor existuje</string>
+  <string name="move_file_invalid_into_descendent">Není možné adresář přesunout do vlastního podadresáře</string>
+  <string name="move_file_invalid_overwrite">Soubor již v cílovém adresáři existuje</string>
+  <string name="move_file_error">Při pokusu o přesun tohoto souboru či složky nastala chyba</string>
+  <string name="forbidden_permissions_move">pro přesun tohoto souboru</string>
 </resources>

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

@@ -141,4 +141,5 @@
   <string name="activity_chooser_send_file_title">Anfon</string>
   <string name="empty"></string>
   <string name="prefs_category_accounts">Cyfrifon</string>
+  <string name="move_choose_button_text">Dewisiwch</string>
 </resources>

+ 33 - 24
res/values-da/strings.xml

@@ -7,41 +7,40 @@
   <string name="actionbar_upload_from_apps">Indhold fra andre apps</string>
   <string name="actionbar_upload_files">Filer</string>
   <string name="actionbar_open_with">Åben med</string>
-  <string name="actionbar_mkdir">Ny Mappe</string>
+  <string name="actionbar_mkdir">Ny mappe</string>
   <string name="actionbar_settings">Indstillinger</string>
   <string name="actionbar_see_details">Detaljer</string>
   <string name="actionbar_send_file">Send</string>
   <string name="prefs_category_general">Generel</string>
   <string name="prefs_category_more">Mere</string>
   <string name="prefs_accounts">Konti</string>
-  <string name="prefs_manage_accounts">Administrer konti</string>
+  <string name="prefs_manage_accounts">Administrér konti</string>
   <string name="prefs_pincode">App PIN</string>
   <string name="prefs_pincode_summary">Beskyt din klient</string>
   <string name="prefs_instant_upload">Upload billeder straks</string>
   <string name="prefs_instant_upload_summary">Upload straks billeder taget med kameraet</string>
   <string name="prefs_instant_video_upload">Upload videoer straks</string>
   <string name="prefs_instant_video_upload_summary">Upload straks videor optaget med kameraet</string>
-  <string name="prefs_log_title">Aktiver Logning</string>
-  <string name="prefs_log_summary">Dette bruges til at logge problemer</string>
+  <string name="prefs_log_title">Aktivér logregistrering</string>
+  <string name="prefs_log_summary">Dette bruges til at logregistrere problemer</string>
   <string name="prefs_log_title_history">Logger Historik</string>
   <string name="prefs_log_summary_history">Dette viser de optagne logger</string>
-  <string name="prefs_log_delete_history_button">Slet Historik</string>
+  <string name="prefs_log_delete_history_button">Slet historik</string>
   <string name="prefs_help">Hjælp</string>
   <string name="prefs_recommend">Anbefal til en ven</string>
   <string name="prefs_feedback">Feedback</string>
   <string name="prefs_imprint">Imprint</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">Check Server</string>
-  <string name="auth_host_url">Server addresse https://…</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>
+  <string name="auth_host_url">Serveradresse https://…</string>
   <string name="auth_username">Brugernavn</string>
   <string name="auth_password">Kodeord</string>
   <string name="auth_register">Uvant med %1$s</string>
   <string name="sync_string_files">Filer</string>
   <string name="setup_btn_connect">Tilslut</string>
   <string name="uploader_btn_upload_text">Upload</string>
-  <string name="uploader_top_message">Vælg upload mappe:</string>
+  <string name="uploader_top_message">Vælg upload-mappe:</string>
   <string name="uploader_wrn_no_account_title">Ingen konto fundet</string>
   <string name="uploader_wrn_no_account_text">Der er ingen %1$s brugere på din enhed. Sæt venligst en bruger op først.</string>
   <string name="uploader_wrn_no_account_setup_btn_text">Opsætning</string>
@@ -59,7 +58,7 @@
   <string name="filedetails_created">Oprettet:</string>
   <string name="filedetails_modified">Ændret:</string>
   <string name="filedetails_download">Hent</string>
-  <string name="filedetails_sync_file">Opdater fil</string>
+  <string name="filedetails_sync_file">Genopfrisk fil</string>
   <string name="filedetails_renamed_in_upload_msg">Filen blev omdøbt til %1$s under upload</string>
   <string name="action_share_file">Del link</string>
   <string name="action_unshare_file">Ophæv deling</string>
@@ -138,9 +137,9 @@
   <string name="media_err_security_ex">Sikkerhedsfejl ved forsøg på afspilning af </string>
   <string name="media_err_io_ex">Inputfejl ved forsøg på afspilning af %1$s</string>
   <string name="media_err_unexpected">Uventet fejl ved forsøg på afspilning af %1$s</string>
-  <string name="media_rewind_description">Tilbagespolings knap</string>
+  <string name="media_rewind_description">Tilbagespolingsknap</string>
   <string name="media_play_pause_description">Afspil eller pause knap</string>
-  <string name="media_forward_description">Hurtigt fremad kanp</string>
+  <string name="media_forward_description">Hurtigt fremad-knap</string>
   <string name="auth_getting_authorization">Forsøger godkendelse...</string>
   <string name="auth_trying_to_login">Forsøger at logge ind...</string>
   <string name="auth_no_net_conn_title">Ingen netværksforbindelse</string>
@@ -151,13 +150,13 @@
   <string name="auth_account_not_new">En konto for den samme bruger og server eksisterer allerede på enheden</string>
   <string name="auth_account_not_the_same">Den indtastede bruger passer ikke til brugeren for denne konto</string>
   <string name="auth_unknown_error_title">Ukendt fejl opstod!</string>
-  <string name="auth_unknown_host_title">Kunne ikke finde host</string>
+  <string name="auth_unknown_host_title">Kunne ikke finde værten</string>
   <string name="auth_incorrect_path_title">Server instans blev ikke fundet</string>
   <string name="auth_timeout_title">Serveren var for længe om at svare</string>
   <string name="auth_incorrect_address_title">Deform URL</string>
-  <string name="auth_ssl_general_error_title">SSL initialisering fejlede</string>
+  <string name="auth_ssl_general_error_title">SSL-initialiseringen fejlede</string>
   <string name="auth_ssl_unverified_server_title">Kunne ikke bekræfte SSl-serverens identitet</string>
-  <string name="auth_bad_oc_version_title">Ikke genkendt server version</string>
+  <string name="auth_bad_oc_version_title">Ikke genkendt serverversion</string>
   <string name="auth_wrong_connection_title">Ikke ikke oprette forbindelse</string>
   <string name="auth_secure_connection">Sikker forbindelse oprettet</string>
   <string name="auth_unauthorized">Forkert brugernavn eller kodeord</string>
@@ -172,7 +171,7 @@
   <string name="auth_unsupported_multiaccount">%1$s understøtter ikke multiple konti</string>
   <string name="auth_fail_get_user_name">Din server retunere ikke et korrekt bruger-id. Kontakt venligst din administrator</string>
   <string name="auth_can_not_auth_against_server">Kan ikke autentificere mod denne server</string>
-  <string name="fd_keep_in_sync">Hold fil opdateret</string>
+  <string name="fd_keep_in_sync">Hold filen opdateret</string>
   <string name="common_rename">Omdøb</string>
   <string name="common_remove">Fjern</string>
   <string name="confirmation_remove_alert">Er du sikker på at du vil fjerne %1$s ?</string>
@@ -196,7 +195,7 @@
   <string name="filedisplay_no_file_selected">Ingen fil blev valgt</string>
   <string name="activity_chooser_title">Send link til ...</string>
   <string name="oauth_check_onoff">Log på med oAuth2</string>
-  <string name="oauth_login_connection">Forbinder til oAuth2 server...</string>
+  <string name="oauth_login_connection">Forbinder til oAuth2-server...</string>
   <string name="ssl_validator_header">Sidens identitet kunne ikke verificeres</string>
   <string name="ssl_validator_reason_cert_not_trusted">- Serverens certifikat er ikke troværdigt</string>
   <string name="ssl_validator_reason_cert_expired">- Serverens certifikat er udløbet</string>
@@ -222,12 +221,12 @@
   <string name="ssl_validator_null_cert">Certifikatet kunne ikke vises.</string>
   <string name="ssl_validator_no_info_about_error">- Ingen information om fejlen</string>
   <string name="placeholder_sentence">Dette er en pladsholder</string>
-  <string name="placeholder_filename">stedfortræder.txt</string>
+  <string name="placeholder_filename">pladsholder.txt</string>
   <string name="placeholder_filetype">PNG Billede</string>
   <string name="placeholder_filesize">389 KB</string>
   <string name="placeholder_timestamp">2012/05/18 12:23 PM</string>
   <string name="placeholder_media_time">12:23:45</string>
-  <string name="instant_upload_on_wifi">Upload billeder kun via WiFi </string>
+  <string name="instant_upload_on_wifi">Upload kun billeder via WiFi </string>
   <string name="instant_video_upload_on_wifi">Upload kun videoer via WiFi</string>
   <string name="instant_upload_path">/Øjeblikkelig upload</string>
   <string name="conflict_title">Opdaterings konflikt</string>
@@ -235,16 +234,16 @@
   <string name="conflict_keep_both">Behold begge</string>
   <string name="conflict_overwrite">Overskriv</string>
   <string name="conflict_dont_upload">Upload ikke</string>
-  <string name="preview_image_description">Billede preview</string>
+  <string name="preview_image_description">Forhåndsvisning af billede</string>
   <string name="preview_image_error_unknown_format">Dette billede kan ikke vises</string>
   <string name="error__upload__local_file_not_copied">%1$s kunne ikke kopieres til %2$s lokale mappe</string>
   <string name="share_link_no_support_share_api">Beklager, deling er ikke slået til på din server. Kontakt venligst din administrator.</string>
-  <string name="share_link_file_no_exist">Kan ikke dele denne fil eller mappe. Find venligst ud af om den eksisterer</string>
+  <string name="share_link_file_no_exist">Kan ikke dele. Tjek venligst om filen findes.</string>
   <string name="share_link_file_error">Der opstod en fejl ved deling af denne fil eller mappe</string>
-  <string name="unshare_link_file_no_exist">Kan ikke fjerne delingen af denne fil eller mappe. Den findes ikke.</string>
+  <string name="unshare_link_file_no_exist">Kan ikke fjerne deling. Tjek venligst om filen findes.</string>
   <string name="unshare_link_file_error">Der opstod en fejl ved stopning af deling af denne mappe.</string>
   <string name="activity_chooser_send_file_title">Send</string>
-  <string name="copy_link">Kopier link</string>
+  <string name="copy_link">Kopiér link</string>
   <string name="clipboard_text_copied">Kopieret til udklipsholder</string>
   <string name="error_cant_bind_to_operations_service">Kritisk fejl: kan ikke udføre handlingerne</string>
   <string name="network_error_socket_exception">Der opstod en fejl under tilslutningen til serveren.</string>
@@ -263,4 +262,14 @@
   <string name="prefs_category_accounts">Konti</string>
   <string name="prefs_add_account">Tilføj konto</string>
   <string name="auth_redirect_non_secure_connection_title">Sikker forbindelse videredirigeres gennem en usikker rute.</string>
+  <string name="saml_authentication_required_text">Godkendelse påkrævet</string>
+  <string name="saml_authentication_wrong_pass">Forkert kodeord</string>
+  <string name="actionbar_move">Flyt</string>
+  <string name="file_list_empty_moving">Der er intet her. Du kan tilføje en mappe!</string>
+  <string name="move_choose_button_text">Vælg</string>
+  <string name="move_file_not_found">Kan ikke flytte. Tjek venligst om filen findes</string>
+  <string name="move_file_invalid_into_descendent">Det er ikke muligt at flytte en mappe til en undermappe</string>
+  <string name="move_file_invalid_overwrite">Filen findes allerede i destinationsmappen</string>
+  <string name="move_file_error">Der opstod en fejl under forsøg på at flytte denne mappe eller fil</string>
+  <string name="forbidden_permissions_move">til at flytte denne fil</string>
 </resources>

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

@@ -197,4 +197,5 @@
   <string name="clipboard_text_copied">In die Zwischenablage kopiert</string>
   <string name="empty"></string>
   <string name="prefs_category_accounts">Konten</string>
+  <string name="move_choose_button_text">Auswählen</string>
 </resources>

+ 40 - 30
res/values-de-rDE/strings.xml

@@ -7,7 +7,7 @@
   <string name="actionbar_upload_from_apps">Inhalt von anderen Apps</string>
   <string name="actionbar_upload_files">Dateien</string>
   <string name="actionbar_open_with">Öffnen mit</string>
-  <string name="actionbar_mkdir">Neues Ordner</string>
+  <string name="actionbar_mkdir">Neuer Ordner</string>
   <string name="actionbar_settings">Einstellungen</string>
   <string name="actionbar_see_details">Details</string>
   <string name="actionbar_send_file">Senden</string>
@@ -17,21 +17,21 @@
   <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">Sofortiger Bilder-Upload</string>
-  <string name="prefs_instant_upload_summary">Lade Fotos von der Kamera sofort hoch</string>
-  <string name="prefs_instant_video_upload">Sofortiger Video-Upload</string>
-  <string name="prefs_instant_video_upload_summary">Lade Videos von der Kamera sofort hoch</string>
+  <string name="prefs_instant_upload">Sofortiges Bilderhochladen</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_summary">Videos von der Kamera sofort hochladen</string>
   <string name="prefs_log_title">Protokollierung aktivieren</string>
-  <string name="prefs_log_summary">Dies wird zur Protokollierung von Problemen genutzt</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">Dies zeigt die gespeicherten Protokollierungen</string>
+  <string name="prefs_log_summary_history">Dieses zeigt die gespeicherten Protokollierungen</string>
   <string name="prefs_log_delete_history_button">Verlauf löschen</string>
   <string name="prefs_help">Hilfe</string>
-  <string name="prefs_recommend">Empfehlen Sie dies einem Freund</string>
+  <string name="prefs_recommend">Dieses einem Freund empfehlen</string>
   <string name="prefs_feedback">Rückmeldungen</string>
   <string name="prefs_imprint">Impressum</string>
-  <string name="recommend_subject">Probieren Sie %1$s auf Ihrem Smartphone!</string>
-  <string name="recommend_text">\"Ich möchte Sie zum Benutzen von %1$s auf Ihrem Smartphone einladen!\nLaden Sie es hier herunter: %2$s\"</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>
   <string name="auth_host_url">Server-Adresse https://…</string>
   <string name="auth_username">Benutzername</string>
@@ -40,7 +40,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">Wähle Zielordner:</string>
+  <string name="uploader_top_message">Zielordner 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>
@@ -50,7 +50,7 @@
   <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_empty">Alles leer. Laden Sie etwas hoch!</string>
-  <string name="file_list_loading">Lade…</string>
+  <string name="file_list_loading">Ladevorgang …</string>
   <string name="local_file_list_empty">Es befinden sich keine Dateien in diesem Ordner.</string>
   <string name="filedetails_select_file">Klicken Sie auf eine Datei für weitere Informationen.</string>
   <string name="filedetails_size">Größe:</string>
@@ -103,7 +103,7 @@
   <string name="sync_fail_in_favourites_ticker">Synchronisationsdateien konnten nicht synchronisiert werden.</string>
   <string name="sync_fail_in_favourites_content">Inhalte von %1$d konnte nicht synchronisiert werden (%2$d Konflikte)</string>
   <string name="sync_foreign_files_forgotten_ticker">Einige lokale Dateien wurden vergessen</string>
-  <string name="sync_foreign_files_forgotten_content">%1$d Dateien aus dem %2$s Verzeichnis konnten nicht kopiert werden nach</string>
+  <string name="sync_foreign_files_forgotten_content">%1$d Dateien aus dem %2$s Ordner konnten nicht kopiert werden nach</string>
   <string name="sync_foreign_files_forgotten_explanation">Mit Version 1.3.16 werden Dateien die von diesem Gerät aus hochgeladen werden in den lokalen Ordner %1$s kopiert um Datenverlust zu vermeiden, wenn eine einzelne Datei mit mehreren Accounts synchronisiert wird.\n\nInfolge dieser Änderung wurden alle Dateien, die mit vorherigen Versionen dieser App hochgeladen wurden, in den Ordner %2$s verschoben. Jedoch ist während der Account-Synchronisation ein Fehler aufgetreten, der das Abschließen dieses Vorgangs verhindert. Sie können die Datei(en) entweder wie sie sind belassen und den Link zu %3$s entfernen oder die Datei(en) in den %1$s Ordner verschieben und  den Link zu %4$s beibehalten.\n\nUnten befindet sich eine Liste der lokalen Datei(en) und der mit ihnen verbundenen Remote-Datei(en) in %5$s.</string>
   <string name="sync_current_folder_was_removed">Das Verzeichnis %1$s existiert nicht mehr</string>
   <string name="foreign_files_move">Verschiebe alle</string>
@@ -140,12 +140,12 @@
   <string name="media_rewind_description">Zurückspulen Button</string>
   <string name="media_play_pause_description">Abspielen oder Pausieren Button</string>
   <string name="media_forward_description">Vorspulen Button</string>
-  <string name="auth_getting_authorization">Autorisierung empfangen...</string>
-  <string name="auth_trying_to_login">Anmeldungsversuch...</string>
+  <string name="auth_getting_authorization">Legitimierung empfangen …</string>
+  <string name="auth_trying_to_login">Anmeldeversuch …</string>
   <string name="auth_no_net_conn_title">Keine Netzwerkverbindung</string>
   <string name="auth_nossl_plain_ok_title">Sichere Verbindung nicht verfügbar.</string>
   <string name="auth_connection_established">Verbindung hergestellt</string>
-  <string name="auth_testing_connection">Verbindung testen...</string>
+  <string name="auth_testing_connection">Verbindungstest …</string>
   <string name="auth_not_configured_title">Fehlerhafte Server Konfiguration</string>
   <string name="auth_account_not_new">Ein Benutzerkonto für den gleichen Benutzer und Server existiert auf diesem Gerät bereits</string>
   <string name="auth_account_not_the_same">Der eingegebene Benutzer passt nicht zu dem Benutzer dieses Benutzerkontos</string>
@@ -160,18 +160,18 @@
   <string name="auth_wrong_connection_title">Konnte keine Verbindung aufbauen.</string>
   <string name="auth_secure_connection">Sichere Verbindung hergestellt</string>
   <string name="auth_unauthorized">Falscher Benutzername oder Passwort</string>
-  <string name="auth_oauth_error">Autorisierung nicht erfolgreich</string>
-  <string name="auth_oauth_error_access_denied">Zugriff durch den Autorisierungsserver abgelehnt</string>
-  <string name="auth_wtf_reenter_URL">Unerwarteter Zustand; bitte geben Sie die URL des Servers nochmals ein</string>
-  <string name="auth_expired_oauth_token_toast">Ihre Autorisierung ist abgelaufen. Bitte Autorisierung nochmals durchführen</string>
+  <string name="auth_oauth_error">Legitimierung nicht erfolgreich</string>
+  <string name="auth_oauth_error_access_denied">Zugriff durch den Legitimierungsserver abgelehnt</string>
+  <string name="auth_wtf_reenter_URL">Unerwarteter Zustand; bitte geben Sie die Adresse des Servers nochmals ein</string>
+  <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">Verbinde mit dem Authentifizierung-Server…</string>
-  <string name="auth_unsupported_auth_method">Der Server unterstützt diese Authentifizierung-Methode nicht</string>
+  <string name="auth_connecting_auth_server">Zum Legitimierungsserver wird verbunden …</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_fail_get_user_name">Ihr Server gibt keine korrekte Benutzer-ID zurück, bitte kontaktieren Sie einen Administrator
+  <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 Authentifizierung gegenüber dem Server konnte nicht durchgeführt werden</string>
+  <string name="auth_can_not_auth_against_server">Die Legitimierung gegenüber dem Server konnte nicht durchgeführt werden</string>
   <string name="fd_keep_in_sync">Datei aktuell halten</string>
   <string name="common_rename">Umbenennen</string>
   <string name="common_remove">Löschen</string>
@@ -188,15 +188,15 @@
   <string name="rename_server_fail_msg">Die Umbenennung konnte nicht abgeschlossen werden.</string>
   <string name="sync_file_fail_msg">Die entfernte Datei konnte nicht überprüft werden</string>
   <string name="sync_file_nothing_to_do_msg">Dateiinhalte bereits synchronisiert</string>
-  <string name="create_dir_fail_msg">Verzeichnis konnte nicht erstellt werden</string>
+  <string name="create_dir_fail_msg">Ordner konnte nicht erstellt werden</string>
   <string name="filename_forbidden_characters">Verbotene Zeichen: / \\ &lt; &gt; : \" | ? *</string>
   <string name="filename_empty">Dateiname darf nicht leer sein</string>
   <string name="wait_a_moment">Bitte warten Sie einen Moment.</string>
   <string name="filedisplay_unexpected_bad_get_content">Ein unerwartetes Problem ist aufgetreten. Bitte versuchen Sie, die Datei in einer anderen App zu öffnen.</string>
   <string name="filedisplay_no_file_selected">Es wurde keine Datei ausgewählt.</string>
-  <string name="activity_chooser_title">Link senden an ...</string>
+  <string name="activity_chooser_title">Link senden an </string>
   <string name="oauth_check_onoff">Anmelden mit oAuth2</string>
-  <string name="oauth_login_connection">Verbinde mit dem oAuth2-Server…</string>
+  <string name="oauth_login_connection">Mit dem oAuth2-Server wird verbunden …</string>
   <string name="ssl_validator_header">Die Identität der Website konnte nicht überprüft werden</string>
   <string name="ssl_validator_reason_cert_not_trusted">- Das Zertifikat des Servers ist nicht vertrauenswürdig</string>
   <string name="ssl_validator_reason_cert_expired">- Das Zertifikat des Servers ist abgelaufen</string>
@@ -219,7 +219,7 @@
   <string name="ssl_validator_label_validity_to">An:</string>
   <string name="ssl_validator_label_signature">Signatur:</string>
   <string name="ssl_validator_label_signature_algorithm">Algorithmus:</string>
-  <string name="ssl_validator_null_cert">Das Zertifikat konnte nicht gezeigt werden.</string>
+  <string name="ssl_validator_null_cert">Das Zertifikat konnte nicht angezeigt werden.</string>
   <string name="ssl_validator_no_info_about_error">- Keine Informationen über den Fehler</string>
   <string name="placeholder_sentence">Dies ist ein Platzhalter</string>
   <string name="placeholder_filename">platzhalter.txt</string>
@@ -240,9 +240,9 @@
   <string name="error__upload__local_file_not_copied">%1$s konnte nicht in den lokalen %2$s Ordner kopiert werden</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">Die Freigabe der Datei oder des Ordners ist nicht möglich. Bitte stellen Sie sicher, dass diese existiert.</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_error">Es ist ein Fehler beim Freigeben der Datei oder des Ordners aufgetreten.</string>
-  <string name="unshare_link_file_no_exist">Das Entfernen der Freigabe für die Datei oder den Ordner ist nicht möglich. Diese existieren nicht.</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_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>
@@ -264,4 +264,14 @@
   <string name="prefs_category_accounts">Konten</string>
   <string name="prefs_add_account">Konto hinzufügen</string>
   <string name="auth_redirect_non_secure_connection_title">Die gesicherte Verbindung wird auf eine unsichere Route weitergeleitet.</string>
+  <string name="saml_authentication_required_text">Authentifizierung benötigt</string>
+  <string name="saml_authentication_wrong_pass">Falsches Passwort</string>
+  <string name="actionbar_move">Verschieben</string>
+  <string name="file_list_empty_moving">Nichts vorhanden. Sie können einen Ordner hinzufügen!</string>
+  <string name="move_choose_button_text">Auswählen</string>
+  <string name="move_file_not_found">Verschieben nicht möglich. Prüfen Sie, ob die Datei existiert</string>
+  <string name="move_file_invalid_into_descendent">Es ist nicht möglich einen Ordner eine Ebene tiefer zu verschieben</string>
+  <string name="move_file_invalid_overwrite">Die Datei existiert bereits im Zielordner</string>
+  <string name="move_file_error">Es ist ein Fehler beim Verschieben dieser Datei oder Ordners aufgetreten.</string>
+  <string name="forbidden_permissions_move">um diese Datei zu verschieben</string>
 </resources>

+ 14 - 4
res/values-de/strings.xml

@@ -31,7 +31,7 @@
   <string name="prefs_feedback">Rückmeldungen</string>
   <string name="prefs_imprint">Impressum</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="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>
   <string name="auth_host_url">Server-Adresse https://…</string>
   <string name="auth_username">Benutzername</string>
@@ -50,7 +50,7 @@
   <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_empty">Alles leer. Lade etwas hoch!</string>
-  <string name="file_list_loading">Lade...</string>
+  <string name="file_list_loading">Ladevorgang …</string>
   <string name="local_file_list_empty">Es befinden sich keine Dateien in diesem Ordner.</string>
   <string name="filedetails_select_file">Klicken Sie auf eine Datei für weitere Informationen.</string>
   <string name="filedetails_size">Größe:</string>
@@ -240,9 +240,9 @@
   <string name="error__upload__local_file_not_copied">%1$s konnte nicht in den lokalen %2$s Ordner kopiert werden</string>
   <string name="share_link_no_support_share_api">Entschuldigung, Freigaben sind auf Deinem Server nicht aktiviert. Bitte kontaktiere Deinen
 ⇥⇥Administrator.</string>
-  <string name="share_link_file_no_exist">Die Freigabe der Datei oder des Ordners ist nicht möglich. Bitte stelle sicher, dass diese existiert.</string>
+  <string name="share_link_file_no_exist">Teilen nicht möglich. Prüfe, dass 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">Das Entfernen der Freigabe für die Datei oder den Ordner ist nicht möglich. Diese existieren nicht.</string>
+  <string name="unshare_link_file_no_exist">Entfernen der Freigabe nicht möglich. Prüfe, dass 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>
@@ -264,4 +264,14 @@
   <string name="prefs_category_accounts">Konten</string>
   <string name="prefs_add_account">Konto hinzufügen</string>
   <string name="auth_redirect_non_secure_connection_title">Die gesicherte Verbindung wird auf eine unsichere Route weitergeleitet.</string>
+  <string name="saml_authentication_required_text">Authentifizierung benötigt</string>
+  <string name="saml_authentication_wrong_pass">Falsches Passwort</string>
+  <string name="actionbar_move">Verschieben</string>
+  <string name="file_list_empty_moving">Nichts vorhanden. Du kannst einen Ordner hinzufügen!</string>
+  <string name="move_choose_button_text">Auswählen</string>
+  <string name="move_file_not_found">Verschieben nicht möglich. Prüfe, dass die Datei existiert</string>
+  <string name="move_file_invalid_into_descendent">Es ist nicht möglich einen Ordner eine Ebene tiefer zu verschieben</string>
+  <string name="move_file_invalid_overwrite">Die Datei existiert bereits im Zielordner</string>
+  <string name="move_file_error">Es ist ein Fehler beim Verschieben dieser Datei oder Ordners aufgetreten.</string>
+  <string name="forbidden_permissions_move">zum Datei verschieben</string>
 </resources>

+ 3 - 2
res/values-el/strings.xml

@@ -238,9 +238,7 @@
   <string name="error__upload__local_file_not_copied">Το %1$s δεν μπόρεσε να αντιγραφεί στον τοπικό φάκελο %2$s</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>
-  <string name="unshare_link_file_no_exist">Ήταν αδύνατη η ακύρωση διαμοιρασμού αυτού του αρχείου ή φακέλου. Δεν υπάρχει.</string>
   <string name="unshare_link_file_error">Ένα σφάλμα προέκυψε κατά τη διάρκεια ακύρωσης διαμοιρασμού αυτού του αρχείου ή φακέλου</string>
   <string name="activity_chooser_send_file_title">Αποστολή</string>
   <string name="copy_link">Αντιγραφή συνδέσμου</string>
@@ -262,4 +260,7 @@
   <string name="prefs_category_accounts">Λογαριασμοί</string>
   <string name="prefs_add_account">Προσθήκη λογαριασμού</string>
   <string name="auth_redirect_non_secure_connection_title">Ασφαλής σύνδεση ανακατευθύνεται μέσω μιας μη ασφαλούς διαδρομής.</string>
+  <string name="saml_authentication_required_text">Απαιτείται πιστοποίηση</string>
+  <string name="saml_authentication_wrong_pass">Εσφαλμένο συνθηματικό</string>
+  <string name="move_choose_button_text">Επιλέξτε</string>
 </resources>

+ 13 - 4
res/values-en-rGB/strings.xml

@@ -31,8 +31,7 @@
   <string name="prefs_feedback">Feedback</string>
   <string name="prefs_imprint">Imprint</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="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>
   <string name="auth_host_url">Server address https://…</string>
   <string name="auth_username">Username</string>
@@ -241,9 +240,9 @@
   <string name="error__upload__local_file_not_copied">%1$s could not be copied to %2$s local folder</string>
   <string name="share_link_no_support_share_api">Sorry, sharing is not enabled on your server. Please contact your
 		administrator.</string>
-  <string name="share_link_file_no_exist">Unable to share this file or folder. Please, make sure it exists</string>
+  <string name="share_link_file_no_exist">Unable to share. Please check whether the file exists</string>
   <string name="share_link_file_error">An error occurred while trying to share this file or folder</string>
-  <string name="unshare_link_file_no_exist">Unable to unshare this file or folder. It does not exist.</string>
+  <string name="unshare_link_file_no_exist">Unable to unshare. Please check whether the file exists</string>
   <string name="unshare_link_file_error">An error occurred while trying to unshare this file or folder</string>
   <string name="activity_chooser_send_file_title">Send</string>
   <string name="copy_link">Copy link</string>
@@ -265,4 +264,14 @@
   <string name="prefs_category_accounts">Accounts</string>
   <string name="prefs_add_account">Add account</string>
   <string name="auth_redirect_non_secure_connection_title">Secure connection is redirected through an unsecured route.</string>
+  <string name="saml_authentication_required_text">Authentication required</string>
+  <string name="saml_authentication_wrong_pass">Incorrect password</string>
+  <string name="actionbar_move">Move</string>
+  <string name="file_list_empty_moving">Nothing in here. You can add a folder!</string>
+  <string name="move_choose_button_text">Choose</string>
+  <string name="move_file_not_found">Unable to move. Please check whether the file exists</string>
+  <string name="move_file_invalid_into_descendent">It is not possible to move a folder into a descendant</string>
+  <string name="move_file_invalid_overwrite">The file exists already in the destination folder</string>
+  <string name="move_file_error">An error occurred whilst trying to move this file or folder</string>
+  <string name="forbidden_permissions_move">to move this file</string>
 </resources>

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

@@ -183,4 +183,7 @@
   <string name="network_error_socket_exception">Eraro okazis dum konekto al la servilo.</string>
   <string name="empty"></string>
   <string name="prefs_category_accounts">Kontoj</string>
+  <string name="saml_authentication_required_text">Aŭtentiĝo nepras</string>
+  <string name="saml_authentication_wrong_pass">Malĝusta pasvorto</string>
+  <string name="move_choose_button_text">Elekti</string>
 </resources>

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

@@ -238,4 +238,7 @@
   <string name="clipboard_text_copied">Copiado al portapapeles</string>
   <string name="empty"></string>
   <string name="prefs_category_accounts">Cuentas</string>
+  <string name="saml_authentication_required_text">Autentificación requerida</string>
+  <string name="saml_authentication_wrong_pass">Clave incorrecta</string>
+  <string name="move_choose_button_text">Elegir</string>
 </resources>

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

@@ -166,4 +166,5 @@
   <string name="error__upload__local_file_not_copied">%1$s no pudo ser copiado a la carpeta local %2$s</string>
   <string name="empty"></string>
   <string name="prefs_category_accounts">Cuentas</string>
+  <string name="move_choose_button_text">Choose</string>
 </resources>

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

@@ -213,4 +213,6 @@
   <string name="clipboard_text_copied">Copiado al portapapeles</string>
   <string name="empty"></string>
   <string name="prefs_category_accounts">Cuentas</string>
+  <string name="saml_authentication_wrong_pass">Contraseña incorrecta</string>
+  <string name="move_choose_button_text">Seleccionar</string>
 </resources>

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

@@ -31,6 +31,7 @@
   <string name="prefs_feedback">Mensajes de retroalimentación</string>
   <string name="prefs_imprint">pie de imprenta</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>
   <string name="auth_host_url">Dirección del servidor https://…</string>
   <string name="auth_username">Nombre de usuario</string>
@@ -238,9 +239,9 @@
   <string name="error__upload__local_file_not_copied">%1$s no pudo ser copiado a la carpeta local %2$s</string>
   <string name="share_link_no_support_share_api">La función Compartir no está activada en su servidor. Contacte a su
 		administrador.</string>
-  <string name="share_link_file_no_exist">No es posible compartir este archivo o carpeta. Asegúrese de que existe.</string>
+  <string name="share_link_file_no_exist">No se puede compartir. Revise si el archivo existe</string>
   <string name="share_link_file_error">Ocurrió un error al tratar de compartir este archivo o carpeta</string>
-  <string name="unshare_link_file_no_exist">No se puede dejar de compartir este archivo o carpeta. No existe.</string>
+  <string name="unshare_link_file_no_exist">No se puede dejar de compartir. Revise si el archivo existe</string>
   <string name="unshare_link_file_error">Ocurrió un error al tratar de ya no compartir este archivo o carpeta</string>
   <string name="activity_chooser_send_file_title">Enviar</string>
   <string name="copy_link">Copiar enlace</string>
@@ -262,4 +263,13 @@
   <string name="prefs_category_accounts">Cuentas</string>
   <string name="prefs_add_account">Agregar cuenta</string>
   <string name="auth_redirect_non_secure_connection_title">La conexión segura está siendo redirigida por una ruta insegura.</string>
+  <string name="saml_authentication_required_text">Se necesita autenticación</string>
+  <string name="saml_authentication_wrong_pass">Contraseña incorrecta</string>
+  <string name="actionbar_move">Mover</string>
+  <string name="file_list_empty_moving">Aquí no hay nada. ¡Puede agregar una carpeta!</string>
+  <string name="move_choose_button_text">Seleccionar</string>
+  <string name="move_file_not_found">No se puede mover. Revise si el archivo existe</string>
+  <string name="move_file_invalid_overwrite">El archivo ya existe en la carpeta de destino</string>
+  <string name="move_file_error">Hubo un error al tratar de mover este archivo o carpeta</string>
+  <string name="forbidden_permissions_move">para mover este archivo</string>
 </resources>

+ 17 - 4
res/values-et-rEE/strings.xml

@@ -31,8 +31,6 @@
   <string name="prefs_feedback">Tagasiside</string>
   <string name="prefs_imprint">Impressum</string>
   <string name="recommend_subject">Proovi oma nutitelefonil rakendust %1$s!</string>
-  <string name="recommend_text">\"Ma kutsun sind kasutama oma telefonis rakendust %1$s!\nLaadi see alla siit: %2$s\"
-	</string>
   <string name="auth_check_server">Kontrolli serverit</string>
   <string name="auth_host_url">Serveri aadress https://...</string>
   <string name="auth_username">Kasutajanimi</string>
@@ -105,6 +103,11 @@
   <string name="sync_fail_in_favourites_content">Faili %1$d sisu ei suudeta sünkroniseerida (konflikt %2$d)</string>
   <string name="sync_foreign_files_forgotten_ticker">Osad kohalikud faili ununesid</string>
   <string name="sync_foreign_files_forgotten_content">%1$d faili %2$s kataloogis ei saa kopeerida</string>
+  <string name="sync_foreign_files_forgotten_explanation">Alates versioonist 1.3.16 failid, mis on üles laaditud kopeeritakse kohalikku kataloogi %1$s vältimaks andmete kadu vältimaks andmete kadu juhul, kui ühte faili sünkroniseeritakse mitmelt kontolt.
+
+Selle muudatusega seoses kõik failid, mis on üles laetud rakenduse vanemate versioonidega, kopeeriti kataloogi %2$s.  Selle tegevuse peatas viga, mis tekkis konto sünkroniseerimise käigus. Sa saad jätta faili(d) nagu nad on ning eemaldata viite %3$s või tõsta faili(d) %1$s kataloogi ja säilitada viite %4$s. 
+
+Allpool on loend kohalikest failidest ning serveris asuvatest failidest %5$s, millele nad viitavad.</string>
   <string name="sync_current_folder_was_removed">Kausta %1$s pole enam olemas</string>
   <string name="foreign_files_move">Tõsta kõik ümber</string>
   <string name="foreign_files_success">Kõik failid tõsteti ümber</string>
@@ -240,9 +243,9 @@
   <string name="error__upload__local_file_not_copied">%1$s ei suudetud kopeerida kohalikku kataloogi %2$s</string>
   <string name="share_link_no_support_share_api">Vabandust, server ei toeta jagamist. Palun kontakteeru 
 ⇥⇥administraatoriga.</string>
-  <string name="share_link_file_no_exist">Antud faili või kausta ei saa jagada. Tee kindlaks, et see on olemas</string>
+  <string name="share_link_file_no_exist">Jagamine ebaõnnestus. Palun kontrolli, kas fail on olemas</string>
   <string name="share_link_file_error">Faili või kausta jagamisel esines viga</string>
-  <string name="unshare_link_file_no_exist">Antud faili või kausta jagamist pole võimalik tühistada</string>
+  <string name="unshare_link_file_no_exist">Liigutamise lõpetamine ebaõnnestus. Palun kontrolli, kas fail on olemas</string>
   <string name="unshare_link_file_error">Faili või kausta jagamise tühistamisel esines viga</string>
   <string name="activity_chooser_send_file_title">Saada</string>
   <string name="copy_link">Kopeeri link</string>
@@ -264,4 +267,14 @@
   <string name="prefs_category_accounts">Kontod</string>
   <string name="prefs_add_account">Lisa konto</string>
   <string name="auth_redirect_non_secure_connection_title">Turvalist ühendust suunatakse läbi turvamata ühenduse.</string>
+  <string name="saml_authentication_required_text">Autentimine on vajalik</string>
+  <string name="saml_authentication_wrong_pass">Vale parool</string>
+  <string name="actionbar_move">Tõsta ümber</string>
+  <string name="file_list_empty_moving">Siin pole midagi. Sa võid lisada kausta!</string>
+  <string name="move_choose_button_text">Vali</string>
+  <string name="move_file_not_found">Liigutamine ebaõnnestus. Palun kontrolli, kas fail on olemas</string>
+  <string name="move_file_invalid_into_descendent">Kausta ei saa liigutada selle alamkausta</string>
+  <string name="move_file_invalid_overwrite">See fail on juba sihtkaustas olemas</string>
+  <string name="move_file_error">Selle faili või kausta liigutamisel tekkis tõrge</string>
+  <string name="forbidden_permissions_move">selle faili liigutamiseks</string>
 </resources>

+ 3 - 2
res/values-eu/strings.xml

@@ -237,9 +237,7 @@ Mesedez, baimendu berriz</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="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_no_exist">Ezin izan da karpeta edo fitxategi hau partekatu. Mesedez, ziurtatu existitzen dela</string>
   <string name="share_link_file_error">Errore bat egon da fitxategaia edo karpeta partekatzerakoan</string>
-  <string name="unshare_link_file_no_exist">Ezin izan da karpeta edo fitxategi honen partekatzeari utzi. Ez da existitzen.</string>
   <string name="unshare_link_file_error">Errore bat egon da fitxategaia edo karpeta partekatzeari uzterakoan</string>
   <string name="activity_chooser_send_file_title">Bidali</string>
   <string name="copy_link">Lotura kopiatu</string>
@@ -261,4 +259,7 @@ Mesedez, baimendu berriz</string>
   <string name="prefs_category_accounts">Kontuak</string>
   <string name="prefs_add_account">Gehitu kontua</string>
   <string name="auth_redirect_non_secure_connection_title">Konexio segurua birbideratu da segurua ez den bide batetik.</string>
+  <string name="saml_authentication_required_text">Autentikazioa beharrezkoa</string>
+  <string name="saml_authentication_wrong_pass">Pasahitz okerra</string>
+  <string name="move_choose_button_text">Aukeratu</string>
 </resources>

+ 3 - 2
res/values-fa/strings.xml

@@ -217,9 +217,7 @@
   <string name="conflict_dont_upload">آپلود نکن</string>
   <string name="preview_image_description">پیش نمایش تصویر</string>
   <string name="preview_image_error_unknown_format">نمایش این عکس امکانپذیر نمی باشد</string>
-  <string name="share_link_file_no_exist">به اشتراک گذاری این فایل یا پوشه ممکن نیست. لطفاً از وجود آن اطمینان حاصل نمایید</string>
   <string name="share_link_file_error">در حین اشتراک گذاری این فایل یا پوشه خطایی رخ داده است</string>
-  <string name="unshare_link_file_no_exist">حذف اشتراک گذاری این فایل یا پوشه ممکن نیست. لطفاً از وجود آن اطمینان حاصل نمایید</string>
   <string name="unshare_link_file_error">در حین حذف اشتراک گذاری این فایل یا پوشه خطایی رخ داده است</string>
   <string name="activity_chooser_send_file_title">ارسال</string>
   <string name="clipboard_text_copied">کپی به کلیپ بورد</string>
@@ -231,4 +229,7 @@
   <string name="uploader_upload_forbidden_permissions">برای آپلود در این پوشه</string>
   <string name="downloader_download_file_not_found">این فایل دیگر روی سرور وجود ندارد</string>
   <string name="prefs_category_accounts">حساب‌ها</string>
+  <string name="saml_authentication_required_text">احراز هویت مورد نیاز است</string>
+  <string name="saml_authentication_wrong_pass">رمز عبور اشتباه است</string>
+  <string name="move_choose_button_text">انتخاب کردن</string>
 </resources>

+ 10 - 4
res/values-fi-rFI/strings.xml

@@ -30,8 +30,6 @@
   <string name="prefs_recommend">Suosittele kaverille</string>
   <string name="prefs_feedback">Palaute</string>
   <string name="recommend_subject">Kokeile %1$sia älypuhelimellasi!</string>
-  <string name="recommend_text">\"Kutsun sinut käyttämään %1$sia älypuhelimellasi!\nLataa tästä: %2$s\"
-	</string>
   <string name="auth_check_server">Tarkista palvelin</string>
   <string name="auth_host_url">Palvelinosoite https://…</string>
   <string name="auth_username">Käyttäjätunnus</string>
@@ -124,6 +122,8 @@
   <string name="media_err_io">Mediatiedoston luku ei onnistunut</string>
   <string name="media_err_timeout">Aikakatkaisu toistoa yrittäessä</string>
   <string name="media_err_invalid_progressive_playback">Mediatiedostoa ei voi suoratoistaa</string>
+  <string name="media_err_security_ex">Turvallisuusvirhe yrittäessä toistaa kohdetta %1$s</string>
+  <string name="media_err_unexpected">Odottamaton virhe yrittäessä toistaa kohdetta %1$s</string>
   <string name="media_rewind_description">Taaksepäin kelaus -painike</string>
   <string name="media_play_pause_description">Toisto tai keskeytys -painike</string>
   <string name="media_forward_description">Eteenpäin kelaus -painike</string>
@@ -219,9 +219,7 @@
   <string name="preview_image_error_unknown_format">Tätä kuvaa ei voi näyttää</string>
   <string name="share_link_no_support_share_api">Jakaminen ei ole käytössä palvelimellasi. Ota yhteys
 		ylläpitäjään.</string>
-  <string name="share_link_file_no_exist">Valitettavasti tämän tiedoston tai kansion jakaminen ei onnistu. Varmista että se on olemassa</string>
   <string name="share_link_file_error">Virhe tiedoston tai kansion jakamista yrittäessä</string>
-  <string name="unshare_link_file_no_exist">Tämän tiedoston tai kansion jaon poistaminen ei onnistunut, koska sitä ei ole olemassa.</string>
   <string name="activity_chooser_send_file_title">Lähetä</string>
   <string name="copy_link">Kopioi linkki</string>
   <string name="clipboard_text_copied">Kopioitu leikepöydälle</string>
@@ -242,4 +240,12 @@
   <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="saml_authentication_required_text">Tunnistautuminen vaaditaan</string>
+  <string name="saml_authentication_wrong_pass">Väärä salasana</string>
+  <string name="actionbar_move">Siirrä</string>
+  <string name="file_list_empty_moving">Täällä ei ole mitään. Voit lisätä kansion!</string>
+  <string name="move_choose_button_text">Valitse</string>
+  <string name="move_file_not_found">Siirto ei onnistu. Tarkista, ettei tiedostoa ole jo olemassa</string>
+  <string name="move_file_invalid_overwrite">Tiedosto on jo olemassa kohdekansiossa</string>
+  <string name="move_file_error">Tämän tiedoston tai kansion siirtoa yrittäessä tapahtui virhe</string>
 </resources>

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

@@ -237,9 +237,7 @@
   <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="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_file_no_exist">Impossible de partager ce fichier ou répertoire. Vérifiez qu’il 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 d’annuler le partage de ce fichier ou répertoire : il n’existe pas.</string>
   <string name="unshare_link_file_error">Une erreur est survenue lors de la tentative d’annulation du partage de ce fichier ou répertoire</string>
   <string name="activity_chooser_send_file_title">Envoyer</string>
   <string name="copy_link">Copier le lien</string>
@@ -260,4 +258,8 @@
   <string name="downloader_download_file_not_found">Ce fichier n’est plus disponible sur le serveur</string>
   <string name="prefs_category_accounts">Comptes</string>
   <string name="prefs_add_account">Ajouter un compte</string>
+  <string name="saml_authentication_required_text">Authentification requise</string>
+  <string name="saml_authentication_wrong_pass">Mot de passe incorrect</string>
+  <string name="actionbar_move">Déplacer</string>
+  <string name="move_choose_button_text">Choisir</string>
 </resources>

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

@@ -238,9 +238,7 @@
   <string name="error__upload__local_file_not_copied">Non foi posíbel copiar %1$s no cartafol local %2$s</string>
   <string name="share_link_no_support_share_api">O seu servidor non ten activada a opción de compartir. Póñase en contacto co
 		administrador.</string>
-  <string name="share_link_file_no_exist">Non foi posíbel compartir este ficheiro ou cartafol. Asegurese de que existe.</string>
   <string name="share_link_file_error">Produciuse un erro ao tentar compartir este ficheiro ou cartafol.</string>
-  <string name="unshare_link_file_no_exist">Non foi posíbel deixar de compartir este ficheiro ou cartafol xa que non existe.</string>
   <string name="unshare_link_file_error">Produciuse un erro ao tentar deixar de compartir este ficheiro ou cartafol</string>
   <string name="activity_chooser_send_file_title">Enviar</string>
   <string name="copy_link">Copiar a ligazón</string>
@@ -262,4 +260,8 @@
   <string name="prefs_category_accounts">Contas</string>
   <string name="prefs_add_account">Engadir unha conta</string>
   <string name="auth_redirect_non_secure_connection_title">A conexión segura está a ser redirixida a través dunha ruta non segura.</string>
+  <string name="saml_authentication_required_text">Requírese autenticación</string>
+  <string name="saml_authentication_wrong_pass">Contrasinal incorrecto</string>
+  <string name="actionbar_move">Mover</string>
+  <string name="move_choose_button_text">Escoller</string>
 </resources>

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

@@ -31,8 +31,6 @@
   <string name="prefs_feedback">משוב</string>
   <string name="prefs_imprint">חותמת</string>
   <string name="recommend_subject">לבדיקה %1$s בטלפון החכם שלך!</string>
-  <string name="recommend_text">\"הנכם מוזמנים להשתמש ב- %1$s בטלפון החכם שלכם!\n קישור הורדה כאן: %2$s\"
-⇥</string>
   <string name="auth_check_server">בודק שרת</string>
   <string name="auth_host_url">כתובת שרת https://…</string>
   <string name="auth_username">שם משתמש</string>
@@ -241,9 +239,7 @@
   <string name="error__upload__local_file_not_copied">%1$s לא ניתן להעתקה לתיקייה מקומית %2$s</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>
-  <string name="unshare_link_file_no_exist">לא ניתן לבטל שיתוף לקובץ זה או לתיקייה זו. הקובץ או התיקייה אינם קיימים.</string>
   <string name="unshare_link_file_error">שגיאה אירעה בזמן ניסיון לבטל שיתוף לקובץ זה או לתיקייה זו</string>
   <string name="activity_chooser_send_file_title">שליחה</string>
   <string name="copy_link">העתקת קישור</string>
@@ -265,4 +261,5 @@
   <string name="prefs_category_accounts">חשבונות</string>
   <string name="prefs_add_account">הוספת חשבון</string>
   <string name="auth_redirect_non_secure_connection_title">חיבור מאובטח מנותב דרך נתיב לא מאובטח</string>
+  <string name="move_choose_button_text">בחירה</string>
 </resources>

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

@@ -2,7 +2,9 @@
 <resources>
   <string name="actionbar_upload">Učitaj</string>
   <string name="actionbar_upload_files">Datoteke</string>
+  <string name="actionbar_mkdir">Nova mapa</string>
   <string name="actionbar_settings">Postavke</string>
+  <string name="actionbar_send_file">Pošaljite</string>
   <string name="prefs_category_general">Općenito</string>
   <string name="prefs_category_more">više</string>
   <string name="prefs_accounts">Korisnićki računi</string>
@@ -15,16 +17,23 @@
   <string name="uploader_wrn_no_account_quit_btn_text">Izlaz</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>
   <string name="common_yes">Da</string>
   <string name="common_no">Ne</string>
   <string name="common_ok">U redu</string>
   <string name="common_cancel_upload">Prekini upload</string>
   <string name="common_cancel">Odustani</string>
   <string name="common_error">Greška</string>
+  <string name="common_error_unknown">Nepoznata pogreška</string>
   <string name="change_password">Izmjena lozinke</string>
+  <string name="uploader_info_dirname">Naziv mape</string>
   <string name="auth_trying_to_login">Trying to login…</string>
   <string name="common_rename">Promjeni ime</string>
   <string name="common_remove">Makni</string>
+  <string name="activity_chooser_send_file_title">Pošaljite</string>
   <string name="empty"></string>
   <string name="prefs_category_accounts">Korisnićki računi</string>
+  <string name="saml_authentication_required_text">Potrebna autentikacija</string>
+  <string name="saml_authentication_wrong_pass">Pogrešna lozinka</string>
+  <string name="move_choose_button_text">Izaberi</string>
 </resources>

+ 9 - 2
res/values-hu-rHU/strings.xml

@@ -17,6 +17,10 @@
   <string name="prefs_manage_accounts">Fiókok kezelése</string>
   <string name="prefs_pincode">Alkalmazás PIN</string>
   <string name="prefs_pincode_summary">Védje meg az alkalmazást</string>
+  <string name="prefs_instant_upload">Azonnali képfeltöltések</string>
+  <string name="prefs_instant_upload_summary">Kamera által készítette képek azonnali feltöltése</string>
+  <string name="prefs_instant_video_upload">Azonnali video feltöltések</string>
+  <string name="prefs_instant_video_upload_summary">Kamera által készített videó azonnali feltöltése</string>
   <string name="prefs_log_title">Naplózás engedélyezése</string>
   <string name="prefs_log_summary">Ez használható a problémák naplózásához</string>
   <string name="prefs_log_title_history">Naplózás előzménye</string>
@@ -35,6 +39,7 @@
   <string name="sync_string_files">Fájlok</string>
   <string name="setup_btn_connect">Kapcsolódás</string>
   <string name="uploader_btn_upload_text">Feltöltés</string>
+  <string name="uploader_top_message">Válassz feltöltési mappát:</string>
   <string name="uploader_wrn_no_account_title">Nincs ilyen felhasználói fiók</string>
   <string name="uploader_wrn_no_account_text">Nem található %1$s fiók ezen a készüléken. Hozzon létre egy fiókot előbb.</string>
   <string name="uploader_wrn_no_account_setup_btn_text">Beállítás</string>
@@ -45,6 +50,7 @@
   <string name="uploader_info_uploading">Feltöltés</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>
   <string name="filedetails_select_file">Érintsen meg egy fájlt a további információkért.</string>
   <string name="filedetails_size">Méret:</string>
   <string name="filedetails_type">Tipus:</string>
@@ -214,13 +220,14 @@
   <string name="conflict_overwrite">Felülírás</string>
   <string name="conflict_dont_upload">Ne töltsük föl</string>
   <string name="preview_image_description">Előnézeti kép</string>
-  <string name="share_link_file_no_exist">A mappa nem osztható meg. Lehet, hogy nem is létezik.</string>
   <string name="share_link_file_error">Hiba lépett fel a mappa megosztásakor</string>
-  <string name="unshare_link_file_no_exist">Nem lehet a megosztást megszüntetni. A mappa vagy fájl nem létezik.</string>
   <string name="unshare_link_file_error">Hiba lépett fel a mappa megosztásának visszavonásakor</string>
   <string name="activity_chooser_send_file_title">Küldjük el</string>
   <string name="copy_link">Link másolása</string>
   <string name="clipboard_text_copied">Bemásolva a vágólapra</string>
   <string name="empty"></string>
   <string name="prefs_category_accounts">Fiókok</string>
+  <string name="saml_authentication_required_text">Felhasználóazonosítás szükséges</string>
+  <string name="saml_authentication_wrong_pass">Hibás jelszó</string>
+  <string name="move_choose_button_text">Válasszon</string>
 </resources>

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

@@ -26,4 +26,5 @@
   <string name="uploader_info_dirname">Nomine de dossier</string>
   <string name="activity_chooser_send_file_title">Invia</string>
   <string name="empty"></string>
+  <string name="move_choose_button_text">Seliger</string>
 </resources>

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

@@ -209,4 +209,7 @@
   <string name="activity_chooser_send_file_title">Kirim</string>
   <string name="empty"></string>
   <string name="prefs_category_accounts">Akun</string>
+  <string name="saml_authentication_required_text">Diperlukan otentikasi</string>
+  <string name="saml_authentication_wrong_pass">Sandi salah</string>
+  <string name="move_choose_button_text">Pilih</string>
 </resources>

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

@@ -24,4 +24,5 @@
   <string name="common_remove">Fjarlægja</string>
   <string name="activity_chooser_send_file_title">Senda</string>
   <string name="empty"></string>
+  <string name="move_choose_button_text">Veldu</string>
 </resources>

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

@@ -31,8 +31,6 @@
   <string name="prefs_feedback">Segnalazioni</string>
   <string name="prefs_imprint">Imprint</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!\nScaricalo qua: %2$s\"
-	</string>
   <string name="auth_check_server">Verifica server</string>
   <string name="auth_host_url">Indirizzo server https://...</string>
   <string name="auth_username">Nome utente</string>
@@ -241,9 +239,9 @@
   <string name="error__upload__local_file_not_copied">%1$s non può essere copiato nella cartella locale %2$s</string>
   <string name="share_link_no_support_share_api">Spiacenti, la condivisione non è abilitata sul tuo server. Contatta il tuo
 		amministratore.</string>
-  <string name="share_link_file_no_exist">Impossibile condividere il file o la cartella. Assicurati che esista.</string>
+  <string name="share_link_file_no_exist">Impossibile condividere. Assicurati che il file esista</string>
   <string name="share_link_file_error">Si è verificato un errore durante il tentativo di condivisione del file o della cartella</string>
-  <string name="unshare_link_file_no_exist">Impossibile rimuovere dalla condivisione il file o la cartella. Non esiste.</string>
+  <string name="unshare_link_file_no_exist">Impossibile rimuovere dalla condivisione. Assicurati che il file esista</string>
   <string name="unshare_link_file_error">Si è verificato un errore durante il tentativo di rimuovere la condivisione del file o della cartella</string>
   <string name="activity_chooser_send_file_title">Invia</string>
   <string name="copy_link">Copia collegamento</string>
@@ -265,4 +263,14 @@
   <string name="prefs_category_accounts">Account</string>
   <string name="prefs_add_account">Aggiungi account</string>
   <string name="auth_redirect_non_secure_connection_title">La connessione sicura è rediretta attraverso un percorso non sicuro.</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>
+  <string name="file_list_empty_moving">Qui non c\'è niente. Puoi aggiungere una cartella.</string>
+  <string name="move_choose_button_text">Scegli</string>
+  <string name="move_file_not_found">Impossibile spostare. Assicurati che il file esista</string>
+  <string name="move_file_invalid_into_descendent">Impossibile spostare una cartella in una cartella inferiore</string>
+  <string name="move_file_invalid_overwrite">Il file esiste già nella cartella di destinazione</string>
+  <string name="move_file_error">Si è verificato un errore durante il tentativo di spostare il file o la cartella</string>
+  <string name="forbidden_permissions_move">per spostare questo file</string>
 </resources>

+ 16 - 2
res/values-ja-rJP/strings.xml

@@ -31,6 +31,8 @@
   <string name="prefs_feedback">フィードバック</string>
   <string name="prefs_imprint">インプリント</string>
   <string name="recommend_subject">スマートフォンで %1$s を試してください!</string>
+  <string name="recommend_text">スマートフォンで %1$s を利用してみませんか!
+ここからダウンロードしてください: %2$s</string>
   <string name="auth_check_server">サーバーを確認する</string>
   <string name="auth_host_url">サーバーアドレス https://…</string>
   <string name="auth_username">ユーザー名</string>
@@ -103,6 +105,7 @@
   <string name="sync_fail_in_favourites_content">%1$d ファイルのコンテンツを同期できませんでした(%2$d の競合)</string>
   <string name="sync_foreign_files_forgotten_ticker">一部のローカルファイルが忘れられています</string>
   <string name="sync_foreign_files_forgotten_content"> %2$s フォルダー内の %1$d ファイルはコピーできませんでした。</string>
+  <string name="sync_foreign_files_forgotten_explanation">バージョン 1.3.16以降、このデバイスからアップロードされたファイルは、単独のファイルが複数のアカウントと同期する際にデータの損失を防ぐため、ローカルの%1$sフォルダーにコピーされます。 この変更により、このアプリの以前のバージョンでアップロードされたすべてのファイルは%2$sフォルダーにコピーされます。しかしながら、アカウント同期中にはエラーが発生してこの操作が完了しないようになっています。ファイルをこのままにして%3$sへのリンクを削除するか、あるいは%1$sフォルダーにファイルを移動して%4$sへのリンクを維持することができます。 以下のリストにあるのは、ローカルのファイル及びそれらにリンクしている %5$s内のリモートファイルです。</string>
   <string name="sync_current_folder_was_removed">フォルダー %1$s はもう存在しません</string>
   <string name="foreign_files_move">すべて移動</string>
   <string name="foreign_files_success">すべてのファイルを移動しました</string>
@@ -238,9 +241,9 @@
   <string name="error__upload__local_file_not_copied">%1$s は、ローカルフォルダー %2$s  にコピーできませんでした。</string>
   <string name="share_link_no_support_share_api">申し訳ございません。共有がサーバー上で有効になっていません。 管理者に
 		ご連絡ください。</string>
-  <string name="share_link_file_no_exist">このファイルまたはフォルダーは共有できません。存在するか確認してください。</string>
+  <string name="share_link_file_no_exist">共有できません。ファイルがあるか確認してください。</string>
   <string name="share_link_file_error">このファイルまたはフォルダーを共有する際にエラーが発生しました</string>
-  <string name="unshare_link_file_no_exist">このファイルまたはフォルダは存在しないため、共有を解除できません。</string>
+  <string name="unshare_link_file_no_exist">共有を解除できません。ファイルがあるか確認してください。</string>
   <string name="unshare_link_file_error">このファイルまたはフォルダーの共有を解除する際にエラーが発生しました</string>
   <string name="activity_chooser_send_file_title">送信</string>
   <string name="copy_link">リンクをコピー</string>
@@ -261,4 +264,15 @@
   <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="saml_authentication_required_text">認証を必要とする</string>
+  <string name="saml_authentication_wrong_pass">無効なパスワード</string>
+  <string name="actionbar_move">移動</string>
+  <string name="file_list_empty_moving">ファイルが有りません。フォルダを追加してください。</string>
+  <string name="move_choose_button_text">選択</string>
+  <string name="move_file_not_found">移動できません。ファイルがあるか確認してください。</string>
+  <string name="move_file_invalid_into_descendent">フォルダを子フォルダへ移動することはできません。</string>
+  <string name="move_file_invalid_overwrite">そのファイルは、宛先フォルダに既に存在しています。</string>
+  <string name="move_file_error">このファイルまたはフォルダーを移動する際にエラーが発生しました</string>
+  <string name="forbidden_permissions_move">このファイルを移動</string>
 </resources>

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

@@ -148,4 +148,5 @@
   <string name="clipboard_text_copied">კოპირებულია კლიპბორდში</string>
   <string name="empty"></string>
   <string name="prefs_category_accounts">ანგარიში</string>
+  <string name="move_choose_button_text">არჩევა</string>
 </resources>

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

@@ -81,4 +81,6 @@
   <string name="activity_chooser_send_file_title">ផ្ញើ</string>
   <string name="empty"></string>
   <string name="prefs_category_accounts">គណនី</string>
+  <string name="saml_authentication_wrong_pass">ខុស​ពាក្យ​សម្ងាត់</string>
+  <string name="move_choose_button_text">ជ្រើស</string>
 </resources>

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

@@ -214,4 +214,7 @@
   <string name="clipboard_text_copied">클립보드로 복사됨</string>
   <string name="empty"></string>
   <string name="prefs_category_accounts">계정</string>
+  <string name="saml_authentication_required_text">인증 필요함</string>
+  <string name="saml_authentication_wrong_pass">잘못된 암호</string>
+  <string name="move_choose_button_text">선택</string>
 </resources>

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

@@ -84,4 +84,5 @@
   <string name="activity_chooser_send_file_title">Schécken</string>
   <string name="empty"></string>
   <string name="prefs_category_accounts">Accounten</string>
+  <string name="move_choose_button_text">Auswielen</string>
 </resources>

+ 2 - 2
res/values-lt-rLT/strings.xml

@@ -218,13 +218,13 @@
   <string name="conflict_dont_upload">Nebesiųsti</string>
   <string name="preview_image_description">Paveikslėlio peržiūra</string>
   <string name="preview_image_error_unknown_format">Neįmanoma parodyti šio paveikslėlio</string>
-  <string name="share_link_file_no_exist">Nepavyksta dalinti šio failo ar aplanko. Prašome įsitikinti ar jis egzistuoja</string>
   <string name="share_link_file_error">Įvyko klaida bandant dalinti šį failą ar aplanką</string>
-  <string name="unshare_link_file_no_exist">Nepavyksta nebedalinti šiuo failu ar aplanku. Jis neegzistuoja</string>
   <string name="unshare_link_file_error">Įvyko klaida bandant nebedalinti šio failu ar aplanku</string>
   <string name="activity_chooser_send_file_title">Siųsti</string>
   <string name="copy_link">Kopijuoti nuorodą</string>
   <string name="clipboard_text_copied">Nukopijuota į talpyklę</string>
   <string name="empty"></string>
   <string name="prefs_category_accounts">Paskyros</string>
+  <string name="saml_authentication_wrong_pass">Neteisingas slaptažodis</string>
+  <string name="move_choose_button_text">Pasirinkite</string>
 </resources>

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

@@ -142,4 +142,5 @@
   <string name="activity_chooser_send_file_title">Sūtīt</string>
   <string name="empty"></string>
   <string name="prefs_category_accounts">Konti</string>
+  <string name="move_choose_button_text">Izvēlieties</string>
 </resources>

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

@@ -119,4 +119,7 @@
   <string name="activity_chooser_send_file_title">Прати</string>
   <string name="empty"></string>
   <string name="prefs_category_accounts">Сметки</string>
+  <string name="saml_authentication_required_text">Потребна е автентификација</string>
+  <string name="saml_authentication_wrong_pass">Погрешна лозинка</string>
+  <string name="move_choose_button_text">Избери</string>
 </resources>

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

@@ -11,4 +11,5 @@
   <string name="common_ok">အိုကေ</string>
   <string name="common_cancel">ပယ်ဖျက်မည်</string>
   <string name="empty"></string>
+  <string name="move_choose_button_text">ရွေးချယ်</string>
 </resources>

+ 3 - 2
res/values-nb-rNO/strings.xml

@@ -238,9 +238,7 @@
   <string name="error__upload__local_file_not_copied">%1$s kunne ikke kopieres til lokal mappe %2$s</string>
   <string name="share_link_no_support_share_api">Beklager, deling er ikke skrudd på for din tjener. Ta kontakt med
 		administratoren.</string>
-  <string name="share_link_file_no_exist">Klarte ikke å dele denne filen eller mappen. Sjekk at den eksisterer.</string>
   <string name="share_link_file_error">Det skjedde en feil under deling av denne filen eller mappen</string>
-  <string name="unshare_link_file_no_exist">Klarte ikke å avslutte delingen av denne filen eller mappen. Den eksisterer ikke.</string>
   <string name="unshare_link_file_error">En feil oppstod ved avslutting av delingen av denne filen eller mappen</string>
   <string name="activity_chooser_send_file_title">Send</string>
   <string name="copy_link">Kopier lenke</string>
@@ -262,4 +260,7 @@
   <string name="prefs_category_accounts">Kontoer</string>
   <string name="prefs_add_account">Legg til en konto</string>
   <string name="auth_redirect_non_secure_connection_title">Sikker tilkobling videresendes gjennom en usikker rute.</string>
+  <string name="saml_authentication_required_text">Autentisering kreves</string>
+  <string name="saml_authentication_wrong_pass">Feil passord</string>
+  <string name="move_choose_button_text">Velg</string>
 </resources>

+ 14 - 5
res/values-nl/strings.xml

@@ -31,9 +31,8 @@
   <string name="prefs_feedback">Feedback</string>
   <string name="prefs_imprint">afdruk</string>
   <string name="recommend_subject">Probeer %1$s op uw smartphone!</string>
-  <string name="recommend_text">\"Ik wil u graag uitnodigen om %1$s op uw smartphone te gebruiken!
-Download hier: %2$s\"
-	</string>
+  <string name="recommend_text">Uitnodiging om %1$s op uw smartphone uit te proberen!
+Download hier: %2$s</string>
   <string name="auth_check_server">Controleer server</string>
   <string name="auth_host_url">Serveradres https://…</string>
   <string name="auth_username">Gebruikersnaam</string>
@@ -244,9 +243,9 @@ Hieronder staan de lokale bestanden en de externe bestanden in %5$s waar ze naar
   <string name="error__upload__local_file_not_copied">%1$s kon niet worden gekopieerd naar de %2$s lokale map</string>
   <string name="share_link_no_support_share_api">Sorry, delen is niet mogelijk op uw server. Neem contact op met uw
 		beheerder.</string>
-  <string name="share_link_file_no_exist">Kan dit bestand of deze map niet delen. Controleer of dit object wel bestaat.</string>
+  <string name="share_link_file_no_exist">Kan dit niet delen. Controleer of dit bestand wel bestaat.</string>
   <string name="share_link_file_error">Er trad een fout op bij uw poging dit bestand of deze map te delen</string>
-  <string name="unshare_link_file_no_exist">Kan delen van dit bestand of deze map niet beëindigen. Het object bestaat niet.</string>
+  <string name="unshare_link_file_no_exist">Kan delen niet beëindigen. Ga na of het bestand bestaat</string>
   <string name="unshare_link_file_error">Er trad een fout op bij uw poging het delen van dit bestand of deze map te beëindigen</string>
   <string name="activity_chooser_send_file_title">Versturen</string>
   <string name="copy_link">Link kopiëren</string>
@@ -268,4 +267,14 @@ Hieronder staan de lokale bestanden en de externe bestanden in %5$s waar ze naar
   <string name="prefs_category_accounts">Accounts</string>
   <string name="prefs_add_account">Toevoegen account</string>
   <string name="auth_redirect_non_secure_connection_title">De beveiligde verbinding is omgeleid via een onveilige route.</string>
+  <string name="saml_authentication_required_text">Authenticatie vereist</string>
+  <string name="saml_authentication_wrong_pass">Onjuist wachtwoord</string>
+  <string name="actionbar_move">verplaatsen</string>
+  <string name="file_list_empty_moving">Niets hier. U kunt een map toevoegen!</string>
+  <string name="move_choose_button_text">Kies</string>
+  <string name="move_file_not_found">Kan niet verplaatsen. Ga na of het bestand wel bestaat</string>
+  <string name="move_file_invalid_into_descendent">De map kan niet naar een onderliggende map worden verplaatst</string>
+  <string name="move_file_invalid_overwrite">Het bestand bestaat al in de doelmap</string>
+  <string name="move_file_error">Er trad een fout op bij uw poging dit bestand of deze map te verplaatsen</string>
+  <string name="forbidden_permissions_move">om dit bestand te verplaatsen</string>
 </resources>

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

@@ -127,4 +127,6 @@
   <string name="activity_chooser_send_file_title">Send</string>
   <string name="empty"></string>
   <string name="prefs_category_accounts">Kontoar</string>
+  <string name="saml_authentication_wrong_pass">Feil passord</string>
+  <string name="move_choose_button_text">Vel</string>
 </resources>

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

@@ -41,4 +41,5 @@
   <string name="common_rename">Torna nomenar</string>
   <string name="empty"></string>
   <string name="prefs_category_accounts">Comptes</string>
+  <string name="move_choose_button_text">Causís</string>
 </resources>

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

@@ -119,4 +119,5 @@
   <string name="activity_chooser_send_file_title">ਭੇਜੋ</string>
   <string name="empty"></string>
   <string name="prefs_category_accounts">ਅਕਾਊਂਟ</string>
+  <string name="move_choose_button_text">ਚੁਣੋ</string>
 </resources>

+ 14 - 2
res/values-pl/strings.xml

@@ -31,6 +31,7 @@
   <string name="prefs_feedback">Wsparcie</string>
   <string name="prefs_imprint">Stopka</string>
   <string name="recommend_subject">Wypróbuj %1$s na swoim smartphonie!</string>
+  <string name="recommend_text">Chciałbym zaprosić Cię do używania %1$s na swoim smartfonie!\nŚciągnij tutaj: %2$s</string>
   <string name="auth_check_server">Sprawdź serwer</string>
   <string name="auth_host_url">Adres serwera https://...</string>
   <string name="auth_username">Nazwa użytkownika</string>
@@ -103,6 +104,7 @@
   <string name="sync_fail_in_favourites_content">Zawartość %1$d plików nie może zostać synchronizowana (%2$d konfliktów)</string>
   <string name="sync_foreign_files_forgotten_ticker">Niektóre lokalne pliki zostały zgubione.</string>
   <string name="sync_foreign_files_forgotten_content">%1$d plików z folderu %2$s nie udało się się przekopiować</string>
+  <string name="sync_foreign_files_forgotten_explanation">Od wersji 1.3.16, pliki wysyłane z tego urządzenia są kopiowane do lokalnego folderu %1$s aby zapobiec utracie danych gdy pojedynczy plik jest synchronizowany z wieloma kontami.\n\nZ powodu tej zmiany, wszystkie pliki wysłane za pomocą poprzedniej wersji tej aplikacji były kopiowane do folderu %2$s. Jednakże, błąd uniemożliwiał dokończenie tej operacji podczas synchronizacji konta. Możesz albo pozostawić plik(i) tak jak jest i usunąć link do %3$s lub przenieść plik(i) do folderu %1$s i pozostawić link do %4$s.\n\nPoniżej plik(i) lokalny i plik(i) zdalny w %5$s, do którego zostały zlinkowane.</string>
   <string name="sync_current_folder_was_removed">Folder  %1$s nie istnieje.</string>
   <string name="foreign_files_move">Przenieś wszystko</string>
   <string name="foreign_files_success">Wszystkie pliki zostały przeniesione</string>
@@ -238,9 +240,9 @@
   <string name="error__upload__local_file_not_copied">%1$s nie może zostać skopiowany do lokalnego folderu %2$s</string>
   <string name="share_link_no_support_share_api">Przepraszamy, ale współdzielenie nie jest włączone na Twoim serwerze. Proszę skontaktuj się z
 		administratorem.</string>
-  <string name="share_link_file_no_exist">Brak możliwości udostępnienia tego pliku lub folderu. Upewnij się, że istnieje.</string>
+  <string name="share_link_file_no_exist">Nie można udostępnić. Proszę sprawdzić, czy plik istnieje</string>
   <string name="share_link_file_error">Wystąpił błąd podczas udostępniania tego pliku lub folderu.</string>
-  <string name="unshare_link_file_no_exist">Nie można anulować udostępniania tego pliku lub folderu. On nie istnieje.</string>
+  <string name="unshare_link_file_no_exist">Nie można wyłączyć udostępniania. Proszę sprawdzić, czy plik istnieje</string>
   <string name="unshare_link_file_error">Wystąpił błąd podczas anulowania udostępniania tego pliku lub folderu.</string>
   <string name="activity_chooser_send_file_title">Wyślij</string>
   <string name="copy_link">Skopiuj link</string>
@@ -262,4 +264,14 @@
   <string name="prefs_category_accounts">Konta</string>
   <string name="prefs_add_account">Dodaj konto</string>
   <string name="auth_redirect_non_secure_connection_title">Bezpieczne połączenie jest przekierowywane przez niezabezpieczone trasy.</string>
+  <string name="saml_authentication_required_text">Wymagana autoryzacja</string>
+  <string name="saml_authentication_wrong_pass">Złe hasło</string>
+  <string name="actionbar_move">Przenieś</string>
+  <string name="file_list_empty_moving">Nic tu nie ma. Możesz dodać folder!</string>
+  <string name="move_choose_button_text">Wybierz</string>
+  <string name="move_file_not_found">Nie można przenieść. Proszę sprawdzić, czy plik istnieje</string>
+  <string name="move_file_invalid_into_descendent">Nie jest możliwe przeniesienie folderu do potomka</string>
+  <string name="move_file_invalid_overwrite">Plik istnieje już w folderze docelowym</string>
+  <string name="move_file_error">Pojawił się błąd podczas próby przeniesienia tego pliku lub folderu</string>
+  <string name="forbidden_permissions_move">aby przenieść ten plik</string>
 </resources>

+ 13 - 3
res/values-pt-rBR/strings.xml

@@ -31,7 +31,7 @@
   <string name="prefs_feedback">Feedback</string>
   <string name="prefs_imprint">Imprint</string>
   <string name="recommend_subject">Tentar %1$s em seu smartfone!</string>
-  <string name="recommend_text">\"Eu quero convidá-lo a utilizar %1$s em seu smartphone!\nDownload aqui: %2$s\"</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>
   <string name="auth_host_url">Endereço do servidor https://...</string>
   <string name="auth_username">Nome de usuário</string>
@@ -240,9 +240,9 @@
   <string name="error__upload__local_file_not_copied">%1$s não pôde ser copiado para pasta local %2$s</string>
   <string name="share_link_no_support_share_api">Desculpe, o compartilhamento não está habilitado em seu servidor. Entre em contato com seu 
 ⇥⇥ administrador.</string>
-  <string name="share_link_file_no_exist">Incapaz de compartilhar esse arquivo ou pasta. Por favor, certifique-se que existe</string>
+  <string name="share_link_file_no_exist">Não é possível compartilhar. Por favor verifique se o arquivo existe</string>
   <string name="share_link_file_error">Ocorreu um erro durante a tentativa de compartilhar esse arquivo ou pasta</string>
-  <string name="unshare_link_file_no_exist">Incapaz de descompartilhar este arquivo ou pasta. Ela não existe.</string>
+  <string name="unshare_link_file_no_exist">Não é possível cancelar o compartilhamento. Por favor verifique se o arquivo existe</string>
   <string name="unshare_link_file_error">Ocorreu um erro ao tentar descompartilhar este arquivo ou pasta</string>
   <string name="activity_chooser_send_file_title">Enviar</string>
   <string name="copy_link">Copiar o link</string>
@@ -264,4 +264,14 @@
   <string name="prefs_category_accounts">Contas</string>
   <string name="prefs_add_account">Adicionar uma conta</string>
   <string name="auth_redirect_non_secure_connection_title">A conexão segura está redirecionada através de uma rota insegura.</string>
+  <string name="saml_authentication_required_text">Autenticação é requerida</string>
+  <string name="saml_authentication_wrong_pass">Senha incorreta</string>
+  <string name="actionbar_move">Mover</string>
+  <string name="file_list_empty_moving">Nada aqui. Você pode adicionar uma pasta!</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 arquivo existe</string>
+  <string name="move_file_invalid_into_descendent">Não é possível mover a pasta para uma descendente</string>
+  <string name="move_file_invalid_overwrite">O arquivo já existe na pasta de destino</string>
+  <string name="move_file_error">Ocorreu um erro ao tentar mover este arquivo ou pasta</string>
+  <string name="forbidden_permissions_move">mover este arquivo</string>
 </resources>

+ 7 - 4
res/values-pt-rPT/strings.xml

@@ -31,8 +31,6 @@
   <string name="prefs_feedback">Resposta</string>
   <string name="prefs_imprint">Imprint</string>
   <string name="recommend_subject">Experimente %1$s no seu smartphone!</string>
-  <string name="recommend_text">Quero convidá-lo a usar %1$s no seu smartphone!\nDescarregue aqui: %2$s\"
-⇥</string>
   <string name="auth_check_server">Verificar Servidor</string>
   <string name="auth_host_url">Endereço do servidor https://..</string>
   <string name="auth_username">Nome de Utilizador</string>
@@ -239,9 +237,8 @@
   <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="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 é possível partilhar este ficheiro ou pasta. Por favor, verifique se existe</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 deste ficheiro ou pasta. Não 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>
@@ -263,4 +260,10 @@
   <string name="prefs_category_accounts">Contas</string>
   <string name="prefs_add_account">Adicionar conta</string>
   <string name="auth_redirect_non_secure_connection_title">Uma ligação segura foi redireccionada por uma rota insegura.</string>
+  <string name="saml_authentication_required_text">Autenticação necessária</string>
+  <string name="saml_authentication_wrong_pass">Password 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="forbidden_permissions_move">para mover este ficheiro</string>
 </resources>

+ 2 - 2
res/values-ro/strings.xml

@@ -237,9 +237,7 @@
   <string name="preview_image_error_unknown_format">Aceasta imagine nu poate fi arătată</string>
   <string name="error__upload__local_file_not_copied">%1$s nu a putut fi copiat in dosarul local %2$s </string>
   <string name="share_link_no_support_share_api">Ne pare rău, partajarea nu este activată pe server. Vă rugăm să contactați administratorul dvs.</string>
-  <string name="share_link_file_no_exist">Acest fișier sau director nu se poate partaja. Vă rugăm, asigurați-vă că există</string>
   <string name="share_link_file_error">A apărut o eroare în timp ce încerca să partajeze acest fișier sau folder</string>
-  <string name="unshare_link_file_no_exist">Imposibil de anulat partajarea acestui fișier sau director. Nu există.</string>
   <string name="unshare_link_file_error">A apărut o eroare în timp ce încerca să departajeze sau unshare acest fișier sau folder</string>
   <string name="activity_chooser_send_file_title">Expediază</string>
   <string name="copy_link">Link copiat</string>
@@ -259,4 +257,6 @@
   <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="saml_authentication_wrong_pass">Parolă greșită</string>
+  <string name="move_choose_button_text">Alege</string>
 </resources>

+ 5 - 2
res/values-ru/strings.xml

@@ -103,6 +103,7 @@
   <string name="sync_fail_in_favourites_content">Содержимое %1$d файлов не может быть синхронизировано (конфликтов: %2$d)</string>
   <string name="sync_foreign_files_forgotten_ticker">Несколько локальных файлов были забыты</string>
   <string name="sync_foreign_files_forgotten_content"> Не возможно скопировать %1$d файлы из %2$s папки</string>
+  <string name="sync_foreign_files_forgotten_explanation">Начиная с версии 1.3.16, файлы, загружаемые с этого устройства, копируются в локальную директорию %1$s, чтобы предотвратить потерю данных при синхронизации файла с несколькими учётными записями.\n\nПоэтому все файлы, загруженные предыдущими версиями данного приложения, были скопированы в директорию %2$s. Однако, во время синхронизации что-то помешало завершить эту операцию. Теперь можно либо оставить файлы как есть и удалить ссылку на %3$s, либо переместить их в %1$s и сохранить ссылку на %4$s.\n\nНиже перечислены локальные файлы, и соответствующие им удалённые файлы в %5$s, к которым они привязаны.</string>
   <string name="sync_current_folder_was_removed">Каталог %1$s больше не существует</string>
   <string name="foreign_files_move">Переместить всё</string>
   <string name="foreign_files_success">Все файлы были перемещены</string>
@@ -237,9 +238,7 @@
   <string name="preview_image_error_unknown_format">Это изображение не может быть отображено</string>
   <string name="error__upload__local_file_not_copied">%1$s не возможно скопировать в локальною папку %2$s </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>
-  <string name="unshare_link_file_no_exist">Невозможно снять общий доступ с этого файла или каталога. Он не существует.</string>
   <string name="unshare_link_file_error">Ошибка удаления общего доступа к этому файлу или каталогу</string>
   <string name="activity_chooser_send_file_title">Отправить</string>
   <string name="copy_link">Копировать ссылку</string>
@@ -261,4 +260,8 @@
   <string name="prefs_category_accounts">Учётные записи</string>
   <string name="prefs_add_account">Добавить учетную запись</string>
   <string name="auth_redirect_non_secure_connection_title">Безопасное соединение перенаправлено через небезопасный маршрут.</string>
+  <string name="saml_authentication_required_text">Требуется аутентификация </string>
+  <string name="saml_authentication_wrong_pass">Неправильный пароль</string>
+  <string name="actionbar_move">Переместить</string>
+  <string name="move_choose_button_text">Выбрать</string>
 </resources>

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

@@ -73,4 +73,5 @@
   <string name="ssl_validator_btn_details_hide">සඟවන්න</string>
   <string name="empty"></string>
   <string name="prefs_category_accounts">ගිණුම්</string>
+  <string name="move_choose_button_text">තෝරන්න</string>
 </resources>

+ 4 - 2
res/values-sk-rSK/strings.xml

@@ -238,9 +238,7 @@
   <string name="error__upload__local_file_not_copied">%1$s nemožno skopírovať do lokálneho priečinka %2$s</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">Nie je možné zdieľať tento súbor alebo priečinok. Prosím uistite sa že 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">Nie je možné zrušiť zdieľanie tohoto súboru alebo priečinka. Súbor alebo priečinok neexistuje.</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>
@@ -262,4 +260,8 @@
   <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é spojenie je presmerované nezabezpečenou cestou.</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="move_choose_button_text">Vybrať</string>
 </resources>

+ 11 - 4
res/values-sl/strings.xml

@@ -31,8 +31,6 @@
   <string name="prefs_feedback">Odziv</string>
   <string name="prefs_imprint">Natis</string>
   <string name="recommend_subject">Preizkusi %1$s na pametnem telefonu!</string>
-  <string name="recommend_text">\"Želim ti priporočiti program %1$s za pametni telefon!\nPrejeti ga je mogoče s te strani: %2$s\"
-	</string>
   <string name="auth_check_server">Preveri strežnik</string>
   <string name="auth_host_url">Naslov strežnika https://…</string>
   <string name="auth_username">Uporabniško ime</string>
@@ -240,9 +238,9 @@
   <string name="error__upload__local_file_not_copied">Datoteke %1$s ni mogoče kopirati v krajevno mapo %2$s</string>
   <string name="share_link_no_support_share_api">Souporaba je na strežniku onemogočena. Možnost lahko spreminjajo le
 		uporabniki s skrbniškimi dovoljenji.</string>
-  <string name="share_link_file_no_exist">Ni mogoče omogočiti souporabe te datoteke ali mape. Prepričajte se, da obstaja ...</string>
+  <string name="share_link_file_no_exist">Souporaba ni mogoča. Preverite, ali datoteka obstaja.</string>
   <string name="share_link_file_error">Prišlo je do napake med poskusom omogočanja souporabe te datoteke ali mape</string>
-  <string name="unshare_link_file_no_exist">Ni mogoče prekiniti souporabe te datoteke ali mape, ker ne obstaja.</string>
+  <string name="unshare_link_file_no_exist">Ni mogoče prekiniti souporabe. Preverite, ali datoteka obstaja.</string>
   <string name="unshare_link_file_error">Prišlo je do napake med poskusom odstranjevanja souporabe te datoteke ali mape</string>
   <string name="activity_chooser_send_file_title">Pošlji</string>
   <string name="copy_link">Kopiraj povezavo</string>
@@ -264,4 +262,13 @@
   <string name="prefs_category_accounts">Računi</string>
   <string name="prefs_add_account">Dodaj račun</string>
   <string name="auth_redirect_non_secure_connection_title">Varna povezava je preusmerjena preko ne-varne poti.</string>
+  <string name="saml_authentication_required_text">Zahtevana je overitev</string>
+  <string name="saml_authentication_wrong_pass">Napačno geslo</string>
+  <string name="actionbar_move">Premakni</string>
+  <string name="file_list_empty_moving">Ni vsebine in datotek. Lahko ustvarite na primer mapo.</string>
+  <string name="move_choose_button_text">Izbor</string>
+  <string name="move_file_not_found">Ni mogoče premakniti datoteke. Preverite, ali obstaja.</string>
+  <string name="move_file_invalid_into_descendent">Ni mogoče premakniti mape v podrejeno mapo.</string>
+  <string name="move_file_invalid_overwrite">Datoteka v ciljni mapi že obstaja.</string>
+  <string name="move_file_error">Prišlo je do napake med premikanjem datoteke v mapo</string>
 </resources>

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

@@ -70,4 +70,6 @@
   <string name="activity_chooser_send_file_title">Dërgo</string>
   <string name="empty"></string>
   <string name="prefs_category_accounts">Llogarit</string>
+  <string name="saml_authentication_wrong_pass">Fjalëkalim i gabuar</string>
+  <string name="move_choose_button_text">Zgjidh</string>
 </resources>

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

@@ -54,4 +54,5 @@
   <string name="activity_chooser_send_file_title">Pošalji</string>
   <string name="empty"></string>
   <string name="prefs_category_accounts">Nalozi</string>
+  <string name="move_choose_button_text">Izaberi</string>
 </resources>

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

@@ -108,4 +108,5 @@
   <string name="activity_chooser_send_file_title">Пошаљи</string>
   <string name="empty"></string>
   <string name="prefs_category_accounts">Налози</string>
+  <string name="move_choose_button_text">Одабери</string>
 </resources>

+ 3 - 2
res/values-sv/strings.xml

@@ -236,9 +236,7 @@
   <string name="error__upload__local_file_not_copied">%1$s kunde inte kopieras till %2$s lokal mapp</string>
   <string name="share_link_no_support_share_api">Ledsen, delning är inte aktiverat på din server. Vänligen kontakta din
 		administratör.</string>
-  <string name="share_link_file_no_exist">Kan inte dela denna fil eller mapp. Se till att den existerar</string>
   <string name="share_link_file_error">Ett fel uppstod vid försök att dela denna fil eller mapp</string>
-  <string name="unshare_link_file_no_exist">Kan inte ta bort delningen för denna fil eller mapp. Den existerar inte.</string>
   <string name="unshare_link_file_error">Ett fel uppstod vid försök att sluta dela denna fil eller mapp</string>
   <string name="activity_chooser_send_file_title">Skicka</string>
   <string name="copy_link">Kopiera länk</string>
@@ -250,4 +248,7 @@
   <string name="network_host_not_available">Åtgärden kunte inte slutföras, servern är ej tillgänglig</string>
   <string name="empty"></string>
   <string name="prefs_category_accounts">Konton</string>
+  <string name="saml_authentication_required_text">Autentisering krävs</string>
+  <string name="saml_authentication_wrong_pass">Fel lösenord</string>
+  <string name="move_choose_button_text">Välj</string>
 </resources>

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

@@ -136,4 +136,5 @@
   <string name="conflict_dont_upload">பதிவேற்ற வேண்டாம்</string>
   <string name="empty"></string>
   <string name="prefs_category_accounts">கணக்குகள்</string>
+  <string name="move_choose_button_text">தெரிவுசெய்க </string>
 </resources>

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

@@ -149,4 +149,5 @@
   <string name="activity_chooser_send_file_title">ส่ง</string>
   <string name="empty"></string>
   <string name="prefs_category_accounts">บัญชี</string>
+  <string name="move_choose_button_text">เลือก</string>
 </resources>

+ 13 - 4
res/values-tr/strings.xml

@@ -31,8 +31,7 @@
   <string name="prefs_feedback">Geribildirim</string>
   <string name="prefs_imprint">İzlenim</string>
   <string name="recommend_subject">%1$s uygulamasını akıllı telefonunda dene!</string>
-  <string name="recommend_text">\"Seni, akıllı telefonunda %1$s kullanmaya davet ediyorum!\nBuradan indirebilirsin: %2$s\"
-        </string>
+  <string name="recommend_text">Seni, akıllı telefonunda %1$s kullanmaya davet ediyorum!\nBuradan indirebilirsin: %2$s</string>
   <string name="auth_check_server">Sunucuyu Denetle</string>
   <string name="auth_host_url">Sunucu adresi https://…</string>
   <string name="auth_username">Kullanıcı Adı</string>
@@ -241,9 +240,9 @@
   <string name="error__upload__local_file_not_copied">%1$s, %2$s yerel klasörüne kopyalanamadı</string>
   <string name="share_link_no_support_share_api">Üzgünüz, paylaşım sunucunuzda etkin değil. Lütfen yöneticinizle
                 iletişime geçin.</string>
-  <string name="share_link_file_no_exist">Bu dosya veya klasör paylaşılamıyor. Lütfen mevcut olup olmadığını denetleyin</string>
+  <string name="share_link_file_no_exist">Paylaşma başarısız. Lütfen dosyanın mevcut olup olmadığını denetleyin</string>
   <string name="share_link_file_error">Bu dosya veya klasörü paylaşmaya çalışılırken bir hata oluştu</string>
-  <string name="unshare_link_file_no_exist">Bu dosya veya klasörün paylaşımı kaldırılamadı. Mevcut değil.</string>
+  <string name="unshare_link_file_no_exist">Paylaşımı kaldırma başarısız. Lütfen dosyanın mevcut olup olmadığını denetleyin</string>
   <string name="unshare_link_file_error">Bu dosya veya klasör paylaşımı kaldırılmaya çalışılırken bir hata oluştu</string>
   <string name="activity_chooser_send_file_title">Gönder</string>
   <string name="copy_link">Bağlantıyı kopyala</string>
@@ -265,4 +264,14 @@
   <string name="prefs_category_accounts">Hesaplar</string>
   <string name="prefs_add_account">Hesap ekle</string>
   <string name="auth_redirect_non_secure_connection_title">Güvenli bağlantı, güvenli olmayan bir rotaya yönlendiriliyor.</string>
+  <string name="saml_authentication_required_text">Kimlik doğrulama gerekli</string>
+  <string name="saml_authentication_wrong_pass">Hatalı parola</string>
+  <string name="actionbar_move">Taşı</string>
+  <string name="file_list_empty_moving">Burada bir şey yok. Bir klasör ekleyebilirsiniz!</string>
+  <string name="move_choose_button_text">Seç</string>
+  <string name="move_file_not_found">Taşıma başarısız. Lütfen dosyanın mevcut olup olmadığını denetleyin</string>
+  <string name="move_file_invalid_into_descendent">Klasörü, kendi alt klasörüne taşımak mümkün değil</string>
+  <string name="move_file_invalid_overwrite">Dosya zaten hedef klasörde mevcut</string>
+  <string name="move_file_error">Bu dosya veya klasörü taşımaya çalışılırken bir hata oluştu</string>
+  <string name="forbidden_permissions_move">bu dosyayı taşımak için</string>
 </resources>

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

@@ -153,4 +153,5 @@
   <string name="clipboard_text_copied">Скопійовано в буфер обміну</string>
   <string name="empty"></string>
   <string name="prefs_category_accounts">Облікові записи</string>
+  <string name="move_choose_button_text">Обрати</string>
 </resources>

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

@@ -17,4 +17,5 @@
   <string name="common_error_unknown">غیر معروف خرابی</string>
   <string name="activity_chooser_send_file_title">بھجیں</string>
   <string name="empty"></string>
+  <string name="move_choose_button_text">منتخب کریں</string>
 </resources>

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

@@ -211,11 +211,10 @@
   <string name="conflict_overwrite">Ghi đè lên</string>
   <string name="conflict_dont_upload">Không tải lên</string>
   <string name="preview_image_description">Xem trước hình ảnh</string>
-  <string name="share_link_file_no_exist">Không thể chia sẻ file hoặc thư mục này. Hãy chắc chắn rằng nó tồn tại</string>
   <string name="share_link_file_error">Một lỗi đã xảy ra khi thử chia sẻ file hoặc thư mục này</string>
-  <string name="unshare_link_file_no_exist">Không thể gỡ chia sẻ file hoặc thư mục. Nó không tồn tại.</string>
   <string name="unshare_link_file_error">Một lỗi đã xảy ra khi thử gỡ chia sẻ file hoặc thư mục này</string>
   <string name="activity_chooser_send_file_title">Gởi</string>
   <string name="empty"></string>
   <string name="prefs_category_accounts">Tài khoản</string>
+  <string name="move_choose_button_text">Chọn</string>
 </resources>

+ 22 - 2
res/values-zh-rCN/strings.xml

@@ -50,6 +50,7 @@
   <string name="uploader_info_uploading">上传</string>
   <string name="file_list_empty">这里还什么都没有。上传些东西吧!</string>
   <string name="file_list_loading">载入中....</string>
+  <string name="local_file_list_empty">在该文件夹中不存在文件。</string>
   <string name="filedetails_select_file">点击一个文件来显示额外的信息。</string>
   <string name="filedetails_size">大小:</string>
   <string name="filedetails_type">类型:</string>
@@ -236,9 +237,9 @@
   <string name="preview_image_error_unknown_format">不能显示图片</string>
   <string name="error__upload__local_file_not_copied">无法复制 %1$s 到本地目录 %2$s</string>
   <string name="share_link_no_support_share_api">抱歉,共享功能未启用。请联系管理员。</string>
-  <string name="share_link_file_no_exist">无法共享该文件或目录,请确定该文件或目录存在</string>
+  <string name="share_link_file_no_exist">无法共享。请检查文件是否存在</string>
   <string name="share_link_file_error">共享文件或目录出错</string>
-  <string name="unshare_link_file_no_exist">不能取消该文件或文件夹的共享,因为它不存在。</string>
+  <string name="unshare_link_file_no_exist">无法取消共享。请检查文件是否存在</string>
   <string name="unshare_link_file_error">解除文件或目录共享时出错</string>
   <string name="activity_chooser_send_file_title">发送</string>
   <string name="copy_link">复制链接</string>
@@ -249,5 +250,24 @@
   <string name="network_error_connect_timeout_exception">等待服务器响应时发生了一个错误,此操作无法完成</string>
   <string name="network_host_not_available">服务器不可用,此操作无法完成</string>
   <string name="empty"></string>
+  <string name="forbidden_permissions">你没有许可%s</string>
+  <string name="forbidden_permissions_rename">重命名该文件</string>
+  <string name="forbidden_permissions_delete">删除该文件</string>
+  <string name="share_link_forbidden_permissions">分享该文件</string>
+  <string name="unshare_link_forbidden_permissions">取消共享该文件</string>
+  <string name="forbidden_permissions_create">创建文件</string>
+  <string name="uploader_upload_forbidden_permissions">上传此文件夹</string>
+  <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="saml_authentication_required_text">需要认证</string>
+  <string name="saml_authentication_wrong_pass">错误密码</string>
+  <string name="actionbar_move">移动</string>
+  <string name="file_list_empty_moving">这里还什么都没有。上传些东西吧!</string>
+  <string name="move_choose_button_text">选择(&amp;C)...</string>
+  <string name="move_file_not_found">无法移动。请检查文件是否存在</string>
+  <string name="move_file_invalid_overwrite">该文件已经存在在目标文件夹</string>
+  <string name="move_file_error">尝试移动该文件或文件夹时发生错误</string>
+  <string name="forbidden_permissions_move">移动该文件</string>
 </resources>

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

@@ -67,4 +67,5 @@
   <string name="copy_link">複製連結</string>
   <string name="empty"></string>
   <string name="prefs_category_accounts">帳號</string>
+  <string name="saml_authentication_wrong_pass">密碼錯誤</string>
 </resources>

+ 3 - 2
res/values-zh-rTW/strings.xml

@@ -234,9 +234,7 @@
   <string name="error__upload__local_file_not_copied">%1$s 無法被複製到本地目錄 %2$s</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>
-  <string name="unshare_link_file_no_exist">無法將這個檔案或目錄取消分享. 它並不存在.</string>
   <string name="unshare_link_file_error">在取消分享檔案或目錄時發生了錯誤</string>
   <string name="activity_chooser_send_file_title">寄出</string>
   <string name="copy_link">複製連結</string>
@@ -248,4 +246,7 @@
   <string name="network_host_not_available">這個操作無法完成, 無法使用伺服器</string>
   <string name="empty"></string>
   <string name="prefs_category_accounts">帳號</string>
+  <string name="saml_authentication_required_text">必須驗證</string>
+  <string name="saml_authentication_wrong_pass">密碼錯誤</string>
+  <string name="move_choose_button_text">選擇</string>
 </resources>

+ 15 - 4
res/values/strings.xml

@@ -33,8 +33,7 @@
     <string name="prefs_imprint">Imprint</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="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>
     <string name="auth_host_url">Server address https://…</string>
@@ -255,9 +254,9 @@
 
 	<string name="share_link_no_support_share_api">Sorry, sharing is not enabled on your server. Please contact your
 		administrator.</string>
-	<string name="share_link_file_no_exist">Unable to share this file or folder. Please, make sure it exists</string>
+	<string name="share_link_file_no_exist">Unable to share. Please check whether the file exists</string>
 	<string name="share_link_file_error">An error occurred while trying to share this file or folder</string>
-	<string name="unshare_link_file_no_exist">Unable to unshare this file or folder. It does not exist.</string>
+	<string name="unshare_link_file_no_exist">Unable to unshare. Please check whether the file exists</string>
 	<string name="unshare_link_file_error">An error occurred while trying to unshare this file or folder</string>
 
 	<string name="activity_chooser_send_file_title">Send</string>
@@ -291,4 +290,16 @@
 	<string name="log_mail_subject">Owncloud Android app logs</string>
 	<string name="log_progress_dialog_text">Loading data...</string>
 
+	<string name="saml_authentication_required_text">Authentication required</string>
+	<string name="saml_authentication_wrong_pass">Wrong password</string>
+	<string name="actionbar_move">Move</string>
+	<string name="file_list_empty_moving">Nothing in here. You can add a folder!</string>
+	<string name="move_choose_button_text">Choose</string>
+
+	<string name="move_file_not_found">Unable to move. Please check whether the file exists</string>
+	<string name="move_file_invalid_into_descendent">It is not possible to move a folder into a descendant</string>
+	<string name="move_file_invalid_overwrite">The file exists already in the destination folder</string>
+	<string name="move_file_error">An error occurred while trying to move this file or folder</string>
+	<string name="forbidden_permissions_move">to move this file</string>
+
 </resources>

+ 43 - 1
src/com/owncloud/android/authentication/AuthenticatorActivity.java

@@ -50,7 +50,9 @@ import android.view.View.OnFocusChangeListener;
 import android.view.View.OnTouchListener;
 import android.view.Window;
 import android.view.inputmethod.EditorInfo;
+import android.webkit.HttpAuthHandler;
 import android.webkit.SslErrorHandler;
+import android.webkit.WebView;
 import android.widget.Button;
 import android.widget.CheckBox;
 import android.widget.EditText;
@@ -78,6 +80,7 @@ import com.owncloud.android.operations.GetServerInfoOperation;
 import com.owncloud.android.operations.OAuth2GetAccessToken;
 import com.owncloud.android.services.OperationsService;
 import com.owncloud.android.services.OperationsService.OperationsServiceBinder;
+import com.owncloud.android.ui.dialog.CredentialsDialogFragment;
 import com.owncloud.android.ui.dialog.IndeterminateProgressDialog;
 import com.owncloud.android.ui.dialog.SamlWebViewDialog;
 import com.owncloud.android.ui.dialog.SslUntrustedCertDialog;
@@ -125,6 +128,8 @@ SsoWebViewClientListener, OnSslUntrustedCertListener {
     private static final String UNTRUSTED_CERT_DIALOG_TAG = "UNTRUSTED_CERT_DIALOG";
     private static final String SAML_DIALOG_TAG = "SAML_DIALOG";
     private static final String WAIT_DIALOG_TAG = "WAIT_DIALOG";
+    private static final String CREDENTIALS_DIALOG_TAG = "CREDENTIALS_DIALOG";
+    private static final String KEY_AUTH_IS_FIRST_ATTEMPT_TAG = "KEY_AUTH_IS_FIRST_ATTEMPT";
 
     
     /// parameters from EXTRAs in starter Intent
@@ -170,6 +175,8 @@ SsoWebViewClientListener, OnSslUntrustedCertListener {
     
     private String mAuthToken = "";
 
+    private boolean mIsFirstAuthAttempt;
+
     
     /// Identifier of operation in progress which result shouldn't be lost 
     private long mWaitingForOpId = Long.MAX_VALUE;
@@ -186,6 +193,8 @@ SsoWebViewClientListener, OnSslUntrustedCertListener {
         super.onCreate(savedInstanceState);
         getWindow().requestFeature(Window.FEATURE_NO_TITLE);
 
+        mIsFirstAuthAttempt = true;
+
         // bind to Operations Service
         mOperationsServiceConnection = new OperationsServiceConnection();
         if (!bindService(new Intent(this, OperationsService.class), 
@@ -210,6 +219,7 @@ SsoWebViewClientListener, OnSslUntrustedCertListener {
         } else {
             mAuthTokenType = savedInstanceState.getString(KEY_AUTH_TOKEN_TYPE);
             mWaitingForOpId = savedInstanceState.getLong(KEY_WAITING_FOR_OP_ID);
+            mIsFirstAuthAttempt = savedInstanceState.getBoolean(KEY_AUTH_IS_FIRST_ATTEMPT_TAG);
         }
         
         /// load user interface
@@ -556,6 +566,9 @@ SsoWebViewClientListener, OnSslUntrustedCertListener {
         outState.putInt(KEY_AUTH_STATUS_TEXT, mAuthStatusText);
         outState.putString(KEY_AUTH_TOKEN, mAuthToken);
 
+        /// authentication
+        outState.putBoolean(KEY_AUTH_IS_FIRST_ATTEMPT_TAG, mIsFirstAuthAttempt);
+
         //Log_OC.wtf(TAG, "onSaveInstanceState end" );
     }
 
@@ -1684,6 +1697,7 @@ SsoWebViewClientListener, OnSslUntrustedCertListener {
         dialog.show(ft, UNTRUSTED_CERT_DIALOG_TAG);
     }
 
+
     /**
      * Show untrusted cert dialog 
      */
@@ -1774,5 +1788,33 @@ SsoWebViewClientListener, OnSslUntrustedCertListener {
         }
     
     }
-    
+
+    /**
+     * Create and show dialog for request authentication to the user
+     * @param webView
+     * @param handler
+     */
+    public void createAuthenticationDialog(WebView webView, HttpAuthHandler handler) {
+
+        // Show a dialog with the certificate info
+        CredentialsDialogFragment dialog = CredentialsDialogFragment.newInstanceForCredentials(webView, handler);
+        FragmentManager fm = getSupportFragmentManager();
+        FragmentTransaction ft = fm.beginTransaction();
+        ft.addToBackStack(null);
+        dialog.setCancelable(false);
+        dialog.show(ft, CREDENTIALS_DIALOG_TAG);
+
+        if (!mIsFirstAuthAttempt) {
+            Toast.makeText(getApplicationContext(), getText(R.string.saml_authentication_wrong_pass), Toast.LENGTH_LONG).show();
+        } else {
+            mIsFirstAuthAttempt = false;
+        }
+    }
+
+    /**
+     * For retrieving the clicking on authentication cancel button
+     */
+    public void doNegativeAuthenticatioDialogClick(){
+        mIsFirstAuthAttempt = true;
+    }
 }

+ 4 - 1
src/com/owncloud/android/authentication/SsoWebViewClient.java

@@ -66,6 +66,7 @@ public class SsoWebViewClient extends WebViewClient {
     private WeakReference<SsoWebViewClientListener> mListenerRef;
     private String mTargetUrl;
     private String mLastReloadedUrlAtError;
+
     
     public SsoWebViewClient (Context context, Handler listenerHandler, SsoWebViewClientListener listener) {
         mContext = context;
@@ -86,6 +87,7 @@ public class SsoWebViewClient extends WebViewClient {
     @Override
     public void onPageStarted (WebView view, String url, Bitmap favicon) {
         Log_OC.d(TAG, "onPageStarted : " + url);
+        view.clearCache(true);
         super.onPageStarted(view, url, favicon);
     }
     
@@ -195,6 +197,8 @@ public class SsoWebViewClient extends WebViewClient {
     @Override
     public void onReceivedHttpAuthRequest (WebView view, HttpAuthHandler handler, String host, String realm) {
         Log_OC.d(TAG, "onReceivedHttpAuthRequest : " + host);
+
+        ((AuthenticatorActivity)mContext).createAuthenticationDialog(view, handler);
     }
 
     @Override
@@ -229,5 +233,4 @@ public class SsoWebViewClient extends WebViewClient {
         Log_OC.d(TAG, "shouldOverrideKeyEvent : " + event);
         return false;
     }
-
 }

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

@@ -612,6 +612,126 @@ public class FileDataStorageManager {
     }
 
     
+    public void moveLocalFile(OCFile file, String targetPath, String targetParentPath) {
+
+        if (file != null && file.fileExists() && !OCFile.ROOT_PATH.equals(file.getFileName())) {
+            
+            OCFile targetParent = getFileByPath(targetParentPath);
+            if (targetParent == null) {
+                // TODO panic
+            }
+            
+            /// 1. get all the descendants of the moved element in a single QUERY
+            Cursor c = null;
+            if (getContentProviderClient() != null) {
+                try {
+                    c = getContentProviderClient().query(
+                        ProviderTableMeta.CONTENT_URI, 
+                        null,
+                        ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " + 
+                                ProviderTableMeta.FILE_PATH + " LIKE ? ",
+                        new String[] { 
+                                mAccount.name, 
+                                file.getRemotePath() + "%"  
+                        }, 
+                        ProviderTableMeta.FILE_PATH + " ASC "
+                    );
+                } catch (RemoteException e) {
+                    Log_OC.e(TAG, e.getMessage());
+                }
+                
+            } else {
+                c = getContentResolver().query(
+                    ProviderTableMeta.CONTENT_URI, 
+                    null,
+                    ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " + 
+                            ProviderTableMeta.FILE_PATH + " LIKE ? ",
+                    new String[] { 
+                            mAccount.name, 
+                            file.getRemotePath() + "%"  
+                    }, 
+                    ProviderTableMeta.FILE_PATH + " ASC "
+                );
+            }
+
+            /// 2. prepare a batch of update operations to change all the descendants
+            ArrayList<ContentProviderOperation> operations = 
+                    new ArrayList<ContentProviderOperation>(c.getCount());
+            String defaultSavePath = FileStorageUtils.getSavePath(mAccount.name);
+            if (c.moveToFirst()) {
+                int lengthOfOldPath = file.getRemotePath().length();
+                int lengthOfOldStoragePath = defaultSavePath.length() + lengthOfOldPath;
+                do {
+                    ContentValues cv = new ContentValues(); // keep construction in the loop
+                    OCFile child = createFileInstance(c);
+                    cv.put(
+                        ProviderTableMeta.FILE_PATH, 
+                        targetPath + child.getRemotePath().substring(lengthOfOldPath)
+                    );
+                    if (child.getStoragePath() != null && 
+                            child.getStoragePath().startsWith(defaultSavePath)) {
+                        // update link to downloaded content - but local move is not done here!
+                        cv.put(
+                            ProviderTableMeta.FILE_STORAGE_PATH, 
+                            defaultSavePath + targetPath + 
+                                child.getStoragePath().substring(lengthOfOldStoragePath)
+                        );
+                    }
+                    if (child.getRemotePath().equals(file.getRemotePath())) {
+                        cv.put(
+                                ProviderTableMeta.FILE_PARENT,
+                                targetParent.getFileId()
+                            );
+                    }
+                    operations.add(
+                        ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI).
+                            withValues(cv).
+                            withSelection(  
+                                    ProviderTableMeta._ID + "=?", 
+                                    new String[] { String.valueOf(child.getFileId()) }
+                                    )
+                            .build());
+                    
+                } while (c.moveToNext());
+            }
+            c.close();
+
+            /// 3. apply updates in batch
+            try {
+                if (getContentResolver() != null) {
+                    getContentResolver().applyBatch(MainApp.getAuthority(), operations);
+
+                } else {
+                    getContentProviderClient().applyBatch(operations);
+                }
+
+            } catch (Exception e) {
+                Log_OC.e(
+                    TAG, 
+                    "Fail to update " + file.getFileId() + " and descendants in database", 
+                    e
+                );
+            }
+
+            /// 4. move in local file system 
+            String localPath = FileStorageUtils.getDefaultSavePathFor(mAccount.name, file);
+            File localFile = new File(localPath);
+            boolean renamed = false;
+            if (localFile.exists()) {
+                File targetFile = new File(defaultSavePath + targetPath);
+                File targetFolder = targetFile.getParentFile();
+                if (!targetFolder.exists()) {
+                    targetFolder.mkdirs();
+                }
+                renamed = localFile.renameTo(targetFile);
+            }
+            Log_OC.d(TAG, "Local file RENAMED : " + renamed);
+            
+        }
+        
+    }
+    
+    
     private Vector<OCFile> getFolderContent(long parentId) {
 
         Vector<OCFile> ret = new Vector<OCFile>();
@@ -1302,4 +1422,5 @@ public class FileDataStorageManager {
             */
         //}
     }
+
 }

+ 8 - 0
src/com/owncloud/android/files/FileMenuFilter.java

@@ -162,6 +162,14 @@ public class FileMenuFilter {
         } else {
             toShow.add(R.id.action_rename_file);
         }
+
+        // MOVE
+        if (mFile == null || downloading || uploading) {
+            toHide.add(R.id.action_move);
+
+        } else {
+            toShow.add(R.id.action_move);
+        }
         
         // REMOVE
         if (mFile == null || downloading || uploading) {

+ 18 - 1
src/com/owncloud/android/files/FileOperationsHelper.java

@@ -265,7 +265,24 @@ public class FileOperationsHelper {
         } else if (uploaderBinder != null && uploaderBinder.isUploading(account, file)) {
             uploaderBinder.cancel(account, file);
         }
-    }    
+    }
+
+    /**
+     * Start move file operation
+     * @param newfile           File where it is going to be moved
+     * @param currentFile       File with the previous info
+     */
+    public void moveFile(OCFile newfile, OCFile currentFile) {
+        // Move files
+        Intent service = new Intent(mFileActivity, OperationsService.class);
+        service.setAction(OperationsService.ACTION_MOVE_FILE);
+        service.putExtra(OperationsService.EXTRA_NEW_PARENT_PATH, newfile.getRemotePath());
+        service.putExtra(OperationsService.EXTRA_REMOTE_PATH, currentFile.getRemotePath());
+        service.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
+        mWaitingForOpId =  mFileActivity.getOperationsServiceBinder().newOperation(service);
+
+        mFileActivity.showLoadingDialog();
+    }
 
 
     public long getOpIdWaitingFor() {

+ 4 - 0
src/com/owncloud/android/files/services/FileUploader.java

@@ -46,6 +46,7 @@ import android.support.v4.app.NotificationCompat;
 import android.webkit.MimeTypeMap;
 
 import com.owncloud.android.R;
+import com.owncloud.android.authentication.AccountUtils;
 import com.owncloud.android.authentication.AuthenticatorActivity;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
@@ -185,6 +186,9 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
             return Service.START_NOT_STICKY;
         }
         Account account = intent.getParcelableExtra(KEY_ACCOUNT);
+        if (!AccountUtils.exists(account, getApplicationContext())) {
+            return Service.START_NOT_STICKY;
+        }
 
         String[] localPaths = null, remotePaths = null, mimeTypes = null;
         OCFile[] files = null;

+ 103 - 0
src/com/owncloud/android/operations/MoveFileOperation.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.operations;
+
+import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.lib.common.OwnCloudClient;
+import com.owncloud.android.lib.common.operations.RemoteOperationResult;
+import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
+import com.owncloud.android.lib.resources.files.MoveRemoteFileOperation;
+import com.owncloud.android.operations.common.SyncOperation;
+
+import android.accounts.Account;
+
+
+/**
+ * Operation mmoving an {@link OCFile} to a different folder.
+ * 
+ * @author David A. Velasco
+ */
+public class MoveFileOperation extends SyncOperation {
+    
+    //private static final String TAG = MoveFileOperation.class.getSimpleName();
+    
+    private String mSrcPath;
+    private String mTargetParentPath;
+    
+    private OCFile mFile;
+
+    
+    
+    /**
+     * Constructor
+     * 
+     * @param path              Remote path of the {@link OCFile} to move.
+     * @param newParentPath     Path to the folder where the file will be moved into. 
+     * @param account           OwnCloud account containing both the file and the target folder 
+     */
+    public MoveFileOperation(String srcPath, String targetParentPath, Account account) {
+        mSrcPath = srcPath;
+        mTargetParentPath = targetParentPath;
+        if (!mTargetParentPath.endsWith(OCFile.PATH_SEPARATOR)) {
+            mTargetParentPath += OCFile.PATH_SEPARATOR;
+        }
+        
+        mFile = null;
+    }
+  
+    /**
+     * Performs the operation.
+     * 
+     * @param   client      Client object to communicate with the remote ownCloud server.
+     */
+    @Override
+    protected RemoteOperationResult run(OwnCloudClient client) {
+        RemoteOperationResult result = null;
+        
+        /// 1. check move validity
+        if (mTargetParentPath.startsWith(mSrcPath)) {
+            return new RemoteOperationResult(ResultCode.INVALID_MOVE_INTO_DESCENDANT);
+        }
+        mFile = getStorageManager().getFileByPath(mSrcPath);
+        if (mFile == null) {
+            return new RemoteOperationResult(ResultCode.FILE_NOT_FOUND);
+        }
+        
+        /// 2. remote move
+        String targetPath = mTargetParentPath + mFile.getFileName();
+        if (mFile.isFolder()) {
+            targetPath += OCFile.PATH_SEPARATOR;
+        }
+        MoveRemoteFileOperation operation = new MoveRemoteFileOperation(
+                mSrcPath, 
+                targetPath, 
+                false
+        );
+        result = operation.execute(client);
+        
+        /// 3. local move
+        if (result.isSuccess()) {
+            getStorageManager().moveLocalFile(mFile, targetPath, mTargetParentPath);
+        } 
+        // TODO handle ResultCode.PARTIAL_MOVE_DONE in client Activity, for the moment
+        
+        return result;
+    }
+    
+
+}

+ 8 - 0
src/com/owncloud/android/services/OperationsService.java

@@ -43,6 +43,7 @@ import com.owncloud.android.operations.common.SyncOperation;
 import com.owncloud.android.operations.CreateFolderOperation;
 import com.owncloud.android.operations.CreateShareOperation;
 import com.owncloud.android.operations.GetServerInfoOperation;
+import com.owncloud.android.operations.MoveFileOperation;
 import com.owncloud.android.operations.OAuth2GetAccessToken;
 import com.owncloud.android.operations.RemoveFileOperation;
 import com.owncloud.android.operations.RenameFileOperation;
@@ -79,6 +80,7 @@ public class OperationsService extends Service {
     public static final String EXTRA_CREATE_FULL_PATH = "CREATE_FULL_PATH";
     public static final String EXTRA_SYNC_FILE_CONTENTS = "SYNC_FILE_CONTENTS";
     public static final String EXTRA_RESULT = "RESULT";
+    public static final String EXTRA_NEW_PARENT_PATH = "NEW_PARENT_PATH";
     
     // TODO review if ALL OF THEM are necessary
     public static final String EXTRA_SUCCESS_IF_ABSENT = "SUCCESS_IF_ABSENT";
@@ -97,6 +99,7 @@ public class OperationsService extends Service {
     public static final String ACTION_REMOVE = "REMOVE";
     public static final String ACTION_CREATE_FOLDER = "CREATE_FOLDER";
     public static final String ACTION_SYNC_FILE = "SYNC_FILE";
+    public static final String ACTION_MOVE_FILE = "MOVE_FILE";
     
     public static final String ACTION_OPERATION_ADDED = OperationsService.class.getName() + ".OPERATION_ADDED";
     public static final String ACTION_OPERATION_FINISHED = OperationsService.class.getName() + ".OPERATION_FINISHED";
@@ -375,6 +378,11 @@ public class OperationsService extends Service {
                         String remotePath = operationIntent.getStringExtra(EXTRA_REMOTE_PATH);
                         boolean syncFileContents = operationIntent.getBooleanExtra(EXTRA_SYNC_FILE_CONTENTS, true);
                         operation = new SynchronizeFileOperation(remotePath, account, syncFileContents, getApplicationContext());
+                    } else if (action.equals(ACTION_MOVE_FILE)) {
+                        // Move file/folder
+                        String remotePath = operationIntent.getStringExtra(EXTRA_REMOTE_PATH);
+                        String newParentPath = operationIntent.getStringExtra(EXTRA_NEW_PARENT_PATH);
+                        operation = new MoveFileOperation(remotePath,newParentPath,account);
                     }
                     
                 }

+ 8 - 5
src/com/owncloud/android/ui/activity/FileActivity.java

@@ -80,6 +80,8 @@ implements OnRemoteOperationListener, ComponentsGetter {
     private static final String DIALOG_WAIT_TAG = "DIALOG_WAIT";
     private static final String KEY_WAITING_FOR_OP_ID = "WAITING_FOR_OP_ID";;
     
+    protected static final long DELAY_TO_REQUEST_OPERATION_ON_ACTIVITY_RESULTS = 200;
+    
     
     /** OwnCloud {@link Account} where the main {@link OCFile} handled by the activity is located. */
     private Account mAccount;
@@ -506,11 +508,12 @@ implements OnRemoteOperationListener, ComponentsGetter {
     }
     
     
-    private void updateFileFromDB(){
-      OCFile file = getStorageManager().getFileByPath(getFile().getRemotePath());
-      if (file != null) {
-          setFile(file);
-      }
+    protected void updateFileFromDB(){
+        OCFile file = getFile();
+        if (file != null) {
+            file = getStorageManager().getFileByPath(file.getRemotePath());
+            setFile(file);
+        }
     }
     
     /**

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

@@ -21,6 +21,8 @@ package com.owncloud.android.ui.activity;
 import java.io.File;
 import java.io.IOException;
 
+import org.apache.commons.httpclient.methods.PostMethod;
+
 import android.accounts.Account;
 import android.accounts.AccountManager;
 import android.accounts.AuthenticatorException;
@@ -48,6 +50,7 @@ import android.provider.MediaStore;
 import android.support.v4.app.Fragment;
 import android.support.v4.app.FragmentManager;
 import android.support.v4.app.FragmentTransaction;
+import android.support.v4.widget.SwipeRefreshLayout;
 import android.util.Log;
 import android.view.View;
 import android.view.ViewGroup;
@@ -81,6 +84,7 @@ import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCo
 import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.operations.CreateFolderOperation;
 import com.owncloud.android.operations.CreateShareOperation;
+import com.owncloud.android.operations.MoveFileOperation;
 import com.owncloud.android.operations.RemoveFileOperation;
 import com.owncloud.android.operations.RenameFileOperation;
 import com.owncloud.android.operations.SynchronizeFileOperation;
@@ -110,8 +114,9 @@ import com.owncloud.android.utils.ErrorMessageAdapter;
  */
 
 public class FileDisplayActivity extends HookActivity implements
-FileFragment.ContainerActivity, OnNavigationListener, OnSslUntrustedCertListener {
-
+FileFragment.ContainerActivity, OnNavigationListener, 
+OnSslUntrustedCertListener, SwipeRefreshLayout.OnRefreshListener {
+    
     private ArrayAdapter<String> mDirectories;
 
     private SyncBroadcastReceiver mSyncBroadcastReceiver;
@@ -135,6 +140,7 @@ FileFragment.ContainerActivity, OnNavigationListener, OnSslUntrustedCertListener
 
     private static final int ACTION_SELECT_CONTENT_FROM_APPS = 1;
     private static final int ACTION_SELECT_MULTIPLE_FILES = 2;
+    public static final int ACTION_MOVE_FILES = 3;
 
     private static final String TAG = FileDisplayActivity.class.getSimpleName();
 
@@ -566,6 +572,20 @@ FileFragment.ContainerActivity, OnNavigationListener, OnSslUntrustedCertListener
         } else if (requestCode == ACTION_SELECT_MULTIPLE_FILES && (resultCode == RESULT_OK || resultCode == UploadFilesActivity.RESULT_OK_AND_MOVE)) {
             requestMultipleUpload(data, resultCode);
 
+        } else if (requestCode == ACTION_MOVE_FILES && (resultCode == RESULT_OK || 
+                resultCode == MoveActivity.RESULT_OK_AND_MOVE)){
+
+            final Intent fData = data;
+            final int fResultCode = resultCode; 
+            getHandler().postDelayed(
+                new Runnable() {
+                    @Override
+                    public void run() {
+                        requestMoveOperation(fData, fResultCode);
+                    }
+                }, 
+                DELAY_TO_REQUEST_OPERATION_ON_ACTIVITY_RESULTS
+            );
         }
     }
 
@@ -646,6 +666,18 @@ FileFragment.ContainerActivity, OnNavigationListener, OnSslUntrustedCertListener
         startService(i);
     }
 
+    /**
+     * Request the operation for moving the file/folder from one path to another
+     * 
+     * @param data              Intent received
+     * @param resultCode        Result code received
+     */
+    private void requestMoveOperation(Intent data, int resultCode) {
+        OCFile folderToMoveAt = (OCFile) data.getParcelableExtra(MoveActivity.EXTRA_CURRENT_FOLDER);
+        OCFile targetFile = (OCFile) data.getParcelableExtra(MoveActivity.EXTRA_TARGET_FILE);
+        getFileOperationsHelper().moveFile(folderToMoveAt, targetFile);
+    }
+
     @Override
     public void onBackPressed() {
         OCFileListFragment listOfFiles = getListOfFilesFragment(); 
@@ -1331,7 +1363,9 @@ FileFragment.ContainerActivity, OnNavigationListener, OnSslUntrustedCertListener
         } else if (operation instanceof UnshareLinkOperation) {
             onUnshareLinkOperationFinish((UnshareLinkOperation)operation, result);
         
-        } 
+        } else if (operation instanceof MoveFileOperation) {
+            onMoveFileOperationFinish((MoveFileOperation)operation, result);
+        }
         
     }
 
@@ -1410,12 +1444,13 @@ FileFragment.ContainerActivity, OnNavigationListener, OnSslUntrustedCertListener
     
     
     /**
-     * Updates the view associated to the activity after the finish of an operation trying create a new folder
+     * Updates the view associated to the activity after the finish of an operation trying to move a 
+     * file.
      * 
-     * @param operation     Creation operation performed.
-     * @param result        Result of the creation.
+     * @param operation     Move operation performed.
+     * @param result        Result of the move operation.
      */
-    private void onCreateFolderOperationFinish(CreateFolderOperation operation, RemoteOperationResult result) {
+    private void onMoveFileOperationFinish(MoveFileOperation operation, RemoteOperationResult result) {
         if (result.isSuccess()) {
             dismissLoadingDialog();
             refreshListOfFilesFragment();
@@ -1502,6 +1537,30 @@ FileFragment.ContainerActivity, OnNavigationListener, OnSslUntrustedCertListener
         }
     }
 
+    /**
+     * Updates the view associated to the activity after the finish of an operation trying create a new folder
+     * 
+     * @param operation     Creation operation performed.
+     * @param result        Result of the creation.
+     */
+    private void onCreateFolderOperationFinish(CreateFolderOperation operation, RemoteOperationResult result) {
+        if (result.isSuccess()) {
+            dismissLoadingDialog();
+            refreshListOfFilesFragment();
+        } else {
+            dismissLoadingDialog();
+            try {
+                Toast msg = Toast.makeText(FileDisplayActivity.this, 
+                        ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()), 
+                        Toast.LENGTH_LONG); 
+                msg.show();
+
+            } catch (NotFoundException e) {
+                Log_OC.e(TAG, "Error while trying to show fail message " , e);
+            }
+        }
+    }
+
     
     /**
      * {@inheritDoc}
@@ -1670,4 +1729,17 @@ FileFragment.ContainerActivity, OnNavigationListener, OnSslUntrustedCertListener
         onTransferStateChanged(file, false, false);
     }
 
+    @Override
+    public void onRefresh() {
+        OCFileListFragment listOfFiles = getListOfFilesFragment();
+        if (listOfFiles != null) {
+            OCFile folder = listOfFiles.getCurrentFile();
+            if (folder != null) {
+                /*mFile = mContainerActivity.getStorageManager().getFileById(mFile.getFileId());
+                listDirectory(mFile);*/
+                startSyncFolderOperation(folder);
+            }
+        }
+    }
+
 }

+ 568 - 0
src/com/owncloud/android/ui/activity/MoveActivity.java

@@ -0,0 +1,568 @@
+/* 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.ui.activity;
+
+import java.io.IOException;
+
+import android.accounts.Account;
+import android.accounts.AccountManager;
+import android.accounts.AuthenticatorException;
+import android.accounts.OperationCanceledException;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.res.Resources.NotFoundException;
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentTransaction;
+import android.support.v4.widget.SwipeRefreshLayout;
+import android.util.Log;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+import android.widget.Toast;
+
+import com.actionbarsherlock.app.ActionBar;
+import com.actionbarsherlock.view.Menu;
+import com.actionbarsherlock.view.MenuInflater;
+import com.actionbarsherlock.view.MenuItem;
+import com.actionbarsherlock.view.Window;
+import com.owncloud.android.R;
+import com.owncloud.android.datamodel.OCFile;
+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.OwnCloudCredentials;
+import com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundException;
+import com.owncloud.android.lib.common.operations.RemoteOperation;
+import com.owncloud.android.lib.common.operations.RemoteOperationResult;
+import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
+import com.owncloud.android.operations.CreateFolderOperation;
+import com.owncloud.android.operations.SynchronizeFolderOperation;
+import com.owncloud.android.syncadapter.FileSyncAdapter;
+import com.owncloud.android.ui.dialog.CreateFolderDialogFragment;
+import com.owncloud.android.ui.fragment.FileFragment;
+import com.owncloud.android.ui.fragment.OCFileListFragment;
+import com.owncloud.android.utils.DisplayUtils;
+import com.owncloud.android.utils.ErrorMessageAdapter;
+import com.owncloud.android.lib.common.utils.Log_OC;
+
+public class MoveActivity extends HookActivity implements FileFragment.ContainerActivity, 
+    OnClickListener, SwipeRefreshLayout.OnRefreshListener {
+
+    public static final String EXTRA_CURRENT_FOLDER = UploadFilesActivity.class.getCanonicalName() + ".EXTRA_CURRENT_FOLDER";
+    public static final String EXTRA_TARGET_FILE = UploadFilesActivity.class.getCanonicalName() + "EXTRA_TARGET_FILE";
+
+    public static final int RESULT_OK_AND_MOVE = 1;
+    
+    private SyncBroadcastReceiver mSyncBroadcastReceiver;
+
+    private static final String TAG = MoveActivity.class.getSimpleName();
+    
+    private static final String TAG_LIST_OF_FOLDERS = "LIST_OF_FOLDERS";
+       
+    private boolean mSyncInProgress = false;
+
+    private Button mCancelBtn;
+    private Button mChooseBtn;
+
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        Log_OC.d(TAG, "onCreate() start");
+        requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
+
+        super.onCreate(savedInstanceState); 
+
+        setContentView(R.layout.files_move);
+        
+        if (savedInstanceState == null) {
+            createFragments();
+        }
+
+        // sets callback listeners for UI elements
+        initControls();
+
+        // Action bar setup
+        ActionBar actionBar = getSupportActionBar();
+        actionBar.setDisplayShowTitleEnabled(true);
+        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
+        setSupportProgressBarIndeterminateVisibility(mSyncInProgress);
+            // always AFTER setContentView(...) ; to work around bug in its implementation
+        
+        // sets message for empty list of folders
+        setBackgroundText();
+
+        Log_OC.d(TAG, "onCreate() end");
+        
+    }
+
+    @Override
+    protected void onStart() {
+        super.onStart();
+        getSupportActionBar().setIcon(DisplayUtils.getSeasonalIconId());
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+    }
+
+    /**
+     *  Called when the ownCloud {@link Account} associated to the Activity was just updated.
+     */
+    @Override
+    protected void onAccountSet(boolean stateWasRecovered) {
+        super.onAccountSet(stateWasRecovered);
+        if (getAccount() != null) {
+            
+            updateFileFromDB();
+            
+            OCFile folder = getFile();
+            if (folder == null || !folder.isFolder()) {
+                // fall back to root folder
+                setFile(getStorageManager().getFileByPath(OCFile.ROOT_PATH));
+                folder = getFile();
+            }
+            
+            if (!stateWasRecovered) {
+                OCFileListFragment listOfFolders = getListOfFilesFragment(); 
+                listOfFolders.listDirectory(folder);   
+                
+                startSyncFolderOperation(folder);
+            }
+            
+            updateNavigationElementsInActionBar();
+        }
+    }
+
+    private void createFragments() {
+        OCFileListFragment listOfFiles = new OCFileListFragment();
+        Bundle args = new Bundle();
+        args.putBoolean(OCFileListFragment.ARG_JUST_FOLDERS, true);
+        args.putBoolean(OCFileListFragment.ARG_ALLOW_CONTEXTUAL_ACTIONS, false);
+        listOfFiles.setArguments(args);
+        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
+        transaction.add(R.id.fragment_container, listOfFiles, TAG_LIST_OF_FOLDERS);
+        transaction.commit();
+    }
+
+    /**
+     * Show a text message on screen view for notifying user if content is
+     * loading or folder is empty
+     */
+    private void setBackgroundText() {
+        OCFileListFragment listFragment = getListOfFilesFragment();
+        if (listFragment != null) {
+            int message = R.string.file_list_loading;
+            if (!mSyncInProgress) {
+                // In case folder list is empty
+                message = R.string.file_list_empty_moving;
+            }
+            listFragment.setMessageForEmptyList(getString(message));
+        } else {
+            Log.e(TAG, "OCFileListFragment is null");
+        }
+    }
+
+    private OCFileListFragment getListOfFilesFragment() {
+        Fragment listOfFiles = getSupportFragmentManager().findFragmentByTag(MoveActivity.TAG_LIST_OF_FOLDERS);
+        if (listOfFiles != null) {
+            return (OCFileListFragment)listOfFiles;
+        }
+        Log_OC.wtf(TAG, "Access to unexisting list of files fragment!!");
+        return null;
+    }
+
+    
+    /**
+     * {@inheritDoc}
+     * 
+     * Updates action bar and second fragment, if in dual pane mode.
+     */
+    @Override
+    public void onBrowsedDownTo(OCFile directory) {
+        setFile(directory);
+        updateNavigationElementsInActionBar();
+        // Sync Folder
+        startSyncFolderOperation(directory);
+        
+    }
+
+    
+    public void startSyncFolderOperation(OCFile folder) {
+        long currentSyncTime = System.currentTimeMillis(); 
+        
+        mSyncInProgress = true;
+                
+        // perform folder synchronization
+        RemoteOperation synchFolderOp = new SynchronizeFolderOperation( folder,  
+                                                                        currentSyncTime, 
+                                                                        false,
+                                                                        getFileOperationsHelper().isSharedSupported(),
+                                                                        getStorageManager(), 
+                                                                        getAccount(), 
+                                                                        getApplicationContext()
+                                                                      );
+        synchFolderOp.execute(getAccount(), this, null, null);
+        
+        setSupportProgressBarIndeterminateVisibility(true);
+
+        setBackgroundText();
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        Log_OC.e(TAG, "onResume() start");
+        
+        // refresh list of files
+        refreshListOfFilesFragment();
+
+        // Listen for sync messages
+        IntentFilter syncIntentFilter = new IntentFilter(FileSyncAdapter.EVENT_FULL_SYNC_START);
+        syncIntentFilter.addAction(FileSyncAdapter.EVENT_FULL_SYNC_END);
+        syncIntentFilter.addAction(FileSyncAdapter.EVENT_FULL_SYNC_FOLDER_CONTENTS_SYNCED);
+        syncIntentFilter.addAction(SynchronizeFolderOperation.EVENT_SINGLE_FOLDER_CONTENTS_SYNCED);
+        syncIntentFilter.addAction(SynchronizeFolderOperation.EVENT_SINGLE_FOLDER_SHARES_SYNCED);
+        mSyncBroadcastReceiver = new SyncBroadcastReceiver();
+        registerReceiver(mSyncBroadcastReceiver, syncIntentFilter);
+        
+        Log_OC.d(TAG, "onResume() end");
+    }
+    
+    @Override
+    protected void onPause() {
+        Log_OC.e(TAG, "onPause() start");
+        if (mSyncBroadcastReceiver != null) {
+            unregisterReceiver(mSyncBroadcastReceiver);
+            //LocalBroadcastManager.getInstance(this).unregisterReceiver(mSyncBroadcastReceiver);
+            mSyncBroadcastReceiver = null;
+        }
+        
+        Log_OC.d(TAG, "onPause() end");
+        super.onPause();
+    }
+    
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        MenuInflater inflater = getSherlock().getMenuInflater();
+        inflater.inflate(R.menu.main_menu, menu);
+        menu.findItem(R.id.action_upload).setVisible(false);
+        menu.findItem(R.id.action_settings).setVisible(false);
+        menu.findItem(R.id.action_sync_account).setVisible(false);
+        return true;
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        boolean retval = true;
+        switch (item.getItemId()) {
+        case R.id.action_create_dir: {
+            CreateFolderDialogFragment dialog = 
+                    CreateFolderDialogFragment.newInstance(getCurrentFolder());
+            dialog.show(
+                    getSupportFragmentManager(), 
+                    CreateFolderDialogFragment.CREATE_FOLDER_FRAGMENT
+            );
+            break;
+        }
+        case android.R.id.home: {
+            OCFile currentDir = getCurrentFolder();
+            if(currentDir != null && currentDir.getParentId() != 0) {
+                onBackPressed();
+            }
+            break;
+        }
+        default:
+            retval = super.onOptionsItemSelected(item);
+        }
+        return retval;
+    }
+
+    private OCFile getCurrentFolder() {
+        OCFile file = getFile();
+        if (file != null) {
+            if (file.isFolder()) {
+                return file;
+            } else if (getStorageManager() != null) {
+                String parentPath = file.getRemotePath().substring(0, file.getRemotePath().lastIndexOf(file.getFileName()));
+                return getStorageManager().getFileByPath(parentPath);
+            }
+        }
+        return null;
+    }
+    
+    protected void refreshListOfFilesFragment() {
+        OCFileListFragment fileListFragment = getListOfFilesFragment();
+        if (fileListFragment != null) { 
+            fileListFragment.listDirectory();
+        }
+    }
+
+    public void browseToRoot() {
+        OCFileListFragment listOfFiles = getListOfFilesFragment(); 
+        if (listOfFiles != null) {  // should never be null, indeed
+            OCFile root = getStorageManager().getFileByPath(OCFile.ROOT_PATH);
+            listOfFiles.listDirectory(root);
+            setFile(listOfFiles.getCurrentFile());
+            updateNavigationElementsInActionBar();
+            startSyncFolderOperation(root);
+        }
+    }
+
+    @Override
+    public void onBackPressed() {
+        OCFileListFragment listOfFiles = getListOfFilesFragment();
+        if (listOfFiles != null) {  // should never be null, indeed
+            int levelsUp = listOfFiles.onBrowseUp();
+            if (levelsUp == 0) {
+                finish();
+                return;
+            }
+            setFile(listOfFiles.getCurrentFile());
+            updateNavigationElementsInActionBar();
+        }
+    }
+
+    private void updateNavigationElementsInActionBar() {
+        ActionBar actionBar = getSupportActionBar();
+        OCFile currentDir = getCurrentFolder();
+        boolean atRoot = (currentDir == null || currentDir.getParentId() == 0);
+        actionBar.setDisplayHomeAsUpEnabled(!atRoot);
+        actionBar.setHomeButtonEnabled(!atRoot);
+        actionBar.setTitle(
+            atRoot 
+                ? getString(R.string.default_display_name_for_root_folder) 
+                : currentDir.getFileName()
+        );
+    }
+
+    /**
+     * Set per-view controllers
+     */
+    private void initControls(){
+        mCancelBtn = (Button) findViewById(R.id.move_files_btn_cancel);
+        mCancelBtn.setOnClickListener(this);
+        mChooseBtn = (Button) findViewById(R.id.move_files_btn_choose);
+        mChooseBtn.setOnClickListener(this);
+    }
+    
+    @Override
+    public void onClick(View v) {
+        if (v == mCancelBtn) {
+            finish();
+        } else if (v == mChooseBtn) {
+            Intent i = getIntent();
+            OCFile targetFile = (OCFile) i.getParcelableExtra(MoveActivity.EXTRA_TARGET_FILE);
+
+            Intent data = new Intent();
+            data.putExtra(EXTRA_CURRENT_FOLDER, getCurrentFolder());
+            data.putExtra(EXTRA_TARGET_FILE, targetFile);
+            setResult(RESULT_OK_AND_MOVE, data);
+            finish();
+        }
+    }
+    
+    
+    @Override
+    public void onRemoteOperationFinish(RemoteOperation operation, RemoteOperationResult result) {
+        super.onRemoteOperationFinish(operation, result);
+        
+        if (operation instanceof CreateFolderOperation) {
+            onCreateFolderOperationFinish((CreateFolderOperation)operation, result);
+            
+        }
+    }
+    
+    
+    /**
+     * Updates the view associated to the activity after the finish of an operation trying 
+     * to create a new folder.
+     * 
+     * @param operation     Creation operation performed.
+     * @param result        Result of the creation.
+     */
+    private void onCreateFolderOperationFinish(
+            CreateFolderOperation operation, RemoteOperationResult result
+            ) {
+        
+        if (result.isSuccess()) {
+            dismissLoadingDialog();
+            refreshListOfFilesFragment();
+        } else {
+            dismissLoadingDialog();
+            try {
+                Toast msg = Toast.makeText(MoveActivity.this, 
+                        ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()), 
+                        Toast.LENGTH_LONG); 
+                msg.show();
+
+            } catch (NotFoundException e) {
+                Log_OC.e(TAG, "Error while trying to show fail message " , e);
+            }
+        }
+    }
+    
+    
+    
+    private class SyncBroadcastReceiver extends BroadcastReceiver {
+
+        /**
+         * {@link BroadcastReceiver} to enable syncing feedback in UI
+         */
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            try {
+                String event = intent.getAction();
+                Log_OC.d(TAG, "Received broadcast " + event);
+                String accountName = intent.getStringExtra(FileSyncAdapter.EXTRA_ACCOUNT_NAME);
+                String synchFolderRemotePath = intent.getStringExtra(FileSyncAdapter.EXTRA_FOLDER_PATH); 
+                RemoteOperationResult synchResult = (RemoteOperationResult)intent.getSerializableExtra(FileSyncAdapter.EXTRA_RESULT);
+                boolean sameAccount = (getAccount() != null && accountName.equals(getAccount().name) && getStorageManager() != null); 
+    
+                if (sameAccount) {
+                    
+                    if (FileSyncAdapter.EVENT_FULL_SYNC_START.equals(event)) {
+                        mSyncInProgress = true;
+                        
+                    } else {
+                        OCFile currentFile = (getFile() == null) ? null : getStorageManager().getFileByPath(getFile().getRemotePath());
+                        OCFile currentDir = (getCurrentFolder() == null) ? null : getStorageManager().getFileByPath(getCurrentFolder().getRemotePath());
+    
+                        if (currentDir == null) {
+                            // current folder was removed from the server 
+                            Toast.makeText( MoveActivity.this, 
+                                            String.format(getString(R.string.sync_current_folder_was_removed), getCurrentFolder().getFileName()), 
+                                            Toast.LENGTH_LONG)
+                                .show();
+                            browseToRoot();
+                            
+                        } else {
+                            if (currentFile == null && !getFile().isFolder()) {
+                                // currently selected file was removed in the server, and now we know it
+                                currentFile = currentDir;
+                            }
+
+                            if (synchFolderRemotePath != null && currentDir.getRemotePath().equals(synchFolderRemotePath)) {
+                                OCFileListFragment fileListFragment = getListOfFilesFragment();
+                                if (fileListFragment != null) {
+                                    fileListFragment.listDirectory(currentDir);
+                                }
+                            }
+                            setFile(currentFile);
+                        }
+                        
+                        mSyncInProgress = (!FileSyncAdapter.EVENT_FULL_SYNC_END.equals(event) && !SynchronizeFolderOperation.EVENT_SINGLE_FOLDER_SHARES_SYNCED.equals(event));
+                                
+                        if (SynchronizeFolderOperation.EVENT_SINGLE_FOLDER_CONTENTS_SYNCED.
+                                    equals(event) &&
+                                /// TODO refactor and make common
+                                synchResult != null && !synchResult.isSuccess() &&  
+                                (synchResult.getCode() == ResultCode.UNAUTHORIZED   || 
+                                    synchResult.isIdPRedirection()                  ||
+                                    (synchResult.isException() && synchResult.getException() 
+                                            instanceof AuthenticatorException))) {
+
+                            OwnCloudClient client = null;
+                            try {
+                                OwnCloudAccount ocAccount = 
+                                        new OwnCloudAccount(getAccount(), context);
+                                client = (OwnCloudClientManagerFactory.getDefaultSingleton().
+                                        removeClientFor(ocAccount));
+                                // TODO get rid of these exceptions
+                            } catch (AccountNotFoundException e) {
+                                e.printStackTrace();
+                            } catch (AuthenticatorException e) {
+                                e.printStackTrace();
+                            } catch (OperationCanceledException e) {
+                                e.printStackTrace();
+                            } catch (IOException e) {
+                                e.printStackTrace();
+                            }
+                            
+                            if (client != null) {
+                                OwnCloudCredentials cred = client.getCredentials();
+                                if (cred != null) {
+                                    AccountManager am = AccountManager.get(context);
+                                    if (cred.authTokenExpires()) {
+                                        am.invalidateAuthToken(
+                                                getAccount().type, 
+                                                cred.getAuthToken()
+                                        );
+                                    } else {
+                                        am.clearPassword(getAccount());
+                                    }
+                                }
+                            }
+                            
+                            requestCredentialsUpdate();
+                            
+                        }
+                    }
+                    removeStickyBroadcast(intent);
+                    Log_OC.d(TAG, "Setting progress visibility to " + mSyncInProgress);
+                    setSupportProgressBarIndeterminateVisibility(mSyncInProgress /*|| mRefreshSharesInProgress*/);
+
+                    setBackgroundText();
+                        
+                }
+                
+            } catch (RuntimeException e) {
+                // avoid app crashes after changing the serial id of RemoteOperationResult 
+                // in owncloud library with broadcast notifications pending to process
+                removeStickyBroadcast(intent);
+            }
+        }
+    }
+
+    
+
+    /**
+     * Shows the information of the {@link OCFile} received as a 
+     * parameter in the second fragment.
+     * 
+     * @param file          {@link OCFile} whose details will be shown
+     */
+    @Override
+    public void showDetails(OCFile file) {
+
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void onTransferStateChanged(OCFile file, boolean downloading, boolean uploading) {
+            
+    }
+
+
+    @Override
+    public void onRefresh() {
+        OCFileListFragment listOfFiles = getListOfFilesFragment();
+        if (listOfFiles != null) {
+            OCFile folder = listOfFiles.getCurrentFile();
+            if (folder != null) {
+                startSyncFolderOperation(folder);
+            }
+        }
+    }
+
+}

+ 17 - 28
src/com/owncloud/android/ui/activity/Preferences.java

@@ -66,13 +66,10 @@ public class Preferences extends SherlockPreferenceActivity implements AccountMa
     
     private static final String TAG = "OwnCloudPreferences";
 
-    private static final String PREVIOUS_ACCOUNT_KEY = "ACCOUNT";
-
     private DbHandler mDbHandler;
     private CheckBoxPreference pCode;
     private Preference pAboutApp;
 
-    private Account mPreviousAccount = null;
     private PreferenceCategory mAccountsPrefCategory = null;
     private final Handler mHandler = new Handler();
     private String mAccountName;
@@ -89,13 +86,8 @@ public class Preferences extends SherlockPreferenceActivity implements AccountMa
         ActionBar actionBar = getSherlock().getActionBar();
         actionBar.setIcon(DisplayUtils.getSeasonalIconId());
         actionBar.setDisplayHomeAsUpEnabled(true);
+        actionBar.setTitle(R.string.actionbar_settings);
         
-        if (savedInstanceState != null) {
-            mPreviousAccount = savedInstanceState.getParcelable(PREVIOUS_ACCOUNT_KEY);
-        } else {
-            mPreviousAccount = AccountUtils.getCurrentOwnCloudAccount(this);
-        }
-
         // Load the accounts category for adding the list of accounts
         mAccountsPrefCategory = (PreferenceCategory) findPreference("accounts_category");
 
@@ -414,8 +406,23 @@ public class Preferences extends SherlockPreferenceActivity implements AccountMa
                         for (Account a : accounts) {
                             CheckBoxPreference p = (CheckBoxPreference) findPreference(a.name);
                             if (key.equals(a.name)) {
+                                boolean accountChanged = !p.isChecked(); 
                                 p.setChecked(true);
-                                AccountUtils.setCurrentOwnCloudAccount(getApplicationContext(), a.name);
+                                AccountUtils.setCurrentOwnCloudAccount(
+                                        getApplicationContext(),
+                                        a.name
+                                );
+                                if (accountChanged) {
+                                    // restart the main activity
+                                    Intent i = new Intent(
+                                            Preferences.this, 
+                                            FileDisplayActivity.class
+                                    );
+                                    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+                                    startActivity(i);
+                                } else {
+                                    finish();
+                                }
                             } else {
                                 p.setChecked(false);
                             }
@@ -455,22 +462,4 @@ public class Preferences extends SherlockPreferenceActivity implements AccountMa
 
     }
 
-    @Override
-    protected void onPause() {
-        if (this.isFinishing()) {
-            Account current = AccountUtils.getCurrentOwnCloudAccount(this);
-            if ((mPreviousAccount == null && current != null)
-                    || (mPreviousAccount != null && !mPreviousAccount.equals(current))) {
-                // the account set as default changed since this activity was
-                // created
-
-                // restart the main activity
-                Intent i = new Intent(this, FileDisplayActivity.class);
-                i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
-                startActivity(i);
-            }
-        }
-        super.onPause();
-    }
-
 }

+ 29 - 1
src/com/owncloud/android/ui/adapter/FileListListAdapter.java

@@ -53,12 +53,18 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
     private Context mContext;
     private OCFile mFile = null;
     private Vector<OCFile> mFiles = null;
+    private boolean mJustFolders;
 
     private FileDataStorageManager mStorageManager;
     private Account mAccount;
     private ComponentsGetter mTransferServiceGetter;
     
-    public FileListListAdapter(Context context, ComponentsGetter transferServiceGetter) {
+    public FileListListAdapter(
+            boolean justFolders, 
+            Context context, 
+            ComponentsGetter transferServiceGetter
+            ) {
+        mJustFolders = justFolders;
         mContext = context;
         mAccount = AccountUtils.getCurrentOwnCloudAccount(mContext);
         mTransferServiceGetter = transferServiceGetter;
@@ -231,12 +237,34 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
         }
         if (mStorageManager != null) {
             mFiles = mStorageManager.getFolderContent(mFile);
+            if (mJustFolders) {
+                mFiles = getFolders(mFiles);
+            }
         } else {
             mFiles = null;
         }
         notifyDataSetChanged();
     }
     
+    
+    /**
+     * Filter for getting only the folders
+     * @param files
+     * @return Vector<OCFile>
+     */
+    public Vector<OCFile> getFolders(Vector<OCFile> files) {
+        Vector<OCFile> ret = new Vector<OCFile>(); 
+        OCFile current = null; 
+        for (int i=0; i<files.size(); i++) {
+            current = files.get(i);
+            if (current.isFolder()) {
+                ret.add(current);
+            }
+        }
+        return ret;
+    }
+    
+    
     /**
      * Check if parent folder does not include 'S' permission and if file/folder
      * is shared with me

+ 2 - 0
src/com/owncloud/android/ui/dialog/CreateFolderDialogFragment.java

@@ -45,6 +45,8 @@ public class CreateFolderDialogFragment
 extends SherlockDialogFragment implements DialogInterface.OnClickListener {
 
     private static final String ARG_PARENT_FOLDER = "PARENT_FOLDER";
+    
+    public static final String CREATE_FOLDER_FRAGMENT = "CREATE_FOLDER_FRAGMENT";
 
     /**
      * Public factory method to create new CreateFolderDialogFragment instances.

+ 152 - 0
src/com/owncloud/android/ui/dialog/CredentialsDialogFragment.java

@@ -0,0 +1,152 @@
+/* ownCloud Android client application
+ *   Copyright (C) 2014 ownCloud Inc.
+ *
+ *   This program is free software: you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License version 2,
+ *   as published by the Free Software Foundation.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+package com.owncloud.android.ui.dialog;
+
+import com.actionbarsherlock.app.SherlockDialogFragment;
+import com.owncloud.android.R;
+import com.owncloud.android.authentication.AuthenticatorActivity;
+
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.AlertDialog.Builder;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.text.InputType;
+import android.view.WindowManager.LayoutParams;
+import android.webkit.HttpAuthHandler;
+import android.webkit.WebView;
+import android.widget.EditText;
+import android.widget.LinearLayout;
+
+
+
+/**
+ *  Dialog to input authentication credentials
+ * 
+ */
+public class CredentialsDialogFragment extends SherlockDialogFragment
+    implements DialogInterface.OnClickListener {
+
+    private WebView mWebView = null;
+    private HttpAuthHandler mHandler = null;
+
+    private EditText mUsernameET;
+    private EditText mPasswordET;
+    
+    private String mUsernameStr;
+    private String mPasswordStr;
+
+
+    /**
+     * Public factory method to create new CredentialsDialogFragment instances.
+     * @param webView       WebView that is being loaded
+     * @param handler       HttpAuthHandler
+     * @return              Dialog ready to show
+     */
+    public static CredentialsDialogFragment newInstanceForCredentials(WebView webView, HttpAuthHandler handler) {
+        if (handler == null) {
+            throw new IllegalArgumentException("Trying to create instance with parameter handler == null");
+        }
+        CredentialsDialogFragment frag = new CredentialsDialogFragment();
+        frag.mHandler = handler;
+        frag.mWebView = webView;
+        return frag;
+    }
+
+
+    @Override
+    public Dialog onCreateDialog(Bundle savedInstanceState) {
+
+        // Create field for username
+        mUsernameET = new EditText(getSherlockActivity());
+        mUsernameET.setHint(getSherlockActivity().getText(R.string.auth_username));
+
+        // Create field for password
+        mPasswordET = new EditText(getSherlockActivity());
+        mPasswordET.setHint(getSherlockActivity().getText(R.string.auth_password));
+        mPasswordET.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
+
+        // Prepare LinearLayout for dialog
+        LinearLayout ll = new LinearLayout(getSherlockActivity());
+        ll.setOrientation(LinearLayout.VERTICAL);
+        ll.addView(mUsernameET);
+        ll.addView(mPasswordET);
+        
+        ll.requestFocus();
+        
+        setRetainInstance(true);
+
+        Builder authDialog = new AlertDialog
+                .Builder(getSherlockActivity())
+                .setTitle(getSherlockActivity().getText(R.string.saml_authentication_required_text))
+                .setView(ll)
+                .setCancelable(false)
+                .setPositiveButton(R.string.common_ok, this)
+                .setNegativeButton(R.string.common_cancel, this);
+
+        Dialog d = authDialog.create();
+        d.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE);
+        return d;
+    }
+
+
+    @Override
+    public void onPause() {
+        super.onPause();
+        // Due to the use of setRetainInstance(true) for keep the dialog over the rest of dialogs,
+        // we need to save the inputs text for being injected in onResume()
+        mUsernameStr = mUsernameET.getText().toString();
+        mPasswordStr = mPasswordET.getText().toString();
+    }
+
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        mUsernameET.setText(mUsernameStr);
+        mPasswordET.setText(mPasswordStr);
+    }
+
+
+    @Override
+    public void onClick(DialogInterface dialog, int which) {
+        if (which == AlertDialog.BUTTON_POSITIVE) { 
+
+            String username = mUsernameET.getText().toString();
+            String password = mPasswordET.getText().toString();
+
+            // Proceed with the authentication
+            mHandler.proceed(username, password);
+
+        } else if (which == AlertDialog.BUTTON_NEGATIVE) {
+            mWebView.stopLoading();
+            ((AuthenticatorActivity)getActivity()).doNegativeAuthenticatioDialogClick();
+        }
+
+        dialog.dismiss();
+    }
+    
+    
+    @Override
+    public void onDestroyView() {
+      if (getDialog() != null && getRetainInstance())
+        getDialog().setDismissMessage(null);
+      super.onDestroyView();
+    }
+
+}

+ 109 - 2
src/com/owncloud/android/ui/fragment/ExtendedListFragment.java

@@ -18,6 +18,8 @@
 
 package com.owncloud.android.ui.fragment;
 
+import java.util.ArrayList;
+
 import android.os.Bundle;
 import android.support.v4.widget.SwipeRefreshLayout;
 import android.view.LayoutInflater;
@@ -37,11 +39,17 @@ import com.owncloud.android.ui.ExtendedListView;
 /**
  *  TODO extending SherlockListFragment instead of SherlockFragment 
  */
-public class ExtendedListFragment extends SherlockFragment implements OnItemClickListener, SwipeRefreshLayout.OnRefreshListener{
+public class ExtendedListFragment extends SherlockFragment 
+implements OnItemClickListener, SwipeRefreshLayout.OnRefreshListener {
     
     private static final String TAG = ExtendedListFragment.class.getSimpleName();
 
     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";
+    private static final String KEY_HEIGHT_CELL = "HEIGHT_CELL";
+    private static final String KEY_EMPTY_LIST_MESSAGE = "EMPTY_LIST_MESSAGE";
 
     protected ExtendedListView mList;
     
@@ -49,6 +57,15 @@ public class ExtendedListFragment extends SherlockFragment implements OnItemClic
     private SwipeRefreshLayout mRefreshEmptyLayout;
     private TextView mEmptyListMessage;
     
+    // Save the state of the scroll in browsing
+    private ArrayList<Integer> mIndexes;
+    private ArrayList<Integer> mFirstPositions;
+    private ArrayList<Integer> mTops;
+    private int mHeightCell = 0;
+
+    private SwipeRefreshLayout.OnRefreshListener mOnRefreshListener = null;
+    
+    
     public void setListAdapter(ListAdapter listAdapter) {
         mList.setAdapter(listAdapter);
         mList.invalidate();
@@ -62,7 +79,6 @@ public class ExtendedListFragment extends SherlockFragment implements OnItemClic
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
         Log_OC.e(TAG, "onCreateView");
-        //mList = new ExtendedListView(getActivity());
         
         View v = inflater.inflate(R.layout.list_fragment, null);
         mEmptyListMessage = (TextView) v.findViewById(R.id.empty_list_view);
@@ -90,11 +106,39 @@ public class ExtendedListFragment extends SherlockFragment implements OnItemClic
     }
 
     
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void onActivityCreated(Bundle savedInstanceState) {
+        super.onActivityCreated(savedInstanceState);
+        
+        if (savedInstanceState != null) {
+            mIndexes = savedInstanceState.getIntegerArrayList(KEY_INDEXES);
+            mFirstPositions = savedInstanceState.getIntegerArrayList(KEY_FIRST_POSITIONS);
+            mTops = savedInstanceState.getIntegerArrayList(KEY_TOPS);
+            mHeightCell = savedInstanceState.getInt(KEY_HEIGHT_CELL);
+            setMessageForEmptyList(savedInstanceState.getString(KEY_EMPTY_LIST_MESSAGE));
+            
+        } else {
+            mIndexes = new ArrayList<Integer>();
+            mFirstPositions = new ArrayList<Integer>();
+            mTops = new ArrayList<Integer>();
+            mHeightCell = 0;
+        }
+    }    
+    
+    
     @Override
     public void onSaveInstanceState(Bundle savedInstanceState) {
         super.onSaveInstanceState(savedInstanceState);
         Log_OC.e(TAG, "onSaveInstanceState()");
         savedInstanceState.putInt(KEY_SAVED_LIST_POSITION, getReferencePosition());
+        savedInstanceState.putIntegerArrayList(KEY_INDEXES, mIndexes);
+        savedInstanceState.putIntegerArrayList(KEY_FIRST_POSITIONS, mFirstPositions);
+        savedInstanceState.putIntegerArrayList(KEY_TOPS, mTops);
+        savedInstanceState.putInt(KEY_HEIGHT_CELL, mHeightCell);
+        savedInstanceState.putString(KEY_EMPTY_LIST_MESSAGE, getEmptyViewText());
     }
 
     
@@ -126,6 +170,60 @@ public class ExtendedListFragment extends SherlockFragment implements OnItemClic
         }
     }
 
+
+    /*
+     * Restore index and position
+     */
+    protected void restoreIndexAndTopPosition() {
+        if (mIndexes.size() > 0) {  
+            // needs to be checked; not every browse-up had a browse-down before 
+            
+            int index = mIndexes.remove(mIndexes.size() - 1);
+            
+            int firstPosition = mFirstPositions.remove(mFirstPositions.size() -1);
+            
+            int top = mTops.remove(mTops.size() - 1);
+            
+            mList.setSelectionFromTop(firstPosition, top);
+            
+            // Move the scroll if the selection is not visible
+            int indexPosition = mHeightCell*index;
+            int height = mList.getHeight();
+            
+            if (indexPosition > height) {
+                if (android.os.Build.VERSION.SDK_INT >= 11)
+                {
+                    mList.smoothScrollToPosition(index); 
+                }
+                else if (android.os.Build.VERSION.SDK_INT >= 8)
+                {
+                    mList.setSelectionFromTop(index, 0);
+                }
+                
+            }
+        }
+    }
+    
+    /*
+     * Save index and top position
+     */
+    protected void saveIndexAndTopPosition(int index) {
+        
+        mIndexes.add(index);
+        
+        int firstPosition = mList.getFirstVisiblePosition();
+        mFirstPositions.add(firstPosition);
+        
+        View view = mList.getChildAt(0);
+        int top = (view == null) ? 0 : view.getTop() ;
+
+        mTops.add(top);
+        
+        // Save the height of a cell
+        mHeightCell = (view == null || mHeightCell != 0) ? mHeightCell : view.getHeight();
+    }
+    
+    
     @Override
     public void onItemClick (AdapterView<?> parent, View view, int position, long id) {
         // to be @overriden  
@@ -136,7 +234,16 @@ public class ExtendedListFragment extends SherlockFragment implements OnItemClic
         // to be @overriden
         mRefreshLayout.setRefreshing(false);
         mRefreshEmptyLayout.setRefreshing(false);
+        
+        if (mOnRefreshListener != null) {
+            mOnRefreshListener.onRefresh();
+        }
+    }
+    
+    public void setOnRefreshListener(SwipeRefreshLayout.OnRefreshListener listener) {
+        mOnRefreshListener = listener;
     }
+    
 
     /**
      * Enables swipe gesture

+ 7 - 0
src/com/owncloud/android/ui/fragment/FileDetailFragment.java

@@ -191,6 +191,13 @@ public class FileDetailFragment extends FileFragment implements OnClickListener
             item.setVisible(false);
             item.setEnabled(false);
         }
+
+        // additional restriction for this fragment
+        item = menu.findItem(R.id.action_move);
+        if (item != null) {
+            item.setVisible(false);
+            item.setEnabled(false);
+        }
     }
 
     

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

@@ -90,7 +90,7 @@ public class LocalFileListFragment extends ExtendedListFragment {
     public void onActivityCreated(Bundle savedInstanceState) {
         Log_OC.i(TAG, "onActivityCreated() start");
         
-        super.onCreate(savedInstanceState);
+        super.onActivityCreated(savedInstanceState);
         mAdapter = new LocalFileListAdapter(mContainerActivity.getInitialDirectory(), getActivity());
         setListAdapter(mAdapter);
         
@@ -111,6 +111,8 @@ public class LocalFileListFragment extends ExtendedListFragment {
                 listDirectory(file);
                 // notify the click to container Activity
                 mContainerActivity.onDirectoryClick(file);
+                // save index and top position
+                saveIndexAndTopPosition(position);
             
             } else {    /// Click on a file
                 ImageView checkBoxV = (ImageView) v.findViewById(R.id.custom_checkbox);
@@ -140,6 +142,9 @@ public class LocalFileListFragment extends ExtendedListFragment {
             parentDir = mDirectory.getParentFile();  // can be null
         }
         listDirectory(parentDir);
+
+        // restore index and top position
+        restoreIndexAndTopPosition();
     }
 
     

+ 81 - 148
src/com/owncloud/android/ui/fragment/OCFileListFragment.java

@@ -18,10 +18,11 @@
 package com.owncloud.android.ui.fragment;
 
 import java.io.File;
-import java.util.ArrayList;
 
 import android.app.Activity;
+import android.content.Intent;
 import android.os.Bundle;
+import android.support.v4.widget.SwipeRefreshLayout;
 import android.view.ContextMenu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
@@ -35,6 +36,7 @@ import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.files.FileMenuFilter;
 import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.ui.activity.FileDisplayActivity;
+import com.owncloud.android.ui.activity.MoveActivity;
 import com.owncloud.android.ui.adapter.FileListListAdapter;
 import com.owncloud.android.ui.dialog.ConfirmationDialogFragment;
 import com.owncloud.android.ui.dialog.RemoveFileDialogFragment;
@@ -55,15 +57,14 @@ public class OCFileListFragment extends ExtendedListFragment {
     
     private static final String TAG = OCFileListFragment.class.getSimpleName();
 
-    private static final String MY_PACKAGE = OCFileListFragment.class.getPackage() != null ? OCFileListFragment.class.getPackage().getName() : "com.owncloud.android.ui.fragment";
-    private static final String EXTRA_FILE = MY_PACKAGE + ".extra.FILE";
+    private static final String MY_PACKAGE = OCFileListFragment.class.getPackage() != null ?
+            OCFileListFragment.class.getPackage().getName() : "com.owncloud.android.ui.fragment";
+            
+    public final static String ARG_JUST_FOLDERS = MY_PACKAGE + ".JUST_FOLDERS";
+    public final static String ARG_ALLOW_CONTEXTUAL_ACTIONS = MY_PACKAGE + ".ALLOW_CONTEXTUAL";
+            
+    private static final String KEY_FILE = MY_PACKAGE + ".extra.FILE";
 
-    private static final String KEY_INDEXES = "INDEXES";
-    private static final String KEY_FIRST_POSITIONS= "FIRST_POSITIONS";
-    private static final String KEY_TOPS = "TOPS";
-    private static final String KEY_HEIGHT_CELL = "HEIGHT_CELL";
-    private static final String KEY_EMPTY_LIST_MESSAGE = "EMPTY_LIST_MESSAGE";
-    
     private FileFragment.ContainerActivity mContainerActivity;
    
     private OCFile mFile = null;
@@ -71,12 +72,6 @@ public class OCFileListFragment extends ExtendedListFragment {
     
     private OCFile mTargetFile;
 
-    // Save the state of the scroll in browsing
-    private ArrayList<Integer> mIndexes;
-    private ArrayList<Integer> mFirstPositions;
-    private ArrayList<Integer> mTops;
-
-    private int mHeightCell = 0;
     
     /**
      * {@inheritDoc}
@@ -87,15 +82,24 @@ public class OCFileListFragment extends ExtendedListFragment {
         Log_OC.e(TAG, "onAttach");
         try {
             mContainerActivity = (FileFragment.ContainerActivity) activity;
+            
         } catch (ClassCastException e) {
             throw new ClassCastException(activity.toString() + " must implement " + 
                     FileFragment.ContainerActivity.class.getSimpleName());
         }
+        try {
+            setOnRefreshListener((SwipeRefreshLayout.OnRefreshListener) activity);
+            
+        } catch (ClassCastException e) {
+            throw new ClassCastException(activity.toString() + " must implement " + 
+                    SwipeRefreshLayout.OnRefreshListener.class.getSimpleName());
+        }
     }
 
     
     @Override
     public void onDetach() {
+        setOnRefreshListener(null);
         mContainerActivity = null;
         super.onDetach();
     }
@@ -108,26 +112,17 @@ public class OCFileListFragment extends ExtendedListFragment {
         super.onActivityCreated(savedInstanceState);
         Log_OC.e(TAG, "onActivityCreated() start");
         
-        mAdapter = new FileListListAdapter(getSherlockActivity(), mContainerActivity); 
-                
         if (savedInstanceState != null) {
-            mFile = savedInstanceState.getParcelable(EXTRA_FILE);
-            mIndexes = savedInstanceState.getIntegerArrayList(KEY_INDEXES);
-            mFirstPositions = savedInstanceState.getIntegerArrayList(KEY_FIRST_POSITIONS);
-            mTops = savedInstanceState.getIntegerArrayList(KEY_TOPS);
-            mHeightCell = savedInstanceState.getInt(KEY_HEIGHT_CELL);
-            setMessageForEmptyList(savedInstanceState.getString(KEY_EMPTY_LIST_MESSAGE));
-            
-        } else {
-            mIndexes = new ArrayList<Integer>();
-            mFirstPositions = new ArrayList<Integer>();
-            mTops = new ArrayList<Integer>();
-            mHeightCell = 0;
-            
+            mFile = savedInstanceState.getParcelable(KEY_FILE);
         }
         
-        mAdapter = new FileListListAdapter(getSherlockActivity(), mContainerActivity);
-        
+        Bundle args = getArguments();
+        boolean justFolders = (args == null) ? false : args.getBoolean(ARG_JUST_FOLDERS, false); 
+        mAdapter = new FileListListAdapter(
+                justFolders,
+                getSherlockActivity(), 
+                mContainerActivity
+        );
         setListAdapter(mAdapter);
         
         registerForContextMenu(getListView());
@@ -140,19 +135,14 @@ public class OCFileListFragment extends ExtendedListFragment {
     @Override
     public void onSaveInstanceState (Bundle outState) {
         super.onSaveInstanceState(outState);
-        outState.putParcelable(EXTRA_FILE, mFile);
-        outState.putIntegerArrayList(KEY_INDEXES, mIndexes);
-        outState.putIntegerArrayList(KEY_FIRST_POSITIONS, mFirstPositions);
-        outState.putIntegerArrayList(KEY_TOPS, mTops);
-        outState.putInt(KEY_HEIGHT_CELL, mHeightCell);
-        outState.putString(KEY_EMPTY_LIST_MESSAGE, getEmptyViewText());
+        outState.putParcelable(KEY_FILE, mFile);
     }
     
     /**
      * Call this, when the user presses the up button.
      * 
-     * Tries to move up the current folder one level. If the parent folder was removed from the database, 
-     * it continues browsing up until finding an existing folders.
+     * Tries to move up the current folder one level. If the parent folder was removed from the 
+     * database, it continues browsing up until finding an existing folders.
      * 
      * return       Count of folder levels browsed up.
      */
@@ -166,25 +156,25 @@ public class OCFileListFragment extends ExtendedListFragment {
             String parentPath = null;
             if (mFile.getParentId() != FileDataStorageManager.ROOT_PARENT_ID) {
                 parentPath = new File(mFile.getRemotePath()).getParent();
-                parentPath = parentPath.endsWith(OCFile.PATH_SEPARATOR) ? parentPath : parentPath + OCFile.PATH_SEPARATOR;
+                parentPath = parentPath.endsWith(OCFile.PATH_SEPARATOR) ? parentPath : 
+                	parentPath + OCFile.PATH_SEPARATOR;
                 parentDir = storageManager.getFileByPath(parentPath);
                 moveCount++;
             } else {
-                parentDir = storageManager.getFileByPath(OCFile.ROOT_PATH);    // never returns null; keep the path in root folder
+                parentDir = storageManager.getFileByPath(OCFile.ROOT_PATH);
             }
             while (parentDir == null) {
                 parentPath = new File(parentPath).getParent();
-                parentPath = parentPath.endsWith(OCFile.PATH_SEPARATOR) ? parentPath : parentPath + OCFile.PATH_SEPARATOR;
+                parentPath = parentPath.endsWith(OCFile.PATH_SEPARATOR) ? parentPath : 
+                	parentPath + OCFile.PATH_SEPARATOR;
                 parentDir = storageManager.getFileByPath(parentPath);
                 moveCount++;
             }   // exit is granted because storageManager.getFileByPath("/") never returns null
-            mFile = parentDir;           
-        }
-        
-        if (mFile != null) {
+            mFile = parentDir;
+            
             listDirectory(mFile);
 
-            ((FileDisplayActivity)mContainerActivity).startSyncFolderOperation(mFile);
+            onRefresh();
             
             // restore index and top position
             restoreIndexAndTopPosition();
@@ -194,58 +184,6 @@ public class OCFileListFragment extends ExtendedListFragment {
         return moveCount;
     }
     
-    /*
-     * Restore index and position
-     */
-    private void restoreIndexAndTopPosition() {
-        if (mIndexes.size() > 0) {  
-            // needs to be checked; not every browse-up had a browse-down before 
-            
-            int index = mIndexes.remove(mIndexes.size() - 1);
-            
-            int firstPosition = mFirstPositions.remove(mFirstPositions.size() -1);
-            
-            int top = mTops.remove(mTops.size() - 1);
-            
-            mList.setSelectionFromTop(firstPosition, top);
-            
-            // Move the scroll if the selection is not visible
-            int indexPosition = mHeightCell*index;
-            int height = mList.getHeight();
-            
-            if (indexPosition > height) {
-                if (android.os.Build.VERSION.SDK_INT >= 11)
-                {
-                    mList.smoothScrollToPosition(index); 
-                }
-                else if (android.os.Build.VERSION.SDK_INT >= 8)
-                {
-                    mList.setSelectionFromTop(index, 0);
-                }
-                
-            }
-        }
-    }
-    
-    /*
-     * Save index and top position
-     */
-    private void saveIndexAndTopPosition(int index) {
-        
-        mIndexes.add(index);
-        
-        int firstPosition = mList.getFirstVisiblePosition();
-        mFirstPositions.add(firstPosition);
-        
-        View view = mList.getChildAt(0);
-        int top = (view == null) ? 0 : view.getTop() ;
-
-        mTops.add(top);
-        
-        // Save the height of a cell
-        mHeightCell = (view == null || mHeightCell != 0) ? mHeightCell : view.getHeight();
-    }
-    
     @Override
     public void onItemClick(AdapterView<?> l, View v, int position, long id) {
         OCFile file = (OCFile) mAdapter.getItem(position);
@@ -253,7 +191,7 @@ public class OCFileListFragment extends ExtendedListFragment {
             if (file.isFolder()) { 
                 // update state and view of this fragment
                 listDirectory(file);
-                // then, notify parent activity to let it update its state and view, and other fragments
+                // then, notify parent activity to let it update its state and view
                 mContainerActivity.onBrowsedDownTo(file);
                 // save index and top position
                 saveIndexAndTopPosition(position);
@@ -288,42 +226,46 @@ public class OCFileListFragment extends ExtendedListFragment {
      * {@inheritDoc}
      */
     @Override
-    public void onCreateContextMenu (ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
+    public void onCreateContextMenu (
+            ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
         super.onCreateContextMenu(menu, v, menuInfo);
-        MenuInflater inflater = getSherlockActivity().getMenuInflater();
-        inflater.inflate(R.menu.file_actions_menu, menu);
-        AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
-        OCFile targetFile = (OCFile) mAdapter.getItem(info.position);
-        
-        if (mContainerActivity.getStorageManager() != null) {
-            FileMenuFilter mf = new FileMenuFilter(
-                targetFile,
-                mContainerActivity.getStorageManager().getAccount(),
-                mContainerActivity,
-                getSherlockActivity()
-            );
-            mf.filter(menu);
-        }
-        
-        /// additional restrictions for this fragment 
-        // TODO allow in the future 'open with' for previewable files
-        MenuItem item = menu.findItem(R.id.action_open_file_with);
-        if (item != null) {
-            item.setVisible(false);
-            item.setEnabled(false);
-        }
-        /// TODO break this direct dependency on FileDisplayActivity... if possible
-        FileFragment frag = ((FileDisplayActivity)getSherlockActivity()).getSecondFragment();
-        if (frag != null && frag instanceof FileDetailFragment && 
-                frag.getFile().getFileId() == targetFile.getFileId()) {
-            item = menu.findItem(R.id.action_see_details);
+        Bundle args = getArguments();
+        boolean allowContextualActions = 
+                (args == null) ? true : args.getBoolean(ARG_ALLOW_CONTEXTUAL_ACTIONS, true); 
+        if (allowContextualActions) {
+            MenuInflater inflater = getSherlockActivity().getMenuInflater();
+            inflater.inflate(R.menu.file_actions_menu, menu);
+            AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
+            OCFile targetFile = (OCFile) mAdapter.getItem(info.position);
+            
+            if (mContainerActivity.getStorageManager() != null) {
+                FileMenuFilter mf = new FileMenuFilter(
+                    targetFile,
+                    mContainerActivity.getStorageManager().getAccount(),
+                    mContainerActivity,
+                    getSherlockActivity()
+                );
+                mf.filter(menu);
+            }
+            
+            /// additional restrictions for this fragment 
+            // TODO allow in the future 'open with' for previewable files
+            MenuItem item = menu.findItem(R.id.action_open_file_with);
             if (item != null) {
                 item.setVisible(false);
                 item.setEnabled(false);
             }
+            /// TODO break this direct dependency on FileDisplayActivity... if possible
+            FileFragment frag = ((FileDisplayActivity)getSherlockActivity()).getSecondFragment();
+            if (frag != null && frag instanceof FileDetailFragment && 
+                    frag.getFile().getFileId() == targetFile.getFileId()) {
+                item = menu.findItem(R.id.action_see_details);
+                if (item != null) {
+                    item.setVisible(false);
+                    item.setEnabled(false);
+                }
+            }
         }
-        
-
     }
     
     
@@ -378,6 +320,14 @@ public class OCFileListFragment extends ExtendedListFragment {
                 }
                 return true;
             }
+            case R.id.action_move: {
+                Intent action = new Intent(getActivity(), MoveActivity.class);
+
+                // Pass mTargetFile that contains info of selected file/folder
+                action.putExtra(MoveActivity.EXTRA_TARGET_FILE, mTargetFile);
+                getActivity().startActivityForResult(action, FileDisplayActivity.ACTION_MOVE_FILES);
+                return true;
+            }
             default:
                 return super.onContextItemSelected(item); 
         }
@@ -436,21 +386,4 @@ public class OCFileListFragment extends ExtendedListFragment {
         }
     }
 
-
-    @Override
-    public void onRefresh() {
-        super.onRefresh();
-        
-        if (mFile != null) {
-            // Refresh mFile
-            mFile = mContainerActivity.getStorageManager().getFileById(mFile.getFileId());
-
-            listDirectory(mFile);
-            
-            ((FileDisplayActivity)mContainerActivity).startSyncFolderOperation(mFile);
-        }
-    }
-    
-    
-    
 }

+ 7 - 0
src/com/owncloud/android/ui/preview/PreviewImageFragment.java

@@ -232,6 +232,13 @@ public class PreviewImageFragment extends FileFragment {
             item.setVisible(false);
             item.setEnabled(false);
         }
+
+        // additional restriction for this fragment
+        item = menu.findItem(R.id.action_move);
+        if (item != null) {
+            item.setVisible(false);
+            item.setEnabled(false);
+        }
         
     }
 

+ 7 - 0
src/com/owncloud/android/ui/preview/PreviewMediaFragment.java

@@ -289,6 +289,13 @@ public class PreviewMediaFragment extends FileFragment implements
             item.setVisible(false);
             item.setEnabled(false);
         }
+
+        // additional restriction for this fragment
+        item = menu.findItem(R.id.action_move);
+        if (item != null) {
+            item.setVisible(false);
+            item.setEnabled(false);
+        }
     }
     
     

+ 20 - 0
src/com/owncloud/android/utils/ErrorMessageAdapter.java

@@ -32,6 +32,7 @@ import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCo
 import com.owncloud.android.operations.CreateFolderOperation;
 import com.owncloud.android.operations.CreateShareOperation;
 import com.owncloud.android.operations.DownloadFileOperation;
+import com.owncloud.android.operations.MoveFileOperation;
 import com.owncloud.android.operations.RemoveFileOperation;
 import com.owncloud.android.operations.RenameFileOperation;
 import com.owncloud.android.operations.SynchronizeFileOperation;
@@ -186,6 +187,25 @@ public class ErrorMessageAdapter {
                 // Show a Message, operation finished without success
                 message = res.getString(R.string.unshare_link_file_error);
             }
+        } else if (operation instanceof MoveFileOperation) {
+
+            if (result.getCode() == ResultCode.FILE_NOT_FOUND) {
+                message = res.getString(R.string.move_file_not_found);
+                
+            } else if (result.getCode() == ResultCode.INVALID_MOVE_INTO_DESCENDANT)  {
+                message = res.getString(R.string.move_file_invalid_into_descendent);
+
+            } else if (result.getCode() == ResultCode.INVALID_OVERWRITE) {
+                message = res.getString(R.string.move_file_invalid_overwrite);
+
+            } else if (result.getCode() == ResultCode.FORBIDDEN) {
+                message = String.format(res.getString(R.string.forbidden_permissions),
+                        res.getString(R.string.forbidden_permissions_move));
+
+            }else {    // Generic error
+                // Show a Message, operation finished without success
+                message = res.getString(R.string.move_file_error);
+            }
         }
         
         return message;