Browse Source

Merge remote-tracking branch 'remotes/origin/master' into uploadWhenCharging

tobiasKaminsky 8 years ago
parent
commit
77f9902f17
77 changed files with 821 additions and 332 deletions
  1. 2 5
      README.md
  2. 4 4
      build.gradle
  3. 2 2
      gradle/wrapper/gradle-wrapper.properties
  4. 2 2
      oc_jb_workaround/build.gradle
  5. BIN
      res/drawable-hdpi/ic_search.png
  6. BIN
      res/drawable-hdpi/ic_search_grey.png
  7. BIN
      res/drawable-mdpi/ic_search.png
  8. BIN
      res/drawable-mdpi/ic_search_grey.png
  9. BIN
      res/drawable-xhdpi/ic_search.png
  10. BIN
      res/drawable-xhdpi/ic_search_grey.png
  11. BIN
      res/drawable-xxhdpi/ic_search.png
  12. BIN
      res/drawable-xxhdpi/ic_search_grey.png
  13. BIN
      res/drawable-xxxhdpi/background.jpg
  14. BIN
      res/drawable-xxxhdpi/ic_search.png
  15. BIN
      res/drawable-xxxhdpi/ic_search_grey.png
  16. 36 2
      res/layout/drawer.xml
  17. 3 3
      res/layout/drawer_header.xml
  18. 11 0
      res/menu/drawer_menu.xml
  19. 6 0
      res/menu/main_menu.xml
  20. 8 2
      res/menu/upload_files_picker.xml
  21. 2 4
      res/values-ast/strings.xml
  22. 1 2
      res/values-bg-rBG/strings.xml
  23. 1 1
      res/values-ca/strings.xml
  24. 12 3
      res/values-cs-rCZ/strings.xml
  25. 11 8
      res/values-de-rDE/strings.xml
  26. 25 22
      res/values-de/strings.xml
  27. 2 4
      res/values-el/strings.xml
  28. 4 3
      res/values-en-rGB/strings.xml
  29. 5 3
      res/values-es/strings.xml
  30. 1 1
      res/values-et-rEE/strings.xml
  31. 1 1
      res/values-fi-rFI/strings.xml
  32. 9 7
      res/values-fr/strings.xml
  33. 2 4
      res/values-he/strings.xml
  34. 1 2
      res/values-hu-rHU/strings.xml
  35. 6 4
      res/values-id/strings.xml
  36. 35 6
      res/values-is/strings.xml
  37. 6 4
      res/values-it/strings.xml
  38. 2 4
      res/values-ja-rJP/strings.xml
  39. 1 1
      res/values-ko/strings.xml
  40. 2 4
      res/values-nb-rNO/strings.xml
  41. 5 3
      res/values-nl/strings.xml
  42. 2 4
      res/values-pl/strings.xml
  43. 16 15
      res/values-pt-rBR/strings.xml
  44. 2 4
      res/values-pt-rPT/strings.xml
  45. 1 1
      res/values-ro/strings.xml
  46. 12 4
      res/values-ru/strings.xml
  47. 2 4
      res/values-sl/strings.xml
  48. 2 4
      res/values-sq/strings.xml
  49. 2 4
      res/values-sr/strings.xml
  50. 2 4
      res/values-sv/strings.xml
  51. 2 4
      res/values-th-rTH/strings.xml
  52. 28 5
      res/values-tr/strings.xml
  53. 1 2
      res/values-uk/strings.xml
  54. 2 4
      res/values-zh-rCN/strings.xml
  55. 21 6
      res/values-zh-rTW/strings.xml
  56. 6 0
      res/values/colors.xml
  57. 5 2
      res/values/strings.xml
  58. 1 1
      res/values/styles.xml
  59. 3 1
      src/com/owncloud/android/MainApp.java
  60. 9 5
      src/com/owncloud/android/authentication/AuthenticatorActivity.java
  61. 8 2
      src/com/owncloud/android/datamodel/OCFile.java
  62. 1 1
      src/com/owncloud/android/files/services/ConnectivityActionReceiver.java
  63. 8 9
      src/com/owncloud/android/files/services/FileUploader.java
  64. 2 2
      src/com/owncloud/android/operations/UploadFileOperation.java
  65. 166 30
      src/com/owncloud/android/ui/activity/DrawerActivity.java
  66. 17 4
      src/com/owncloud/android/ui/activity/FileDisplayActivity.java
  67. 77 10
      src/com/owncloud/android/ui/activity/ReceiveExternalFilesActivity.java
  68. 10 7
      src/com/owncloud/android/ui/activity/ToolbarActivity.java
  69. 11 18
      src/com/owncloud/android/ui/activity/UploadFilesActivity.java
  70. 2 1
      src/com/owncloud/android/ui/adapter/ExpandableUploadListAdapter.java
  71. 23 1
      src/com/owncloud/android/ui/adapter/FileListListAdapter.java
  72. 27 0
      src/com/owncloud/android/ui/adapter/FilterableListAdapter.java
  73. 28 4
      src/com/owncloud/android/ui/adapter/LocalFileListAdapter.java
  74. 28 6
      src/com/owncloud/android/ui/fragment/ExtendedListFragment.java
  75. 6 0
      src/com/owncloud/android/ui/fragment/LocalFileListFragment.java
  76. 4 2
      src/com/owncloud/android/utils/ConnectivityUtils.java
  77. 76 50
      src/com/owncloud/android/utils/DisplayUtils.java

+ 2 - 5
README.md

@@ -1,15 +1,12 @@
-# [Nextcloud](https://nextcloud.com) Android app
+# [Nextcloud](https://nextcloud.com) Android app ![](https://api.travis-ci.org/nextcloud/android.svg?branch=master)
 
-[<img src="http://www.android.com/images/brand/android_app_on_play_large.png" 
+[<img src="https://play.google.com/intl/en_us/badges/images/generic/en_badge_web_generic.png" 
       alt="Download from Google Play" 
       height="80">](https://play.google.com/store/apps/details?id=com.nextcloud.client)
-
 [<img src="https://f-droid.org/badge/get-it-on.png"
       alt="Get it on F-Droid"
       height="80">](https://f-droid.org/repository/browse/?fdfilter=com.nextcloud)
 
-**Build status:** master ![](https://api.travis-ci.org/nextcloud/android.svg?branch=master)
-
 [![irc](https://img.shields.io/badge/IRC-%23nextcloud%20on%20freenode-orange.svg)](https://webchat.freenode.net/?channels=nextcloud)
 [![irc](https://img.shields.io/badge/IRC-%23nextcloud--mobile%20on%20freenode-blue.svg)](https://webchat.freenode.net/?channels=nextcloud-mobile)
 

+ 4 - 4
build.gradle

@@ -7,10 +7,10 @@
 
 buildscript {
     repositories {
-        mavenCentral()
+        jcenter()
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -21,7 +21,7 @@ ext {
 }
 
 repositories {
-    mavenCentral()
+    jcenter()
     maven { url "https://jitpack.io" }
 
     flatDir {
@@ -33,7 +33,7 @@ dependencies {
     /// dependencies for app building
     compile name: 'touch-image-view'
 
-    compile 'com.github.nextcloud:android-library:1.0.1'
+    compile 'com.github.nextcloud:android-library:1.0.6'
     compile "com.android.support:support-v4:${supportLibraryVersion}"
     compile "com.android.support:design:${supportLibraryVersion}"
     compile 'com.jakewharton:disklrucache:2.0.2'

+ 2 - 2
gradle/wrapper/gradle-wrapper.properties

@@ -1,6 +1,6 @@
-#Thu Apr 07 22:12:15 CEST 2016
+#Tue Aug 16 10:44:46 CEST 2016
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip

+ 2 - 2
oc_jb_workaround/build.gradle

@@ -1,9 +1,9 @@
 buildscript {
     repositories {
-        mavenCentral()
+        jcenter()
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 apply plugin: 'com.android.application'

BIN
res/drawable-hdpi/ic_search.png


BIN
res/drawable-hdpi/ic_search_grey.png


BIN
res/drawable-mdpi/ic_search.png


BIN
res/drawable-mdpi/ic_search_grey.png


BIN
res/drawable-xhdpi/ic_search.png


BIN
res/drawable-xhdpi/ic_search_grey.png


BIN
res/drawable-xxhdpi/ic_search.png


BIN
res/drawable-xxhdpi/ic_search_grey.png


BIN
res/drawable-xxxhdpi/background.jpg


BIN
res/drawable-xxxhdpi/ic_search.png


BIN
res/drawable-xxxhdpi/ic_search_grey.png


+ 36 - 2
res/layout/drawer.xml

@@ -24,9 +24,43 @@
         android:layout_width="wrap_content"
         android:layout_height="match_parent"
         android:layout_gravity="start"
+        android:layout_weight="1"
         android:fitsSystemWindows="true"
-        app:theme="@style/NavigationView_ItemTextAppearance"
         app:headerLayout="@layout/drawer_header"
-        app:menu="@menu/drawer_menu"/>
+        app:menu="@menu/drawer_menu"
+        app:theme="@style/NavigationView_ItemTextAppearance">
+
+        <LinearLayout
+            android:id="@+id/drawer_quota"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_gravity="bottom"
+            android:background="@color/white"
+            android:clickable="false"
+            android:orientation="vertical"
+            android:paddingBottom="@dimen/standard_half_padding"
+            android:paddingLeft="@dimen/standard_padding"
+            android:paddingRight="@dimen/standard_padding"
+            android:paddingTop="@dimen/standard_half_padding"
+            android:visibility="gone">
+
+            <ProgressBar
+                android:id="@+id/drawer_quota_ProgressBar"
+                style="?android:attr/progressBarStyleHorizontal"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:indeterminate="false"
+                android:indeterminateOnly="false"
+                android:text="@string/drawer_quota"
+                />
+
+            <TextView
+                android:id="@+id/drawer_quota_text"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="@string/drawer_quota"/>
+        </LinearLayout>
+
+    </android.support.design.widget.NavigationView>
 
 </merge>

+ 3 - 3
res/layout/drawer_header.xml

@@ -19,15 +19,15 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
               android:layout_width="match_parent"
               android:layout_height="@dimen/nav_drawer_header_height"
-              android:background="@color/drawer_header_color">
+              android:background="@drawable/background"
+              android:fitsSystemWindows="true">
 
     <RelativeLayout
         android:id="@+id/drawer_active_user"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_gravity="bottom"
-        android:padding="@dimen/standard_padding"
-        >
+        android:padding="@dimen/standard_padding">
 
         <FrameLayout
             android:id="@+id/drawer_user_avatars"

+ 11 - 0
res/menu/drawer_menu.xml

@@ -67,4 +67,15 @@
             android:icon="@drawable/ic_settings"
             android:title="@string/actionbar_settings"/>
     </group>
+
+    <!--
+      dummy group/element as a workaround to see
+      the whole menu in case of quota being displayed
+    -->
+    <group>
+        <item
+            android:enabled="false"
+            android:orderInCategory="200"
+            android:title=""/>
+    </group>
 </menu>

+ 6 - 0
res/menu/main_menu.xml

@@ -20,6 +20,12 @@
 <menu xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto">
 
+    <item android:id="@+id/action_search"
+          android:icon="@drawable/ic_search"
+          android:title="@string/actionbar_search"
+          android:contentDescription="@string/actionbar_search"
+          app:actionViewClass="android.support.v7.widget.SearchView"
+          app:showAsAction="ifRoom|collapseActionView"/>
     <item
         android:id="@+id/action_create_dir"
         android:icon="@drawable/ic_action_create_dir"

+ 8 - 2
res/menu/upload_files_picker.xml

@@ -19,18 +19,24 @@
 <menu xmlns:android="http://schemas.android.com/apk/res/android"
       xmlns:app="http://schemas.android.com/apk/res-auto">
 
+    <item android:id="@+id/action_search"
+          android:icon="@drawable/ic_search"
+          android:title="@string/actionbar_search"
+          android:contentDescription="@string/actionbar_search"
+          app:actionViewClass="android.support.v7.widget.SearchView"
+          app:showAsAction="ifRoom|collapseActionView"/>
     <item
         android:id="@+id/action_select_all"
         android:checkable="true"
         android:contentDescription="@string/select_all"
         android:title="@string/select_all"
         android:icon="@drawable/ic_select_all"
-        app:showAsAction="always"/>
+        app:showAsAction="never"/>
     <item
         android:id="@+id/action_sort"
         android:icon="@drawable/ic_sort_variant"
         android:orderInCategory="2"
-        app:showAsAction="ifRoom"
+        app:showAsAction="never"
         android:title="@string/actionbar_sort"
         android:contentDescription="@string/actionbar_sort"/>
 </menu>

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

@@ -21,7 +21,7 @@
     <string name="drawer_item_all_files">Tolos ficheros</string>
     <string name="drawer_item_settings">Axustes</string>
     <string name="drawer_item_uploads_list">Xubes </string>
-	<string name="drawer_close">Zarrar</string>
+    <string name="drawer_close">Zarrar</string>
     <string name="drawer_open">Abrir</string>
     <string name="prefs_category_general">Xeneral</string>
     <string name="prefs_category_more">Más</string>
@@ -299,7 +299,6 @@
     <string name="preview_image_error_unknown_format">Nun pue amosase esta imaxe</string>
 
     <string name="error__upload__local_file_not_copied">Nun se pudo copiar %1$s al ficheru llocal %2$s</string>
-    <string name="prefs_instant_upload_path_title">Camín de xubida</string>
     <string name="share_link_no_support_share_api">Sentímoslo, la compartición nun ta activada nel to sirvidor. Por favor contauta col to alministrador</string>
 	<string name="share_link_file_no_exist">Nun pue compartise. Por favor, comprueba si\'l ficheru esiste</string>
 	<string name="share_link_file_error">Hebo un fallu mientres s\'intentaba compartir esti ficheru o carpeta</string>
@@ -368,8 +367,7 @@
     <string name="prefs_category_instant_uploading">Xubes nel intre</string>
     <string name="prefs_category_details">Detalles</string>
 
-	<string name="prefs_instant_video_upload_path_title">Xubi camín de videu</string>
-    <string name="sync_folder_failed_content">La sincronización de la carpeta %1$s nun pudo completase</string>
+	<string name="sync_folder_failed_content">La sincronización de la carpeta %1$s nun pudo completase</string>
 
 	<string name="shared_subject_header">compartíu</string>
 	<string name="with_you_subject_header">contigo</string>

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

@@ -21,7 +21,7 @@
     <string name="drawer_item_all_files">Всички файлове</string>
     <string name="drawer_item_settings">Настройки</string>
     <string name="drawer_item_uploads_list">Качено</string>
-	<string name="drawer_close">Затвори</string>
+    <string name="drawer_close">Затвори</string>
     <string name="drawer_open">Отвори</string>
     <string name="prefs_category_general">Общи</string>
     <string name="prefs_category_more">Още</string>
@@ -293,7 +293,6 @@
     <string name="preview_image_error_unknown_format">Изображението не може да бъде показано</string>
 
     <string name="error__upload__local_file_not_copied">%1$s не може да бъде копиран в локалната папка %2$s</string>
-    <string name="prefs_instant_upload_path_title">Път за качване</string>
     <string name="share_link_no_support_share_api">За съжаление споделянето не е включено на сървъра ви. 
 Моля, свържете се с администратора.</string>
 	<string name="share_link_file_no_exist">Неуспешен опит за споделяне. Моля, провери дали файла съществува.</string>

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

@@ -21,7 +21,7 @@
     <string name="drawer_item_all_files">Tots els fitxers</string>
     <string name="drawer_item_settings">Configuració</string>
     <string name="drawer_item_uploads_list">Fitxers carregats</string>
-	<string name="drawer_close">Tanca</string>
+    <string name="drawer_close">Tanca</string>
     <string name="drawer_open">Obre</string>
     <string name="prefs_category_general">General</string>
     <string name="prefs_category_more">Més</string>

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

@@ -23,6 +23,7 @@
     <string name="drawer_item_on_device">Na přístroji</string>
     <string name="drawer_item_settings">Nastavení</string>
     <string name="drawer_item_uploads_list">Nahrání</string>
+    <string name="drawer_quota">%1$s z %2$s použito</string>
 	<string name="drawer_close">Zavřít</string>
     <string name="drawer_open">Otevřít</string>
     <string name="prefs_category_general">Obecné</string>
@@ -57,6 +58,7 @@
     <string name="sync_string_files">Soubory</string>
     <string name="setup_btn_connect">Připojit</string>
     <string name="uploader_btn_upload_text">Nahrát</string>
+    <string name="uploader_btn_uploadTextSnippet_text">Vytvořit textový soubor</string>
     <string name="uploader_top_message">Vybrat adresář k nahrávání</string>
     <string name="uploader_wrn_no_account_title">Nenalezen žádný účet</string>
     <string name="uploader_wrn_no_account_text">Na tomto přístroji nejsou žádné %1$s účty. Nejdříve prosím zadejte účet.</string>
@@ -302,7 +304,7 @@
     <string name="preview_image_error_unknown_format">Obrázek nelze zobrazit</string>
 
     <string name="error__upload__local_file_not_copied">%1$s nelze zkopírovat do místního adresáře %2$s</string>
-    <string name="prefs_instant_upload_path_title">Cesta pro nahrání</string>
+    <string name="prefs_instant_upload_path_title">Složka pro okamžité nahrání</string>
     <string name="prefs_instant_upload_path_use_subfolders_title">Používat podadresáře</string>
     <string name="prefs_instant_upload_path_use_subfolders_summary">Ukládat v podadresářích podle roku a měsíce</string>
 
@@ -376,7 +378,7 @@ správce systému.</string>
     <string name="prefs_category_instant_uploading">Okamžitá odesílání</string>
     <string name="prefs_category_details">Podrobnosti</string>
 
-	<string name="prefs_instant_video_upload_path_title">Cesta pro nahrání videí</string>
+	<string name="prefs_instant_video_upload_path_title">Složka pro okamžité nahrání videa</string>
     <string name="sync_folder_failed_content">Synchronizaci adresáře %1$s nelze dokončit</string>
 
 	<string name="shared_subject_header">sdílené</string>
@@ -456,4 +458,11 @@ správce systému.</string>
     <string name="local_file_not_found_toast">Soubor nebyl nalezen v místním souborovém systému</string>
     <string name="confirmation_remove_files_alert">Opravdu chcete odstranit vybrané položky?</string>
     <string name="confirmation_remove_folders_alert">Opravdu chcete odstranit vybrané položky a jejich obsah?</string>
-    </resources>
+    <string name="actionbar_search">Hledat</string>
+    <plurals name="items_selected_count">
+        <item quantity="one">vybráno %d</item>
+        <item quantity="few">vybráno %d</item>
+        <item quantity="other">vybráno %d</item>
+    </plurals>
+
+</resources>

+ 11 - 8
res/values-de-rDE/strings.xml

@@ -23,6 +23,7 @@
     <string name="drawer_item_on_device">Auf dem Gerät</string>
     <string name="drawer_item_settings">Einstellungen</string>
     <string name="drawer_item_uploads_list">Uploads</string>
+    <string name="drawer_quota">%1$s von %2$s verwendet</string>
 	<string name="drawer_close">Schließen</string>
     <string name="drawer_open">Öffnen</string>
     <string name="prefs_category_general">Allgemein</string>
@@ -57,6 +58,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_btn_uploadTextSnippet_text">Erstelle Textdatei</string>
     <string name="uploader_top_message">Hochladeordner 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>
@@ -72,7 +74,7 @@
     <string name="file_list_seconds_ago">Gerade eben</string>
     <string name="file_list_empty">Alles leer. Laden Sie etwas hoch!</string>
     <string name="file_list_loading">Lade…</string>
-    <string name="file_list_no_app_for_file_type">Es wurde keine App für die Datei gefunden!</string>
+    <string name="file_list_no_app_for_file_type">Es wurde keine App für diesen Dateityp gefunden!</string>
     <string name="local_file_list_empty">Es befinden sich keine Dateien in diesem Ordner.</string>
     <string name="upload_list_empty">Keine Uploads verfügbar</string>
     <string name="file_list_folder">Ordner</string>
@@ -106,7 +108,7 @@
     <string name="change_password">Passwort ändern</string>
     <string name="delete_account">Benutzerkonto löschen</string>
     <string name="delete_account_warning">Das Konto %s löschen?\n\nDas Löschen kann nicht rückgängig gemacht werden.</string>
-    <string name="create_account">Account erstellen</string>
+    <string name="create_account">Konto erstellen</string>
     <string name="upload_chooser_title">Dateien hochladen von...</string>
     <string name="uploader_info_dirname">Ordnername</string>
     <string name="uploader_upload_in_progress_ticker">Hochladen...</string>
@@ -177,9 +179,9 @@
     <string name="media_state_playing">%1$s (abspielend)</string>
     <string name="media_state_loading">%1$s (lädt)</string>
     <string name="media_event_done">%1$s Wiedergabe beendet</string>
-    <string name="media_err_nothing_to_play">Keine Mediadatei gefunden</string>
+    <string name="media_err_nothing_to_play">Keine Mediendatei gefunden</string>
     <string name="media_err_no_account">Kein Account angegeben</string>
-    <string name="media_err_not_in_owncloud">Datei nicht in einem gültigen Account</string>
+    <string name="media_err_not_in_owncloud">Datei ist nicht in einem gültigen Account</string>
     <string name="media_err_unsupported">Nicht unterstützter Media-codec</string>
     <string name="media_err_io">Mediendatei konnte nicht gelesen werden</string>
     <string name="media_err_malformed">Mediendatei nicht korrekt kodiert</string>
@@ -228,7 +230,7 @@
     <string name="auth_account_does_not_exist">Das Benutzerkonto ist bis jetzt noch nicht auf dem Gerät vorhanden</string>
     
     <string name="favorite">Als Offline verfügbar markieren</string>
-    <string name="unfavorite">Offline verfügbar Markierung entfernen</string>
+    <string name="unfavorite">Markierung Offline verfügbar entfernen</string>
     <string name="common_rename">Umbenennen</string>
     <string name="common_remove">Löschen</string>
     <string name="confirmation_remove_file_alert">Möchten Sie %1$s wirklich löschen?</string>
@@ -303,7 +305,7 @@
     <string name="preview_image_error_unknown_format">Dieses Bild kann nicht angezeigt werden</string>
 
     <string name="error__upload__local_file_not_copied">%1$s konnte nicht in den lokalen %2$s Ordner kopiert werden</string>
-    <string name="prefs_instant_upload_path_title">Upload Pfad</string>
+    <string name="prefs_instant_upload_path_title">Pfad zum sofortigen Bilder-Upload</string>
     <string name="prefs_instant_upload_path_use_subfolders_title">Verwende Unterordner</string>
     <string name="prefs_instant_upload_path_use_subfolders_summary">Speichere in Unterordnern basierend auf Jahr und Monat</string>
 
@@ -377,14 +379,14 @@
     <string name="prefs_category_instant_uploading">Sofortiges Hochladen</string>
     <string name="prefs_category_details">Details</string>
 
-	<string name="prefs_instant_video_upload_path_title">Pfad zum Hochladen von Videos</string>
+	<string name="prefs_instant_video_upload_path_title">Pfad zum sofortigen Video-Upload</string>
     <string name="sync_folder_failed_content">Bei der Synchronisation konnte %1$s Ordner nicht fertig gestellt werden</string>
 
 	<string name="shared_subject_header">geteilt</string>
 	<string name="with_you_subject_header">Mit Ihnen</string>
     
 	<string name="subject_user_shared_with_you">%1$s hat \"%2$s\" mit Ihnen geteilt</string>
-    <string name="subject_shared_with_you">\"%1$s\" wurde mit dir geteilt</string>
+    <string name="subject_shared_with_you">\"%1$s\" wurde mit Ihnen geteilt</string>
 
     <string name="auth_refresh_button">Verbindung aktualisieren</string>
     <string name="auth_host_address">Serveradresse</string>
@@ -457,6 +459,7 @@
     <string name="local_file_not_found_toast">Die Datei wurde im lokalen Dateisystem nicht gefunden</string>
     <string name="confirmation_remove_files_alert">Wollen Sie die ausgewählten Einträge wirklich löschen?</string>
     <string name="confirmation_remove_folders_alert">Wollen Sie die ausgewählten Einträge und deren Inhalte wirklich löschen?</string>
+    <string name="actionbar_search">Suche</string>
     <plurals name="items_selected_count">
         <item quantity="one">%d ausgewählt</item>
         <item quantity="other">%d ausgewählt</item>

+ 25 - 22
res/values-de/strings.xml

@@ -23,6 +23,7 @@
     <string name="drawer_item_on_device">Auf dem Gerät</string>
     <string name="drawer_item_settings">Einstellungen</string>
     <string name="drawer_item_uploads_list">Uploads</string>
+    <string name="drawer_quota">%1$s von %2$s verwendet</string>
 	<string name="drawer_close">Schließen</string>
     <string name="drawer_open">Öffnen</string>
     <string name="prefs_category_general">Allgemein</string>
@@ -36,7 +37,7 @@
     <string name="prefs_instant_video_upload_summary">Lade Videos von der Kamera sofort hoch</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_title_history">Log Historie</string>
+    <string name="prefs_log_title_history">Protokollierungs-Historie</string>
     <string name="prefs_log_summary_history">Dies zeigt die gespeicherten Protokollierungen</string>
     <string name="prefs_log_delete_history_button">Verlauf löschen</string>
     <string name="prefs_help">Hilfe</string>
@@ -57,6 +58,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_btn_uploadTextSnippet_text">Erstelle Textdatei</string>
     <string name="uploader_top_message">Hochladeordner 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 deinem Gerät eingerichtet. Bitte erstelle zuerst ein Konto.</string>
@@ -74,7 +76,7 @@
     <string name="file_list_loading">Lade…</string>
     <string name="file_list_no_app_for_file_type">Es wurde keine App für diesen Dateityp gefunden!</string>
     <string name="local_file_list_empty">Es befinden sich keine Dateien in diesem Ordner.</string>
-    <string name="upload_list_empty">Es</string>
+    <string name="upload_list_empty">Keine Uploads verfügbar.</string>
     <string name="file_list_folder">Ordner</string>
     <string name="file_list_folders">Ordner</string>
     <string name="file_list_file">Datei</string>
@@ -93,7 +95,7 @@
     <string name="common_no">Nein</string>
     <string name="common_ok">OK</string>
     <string name="common_remove_upload">Upload entfernen</string>
-    <string name="common_retry_upload">hochladen erneut versuchen</string>
+    <string name="common_retry_upload">Hochladen erneut versuchen</string>
     <string name="common_cancel_sync">Synchronisation abbrechen</string>
     <string name="common_cancel">Abbrechen</string>
     <string name="common_back">Zurück</string>
@@ -143,7 +145,7 @@
     <string name="downloader_download_failed_content">Herunterladen von %1$s konnte nicht abgeschlossen werden</string>
     <string name="downloader_not_downloaded_yet">Noch nicht Heruntergeladen</string>
     <string name="downloader_download_failed_credentials_error">Herunterladen fehlgeschlagen, erneute Anmeldung erforderlich</string>
-    <string name="common_choose_account">Account auswählen</string>
+    <string name="common_choose_account">Konto auswählen</string>
     <string name="sync_fail_ticker">Synchronisation fehlgeschlagen</string>
     <string name="sync_fail_ticker_unauthorized">Synchronisation fehlgeschlagen, erneute Anmeldung erforderlich.</string>
     <string name="sync_fail_content">Synchronisation von %1$s konnte nicht abgeschlossen werden</string>
@@ -166,7 +168,7 @@
     
     <string name="pass_code_configure_your_pass_code">Bitte PIN eingeben</string>
     <string name="pass_code_configure_your_pass_code_explanation">Die PIN wird jedes mal beim Start der App abgefragt</string>
-    <string name="pass_code_reenter_your_pass_code">Bitte den PIN nochmals eingeben</string>
+    <string name="pass_code_reenter_your_pass_code">Bitte Deine PIN nochmals eingeben</string>
     <string name="pass_code_remove_your_pass_code">PIN entfernen</string>
     <string name="pass_code_mismatch">Die PINs stimmen nicht überein</string>
     <string name="pass_code_wrong">PIN nicht korrekt</string>
@@ -174,24 +176,24 @@
     <string name="pass_code_stored">PIN gespeichert</string>
     
     <string name="media_notif_ticker">%1$s Musik Player</string>
-    <string name="media_state_playing">%1$s (playing)</string>
-    <string name="media_state_loading">%1$s (loading)</string>
+    <string name="media_state_playing">%1$s (wird abgespielt)</string>
+    <string name="media_state_loading">%1$s (wird geladen)</string>
     <string name="media_event_done">%1$s Beendet</string>
-    <string name="media_err_nothing_to_play">Keine Meidendatei gefunden</string>
-    <string name="media_err_no_account">Kein Konto angeben</string>
-    <string name="media_err_not_in_owncloud">Datei ist nicht in einem gültigen Account</string>
-    <string name="media_err_unsupported">Codierung wird nicht unterstützt</string>
-    <string name="media_err_io">Fehler beim Lesen der Datei</string>
+    <string name="media_err_nothing_to_play">Keine Mediendatei gefunden</string>
+    <string name="media_err_no_account">Kein Konto angegeben</string>
+    <string name="media_err_not_in_owncloud">Datei ist nicht in einem gültigen Konto</string>
+    <string name="media_err_unsupported">Medien-Codec wird nicht unterstützt</string>
+    <string name="media_err_io">Mediendatei konnte nicht gelesen werden</string>
     <string name="media_err_malformed">Mediendatei nicht korrekt encodiert</string>
     <string name="media_err_timeout">Wartezeit beim Abspielversuch abgelaufen</string>
     <string name="media_err_invalid_progressive_playback">Mediendatei konnte nicht gestreamt werden</string>
     <string name="media_err_unknown">Diese Mediendatei konnte nicht mit dem Standardplayer geöffnet werden</string>
     <string name="media_err_security_ex">Sicherheitsfehler beim Versuch %1$s zu spielen</string>
-    <string name="media_err_io_ex">Eingabefehler beim Versuch %1$s zu spielen</string>
+    <string name="media_err_io_ex">Eingabefehler beim Versuch %1$s wiederzugeben</string>
     <string name="media_err_unexpected">Ein unerwarteter Fehler ist aufgetreten beim Versuch %1$s abzuspielen</string>
-    <string name="media_rewind_description">Zurückspielen Knopf</string>
-    <string name="media_play_pause_description">Play-/Pause Knopf</string>
-    <string name="media_forward_description">Vorspulen Knopf</string>
+    <string name="media_rewind_description">Rückspulknopf</string>
+    <string name="media_play_pause_description">Wiedergabe-/Pause Knopf</string>
+    <string name="media_forward_description">Vorspul Knopf</string>
 
 	<string name="auth_getting_authorization">Genehmigung bekommen ...</string>
 	<string name="auth_trying_to_login">Der Versuch, sich anzumelden ...</string>
@@ -212,7 +214,7 @@
 	<string name="auth_bad_oc_version_title">Unbekannte Server-Version</string>
 	<string name="auth_wrong_connection_title">Verbindung konnte nicht aufgebaut werden</string>
 	<string name="auth_secure_connection">Sichere Verbindung hergestellt</string>
-	<string name="auth_unauthorized">Benutzername oder Passwort stimmen nicht!</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 gib die Adresse des Servers erneut ein</string>
@@ -231,7 +233,7 @@
     <string name="unfavorite">Offline verfügbar Markierung entfernen</string>
     <string name="common_rename">Umbenennen</string>
     <string name="common_remove">Löschen</string>
-    <string name="confirmation_remove_file_alert">Möchten Sie %1$s wirklich löschen?</string>
+    <string name="confirmation_remove_file_alert">Möchtest Du %1$s wirklich löschen?</string>
     <string name="confirmation_remove_folder_alert">Soll %1$s und dessen Inhalt entfernt werden?</string>
     <string name="confirmation_remove_local">Nur lokal</string>
     <string name="remove_success_msg">Erfolgreich gelöscht</string>
@@ -303,7 +305,7 @@
     <string name="preview_image_error_unknown_format">Dieses Bild kann nicht angezeigt werden</string>
 
     <string name="error__upload__local_file_not_copied">%1$s konnte nicht in den lokalen %2$s Ordner kopiert werden</string>
-    <string name="prefs_instant_upload_path_title">Speicherpfad</string>
+    <string name="prefs_instant_upload_path_title">Sofort-Upload-Ordner</string>
     <string name="prefs_instant_upload_path_use_subfolders_title">Unterordner benutzen</string>
     <string name="prefs_instant_upload_path_use_subfolders_summary">In Unterordnern speichern, basierend auf Jahr und Monat</string>
 
@@ -377,7 +379,7 @@
     <string name="prefs_category_instant_uploading">sofort hochladen</string>
     <string name="prefs_category_details">Details</string>
 
-	<string name="prefs_instant_video_upload_path_title">Video Speicherpfad wählen</string>
+	<string name="prefs_instant_video_upload_path_title">Sofortupload-Video-Ordner</string>
     <string name="sync_folder_failed_content">Bei der Synchronisation konnte %1$s Ordner nicht fertig gestellt werden</string>
 
 	<string name="shared_subject_header">geteilt</string>
@@ -455,8 +457,9 @@
 
     <string name="permission_storage_access">Sie haben nicht die erforderlichen Rechte, um Dateien hoch- oder herunterzuladen.</string>
     <string name="local_file_not_found_toast">Die Datei wurde im lokalen Dateisystem nicht gefunden</string>
-    <string name="confirmation_remove_files_alert">Wollen Sie die ausgewählten Einträge wirklich löschen?</string>
-    <string name="confirmation_remove_folders_alert">Wollen Sie die ausgewählten Einträge und deren Inhalte wirklich löschen?</string>
+    <string name="confirmation_remove_files_alert">Willst Du die ausgewählten Einträge wirklich löschen?</string>
+    <string name="confirmation_remove_folders_alert">Willst Du die ausgewählten Einträge und deren Inhalte wirklich löschen?</string>
+    <string name="actionbar_search">Suche</string>
     <plurals name="items_selected_count">
         <item quantity="one">%d ausgewählt</item>
         <item quantity="other">%d ausgewählt</item>

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

@@ -21,7 +21,7 @@
     <string name="drawer_item_all_files">Όλα τα αρχεία</string>
     <string name="drawer_item_settings">Ρυθμίσεις</string>
     <string name="drawer_item_uploads_list">Μεταφορτώσεις</string>
-	<string name="drawer_close">Κλείσιμο</string>
+    <string name="drawer_close">Κλείσιμο</string>
     <string name="drawer_open">Άνοιγμα</string>
     <string name="prefs_category_general">Γενικά</string>
     <string name="prefs_category_more">Περισσότερα</string>
@@ -276,7 +276,6 @@
     <string name="preview_image_error_unknown_format">Αυτή η εικόνα δεν μπορεί να προβληθεί</string>
 
     <string name="error__upload__local_file_not_copied">Το %1$s δεν μπόρεσε να αντιγραφεί στον τοπικό φάκελο %2$s</string>
-    <string name="prefs_instant_upload_path_title">Διαδρομή Μεταφόρτωσης</string>
     <string name="share_link_no_support_share_api">Λυπούμαστε, ο διαμοιρασμός δεν επιτρέπεται στο διακομιστή σας. Παρακαλούμε επικοινωνείστε με το
 		διαχειριστή σας.</string>
 	<string name="share_link_file_no_exist">Αδύνατη η κοινή χρήση. Παρακαλώ ελέγξτε αν ο φάκελος υπάρχει</string>
@@ -343,8 +342,7 @@
     <string name="prefs_category_instant_uploading">Στιγμιαίες μεταφορτώσεις</string>
     <string name="prefs_category_details">Λεπτομέρειες</string>
 
-	<string name="prefs_instant_video_upload_path_title">Διαδρομή μεταφόρτωσης Βίντεο</string>
-    <string name="sync_folder_failed_content">Ο συγχρονισμός του φακέλου %1$s δεν μπόρεσε να ολοκληρωθεί</string>
+	<string name="sync_folder_failed_content">Ο συγχρονισμός του φακέλου %1$s δεν μπόρεσε να ολοκληρωθεί</string>
 
 	<string name="shared_subject_header">διαμοιρασμένα</string>
 	<string name="with_you_subject_header">με εσάς</string>

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

@@ -23,7 +23,7 @@
     <string name="drawer_item_on_device">On device</string>
     <string name="drawer_item_settings">Settings</string>
     <string name="drawer_item_uploads_list">Uploads</string>
-	<string name="drawer_close">Close</string>
+    <string name="drawer_close">Close</string>
     <string name="drawer_open">Open</string>
     <string name="prefs_category_general">General</string>
     <string name="prefs_category_more">More</string>
@@ -303,7 +303,7 @@
     <string name="preview_image_error_unknown_format">This image cannot be shown</string>
 
     <string name="error__upload__local_file_not_copied">%1$s could not be copied to %2$s local folder</string>
-    <string name="prefs_instant_upload_path_title">Upload path</string>
+    <string name="prefs_instant_upload_path_title">Instant upload folder</string>
     <string name="prefs_instant_upload_path_use_subfolders_title">Use subfolders</string>
     <string name="prefs_instant_upload_path_use_subfolders_summary">Store in subfolders based on year and month</string>
 
@@ -377,7 +377,7 @@
     <string name="prefs_category_instant_uploading">Instant uploads</string>
     <string name="prefs_category_details">Details</string>
 
-	<string name="prefs_instant_video_upload_path_title">Upload video path</string>
+	<string name="prefs_instant_video_upload_path_title">Instant upload video folder</string>
     <string name="sync_folder_failed_content">Synchronisation of %1$s folder could not be completed</string>
 
 	<string name="shared_subject_header">shared</string>
@@ -457,6 +457,7 @@
     <string name="local_file_not_found_toast">The file was not found in the local file system</string>
     <string name="confirmation_remove_files_alert">Do you really want to remove the selected items?</string>
     <string name="confirmation_remove_folders_alert">Do you really want to remove the selected items and their contents?</string>
+    <string name="actionbar_search">Search</string>
     <plurals name="items_selected_count">
         <item quantity="one">%d selected</item>
         <item quantity="other">%d selected</item>

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

@@ -23,7 +23,7 @@
     <string name="drawer_item_on_device">En el dispositivo</string>
     <string name="drawer_item_settings">Ajustes</string>
     <string name="drawer_item_uploads_list">Subidas</string>
-	<string name="drawer_close">Cerrar</string>
+    <string name="drawer_close">Cerrar</string>
     <string name="drawer_open">Abrir</string>
     <string name="prefs_category_general">General</string>
     <string name="prefs_category_more">Más</string>
@@ -57,6 +57,7 @@
     <string name="sync_string_files">Archivos</string>
     <string name="setup_btn_connect">Conectar</string>
     <string name="uploader_btn_upload_text">Subir</string>
+    <string name="uploader_btn_uploadTextSnippet_text">Crear archivo de texto</string>
     <string name="uploader_top_message">Elige carpeta de subida</string>
     <string name="uploader_wrn_no_account_title">No se encontró la cuenta</string>
     <string name="uploader_wrn_no_account_text">No hay %1$s cuentas en tu dispositivo. Por favor añade una cuenta primero.</string>
@@ -303,7 +304,7 @@
     <string name="preview_image_error_unknown_format">No se puede mostrar la imagen</string>
 
     <string name="error__upload__local_file_not_copied">%1$s se pudo copiar a la carpeta local %2$s</string>
-    <string name="prefs_instant_upload_path_title">Ruta de subida</string>
+    <string name="prefs_instant_upload_path_title">Carpeta para subida instantánea</string>
     <string name="prefs_instant_upload_path_use_subfolders_title">Usar subcarpeta</string>
     <string name="prefs_instant_upload_path_use_subfolders_summary">Archivar en subcarpetas basadas en año y mes.</string>
 
@@ -377,7 +378,7 @@
     <string name="prefs_category_instant_uploading">Subidas instantáneas</string>
     <string name="prefs_category_details">Detalles</string>
 
-	<string name="prefs_instant_video_upload_path_title">Ruta de subida de vídeo </string>
+	<string name="prefs_instant_video_upload_path_title">Carpeta para subida instantáneo de vídeos</string>
     <string name="sync_folder_failed_content">La sincronización de la carpeta %1$s no se pudo completar</string>
 
 	<string name="shared_subject_header">compartido</string>
@@ -456,6 +457,7 @@
     <string name="local_file_not_found_toast">El archivo no se encuentra en el servidor local de archivos.</string>
     <string name="confirmation_remove_files_alert">¿Está seguro de que quiere eliminar los elementos seleccionados?</string>
     <string name="confirmation_remove_folders_alert">¿Está sguro de que quiere eliminar los elementos seleccionados y sus contenidos?</string>
+    <string name="actionbar_search">Buscar</string>
     <plurals name="items_selected_count">
         <item quantity="one">%d seleccionado</item>
         <item quantity="other">%d seleccionados</item>

+ 1 - 1
res/values-et-rEE/strings.xml

@@ -21,7 +21,7 @@
     <string name="drawer_item_all_files">Kõik failid</string>
     <string name="drawer_item_settings">Seaded</string>
     <string name="drawer_item_uploads_list">Üleslaadimised</string>
-	<string name="drawer_close">Sulge</string>
+    <string name="drawer_close">Sulge</string>
     <string name="drawer_open">Ava</string>
     <string name="prefs_category_general">Üldine</string>
     <string name="prefs_category_more">Rohkem</string>

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

@@ -21,7 +21,7 @@
     <string name="drawer_item_all_files">Kaikki tiedostot</string>
     <string name="drawer_item_settings">Asetukset</string>
     <string name="drawer_item_uploads_list">Lataukset</string>
-	<string name="drawer_close">Sulje</string>
+    <string name="drawer_close">Sulje</string>
     <string name="drawer_open">Avaa</string>
     <string name="prefs_category_general">Yleiset</string>
     <string name="prefs_category_more">Enemmän</string>

+ 9 - 7
res/values-fr/strings.xml

@@ -13,7 +13,7 @@
     <string name="actionbar_see_details">Détails</string>
     <string name="actionbar_send_file">Envoyer</string>
     <string name="actionbar_sort">Trier</string>
-    <string name="actionbar_sort_title">Trier</string>
+    <string name="actionbar_sort_title">Trier par</string>
     <string-array name="actionbar_sortby">
     	<item>par ordre alphabétique</item>
     	<item>du plus récent au plus ancien</item>
@@ -22,20 +22,20 @@
     <string name="drawer_item_all_files">Tous les fichiers</string>
     <string name="drawer_item_on_device">Sur le périphérique</string>
     <string name="drawer_item_settings">Paramètres</string>
-    <string name="drawer_item_uploads_list">Chargements</string>
-	<string name="drawer_close">Fermer</string>
+    <string name="drawer_item_uploads_list">Téléversements</string>
+    <string name="drawer_close">Fermer</string>
     <string name="drawer_open">Ouvrir</string>
     <string name="prefs_category_general">Général</string>
     <string name="prefs_category_more">Plus</string>
     <string name="prefs_accounts">Comptes</string>
-    <string name="prefs_manage_accounts">Gestion des comptes utilisateur</string>
+    <string name="prefs_manage_accounts">Gestion des comptes</string>
     <string name="prefs_passcode">Code de sécurité</string>
     <string name="prefs_instant_upload">Téléversement immédiat des photos</string>
     <string name="prefs_instant_upload_summary">Téléverser immédiatement les photos prises par la caméra</string>
     <string name="prefs_instant_video_upload">Téléversement immédiat des vidéos</string>
     <string name="prefs_instant_video_upload_summary">Téléverser immédiatement les vidéos prises par la caméra</string>
     <string name="prefs_log_title">Activer la journalisation</string>
-    <string name="prefs_log_summary">Utilisé pour enregistrer les problèmes dans les logs</string>
+    <string name="prefs_log_summary">Utilisé pour la journalisation des problèmes</string>
     <string name="prefs_log_title_history">Historique de la journalisation</string>
     <string name="prefs_log_summary_history">Cela affiche les logs enregistrés</string>
     <string name="prefs_log_delete_history_button">Supprimer l\'historique</string>
@@ -58,6 +58,7 @@ Téléchargez-le ici : %2$s</string>
     <string name="sync_string_files">Fichiers</string>
     <string name="setup_btn_connect">Connecter</string>
     <string name="uploader_btn_upload_text">Téléverser</string>
+    <string name="uploader_btn_uploadTextSnippet_text">Créer un fichier texte</string>
     <string name="uploader_top_message">Choisir le dossier de téléversement</string>
     <string name="uploader_wrn_no_account_title">Aucun compte n\'a été trouvé</string>
     <string name="uploader_wrn_no_account_text">Aucun compte %1$s sur l\'appareil. Veuillez configurer un compte au préalable.</string>
@@ -308,7 +309,7 @@ Ci-dessous la liste des fichiers locaux, et les fichiers distants dans %5$s auxq
     <string name="preview_image_error_unknown_format">Cette image ne peut pas être affichée</string>
 
     <string name="error__upload__local_file_not_copied">%1$s n\'a pas pu être copié dans le dossier local %2$s</string>
-    <string name="prefs_instant_upload_path_title">Chemin du dossier de téléversement</string>
+    <string name="prefs_instant_upload_path_title">Téléversement immédiat du dossier</string>
     <string name="prefs_instant_upload_path_use_subfolders_title">Utiliser des sous-dossiers</string>
     <string name="prefs_instant_upload_path_use_subfolders_summary">Stocker dans des sous-dossiers basés sur années et mois</string>
 
@@ -381,7 +382,7 @@ Ci-dessous la liste des fichiers locaux, et les fichiers distants dans %5$s auxq
     <string name="prefs_category_instant_uploading">Téléversement immédiat</string>
     <string name="prefs_category_details">Détails</string>
 
-	<string name="prefs_instant_video_upload_path_title">Répertoire de téléversement des vidéos</string>
+	<string name="prefs_instant_video_upload_path_title">Téléversement immédiat du dossier vidéos</string>
     <string name="sync_folder_failed_content">La synchronisation du dossier %1$s n\'a pas pu être terminée</string>
 
 	<string name="shared_subject_header">a partagé</string>
@@ -461,6 +462,7 @@ Ci-dessous la liste des fichiers locaux, et les fichiers distants dans %5$s auxq
     <string name="local_file_not_found_toast">Le fichier n\'a pas été trouvé sur le système de fichier local</string>
     <string name="confirmation_remove_files_alert">Voulez-vous vraiment supprimer les objets sélectionnés?</string>
     <string name="confirmation_remove_folders_alert">Voulez-vous vraiment supprimer les objets sélectionnés et leurs contenus?</string>
+    <string name="actionbar_search">Rechercher</string>
     <plurals name="items_selected_count">
         <item quantity="one">%d sélectionné</item>
         <item quantity="other">%d sélectionnés</item>

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

@@ -21,7 +21,7 @@
     <string name="drawer_item_all_files">כל הקבצים</string>
     <string name="drawer_item_settings">הגדרות</string>
     <string name="drawer_item_uploads_list">העלאות</string>
-	<string name="drawer_close">סגירה</string>
+    <string name="drawer_close">סגירה</string>
     <string name="drawer_open">פתיחה</string>
     <string name="prefs_category_general">כללי</string>
     <string name="prefs_category_more">יותר</string>
@@ -299,7 +299,6 @@
     <string name="preview_image_error_unknown_format">תמונה זו לא ניתנת לצפייה</string>
 
     <string name="error__upload__local_file_not_copied">%1$s לא ניתן להעתקה לתיקייה מקומית %2$s</string>
-    <string name="prefs_instant_upload_path_title">נתיב העלאה</string>
     <string name="share_link_no_support_share_api">מצטערים, שיתוף אינו מורשה על השרת שלך. יש ליצור קשר עם
 ⇥⇥מנהל.</string>
 	<string name="share_link_file_no_exist">לא ניתן לשתף. יש לבדוק אם הקובץ קיים</string>
@@ -369,8 +368,7 @@
     <string name="prefs_category_instant_uploading">העלאות מיידיות</string>
     <string name="prefs_category_details">פרטים</string>
 
-	<string name="prefs_instant_video_upload_path_title">נתיב העלאת סרט</string>
-    <string name="sync_folder_failed_content">לא ניתן להשלים סנכרון של %1$s תיקיות</string>
+	<string name="sync_folder_failed_content">לא ניתן להשלים סנכרון של %1$s תיקיות</string>
 
 	<string name="shared_subject_header">משותף</string>
 	<string name="with_you_subject_header">אתך</string>

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

@@ -21,7 +21,7 @@
     <string name="drawer_item_all_files">Összes fájl</string>
     <string name="drawer_item_settings">Beállítások</string>
     <string name="drawer_item_uploads_list">Feltöltések</string>
-	<string name="drawer_close">Bezárás</string>
+    <string name="drawer_close">Bezárás</string>
     <string name="drawer_open">Megnyitás</string>
     <string name="prefs_category_general">Általános</string>
     <string name="prefs_category_more">Több</string>
@@ -299,7 +299,6 @@
     <string name="preview_image_error_unknown_format">Ez a kép nem jeleníthető meg</string>
 
     <string name="error__upload__local_file_not_copied">%1$s nem lehet másolni a %2$s helyi könyvtárba</string>
-    <string name="prefs_instant_upload_path_title">Feltöltési útvonal</string>
     <string name="prefs_instant_upload_path_use_subfolders_title">Alkönyvtárak használata</string>
     <string name="prefs_instant_upload_path_use_subfolders_summary">Évet és hónapot tartalmazó alkönyvtárakban tárolja</string>
 

+ 6 - 4
res/values-id/strings.xml

@@ -23,7 +23,7 @@
     <string name="drawer_item_on_device">Dalam perangkat</string>
     <string name="drawer_item_settings">Pengaturan</string>
     <string name="drawer_item_uploads_list">Unggah</string>
-	<string name="drawer_close">Tutup</string>
+    <string name="drawer_close">Tutup</string>
     <string name="drawer_open">Buka</string>
     <string name="prefs_category_general">Umum</string>
     <string name="prefs_category_more">Lainnya</string>
@@ -105,7 +105,7 @@
     <string name="about_title">Tentang</string>
     <string name="change_password">Ubah sandi</string>
     <string name="delete_account">Hapus akun</string>
-    <string name="delete_account_warning">Hapus akun %s?\\n\\nPenghapusan tidak bisa dipulihkan.</string>
+    <string name="delete_account_warning">Hapus akun %s?\n\nPenghapusan tidak bisa dipulihkan.</string>
     <string name="create_account">Buat akun</string>
     <string name="upload_chooser_title">Unggah dari...</string>
     <string name="uploader_info_dirname">Nama folder</string>
@@ -303,7 +303,7 @@
     <string name="preview_image_error_unknown_format">Gambar ini tidak dapat ditampilkan</string>
 
     <string name="error__upload__local_file_not_copied">%1$s tidak dapat disalin ke folder lokal %2$s</string>
-    <string name="prefs_instant_upload_path_title">Unggah path</string>
+    <string name="prefs_instant_upload_path_title">Folder unggah cepat</string>
     <string name="prefs_instant_upload_path_use_subfolders_title">Gunakan subfolder</string>
     <string name="prefs_instant_upload_path_use_subfolders_summary">Simpan dalam subfolder berdasarkan tahun dan bulan</string>
 
@@ -314,6 +314,7 @@
 	<string name="unshare_link_file_no_exist">Tidak dapat menghapus berbagi. Mohon periksa apakah berkas ada</string>
 	<string name="unshare_link_file_error">Terjadi kesalahan saat mencoba menghapus berbagi berkas dan folder ini</string>
     <string name="update_link_file_no_exist">Tidak dapat memperbarui. Cek apabila berkas ada</string>
+    <string name="update_link_file_error">Terjadi kesalahan saat mencoba untuk memperbarui pembagian</string>
     <string name="share_link_password_title">Masukkan sandi</string>
     <string name="share_link_empty_password">Anda harus memasukkan sandi</string>
 
@@ -376,7 +377,7 @@
     <string name="prefs_category_instant_uploading">Unggah cepat</string>
     <string name="prefs_category_details">Rincian</string>
 
-	<string name="prefs_instant_video_upload_path_title">Unggah path video</string>
+	<string name="prefs_instant_video_upload_path_title">Folder unggah video cepat</string>
     <string name="sync_folder_failed_content">Sinkronisasi folder %1$s tidak dapat diselesaikan</string>
 
 	<string name="shared_subject_header">dibagikan</string>
@@ -456,6 +457,7 @@
     <string name="local_file_not_found_toast">Berkas tidak ditemukan di sistem berkas lokal</string>
     <string name="confirmation_remove_files_alert">Apakah Anda yakin ingin menghapus item terpilih?</string>
     <string name="confirmation_remove_folders_alert">Apakah Anda yakin ingin menghapus item terpilih dan isinya?</string>
+    <string name="actionbar_search">Cari</string>
     <plurals name="items_selected_count">
         <item quantity="other">%d dipilih</item>
     </plurals>

+ 35 - 6
res/values-is/strings.xml

@@ -23,7 +23,7 @@
     <string name="drawer_item_on_device">á tækinu</string>
     <string name="drawer_item_settings">Stillingar</string>
     <string name="drawer_item_uploads_list">Innsendingar</string>
-	<string name="drawer_close">Loka</string>
+    <string name="drawer_close">Loka</string>
     <string name="drawer_open">Opna</string>
     <string name="prefs_category_general">Almennt</string>
     <string name="prefs_category_more">Meira</string>
@@ -57,11 +57,14 @@
     <string name="sync_string_files">Skrár</string>
     <string name="setup_btn_connect">Tengjast</string>
     <string name="uploader_btn_upload_text">Senda inn</string>
+    <string name="uploader_btn_uploadTextSnippet_text">Búa til textaskrá</string>
+    <string name="uploader_top_message">Veldu innsendingarmöppu</string>
     <string name="uploader_wrn_no_account_title">Enginn notandaaðgangur fannst</string>
     <string name="uploader_wrn_no_account_text">Það eru engir %1$s aðgangar á tækinu þínu. Settu fyrst upp notandaaðgang.</string>
     <string name="uploader_wrn_no_account_setup_btn_text">Uppsetning</string>
     <string name="uploader_wrn_no_account_quit_btn_text">Hætta</string>
     <string name="uploader_error_title_no_file_to_upload">Engin skrá til að senda inn</string>
+    <string name="uploader_error_title_file_cannot_be_uploaded">Ekki tókst að senda inn skrá</string>
     <string name="file_list_seconds_ago">sek.</string>
     <string name="file_list_empty">Ekkert hér. Settu eitthvað inn!</string>
     <string name="file_list_loading">Hleð inn…</string>
@@ -84,6 +87,8 @@
     <string name="common_yes">Já</string>
     <string name="common_no">Nei</string>
     <string name="common_ok">Í lagi</string>
+    <string name="common_remove_upload">Fjarlægja innsendingu</string>
+    <string name="common_retry_upload">Reyna aftur að senda inn</string>
     <string name="common_cancel_sync">Hætta við samstillingu</string>
     <string name="common_cancel">Hætta við</string>
     <string name="common_back">Til baka</string>
@@ -105,14 +110,17 @@
     <string name="uploader_upload_failed_ticker">Innsending mistókst</string>
     <string name="uploader_upload_failed_content_single">Ekki var hægt að ljúka innsendingu á %1$s</string>
     <string name="uploader_upload_failed_credentials_error">Innsending mistókst, þú verður að skrá þig inn aftur</string>
+    <string name="uploads_view_title">Innsendingar</string>
     <string name="uploads_view_group_current_uploads">Núverandi</string>
     <string name="uploads_view_group_finished_uploads">Hlaðið inn</string>
     <string name="uploads_view_upload_status_succeeded">Lokið</string>
     <string name="uploads_view_upload_status_cancelled">Hætt við</string>
     <string name="uploads_view_upload_status_paused">Í bið</string>
     <string name="uploads_view_upload_status_failed_connection_error">Villa við tengingu</string>
+    <string name="uploads_view_upload_status_failed_credentials_error">Villa í auðkennum</string>
     <string name="uploads_view_upload_status_failed_folder_error">Villa í möppu</string>
     <string name="uploads_view_upload_status_failed_file_error">Villa í skrá</string>
+    <string name="uploads_view_upload_status_failed_permission_error">Villa í heimildum</string>
     <string name="uploads_view_upload_status_conflict">Árekstur</string>
     <string name="uploads_view_upload_status_unknown_fail">Óþekkt villa</string>
     <string name="uploads_view_upload_status_waiting_for_wifi">Bíð eftir þráðlausri tengingu</string>
@@ -278,8 +286,10 @@
     <string name="preview_image_error_unknown_format">Ekki er hægt að birta myndina</string>
 
     <string name="error__upload__local_file_not_copied">%1$s var ekki hægt að afrita í staðværu %2$s möppuna</string>
-    <string name="prefs_instant_upload_path_title">Innsendingarslóð</string>
-    <string name="share_link_no_support_share_api">Því miður, deiling gagna er ekki virk á þjóninum. Hafðu samband við
+    <string name="prefs_instant_upload_path_use_subfolders_title">Nota undirmöppur</string>
+    <string name="prefs_instant_upload_path_use_subfolders_summary">Geyma í undirmöppum byggðum á ári og mánuðum</string>
+
+	<string name="share_link_no_support_share_api">Því miður, deiling gagna er ekki virk á þjóninum. Hafðu samband við
 		kerfisstjóra.</string>
 	<string name="share_link_file_no_exist">Get ekki deilt. Athugaðu hvort skráin sé til</string>
 	<string name="share_link_file_error">Villa kom upp við að reyna að deila þessari skrá eða möppu</string>
@@ -294,6 +304,9 @@
 
     <string name="copy_link">Afrita tengil</string>
     <string name="clipboard_text_copied">Afritað á klippispjaldið</string>
+    <string name="clipboard_uxexpected_error">Óvænt villa kom upp við afritun á klippispjald</string>
+    <string name="clipboard_label">Texti afritaður úr %1$s</string>
+
     <string name="error_cant_bind_to_operations_service">Alvarleg villa: get ekki framkvæmt aðgerðir</string>
 
     <string name="network_error_socket_exception">Villa kom upp við að tengjast við þjóninn.</string>
@@ -312,6 +325,7 @@
 
     <string name="prefs_category_accounts">Notandaaðgangar</string>
     <string name="prefs_add_account">Bæta við notandaaðgangi</string>
+    <string name="drawer_manage_accounts">Sýsla með notandaaðganga</string>
     <string name="auth_redirect_non_secure_connection_title">Öruggri tengingu er endurbeint í gegnum óörugga leið.</string>
 
 	<string name="actionbar_logger">Annálar</string>
@@ -340,8 +354,7 @@
     <string name="prefs_category_instant_uploading">Beinar innsendingar</string>
     <string name="prefs_category_details">Nánar</string>
 
-	<string name="prefs_instant_video_upload_path_title">Innsendingarslóð myndskeiða</string>
-    <string name="sync_folder_failed_content">Ekki var hægt að ljúka samstillingu á %1$s möppunni</string>
+	<string name="sync_folder_failed_content">Ekki var hægt að ljúka samstillingu á %1$s möppunni</string>
 
 	<string name="shared_subject_header">deilt</string>
 	<string name="with_you_subject_header">með þér</string>
@@ -367,6 +380,8 @@
     <string name="prefs_instant_behaviour_title">Upprunaleg skrá verður...</string>
     <string name="upload_copy_files">Afrita skrá</string>
     <string name="upload_move_files">Færa skrá</string>
+    <string name="select_all">Velja allt</string>
+
     <string name="pref_behaviour_entries_keep_file">áfram í upprunalegri möppu</string>
     <string name="pref_behaviour_entries_move">færð í forritsmöppu</string>
 
@@ -401,6 +416,11 @@
     <string name="edit_share_unshare">Hætta deilingu</string>
     <string name="edit_share_done">lokið</string>
 
+    <string name="action_retry_uploads">Mistókst að reyna aftur</string>
+    <string name="action_clear_failed_uploads">Hreinsun mistókst</string>
+    <string name="action_clear_successful_uploads">Hreinsun tókst</string>
+    <string name="action_clear_finished_uploads">Hreinsa allt klárað</string>
+
     <string name="action_switch_grid_view">Reitir</string>
     <string name="action_switch_list_view">Listi</string>
 
@@ -409,4 +429,13 @@
     <string name="manage_space_error">Ekki tókst að eyða öllum skrám.</string>
 
     <string name="permission_storage_access">Aukinna heimilda er krafist til að geta sent inn og sótt skrár.</string>
-    </resources>
+    <string name="local_file_not_found_toast">Skráin fannst ekki á staðværu skráakerfi</string>
+    <string name="confirmation_remove_files_alert">Ertu viss um að þú viljir fjarlægja valin atriði?</string>
+    <string name="confirmation_remove_folders_alert">Ertu viss um að þú viljir fjarlægja valin atriði og innihald þeirra?</string>
+    <string name="actionbar_search">Leita</string>
+    <plurals name="items_selected_count">
+        <item quantity="one">%d valið</item>
+        <item quantity="other">%d valið</item>
+    </plurals>
+
+</resources>

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

@@ -4,7 +4,7 @@
     <string name="about_android">Applicazione per Android di %1$s</string>
     <string name="about_version">versione %1$s</string>
     <string name="actionbar_sync">Aggiorna account</string>
-    <string name="actionbar_upload">Carica un file</string>
+    <string name="actionbar_upload">Carica</string>
     <string name="actionbar_upload_from_apps">Contenuti da altre applicazioni</string>
     <string name="actionbar_upload_files">File</string>
     <string name="actionbar_open_with">Apri con</string>
@@ -23,7 +23,7 @@
     <string name="drawer_item_on_device">Su dispositivo</string>
     <string name="drawer_item_settings">Impostazioni</string>
     <string name="drawer_item_uploads_list">Caricamenti</string>
-	<string name="drawer_close">Chiudi</string>
+    <string name="drawer_close">Chiudi</string>
     <string name="drawer_open">Apri</string>
     <string name="prefs_category_general">Generale</string>
     <string name="prefs_category_more">Altro</string>
@@ -57,6 +57,7 @@
     <string name="sync_string_files">File</string>
     <string name="setup_btn_connect">Connetti</string>
     <string name="uploader_btn_upload_text">Carica</string>
+    <string name="uploader_btn_uploadTextSnippet_text">Crea file di testo</string>
     <string name="uploader_top_message">Scegli la cartella di caricamento</string>
     <string name="uploader_wrn_no_account_title">Nessun account trovato</string>
     <string name="uploader_wrn_no_account_text">Non ci sono account %1$s sul tuo dispositivo. Configura prima un account.</string>
@@ -303,7 +304,7 @@
     <string name="preview_image_error_unknown_format">Questa immagine non può essere mostrata</string>
 
     <string name="error__upload__local_file_not_copied">%1$s non può essere copiato nella cartella locale %2$s</string>
-    <string name="prefs_instant_upload_path_title">Percorso di caricamento</string>
+    <string name="prefs_instant_upload_path_title">Cartella caricamenti istantanei</string>
     <string name="prefs_instant_upload_path_use_subfolders_title">Usa sottocartelle</string>
     <string name="prefs_instant_upload_path_use_subfolders_summary">Archivia in sottocartelle in base a anno e mese</string>
 
@@ -377,7 +378,7 @@
     <string name="prefs_category_instant_uploading">Caricamenti istantanei</string>
     <string name="prefs_category_details">Dettagli</string>
 
-	<string name="prefs_instant_video_upload_path_title">Percorso di caricamento dei video</string>
+	<string name="prefs_instant_video_upload_path_title">Cartella caricamenti istantanei dei video</string>
     <string name="sync_folder_failed_content">La sincronizzazione della cartella %1$s non può essere completata</string>
 
 	<string name="shared_subject_header">condiviso</string>
@@ -457,6 +458,7 @@
     <string name="local_file_not_found_toast">Il file non è stato trovato nel file system locale</string>
     <string name="confirmation_remove_files_alert">Vuoi davvero rimuovere gli elementi selezionati?</string>
     <string name="confirmation_remove_folders_alert">Vuoi davvero rimuovere gli elementi selezionati e il loro contenuto?</string>
+    <string name="actionbar_search">Cerca</string>
     <plurals name="items_selected_count">
         <item quantity="one">%d selezionato</item>
         <item quantity="other">%d selezionati</item>

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

@@ -23,7 +23,7 @@
     <string name="drawer_item_on_device">デバイス上</string>
     <string name="drawer_item_settings">設定</string>
     <string name="drawer_item_uploads_list">アップロード</string>
-	<string name="drawer_close">閉じる</string>
+    <string name="drawer_close">閉じる</string>
     <string name="drawer_open">開く</string>
     <string name="prefs_category_general">一般</string>
     <string name="prefs_category_more">もっと見る</string>
@@ -303,7 +303,6 @@
     <string name="preview_image_error_unknown_format">この画像は表示できません</string>
 
     <string name="error__upload__local_file_not_copied">%1$s は、ローカルフォルダー %2$s  にコピーできませんでした。</string>
-    <string name="prefs_instant_upload_path_title">アップロードパス</string>
     <string name="prefs_instant_upload_path_use_subfolders_title">サブフォルダーを利用</string>
     <string name="prefs_instant_upload_path_use_subfolders_summary">年と月を元にしたサブフォルダーに保存</string>
 
@@ -377,8 +376,7 @@
     <string name="prefs_category_instant_uploading">自動アップロード</string>
     <string name="prefs_category_details">詳細</string>
 
-	<string name="prefs_instant_video_upload_path_title">動画のアップロードパス</string>
-    <string name="sync_folder_failed_content">%1$s フォルダーの同期が完了しませんでした。</string>
+	<string name="sync_folder_failed_content">%1$s フォルダーの同期が完了しませんでした。</string>
 
 	<string name="shared_subject_header">共有中</string>
 	<string name="with_you_subject_header">あなたと</string>

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

@@ -20,7 +20,7 @@
     <string name="drawer_item_all_files">모든 파일</string>
     <string name="drawer_item_settings">설정</string>
     <string name="drawer_item_uploads_list">업로드</string>
-	<string name="drawer_close">닫기</string>
+    <string name="drawer_close">닫기</string>
     <string name="drawer_open">열기</string>
     <string name="prefs_category_general">일반</string>
     <string name="prefs_category_more">더 보기</string>

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

@@ -21,7 +21,7 @@
     <string name="drawer_item_all_files">Alle filer</string>
     <string name="drawer_item_settings">Innstillinger</string>
     <string name="drawer_item_uploads_list">Opplastinger</string>
-	<string name="drawer_close">Lukk</string>
+    <string name="drawer_close">Lukk</string>
     <string name="drawer_open">Åpne</string>
     <string name="prefs_category_general">Generelt</string>
     <string name="prefs_category_more">Mer</string>
@@ -289,7 +289,6 @@
     <string name="preview_image_error_unknown_format">Dette bildet kan ikke vises</string>
 
     <string name="error__upload__local_file_not_copied">%1$s kunne ikke kopieres til lokal mappe %2$s</string>
-    <string name="prefs_instant_upload_path_title">Opplastings-sti</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">Kan ikke dele. Sjekk om filen eksisterer.</string>
@@ -355,8 +354,7 @@
     <string name="prefs_category_instant_uploading">Umiddelbare opplastinger</string>
     <string name="prefs_category_details">Detaljer</string>
 
-	<string name="prefs_instant_video_upload_path_title">Sti til video-opplasting</string>
-    <string name="sync_folder_failed_content">Synkronisering av %1$s mappe kunne ikke fullføres</string>
+	<string name="sync_folder_failed_content">Synkronisering av %1$s mappe kunne ikke fullføres</string>
 
 	<string name="shared_subject_header">delte</string>
 	<string name="with_you_subject_header">med deg</string>

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

@@ -23,7 +23,7 @@
     <string name="drawer_item_on_device">Op het apparaat</string>
     <string name="drawer_item_settings">Instellingen</string>
     <string name="drawer_item_uploads_list">Uploads</string>
-	<string name="drawer_close">Sluiten</string>
+    <string name="drawer_close">Sluiten</string>
     <string name="drawer_open">Open</string>
     <string name="prefs_category_general">Algemeen</string>
     <string name="prefs_category_more">Meer</string>
@@ -58,6 +58,7 @@ Download hier: %2$s</string>
     <string name="sync_string_files">Bestanden</string>
     <string name="setup_btn_connect">Verbinden</string>
     <string name="uploader_btn_upload_text">Uploaden</string>
+    <string name="uploader_btn_uploadTextSnippet_text">Creëren tekstbestand</string>
     <string name="uploader_top_message">Kies een uploadmap</string>
     <string name="uploader_wrn_no_account_title">Geen account gevonden</string>
     <string name="uploader_wrn_no_account_text">Er zijn geen %1$s accounts op dit apparaat. Stel eerst een account in.</string>
@@ -306,7 +307,7 @@ Hieronder staan de lokale bestanden en de externe bestanden in %5$s waar ze naar
     <string name="preview_image_error_unknown_format">Deze afbeelding kan niet worden getoond</string>
 
     <string name="error__upload__local_file_not_copied">%1$s kon niet worden gekopieerd naar de %2$s lokale map</string>
-    <string name="prefs_instant_upload_path_title">Upload pad</string>
+    <string name="prefs_instant_upload_path_title">Directe uploadmap</string>
     <string name="prefs_instant_upload_path_use_subfolders_title">Gebruik submappen</string>
     <string name="prefs_instant_upload_path_use_subfolders_summary">Opslaan in submappen, gebaseed op jaar en maand</string>
 
@@ -380,7 +381,7 @@ Hieronder staan de lokale bestanden en de externe bestanden in %5$s waar ze naar
     <string name="prefs_category_instant_uploading">Directe uploads</string>
     <string name="prefs_category_details">Details</string>
 
-	<string name="prefs_instant_video_upload_path_title">Upload video pad</string>
+	<string name="prefs_instant_video_upload_path_title">Directe video uploadmap</string>
     <string name="sync_folder_failed_content">Synchronisatie van map %1$s kon niet worden voltooid</string>
 
 	<string name="shared_subject_header">gedeeld</string>
@@ -460,6 +461,7 @@ Neem contact op met je beheerder</string>
     <string name="local_file_not_found_toast">Het bestand is niet te vinden binnen het lokale bestandssysteem.</string>
     <string name="confirmation_remove_files_alert">Wil je de geselecteerde objecten echt verwijderen?</string>
     <string name="confirmation_remove_folders_alert">Wil je de geselecteerde objecten en hun inhoud echt verwijderen?</string>
+    <string name="actionbar_search">Zoeken</string>
     <plurals name="items_selected_count">
         <item quantity="one">%d geselecteerd</item>
         <item quantity="other">%d geselecteerd</item>

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

@@ -23,7 +23,7 @@
     <string name="drawer_item_on_device">Na urządzeniu</string>
     <string name="drawer_item_settings">Ustawienia</string>
     <string name="drawer_item_uploads_list">Wysłane</string>
-	<string name="drawer_close">Zamknij</string>
+    <string name="drawer_close">Zamknij</string>
     <string name="drawer_open">Otwórz</string>
     <string name="prefs_category_general">Ogólne</string>
     <string name="prefs_category_more">Więcej</string>
@@ -302,7 +302,6 @@
     <string name="preview_image_error_unknown_format">Ten obrazek nie może zostać wyświetlony</string>
 
     <string name="error__upload__local_file_not_copied">%1$s nie może zostać skopiowany do lokalnego folderu %2$s</string>
-    <string name="prefs_instant_upload_path_title">Ścieżka wysyłania</string>
     <string name="prefs_instant_upload_path_use_subfolders_title">Używaj podfoldery</string>
     <string name="prefs_instant_upload_path_use_subfolders_summary">Zapisz w podfolderach oparty na roku oraz miesiąca</string>
 
@@ -376,8 +375,7 @@
     <string name="prefs_category_instant_uploading">Automatyczne wysyłanie</string>
     <string name="prefs_category_details">Szczegóły</string>
 
-	<string name="prefs_instant_video_upload_path_title">Katalog wysyłania dla wideo</string>
-    <string name="sync_folder_failed_content">Synchronizacja folderu %1$s nie może zostać zakończona</string>
+	<string name="sync_folder_failed_content">Synchronizacja folderu %1$s nie może zostać zakończona</string>
 
 	<string name="shared_subject_header">udostępniony</string>
 	<string name="with_you_subject_header">z tobą</string>

+ 16 - 15
res/values-pt-rBR/strings.xml

@@ -23,14 +23,14 @@
     <string name="drawer_item_on_device">No aparelho</string>
     <string name="drawer_item_settings">Configurações</string>
     <string name="drawer_item_uploads_list">Envios</string>
-	<string name="drawer_close">Fechar</string>
+    <string name="drawer_close">Fechar</string>
     <string name="drawer_open">Abrir</string>
     <string name="prefs_category_general">Geral</string>
     <string name="prefs_category_more">Mais</string>
     <string name="prefs_accounts">Contas</string>
     <string name="prefs_manage_accounts">Gerenciar contas</string>
     <string name="prefs_passcode">Bloqueio com senha</string>
-    <string name="prefs_instant_upload">Envio instantâneo de imagem</string>
+    <string name="prefs_instant_upload">Envio instantâneo de imagens</string>
     <string name="prefs_instant_upload_summary">Envia instantaneamente as fotos tiradas com a câmera</string>
     <string name="prefs_instant_video_upload">Envio instantâneo de vídeos</string>
     <string name="prefs_instant_video_upload_summary">Envia instantaneamente os vídeos feitos com a câmera</string>
@@ -53,7 +53,7 @@
     <string name="auth_host_url">Endereço do servidor https://...</string>
     <string name="auth_username">Nome de usuário</string>
     <string name="auth_password">Senha</string>
-    <string name="auth_register">Novo no %1$s?</string>
+    <string name="auth_register">Novo usuário do %1$s?</string>
     <string name="sync_string_files">Arquivos</string>
     <string name="setup_btn_connect">Conectar</string>
     <string name="uploader_btn_upload_text">Enviar</string>
@@ -290,8 +290,8 @@
     <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">Envio de fotos apenas por wifi</string>
-    <string name="instant_video_upload_on_wifi">Envio de vídeos apenas por wifi</string>
+    <string name="instant_upload_on_wifi">Envio de fotos apenas por Wi-Fi</string>
+    <string name="instant_video_upload_on_wifi">Envio de vídeos apenas por Wi-Fi</string>
     <string name="instant_upload_path">/Upload instantâneo</string>
     <string name="conflict_title">Conflito de arquivo</string>
     <string name="conflict_message">Quais arquivos você deseja manter? Se você selecionar ambas as versões, o arquivo local terá um número adicionado ao seu nome.</string>
@@ -303,9 +303,9 @@
     <string name="preview_image_error_unknown_format">Esta imagem não pode ser mostrada</string>
 
     <string name="error__upload__local_file_not_copied">%1$s não pôde ser copiado para pasta local %2$s</string>
-    <string name="prefs_instant_upload_path_title">Caminho para envio</string>
-    <string name="prefs_instant_upload_path_use_subfolders_title">Use subpastas</string>
-    <string name="prefs_instant_upload_path_use_subfolders_summary">Guarde em subpastas baseadas em ano e mês</string>
+    <string name="prefs_instant_upload_path_title">Pasta de envio instantâneo</string>
+    <string name="prefs_instant_upload_path_use_subfolders_title">Usar subpastas</string>
+    <string name="prefs_instant_upload_path_use_subfolders_summary">Armazena em subpastas com base no ano e mê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>
@@ -351,24 +351,24 @@
 
 	<string name="actionbar_logger">Logs</string>
 	<string name="log_send_history_button">Enviar histórico</string>
-	<string name="log_send_no_mail_app">Nenhum aplicativo para envio de logs foi encontrado. Por favor instale um aplicativo de e-mail</string>
-	<string name="log_send_mail_subject">%1$s logs do Android app</string>
+	<string name="log_send_no_mail_app">Nenhum aplicativo para envio de logs foi encontrado. Por favor, instale um aplicativo de e-mail.</string>
+	<string name="log_send_mail_subject">%1$s logs do aplicativo Android</string>
 	<string name="log_progress_dialog_text">Carregando dados ...</string>
 
-	<string name="saml_authentication_required_text">Autenticação é requerida</string>
+	<string name="saml_authentication_required_text">Autenticação obrigatória</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="folder_picker_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_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>
 
 
-    <string name="copy_file_not_found">Não é possível copiar. Por favor verifique se o arquivo existe</string>
+    <string name="copy_file_not_found">Não é possível copiar. Por favor, verifique se o arquivo existe</string>
     <string name="copy_file_invalid_into_descendent">Não é possível copiar uma pasta em uma descendente</string>
     <string name="copy_file_invalid_overwrite">O arquivo já existe na pasta de destino</string>
     <string name="copy_file_error">Ocorreu um erro ao tentar copiar este arquivo ou pasta</string>
@@ -377,7 +377,7 @@
     <string name="prefs_category_instant_uploading">Envio instantâneo</string>
     <string name="prefs_category_details">Detalhes</string>
 
-	<string name="prefs_instant_video_upload_path_title">Enviar caminho do vídeo</string>
+	<string name="prefs_instant_video_upload_path_title">Pasta de envio instantâneo de vídeos</string>
     <string name="sync_folder_failed_content">A sincronização da pasta %1$s não pode ser finalizada</string>
 
 	<string name="shared_subject_header">compartilhado</string>
@@ -451,12 +451,13 @@
     <string name="manage_space_title">Gerenciar o espaço</string>
     <string name="manage_space_description">Definições, certificados de banco de dados e servidor de dados %1$s serão excluído permanentemente. \n\nArquivos baixados serão mantidos inalterados. \n\nEste processo pode demorar algum tempo.</string>
     <string name="manage_space_clear_data">Limpar dados</string>
-    <string name="manage_space_error">Alguns arquivos não puderam ser excluído.</string>
+    <string name="manage_space_error">Alguns arquivos não puderam ser excluídos.</string>
 
     <string name="permission_storage_access">Permissões adicionais são necessárias para se enviar e baixar arquivos &amp; .</string>
     <string name="local_file_not_found_toast">O arquivo não foi encontrado no sistema de arquivos local</string>
     <string name="confirmation_remove_files_alert">Deseja realmente remover os itens selecionados?</string>
     <string name="confirmation_remove_folders_alert">Deseja realmente remover os itens selecionados e seus conteúdos?</string>
+    <string name="actionbar_search">Pesquisar</string>
     <plurals name="items_selected_count">
         <item quantity="one">%d selecionado</item>
         <item quantity="other">%d selecionados</item>

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

@@ -21,7 +21,7 @@
     <string name="drawer_item_all_files">Todos os ficheiros</string>
     <string name="drawer_item_settings">Definições</string>
     <string name="drawer_item_uploads_list">Carregamentos</string>
-	<string name="drawer_close">Fechar</string>
+    <string name="drawer_close">Fechar</string>
     <string name="drawer_open">Abrir</string>
     <string name="prefs_category_general">Geral</string>
     <string name="prefs_category_more">Mais</string>
@@ -295,7 +295,6 @@
     <string name="preview_image_error_unknown_format">Esta imagem não pode ser mostrada</string>
 
     <string name="error__upload__local_file_not_copied">Não foi possível copiar %1$s para a pasta local %2$s</string>
-    <string name="prefs_instant_upload_path_title">Caminho de envio</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. 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>
@@ -364,8 +363,7 @@
     <string name="prefs_category_instant_uploading">Envios instantâneos</string>
     <string name="prefs_category_details">Detalhes</string>
 
-	<string name="prefs_instant_video_upload_path_title">Enviar caminho de vídeo</string>
-    <string name="sync_folder_failed_content">Não foi possível completar a sincronização da pasta %1$s</string>
+	<string name="sync_folder_failed_content">Não foi possível completar a sincronização da pasta %1$s</string>
 
 	<string name="shared_subject_header">partilhado</string>
 	<string name="with_you_subject_header">consigo</string>

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

@@ -21,7 +21,7 @@
     <string name="drawer_item_all_files">Toate fișierele</string>
     <string name="drawer_item_settings">Setări</string>
     <string name="drawer_item_uploads_list">Încărcări</string>
-	<string name="drawer_close">Închide</string>
+    <string name="drawer_close">Închide</string>
     <string name="drawer_open">Deschide</string>
     <string name="prefs_category_general">General</string>
     <string name="prefs_category_more">Mai mult</string>

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

@@ -23,7 +23,7 @@
     <string name="drawer_item_on_device">На устройстве</string>
     <string name="drawer_item_settings">Настройки</string>
     <string name="drawer_item_uploads_list">Загрузки</string>
-	<string name="drawer_close">Закрыть</string>
+    <string name="drawer_close">Закрыть</string>
     <string name="drawer_open">Открыть</string>
     <string name="prefs_category_general">Основные</string>
     <string name="prefs_category_more">Больше</string>
@@ -304,7 +304,7 @@
     <string name="preview_image_error_unknown_format">Это изображение не может быть отображено</string>
 
     <string name="error__upload__local_file_not_copied">%1$s невозможно скопировать в локальный каталог %2$s </string>
-    <string name="prefs_instant_upload_path_title">Путь загрузки</string>
+    <string name="prefs_instant_upload_path_title">Каталог для автоматической загрузки</string>
     <string name="prefs_instant_upload_path_use_subfolders_title">Использовать подкаталоги</string>
     <string name="prefs_instant_upload_path_use_subfolders_summary">Хранить в них, учитывая год и месяц</string>
 
@@ -378,7 +378,7 @@
     <string name="prefs_category_instant_uploading">Автоматическая загрузка</string>
     <string name="prefs_category_details">Подробно</string>
 
-	<string name="prefs_instant_video_upload_path_title">Путь загрузки видео</string>
+	<string name="prefs_instant_video_upload_path_title">Каталог для автоматической загрузки видео</string>
     <string name="sync_folder_failed_content">Синхронизация папки %1$s не может быть завершена</string>
 
 	<string name="shared_subject_header">поделился</string>
@@ -457,4 +457,12 @@
     <string name="local_file_not_found_toast">Файл не был найден в локальной файловой системе</string>
     <string name="confirmation_remove_files_alert">Вы действительно хотите удалить выбранные элементы?</string>
     <string name="confirmation_remove_folders_alert">Вы действительно хотите удалить выбранные элементы и их содержимое?</string>
-    </resources>
+    <string name="actionbar_search">Поиск</string>
+    <plurals name="items_selected_count">
+        <item quantity="one">%d выбран</item>
+        <item quantity="few">%d выбрано</item>
+        <item quantity="many">%d выбраны</item>
+        <item quantity="other">%d выбрано</item>
+    </plurals>
+
+</resources>

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

@@ -21,7 +21,7 @@
     <string name="drawer_item_all_files">Vse datoteke</string>
     <string name="drawer_item_settings">Nastavitve</string>
     <string name="drawer_item_uploads_list">Poslano</string>
-	<string name="drawer_close">Zapri</string>
+    <string name="drawer_close">Zapri</string>
     <string name="drawer_open">Odpri</string>
     <string name="prefs_category_general">Splošno</string>
     <string name="prefs_category_more">Več</string>
@@ -299,7 +299,6 @@
     <string name="preview_image_error_unknown_format">Te slike ni mogoče prikazati</string>
 
     <string name="error__upload__local_file_not_copied">Datoteke %1$s ni mogoče kopirati v krajevno mapo %2$s</string>
-    <string name="prefs_instant_upload_path_title">Mapa za odlaganje slik v oblaku</string>
     <string name="prefs_instant_upload_path_use_subfolders_title">Uporabi podmape</string>
     <string name="prefs_instant_upload_path_use_subfolders_summary">Shrani v podmape kot leto in mesec</string>
 
@@ -373,8 +372,7 @@
     <string name="prefs_category_instant_uploading">Hipno pošiljanje</string>
     <string name="prefs_category_details">Podrobnosti</string>
 
-	<string name="prefs_instant_video_upload_path_title">Mapa za odlaganje videa v oblaku</string>
-    <string name="sync_folder_failed_content">Usklajevanja mape %1$s ni mogoče zaključiti</string>
+	<string name="sync_folder_failed_content">Usklajevanja mape %1$s ni mogoče zaključiti</string>
 
 	<string name="shared_subject_header">v souporabi</string>
 	<string name="with_you_subject_header">z vami</string>

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

@@ -21,7 +21,7 @@
     <string name="drawer_item_all_files">Krejt kartelat</string>
     <string name="drawer_item_settings">Llogari</string>
     <string name="drawer_item_uploads_list">Ngarkime</string>
-	<string name="drawer_close">Mbylle</string>
+    <string name="drawer_close">Mbylle</string>
     <string name="drawer_open">Hape</string>
     <string name="prefs_category_general">Të përgjithshme</string>
     <string name="prefs_category_more">Më tepër</string>
@@ -298,7 +298,6 @@
     <string name="preview_image_error_unknown_format">Kjo figurë nuk mund të shfaqet</string>
 
     <string name="error__upload__local_file_not_copied">%1$s s\’u kopjua dot te dosja vendore %2$s</string>
-    <string name="prefs_instant_upload_path_title">Shteg ngarkimesh</string>
     <string name="share_link_no_support_share_api">Na ndjeni, ndarja me të tjerët s\’është e aktivizuar te shërbyesi juaj. Ju lutemi, lidhuni me përgjegjësin tuaj.</string>
 	<string name="share_link_file_no_exist">S\’arrin të ndajë me të tjerët. Ju lutemi, kontrolloni nëse kartela ekziston apo jo</string>
 	<string name="share_link_file_error">Ndodhi një gabim teksa përpiqej të ndahej me të tjerët kjo kartelë apo dosje</string>
@@ -367,8 +366,7 @@
     <string name="prefs_category_instant_uploading">Ngarkime të atypëratyshme</string>
     <string name="prefs_category_details">Hollësi</string>
 
-	<string name="prefs_instant_video_upload_path_title">Shteg ngarkimi videosh</string>
-    <string name="sync_folder_failed_content">Njëkohësimi i dosjes %1$s s’u plotësua dot</string>
+	<string name="sync_folder_failed_content">Njëkohësimi i dosjes %1$s s’u plotësua dot</string>
 
 	<string name="shared_subject_header">ndarë</string>
 	<string name="with_you_subject_header">me ju</string>

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

@@ -21,7 +21,7 @@
     <string name="drawer_item_all_files">Сви фајлови</string>
     <string name="drawer_item_settings">Поставке</string>
     <string name="drawer_item_uploads_list">Отпремања</string>
-	<string name="drawer_close">Затвори</string>
+    <string name="drawer_close">Затвори</string>
     <string name="drawer_open">Отвори</string>
     <string name="prefs_category_general">Опште</string>
     <string name="prefs_category_more">Остало</string>
@@ -274,7 +274,6 @@
     <string name="preview_image_error_unknown_format">Слика се не може приказати</string>
 
     <string name="error__upload__local_file_not_copied">%1$s се не може копирати у локалну фасциклу %2$s</string>
-    <string name="prefs_instant_upload_path_title">Путања отпремања</string>
     <string name="share_link_no_support_share_api">Дељење није укључено на вашем серверу. Контактирајте
 		администратора.</string>
 	<string name="share_link_file_no_exist">Не могу да делим. Проверите да ли фајл постоји</string>
@@ -339,8 +338,7 @@
     <string name="prefs_category_instant_uploading">Брза отпремања</string>
     <string name="prefs_category_details">Подаци</string>
 
-	<string name="prefs_instant_video_upload_path_title">Путања отпремања видеа</string>
-    <string name="sync_folder_failed_content">Не могу да довршим синхронизацију фасцикле %1$s</string>
+	<string name="sync_folder_failed_content">Не могу да довршим синхронизацију фасцикле %1$s</string>
 
 	<string name="shared_subject_header">дељено</string>
 	<string name="with_you_subject_header">са вама</string>

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

@@ -21,7 +21,7 @@
     <string name="drawer_item_all_files">Alla filer</string>
     <string name="drawer_item_settings">Inställningar</string>
     <string name="drawer_item_uploads_list">Uppladdningar</string>
-	<string name="drawer_close">Stäng</string>
+    <string name="drawer_close">Stäng</string>
     <string name="drawer_open">Öppna</string>
     <string name="prefs_category_general">Allmänt</string>
     <string name="prefs_category_more">Mer</string>
@@ -299,7 +299,6 @@
     <string name="preview_image_error_unknown_format">Denna bild kan inte visas</string>
 
     <string name="error__upload__local_file_not_copied">%1$s kunde inte kopieras till %2$s lokal mapp</string>
-    <string name="prefs_instant_upload_path_title">Uppladdningssökväg</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">Lyckades ej dela. Vänligen kontrollera om filen eisterar</string>
@@ -369,8 +368,7 @@
     <string name="prefs_category_instant_uploading">Direktuppladdningar</string>
     <string name="prefs_category_details">Detaljer</string>
 
-	<string name="prefs_instant_video_upload_path_title">Sökväg för uppladdning av video</string>
-    <string name="sync_folder_failed_content">Synkronisering av %1$s mapp kunde inte slutföras</string>
+	<string name="sync_folder_failed_content">Synkronisering av %1$s mapp kunde inte slutföras</string>
 
 	<string name="shared_subject_header">delad</string>
 	<string name="with_you_subject_header">med dig</string>

+ 2 - 4
res/values-th-rTH/strings.xml

@@ -21,7 +21,7 @@
     <string name="drawer_item_all_files">ไฟล์ทั้งหมด</string>
     <string name="drawer_item_settings">ตั้งค่า</string>
     <string name="drawer_item_uploads_list">อัพโหลด</string>
-	<string name="drawer_close">ปิด</string>
+    <string name="drawer_close">ปิด</string>
     <string name="drawer_open">เปิด</string>
     <string name="prefs_category_general">ทั่วไป</string>
     <string name="prefs_category_more">เพิ่มเติม</string>
@@ -291,7 +291,6 @@
     <string name="preview_image_error_unknown_format">ไม่สามารถแสดงรูปภาพนี้ได้</string>
 
     <string name="error__upload__local_file_not_copied">%1$s ไม่สามารถคัดลอกไปยังโฟลเดอร์ %2$s ในเครื่อง</string>
-    <string name="prefs_instant_upload_path_title">ตำแหน่งพาธสำหรับอัพโหลด</string>
     <string name="share_link_no_support_share_api">ขออภัยการแชร์ไม่ได้เปิดใช้งานบนเซิร์ฟเวอร์ของคุณ กรุณาติดต่อผู้ดูแลระบบ</string>
 	<string name="share_link_file_no_exist">ไม่สามารถแชร์ กรุณาตรวจสอบว่ายังมีไฟล์นั้นอยู่</string>
 	<string name="share_link_file_error">เกิดข้อผิดพลาดในขณะที่พยายามจะแชร์ไฟล์หรือโฟลเดอร์นี้</string>
@@ -356,8 +355,7 @@
     <string name="prefs_category_instant_uploading">อัพโหลดทันที</string>
     <string name="prefs_category_details">รายละเอียด</string>
 
-	<string name="prefs_instant_video_upload_path_title">ตำแหน่งพาธวีดีโอที่อัพโหลด</string>
-    <string name="sync_folder_failed_content">ประสานข้อมูลโฟลเดอร์ %1$s ไม่สำเร็จ</string>
+	<string name="sync_folder_failed_content">ประสานข้อมูลโฟลเดอร์ %1$s ไม่สำเร็จ</string>
 
 	<string name="shared_subject_header">ถูกแชร์</string>
 	<string name="with_you_subject_header">กับคุณ</string>

+ 28 - 5
res/values-tr/strings.xml

@@ -17,11 +17,13 @@
     <string-array name="actionbar_sortby">
     	<item>A-Z</item>
     	<item>Yeniden - Eskiye</item>
+    	<item>En Büyük - En Küçük</item>
     </string-array>
     <string name="drawer_item_all_files">Tüm dosyalar</string>
+    <string name="drawer_item_on_device">Aygıtta</string>
     <string name="drawer_item_settings">Ayarlar</string>
     <string name="drawer_item_uploads_list">Yüklemeler</string>
-	<string name="drawer_close">Kapat</string>
+    <string name="drawer_close">Kapat</string>
     <string name="drawer_open">Aç</string>
     <string name="prefs_category_general">Genel</string>
     <string name="prefs_category_more">Daha fazla</string>
@@ -61,8 +63,12 @@
     <string name="uploader_wrn_no_account_setup_btn_text">Kurulum</string>
     <string name="uploader_wrn_no_account_quit_btn_text">Çıkış</string>
     <string name="uploader_error_title_no_file_to_upload">Yüklenecek dosya yok</string>
+    <string name="uploader_error_message_received_piece_of_text">%1$s bir metin parçasını dosya olarak karşıya yükleyemez.</string>
     <string name="uploader_error_message_no_file_to_upload">Alınan veri hiç geçerii dosya içermiyor.</string>
     <string name="uploader_error_title_file_cannot_be_uploaded">Dosya yüklenemiyor</string>
+    <string name="uploader_error_message_read_permission_not_granted">%1$s alınan bir dosyayı okumaya yetkili değil</string>
+    <string name="uploader_error_message_source_file_not_found">Karşıya yüklenecek dosya konumunda bulunamadı. Lütfen dosyanın var olduğundan emin olun.</string>
+    <string name="uploader_error_message_source_file_not_copied">Geçici bir klasöre dosya kopyalama sırasında bir hata oluştu. Tekrar göndermeyi deneyin.</string>
     <string name="file_list_seconds_ago">saniyeler önce</string>
     <string name="file_list_empty">Burada hiçbir şey yok. Bir şeyler yükleyin!</string>
     <string name="file_list_loading">Yükleniyor...</string>
@@ -99,6 +105,7 @@
     <string name="about_title">Hakkında</string>
     <string name="change_password">Parola değiştir</string>
     <string name="delete_account">Hesabı kaldır</string>
+    <string name="delete_account_warning">%s hesabı silinsin mi?\\n\\nSilme işlemi geri alınamaz.</string>
     <string name="create_account">Hesap oluştur</string>
     <string name="upload_chooser_title">Şuradan yükle...</string>
     <string name="uploader_info_dirname">Klasör adı</string>
@@ -224,6 +231,7 @@
     <string name="unfavorite">Çevrimdışı erişimden kaldır</string>
     <string name="common_rename">Yeniden adlandır</string>
     <string name="common_remove">Kaldır</string>
+    <string name="confirmation_remove_file_alert">Gerçekten %1$s dosyasını kaldırmak istiyor musunuz?</string>
     <string name="confirmation_remove_folder_alert">Gerçekten %1$s ve içeriğini kaldırmak istediğinizden emin misiniz?</string>
     <string name="confirmation_remove_local">Sadece yerel</string>
     <string name="remove_success_msg">Kaldırma başarılı</string>
@@ -295,8 +303,11 @@
     <string name="preview_image_error_unknown_format">Bu resim gösterilemiyor</string>
 
     <string name="error__upload__local_file_not_copied">%1$s, %2$s yerel klasörüne kopyalanamadı</string>
-    <string name="prefs_instant_upload_path_title">Yükleme yolu</string>
-    <string name="share_link_no_support_share_api">Üzgünüz, paylaşım sunucunuzda etkin değil. Lütfen yöneticinizle
+    <string name="prefs_instant_upload_path_title">Anında yükleme klasörü</string>
+    <string name="prefs_instant_upload_path_use_subfolders_title">Alt klasörleri kullan</string>
+    <string name="prefs_instant_upload_path_use_subfolders_summary">Yıla ve aya göre alt dizinlere kaydet</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">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>
@@ -311,7 +322,10 @@
 
     <string name="copy_link">Bağlantıyı kopyala</string>
     <string name="clipboard_text_copied">Panoya kopyalandı</string>
+    <string name="clipboard_no_text_to_copy">Panoya kopyalanacak metin alınmadı</string>
     <string name="clipboard_uxexpected_error">Panoya kopyalanırken beklenmeyen bir hata oluştu</string>
+    <string name="clipboard_label">%1$s kaynağından metin kopyalandı</string>
+
     <string name="error_cant_bind_to_operations_service">Ciddi hata: işlem gerçekleştirilemiyor</string>
 
     <string name="network_error_socket_exception">Sunucuya bağlanılırken bir hata oluştu.</string>
@@ -363,7 +377,7 @@
     <string name="prefs_category_instant_uploading">Anında yüklemeler</string>
     <string name="prefs_category_details">Ayrıntılar</string>
 
-	<string name="prefs_instant_video_upload_path_title">Video yükleme yolu</string>
+	<string name="prefs_instant_video_upload_path_title">Anında video yükleme klasörü</string>
     <string name="sync_folder_failed_content">%1$s klasörünün eşitlemesi tamamlanamadı</string>
 
 	<string name="shared_subject_header">sizinle</string>
@@ -435,9 +449,18 @@
     <string name="action_switch_list_view">Liste görünümü</string>
 
     <string name="manage_space_title">Alanı ayarla</string>
+    <string name="manage_space_description">%1$s tarafından verilmiş olan ayarlar, veritabanı ve sunucu sertiffikaları kalıcı olarak silinecek. \\n\\nİndirilen dosyalara dokunulmayacak.\\n\\nBu işlem biraz vakit alacaktır.</string>
     <string name="manage_space_clear_data">Verileri temizle</string>
     <string name="manage_space_error">Bazı dosyalar silinemedi</string>
 
     <string name="permission_storage_access">Dosya yüklemek ve indirmek için ek izin gerekiyor.</string>
     <string name="local_file_not_found_toast">Dosya yerel dosya sisteminde bulunamadı.</string>
-    </resources>
+    <string name="confirmation_remove_files_alert">Seçilen öğeleri gerçekten kaldırmak istiyor musunuz?</string>
+    <string name="confirmation_remove_folders_alert">Seçilen öğeleri ve içeriklerini gerçekten kaldırmak istiyor musunuz?</string>
+    <string name="actionbar_search">Ara</string>
+    <plurals name="items_selected_count">
+        <item quantity="one">%d seçili</item>
+        <item quantity="other">%d seçili</item>
+    </plurals>
+
+</resources>

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

@@ -21,7 +21,7 @@
     <string name="drawer_item_all_files">Усі файли</string>
     <string name="drawer_item_settings">Налаштування</string>
     <string name="drawer_item_uploads_list">Завантаженнь</string>
-	<string name="drawer_close">Закрити</string>
+    <string name="drawer_close">Закрити</string>
     <string name="drawer_open">Відкрити</string>
     <string name="prefs_category_general">Основне</string>
     <string name="prefs_category_more">Більше</string>
@@ -253,7 +253,6 @@
     <string name="preview_image_error_unknown_format">Не вдалося показати зображення</string>
 
     <string name="error__upload__local_file_not_copied">%1$s неможливо скопіювати до %2$s</string>
-    <string name="prefs_instant_upload_path_title">Шлях завантаження</string>
     <string name="share_link_no_support_share_api">На жаль, обмін не включений на вашому сервері. Будь ласка, зв\'яжіться з вашим адмінистратором.</string>
 	<string name="share_link_file_no_exist">Неможливо поділитися. Будь ласка, перевірте, чи існує файл</string>
 	<string name="share_link_file_error">Виникла помилка при спробі поділитися файлом або текою</string>

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

@@ -21,7 +21,7 @@
     <string name="drawer_item_all_files">全部文件</string>
     <string name="drawer_item_settings">设置</string>
     <string name="drawer_item_uploads_list">上传</string>
-	<string name="drawer_close">关闭</string>
+    <string name="drawer_close">关闭</string>
     <string name="drawer_open">打开</string>
     <string name="prefs_category_general">常规</string>
     <string name="prefs_category_more">更多</string>
@@ -285,7 +285,6 @@
     <string name="preview_image_error_unknown_format">无法显示图片</string>
 
     <string name="error__upload__local_file_not_copied">无法复制 %1$s 到本地目录 %2$s</string>
-    <string name="prefs_instant_upload_path_title">上传路径</string>
     <string name="share_link_no_support_share_api">抱歉,共享功能未启用。请联系管理员。</string>
 	<string name="share_link_file_no_exist">无法共享。请检查文件是否存在</string>
 	<string name="share_link_file_error">共享文件或目录出错</string>
@@ -350,8 +349,7 @@
     <string name="prefs_category_instant_uploading">即时上传</string>
     <string name="prefs_category_details">详细信息</string>
 
-	<string name="prefs_instant_video_upload_path_title">上传视频路径</string>
-    <string name="sync_folder_failed_content"> %1$s同步未完成。</string>
+	<string name="sync_folder_failed_content"> %1$s同步未完成。</string>
 
 	<string name="shared_subject_header">已共享</string>
 	<string name="with_you_subject_header">与你</string>

+ 21 - 6
res/values-zh-rTW/strings.xml

@@ -17,11 +17,13 @@
     <string-array name="actionbar_sortby">
     	<item>A-Z</item>
     	<item>最新 - 最舊</item>
+    	<item>最大 - 最小</item>
     </string-array>
     <string name="drawer_item_all_files">所有檔案</string>
+    <string name="drawer_item_on_device">在裝置上</string>
     <string name="drawer_item_settings">設定</string>
     <string name="drawer_item_uploads_list">上傳</string>
-	<string name="drawer_close"> 關閉</string>
+    <string name="drawer_close"> 關閉</string>
     <string name="drawer_open">開啟</string>
     <string name="prefs_category_general">一般</string>
     <string name="prefs_category_more">更多</string>
@@ -55,6 +57,7 @@
     <string name="sync_string_files">檔案</string>
     <string name="setup_btn_connect">連線</string>
     <string name="uploader_btn_upload_text">上傳</string>
+    <string name="uploader_top_message">選擇上傳檔案夾</string>
     <string name="uploader_wrn_no_account_title">找不到帳號</string>
     <string name="uploader_wrn_no_account_text">無%1$s帳號,請先建立帳號。</string>
     <string name="uploader_wrn_no_account_setup_btn_text">設定</string>
@@ -102,6 +105,7 @@
     <string name="about_title">關於</string>
     <string name="change_password">變更密碼</string>
     <string name="delete_account">刪除帳號</string>
+    <string name="delete_account_warning">刪除帳號%s?\\n\\n刪除後將無法回復</string>
     <string name="create_account">建立帳號</string>
     <string name="upload_chooser_title">更新自 ...</string>
     <string name="uploader_info_dirname">資料夾名稱</string>
@@ -227,6 +231,7 @@
     <string name="unfavorite">取消設定為離線可用</string>
     <string name="common_rename">重新命名</string>
     <string name="common_remove">移除</string>
+    <string name="confirmation_remove_file_alert">您真的要移除 %1$s?</string>
     <string name="confirmation_remove_folder_alert">您真的要移除 %1$s 與裡頭的檔案?</string>
     <string name="confirmation_remove_local">只有本地</string>
     <string name="remove_success_msg">成功地移除</string>
@@ -298,8 +303,10 @@
     <string name="preview_image_error_unknown_format">無法顯示圖片</string>
 
     <string name="error__upload__local_file_not_copied">%1$s 無法被複製到本地資料夾 %2$s</string>
-    <string name="prefs_instant_upload_path_title">上傳路徑</string>
-    <string name="share_link_no_support_share_api">很抱歉, 您的伺服器並未開啟分享的功能. 請聯絡您的
+    <string name="prefs_instant_upload_path_use_subfolders_title">使用子資料夾</string>
+    <string name="prefs_instant_upload_path_use_subfolders_summary">依據年月存在子資料夾內</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>
@@ -338,6 +345,7 @@
 
     <string name="prefs_category_accounts">帳號</string>
     <string name="prefs_add_account">新增帳號</string>
+    <string name="drawer_manage_accounts">管理帳號</string>
     <string name="auth_redirect_non_secure_connection_title">加密的連線是由一個未加密的連線轉向過來的.</string>
 
 	<string name="actionbar_logger">紀錄</string>
@@ -368,8 +376,7 @@
     <string name="prefs_category_instant_uploading">即時上傳</string>
     <string name="prefs_category_details">詳細資料</string>
 
-	<string name="prefs_instant_video_upload_path_title">影像上傳路徑</string>
-    <string name="sync_folder_failed_content">%1$s 資料夾的同步作業未完成</string>
+	<string name="sync_folder_failed_content">%1$s 資料夾的同步作業未完成</string>
 
 	<string name="shared_subject_header">以分享的</string>
 	<string name="with_you_subject_header">與你</string>
@@ -395,6 +402,8 @@
     <string name="prefs_instant_behaviour_title">原始的檔案將會...</string>
     <string name="upload_copy_files">複製檔案</string>
     <string name="upload_move_files">移動檔案</string>
+    <string name="select_all">全選</string>
+
     <string name="pref_behaviour_entries_keep_file">保留在原先的資料夾</string>
     <string name="pref_behaviour_entries_move">移動到應用程式資料夾</string>
 
@@ -444,4 +453,10 @@
 
     <string name="permission_storage_access">需要額外的權限來上傳或下傳檔案.</string>
     <string name="local_file_not_found_toast">在本地的檔案系統中找不到這個檔案</string>
-    </resources>
+    <string name="confirmation_remove_files_alert">確認移除已選項目?</string>
+    <string name="confirmation_remove_folders_alert">確認移除已選項目及內容?</string>
+    <plurals name="items_selected_count">
+        <item quantity="other">%d 已選</item>
+    </plurals>
+
+</resources>

+ 6 - 0
res/values/colors.xml

@@ -52,4 +52,10 @@
     <!-- special transparent action bar colors for image preview -->
     <color name="owncloud_blue_transparent">#201D2D44</color>
     <color name="owncloud_blue_dark_transparent">#40162233</color>
+
+    <!-- level colors for info notifications/visualisations -->
+    <color name="infolevel_info">@color/color_accent</color>
+    <color name="infolevel_warning">#fdd835</color>
+    <color name="infolevel_critical">#e57373</color>
+
 </resources>

+ 5 - 2
res/values/strings.xml

@@ -23,6 +23,7 @@
     <string name="drawer_item_on_device">On device</string>
     <string name="drawer_item_settings">Settings</string>
     <string name="drawer_item_uploads_list">Uploads</string>
+    <string name="drawer_quota">%1$s of %2$s used</string>
 	<string name="drawer_close">Close</string>
     <string name="drawer_open">Open</string>
     <string name="prefs_category_general">General</string>
@@ -57,6 +58,7 @@
     <string name="sync_string_files">Files</string>
     <string name="setup_btn_connect">Connect</string>
     <string name="uploader_btn_upload_text">Upload</string>
+    <string name="uploader_btn_uploadTextSnippet_text">Create text file</string>
     <string name="uploader_top_message">Choose upload folder</string>
     <string name="uploader_wrn_no_account_title">No account found</string>
     <string name="uploader_wrn_no_account_text">There are no %1$s accounts on your device. Please set up an account first.</string>
@@ -305,7 +307,7 @@
     <string name="preview_image_error_unknown_format">This image cannot be shown</string>
 
     <string name="error__upload__local_file_not_copied">%1$s could not be copied to %2$s local folder</string>
-    <string name="prefs_instant_upload_path_title">Upload path</string>
+    <string name="prefs_instant_upload_path_title">Instant upload folder</string>
     <string name="prefs_instant_upload_path_use_subfolders_title">Use subfolders</string>
     <string name="prefs_instant_upload_path_use_subfolders_summary">Store in subfolders based on year and month</string>
 
@@ -379,7 +381,7 @@
     <string name="prefs_category_instant_uploading">Instant uploads</string>
     <string name="prefs_category_details">Details</string>
 
-	<string name="prefs_instant_video_upload_path_title">Upload video path</string>
+	<string name="prefs_instant_video_upload_path_title">Instant upload video folder</string>
     <string name="sync_folder_failed_content">Synchronization of %1$s folder could not be completed</string>
 
 	<string name="shared_subject_header">shared</string>
@@ -460,6 +462,7 @@
     <string name="confirmation_remove_files_alert">Do you really want to remove the selected items?</string>
     <string name="confirmation_remove_folders_alert">Do you really want to remove the selected items and their contents?</string>
     <string name="uploads_view_upload_status_waiting_for_charging">Waiting for device charging</string>
+    <string name="actionbar_search">Search</string>
     <plurals name="items_selected_count">
         <!--
              As a developer, you should always supply "one" and "other"

+ 1 - 1
res/values/styles.xml

@@ -85,7 +85,7 @@
 		<!-- Close button icon -->
 		<item name="closeIcon">@drawable/ic_close</item>
 		<!-- Search button icon -->
-		<item name="searchIcon">@drawable/ic_search</item>
+		<item name="searchIcon">@drawable/ic_search_grey</item>
 		<!-- Layout for query suggestion rows // unused for now, staying with the standard layout -->
 		<!--<item name="suggestionRowLayout">...</item>-->
 	</style>

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

@@ -26,6 +26,7 @@ import android.content.Context;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.os.Bundle;
+import android.os.Environment;
 
 import com.owncloud.android.authentication.PassCodeManager;
 import com.owncloud.android.datamodel.ThumbnailsCacheManager;
@@ -79,7 +80,8 @@ public class MainApp extends Application {
             // Set folder for store logs
             Log_OC.setLogDataFolder(dataFolder);
 
-            Log_OC.startLogging();
+            //TODO: to be changed/fixed whenever SD card support gets merged.
+            Log_OC.startLogging(Environment.getExternalStorageDirectory().getAbsolutePath());
             Log_OC.d("Debug", "start logging");
         }
 

+ 9 - 5
src/com/owncloud/android/authentication/AuthenticatorActivity.java

@@ -632,7 +632,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
         outState.putBoolean(KEY_AUTH_IS_FIRST_ATTEMPT_TAG, mIsFirstAuthAttempt);
 
         /// AsyncTask (User and password)
-        outState.putString(KEY_USERNAME, mUsernameInput.getText().toString());
+        outState.putString(KEY_USERNAME, mUsernameInput.getText().toString().trim());
         outState.putString(KEY_PASSWORD, mPasswordInput.getText().toString());
 
         if (mAsyncTask != null) {
@@ -886,14 +886,18 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
 
     private void showPassword() {
         mPasswordInput.setInputType(
-                InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
+                InputType.TYPE_CLASS_TEXT |
+                InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD |
+                InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS
         );
         showViewPasswordButton();
     }
 
     private void hidePassword() {
         mPasswordInput.setInputType(
-                InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD
+                InputType.TYPE_CLASS_TEXT |
+                InputType.TYPE_TEXT_VARIATION_PASSWORD |
+                InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS
         );
         showViewPasswordButton();
     }
@@ -944,7 +948,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
      */
     private void checkBasicAuthorization() {
         /// get basic credentials entered by user
-        String username = mUsernameInput.getText().toString();
+        String username = mUsernameInput.getText().toString().trim();
         String password = mPasswordInput.getText().toString();
 
         /// be gentle with the user
@@ -1053,7 +1057,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
                 success = createAccount(result);
             } else {
 
-                if (!mUsernameInput.getText().toString().equals(username)) {
+                if (!mUsernameInput.getText().toString().trim().equals(username)) {
                     // fail - not a new account, but an existing one; disallow
                     result = new RemoteOperationResult(ResultCode.ACCOUNT_NOT_THE_SAME);
                     mAuthToken = "";

+ 8 - 2
src/com/owncloud/android/datamodel/OCFile.java

@@ -580,8 +580,14 @@ public class OCFile implements Parcelable, Comparable<OCFile> {
      * @return 'True' if the file contains an image
      */
     public boolean isImage() {
-        return ((mMimeType != null && mMimeType.startsWith("image/")) ||
-                getMimeTypeFromName().startsWith("image/"));
+        String mimeType;
+        if (mMimeType != null) {
+            mimeType = mMimeType;
+        } else {
+            mimeType = getMimeTypeFromName();
+        }
+
+        return (mimeType.startsWith("image/") && !mimeType.contains("djvu"));
     }
 
     /**

+ 1 - 1
src/com/owncloud/android/files/services/ConnectivityActionReceiver.java

@@ -158,7 +158,7 @@ public class ConnectivityActionReceiver extends BroadcastReceiver {
                     networkType == ConnectivityManager.TYPE_WIFI;
 
             if (couldBeWifiAction) {
-                if (ConnectivityUtils.isAppConnectedViaWiFi(context)) {
+                if (ConnectivityUtils.isAppConnectedViaUnmeteredWiFi(context)) {
                     Log_OC.d(TAG, "WiFi connected");
                     wifiConnected(context);
                 } else {

+ 8 - 9
src/com/owncloud/android/files/services/FileUploader.java

@@ -950,17 +950,16 @@ public class FileUploader extends Service
 
             }
 
-        }
-
-        // generate new Thumbnail
-        final ThumbnailsCacheManager.ThumbnailGenerationTask task =
-                new ThumbnailsCacheManager.ThumbnailGenerationTask(mStorageManager, mCurrentAccount);
+            // generate new Thumbnail
+            final ThumbnailsCacheManager.ThumbnailGenerationTask task =
+                    new ThumbnailsCacheManager.ThumbnailGenerationTask(mStorageManager, mCurrentAccount);
 
-        Object[] params = new Object[2];
-        params[0] = new File(mCurrentUpload.getOriginalStoragePath());
-        params[1] = mCurrentUpload.getFile().getRemoteId();
+            Object[] params = new Object[2];
+            params[0] = new File(mCurrentUpload.getOriginalStoragePath());
+            params[1] = mCurrentUpload.getFile().getRemoteId();
 
-        task.execute(params);
+            task.execute(params);
+        }
     }
 
 

+ 2 - 2
src/com/owncloud/android/operations/UploadFileOperation.java

@@ -368,7 +368,7 @@ public class UploadFileOperation extends SyncOperation {
             if ( mChunked &&
                     (new File(mFile.getStoragePath())).length() >
                             ChunkedUploadRemoteFileOperation.CHUNK_SIZE ) {
-                mUploadOperation = new ChunkedUploadRemoteFileOperation(mFile.getStoragePath(),
+                mUploadOperation = new ChunkedUploadRemoteFileOperation(mContext, mFile.getStoragePath(),
                         mFile.getRemotePath(), mFile.getMimetype(), mFile.getEtagInConflict());
             } else {
                 mUploadOperation = new UploadRemoteFileOperation(mFile.getStoragePath(),
@@ -470,7 +470,7 @@ public class UploadFileOperation extends SyncOperation {
         );
         return (
             (delayInstantPicture || delayInstantVideo) &&
-            !ConnectivityUtils.isAppConnectedViaWiFi(mContext)
+            !ConnectivityUtils.isAppConnectedViaUnmeteredWiFi(mContext)
         );
     }
 

+ 166 - 30
src/com/owncloud/android/ui/activity/DrawerActivity.java

@@ -1,20 +1,23 @@
 /**
- *   ownCloud Android client application
+ *   Nextcloud Android client application
  *
  *   @author Andy Scherzinger
+ *   Copyright (C) 2016 Andy Scherzinger
+ *   Copyright (C) 2016 Nextcloud
  *   Copyright (C) 2016 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 free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ *   License as published by the Free Software Foundation; either
+ *   version 3 of the License, or any later version.
  *
  *   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.
+ *   GNU AFFERO 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/>.
+ *   You should have received a copy of the GNU Affero General Public
+ *   License along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 package com.owncloud.android.ui.activity;
@@ -35,6 +38,8 @@ import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
 import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.ProgressBar;
 import android.widget.TextView;
 
 import com.owncloud.android.MainApp;
@@ -42,7 +47,10 @@ import com.owncloud.android.R;
 import com.owncloud.android.authentication.AccountUtils;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.lib.common.OwnCloudAccount;
+import com.owncloud.android.lib.common.operations.RemoteOperation;
+import com.owncloud.android.lib.common.operations.RemoteOperationResult;
 import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.lib.resources.users.RemoteGetUserQuotaOperation;
 import com.owncloud.android.ui.TextDrawable;
 import com.owncloud.android.utils.DisplayUtils;
 
@@ -118,6 +126,21 @@ public abstract class DrawerActivity extends ToolbarActivity implements DisplayU
      */
     private Account[] mAvatars = new Account[3];
 
+    /**
+     * container layout of the quota view.
+     */
+    private LinearLayout mQuotaView;
+
+    /**
+     * progress bar of the quota view.
+     */
+    private ProgressBar mQuotaProgressBar;
+
+    /**
+     * text view of the quota view.
+     */
+    private TextView mQuotaTextView;
+
     /**
      * Initializes the drawer, its content and highlights the menu item with the given id.
      * This method needs to be called after the content view has been set.
@@ -138,30 +161,22 @@ public abstract class DrawerActivity extends ToolbarActivity implements DisplayU
 
         mNavigationView = (NavigationView) findViewById(R.id.nav_view);
         if (mNavigationView != null) {
-            mAccountChooserToggle = (ImageView) findNavigationViewChildById(R.id.drawer_account_chooser_toogle);
-            mAccountChooserToggle.setImageResource(R.drawable.ic_down);
-            mIsAccountChooserActive = false;
+            setupDrawerHeader();
 
-            mAccountMiddleAccountAvatar = (ImageView) findNavigationViewChildById(R.id.drawer_account_middle);
-            mAccountEndAccountAvatar = (ImageView) findNavigationViewChildById(R.id.drawer_account_end);
+            setupDrawerMenu(mNavigationView);
 
-            // on pre lollipop the light theme adds a black tint to icons with white coloring
-            // ruining the generic avatars, so tinting for icons is deactivated pre lollipop
-            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
-                mNavigationView.setItemIconTintList(null);
-            }
+            setupQuotaElement();
+        }
 
-            setupDrawerContent(mNavigationView);
+        setupDrawerToggle();
 
-            findNavigationViewChildById(R.id.drawer_active_user)
-                    .setOnClickListener(new View.OnClickListener() {
-                        @Override
-                        public void onClick(View v) {
-                            toggleAccountList();
-                        }
-                    });
-        }
+        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+    }
 
+    /**
+     * initializes and sets up the drawer toggle.
+     */
+    private void setupDrawerToggle() {
         mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.drawer_open, R.string.drawer_close) {
 
             /** Called when a drawer has settled in a completely closed state. */
@@ -185,7 +200,35 @@ public abstract class DrawerActivity extends ToolbarActivity implements DisplayU
         // Set the drawer toggle as the DrawerListener
         mDrawerLayout.setDrawerListener(mDrawerToggle);
         mDrawerToggle.setDrawerIndicatorEnabled(true);
-        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+    }
+
+    /**
+     * initializes and sets up the drawer header.
+     */
+    private void setupDrawerHeader() {
+        mAccountChooserToggle = (ImageView) findNavigationViewChildById(R.id.drawer_account_chooser_toogle);
+        mAccountChooserToggle.setImageResource(R.drawable.ic_down);
+        mIsAccountChooserActive = false;
+        mAccountMiddleAccountAvatar = (ImageView) findNavigationViewChildById(R.id.drawer_account_middle);
+        mAccountEndAccountAvatar = (ImageView) findNavigationViewChildById(R.id.drawer_account_end);
+
+        findNavigationViewChildById(R.id.drawer_active_user)
+                .setOnClickListener(new View.OnClickListener() {
+                    @Override
+                    public void onClick(View v) {
+                        toggleAccountList();
+                    }
+                });
+    }
+
+    /**
+     * setup quota elements of the drawer.
+     */
+    private void setupQuotaElement() {
+        mQuotaView = (LinearLayout) findViewById(R.id.drawer_quota);
+        mQuotaProgressBar = (ProgressBar) findViewById(R.id.drawer_quota_ProgressBar);
+        mQuotaTextView = (TextView) findViewById(R.id.drawer_quota_text);
+        DisplayUtils.colorPreLollipopHorizontalProgressBar(mQuotaProgressBar);
     }
 
     /**
@@ -193,7 +236,14 @@ public abstract class DrawerActivity extends ToolbarActivity implements DisplayU
      *
      * @param navigationView the drawers navigation view
      */
-    protected void setupDrawerContent(NavigationView navigationView) {
+    protected void setupDrawerMenu(NavigationView navigationView) {
+        // on pre lollipop the light theme adds a black tint to icons with white coloring
+        // ruining the generic avatars, so tinting for icons is deactivated pre lollipop
+        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
+            navigationView.setItemIconTintList(null);
+        }
+
+        // setup actions for drawer menu items
         navigationView.setNavigationItemSelectedListener(
                 new NavigationView.OnNavigationItemSelectedListener() {
                     @Override
@@ -243,9 +293,9 @@ public abstract class DrawerActivity extends ToolbarActivity implements DisplayU
 
         // handle correct state
         if (mIsAccountChooserActive) {
-            mNavigationView.getMenu().setGroupVisible(R.id.drawer_menu_accounts, true);
+            navigationView.getMenu().setGroupVisible(R.id.drawer_menu_accounts, true);
         } else {
-            mNavigationView.getMenu().setGroupVisible(R.id.drawer_menu_accounts, false);
+            navigationView.getMenu().setGroupVisible(R.id.drawer_menu_accounts, false);
         }
     }
 
@@ -446,6 +496,9 @@ public abstract class DrawerActivity extends ToolbarActivity implements DisplayU
             DisplayUtils.setAvatar(account, this,
                     mCurrentAccountAvatarRadiusDimension, getResources(), getStorageManager(),
                     findNavigationViewChildById(R.id.drawer_current_account));
+
+            // check and show quota info if available
+            getAndDisplayUserQuota();
         }
     }
 
@@ -474,6 +527,38 @@ public abstract class DrawerActivity extends ToolbarActivity implements DisplayU
         }
     }
 
+    /**
+     * shows or hides the quota UI elements.
+     *
+     * @param showQuota show/hide quota information
+     */
+    private void showQuota(boolean showQuota) {
+        if (showQuota) {
+            mQuotaView.setVisibility(View.VISIBLE);
+        } else {
+            mQuotaView.setVisibility(View.GONE);
+        }
+    }
+
+    /**
+     * configured the quota to be displayed.
+     *
+     * @param usedSpace the used space
+     * @param totalSpace the total space
+     * @param relative the percentage of space already used
+     */
+    private void setQuotaInformation(long usedSpace, long totalSpace, int relative) {
+        mQuotaProgressBar.setProgress(relative);
+        DisplayUtils.colorHorizontalProgressBar(mQuotaProgressBar, DisplayUtils.getRelativeInfoColor(this, relative));
+
+        mQuotaTextView.setText(String.format(
+                getString(R.string.drawer_quota),
+                DisplayUtils.bytesToHumanReadable(usedSpace),
+                DisplayUtils.bytesToHumanReadable(totalSpace)));
+
+        showQuota(true);
+    }
+
     /**
      * checks/highlights the provided menu item if the drawer has been initialized and the menu item exists.
      *
@@ -489,6 +574,57 @@ public abstract class DrawerActivity extends ToolbarActivity implements DisplayU
         }
     }
 
+    /**
+     * Retrieves and shows the user quota if available
+     */
+    private void getAndDisplayUserQuota() {
+        // set user space information
+        Thread t = new Thread(new Runnable() {
+            public void run() {
+
+                RemoteOperation getQuotaInfoOperation = new RemoteGetUserQuotaOperation();
+                RemoteOperationResult result = getQuotaInfoOperation.execute(
+                        AccountUtils.getCurrentOwnCloudAccount(DrawerActivity.this), DrawerActivity.this);
+
+                if (result.isSuccess() && result.getData() != null) {
+                    final RemoteGetUserQuotaOperation.Quota quota =
+                            (RemoteGetUserQuotaOperation.Quota) result.getData().get(0);
+
+                    final long used = quota.getUsed();
+                    final long total = quota.getTotal();
+                    final int relative = (int) Math.ceil(quota.getRelative());
+                    final long quotaValue = quota.getQuota();
+
+                    runOnUiThread(new Runnable() {
+                        @Override
+                        public void run() {
+                            if (quotaValue > 0
+                                    || quotaValue == RemoteGetUserQuotaOperation.QUOTA_LIMIT_INFO_NOT_AVAILABLE) {
+                                /**
+                                 * show quota in case
+                                 * it is available and calculated (> 0) or
+                                 * in case of legacy servers (==QUOTA_LIMIT_INFO_NOT_AVAILABLE)
+                                 */
+                                setQuotaInformation(used, total, relative);
+                            } else {
+                                /**
+                                 * quotaValue < 0 means special cases like
+                                 * {@link RemoteGetUserQuotaOperation.SPACE_NOT_COMPUTED},
+                                 * {@link RemoteGetUserQuotaOperation.SPACE_UNKNOWN} or
+                                 * {@link RemoteGetUserQuotaOperation.SPACE_UNLIMITED}
+                                 * thus don't display any quota information.
+                                 */
+                                showQuota(false);
+                            }
+                        }
+                    });
+                }
+            }
+        });
+
+        t.start();
+    }
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);

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

@@ -122,6 +122,8 @@ public class FileDisplayActivity extends HookActivity
     public static final int REQUEST_CODE__MOVE_FILES = REQUEST_CODE__LAST_SHARED + 3;
     public static final int REQUEST_CODE__COPY_FILES = REQUEST_CODE__LAST_SHARED + 4;
 
+    protected static final long DELAY_TO_REQUEST_REFRESH_OPERATION_LATER = DELAY_TO_REQUEST_OPERATIONS_LATER + 350;
+
     private static final String TAG = FileDisplayActivity.class.getSimpleName();
 
     private static final String TAG_LIST_OF_FILES = "LIST_OF_FILES";
@@ -133,6 +135,8 @@ public class FileDisplayActivity extends HookActivity
 
     private OCFile mWaitingToSend;
 
+    private Collection<MenuItem> mDrawerMenuItemstoShowHideList;
+
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -518,9 +522,10 @@ public class FileDisplayActivity extends HookActivity
     @Override
     public boolean onPrepareOptionsMenu(Menu menu) {
         boolean drawerOpen = isDrawerOpen();
-        menu.findItem(R.id.action_sort).setVisible(!drawerOpen);
-        menu.findItem(R.id.action_sync_account).setVisible(!drawerOpen);
-        menu.findItem(R.id.action_switch_view).setVisible(!drawerOpen);
+
+        for (MenuItem menuItem:mDrawerMenuItemstoShowHideList) {
+            menuItem.setVisible(!drawerOpen);
+        }
 
         return super.onPrepareOptionsMenu(menu);
     }
@@ -530,6 +535,14 @@ public class FileDisplayActivity extends HookActivity
         MenuInflater inflater = getMenuInflater();
         inflater.inflate(R.menu.main_menu, menu);
         menu.findItem(R.id.action_create_dir).setVisible(false);
+
+        // populate list of menu items to show/hide when drawer is opened/closed
+        mDrawerMenuItemstoShowHideList = new ArrayList<>(4);
+        mDrawerMenuItemstoShowHideList.add(menu.findItem(R.id.action_sort));
+        mDrawerMenuItemstoShowHideList.add(menu.findItem(R.id.action_sync_account));
+        mDrawerMenuItemstoShowHideList.add(menu.findItem(R.id.action_switch_view));
+        mDrawerMenuItemstoShowHideList.add(menu.findItem(R.id.action_search));
+
         return true;
     }
 
@@ -1627,7 +1640,7 @@ public class FileDisplayActivity extends HookActivity
                         // another window floating over
                     }
                 },
-                DELAY_TO_REQUEST_OPERATIONS_LATER
+                DELAY_TO_REQUEST_REFRESH_OPERATION_LATER
         );
 
     }

+ 77 - 10
src/com/owncloud/android/ui/activity/ReceiveExternalFilesActivity.java

@@ -42,6 +42,7 @@ import android.support.v4.app.FragmentManager;
 import android.support.v7.app.ActionBar;
 import android.support.v7.app.AlertDialog;
 import android.support.v7.app.AlertDialog.Builder;
+import android.view.LayoutInflater;
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
@@ -49,6 +50,7 @@ import android.view.View;
 import android.widget.AdapterView;
 import android.widget.AdapterView.OnItemClickListener;
 import android.widget.Button;
+import android.widget.EditText;
 import android.widget.ListView;
 import android.widget.Toast;
 
@@ -65,6 +67,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.RefreshFolderOperation;
+import com.owncloud.android.operations.UploadFileOperation;
 import com.owncloud.android.syncadapter.FileSyncAdapter;
 import com.owncloud.android.ui.adapter.UploaderAdapter;
 import com.owncloud.android.ui.asynctasks.CopyAndUploadContentUrisTask;
@@ -76,6 +79,9 @@ import com.owncloud.android.utils.DisplayUtils;
 import com.owncloud.android.utils.ErrorMessageAdapter;
 import com.owncloud.android.utils.FileStorageUtils;
 
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.LinkedList;
@@ -94,6 +100,7 @@ public class ReceiveExternalFilesActivity extends FileActivity
     private static final String TAG = ReceiveExternalFilesActivity.class.getSimpleName();
 
     private static final String FTAG_ERROR_FRAGMENT = "ERROR_FRAGMENT";
+    public static final String TEXT_FILE_SUFFIX = ".txt";
 
     private AccountManager mAccountManager;
     private Stack<String> mParents;
@@ -175,13 +182,6 @@ public class ReceiveExternalFilesActivity extends FileActivity
                     setAccount(accounts[0]);
                 }
             }
-
-        } else if (getIntent().getStringExtra(Intent.EXTRA_TEXT) != null) {
-            showErrorDialog(
-                R.string.uploader_error_message_received_piece_of_text,
-                R.string.uploader_error_title_no_file_to_upload
-            );
-
         } else {
             showErrorDialog(
                 R.string.uploader_error_message_no_file_to_upload,
@@ -342,8 +342,67 @@ public class ReceiveExternalFilesActivity extends FileActivity
                 for (String p : mParents) {
                     mUploadPath += p + OCFile.PATH_SEPARATOR;
                 }
-                Log_OC.d(TAG, "Uploading file to dir " + mUploadPath);
-                uploadFiles();
+
+                if (uploadTextSnippet()){
+                    LayoutInflater layout = LayoutInflater.from(getBaseContext());
+                    View view = layout.inflate(R.layout.edit_box_dialog, null);
+
+                    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
+                            this);
+
+                    alertDialogBuilder.setView(view);
+
+                    final EditText userInput = (EditText) view.findViewById(R.id.user_input);
+                    userInput.setText(TEXT_FILE_SUFFIX);
+
+                    alertDialogBuilder.setCancelable(false)
+                            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
+                                        public void onClick(DialogInterface dialog,int id) {
+                                            PrintWriter out;
+                                            try {
+                                                File f = File.createTempFile("nextcloud", TEXT_FILE_SUFFIX);
+                                                out = new PrintWriter(f);
+                                                out.println(getIntent().getStringExtra(Intent.EXTRA_TEXT));
+                                                out.close();
+
+                                                FileUploader.UploadRequester requester =
+                                                        new FileUploader.UploadRequester();
+
+                                                // verify if file name has suffix
+                                                String filename = userInput.getText().toString();
+
+                                                if (!filename.endsWith(TEXT_FILE_SUFFIX)){
+                                                    filename += TEXT_FILE_SUFFIX;
+                                                }
+
+                                                requester.uploadNewFile(
+                                                        getBaseContext(),
+                                                        getAccount(),
+                                                        f.getAbsolutePath(),
+                                                        mFile.getRemotePath() + filename,
+                                                        FileUploader.LOCAL_BEHAVIOUR_COPY,
+                                                        null,
+                                                        true,
+                                                        UploadFileOperation.CREATED_BY_USER
+                                                );
+                                            } catch (IOException e) {
+                                                Log_OC.w(TAG, e.getMessage());
+                                            }
+
+                                            finish();
+                                        }
+                                    })
+                            .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
+                                        public void onClick(DialogInterface dialog,int id) {
+                                            dialog.cancel();
+                                        }
+                                    });
+
+                    alertDialogBuilder.create().show();
+                } else {
+                    Log_OC.d(TAG, "Uploading file to dir " + mUploadPath);
+                    uploadFiles();
+                }
                 break;
 
             case R.id.uploader_cancel:
@@ -423,6 +482,10 @@ public class ReceiveExternalFilesActivity extends FileActivity
             Button btnChooseFolder = (Button) findViewById(R.id.uploader_choose_folder);
             btnChooseFolder.setOnClickListener(this);
 
+            if (uploadTextSnippet()){
+                btnChooseFolder.setText(R.string.uploader_btn_uploadTextSnippet_text);
+            }
+
             Button btnNewFolder = (Button) findViewById(R.id.uploader_cancel);
             btnNewFolder.setOnClickListener(this);
 
@@ -478,7 +541,11 @@ public class ReceiveExternalFilesActivity extends FileActivity
     }
 
     private boolean somethingToUpload() {
-        return (mStreamsToUpload != null && mStreamsToUpload.get(0) != null);
+        return (mStreamsToUpload != null && mStreamsToUpload.get(0) != null || uploadTextSnippet());
+    }
+
+    private boolean uploadTextSnippet(){
+        return getIntent().getStringExtra(Intent.EXTRA_TEXT) != null;
     }
 
     @SuppressLint("NewApi")

+ 10 - 7
src/com/owncloud/android/ui/activity/ToolbarActivity.java

@@ -1,20 +1,23 @@
 /**
- *   ownCloud Android client application
+ *   Nextcloud Android client application
  *
  *   @author Andy Scherzinger
+ *   Copyright (C) 2016 Andy Scherzinger
+ *   Copyright (C) 2016 Nextcloud
  *   Copyright (C) 2016 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 free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ *   License as published by the Free Software Foundation; either
+ *   version 3 of the License, or any later version.
  *
  *   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.
+ *   GNU AFFERO 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/>.
+ *   You should have received a copy of the GNU Affero General Public
+ *   License along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 package com.owncloud.android.ui.activity;

+ 11 - 18
src/com/owncloud/android/ui/activity/UploadFilesActivity.java

@@ -94,11 +94,9 @@ public class UploadFilesActivity extends FileActivity implements
         super.onCreate(savedInstanceState);
 
         if(savedInstanceState != null) {
-            mCurrentDir = new File(savedInstanceState.getString(
-                    UploadFilesActivity.KEY_DIRECTORY_PATH));
-            mSelectAll = savedInstanceState.getBoolean(
-                    UploadFilesActivity.KEY_ALL_SELECTED, false);
-
+            mCurrentDir = new File(savedInstanceState.getString(UploadFilesActivity.KEY_DIRECTORY_PATH, Environment
+                    .getExternalStorageDirectory().getAbsolutePath()));
+            mSelectAll = savedInstanceState.getBoolean(UploadFilesActivity.KEY_ALL_SELECTED, false);
         } else {
             mCurrentDir = Environment.getExternalStorageDirectory();
         }
@@ -354,8 +352,7 @@ public class UploadFilesActivity extends FileActivity implements
         ActionBar actionBar = getSupportActionBar();
         actionBar.setDisplayHomeAsUpEnabled(true);
     }
-    
-    
+
     /**
      * {@inheritDoc}
      */
@@ -372,7 +369,6 @@ public class UploadFilesActivity extends FileActivity implements
         return mCurrentDir;
     }
 
-
     /**
      * Performs corresponding action when user presses 'Cancel' or 'Upload' button
      * 
@@ -390,7 +386,6 @@ public class UploadFilesActivity extends FileActivity implements
         }
     }
 
-
     /**
      * Asynchronous task checking if there is space enough to copy all the files chosen
      * to upload into the ownCloud local folder.
@@ -409,7 +404,6 @@ public class UploadFilesActivity extends FileActivity implements
             mCurrentDialog.show(getSupportFragmentManager(), WAIT_DIALOG_TAG);
         }
         
-        
         /**
          * Checks the available space
          * 
@@ -424,21 +418,23 @@ public class UploadFilesActivity extends FileActivity implements
                 File localFile = new File(localPath);
                 total += localFile.length();
             }
-            return (new Boolean(FileStorageUtils.getUsableSpace(mAccountOnCreation.name) >= total));
+            return FileStorageUtils.getUsableSpace(mAccountOnCreation.name) >= total;
         }
 
         /**
          * Updates the activity UI after the check of space is done.
-         * 
+         *
          * If there is not space enough. shows a new dialog to query the user if wants to move the
          * files instead of copy them.
-         * 
+         *
          * @param result        'True' when there is space enough to copy all the selected files.
          */
         @Override
         protected void onPostExecute(Boolean result) {
-            mCurrentDialog.dismiss();
-            mCurrentDialog = null;
+            if(mCurrentDialog != null) {
+                mCurrentDialog.dismiss();
+                mCurrentDialog = null;
+            }
             
             if (result) {
                 // return the list of selected files (success)
@@ -480,20 +476,17 @@ public class UploadFilesActivity extends FileActivity implements
         }
     }
 
-
     @Override
     public void onNeutral(String callerTag) {
         Log_OC.d(TAG, "Phantom neutral button in dialog was clicked; dialog tag is " + callerTag);
     }
 
-
     @Override
     public void onCancel(String callerTag) {
         /// nothing to do; don't finish, let the user change the selection
         Log_OC.d(TAG, "Negative button in dialog was clicked; dialog tag is " + callerTag);
     }
 
-
     @Override
     protected void onAccountSet(boolean stateWasRecovered) {
         super.onAccountSet(stateWasRecovered);

+ 2 - 1
src/com/owncloud/android/ui/adapter/ExpandableUploadListAdapter.java

@@ -98,6 +98,7 @@ public class ExpandableUploadListAdapter extends BaseExpandableListAdapter imple
                     if (!upload2.getUploadStatus().equals(UploadStatus.UPLOAD_IN_PROGRESS)) {
                         return -1;
                     }
+                    // both are in progress
                     FileUploader.FileUploaderBinder binder = mParentActivity.getFileUploaderBinder();
                     if (binder != null) {
                         if (binder.isUploadingNow(upload1)) {
@@ -109,7 +110,7 @@ public class ExpandableUploadListAdapter extends BaseExpandableListAdapter imple
                 } else if (upload2.getUploadStatus().equals(UploadStatus.UPLOAD_IN_PROGRESS)) {
                     return 1;
                 }
-                if (upload1.getUploadEndTimestamp() == 0) {
+                if (upload1.getUploadEndTimestamp() == 0 || upload2.getUploadEndTimestamp() == 0) {
                     return compareUploadId(upload1, upload2);
                 } else {
                     return compareUpdateTime(upload1, upload2);

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

@@ -61,9 +61,10 @@ import java.util.Vector;
  * This Adapter populates a ListView with all files and folders in an ownCloud
  * instance.
  */
-public class FileListListAdapter extends BaseAdapter implements ListAdapter {
+public class FileListListAdapter extends BaseAdapter implements FilterableListAdapter {
 
     private Context mContext;
+    private Vector<OCFile> mFilesAll = new Vector<OCFile>();
     private Vector<OCFile> mFiles = null;
     private boolean mJustFolders;
 
@@ -402,6 +403,10 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
         }
 
         mFiles = FileStorageUtils.sortOcFolder(mFiles);
+
+        mFilesAll.clear();
+        mFilesAll.addAll(mFiles);
+
         notifyDataSetChanged();
     }
 
@@ -452,4 +457,21 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
         return files;
     }
 
+    public void filter(String text){
+        if(text.isEmpty()){
+            mFiles.clear();
+            mFiles.addAll(mFilesAll);
+        } else {
+            ArrayList<OCFile> result = new ArrayList<>();
+            text = text.toLowerCase();
+            for(OCFile file: mFilesAll){
+                if(file.getFileName().toLowerCase().contains(text)){
+                    result.add(file);
+                }
+            }
+            mFiles.clear();
+            mFiles.addAll(result);
+        }
+        notifyDataSetChanged();
+    }
 }

+ 27 - 0
src/com/owncloud/android/ui/adapter/FilterableListAdapter.java

@@ -0,0 +1,27 @@
+/**
+ *   Nextcloud Android client application
+ *
+ *   Copyright (C) 2016 Tobias Kaminsky
+ *   Copyright (C) 2016 Nextcloud.
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ *   License as published by the Free Software Foundation; either
+ *   version 3 of the License, or any later version.
+ *
+ *   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 AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ *   You should have received a copy of the GNU Affero General Public
+ *   License along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package com.owncloud.android.ui.adapter;
+
+import android.widget.ListAdapter;
+
+public interface FilterableListAdapter extends ListAdapter {
+    void filter(String text);
+}

+ 28 - 4
src/com/owncloud/android/ui/adapter/LocalFileListAdapter.java

@@ -27,7 +27,6 @@ import android.view.View;
 import android.view.ViewGroup;
 import android.widget.BaseAdapter;
 import android.widget.ImageView;
-import android.widget.ListAdapter;
 import android.widget.ListView;
 import android.widget.TextView;
 
@@ -41,21 +40,24 @@ import com.owncloud.android.utils.FileStorageUtils;
 import com.owncloud.android.utils.MimetypeIconUtil;
 
 import java.io.File;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Comparator;
+import java.util.Vector;
 
 /**
  * This Adapter populates a ListView with all files and directories contained
  * in a local directory
  */
-public class LocalFileListAdapter extends BaseAdapter implements ListAdapter {
+public class LocalFileListAdapter extends BaseAdapter implements FilterableListAdapter {
 
     private static final String TAG = LocalFileListAdapter.class.getSimpleName();
 
     private Context mContext;
     private File mDirectory;
     private File[] mFiles = null;
-    
+    private Vector<File> mFilesAll = new Vector<File>();
+
     public LocalFileListAdapter(File directory, Context context) {
         mContext = context;
 
@@ -106,7 +108,7 @@ public class LocalFileListAdapter extends BaseAdapter implements ListAdapter {
                     .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
             view = inflator.inflate(R.layout.list_item, null);
         }
-        if (mFiles != null && mFiles.length > position) {
+        if (mFiles != null && mFiles.length > position && mFiles[position] != null) {
             File file = mFiles[position];
             
             TextView fileName = (TextView) view.findViewById(R.id.Filename);
@@ -245,6 +247,12 @@ public class LocalFileListAdapter extends BaseAdapter implements ListAdapter {
             });
 
             mFiles = FileStorageUtils.sortLocalFolder(mFiles);
+
+            mFilesAll.clear();
+
+            for (File mFile : mFiles) {
+                mFilesAll.add(mFile);
+            }
         }
         notifyDataSetChanged();
     }
@@ -259,4 +267,20 @@ public class LocalFileListAdapter extends BaseAdapter implements ListAdapter {
         mFiles = FileStorageUtils.sortLocalFolder(mFiles);
         notifyDataSetChanged();
     }
+
+    public void filter(String text){
+        if(text.isEmpty()){
+            mFiles = mFilesAll.toArray(new File[1]);
+        } else {
+            ArrayList<File> result = new ArrayList<>();
+            text = text.toLowerCase();
+            for (File file: mFilesAll) {
+                if (file.getName().toLowerCase().contains(text)) {
+                    result.add(file);
+                }
+            }
+            mFiles = result.toArray(new File[1]);
+        }
+        notifyDataSetChanged();
+    }
 }

+ 28 - 6
src/com/owncloud/android/ui/fragment/ExtendedListFragment.java

@@ -22,8 +22,13 @@ package com.owncloud.android.ui.fragment;
 
 import android.os.Bundle;
 import android.support.v4.app.Fragment;
+import android.support.v4.view.MenuItemCompat;
 import android.support.v4.widget.SwipeRefreshLayout;
+import android.support.v7.widget.SearchView;
 import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.AbsListView;
@@ -39,14 +44,14 @@ import com.owncloud.android.R;
 import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.ui.ExtendedListView;
 import com.owncloud.android.ui.activity.OnEnforceableRefreshListener;
-import com.owncloud.android.ui.adapter.FileListListAdapter;
+import com.owncloud.android.ui.adapter.FilterableListAdapter;
 
 import java.util.ArrayList;
 
 import third_parties.in.srain.cube.GridViewWithHeaderAndFooter;
 
 public class ExtendedListFragment extends Fragment
-        implements OnItemClickListener, OnEnforceableRefreshListener {
+        implements OnItemClickListener, OnEnforceableRefreshListener, SearchView.OnQueryTextListener {
 
     protected static final String TAG = ExtendedListFragment.class.getSimpleName();
 
@@ -83,9 +88,9 @@ public class ExtendedListFragment extends Fragment
     private GridViewWithHeaderAndFooter mGridView;
     private View mGridFooterView;
 
-    private ListAdapter mAdapter;
+    private FilterableListAdapter mAdapter;
 
-    protected void setListAdapter(ListAdapter listAdapter) {
+    protected void setListAdapter(FilterableListAdapter listAdapter) {
         mAdapter = listAdapter;
         mCurrentListView.setAdapter(listAdapter);
         mCurrentListView.invalidateViews();
@@ -134,8 +139,25 @@ public class ExtendedListFragment extends Fragment
     public boolean isGridEnabled(){
         return (mCurrentListView == mGridView);
     }
-    
-    
+
+    @Override
+    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+        final MenuItem item = menu.findItem(R.id.action_search);
+        final SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);
+        searchView.setOnQueryTextListener(this);
+    }
+
+    public boolean onQueryTextChange(String query) {
+        mAdapter.filter(query);
+        return true;
+    }
+
+    @Override
+    public boolean onQueryTextSubmit(String query) {
+        mAdapter.filter(query);
+        return true;
+    }
+
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
                              Bundle savedInstanceState) {

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

@@ -55,6 +55,12 @@ public class LocalFileListFragment extends ExtendedListFragment {
     /** Adapter to connect the data from the directory with the View object */
     private LocalFileListAdapter mAdapter = null;
 
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setHasOptionsMenu(true);
+    }
+
     /**
      * {@inheritDoc}
      */

+ 4 - 2
src/com/owncloud/android/utils/ConnectivityUtils.java

@@ -24,6 +24,7 @@ import android.content.Intent;
 import android.content.IntentFilter;
 import android.net.ConnectivityManager;
 import android.net.NetworkInfo;
+import android.support.v4.net.ConnectivityManagerCompat;
 import android.os.BatteryManager;
 
 import com.owncloud.android.lib.common.utils.Log_OC;
@@ -32,12 +33,13 @@ public class ConnectivityUtils {
 
     private final static String TAG = ConnectivityUtils.class.getName();
 
-    public static boolean isAppConnectedViaWiFi(Context context) {
+    public static boolean isAppConnectedViaUnmeteredWiFi(Context context) {
         ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
         boolean result =
                 cm != null && cm.getActiveNetworkInfo() != null
                 && cm.getActiveNetworkInfo().getType() == ConnectivityManager.TYPE_WIFI
-                && cm.getActiveNetworkInfo().getState() == NetworkInfo.State.CONNECTED;
+                && cm.getActiveNetworkInfo().getState() == NetworkInfo.State.CONNECTED
+                && !ConnectivityManagerCompat.isActiveNetworkMetered(cm);
         Log_OC.d(TAG, "is AppConnectedViaWifi returns " + result);
         return result;
     }

+ 76 - 50
src/com/owncloud/android/utils/DisplayUtils.java

@@ -1,23 +1,25 @@
 /**
- *   ownCloud Android client application
+ *   Nextcloud Android client application
  *
+ *   @author Andy Scherzinger
  *   @author Bartek Przybylski
  *   @author David A. Velasco
  *   Copyright (C) 2011  Bartek Przybylski
  *   Copyright (C) 2015 ownCloud Inc.
+ *   Copyright (C) 2016 Andy Scherzinger
  *
- *   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 free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ *   License as published by the Free Software Foundation; either
+ *   version 3 of the License, or any later version.
  *
  *   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/>.
+ *   GNU AFFERO GENERAL PUBLIC LICENSE for more details.
  *
+ *   You should have received a copy of the GNU Affero General Public
+ *   License along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 package com.owncloud.android.utils;
@@ -37,7 +39,6 @@ import android.support.design.widget.Snackbar;
 import android.support.v4.app.FragmentActivity;
 import android.support.v4.content.ContextCompat;
 import android.text.format.DateUtils;
-import android.view.Display;
 import android.view.View;
 import android.widget.ProgressBar;
 import android.widget.SeekBar;
@@ -60,20 +61,21 @@ import java.util.HashMap;
 import java.util.Map;
 
 /**
- * A helper class for some string operations.
+ * A helper class for UI/display related operations.
  */
 public class DisplayUtils {
     private static final String TAG = DisplayUtils.class.getSimpleName();
-    
-    private static final String OWNCLOUD_APP_NAME = "ownCloud";
-    
+
     private static final String[] sizeSuffixes = { "B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB" };
     private static final int[] sizeScales = { 0, 0, 1, 1, 1, 2, 2, 2, 2 };
+    public static final int RELATIVE_THRESHOLD_WARNING = 90;
+    public static final int RELATIVE_THRESHOLD_CRITICAL = 95;
+    public static final String MIME_TYPE_UNKNOWN = "Unknown type";
 
     private static Map<String, String> mimeType2HumanReadable;
 
     static {
-        mimeType2HumanReadable = new HashMap<String, String>();
+        mimeType2HumanReadable = new HashMap<>();
         // images
         mimeType2HumanReadable.put("image/jpeg", "JPEG image");
         mimeType2HumanReadable.put("image/jpg", "JPEG image");
@@ -94,19 +96,19 @@ public class DisplayUtils {
      *     <li>rounds the size based on the suffix to 0,1 or 2 decimals</li>
      * </ul>
      *
-     * @param bytes Input file size
-     * @return Like something readable like "12 MB"
+     * @param bytes        Input file size
+     * @return something readable like "12 MB"
      */
     public static String bytesToHumanReadable(long bytes) {
         double result = bytes;
-        int attachedSuff = 0;
-        while (result > 1024 && attachedSuff < sizeSuffixes.length) {
+        int suffixIndex = 0;
+        while (result > 1024 && suffixIndex < sizeSuffixes.length) {
             result /= 1024.;
-            attachedSuff++;
+            suffixIndex++;
         }
 
         return new BigDecimal(result).setScale(
-                sizeScales[attachedSuff], BigDecimal.ROUND_HALF_UP) + " " + sizeSuffixes[attachedSuff];
+                sizeScales[suffixIndex], BigDecimal.ROUND_HALF_UP) + " " + sizeSuffixes[suffixIndex];
     }
 
     /**
@@ -114,7 +116,7 @@ public class DisplayUtils {
      * like "JPG image".
      * 
      * @param mimetype MIME type to convert
-     * @return A human friendly version of the MIME type
+     * @return A human friendly version of the MIME type, {@link #MIME_TYPE_UNKNOWN} if it can't be converted
      */
     public static String convertMIMEtoPrettyPrint(String mimetype) {
         if (mimeType2HumanReadable.containsKey(mimetype)) {
@@ -122,11 +124,12 @@ public class DisplayUtils {
         }
         if (mimetype.split("/").length >= 2)
             return mimetype.split("/")[1].toUpperCase() + " file";
-        return "Unknown type";
+        return MIME_TYPE_UNKNOWN;
     }
 
     /**
      * Converts Unix time to human readable format
+     *
      * @param milliseconds that have passed since 01/01/1970
      * @return The human readable time for the users locale
      */
@@ -138,6 +141,7 @@ public class DisplayUtils {
     
     /**
      * Converts an internationalized domain name (IDN) in an URL to and from ASCII/Unicode.
+     *
      * @param url the URL where the domain name should be converted
      * @param toASCII if true converts from Unicode to ASCII, if false converts from ASCII to Unicode
      * @return the URL containing the converted domain name
@@ -155,9 +159,9 @@ public class DisplayUtils {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
             // Find host name after '//' or '@'
             int hostStart = 0;
-            if  (urlNoDots.indexOf("//") != -1) {
+            if (urlNoDots.contains("//")) {
                 hostStart = url.indexOf("//") + "//".length();
-            } else if (url.indexOf("@") != -1) {
+            } else if (url.contains("@")) {
                 hostStart = url.indexOf("@") + "@".length();
             }
 
@@ -207,17 +211,33 @@ public class DisplayUtils {
                 DateUtils.WEEK_IN_MILLIS, 0);
     }
 
-    @SuppressWarnings("deprecation")
-    public static CharSequence getRelativeDateTimeString (
-            Context c, long time, long minResolution, long transitionResolution, int flags
-            ){
-        
+    /**
+     * determines the info level color based on certain thresholds
+     * {@link #RELATIVE_THRESHOLD_WARNING} and {@link #RELATIVE_THRESHOLD_CRITICAL}.
+     *
+     * @param context  the app's context
+     * @param relative relative value for which the info level color should be looked up
+     * @return info level color
+     */
+    public static int getRelativeInfoColor(Context context, int relative) {
+        if (relative < RELATIVE_THRESHOLD_WARNING) {
+            return context.getResources().getColor(R.color.infolevel_info);
+        } else if (relative >= RELATIVE_THRESHOLD_WARNING && relative < RELATIVE_THRESHOLD_CRITICAL) {
+            return context.getResources().getColor(R.color.infolevel_warning);
+        } else {
+            return context.getResources().getColor(R.color.infolevel_critical);
+        }
+    }
+
+    public static CharSequence getRelativeDateTimeString(
+            Context c, long time, long minResolution, long transitionResolution, int flags) {
+
         CharSequence dateString = "";
-        
+
         // in Future
-        if (time > System.currentTimeMillis()){
+        if (time > System.currentTimeMillis()) {
             return DisplayUtils.unixTimeToHumanReadable(time);
-        } 
+        }
         // < 60 seconds -> seconds ago
         else if ((System.currentTimeMillis() - time) < 60 * 1000) {
             return c.getString(R.string.file_list_seconds_ago);
@@ -238,8 +258,9 @@ public class DisplayUtils {
     }
 
     /**
-     * Update the passed path removing the last "/" if it is not the root folder
-     * @param path
+     * Update the passed path removing the last "/" if it is not the root folder.
+     *
+     * @param path the path to be trimmed
      */
     public static String getPathWithoutLastSlash(String path) {
 
@@ -250,22 +271,16 @@ public class DisplayUtils {
         return path;
     }
 
-
     /**
-     * Gets the screen size in pixels in a backwards compatible way
+     * Gets the screen size in pixels.
      *
-     * @param caller        Activity calling; needed to get access to the {@link android.view.WindowManager}
-     * @return              Size in pixels of the screen, or default {@link Point} if caller is null
+     * @param caller Activity calling; needed to get access to the {@link android.view.WindowManager}
+     * @return Size in pixels of the screen, or default {@link Point} if caller is null
      */
     public static Point getScreenSize(Activity caller) {
         Point size = new Point();
         if (caller != null) {
-            Display display = caller.getWindowManager().getDefaultDisplay();
-            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB_MR2) {
-                display.getSize(size);
-            } else {
-                size.set(display.getWidth(), display.getHeight());
-            }
+            caller.getWindowManager().getDefaultDisplay().getSize(size);
         }
         return size;
     }
@@ -277,7 +292,18 @@ public class DisplayUtils {
      */
     public static void colorPreLollipopHorizontalProgressBar(ProgressBar progressBar) {
         if (progressBar != null && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
-            int color = progressBar.getResources().getColor(R.color.color_accent);
+            colorHorizontalProgressBar(progressBar, progressBar.getResources().getColor(R.color.color_accent));
+        }
+    }
+
+    /**
+     * sets the coloring of the given progress bar to color_accent.
+     *
+     * @param progressBar the progress bar to be colored
+     * @param color       the color to be used
+     */
+    public static void colorHorizontalProgressBar(ProgressBar progressBar, @ColorInt int color) {
+        if (progressBar != null) {
             progressBar.getIndeterminateDrawable().setColorFilter(color, PorterDuff.Mode.SRC_IN);
             progressBar.getProgressDrawable().setColorFilter(color, PorterDuff.Mode.SRC_IN);
         }
@@ -301,9 +327,9 @@ public class DisplayUtils {
     }
 
     /**
-     * set the owncloud standard colors for the snackbar.
+     * set the Nextcloud standard colors for the snackbar.
      *
-     * @param context the context relevant for setting the color according to the context's theme
+     * @param context  the context relevant for setting the color according to the context's theme
      * @param snackbar the snackbar to be colored
      */
     public static void colorSnackbar(Context context, Snackbar snackbar) {
@@ -315,7 +341,7 @@ public class DisplayUtils {
      * Sets the color of the status bar to {@code color} on devices with OS version lollipop or higher.
      *
      * @param fragmentActivity fragment activity
-     * @param color the color
+     * @param color            the color
      */
     public static void colorStatusBar(FragmentActivity fragmentActivity, @ColorInt int color) {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
@@ -326,11 +352,11 @@ public class DisplayUtils {
     /**
      * Sets the color of the progressbar to {@code color} within the given toolbar.
      *
-     * @param activity the toolbar activity instance
+     * @param activity         the toolbar activity instance
      * @param progressBarColor the color to be used for the toolbar's progress bar
      */
     public static void colorToolbarProgressBar(FragmentActivity activity, int progressBarColor) {
-        if(activity instanceof ToolbarActivity) {
+        if (activity instanceof ToolbarActivity) {
             ((ToolbarActivity) activity).setProgressBarBackgroundColor(progressBarColor);
         }
     }