Explorar o código

Merge remote-tracking branch 'origin/userTheming' into userTheming

tobiasKaminsky %!s(int64=8) %!d(string=hai) anos
pai
achega
2eaecb41b5
Modificáronse 86 ficheiros con 3477 adicións e 1380 borrados
  1. 3 3
      build.gradle
  2. 12 11
      drawable_resources/ic_list_empty_create_folder.svg
  3. 11 12
      drawable_resources/ic_list_empty_folder.svg
  4. 11 10
      drawable_resources/ic_list_empty_upload.svg
  5. 1 1
      gradle/wrapper/gradle-wrapper.properties
  6. 43 3
      src/main/java/com/owncloud/android/datamodel/ArbitraryDataProvider.java
  7. 191 50
      src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java
  8. 30 0
      src/main/java/com/owncloud/android/datamodel/VirtualFolderType.java
  9. 7 1
      src/main/java/com/owncloud/android/db/ProviderMeta.java
  10. 8 3
      src/main/java/com/owncloud/android/operations/DetectAuthenticationMethodOperation.java
  11. 61 10
      src/main/java/com/owncloud/android/providers/FileContentProvider.java
  12. 58 7
      src/main/java/com/owncloud/android/services/AdvancedFileAlterationListener.java
  13. 55 2
      src/main/java/com/owncloud/android/services/ContactsImportJob.java
  14. 7 3
      src/main/java/com/owncloud/android/services/observer/SyncedFolderObserverService.java
  15. 31 13
      src/main/java/com/owncloud/android/ui/activity/ActivitiesListActivity.java
  16. 56 27
      src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java
  17. 66 35
      src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java
  18. 27 6
      src/main/java/com/owncloud/android/ui/activity/FolderSyncActivity.java
  19. 83 21
      src/main/java/com/owncloud/android/ui/activity/Preferences.java
  20. 241 29
      src/main/java/com/owncloud/android/ui/adapter/ActivityListAdapter.java
  21. 89 31
      src/main/java/com/owncloud/android/ui/adapter/FileListListAdapter.java
  22. 15 9
      src/main/java/com/owncloud/android/ui/adapter/FolderSyncAdapter.java
  23. 19 18
      src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java
  24. 211 111
      src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java
  25. 142 74
      src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactListFragment.java
  26. 13 0
      src/main/java/com/owncloud/android/ui/interfaces/ActivityListInterface.java
  27. 28 14
      src/main/java/com/owncloud/android/ui/preview/PreviewImageActivity.java
  28. 40 2
      src/main/java/com/owncloud/android/ui/preview/PreviewImagePagerAdapter.java
  29. 8 0
      src/main/java/com/owncloud/android/utils/DisplayUtils.java
  30. 36 0
      src/main/java/com/owncloud/android/utils/glide/CustomGlideStreamLoader.java
  31. 101 0
      src/main/java/com/owncloud/android/utils/glide/HttpStreamFetcher.java
  32. 53 0
      src/main/java/third_parties/ezvcard_android/ContactOperations.java
  33. BIN=BIN
      src/main/res/drawable-hdpi/ic_list_empty_create_folder.png
  34. BIN=BIN
      src/main/res/drawable-hdpi/ic_list_empty_folder.png
  35. BIN=BIN
      src/main/res/drawable-hdpi/ic_list_empty_upload.png
  36. BIN=BIN
      src/main/res/drawable-mdpi/ic_list_empty_create_folder.png
  37. BIN=BIN
      src/main/res/drawable-mdpi/ic_list_empty_folder.png
  38. BIN=BIN
      src/main/res/drawable-mdpi/ic_list_empty_upload.png
  39. BIN=BIN
      src/main/res/drawable-xhdpi/ic_list_empty_create_folder.png
  40. BIN=BIN
      src/main/res/drawable-xhdpi/ic_list_empty_folder.png
  41. BIN=BIN
      src/main/res/drawable-xhdpi/ic_list_empty_upload.png
  42. BIN=BIN
      src/main/res/drawable-xxhdpi/ic_list_empty_create_folder.png
  43. BIN=BIN
      src/main/res/drawable-xxhdpi/ic_list_empty_folder.png
  44. BIN=BIN
      src/main/res/drawable-xxhdpi/ic_list_empty_upload.png
  45. BIN=BIN
      src/main/res/drawable-xxxhdpi/ic_list_empty_create_folder.png
  46. BIN=BIN
      src/main/res/drawable-xxxhdpi/ic_list_empty_folder.png
  47. BIN=BIN
      src/main/res/drawable-xxxhdpi/ic_list_empty_upload.png
  48. 0 27
      src/main/res/drawable/main_header_bg.xml
  49. 1 1
      src/main/res/drawable/round_button.xml
  50. 9 3
      src/main/res/layout/activity_list_item.xml
  51. 17 0
      src/main/res/layout/activity_list_item_header.xml
  52. 40 27
      src/main/res/layout/contactlist_fragment.xml
  53. 1 1
      src/main/res/layout/edit_share_layout.xml
  54. 8 7
      src/main/res/layout/empty_list.xml
  55. 5 2
      src/main/res/layout/folder_sync_item_header.xml
  56. 4 3
      src/main/res/layout/folder_sync_layout.xml
  57. 5 5
      src/main/res/layout/list_fragment.xml
  58. 1 1
      src/main/res/layout/share_file_layout.xml
  59. 0 3
      src/main/res/values-ast/strings.xml
  60. 32 1
      src/main/res/values-cs-rCZ/strings.xml
  61. 7 2
      src/main/res/values-de-rDE/strings.xml
  62. 12 7
      src/main/res/values-de/strings.xml
  63. 12 1
      src/main/res/values-el/strings.xml
  64. 7 2
      src/main/res/values-en-rGB/strings.xml
  65. 666 255
      src/main/res/values-es-rAR/strings.xml
  66. 12 7
      src/main/res/values-es-rMX/strings.xml
  67. 14 1
      src/main/res/values-es/strings.xml
  68. 5 0
      src/main/res/values-fr/strings.xml
  69. 666 318
      src/main/res/values-gl/strings.xml
  70. 2 5
      src/main/res/values-is/strings.xml
  71. 70 132
      src/main/res/values-it/strings.xml
  72. 0 1
      src/main/res/values-ja-rJP/strings.xml
  73. 17 12
      src/main/res/values-nb-rNO/strings.xml
  74. 7 2
      src/main/res/values-nl/strings.xml
  75. 4 0
      src/main/res/values-pl/strings.xml
  76. 8 3
      src/main/res/values-pt-rBR/strings.xml
  77. 9 4
      src/main/res/values-ru/strings.xml
  78. 1 4
      src/main/res/values-sq/strings.xml
  79. 12 7
      src/main/res/values-tr/strings.xml
  80. 1 5
      src/main/res/values-zh-rCN/strings.xml
  81. 0 2
      src/main/res/values/colors.xml
  82. 15 3
      src/main/res/values/setup.xml
  83. 6 2
      src/main/res/values/strings.xml
  84. 4 4
      src/main/res/values/styles.xml
  85. 23 9
      src/main/res/xml/preferences.xml
  86. 17 5
      src/modified/res/values/setup.xml

+ 3 - 3
build.gradle

@@ -13,7 +13,7 @@ buildscript {
         }
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.3.1'
+        classpath 'com.android.tools.build:gradle:2.3.2'
         classpath 'com.google.gms:google-services:3.0.0'
     }
 }
@@ -178,7 +178,7 @@ dependencies {
     compile name: 'touch-image-view'
     compile 'com.android.support:multidex:1.0.1'
 
-    compile 'com.github.nextcloud:android-library:1.0.18'
+    compile 'com.github.nextcloud:android-library:1.0.21'
     compile "com.android.support:support-v4:${supportLibraryVersion}"
     compile "com.android.support:design:${supportLibraryVersion}"
     compile 'com.jakewharton:disklrucache:2.0.2'
@@ -238,4 +238,4 @@ tasks.withType(Test) {
 }
 
 // uncomment for gplay, modified (must be at the bottom)
-//apply plugin: 'com.google.gms.google-services'
+//apply plugin: 'com.google.gms.google-services'

+ 12 - 11
drawable_resources/ic_list_empty_create_folder.svg

@@ -7,15 +7,15 @@
    xmlns="http://www.w3.org/2000/svg"
    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   height="16"
-   width="16"
+   height="17.066668"
+   width="17.066668"
    version="1"
    id="svg2"
-   inkscape:version="0.91 r13725"
+   inkscape:version="0.92.1 r15371"
    sodipodi:docname="ic_list_empty_create_folder.svg"
-   inkscape:export-filename="C:\DEV\src\Android\Nextcloud\designTweaks\res\drawable-mdpi\ic_list_empty_create_folder.png"
-   inkscape:export-xdpi="405"
-   inkscape:export-ydpi="405">
+   inkscape:export-filename="C:\DEV\src\Android\Nextcloud\colorFolderNew\src\main\res\drawable-xxxhdpi\ic_list_empty_create_folder.png"
+   inkscape:export-xdpi="1620"
+   inkscape:export-ydpi="1620">
   <metadata
      id="metadata10">
     <rdf:RDF>
@@ -44,14 +44,15 @@
      id="namedview6"
      showgrid="false"
      inkscape:zoom="29.5"
-     inkscape:cx="-12.171603"
-     inkscape:cy="13.899981"
+     inkscape:cx="4.4894139"
+     inkscape:cy="8.4762522"
      inkscape:window-x="-9"
      inkscape:window-y="-9"
      inkscape:window-maximized="1"
      inkscape:current-layer="svg2" />
   <path
-     style="fill:#99cde9;fill-opacity:1"
-     d="M 1.4570312 1.9960938 C 1.2070312 1.9960938 0.99609375 2.2070313 0.99609375 2.4570312 L 0.99609375 13.537109 C 0.99609375 13.797109 1.1990312 13.996094 1.4570312 13.996094 L 14.537109 13.996094 C 14.795109 13.996094 14.996094 13.797109 14.996094 13.537109 L 14.996094 4.4609375 C 14.996094 4.2109375 14.787109 3.9960937 14.537109 3.9960938 L 7.9960938 3.9960938 L 5.9960938 1.9960938 L 1.4570312 1.9960938 z M 9.9707031 6.2363281 L 11.306641 6.2363281 L 11.306641 8.25 L 13.314453 8.25 L 13.314453 9.5859375 L 11.306641 9.5859375 L 11.306641 11.589844 L 9.9707031 11.589844 L 9.9707031 9.5859375 L 7.9589844 9.5859375 L 7.9589844 8.25 L 9.9707031 8.25 L 9.9707031 6.2363281 z "
-     id="path4" />
+     style="fill:#0082c9;fill-opacity:1;stroke-width:1.06666672;opacity:0.5"
+     d="m 1.5541666,2.1291667 c -0.2666667,0 -0.4916666,0.225 -0.4916666,0.4916666 V 14.439583 c 0,0.277333 0.2164666,0.489584 0.4916666,0.489584 H 15.50625 c 0.2752,0 0.489584,-0.212251 0.489584,-0.489584 V 4.7583333 c 0,-0.2666666 -0.222918,-0.4958334 -0.489584,-0.4958332 H 8.5291667 L 6.3958334,2.1291667 Z m 9.0812504,4.5229166 h 1.425 V 8.8 h 2.141666 v 1.425 h -2.141666 v 2.1375 h -1.425 V 10.225 H 8.4895834 V 8.8 h 2.1458336 z"
+     id="path4"
+     inkscape:connector-curvature="0" />
 </svg>

+ 11 - 12
drawable_resources/ic_list_empty_folder.svg

@@ -7,15 +7,15 @@
    xmlns="http://www.w3.org/2000/svg"
    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   height="16"
-   width="16"
+   height="17.066668"
+   width="17.066668"
    version="1"
    id="svg2"
-   inkscape:version="0.91 r13725"
-   sodipodi:docname="list_empty_folder_empty.svg"
-   inkscape:export-filename="C:\DEV\src\Android\Nextcloud\designTweaks\res\drawable-mdpi\ic_folder_empty.png"
-   inkscape:export-xdpi="405"
-   inkscape:export-ydpi="405">
+   inkscape:version="0.92.1 r15371"
+   sodipodi:docname="ic_list_empty_folder.svg"
+   inkscape:export-filename="C:\DEV\src\Android\Nextcloud\colorFolderNew\src\main\res\drawable-xxxhdpi\ic_list_empty_folder.png"
+   inkscape:export-xdpi="1620"
+   inkscape:export-ydpi="1620">
   <metadata
      id="metadata10">
     <rdf:RDF>
@@ -43,16 +43,15 @@
      id="namedview6"
      showgrid="false"
      inkscape:zoom="14.75"
-     inkscape:cx="-10.20339"
+     inkscape:cx="1.4237286"
      inkscape:cy="8"
      inkscape:window-x="-9"
      inkscape:window-y="-9"
      inkscape:window-maximized="1"
      inkscape:current-layer="svg2" />
   <path
-     d="M1.457 1.997c-.25 0-.46.21-.46.46v11.08c0 .26.202.46.46.46h13.08c.258 0 .46-.2.46-.46V4.46c0-.25-.21-.463-.46-.463h-6.54l-2-2z"
-     fill-rule="evenodd"
-     fill="#0082c9"
+     d="m 1.5541333,2.1301333 c -0.2666666,0 -0.4906666,0.224 -0.4906666,0.4906667 v 11.818667 c 0,0.277333 0.2154666,0.490666 0.4906666,0.490666 H 15.506133 c 0.2752,0 0.490667,-0.213333 0.490667,-0.490666 V 4.7573333 c 0,-0.2666666 -0.224,-0.4938666 -0.490667,-0.4938666 H 8.5301333 L 6.3968,2.1301333 Z"
      id="path4"
-     style="fill:#99cde9;fill-opacity:1" />
+     style="fill:#0082c9;fill-opacity:1;fill-rule:evenodd;stroke-width:1.06666672;opacity:0.5"
+     inkscape:connector-curvature="0" />
 </svg>

+ 11 - 10
drawable_resources/ic_list_empty_upload.svg

@@ -8,15 +8,15 @@
    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
    version="1.1"
-   width="24"
-   height="24"
+   width="25.6"
+   height="25.6"
    viewBox="0 0 24 24"
    id="svg2"
-   inkscape:version="0.91 r13725"
+   inkscape:version="0.92.1 r15371"
    sodipodi:docname="ic_list_empty_upload.svg"
-   inkscape:export-filename="C:\DEV\src\Android\Nextcloud\designTweaks\res\drawable-xxxhdpi\ic_list_empty_upload.png"
-   inkscape:export-xdpi="1080"
-   inkscape:export-ydpi="1080">
+   inkscape:export-filename="C:\DEV\src\Android\Nextcloud\colorFolderNew\src\main\res\drawable-mdpi\ic_list_empty_upload.png"
+   inkscape:export-xdpi="270"
+   inkscape:export-ydpi="270">
   <metadata
      id="metadata10">
     <rdf:RDF>
@@ -44,14 +44,15 @@
      id="namedview6"
      showgrid="false"
      inkscape:zoom="9.8333333"
-     inkscape:cx="-15.305085"
-     inkscape:cy="12"
+     inkscape:cx="14.338983"
+     inkscape:cy="16.067797"
      inkscape:window-x="-9"
      inkscape:window-y="-9"
      inkscape:window-maximized="1"
      inkscape:current-layer="svg2" />
   <path
-     d="M9,16V10H5L12,3L19,10H15V16H9M5,20V18H19V20H5Z"
+     d="M 9,16 V 10 H 5 l 7,-7 7,7 h -4 v 6 H 9 m -4,4 v -2 h 14 v 2 z"
      id="path4"
-     style="fill:#99cde9;fill-opacity:1" />
+     style="fill:#0082c9;fill-opacity:1;opacity:0.5"
+     inkscape:connector-curvature="0" />
 </svg>

+ 1 - 1
gradle/wrapper/gradle-wrapper.properties

@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-3.5-all.zip

+ 43 - 3
src/main/java/com/owncloud/android/datamodel/ArbitraryDataProvider.java

@@ -108,12 +108,44 @@ public class ArbitraryDataProvider {
         }
     }
 
-    public boolean getBooleanValue(Account account, String key) {
-        String value = getValue(account, key);
+    public boolean getBooleanValue(String accountName, String key) {
+        String value = getValue(accountName, key);
 
         return !value.isEmpty() && value.equalsIgnoreCase("true");
     }
 
+    public boolean getBooleanValue(Account account, String key) {
+        return getBooleanValue(account.name, key);
+    }
+
+    /**
+     * returns integer if found else -1
+     *
+     * @param accountName
+     * @param key
+     * @return
+     */
+    public Integer getIntegerValue(String accountName, String key) {
+        String value = getValue(accountName, key);
+
+        if (value.isEmpty()) {
+            return -1;
+        } else {
+            return Integer.valueOf(value);
+        }
+    }
+
+    /**
+     * returns integer if found else -1
+     *
+     * @param account
+     * @param key
+     * @return
+     */
+    public Integer getIntegerValue(Account account, String key) {
+        return getIntegerValue(account.name, key);
+    }
+
     private ArrayList<String> getValues(Account account, String key) {
         Cursor cursor = contentResolver.query(
                 ProviderMeta.ProviderTableMeta.CONTENT_URI_ARBITRARY_DATA,
@@ -146,13 +178,21 @@ public class ArbitraryDataProvider {
         return new ArrayList<>();
     }
 
+    /**
+     * Returns stored value as string or empty string
+     * @return string if value found or empty string
+     */
     public String getValue(Account account, String key) {
+        return getValue(account.name, key);
+    }
+
+    public String getValue(String accountName, String key) {
         Cursor cursor = contentResolver.query(
                 ProviderMeta.ProviderTableMeta.CONTENT_URI_ARBITRARY_DATA,
                 null,
                 ProviderMeta.ProviderTableMeta.ARBITRARY_DATA_CLOUD_ID + " = ? and " +
                         ProviderMeta.ProviderTableMeta.ARBITRARY_DATA_KEY + " = ?",
-                new String[]{account.name, key},
+                new String[]{accountName, key},
                 null
         );
 

+ 191 - 50
src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java

@@ -1,21 +1,20 @@
 /**
- *   ownCloud Android client application
- *
- *   Copyright (C) 2012  Bartek Przybylski
- *   Copyright (C) 2015 ownCloud Inc.
- *
- *   This program is free software: you can redistribute it and/or modify
- *   it under the terms of the GNU General Public License version 2,
- *   as published by the Free Software Foundation.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
+ * ownCloud Android client application
+ * <p>
+ * Copyright (C) 2012  Bartek Przybylski
+ * Copyright (C) 2015 ownCloud Inc.
+ * <p>
+ * 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.
+ * <p>
+ * 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.
+ * <p>
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 package com.owncloud.android.datamodel;
@@ -27,6 +26,7 @@ import android.content.ContentProviderResult;
 import android.content.ContentResolver;
 import android.content.ContentUris;
 import android.content.ContentValues;
+import android.content.Context;
 import android.content.Intent;
 import android.content.OperationApplicationException;
 import android.database.Cursor;
@@ -36,7 +36,10 @@ import android.provider.MediaStore;
 
 import com.owncloud.android.MainApp;
 import com.owncloud.android.db.ProviderMeta.ProviderTableMeta;
+import com.owncloud.android.lib.common.operations.RemoteOperationResult;
 import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.lib.resources.files.ReadRemoteFileOperation;
+import com.owncloud.android.lib.resources.files.RemoteFile;
 import com.owncloud.android.lib.resources.shares.OCShare;
 import com.owncloud.android.lib.resources.shares.ShareType;
 import com.owncloud.android.lib.resources.status.CapabilityBooleanType;
@@ -160,7 +163,7 @@ public class FileDataStorageManager {
             // TODO better implementation, filtering in the access to database instead of here
             Vector<OCFile> tmp = getFolderContent(folder, onlyOnDevice);
             OCFile current = null;
-            for (int i=0; i<tmp.size(); i++) {
+            for (int i = 0; i < tmp.size(); i++) {
                 current = tmp.get(i);
                 if (MimeTypeUtil.isImage(current)) {
                     ret.add(current);
@@ -247,6 +250,36 @@ public class FileDataStorageManager {
         return overriden;
     }
 
+    public OCFile saveFileWithParent(OCFile file, Context context) {
+        if (file.getParentId() == 0 && !file.getRemotePath().equals("/")) {
+            String remotePath = file.getRemotePath();
+            String parentPath = remotePath.substring(0, remotePath.lastIndexOf(file.getFileName()));
+
+            OCFile parentFile = getFileByPath(parentPath);
+
+            OCFile returnFile;
+            if (parentFile == null) {
+                // remote request
+                ReadRemoteFileOperation operation = new ReadRemoteFileOperation(parentPath);
+                RemoteOperationResult result = operation.execute(getAccount(), context);
+                if (result.isSuccess()) {
+                    OCFile remoteFolder = FileStorageUtils.fillOCFile((RemoteFile) result.getData().get(0));
+
+                    returnFile = saveFileWithParent(remoteFolder, context);
+                } else {
+                    returnFile = null;
+                    Log_OC.e(TAG, "Error during saving file with parents: " + file.getRemotePath());
+                }
+            } else {
+                returnFile = saveFileWithParent(parentFile, context);
+            }
+
+            file.setParentId(returnFile.getFileId());
+            saveFile(file);
+        }
+
+        return file;
+    }
 
     public void saveNewFile(OCFile newFile) {
         String remoteParentPath = new File(newFile.getRemotePath()).getParent();
@@ -276,7 +309,7 @@ public class FileDataStorageManager {
             OCFile folder, Collection<OCFile> updatedFiles, Collection<OCFile> filesToRemove
     ) {
 
-        Log_OC.d(TAG,  "Saving folder " + folder.getRemotePath() + " with " + updatedFiles.size()
+        Log_OC.d(TAG, "Saving folder " + folder.getRemotePath() + " with " + updatedFiles.size()
                 + " children and " + filesToRemove.size() + " files to remove");
 
         ArrayList<ContentProviderOperation> operations = new ArrayList<>(updatedFiles.size());
@@ -301,8 +334,9 @@ public class FileDataStorageManager {
         }
 
         // prepare operations to remove files in the given folder
-        String where = ProviderTableMeta.FILE_ACCOUNT_OWNER + AND + ProviderTableMeta.FILE_PATH + "=?";
-        String [] whereArgs = null;
+        String where = ProviderTableMeta.FILE_ACCOUNT_OWNER + AND +
+                ProviderTableMeta.FILE_PATH + "=?";
+        String[] whereArgs = null;
         for (OCFile file : filesToRemove) {
             if (file.getParentId() == folder.getFileId()) {
                 whereArgs = new String[]{mAccount.name, file.getRemotePath()};
@@ -502,7 +536,7 @@ public class FileDataStorageManager {
         Uri folder_uri = Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_DIR, "" + folder.getFileId()); // URI
         // for recursive deletion
         String where = ProviderTableMeta.FILE_ACCOUNT_OWNER + AND + ProviderTableMeta.FILE_PATH + "=?";
-        String [] whereArgs = new String[]{mAccount.name, folder.getRemotePath()};
+        String[] whereArgs = new String[]{mAccount.name, folder.getRemotePath()};
         int deleted = 0;
         if (getContentProviderClient() != null) {
             try {
@@ -796,9 +830,9 @@ public class FileDataStorageManager {
         if (c != null && c.moveToFirst()) {
             do {
                 OCFile child = createFileInstance(c);
-                 if (child.isFolder() || !onlyOnDevice || child.isDown()) {
-                     ret.add(child);
-                 }
+                if (child.isFolder() || !onlyOnDevice || child.isDown()) {
+                    ret.add(child);
+                }
             } while (c.moveToNext());
             c.close();
         }
@@ -871,6 +905,15 @@ public class FileDataStorageManager {
         return c;
     }
 
+    private OCFile createFileInstanceFromVirtual(Cursor c) {
+        OCFile file = null;
+        if (c != null) {
+            long fileId = c.getLong(c.getColumnIndex(ProviderTableMeta.VIRTUAL_OCFILE_ID));
+            file = getFileById(fileId);
+        }
+
+        return file;
+    }
 
     private OCFile createFileInstance(Cursor c) {
         OCFile file = null;
@@ -981,7 +1024,7 @@ public class FileDataStorageManager {
      * Retrieves an stored {@link OCShare} given its id.
      *
      * @param id    Identifier.
-     * @return      Stored {@link OCShare} given its id.
+     * @return Stored {@link OCShare} given its id.
      */
     public OCShare getShareById(long id) {
         OCShare share = null;
@@ -1039,7 +1082,7 @@ public class FileDataStorageManager {
                     .query(ProviderTableMeta.CONTENT_URI_SHARE,
                             null,
                             key + AND
-                                + ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?",
+                                    + ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?",
                             new String[]{value, mAccount.name},
                             null
                     );
@@ -1053,7 +1096,7 @@ public class FileDataStorageManager {
                         null
                 );
             } catch (RemoteException e) {
-                Log_OC.w(TAG, "Could not get details, assuming share does not exist: "+ e.getMessage());
+                Log_OC.w(TAG, "Could not get details, assuming share does not exist: " + e.getMessage());
                 c = null;
             }
         }
@@ -1061,14 +1104,13 @@ public class FileDataStorageManager {
     }
 
 
-
     /**
      * Get first share bound to a file with a known path and given {@link ShareType}.
      *
      * @param path          Path of the file.
      * @param type          Type of the share to get
      * @param shareWith     Target of the share. Ignored in type is {@link ShareType#PUBLIC_LINK}
-     * @return              First {@link OCShare} instance found in DB bound to the file in 'path'
+     * @return First {@link OCShare} instance found in DB bound to the file in 'path'
      */
     public OCShare getFirstShareByPathAndType(String path, ShareType type, String shareWith) {
         Cursor cursor = null;
@@ -1078,12 +1120,12 @@ public class FileDataStorageManager {
 
         String selection = ProviderTableMeta.OCSHARES_PATH + AND
                 + ProviderTableMeta.OCSHARES_SHARE_TYPE + AND
-                + ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?" ;
+                + ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?";
         if (!ShareType.PUBLIC_LINK.equals(type)) {
             selection += " AND " + ProviderTableMeta.OCSHARES_SHARE_WITH + "=?";
         }
 
-        String [] selectionArgs;
+        String[] selectionArgs;
         if (ShareType.PUBLIC_LINK.equals(type)) {
             selectionArgs = new String[]{
                     path,
@@ -1176,7 +1218,7 @@ public class FileDataStorageManager {
         cv.put(ProviderTableMeta.FILE_SHARED_WITH_SHAREE, false);
         cv.put(ProviderTableMeta.FILE_PUBLIC_LINK, "");
         String where = ProviderTableMeta.FILE_ACCOUNT_OWNER + AND + ProviderTableMeta.FILE_PARENT + "=?";
-        String [] whereArgs = new String[] { mAccount.name , String.valueOf(folder.getFileId()) };
+        String[] whereArgs = new String[]{mAccount.name, String.valueOf(folder.getFileId())};
 
         if (getContentResolver() != null) {
             getContentResolver().update(ProviderTableMeta.CONTENT_URI, cv, where, whereArgs);
@@ -1190,13 +1232,13 @@ public class FileDataStorageManager {
         }
     }
 
-    private void resetShareFlagInAFile(String filePath){
+    private void resetShareFlagInAFile(String filePath) {
         ContentValues cv = new ContentValues();
         cv.put(ProviderTableMeta.FILE_SHARED_VIA_LINK, false);
         cv.put(ProviderTableMeta.FILE_SHARED_WITH_SHAREE, false);
         cv.put(ProviderTableMeta.FILE_PUBLIC_LINK, "");
-        String where = ProviderTableMeta.FILE_ACCOUNT_OWNER + AND + ProviderTableMeta.FILE_PATH+ "=?";
-        String [] whereArgs = new String[] { mAccount.name , filePath };
+        String where = ProviderTableMeta.FILE_ACCOUNT_OWNER + AND + ProviderTableMeta.FILE_PATH + "=?";
+        String[] whereArgs = new String[]{mAccount.name, filePath};
 
         if (getContentResolver() != null) {
             getContentResolver().update(ProviderTableMeta.CONTENT_URI, cv, where, whereArgs);
@@ -1383,7 +1425,7 @@ public class FileDataStorageManager {
         Uri share_uri = ProviderTableMeta.CONTENT_URI_SHARE;
         String where = ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + AND +
                 ProviderTableMeta._ID + "=?";
-        String [] whereArgs = new String[]{mAccount.name, Long.toString(share.getId())};
+        String[] whereArgs = new String[]{mAccount.name, Long.toString(share.getId())};
         if (getContentProviderClient() != null) {
             try {
                 getContentProviderClient().delete(share_uri, where, whereArgs);
@@ -1400,16 +1442,16 @@ public class FileDataStorageManager {
 
         // Reset flags & Remove shares for this files
         String filePath = "";
-        for (OCShare share: shares) {
-            if (filePath != share.getPath()){
+        for (OCShare share : shares) {
+            if (filePath != share.getPath()) {
                 filePath = share.getPath();
                 resetShareFlagInAFile(filePath);
                 operations = prepareRemoveSharesInFile(filePath, operations);
             }
         }
 
-       // Add operations to insert shares
-       operations = prepareInsertShares(shares, operations);
+        // Add operations to insert shares
+        operations = prepareInsertShares(shares, operations);
 
         // apply operations in batch
         if (operations.size() > 0) {
@@ -1550,7 +1592,7 @@ public class FileDataStorageManager {
         if (folder != null) {
             String where = ProviderTableMeta.OCSHARES_PATH + AND
                     + ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?";
-            String [] whereArgs = new String[]{ "", mAccount.name };
+            String[] whereArgs = new String[]{"", mAccount.name};
 
             Vector<OCFile> files = getFolderContent(folder, false);
 
@@ -1584,15 +1626,15 @@ public class FileDataStorageManager {
 
     }
 
-    public ArrayList<OCShare> getSharesWithForAFile(String filePath, String accountName){
+    public ArrayList<OCShare> getSharesWithForAFile(String filePath, String accountName) {
         // Condition
         String where = ProviderTableMeta.OCSHARES_PATH + AND
                 + ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + AND
                 + " (" + ProviderTableMeta.OCSHARES_SHARE_TYPE + "=? OR "
-                + ProviderTableMeta.OCSHARES_SHARE_TYPE +  "=? OR "
-                + ProviderTableMeta.OCSHARES_SHARE_TYPE +  "=? OR "
+                + ProviderTableMeta.OCSHARES_SHARE_TYPE + "=? OR "
+                + ProviderTableMeta.OCSHARES_SHARE_TYPE + "=? OR "
                 + ProviderTableMeta.OCSHARES_SHARE_TYPE + "=? ) ";
-        String [] whereArgs = new String[]{ filePath, accountName ,
+        String[] whereArgs = new String[]{filePath, accountName,
                 Integer.toString(ShareType.USER.getValue()),
                 Integer.toString(ShareType.GROUP.getValue()),
                 Integer.toString(ShareType.EMAIL.getValue()),
@@ -1691,7 +1733,7 @@ public class FileDataStorageManager {
                     ProviderTableMeta.CONTENT_URI_FILE,
                     cv,
                     ProviderTableMeta._ID + "=?",
-                    new String[] { String.valueOf(file.getFileId())}
+                    new String[]{String.valueOf(file.getFileId())}
             );
         } else {
             try {
@@ -1828,7 +1870,7 @@ public class FileDataStorageManager {
 
     }
 
-    public OCCapability saveCapabilities(OCCapability capability){
+    public OCCapability saveCapabilities(OCCapability capability) {
 
         // Prepare capabilities data
         ContentValues cv = new ContentValues();
@@ -1919,7 +1961,7 @@ public class FileDataStorageManager {
         return exists;
     }
 
-    private Cursor getCapabilityCursorForAccount(String accountName){
+    private Cursor getCapabilityCursorForAccount(String accountName) {
         Cursor c = null;
         if (getContentResolver() != null) {
             c = getContentResolver()
@@ -1942,7 +1984,8 @@ public class FileDataStorageManager {
         return c;
 
     }
-    public OCCapability getCapability(String accountName){
+
+    public OCCapability getCapability(String accountName) {
         OCCapability capability = null;
         Cursor c = getCapabilityCursorForAccount(accountName);
 
@@ -2017,4 +2060,102 @@ public class FileDataStorageManager {
         return capability;
     }
 
+    public void deleteVirtuals(VirtualFolderType type) {
+        if (getContentResolver() != null) {
+            getContentResolver().delete(ProviderTableMeta.CONTENT_URI_VIRTUAL,
+                    ProviderTableMeta.VIRTUAL_TYPE + "=?", new String[]{String.valueOf(type)});
+        } else {
+            try {
+                getContentProviderClient().delete(ProviderTableMeta.CONTENT_URI_VIRTUAL,
+                        ProviderTableMeta.VIRTUAL_TYPE + "=?", new String[]{String.valueOf(type)});
+            } catch (RemoteException e) {
+                Log_OC.e(TAG, FAILED_TO_INSERT_MSG + e.getMessage(), e);
+            }
+        }
+    }
+
+    public void saveVirtuals(VirtualFolderType type, List<ContentValues> values) {
+
+        if (getContentResolver() != null) {
+            getContentResolver().bulkInsert(ProviderTableMeta.CONTENT_URI_VIRTUAL, values.toArray(new ContentValues[values.size()]));
+        } else {
+            try {
+                getContentProviderClient().bulkInsert(ProviderTableMeta.CONTENT_URI_VIRTUAL, values.toArray(new ContentValues[values.size()]));
+            } catch (RemoteException e) {
+                Log_OC.e(TAG, FAILED_TO_INSERT_MSG + e.getMessage(), e);
+            }
+        }
+    }
+
+    public void saveVirtual(VirtualFolderType type, OCFile file) {
+        ContentValues cv = new ContentValues();
+        cv.put(ProviderTableMeta.VIRTUAL_TYPE, type.toString());
+        cv.put(ProviderTableMeta.VIRTUAL_OCFILE_ID, file.getFileId());
+
+        if (getContentResolver() != null) {
+            getContentResolver().insert(ProviderTableMeta.CONTENT_URI_VIRTUAL, cv);
+        } else {
+            try {
+                getContentProviderClient().insert(ProviderTableMeta.CONTENT_URI_VIRTUAL, cv);
+            } catch (RemoteException e) {
+                Log_OC.e(TAG, FAILED_TO_INSERT_MSG + e.getMessage(), e);
+            }
+        }
+    }
+
+    public Vector<OCFile> getVirtualFolderContent(VirtualFolderType type, boolean onlyImages) {
+        Vector<OCFile> ocFiles = new Vector<>();
+        Uri req_uri = ProviderTableMeta.CONTENT_URI_VIRTUAL;
+        Cursor c;
+
+        if (getContentProviderClient() != null) {
+            try {
+                c = getContentProviderClient().query(
+                        req_uri,
+                        null,
+                        ProviderTableMeta.VIRTUAL_TYPE + "=?",
+                        new String[]{String.valueOf(type)},
+                        null
+                );
+            } catch (RemoteException e) {
+                Log_OC.e(TAG, e.getMessage(), e);
+                return ocFiles;
+            }
+        } else {
+            c = getContentResolver().query(
+                    req_uri,
+                    null,
+                    ProviderTableMeta.VIRTUAL_TYPE + "=?",
+                    new String[]{String.valueOf(type)},
+                    null
+            );
+        }
+
+        if (c != null && c.moveToFirst()) {
+            do {
+                OCFile child = createFileInstanceFromVirtual(c);
+                ocFiles.add(child);
+            } while (c.moveToNext());
+            c.close();
+        }
+
+        if (onlyImages) {
+            OCFile current = null;
+            Vector<OCFile> temp = new Vector<>();
+            for (int i=0; i < ocFiles.size(); i++) {
+                current = ocFiles.get(i);
+                if (MimeTypeUtil.isImage(current)) {
+                    temp.add(current);
+                }
+            }
+            ocFiles = temp;
+        }
+
+        if (ocFiles.size() > 0) {
+            Collections.sort(ocFiles);
+        }
+
+        return ocFiles;
+    }
+
 }

+ 30 - 0
src/main/java/com/owncloud/android/datamodel/VirtualFolderType.java

@@ -0,0 +1,30 @@
+/**
+ * Nextcloud Android client application
+ *
+ * @author Tobias Kaminsky
+ * Copyright (C) 2017 Tobias Kaminsky
+ * Copyright (C) 2017 Nextcloud GmbH.
+ * <p>
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * at your option) any later version.
+ * <p>
+ * 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.
+ * <p>
+ * 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.datamodel;
+
+/**
+ * Type for virtual folders
+ */
+
+public enum VirtualFolderType {
+    FAVORITE, PHOTOS, NONE
+}

+ 7 - 1
src/main/java/com/owncloud/android/db/ProviderMeta.java

@@ -32,7 +32,7 @@ import com.owncloud.android.MainApp;
 public class ProviderMeta {
 
     public static final String DB_NAME = "filelist";
-    public static final int DB_VERSION = 21;
+    public static final int DB_VERSION = 22;
 
     private ProviderMeta() {
     }
@@ -45,6 +45,7 @@ public class ProviderMeta {
         public static final String SYNCED_FOLDERS_TABLE_NAME = "synced_folders";
         public static final String EXTERNAL_LINKS_TABLE_NAME = "external_links";
         public static final String ARBITRARY_DATA_TABLE_NAME = "arbitrary_data";
+        public static final String VIRTUAL_TABLE_NAME = "virtual";
 
         private static final String CONTENT_PREFIX = "content://";
 
@@ -66,6 +67,7 @@ public class ProviderMeta {
                 + MainApp.getAuthority() + "/external_links");
         public static final Uri CONTENT_URI_ARBITRARY_DATA = Uri.parse(CONTENT_PREFIX
                 + MainApp.getAuthority() + "/arbitrary_data");
+        public static final Uri CONTENT_URI_VIRTUAL = Uri.parse(CONTENT_PREFIX + MainApp.getAuthority() + "/virtual");
 
         public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.owncloud.file";
         public static final String CONTENT_TYPE_ITEM = "vnd.android.cursor.item/vnd.owncloud.file";
@@ -189,5 +191,9 @@ public class ProviderMeta {
         public static final String ARBITRARY_DATA_CLOUD_ID = "cloud_id";
         public static final String ARBITRARY_DATA_KEY = "key";
         public static final String ARBITRARY_DATA_VALUE = "value";
+
+        // Columns of virtual
+        public static final String VIRTUAL_TYPE = "type";
+        public static final String VIRTUAL_OCFILE_ID = "ocfile_id";
     }
 }

+ 8 - 3
src/main/java/com/owncloud/android/operations/DetectAuthenticationMethodOperation.java

@@ -97,9 +97,14 @@ public class DetectAuthenticationMethodOperation extends RemoteOperation {
 
         // analyze response  
         if (result.getHttpCode() == HttpStatus.SC_UNAUTHORIZED) {
-            String authRequest = ((result.getAuthenticateHeader()).trim()).toLowerCase();
-            if (authRequest.startsWith("basic") || authRequest.startsWith("bearer")) {
-                authMethod = AuthenticationMethod.BASIC_HTTP_AUTH;
+            ArrayList<String> authHeaders = result.getAuthenticateHeaders();
+
+            for (String header : authHeaders) {
+                // currently we only support basic auth
+                if (header.toLowerCase().startsWith("basic")) {
+                    authMethod = AuthenticationMethod.BASIC_HTTP_AUTH;
+                    break;
+                }
             }
             // else - fall back to UNKNOWN
                     

+ 61 - 10
src/main/java/com/owncloud/android/providers/FileContentProvider.java

@@ -73,6 +73,7 @@ public class FileContentProvider extends ContentProvider {
     private static final int SYNCED_FOLDERS = 7;
     private static final int EXTERNAL_LINKS = 8;
     private static final int ARBITRARY_DATA = 9;
+    private static final int VIRTUAL = 10;
 
     private static final String TAG = FileContentProvider.class.getSimpleName();
 
@@ -205,6 +206,9 @@ public class FileContentProvider extends ContentProvider {
             case ARBITRARY_DATA:
                 count = db.delete(ProviderTableMeta.ARBITRARY_DATA_TABLE_NAME, where, whereArgs);
                 break;
+            case VIRTUAL:
+                count = db.delete(ProviderTableMeta.VIRTUAL_TABLE_NAME, where, whereArgs);
+                break;
             default:
                 //Log_OC.e(TAG, "Unknown uri " + uri);
                 throw new IllegalArgumentException("Unknown uri: " + uri.toString());
@@ -350,7 +354,17 @@ public class FileContentProvider extends ContentProvider {
 
                 }
                 return insertedArbitraryDataUri;
+            case VIRTUAL:
+                Uri insertedVirtualUri;
+                long virtualId = db.insert(ProviderTableMeta.VIRTUAL_TABLE_NAME, null, values);
 
+                if (virtualId > 0) {
+                    insertedVirtualUri = ContentUris.withAppendedId(ProviderTableMeta.CONTENT_URI_VIRTUAL, virtualId);
+                } else {
+                    throw new SQLException("ERROR " + uri);
+                }
+
+                return insertedVirtualUri;
             default:
                 throw new IllegalArgumentException("Unknown uri id: " + uri);
         }
@@ -402,6 +416,7 @@ public class FileContentProvider extends ContentProvider {
         mUriMatcher.addURI(authority, "synced_folders", SYNCED_FOLDERS);
         mUriMatcher.addURI(authority, "external_links", EXTERNAL_LINKS);
         mUriMatcher.addURI(authority, "arbitrary_data", ARBITRARY_DATA);
+        mUriMatcher.addURI(authority, "virtual", VIRTUAL);
 
         return true;
     }
@@ -497,6 +512,12 @@ public class FileContentProvider extends ContentProvider {
                             + uri.getPathSegments().get(1));
                 }
                 break;
+            case VIRTUAL:
+                sqlQuery.setTables(ProviderTableMeta.VIRTUAL_TABLE_NAME);
+                if (uri.getPathSegments().size() > 1) {
+                    sqlQuery.appendWhere(ProviderTableMeta._ID + "=" + uri.getPathSegments().get(1));
+                }
+                break;
             default:
                 throw new IllegalArgumentException("Unknown uri id: " + uri);
         }
@@ -522,6 +543,9 @@ public class FileContentProvider extends ContentProvider {
                 case ARBITRARY_DATA:
                     order = ProviderTableMeta.ARBITRARY_DATA_CLOUD_ID;
                     break;
+                case VIRTUAL:
+                    order = ProviderTableMeta.VIRTUAL_TYPE;
+                    break;
                 default: // Files
                     order = ProviderTableMeta.FILE_DEFAULT_SORT_ORDER;
                     break;
@@ -635,6 +659,9 @@ public class FileContentProvider extends ContentProvider {
 
             // Create arbitrary data table
             createArbitraryData(db);
+
+            // Create virtual table
+            createVirtualTable(db);
         }
 
         @Override
@@ -881,7 +908,7 @@ public class FileContentProvider extends ContentProvider {
             }
 
             if (oldVersion < 16 && newVersion >= 16) {
-                Log_OC.i("SQL", "Entering in the #16 ADD synced folders table");
+                Log_OC.i(SQL, "Entering in the #16 ADD synced folders table");
                 db.beginTransaction();
                 try {
                     // Create synced folders table
@@ -898,7 +925,7 @@ public class FileContentProvider extends ContentProvider {
             }
 
             if (oldVersion < 17 && newVersion >= 17) {
-                Log_OC.i(SQL, "Entering in the #4 ADD in onUpgrade");
+                Log_OC.i(SQL, "Entering in the #17 ADD in onUpgrade");
                 db.beginTransaction();
                 try {
                     db.execSQL(ALTER_TABLE + ProviderTableMeta.FILE_TABLE_NAME +
@@ -918,7 +945,7 @@ public class FileContentProvider extends ContentProvider {
             }
 
             if (oldVersion < 18 && newVersion >= 18) {
-                Log_OC.i(SQL, "Adding external link column to capabilities");
+                Log_OC.i(SQL, "Entering in the #18 Adding external link column to capabilities");
                 db.beginTransaction();
                 try {
                     db.execSQL(ALTER_TABLE + ProviderTableMeta.CAPABILITIES_TABLE_NAME +
@@ -937,7 +964,7 @@ public class FileContentProvider extends ContentProvider {
             }
 
             if (oldVersion < 19 && newVersion >= 19) {
-                Log_OC.i(SQL, "Adding external link column to capabilities");
+                Log_OC.i(SQL, "Entering in the #19 Adding external link column to capabilities");
                 db.beginTransaction();
                 try {
                     createExternalLinksTable(db);
@@ -953,7 +980,7 @@ public class FileContentProvider extends ContentProvider {
             }
 
             if (oldVersion < 20 && newVersion >= 20) {
-                Log_OC.i(SQL, "Adding arbitrary data table");
+                Log_OC.i(SQL, "Entering in the #20 Adding arbitrary data table");
                 db.beginTransaction();
                 try {
                     createArbitraryData(db);
@@ -969,7 +996,23 @@ public class FileContentProvider extends ContentProvider {
             }
 
             if (oldVersion < 21 && newVersion >= 21) {
-                Log_OC.i(SQL, "Adding user theming to capabilities table");
+                Log_OC.i(SQL, "Entering in the #21 Adding virtual table");
+                db.beginTransaction();
+                try {
+                    createVirtualTable(db);
+                    upgraded = true;
+                    db.setTransactionSuccessful();
+                } finally {
+                    db.endTransaction();
+                }
+            }
+
+            if (!upgraded) {
+                Log_OC.i(SQL, String.format(Locale.ENGLISH, UPGRADE_VERSION_MSG, oldVersion, newVersion));
+            }
+
+            if (oldVersion < 22 && newVersion >= 22) {
+                Log_OC.i(SQL, "Entering in the #22 Adding user theming to capabilities table");
                 db.beginTransaction();
                 try {
                     db.execSQL(ALTER_TABLE + ProviderTableMeta.CAPABILITIES_TABLE_NAME +
@@ -1140,6 +1183,14 @@ public class FileContentProvider extends ContentProvider {
         );
     }
 
+    private void createVirtualTable(SQLiteDatabase db) {
+        db.execSQL("CREATE TABLE " + ProviderTableMeta.VIRTUAL_TABLE_NAME + "("
+                + ProviderTableMeta._ID + " INTEGER PRIMARY KEY, "          // id
+                + ProviderTableMeta.VIRTUAL_TYPE + " TEXT, "                // type
+                + ProviderTableMeta.VIRTUAL_OCFILE_ID + " INTEGER )"        // file id
+        );
+    }
+
     /**
      * Version 10 of database does not modify its scheme. It coincides with the upgrade of the ownCloud account names
      * structure to include in it the path to the server instance. Updating the account names and path to local files
@@ -1147,7 +1198,7 @@ public class FileContentProvider extends ContentProvider {
      *
      * See {@link com.owncloud.android.authentication.AccountUtils#updateAccountVersion(android.content.Context)}
      *
-     * @param db        Database where table of files is included.
+     * @param db Database where table of files is included.
      */
     private void updateAccountName(SQLiteDatabase db) {
         Log_OC.d(SQL, "THREAD:  " + Thread.currentThread().getName());
@@ -1204,9 +1255,9 @@ public class FileContentProvider extends ContentProvider {
      * Rename the local ownCloud folder of one account to match the a rename of the account itself. Updates the
      * table of files in database so that the paths to the local files keep being the same.
      *
-     * @param db                    Database where table of files is included.
-     * @param newAccountName        New name for the target OC account.
-     * @param oldAccountName        Old name of the target OC account.
+     * @param db             Database where table of files is included.
+     * @param newAccountName New name for the target OC account.
+     * @param oldAccountName Old name of the target OC account.
      */
     private void updateDownloadedFiles(SQLiteDatabase db, String newAccountName,
                                        String oldAccountName) {

+ 58 - 7
src/main/java/com/owncloud/android/services/AdvancedFileAlterationListener.java

@@ -20,6 +20,7 @@
 package com.owncloud.android.services;
 
 import android.content.Context;
+import android.content.res.Resources;
 import android.media.ExifInterface;
 import android.os.Handler;
 import android.text.TextUtils;
@@ -27,8 +28,13 @@ import android.text.TextUtils;
 import com.evernote.android.job.JobRequest;
 import com.evernote.android.job.util.support.PersistableBundleCompat;
 import com.owncloud.android.MainApp;
+import com.owncloud.android.R;
+import com.owncloud.android.datamodel.ArbitraryDataProvider;
+import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.datamodel.SyncedFolder;
+import com.owncloud.android.files.services.FileUploader;
 import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.ui.activity.Preferences;
 import com.owncloud.android.utils.FileStorageUtils;
 
 import org.apache.commons.io.monitor.FileAlterationListener;
@@ -53,16 +59,18 @@ public class AdvancedFileAlterationListener implements FileAlterationListener {
     public static final String TAG = "AdvancedFileAlterationListener";
     public static final int DELAY_INVOCATION_MS = 2500;
     private Context context;
+    private boolean lightVersion;
 
     private SyncedFolder syncedFolder;
 
     private Map<String, Runnable> uploadMap = new HashMap<>();
     private Handler handler = new Handler();
 
-    public AdvancedFileAlterationListener(SyncedFolder syncedFolder) {
+    public AdvancedFileAlterationListener(SyncedFolder syncedFolder, boolean lightVersion) {
         super();
 
         context = MainApp.getAppContext();
+        this.lightVersion = lightVersion;
         this.syncedFolder = syncedFolder;
     }
 
@@ -122,20 +130,50 @@ public class AdvancedFileAlterationListener implements FileAlterationListener {
             Runnable runnable = new Runnable() {
                 @Override
                 public void run() {
+
+                    String remotePath;
+                    boolean subfolderByDate;
+                    boolean chargingOnly;
+                    boolean wifiOnly;
+                    Integer uploadAction;
+                    String accountName = syncedFolder.getAccount();
+
+                    if (lightVersion) {
+                        ArbitraryDataProvider arbitraryDataProvider = new ArbitraryDataProvider(context
+                                .getContentResolver());
+
+                        Resources resources = MainApp.getAppContext().getResources();
+
+                        remotePath = resources.getString(R.string.syncedFolder_remote_folder) + OCFile.PATH_SEPARATOR +
+                                new File(syncedFolder.getLocalPath()).getName() + OCFile.PATH_SEPARATOR;
+                        subfolderByDate = resources.getBoolean(R.bool.syncedFolder_light_use_subfolders);
+                        chargingOnly = resources.getBoolean(R.bool.syncedFolder_light_on_charging);
+                        wifiOnly = arbitraryDataProvider.getBooleanValue(accountName,
+                                Preferences.SYNCED_FOLDER_LIGHT_UPLOAD_ON_WIFI);
+                        String uploadActionString = resources.getString(R.string.syncedFolder_light_upload_behaviour);
+                        uploadAction = getUploadAction(uploadActionString);
+                    } else {
+                        remotePath = syncedFolder.getRemotePath();
+                        subfolderByDate = syncedFolder.getSubfolderByDate();
+                        chargingOnly = syncedFolder.getChargingOnly();
+                        wifiOnly = syncedFolder.getWifiOnly();
+                        uploadAction = syncedFolder.getUploadAction();
+                    }
+
                     PersistableBundleCompat bundle = new PersistableBundleCompat();
                     bundle.putString(AutoUploadJob.LOCAL_PATH, file.getAbsolutePath());
                     bundle.putString(AutoUploadJob.REMOTE_PATH, FileStorageUtils.getInstantUploadFilePath(
                             currentLocale,
-                            syncedFolder.getRemotePath(), file.getName(),
+                            remotePath, file.getName(),
                             finalLastModificationTime,
-                            syncedFolder.getSubfolderByDate()));
-                    bundle.putString(AutoUploadJob.ACCOUNT, syncedFolder.getAccount());
-                    bundle.putInt(AutoUploadJob.UPLOAD_BEHAVIOUR, syncedFolder.getUploadAction());
+                            subfolderByDate));
+                    bundle.putString(AutoUploadJob.ACCOUNT, accountName);
+                    bundle.putInt(AutoUploadJob.UPLOAD_BEHAVIOUR, uploadAction);
 
                     new JobRequest.Builder(AutoUploadJob.TAG)
                             .setExecutionWindow(30_000L, 80_000L)
-                            .setRequiresCharging(syncedFolder.getChargingOnly())
-                            .setRequiredNetworkType(syncedFolder.getWifiOnly() ? JobRequest.NetworkType.UNMETERED :
+                            .setRequiresCharging(chargingOnly)
+                            .setRequiredNetworkType(wifiOnly ? JobRequest.NetworkType.UNMETERED :
                                     JobRequest.NetworkType.ANY)
                             .setExtras(bundle)
                             .setPersisted(false)
@@ -153,6 +191,19 @@ public class AdvancedFileAlterationListener implements FileAlterationListener {
         }
     }
 
+    private Integer getUploadAction(String action) {
+        switch (action) {
+            case "LOCAL_BEHAVIOUR_FORGET":
+                return FileUploader.LOCAL_BEHAVIOUR_FORGET;
+            case "LOCAL_BEHAVIOUR_MOVE":
+                return FileUploader.LOCAL_BEHAVIOUR_MOVE;
+            case "LOCAL_BEHAVIOUR_DELETE":
+                return FileUploader.LOCAL_BEHAVIOUR_DELETE;
+            default:
+                return FileUploader.LOCAL_BEHAVIOUR_FORGET;
+        }
+    }
+
     @Override
     public void onFileChange(File file) {
         onFileChange(file, 2500);

+ 55 - 2
src/main/java/com/owncloud/android/services/ContactsImportJob.java

@@ -21,14 +21,22 @@
 
 package com.owncloud.android.services;
 
+import android.database.Cursor;
+import android.net.Uri;
+import android.provider.ContactsContract;
 import android.support.annotation.NonNull;
 
 import com.evernote.android.job.Job;
 import com.evernote.android.job.util.support.PersistableBundleCompat;
 import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.ui.fragment.contactsbackup.ContactListFragment;
 
 import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.TreeMap;
 
 import ezvcard.Ezvcard;
 import ezvcard.VCard;
@@ -62,9 +70,34 @@ public class ContactsImportJob extends Job {
         try {
             ContactOperations operations = new ContactOperations(getContext(), accountName, accountType);
             vCards.addAll(Ezvcard.parse(file).all());
+            Collections.sort(vCards, new ContactListFragment.VCardComparator());
+            Cursor cursor = getContext().getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null,
+                    null, null, null);
 
-            for (int i = 0; i < intArray.length; i++ ){
-                operations.insertContact(vCards.get(intArray[i]));
+            TreeMap<VCard, Long> ownContactList = new TreeMap<>(new ContactListFragment.VCardComparator());
+            if (cursor != null && cursor.getCount() > 0) {
+                cursor.moveToFirst();
+                for (int i = 0; i < cursor.getCount(); i++) {
+                    VCard vCard = getContactFromCursor(cursor);
+                    if (vCard != null) {
+                        ownContactList.put(vCard, cursor.getLong(cursor.getColumnIndex("NAME_RAW_CONTACT_ID")));
+                    }
+                    cursor.moveToNext();
+                }
+            }
+
+
+            for (int i = 0; i < intArray.length; i++) {
+                VCard vCard = vCards.get(intArray[i]);
+                if (ContactListFragment.getDisplayName(vCard).length() != 0) {
+                    if (!ownContactList.containsKey(vCard)) {
+                        operations.insertContact(vCard);
+                    } else {
+                        operations.updateContact(vCard, ownContactList.get(vCard));
+                    }
+                } else {
+                    operations.insertContact(vCard); //Insert All the contacts without name
+                }
             }
         } catch (Exception e) {
             Log_OC.e(TAG, e.getMessage());
@@ -72,4 +105,24 @@ public class ContactsImportJob extends Job {
 
         return Result.SUCCESS;
     }
+
+    private VCard getContactFromCursor(Cursor cursor) {
+        String lookupKey = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY));
+        Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_VCARD_URI, lookupKey);
+        VCard vCard = null;
+        try {
+            InputStream inputStream = getContext().getContentResolver().openInputStream(uri);
+            ArrayList<VCard> vCardList = new ArrayList<>();
+            vCardList.addAll(Ezvcard.parse(inputStream).all());
+            if (vCardList.size() > 0) {
+                vCard = vCardList.get(0);
+            }
+
+        } catch (IOException e) {
+            Log_OC.d(TAG, e.getMessage());
+        }
+        return vCard;
+    }
+
+
 }

+ 7 - 3
src/main/java/com/owncloud/android/services/observer/SyncedFolderObserverService.java

@@ -28,6 +28,7 @@ import android.os.Binder;
 import android.os.IBinder;
 
 import com.owncloud.android.MainApp;
+import com.owncloud.android.R;
 import com.owncloud.android.datamodel.SyncedFolder;
 import com.owncloud.android.datamodel.SyncedFolderProvider;
 import com.owncloud.android.lib.common.utils.Log_OC;
@@ -69,7 +70,8 @@ public class SyncedFolderObserverService extends Service {
 
                 try {
                     observer.init();
-                    observer.addListener(new AdvancedFileAlterationListener(syncedFolder));
+                    observer.addListener(new AdvancedFileAlterationListener(syncedFolder,
+                            getResources().getBoolean(R.bool.syncedFolder_light)));
                     monitor.addObserver(observer);
                 } catch (Exception e) {
                     Log_OC.d(TAG, "Failed getting an observer to initialize " + e);
@@ -135,7 +137,8 @@ public class SyncedFolderObserverService extends Service {
                     try {
                         advancedFileAlterationObserver = new AdvancedFileAlterationObserver(syncedFolder, fileFilter);
                         advancedFileAlterationObserver.init();
-                        advancedFileAlterationObserver.addListener(new AdvancedFileAlterationListener(syncedFolder));
+                        advancedFileAlterationObserver.addListener(new AdvancedFileAlterationListener(syncedFolder,
+                                getResources().getBoolean(R.bool.syncedFolder_light)));
                         monitor.addObserver(advancedFileAlterationObserver);
                     } catch (Exception e) {
                         Log_OC.d(TAG, "Failed getting an observer to initialize");
@@ -152,7 +155,8 @@ public class SyncedFolderObserverService extends Service {
             try {
                 advancedFileAlterationObserver = new AdvancedFileAlterationObserver(syncedFolder, fileFilter);
                 advancedFileAlterationObserver.init();
-                advancedFileAlterationObserver.addListener(new AdvancedFileAlterationListener(syncedFolder));
+                advancedFileAlterationObserver.addListener(new AdvancedFileAlterationListener(syncedFolder,
+                        getResources().getBoolean(R.bool.syncedFolder_light)));
                 monitor.addObserver(advancedFileAlterationObserver);
             } catch (Exception e) {
                 Log_OC.d(TAG, "Failed getting an observer to initialize");

+ 31 - 13
src/main/java/com/owncloud/android/ui/activity/ActivitiesListActivity.java

@@ -19,7 +19,6 @@
  * 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;
 
 import android.accounts.Account;
@@ -30,7 +29,6 @@ import android.content.Intent;
 import android.os.Bundle;
 import android.support.design.widget.BottomNavigationView;
 import android.support.v4.widget.SwipeRefreshLayout;
-import android.support.v7.widget.DividerItemDecoration;
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
 import android.view.MenuItem;
@@ -43,6 +41,7 @@ import android.widget.TextView;
 import com.owncloud.android.MainApp;
 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.OwnCloudClient;
 import com.owncloud.android.lib.common.OwnCloudClientManagerFactory;
@@ -50,7 +49,12 @@ 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.activities.GetRemoteActivitiesOperation;
+import com.owncloud.android.lib.resources.activities.models.RichObject;
+import com.owncloud.android.lib.resources.files.FileUtils;
 import com.owncloud.android.ui.adapter.ActivityListAdapter;
+import com.owncloud.android.ui.interfaces.ActivityListInterface;
+import com.owncloud.android.ui.preview.PreviewImageActivity;
+import com.owncloud.android.ui.preview.PreviewImageFragment;
 import com.owncloud.android.utils.AnalyticsUtils;
 import com.owncloud.android.utils.DisplayUtils;
 
@@ -66,7 +70,7 @@ import butterknife.Unbinder;
 /**
  * Activity displaying all server side stored activity items.
  */
-public class ActivitiesListActivity extends FileActivity {
+public class ActivitiesListActivity extends FileActivity implements ActivityListInterface {
 
     private static final String TAG = ActivitiesListActivity.class.getSimpleName();
     private static final String SCREEN_NAME = "Activities";
@@ -102,6 +106,7 @@ public class ActivitiesListActivity extends FileActivity {
     private ActivityListAdapter adapter;
     private Unbinder unbinder;
 
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         Log_OC.v(TAG, "onCreate() start");
@@ -133,9 +138,9 @@ public class ActivitiesListActivity extends FileActivity {
             public void onRefresh() {
                 setLoadingMessage();
                 fetchAndSetData();
-
             }
         });
+
         setupContent();
     }
 
@@ -156,18 +161,16 @@ public class ActivitiesListActivity extends FileActivity {
      * sets up the UI elements and loads all activity items.
      */
     private void setupContent() {
+
         emptyContentIcon.setImageResource(R.drawable.ic_activity_light_grey);
         setLoadingMessage();
 
-        adapter = new ActivityListAdapter(this);
+        adapter = new ActivityListAdapter(this, this);
         recyclerView.setAdapter(adapter);
 
         LinearLayoutManager layoutManager = new LinearLayoutManager(this);
-        DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(recyclerView.getContext(),
-                layoutManager.getOrientation());
 
         recyclerView.setLayoutManager(layoutManager);
-        recyclerView.addItemDecoration(dividerItemDecoration);
 
         BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottom_navigation_view);
 
@@ -192,8 +195,8 @@ public class ActivitiesListActivity extends FileActivity {
                     ocAccount = new OwnCloudAccount(
                             currentAccount,
                             context
-                            );
-                    OwnCloudClient mClient = OwnCloudClientManagerFactory.getDefaultSingleton().
+                    );
+                    final OwnCloudClient mClient = OwnCloudClientManagerFactory.getDefaultSingleton().
                             getClientFor(ocAccount, MainApp.getAppContext());
                     mClient.setOwnCloudVersion(AccountUtils.getServerVersion(currentAccount));
 
@@ -208,7 +211,7 @@ public class ActivitiesListActivity extends FileActivity {
                             @Override
                             public void run() {
                                 if (activities.size() > 0) {
-                                    populateList(activities);
+                                    populateList(activities, mClient);
                                     swipeEmptyListRefreshLayout.setVisibility(View.GONE);
                                     swipeListRefreshLayout.setVisibility(View.VISIBLE);
                                 } else {
@@ -258,9 +261,9 @@ public class ActivitiesListActivity extends FileActivity {
         });
     }
 
-    private void populateList(List<Object> activities) {
+    private void populateList(List<Object> activities, OwnCloudClient mClient) {
 
-        adapter.setActivityItems(activities);
+        adapter.setActivityItems(activities, mClient);
     }
 
     @Override
@@ -308,4 +311,19 @@ public class ActivitiesListActivity extends FileActivity {
 
         AnalyticsUtils.setCurrentScreenName(this, SCREEN_NAME, TAG);
     }
+
+
+    @Override
+    public void onActivityClicked(RichObject richObject) {
+        Intent showDetailsIntent;
+        OCFile ocFile = new OCFile(FileUtils.PATH_SEPARATOR + richObject.getPath());
+        if (PreviewImageFragment.canBePreviewed(ocFile)) {
+            showDetailsIntent = new Intent(this, PreviewImageActivity.class);
+        } else {
+            showDetailsIntent = new Intent(this, FileDisplayActivity.class);
+        }
+        showDetailsIntent.putExtra(EXTRA_FILE, ocFile);
+        showDetailsIntent.putExtra(EXTRA_ACCOUNT, getAccount());
+        startActivity(showDetailsIntent);
+    }
 }

+ 56 - 27
src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java

@@ -256,29 +256,35 @@ public abstract class DrawerActivity extends ToolbarActivity implements DisplayU
      * 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();
-                    }
-                });
+        mAccountChooserToggle = (ImageView) findNavigationViewChildById(R.id.drawer_account_chooser_toogle);
+
+        if (getResources().getBoolean(R.bool.allow_profile_click)) {
+            mAccountChooserToggle.setImageResource(R.drawable.ic_down);
+
+            findNavigationViewChildById(R.id.drawer_active_user)
+                    .setOnClickListener(new View.OnClickListener() {
+                        @Override
+                        public void onClick(View v) {
+                            toggleAccountList();
+                        }
+                    });
+        } else {
+            mAccountChooserToggle.setVisibility(View.GONE);
+        }
     }
 
     /**
      * setup quota elements of the drawer.
      */
     private void setupQuotaElement() {
-        mQuotaView = (LinearLayout) findViewById(R.id.drawer_quota);
-        mQuotaProgressBar = (ProgressBar) findViewById(R.id.drawer_quota_ProgressBar);
-        mQuotaTextPercentage = (TextView) findViewById(R.id.drawer_quota_percentage);
-        mQuotaTextLink = (TextView) findViewById(R.id.drawer_quota_link);
+        mQuotaView = (LinearLayout) findQuotaViewById(R.id.drawer_quota);
+        mQuotaProgressBar = (ProgressBar) findQuotaViewById(R.id.drawer_quota_ProgressBar);
+        mQuotaTextPercentage = (TextView) findQuotaViewById(R.id.drawer_quota_percentage);
+        mQuotaTextLink = (TextView) findQuotaViewById(R.id.drawer_quota_link);
         DisplayUtils.colorPreLollipopHorizontalProgressBar(mQuotaProgressBar);
     }
 
@@ -318,21 +324,20 @@ public abstract class DrawerActivity extends ToolbarActivity implements DisplayU
             navigationView.getMenu().setGroupVisible(R.id.drawer_menu_accounts, false);
         }
 
-        Account account = AccountUtils.
-                getCurrentOwnCloudAccount(MainApp.getAppContext());
+        Account account = AccountUtils.getCurrentOwnCloudAccount(MainApp.getAppContext());
         boolean searchSupported = AccountUtils.hasSearchSupport(account);
 
-        if ((getResources().getBoolean(R.bool.bottom_toolbar_enabled) || (!searchSupported)) &&
-                (account != null)){
+        if (getResources().getBoolean(R.bool.bottom_toolbar_enabled) && account != null) {
+            navigationView.getMenu().removeItem(R.id.nav_all_files);
+            navigationView.getMenu().removeItem(R.id.nav_settings);
+            navigationView.getMenu().removeItem(R.id.nav_favorites);
             navigationView.getMenu().removeItem(R.id.nav_photos);
-            if (getResources().getBoolean(R.bool.bottom_toolbar_enabled)) {
-                navigationView.getMenu().removeItem(R.id.nav_all_files);
-                navigationView.getMenu().removeItem(R.id.nav_settings);
-                navigationView.getMenu().removeItem(R.id.nav_favorites);
-            }
-            if (!searchSupported) {
-                navigationView.getMenu().removeItem(R.id.nav_videos);
-            }
+        }
+
+        if (!searchSupported && account != null) {
+            navigationView.getMenu().removeItem(R.id.nav_photos);
+            navigationView.getMenu().removeItem(R.id.nav_favorites);
+            navigationView.getMenu().removeItem(R.id.nav_videos);
         }
 
         if (getResources().getBoolean(R.bool.use_home) && navigationView.getMenu().findItem(R.id.nav_all_files) !=
@@ -354,6 +359,10 @@ public abstract class DrawerActivity extends ToolbarActivity implements DisplayU
             navigationView.getMenu().removeItem(R.id.nav_contacts);
         }
 
+        if (getResources().getBoolean(R.bool.syncedFolder_light)) {
+            navigationView.getMenu().removeItem(R.id.nav_folder_sync);
+        }
+
         if (!getResources().getBoolean(R.bool.show_drawer_logout)) {
             navigationView.getMenu().removeItem(R.id.nav_logout);
         }
@@ -766,7 +775,9 @@ public abstract class DrawerActivity extends ToolbarActivity implements DisplayU
     private void showMenu() {
         if (mNavigationView != null) {
             if (mIsAccountChooserActive) {
-                mAccountChooserToggle.setImageResource(R.drawable.ic_up);
+                if (mAccountChooserToggle != null) {
+                    mAccountChooserToggle.setImageResource(R.drawable.ic_up);
+                }
                 mNavigationView.getMenu().setGroupVisible(R.id.drawer_menu_accounts, true);
 
                 if (!getResources().getBoolean(R.bool.multiaccount_support) &&
@@ -778,7 +789,9 @@ public abstract class DrawerActivity extends ToolbarActivity implements DisplayU
                 mNavigationView.getMenu().setGroupVisible(R.id.drawer_menu_external_links, false);
                 mNavigationView.getMenu().setGroupVisible(R.id.drawer_menu_bottom, false);
             } else {
-                mAccountChooserToggle.setImageResource(R.drawable.ic_down);
+                if (mAccountChooserToggle != null) {
+                    mAccountChooserToggle.setImageResource(R.drawable.ic_down);
+                }
                 mNavigationView.getMenu().setGroupVisible(R.id.drawer_menu_accounts, false);
                 mNavigationView.getMenu().setGroupVisible(R.id.drawer_menu_standard, true);
                 mNavigationView.getMenu().setGroupVisible(R.id.drawer_menu_external_links, true);
@@ -1139,6 +1152,22 @@ public abstract class DrawerActivity extends ToolbarActivity implements DisplayU
         }
     }
 
+    /**
+     * Quota view can be either at navigation bottom or header
+     *
+     * @param id the view's id
+     * @return The view if found or <code>null</code> otherwise.
+     */
+    private View findQuotaViewById(int id) {
+        View v = ((NavigationView) findViewById(R.id.nav_view)).getHeaderView(0).findViewById(id);
+
+        if (v != null) {
+            return v;
+        } else {
+            return findViewById(id);
+        }
+    }
+
     /**
      * restart helper method which is called after a changing the current account.
      */

+ 66 - 35
src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java

@@ -62,6 +62,7 @@ import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.datamodel.VirtualFolderType;
 import com.owncloud.android.db.PreferenceManager;
 import com.owncloud.android.files.services.FileDownloader;
 import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;
@@ -231,6 +232,7 @@ public class FileDisplayActivity extends HookActivity
     protected void onPostCreate(Bundle savedInstanceState) {
         super.onPostCreate(savedInstanceState);
 
+
         if (!PermissionUtil.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
             // Check if we should show an explanation
             if (PermissionUtil.shouldShowRequestPermissionRationale(this,
@@ -255,22 +257,20 @@ public class FileDisplayActivity extends HookActivity
         }
 
         if (getIntent().getParcelableExtra(OCFileListFragment.SEARCH_EVENT) != null) {
-            switchToSearchFragment();
+            switchToSearchFragment(savedInstanceState);
 
             int menuId = getIntent().getIntExtra(DRAWER_MENU_ID, -1);
             if (menuId != -1) {
                 setupDrawer(menuId);
             }
-        } else if (savedInstanceState == null) {
-            createMinFragments();
+        } else {
+            createMinFragments(savedInstanceState);
             refreshList(true);
         }
 
         setIndeterminate(mSyncInProgress);
         // always AFTER setContentView(...) in onCreate(); to work around bug in its implementation
 
-        setBackgroundText();
-
         upgradeNotificationForInstantUpload();
     }
 
@@ -395,28 +395,36 @@ public class FileDisplayActivity extends HookActivity
         }
     }
 
-    private void switchToSearchFragment() {
-        OCFileListFragment listOfFiles = new OCFileListFragment();
-        Bundle args = new Bundle();
+    private void switchToSearchFragment(Bundle savedInstanceState) {
+        if (savedInstanceState == null) {
+            OCFileListFragment listOfFiles = new OCFileListFragment();
+            Bundle args = new Bundle();
 
-        args.putParcelable(OCFileListFragment.SEARCH_EVENT,
-                getIntent().getParcelableExtra(OCFileListFragment.SEARCH_EVENT));
-        args.putBoolean(OCFileListFragment.ARG_ALLOW_CONTEXTUAL_ACTIONS, true);
+            args.putParcelable(OCFileListFragment.SEARCH_EVENT,
+                    getIntent().getParcelableExtra(OCFileListFragment.SEARCH_EVENT));
+            args.putBoolean(OCFileListFragment.ARG_ALLOW_CONTEXTUAL_ACTIONS, true);
 
-        listOfFiles.setArguments(args);
-        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
-        transaction.add(R.id.left_fragment_container, listOfFiles, TAG_LIST_OF_FILES);
-        transaction.commit();
+            listOfFiles.setArguments(args);
+            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
+            transaction.add(R.id.left_fragment_container, listOfFiles, TAG_LIST_OF_FILES);
+            transaction.commit();
+        } else {
+            getSupportFragmentManager().findFragmentByTag(TAG_LIST_OF_FILES);
+        }
     }
 
-    private void createMinFragments() {
-        OCFileListFragment listOfFiles = new OCFileListFragment();
-        Bundle args = new Bundle();
-        args.putBoolean(OCFileListFragment.ARG_ALLOW_CONTEXTUAL_ACTIONS, true);
-        listOfFiles.setArguments(args);
-        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
-        transaction.add(R.id.left_fragment_container, listOfFiles, TAG_LIST_OF_FILES);
-        transaction.commit();
+    private void createMinFragments(Bundle savedInstanceState) {
+        if (savedInstanceState == null) {
+            OCFileListFragment listOfFiles = new OCFileListFragment();
+            Bundle args = new Bundle();
+            args.putBoolean(OCFileListFragment.ARG_ALLOW_CONTEXTUAL_ACTIONS, true);
+            listOfFiles.setArguments(args);
+            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
+            transaction.add(R.id.left_fragment_container, listOfFiles, TAG_LIST_OF_FILES);
+            transaction.commit();
+        } else {
+            getSupportFragmentManager().findFragmentByTag(TAG_LIST_OF_FILES);
+        }
     }
 
     private void initFragmentsWithFile() {
@@ -576,6 +584,14 @@ public class FileDisplayActivity extends HookActivity
         }
     }
 
+    public void resetSearchView() {
+        OCFileListFragment fileListFragment = getListOfFilesFragment();
+
+        if (fileListFragment != null) {
+            fileListFragment.setSearchFragment(false);
+        }
+    }
+
     protected void refreshSecondFragment(String downloadEvent, String downloadedRemotePath,
                                          boolean success) {
         FileFragment secondFragment = getSecondFragment();
@@ -1053,20 +1069,22 @@ public class FileDisplayActivity extends HookActivity
 
         if (searchView != null && !TextUtils.isEmpty(searchQuery)) {
             searchView.setQuery(searchQuery, true);
-        } else {
+        } else if (getListOfFilesFragment() != null && !getListOfFilesFragment().getIsSearchFragment()) {
             refreshListOfFilesFragment(false);
         }
 
         // Listen for sync messages
-        IntentFilter syncIntentFilter = new IntentFilter(FileSyncAdapter.EVENT_FULL_SYNC_START);
-        syncIntentFilter.addAction(FileSyncAdapter.EVENT_FULL_SYNC_END);
-        syncIntentFilter.addAction(FileSyncAdapter.EVENT_FULL_SYNC_FOLDER_CONTENTS_SYNCED);
-        syncIntentFilter.addAction(RefreshFolderOperation.EVENT_SINGLE_FOLDER_CONTENTS_SYNCED);
-        syncIntentFilter.addAction(RefreshFolderOperation.EVENT_SINGLE_FOLDER_SHARES_SYNCED);
-        mSyncBroadcastReceiver = new SyncBroadcastReceiver();
-        registerReceiver(mSyncBroadcastReceiver, syncIntentFilter);
-        //LocalBroadcastManager.getInstance(this).registerReceiver(mSyncBroadcastReceiver,
-        // syncIntentFilter);
+        if (getListOfFilesFragment() != null && !getListOfFilesFragment().getIsSearchFragment()) {
+            IntentFilter syncIntentFilter = new IntentFilter(FileSyncAdapter.EVENT_FULL_SYNC_START);
+            syncIntentFilter.addAction(FileSyncAdapter.EVENT_FULL_SYNC_END);
+            syncIntentFilter.addAction(FileSyncAdapter.EVENT_FULL_SYNC_FOLDER_CONTENTS_SYNCED);
+            syncIntentFilter.addAction(RefreshFolderOperation.EVENT_SINGLE_FOLDER_CONTENTS_SYNCED);
+            syncIntentFilter.addAction(RefreshFolderOperation.EVENT_SINGLE_FOLDER_SHARES_SYNCED);
+            mSyncBroadcastReceiver = new SyncBroadcastReceiver();
+            registerReceiver(mSyncBroadcastReceiver, syncIntentFilter);
+            //LocalBroadcastManager.getInstance(this).registerReceiver(mSyncBroadcastReceiver,
+            // syncIntentFilter);
+        }
 
         // Listen for upload messages
         IntentFilter uploadIntentFilter = new IntentFilter(FileUploader.getUploadFinishMessage());
@@ -1257,7 +1275,7 @@ public class FileDisplayActivity extends HookActivity
      * loading or folder is empty
      */
     private void setBackgroundText() {
-        OCFileListFragment ocFileListFragment = getListOfFilesFragment();
+        final OCFileListFragment ocFileListFragment = getListOfFilesFragment();
         if (ocFileListFragment != null) {
             if (!mSyncInProgress) {
                 ocFileListFragment.setEmptyListMessage(ExtendedListFragment.SearchType.NO_SEARCH);
@@ -1928,6 +1946,19 @@ public class FileDisplayActivity extends HookActivity
         showDetailsIntent.putExtra(EXTRA_FILE, file);
         showDetailsIntent.putExtra(EXTRA_ACCOUNT, getAccount());
         startActivity(showDetailsIntent);
+    }
+
+    /**
+     * Opens the image gallery showing the image {@link OCFile} received as parameter.
+     *
+     * @param file Image {@link OCFile} to show.
+     */
+    public void startImagePreview(OCFile file, VirtualFolderType type) {
+        Intent showDetailsIntent = new Intent(this, PreviewImageActivity.class);
+        showDetailsIntent.putExtra(PreviewImageActivity.EXTRA_FILE, file);
+        showDetailsIntent.putExtra(EXTRA_ACCOUNT, getAccount());
+        showDetailsIntent.putExtra(PreviewImageActivity.EXTRA_VIRTUAL_TYPE, type);
+        startActivity(showDetailsIntent);
 
     }
 
@@ -2032,7 +2063,7 @@ public class FileDisplayActivity extends HookActivity
 
     private void refreshList(boolean ignoreETag) {
         OCFileListFragment listOfFiles = getListOfFilesFragment();
-        if (listOfFiles != null) {
+        if (listOfFiles != null && !listOfFiles.getIsSearchFragment()) {
             OCFile folder = listOfFiles.getCurrentFile();
             if (folder != null) {
                 /*mFile = mContainerActivity.getStorageManager().getFileById(mFile.getFileId());

+ 27 - 6
src/main/java/com/owncloud/android/ui/activity/FolderSyncActivity.java

@@ -29,6 +29,7 @@ import android.support.annotation.NonNull;
 import android.support.design.widget.BottomNavigationView;
 import android.support.v4.app.FragmentManager;
 import android.support.v4.app.FragmentTransaction;
+import android.support.v4.widget.DrawerLayout;
 import android.support.v7.widget.GridLayoutManager;
 import android.support.v7.widget.RecyclerView;
 import android.view.MenuItem;
@@ -72,6 +73,7 @@ public class FolderSyncActivity extends FileActivity implements FolderSyncAdapte
 
     private static final String SYNCED_FOLDER_PREFERENCES_DIALOG_TAG = "SYNCED_FOLDER_PREFERENCES_DIALOG";
     public static final String PRIORITIZED_FOLDER = "Camera";
+    public static final String EXTRA_SHOW_SIDEBAR = "SHOW_SIDEBAR";
 
     private static final String SCREEN_NAME = "Auto upload";
 
@@ -84,11 +86,16 @@ public class FolderSyncActivity extends FileActivity implements FolderSyncAdapte
     private SyncedFolderProvider mSyncedFolderProvider;
     private List<SyncedFolderDisplayItem> syncFolderItems;
     private SyncedFolderPreferencesDialogFragment mSyncedFolderPreferencesDialogFragment;
+    private boolean showSidebar = true;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
+        if (getIntent().getExtras() != null) {
+            showSidebar = getIntent().getExtras().getBoolean(EXTRA_SHOW_SIDEBAR);
+        }
+
         setContentView(R.layout.folder_sync_layout);
 
         // setup toolbar
@@ -96,9 +103,16 @@ public class FolderSyncActivity extends FileActivity implements FolderSyncAdapte
 
         // setup drawer
         setupDrawer(R.id.nav_folder_sync);
-        getSupportActionBar().setTitle(getString(R.string.drawer_folder_sync));
+
+        if (!showSidebar) {
+            setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
+            mDrawerToggle.setDrawerIndicatorEnabled(false);
+        }
 
         setupContent();
+
+        getSupportActionBar().setTitle(getString(R.string.drawer_folder_sync));
+        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
     }
 
     @Override
@@ -117,7 +131,8 @@ public class FolderSyncActivity extends FileActivity implements FolderSyncAdapte
         mEmpty = (TextView) findViewById(android.R.id.empty);
 
         final int gridWidth = getResources().getInteger(R.integer.media_grid_width);
-        mAdapter = new FolderSyncAdapter(this, gridWidth, this);
+        boolean lightVersion = getResources().getBoolean(R.bool.syncedFolder_light);
+        mAdapter = new FolderSyncAdapter(this, gridWidth, this, lightVersion);
         mSyncedFolderProvider = new SyncedFolderProvider(getContentResolver());
 
         final GridLayoutManager lm = new GridLayoutManager(this, gridWidth);
@@ -327,6 +342,7 @@ public class FolderSyncActivity extends FileActivity implements FolderSyncAdapte
         }
         return result;
     }
+
     /**
      * show/hide recycler view list or the empty message / progress info.
      *
@@ -345,10 +361,15 @@ public class FolderSyncActivity extends FileActivity implements FolderSyncAdapte
         boolean result = true;
         switch (item.getItemId()) {
             case android.R.id.home: {
-                if (isDrawerOpen()) {
-                    closeDrawer();
+                if (showSidebar) {
+                    if (isDrawerOpen()) {
+                        closeDrawer();
+                    } else {
+                        openDrawer();
+                    }
                 } else {
-                    openDrawer();
+                    Intent settingsIntent = new Intent(getApplicationContext(), Preferences.class);
+                    startActivity(settingsIntent);
                 }
                 break;
             }
@@ -431,7 +452,7 @@ public class FolderSyncActivity extends FileActivity implements FolderSyncAdapte
         }
         mSyncedFolderPreferencesDialogFragment = null;
 
-        if(dirty) {
+        if (dirty) {
             mAdapter.setSyncFolderItem(syncedFolder.getSection(), item);
         }
     }

+ 83 - 21
src/main/java/com/owncloud/android/ui/activity/Preferences.java

@@ -42,6 +42,8 @@ import android.preference.Preference.OnPreferenceClickListener;
 import android.preference.PreferenceActivity;
 import android.preference.PreferenceCategory;
 import android.preference.PreferenceManager;
+import android.preference.PreferenceScreen;
+import android.preference.SwitchPreference;
 import android.support.annotation.LayoutRes;
 import android.support.annotation.Nullable;
 import android.support.v7.app.ActionBar;
@@ -58,6 +60,7 @@ import com.owncloud.android.BuildConfig;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.authentication.AccountUtils;
+import com.owncloud.android.datamodel.ArbitraryDataProvider;
 import com.owncloud.android.datamodel.ExternalLinksProvider;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.datastorage.DataStorageProvider;
@@ -91,14 +94,16 @@ public class Preferences extends PreferenceActivity
 
     private static final int ACTION_REQUEST_CODE_DAVDROID_SETUP = 10;
 
+    public static final String SYNCED_FOLDER_LIGHT_UPLOAD_ON_WIFI = "SYNCED_FOLDER_LIGHT_UPLOAD_ON_WIFI";
+
     /**
      * The user's server base uri.
      */
     private Uri mUri;
 
-    private CheckBoxPreference pCode;
-    private CheckBoxPreference fPrint;
-    private CheckBoxPreference mShowHiddenFiles;
+    private SwitchPreference pCode;
+    private SwitchPreference fPrint;
+    private SwitchPreference mShowHiddenFiles;
     private Preference pAboutApp;
     private AppCompatDelegate mDelegate;
 
@@ -161,11 +166,55 @@ public class Preferences extends PreferenceActivity
         // Register context menu for list of preferences.
         registerForContextMenu(getListView());
 
-        PreferenceCategory preferenceCategoryDetails = (PreferenceCategory) findPreference("details");
+        // Synced folders
+        PreferenceCategory preferenceCategoryFolderSync = (PreferenceCategory) findPreference("folder_sync");
+        PreferenceScreen preferenceScreen = (PreferenceScreen) findPreference("preference_screen");
+
+        if (!getResources().getBoolean(R.bool.syncedFolder_light)) {
+            preferenceScreen.removePreference(preferenceCategoryFolderSync);
+        } else {
+            // Upload on WiFi
+            final ArbitraryDataProvider arbitraryDataProvider = new ArbitraryDataProvider(getContentResolver());
+            final Account account = AccountUtils.getCurrentOwnCloudAccount(getApplicationContext());
+
+            final SwitchPreference pUploadOnWifiCheckbox = (SwitchPreference) findPreference("synced_folder_on_wifi");
+            pUploadOnWifiCheckbox.setChecked(
+                    arbitraryDataProvider.getBooleanValue(account, SYNCED_FOLDER_LIGHT_UPLOAD_ON_WIFI));
 
+            pUploadOnWifiCheckbox.setOnPreferenceClickListener(new OnPreferenceClickListener() {
+                @Override
+                public boolean onPreferenceClick(Preference preference) {
+                    arbitraryDataProvider.storeOrUpdateKeyValue(account, SYNCED_FOLDER_LIGHT_UPLOAD_ON_WIFI,
+                            String.valueOf(pUploadOnWifiCheckbox.isChecked()));
+
+                    return true;
+                }
+            });
 
-        pCode = (CheckBoxPreference) findPreference(PassCodeActivity.PREFERENCE_SET_PASSCODE);
-        if (pCode != null) {
+            Preference pSyncedFolder = findPreference("folder_sync_folders");
+            if (pSyncedFolder != null) {
+                if (getResources().getBoolean(R.bool.syncedFolder_light)
+                        && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+                    pSyncedFolder.setOnPreferenceClickListener(new OnPreferenceClickListener() {
+                        @Override
+                        public boolean onPreferenceClick(Preference preference) {
+                            Intent folderSyncIntent = new Intent(getApplicationContext(), FolderSyncActivity.class);
+                            folderSyncIntent.putExtra(FolderSyncActivity.EXTRA_SHOW_SIDEBAR, false);
+                            startActivity(folderSyncIntent);
+                            return true;
+                        }
+                    });
+                } else {
+                    preferenceCategoryFolderSync.removePreference(pSyncedFolder);
+                }
+            }
+        }
+
+        PreferenceCategory preferenceCategoryDetails = (PreferenceCategory) findPreference("details");
+
+        boolean fPassCodeEnabled = getResources().getBoolean(R.bool.passcode_enabled);
+        pCode = (SwitchPreference) findPreference(PassCodeActivity.PREFERENCE_SET_PASSCODE);
+        if (pCode != null && fPassCodeEnabled) {
             pCode.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
                 @Override
                 public boolean onPreferenceChange(Preference preference, Object newValue) {
@@ -184,10 +233,12 @@ public class Preferences extends PreferenceActivity
                     return false;
                 }
             });
+        } else {
+            preferenceCategoryDetails.removePreference(pCode);
         }
 
         boolean fPrintEnabled = getResources().getBoolean(R.bool.fingerprint_enabled);
-        fPrint = (CheckBoxPreference) findPreference(FingerprintActivity.PREFERENCE_USE_FINGERPRINT);
+        fPrint = (SwitchPreference) findPreference(FingerprintActivity.PREFERENCE_USE_FINGERPRINT);
         if (fPrint != null) {
             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                 if (FingerprintActivity.isFingerprintCapable(MainApp.getAppContext()) && fPrintEnabled) {
@@ -237,18 +288,25 @@ public class Preferences extends PreferenceActivity
             }
         }
 
-        mShowHiddenFiles = (CheckBoxPreference) findPreference("show_hidden_files");
-        mShowHiddenFiles.setOnPreferenceClickListener(new OnPreferenceClickListener() {
-            @Override
-            public boolean onPreferenceClick(Preference preference) {
-                SharedPreferences appPrefs =
-                        PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
-                SharedPreferences.Editor editor = appPrefs.edit();
-                editor.putBoolean("show_hidden_files_pref", mShowHiddenFiles.isChecked());
-                editor.apply();
-                return true;
-            }
-        });
+        boolean fShowHiddenFilesEnabled = getResources().getBoolean(R.bool.passcode_enabled);
+        mShowHiddenFiles = (SwitchPreference) findPreference("show_hidden_files");
+
+        if (fShowHiddenFilesEnabled) {
+            mShowHiddenFiles.setOnPreferenceClickListener(new OnPreferenceClickListener() {
+                @Override
+                public boolean onPreferenceClick(Preference preference) {
+                    SharedPreferences appPrefs =
+                            PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
+                    SharedPreferences.Editor editor = appPrefs.edit();
+                    editor.putBoolean("show_hidden_files_pref", mShowHiddenFiles.isChecked());
+                    editor.apply();
+                    return true;
+                }
+            });
+        } else {
+            preferenceCategoryDetails.removePreference(mShowHiddenFiles);
+
+        }
 
         PreferenceCategory preferenceCategoryMore = (PreferenceCategory) findPreference("more");
 
@@ -277,6 +335,10 @@ public class Preferences extends PreferenceActivity
             }
         }
 
+        if (!fShowHiddenFilesEnabled && !fPrintEnabled && !fPassCodeEnabled) {
+            preferenceScreen.removePreference(preferenceCategoryDetails);
+        }
+
         boolean helpEnabled = getResources().getBoolean(R.bool.help_enabled);
         Preference pHelp = findPreference("help");
         if (pHelp != null) {
@@ -454,7 +516,7 @@ public class Preferences extends PreferenceActivity
             mPrefInstantPictureUploadOnlyOnCharging = findPreference("instant_upload_on_charging");
             mPrefInstantUpload = findPreference("instant_uploading");
 
-            toggleInstantPictureOptions(((CheckBoxPreference) mPrefInstantUpload).isChecked());
+            toggleInstantPictureOptions(((SwitchPreference) mPrefInstantUpload).isChecked());
 
             mPrefInstantUpload.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
 
@@ -462,7 +524,7 @@ public class Preferences extends PreferenceActivity
                 public boolean onPreferenceChange(Preference preference, Object newValue) {
                     toggleInstantPictureOptions((Boolean) newValue);
                     toggleInstantUploadBehaviour(
-                            ((CheckBoxPreference) mPrefInstantVideoUpload).isChecked(),
+                            ((SwitchPreference) mPrefInstantVideoUpload).isChecked(),
                             (Boolean) newValue);
                     return true;
                 }

+ 241 - 29
src/main/java/com/owncloud/android/ui/adapter/ActivityListAdapter.java

@@ -20,14 +20,21 @@
 package com.owncloud.android.ui.adapter;
 
 import android.content.Context;
+import android.content.res.Resources;
 import android.graphics.drawable.PictureDrawable;
 import android.net.Uri;
 import android.support.v7.widget.RecyclerView;
+import android.text.SpannableStringBuilder;
 import android.text.TextUtils;
+import android.text.method.LinkMovementMethod;
+import android.text.style.ClickableSpan;
+import android.text.style.StyleSpan;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.GridLayout;
 import android.widget.ImageView;
+import android.widget.LinearLayout;
 import android.widget.TextView;
 
 import com.bumptech.glide.GenericRequestBuilder;
@@ -36,70 +43,203 @@ import com.bumptech.glide.load.engine.DiskCacheStrategy;
 import com.bumptech.glide.load.model.StreamEncoder;
 import com.bumptech.glide.load.resource.file.FileToStreamDecoder;
 import com.caverock.androidsvg.SVG;
+import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
+import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.lib.common.OwnCloudClient;
 import com.owncloud.android.lib.resources.activities.models.Activity;
+import com.owncloud.android.lib.resources.activities.models.RichElement;
+import com.owncloud.android.lib.resources.activities.models.RichObject;
+import com.owncloud.android.ui.interfaces.ActivityListInterface;
 import com.owncloud.android.utils.DisplayUtils;
+import com.owncloud.android.utils.MimeTypeUtil;
+import com.owncloud.android.utils.glide.CustomGlideStreamLoader;
 import com.owncloud.android.utils.svg.SvgDecoder;
 import com.owncloud.android.utils.svg.SvgDrawableTranscoder;
 import com.owncloud.android.utils.svg.SvgSoftwareLayerSetter;
 
 import java.io.InputStream;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 /**
  * Adapter for the activity view
  */
 
-public class ActivityListAdapter extends RecyclerView.Adapter<ActivityListAdapter.ActivityViewHolder> {
+public class ActivityListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
+
+    public static final int HEADER_TYPE = 100;
+    public static final int ACTIVITY_TYPE = 101;
+    private final ActivityListInterface activityListInterface;
+    private final int px;
+    private OwnCloudClient mClient;
 
     private Context context;
     private List<Object> mValues;
 
-    public ActivityListAdapter(Context context) {
+    public ActivityListAdapter(Context context, ActivityListInterface activityListInterface) {
         this.mValues = new ArrayList<>();
         this.context = context;
+        this.activityListInterface = activityListInterface;
+        px = getThumbnailDimension();
     }
 
-    public void setActivityItems(List<Object> activityItems) {
+    public void setActivityItems(List<Object> activityItems, OwnCloudClient client) {
+        this.mClient = client;
         mValues.clear();
-        mValues.addAll(activityItems);
+        String sTime = "";
+        for (Object o : activityItems) {
+            Activity activity = (Activity) o;
+            String time = null;
+            if (activity.getDatetime() != null) {
+                time = DisplayUtils.getRelativeTimestamp(context,
+                        activity.getDatetime().getTime()).toString();
+            } else if (activity.getDate() != null) {
+                time = DisplayUtils.getRelativeTimestamp(context,
+                        activity.getDate().getTime()).toString();
+            } else {
+                time = "Unknown";
+            }
+
+            if (sTime.equalsIgnoreCase(time)) {
+                mValues.add(activity);
+            } else {
+
+                sTime = time;
+                mValues.add(sTime);
+                mValues.add(activity);
+            }
+        }
         notifyDataSetChanged();
-    }
 
-    @Override
-    public ActivityViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
-        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_list_item, parent, false);
-        return new ActivityViewHolder(v);
     }
 
     @Override
-    public void onBindViewHolder(ActivityViewHolder holder, int position) {
-        Activity activity = (Activity) mValues.get(position);
-        if (activity.getDatetime() != null) {
-            holder.dateTime.setText(DisplayUtils.getRelativeTimestamp(context,
-                    activity.getDatetime().getTime()));
+    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+        if (viewType == ACTIVITY_TYPE) {
+            View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_list_item, parent, false);
+            return new ActivityViewHolder(v);
         } else {
-            holder.dateTime.setText(DisplayUtils.getRelativeTimestamp(context,
-                    activity.getDate().getTime()));
+            View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_list_item_header, parent, false);
+            return new ActivityViewHeaderHolder(v);
         }
 
-        if (!TextUtils.isEmpty(activity.getSubject())) {
-            holder.subject.setText(activity.getSubject());
-            holder.subject.setVisibility(View.VISIBLE);
-        } else {
-            holder.subject.setVisibility(View.GONE);
-        }
+    }
+
+    @Override
+    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
+
+        if (holder instanceof ActivityViewHolder) {
+            final ActivityViewHolder activityViewHolder = (ActivityViewHolder) holder;
+            Activity activity = (Activity) mValues.get(position);
+            if (activity.getDatetime() != null) {
+                activityViewHolder.dateTime.setText(DisplayUtils.getRelativeTimestamp(context,
+                        activity.getDatetime().getTime()));
+            } else {
+                activityViewHolder.dateTime.setText(DisplayUtils.getRelativeTimestamp(context,
+                        new Date().getTime()));
+            }
+
+            if (activity.getRichSubjectElement() != null &&
+                    !TextUtils.isEmpty(activity.getRichSubjectElement().getRichSubject())) {
+                activityViewHolder.subject.setVisibility(View.VISIBLE);
+                activityViewHolder.subject.setMovementMethod(LinkMovementMethod.getInstance());
+                activityViewHolder.subject.setText(addClickablePart(activity.getRichSubjectElement()),
+                        TextView.BufferType.SPANNABLE);
+                activityViewHolder.subject.setVisibility(View.VISIBLE);
+            } else if (!TextUtils.isEmpty(activity.getSubject())) {
+                activityViewHolder.subject.setVisibility(View.VISIBLE);
+                activityViewHolder.subject.setText(activity.getSubject());
+            } else {
+                activityViewHolder.subject.setVisibility(View.GONE);
+            }
 
-        if (!TextUtils.isEmpty(activity.getMessage())) {
-            holder.message.setText(activity.getMessage());
-            holder.message.setVisibility(View.VISIBLE);
+            if (!TextUtils.isEmpty(activity.getMessage())) {
+                activityViewHolder.message.setText(activity.getMessage());
+                activityViewHolder.message.setVisibility(View.VISIBLE);
+            } else {
+                activityViewHolder.message.setVisibility(View.GONE);
+            }
+
+            if (!TextUtils.isEmpty(activity.getIcon())) {
+                downloadIcon(activity.getIcon(), activityViewHolder.activityIcon);
+            }
+
+            if (activity.getRichSubjectElement() != null &&
+                    activity.getRichSubjectElement().getRichObjectList().size() > 0) {
+
+                activityViewHolder.list.setVisibility(View.VISIBLE);
+                activityViewHolder.list.removeAllViews();
+
+                activityViewHolder.list.post(new Runnable() {
+                    @Override
+                    public void run() {
+                        int w = activityViewHolder.list.getMeasuredWidth();
+
+                        int elPxSize = px + 20;
+                        int totalColumnCount = (int) Math.floor(w / elPxSize);
+                        activityViewHolder.list.setColumnCount(totalColumnCount);
+                    }
+                });
+
+
+                for (RichObject richObject : activity.getRichSubjectElement().getRichObjectList()) {
+                    ImageView imageView = createThumbnail(richObject);
+                    activityViewHolder.list.addView(imageView);
+                }
+
+            } else {
+                activityViewHolder.list.removeAllViews();
+                activityViewHolder.list.setVisibility(View.GONE);
+            }
         } else {
-            holder.message.setVisibility(View.GONE);
+            ActivityViewHeaderHolder activityViewHeaderHolder = (ActivityViewHeaderHolder) holder;
+            activityViewHeaderHolder.title.setText((String) mValues.get(position));
         }
+    }
+
+    private ImageView createThumbnail(final RichObject richObject) {
+        OCFile file = new OCFile("/" + richObject.getPath());
+        file.setRemoteId(richObject.getId());
+
+        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(px, px);
+        params.setMargins(10, 10, 10, 10);
+        ImageView imageView = new ImageView(context);
+        imageView.setLayoutParams(params);
+        imageView.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                activityListInterface.onActivityClicked(richObject);
+            }
+        });
+        setBitmap(file, imageView);
+
+        return imageView;
+    }
 
-        if (!TextUtils.isEmpty(activity.getIcon())) {
-            downloadIcon(activity.getIcon(), holder.activityIcon);
+    private void setBitmap(OCFile file, ImageView fileIcon) {
+        // No Folder
+        if (!file.isFolder()) {
+            if ((MimeTypeUtil.isImage(file) || MimeTypeUtil.isVideo(file))) {
+                String uri = mClient.getBaseUri() + "" +
+                        "/index.php/apps/files/api/v1/thumbnail/" +
+                        px + "/" + px + Uri.encode(file.getRemotePath(), "/");
+
+                Glide.with(context).using(new CustomGlideStreamLoader()).load(uri).into(fileIcon); //Using custom fetcher
+
+            } else {
+                fileIcon.setImageResource(MimeTypeUtil.getFileTypeIconId(file.getMimetype(),
+                        file.getFileName()));
+            }
+        } else {
+            // Folder
+            fileIcon.setImageDrawable(
+                    MimeTypeUtil.getFolderTypeIcon(
+                            file.isSharedWithMe() || file.isSharedWithSharee(),
+                            file.isSharedViaLink()
+                    )
+            );
         }
     }
 
@@ -125,17 +265,76 @@ public class ActivityListAdapter extends RecyclerView.Adapter<ActivityListAdapte
                 .into(itemViewType);
     }
 
+    private SpannableStringBuilder addClickablePart(RichElement richElement) {
+        String text = richElement.getRichSubject();
+        SpannableStringBuilder ssb = new SpannableStringBuilder(text);
+
+        int idx1 = text.indexOf("{");
+        int idx2;
+        while (idx1 != -1) {
+            idx2 = text.indexOf("}", idx1) + 1;
+            final String clickString = text.substring(idx1 + 1, idx2 - 1);
+            final RichObject richObject = searchObjectByName(richElement.getRichObjectList(), clickString);
+            if (richObject != null) {
+                String name = richObject.getName();
+                ssb.replace(idx1, idx2, name);
+                text = ssb.toString();
+                idx2 = idx1 + name.length();
+                ssb.setSpan(new ClickableSpan() {
+                    @Override
+                    public void onClick(View widget) {
+                        activityListInterface.onActivityClicked(richObject);
+                    }
+                }, idx1, idx2, 0);
+                ssb.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), idx1, idx2, 0);
+            }
+            idx1 = text.indexOf("{", idx2);
+        }
+
+        return ssb;
+    }
+
+    public RichObject searchObjectByName(ArrayList<RichObject> richObjectList, String name) {
+        for (RichObject richObject : richObjectList) {
+            if (richObject.getTag().equalsIgnoreCase(name))
+                return richObject;
+        }
+        return null;
+    }
+
+
+    @Override
+    public int getItemViewType(int position) {
+        if (mValues.get(position) instanceof Activity)
+            return ACTIVITY_TYPE;
+        else
+            return HEADER_TYPE;
+    }
+
     @Override
     public int getItemCount() {
         return mValues.size();
     }
 
-    class ActivityViewHolder extends RecyclerView.ViewHolder {
+    /**
+     * Converts size of file icon from dp to pixel
+     *
+     * @return int
+     */
+    private int getThumbnailDimension() {
+        // Converts dp to pixel
+        Resources r = MainApp.getAppContext().getResources();
+        Double d = Math.pow(2, Math.floor(Math.log(r.getDimension(R.dimen.file_icon_size_grid)) / Math.log(2))) / 2;
+        return d.intValue();
+    }
+
+    private class ActivityViewHolder extends RecyclerView.ViewHolder {
 
         private final ImageView activityIcon;
         private final TextView subject;
         private final TextView message;
         private final TextView dateTime;
+        private final GridLayout list;
 
         private ActivityViewHolder(View itemView) {
             super(itemView);
@@ -143,6 +342,19 @@ public class ActivityListAdapter extends RecyclerView.Adapter<ActivityListAdapte
             subject = (TextView) itemView.findViewById(R.id.activity_subject);
             message = (TextView) itemView.findViewById(R.id.activity_message);
             dateTime = (TextView) itemView.findViewById(R.id.activity_datetime);
+            list = (GridLayout) itemView.findViewById(R.id.list);
+        }
+    }
+
+    private class ActivityViewHeaderHolder extends RecyclerView.ViewHolder {
+
+        private final TextView title;
+
+        private ActivityViewHeaderHolder(View itemView) {
+            super(itemView);
+            title = (TextView) itemView.findViewById(R.id.title_header);
+
         }
     }
+
 }

+ 89 - 31
src/main/java/com/owncloud/android/ui/adapter/FileListListAdapter.java

@@ -24,6 +24,7 @@ package com.owncloud.android.ui.adapter;
 
 
 import android.accounts.Account;
+import android.content.ContentValues;
 import android.content.Context;
 import android.graphics.Bitmap;
 import android.graphics.Color;
@@ -46,7 +47,9 @@ import com.owncloud.android.authentication.AccountUtils;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.datamodel.ThumbnailsCacheManager;
+import com.owncloud.android.datamodel.VirtualFolderType;
 import com.owncloud.android.db.PreferenceManager;
+import com.owncloud.android.db.ProviderMeta;
 import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;
 import com.owncloud.android.files.services.FileUploader.FileUploaderBinder;
 import com.owncloud.android.lib.common.operations.RemoteOperationResult;
@@ -54,6 +57,7 @@ import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.lib.resources.files.ReadRemoteFileOperation;
 import com.owncloud.android.lib.resources.files.RemoteFile;
 import com.owncloud.android.lib.resources.shares.OCShare;
+import com.owncloud.android.lib.resources.shares.ShareType;
 import com.owncloud.android.services.OperationsService.OperationsServiceBinder;
 import com.owncloud.android.ui.activity.ComponentsGetter;
 import com.owncloud.android.ui.fragment.ExtendedListFragment;
@@ -471,39 +475,18 @@ public class FileListListAdapter extends BaseAdapter {
         }
     }
 
-    public void setData(ArrayList<Object> objects, ExtendedListFragment.SearchType searchType) {
+    public void setData(ArrayList<Object> objects, ExtendedListFragment.SearchType searchType, FileDataStorageManager storageManager) {
+        if (storageManager != null && mStorageManager == null) {
+            mStorageManager = storageManager;
+        }
         mFiles = new Vector<>();
-        if (searchType.equals(ExtendedListFragment.SearchType.SHARED_FILTER)) {
-            ArrayList<OCShare> shares = new ArrayList<>();
-            for (int i = 0; i < objects.size(); i++) {
-                // check type before cast as of long running data fetch it is possible that old result is filled
-                if (objects.get(i) instanceof OCShare) {
-                    OCShare ocShare = (OCShare) objects.get(i);
-
-                    shares.add(ocShare);
-
-                    // get ocFile from Server to have an up-to-date copy
-                    ReadRemoteFileOperation operation = new ReadRemoteFileOperation(ocShare.getPath());
-                    RemoteOperationResult result = operation.execute(mAccount, mContext);
-                    if (result.isSuccess()) {
-                        OCFile file = FileStorageUtils.fillOCFile((RemoteFile) result.getData().get(0));
 
-                        mStorageManager.saveFile(file);
-
-                        if (!mFiles.contains(file)) {
-                            mFiles.add(file);
-                        }
-                    } else {
-                        Log_OC.e(TAG, "Error in getting prop for file: " + ocShare.getPath());
-                    }
-                }
-            }
-            mStorageManager.saveShares(shares);
-        } else {
-            for (int i = 0; i < objects.size(); i++) {
-                OCFile ocFile = FileStorageUtils.fillOCFile((RemoteFile) objects.get(i));
-                searchForLocalFileInDefaultPath(ocFile);
-                mFiles.add(ocFile);
+        // early exit
+        if (objects.size() > 0 && mStorageManager != null) {
+            if (searchType.equals(ExtendedListFragment.SearchType.SHARED_FILTER)) {
+                parseShares(objects);
+            } else {
+                parseVirtuals(objects, searchType);
             }
         }
 
@@ -528,6 +511,81 @@ public class FileListListAdapter extends BaseAdapter {
         });
     }
 
+    private void parseShares(ArrayList<Object> objects) {
+        ArrayList<OCShare> shares = new ArrayList<>();
+        for (int i = 0; i < objects.size(); i++) {
+            // check type before cast as of long running data fetch it is possible that old result is filled
+            if (objects.get(i) instanceof OCShare) {
+                OCShare ocShare = (OCShare) objects.get(i);
+
+                shares.add(ocShare);
+
+                // get ocFile from Server to have an up-to-date copy
+                ReadRemoteFileOperation operation = new ReadRemoteFileOperation(ocShare.getPath());
+                RemoteOperationResult result = operation.execute(mAccount, mContext);
+                if (result.isSuccess()) {
+                    OCFile file = FileStorageUtils.fillOCFile((RemoteFile) result.getData().get(0));
+
+                    ShareType newShareType = ocShare.getShareType();
+                    if (newShareType == ShareType.PUBLIC_LINK) {
+                        file.setShareViaLink(true);
+                    } else if (newShareType == ShareType.USER || newShareType == ShareType.GROUP ||
+                                    newShareType == ShareType.EMAIL || newShareType == ShareType.FEDERATED) {
+                        file.setShareWithSharee(true);
+                    }
+
+                    mStorageManager.saveFile(file);
+
+                    if (!mFiles.contains(file)) {
+                        mFiles.add(file);
+                    }
+                } else {
+                    Log_OC.e(TAG, "Error in getting prop for file: " + ocShare.getPath());
+                }
+            }
+        }
+        mStorageManager.saveShares(shares);
+    }
+
+    private void parseVirtuals(ArrayList<Object> objects, ExtendedListFragment.SearchType searchType) {
+        VirtualFolderType type;
+        boolean onlyImages = false;
+        switch (searchType) {
+            case FAVORITE_SEARCH:
+                type = VirtualFolderType.FAVORITE;
+                break;
+            case PHOTO_SEARCH:
+                type = VirtualFolderType.PHOTOS;
+                onlyImages = true;
+                break;
+            default:
+                type = VirtualFolderType.NONE;
+                break;
+        }
+
+        mStorageManager.deleteVirtuals(type);
+
+        ArrayList<ContentValues> contentValues = new ArrayList<>();
+
+        for (int i = 0; i < objects.size(); i++) {
+            OCFile ocFile = FileStorageUtils.fillOCFile((RemoteFile) objects.get(i));
+            searchForLocalFileInDefaultPath(ocFile);
+            ocFile = mStorageManager.saveFileWithParent(ocFile, mContext);
+
+            if (!onlyImages || MimeTypeUtil.isImage(ocFile)) {
+                mFiles.add(ocFile);
+            }
+
+            ContentValues cv = new ContentValues();
+            cv.put(ProviderMeta.ProviderTableMeta.VIRTUAL_TYPE, type.toString());
+            cv.put(ProviderMeta.ProviderTableMeta.VIRTUAL_OCFILE_ID, ocFile.getFileId());
+
+            contentValues.add(cv);
+        }
+
+        mStorageManager.saveVirtuals(type, contentValues);
+    }
+
     /**
      * Filter for getting only the folders
      *

+ 15 - 9
src/main/java/com/owncloud/android/ui/adapter/FolderSyncAdapter.java

@@ -51,13 +51,15 @@ public class FolderSyncAdapter extends SectionedRecyclerViewAdapter<FolderSyncAd
     private final int mGridTotal;
     private final ClickListener mListener;
     private final List<SyncedFolderDisplayItem> mSyncFolderItems;
+    private final boolean mLight;
 
-    public FolderSyncAdapter(Context context, int gridWidth, ClickListener listener) {
+    public FolderSyncAdapter(Context context, int gridWidth, ClickListener listener, boolean light) {
         mContext = context;
         mGridWidth = gridWidth;
         mGridTotal = gridWidth * 2;
         mListener = listener;
         mSyncFolderItems = new ArrayList<>();
+        mLight = light;
     }
 
     public void setSyncFolderItems(List<SyncedFolderDisplayItem> syncFolderItems) {
@@ -100,14 +102,18 @@ public class FolderSyncAdapter extends SectionedRecyclerViewAdapter<FolderSyncAd
         });
         setSyncButtonActiveIcon(holder.syncStatusButton, mSyncFolderItems.get(section).isEnabled());
 
-        holder.menuButton.setVisibility(View.VISIBLE);
-        holder.menuButton.setTag(section);
-        holder.menuButton.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                mListener.onSyncFolderSettingsClick(section, mSyncFolderItems.get(section));
-            }
-        });
+        if (mLight) {
+            holder.menuButton.setVisibility(View.GONE);
+        } else {
+            holder.menuButton.setVisibility(View.VISIBLE);
+            holder.menuButton.setTag(section);
+            holder.menuButton.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    mListener.onSyncFolderSettingsClick(section, mSyncFolderItems.get(section));
+                }
+            });
+        }
     }
 
     @Override

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

@@ -5,16 +5,16 @@
  * Copyright (C) 2017 Mario Danic
  * Copyright (C) 2012 Bartek Przybylski
  * Copyright (C) 2012-2016 ownCloud Inc.
- *
+ * <p>
  * 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.
- *
+ * <p>
  * 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.
- *
+ * <p>
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
@@ -98,7 +98,7 @@ public class ExtendedListFragment extends Fragment
     private static final String KEY_IS_GRID_VISIBLE = "IS_GRID_VISIBLE";
 
     protected SwipeRefreshLayout mRefreshListLayout;
-    private SwipeRefreshLayout mRefreshGridLayout;
+    protected SwipeRefreshLayout mRefreshGridLayout;
     protected SwipeRefreshLayout mRefreshEmptyLayout;
     protected LinearLayout mEmptyListContainer;
     protected TextView mEmptyListMessage;
@@ -298,13 +298,8 @@ public class ExtendedListFragment extends Fragment
 
     @Override
     public boolean onQueryTextSubmit(String query) {
-        if (getFragmentManager().findFragmentByTag(FileDisplayActivity.TAG_SECOND_FRAGMENT)
-                instanceof ExtendedListFragment){
-            performSearch(query, true);
-            return true;
-        } else {
-            return false;
-        }
+        performSearch(query, true);
+        return true;
     }
 
     private void performSearch(final String query, boolean isSubmit) {
@@ -349,7 +344,9 @@ public class ExtendedListFragment extends Fragment
             Activity activity;
             if ((activity = getActivity()) != null) {
                 if (activity instanceof FileDisplayActivity) {
-                    ((FileDisplayActivity) activity).refreshListOfFilesFragment(true);
+                    FileDisplayActivity fileDisplayActivity = (FileDisplayActivity) activity;
+                    fileDisplayActivity.resetSearchView();
+                    fileDisplayActivity.refreshListOfFilesFragment(true);
                 } else if (activity instanceof UploadFilesActivity) {
                     LocalFileListAdapter localFileListAdapter = (LocalFileListAdapter) mAdapter;
                     localFileListAdapter.filter(query);
@@ -433,6 +430,10 @@ public class ExtendedListFragment extends Fragment
         return v;
     }
 
+    public void setEmptyListVisible() {
+        mEmptyListContainer.setVisibility(View.VISIBLE);
+    }
+
     protected void setupEmptyList(View view) {
         mEmptyListContainer = (LinearLayout) view.findViewById(R.id.empty_list_view);
         mEmptyListMessage = (TextView) view.findViewById(R.id.empty_list_view_text);
@@ -454,7 +455,6 @@ public class ExtendedListFragment extends Fragment
             mTops = savedInstanceState.getIntegerArrayList(KEY_TOPS);
             mHeightCell = savedInstanceState.getInt(KEY_HEIGHT_CELL);
             setMessageForEmptyList(savedInstanceState.getString(KEY_EMPTY_LIST_MESSAGE));
-
         } else {
             mIndexes = new ArrayList<>();
             mFirstPositions = new ArrayList<>();
@@ -481,7 +481,7 @@ public class ExtendedListFragment extends Fragment
      * Calculates the position of the item that will be used as a reference to
      * reposition the visible items in the list when the device is turned to
      * other position.
-     *
+     * <p>
      * The current policy is take as a reference the visible item in the center
      * of the screen.
      *
@@ -586,9 +586,9 @@ public class ExtendedListFragment extends Fragment
 
     /**
      * Disables swipe gesture.
-     *
+     * <p>
      * Sets the 'enabled' state of the refresh layouts contained in the fragment.
-     *
+     * <p>
      * When 'false' is set, prevents user gestures but keeps the option to refresh programatically,
      *
      * @param enabled Desired state for capturing swipe gesture.
@@ -601,7 +601,7 @@ public class ExtendedListFragment extends Fragment
 
     /**
      * Sets the 'visibility' state of the FAB contained in the fragment.
-     *
+     * <p>
      * When 'false' is set, FAB visibility is set to View.GONE programmatically,
      *
      * @param enabled Desired visibility for the FAB.
@@ -650,6 +650,7 @@ public class ExtendedListFragment extends Fragment
 
                     mEmptyListIcon.setVisibility(View.VISIBLE);
                     mEmptyListProgress.setVisibility(View.GONE);
+                    mEmptyListMessage.setVisibility(View.VISIBLE);
                 }
             }
         });
@@ -660,7 +661,7 @@ public class ExtendedListFragment extends Fragment
             @Override
             public void run() {
 
-                if (searchType == SearchType.NO_SEARCH) {
+                if (searchType == SearchType.NO_SEARCH && mEmptyListProgress.getVisibility() == View.GONE) {
                     setMessageForEmptyList(
                             R.string.file_list_empty_headline,
                             R.string.file_list_empty,

+ 211 - 111
src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java

@@ -59,6 +59,7 @@ import com.owncloud.android.R;
 import com.owncloud.android.authentication.AccountUtils;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.datamodel.VirtualFolderType;
 import com.owncloud.android.files.FileMenuFilter;
 import com.owncloud.android.lib.common.OwnCloudAccount;
 import com.owncloud.android.lib.common.OwnCloudClient;
@@ -178,7 +179,13 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi
         mProgressBarActionModeColor = getResources().getColor(R.color.action_mode_background);
         mProgressBarColor = DisplayUtils.primaryColor();
         mMultiChoiceModeListener = new MultiChoiceModeListener();
-        searchFragment = false;
+
+        if (savedInstanceState != null) {
+            currentSearchType = Parcels.unwrap(savedInstanceState.getParcelable(KEY_CURRENT_SEARCH_TYPE));
+            searchEvent = Parcels.unwrap(savedInstanceState.getParcelable(OCFileListFragment.SEARCH_EVENT));
+        }
+
+        searchFragment = currentSearchType != null;
     }
 
     /**
@@ -219,6 +226,7 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi
             currentSearchType = SearchType.NO_SEARCH;
         }
 
+        searchFragment = savedInstanceState != null;
 
         if (getResources().getBoolean(R.bool.bottom_toolbar_enabled)) {
             bottomNavigationView.setVisibility(View.VISIBLE);
@@ -254,10 +262,6 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi
     public void onResume() {
         super.onResume();
 
-        if (remoteOperationAsyncTask != null) {
-            remoteOperationAsyncTask.cancel(true);
-        }
-
         if (getActivity() != null) {
             AnalyticsUtils.setCurrentScreenName(getActivity(), SCREEN_NAME, TAG);
         }
@@ -282,6 +286,7 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi
         super.onActivityCreated(savedInstanceState);
         Log_OC.i(TAG, "onActivityCreated() start");
 
+
         if (savedInstanceState != null) {
             mFile = savedInstanceState.getParcelable(KEY_FILE);
         }
@@ -325,9 +330,38 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi
         }
 
         searchEvent = Parcels.unwrap(getArguments().getParcelable(OCFileListFragment.SEARCH_EVENT));
-        if (searchEvent != null) {
+        if (searchEvent != null && searchFragment && savedInstanceState == null) {
             onMessageEvent(searchEvent);
         }
+
+        prepareCurrentSearch(searchEvent);
+        setTitle();
+
+    }
+
+    private void prepareCurrentSearch(SearchEvent event) {
+        if (event != null) {
+            if (event.getSearchType().equals(SearchOperation.SearchType.FILE_SEARCH)) {
+                currentSearchType = SearchType.FILE_SEARCH;
+
+            } else if (event.getSearchType().equals(SearchOperation.SearchType.CONTENT_TYPE_SEARCH)) {
+                if (event.getSearchQuery().equals("image/%")) {
+                    currentSearchType = SearchType.PHOTO_SEARCH;
+                } else if (event.getSearchQuery().equals("video/%")) {
+                    currentSearchType = SearchType.VIDEO_SEARCH;
+                }
+            } else if (event.getSearchType().equals(SearchOperation.SearchType.FAVORITE_SEARCH)) {
+                currentSearchType = SearchType.FAVORITE_SEARCH;
+            } else if (event.getSearchType().equals(SearchOperation.SearchType.RECENTLY_ADDED_SEARCH)) {
+                currentSearchType = SearchType.RECENTLY_ADDED_SEARCH;
+            } else if (event.getSearchType().equals(SearchOperation.SearchType.RECENTLY_MODIFIED_SEARCH)) {
+                currentSearchType = SearchType.RECENTLY_MODIFIED_SEARCH;
+            } else if (event.getSearchType().equals(SearchOperation.SearchType.SHARED_SEARCH)) {
+                currentSearchType = SearchType.SHARED_FILTER;
+            }
+
+            prepareActionBarItems(event);
+        }
     }
 
     /**
@@ -611,7 +645,7 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi
             DisplayUtils.colorToolbarProgressBar(getActivity(), mProgressBarColor);
 
             // show FAB on multi selection mode exit
-            if (!mHideFab) {
+            if (!mHideFab && !searchFragment) {
                 setFabEnabled(true);
             }
         }
@@ -673,7 +707,10 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi
     public void onSaveInstanceState(Bundle outState) {
         super.onSaveInstanceState(outState);
         outState.putParcelable(KEY_FILE, mFile);
-        outState.putParcelable(KEY_CURRENT_SEARCH_TYPE, Parcels.wrap(currentSearchType));
+        if (searchFragment) {
+            outState.putParcelable(KEY_CURRENT_SEARCH_TYPE, Parcels.wrap(currentSearchType));
+            outState.putParcelable(OCFileListFragment.SEARCH_EVENT, Parcels.wrap(searchEvent));
+        }
         mMultiChoiceModeListener.storeStateIn(outState);
     }
 
@@ -796,6 +833,7 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi
         if (file != null) {
             if (file.isFolder()) {
                 // update state and view of this fragment
+                searchFragment = false;
                 listDirectory(file, MainApp.isOnlyOnDevice(), false);
                 // then, notify parent activity to let it update its state and view
                 mContainerActivity.onBrowsedDownTo(file);
@@ -805,8 +843,24 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi
             } else { /// Click on a file
                 if (PreviewImageFragment.canBePreviewed(file)) {
                     // preview image - it handles the download, if needed
-                    ((FileDisplayActivity) mContainerActivity).startImagePreview(file);
-                } else if (file.isDown() && MimeTypeUtil.isVCard(file)){
+                    if (searchFragment) {
+                        VirtualFolderType type;
+                        switch (currentSearchType) {
+                            case FAVORITE_SEARCH:
+                                type = VirtualFolderType.FAVORITE;
+                                break;
+                            case PHOTO_SEARCH:
+                                type = VirtualFolderType.PHOTOS;
+                                break;
+                            default:
+                                type = VirtualFolderType.NONE;
+                                break;
+                        }
+                        ((FileDisplayActivity) mContainerActivity).startImagePreview(file, type);
+                    } else {
+                        ((FileDisplayActivity) mContainerActivity).startImagePreview(file);
+                    }
+                } else if (file.isDown() && MimeTypeUtil.isVCard(file)) {
                     ((FileDisplayActivity) mContainerActivity).startContactListFragment(file);
                 } else if (PreviewTextFragment.canBePreviewed(file)) {
                     ((FileDisplayActivity) mContainerActivity).startTextPreview(file);
@@ -959,10 +1013,6 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi
     public void refreshDirectory() {
         searchFragment = false;
 
-        if (remoteOperationAsyncTask != null) {
-            remoteOperationAsyncTask.cancel(true);
-        }
-
         setFabEnabled(true);
         listDirectory(getCurrentFile(), MainApp.isOnlyOnDevice(), false);
     }
@@ -1236,6 +1286,92 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi
 
     }
 
+    public void setTitleFromSearchEvent(SearchEvent event) {
+        prepareCurrentSearch(event);
+        setTitle();
+    }
+
+    private void setTitle() {
+        // set title
+
+        if (getActivity() instanceof FileDisplayActivity && currentSearchType != null) {
+            switch (currentSearchType) {
+                case FAVORITE_SEARCH:
+                    setTitle(R.string.drawer_item_favorites);
+                    break;
+                case PHOTO_SEARCH:
+                    setTitle(R.string.drawer_item_photos);
+                    break;
+                case VIDEO_SEARCH:
+                    setTitle(R.string.drawer_item_videos);
+                    break;
+                case RECENTLY_ADDED_SEARCH:
+                    setTitle(R.string.drawer_item_recently_added);
+                    break;
+                case RECENTLY_MODIFIED_SEARCH:
+                    setTitle(R.string.drawer_item_recently_modified);
+                    break;
+                case SHARED_FILTER:
+                    setTitle(R.string.drawer_item_shared);
+                    break;
+                default:
+                    setTitle(R.string.default_display_name_for_root_folder);
+                    break;
+            }
+        }
+
+    }
+
+    private void prepareActionBarItems(SearchEvent event) {
+        if (event != null) {
+            if (event.getSearchType().equals(SearchOperation.SearchType.CONTENT_TYPE_SEARCH)) {
+                if (event.getSearchQuery().equals("image/%")) {
+                    menuItemAddRemoveValue = MenuItemAddRemove.REMOVE_GRID_AND_SORT;
+                } else if (event.getSearchQuery().equals("video/%")) {
+                    menuItemAddRemoveValue = MenuItemAddRemove.REMOVE_SEARCH;
+                }
+            } else if (event.getSearchType().equals(SearchOperation.SearchType.FAVORITE_SEARCH)) {
+                menuItemAddRemoveValue = MenuItemAddRemove.REMOVE_SORT;
+            } else if (event.getSearchType().equals(SearchOperation.SearchType.RECENTLY_ADDED_SEARCH)) {
+                menuItemAddRemoveValue = MenuItemAddRemove.REMOVE_SORT;
+            } else if (event.getSearchType().equals(SearchOperation.SearchType.RECENTLY_MODIFIED_SEARCH)) {
+                menuItemAddRemoveValue = MenuItemAddRemove.REMOVE_SORT;
+            } else if (event.getSearchType().equals(SearchOperation.SearchType.SHARED_SEARCH)) {
+                menuItemAddRemoveValue = MenuItemAddRemove.REMOVE_SEARCH;
+            }
+
+        }
+
+        if (currentSearchType != null && !currentSearchType.equals(SearchType.FILE_SEARCH) && getActivity() != null) {
+            getActivity().invalidateOptionsMenu();
+        }
+    }
+
+    private void setEmptyView(SearchEvent event) {
+
+        if (event != null) {
+            if (event.getSearchType().equals(SearchOperation.SearchType.FILE_SEARCH)) {
+                setEmptyListMessage(SearchType.FILE_SEARCH);
+            } else if (event.getSearchType().equals(SearchOperation.SearchType.CONTENT_TYPE_SEARCH)) {
+                if (event.getSearchQuery().equals("image/%")) {
+                    setEmptyListMessage(SearchType.PHOTO_SEARCH);
+                } else if (event.getSearchQuery().equals("video/%")) {
+                    setEmptyListMessage(SearchType.VIDEO_SEARCH);
+                }
+            } else if (event.getSearchType().equals(SearchOperation.SearchType.FAVORITE_SEARCH)) {
+                setEmptyListMessage(SearchType.FAVORITE_SEARCH);
+            } else if (event.getSearchType().equals(SearchOperation.SearchType.RECENTLY_ADDED_SEARCH)) {
+                setEmptyListMessage(SearchType.RECENTLY_ADDED_SEARCH);
+            } else if (event.getSearchType().equals(SearchOperation.SearchType.RECENTLY_MODIFIED_SEARCH)) {
+                setEmptyListMessage(SearchType.RECENTLY_MODIFIED_SEARCH);
+            } else if (event.getSearchType().equals(SearchOperation.SearchType.SHARED_SEARCH)) {
+                setEmptyListMessage(SearchType.SHARED_FILTER);
+            }
+
+        }
+
+    }
+
     @Subscribe(threadMode = ThreadMode.MAIN)
     public void onMessageEvent(ChangeMenuEvent changeMenuEvent) {
         menuItemAddRemoveValue = MenuItemAddRemove.ADD_GRID_AND_SORT_WITH_SEARCH;
@@ -1244,6 +1380,9 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi
             setTitle(R.string.default_display_name_for_root_folder);
         }
 
+        getActivity().getIntent().removeExtra(OCFileListFragment.SEARCH_EVENT);
+        getArguments().putParcelable(OCFileListFragment.SEARCH_EVENT, null);
+
         setFabEnabled(true);
     }
 
@@ -1281,10 +1420,10 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi
     }
 
     @Subscribe(threadMode = ThreadMode.BACKGROUND)
-    public void onMessageEvent(SearchEvent event) {
+    public void onMessageEvent(final SearchEvent event) {
         searchFragment = true;
         setEmptyListLoadingMessage();
-        mAdapter.setData(new ArrayList<>(), SearchType.NO_SEARCH);
+        mAdapter.setData(new ArrayList<>(), SearchType.NO_SEARCH, mContainerActivity.getStorageManager());
 
         setFabEnabled(false);
 
@@ -1294,51 +1433,6 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi
             unsetAllMenuItems(true);
         }
 
-        if (event.getSearchType().equals(SearchOperation.SearchType.FILE_SEARCH)) {
-            currentSearchType = SearchType.FILE_SEARCH;
-
-        } else if (event.getSearchType().equals(SearchOperation.SearchType.CONTENT_TYPE_SEARCH)) {
-            if (event.getSearchQuery().equals("image/%")) {
-                currentSearchType = SearchType.PHOTO_SEARCH;
-            } else if (event.getSearchQuery().equals("video/%")) {
-                currentSearchType = SearchType.VIDEO_SEARCH;
-            }
-        } else if (event.getSearchType().equals(SearchOperation.SearchType.FAVORITE_SEARCH)) {
-            currentSearchType = SearchType.FAVORITE_SEARCH;
-        } else if (event.getSearchType().equals(SearchOperation.SearchType.RECENTLY_ADDED_SEARCH)) {
-            currentSearchType = SearchType.RECENTLY_ADDED_SEARCH;
-        } else if (event.getSearchType().equals(SearchOperation.SearchType.RECENTLY_MODIFIED_SEARCH)) {
-            currentSearchType = SearchType.RECENTLY_MODIFIED_SEARCH;
-        } else if (event.getSearchType().equals(SearchOperation.SearchType.SHARED_SEARCH)) {
-            currentSearchType = SearchType.SHARED_FILTER;
-        }
-
-        // set title
-        if (getActivity() instanceof FileDisplayActivity) {
-            switch (currentSearchType) {
-                case FAVORITE_SEARCH:
-                    setTitle(R.string.drawer_item_favorites);
-                    break;
-                case PHOTO_SEARCH:
-                    setTitle(R.string.drawer_item_photos);
-                    break;
-                case VIDEO_SEARCH:
-                    setTitle(R.string.drawer_item_videos);
-                    break;
-                case RECENTLY_ADDED_SEARCH:
-                    setTitle(R.string.drawer_item_recently_added);
-                    break;
-                case RECENTLY_MODIFIED_SEARCH:
-                    setTitle(R.string.drawer_item_recently_modified);
-                    break;
-                case SHARED_FILTER:
-                    setTitle(R.string.drawer_item_shared);
-                    break;
-                default:
-                    setTitle(R.string.default_display_name_for_root_folder);
-                    break;
-            }
-        }
 
         if (bottomNavigationView != null && searchEvent != null) {
             switch (currentSearchType) {
@@ -1366,6 +1460,20 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi
             }
         };
 
+        if (currentSearchType.equals(SearchType.PHOTO_SEARCH)) {
+            new Handler(Looper.getMainLooper()).post(new Runnable() {
+                @Override
+                public void run() {
+                    switchToGridView();
+                }
+            });
+        } else if (currentSearchType.equals(SearchType.NO_SEARCH) || currentSearchType.equals(
+                SearchType.REGULAR_FILTER)) {
+            new Handler(Looper.getMainLooper()).post(switchViewsRunnable);
+        } else {
+            new Handler(Looper.getMainLooper()).post(switchViewsRunnable);
+        }
+
         final RemoteOperation remoteOperation;
         if (!currentSearchType.equals(SearchType.SHARED_FILTER)) {
             remoteOperation = new SearchOperation(event.getSearchQuery(), event.getSearchType());
@@ -1381,9 +1489,26 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi
                 if (getContext() != null && !isCancelled()) {
                     RemoteOperationResult remoteOperationResult = remoteOperation.execute(currentAccount, getContext());
 
+                    FileDataStorageManager storageManager = null;
+                    if (mContainerActivity != null && mContainerActivity.getStorageManager() != null) {
+                        storageManager = mContainerActivity.getStorageManager();
+                    }
+
                     if (remoteOperationResult.isSuccess() && remoteOperationResult.getData() != null
                             && !isCancelled() && searchFragment) {
-                        mAdapter.setData(remoteOperationResult.getData(), currentSearchType);
+                        if (remoteOperationResult.getData() == null || remoteOperationResult.getData().size() == 0) {
+                            setEmptyView(event);
+                        } else {
+                            mAdapter.setData(remoteOperationResult.getData(), currentSearchType, storageManager);
+                        }
+
+                        final FileDisplayActivity fileDisplayActivity = (FileDisplayActivity) getActivity();
+                        fileDisplayActivity.runOnUiThread(new Runnable() {
+                            @Override
+                            public void run() {
+                                fileDisplayActivity.setIndeterminate(false);
+                            }
+                        });
                     }
 
                     return remoteOperationResult.isSuccess();
@@ -1402,54 +1527,17 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi
 
         remoteOperationAsyncTask.execute(true);
 
-        if (event.getSearchType().equals(SearchOperation.SearchType.FILE_SEARCH)) {
-            setEmptyListMessage(SearchType.FILE_SEARCH);
-
-        } else if (event.getSearchType().equals(SearchOperation.SearchType.CONTENT_TYPE_SEARCH)) {
-            if (event.getSearchQuery().equals("image/%")) {
-                setEmptyListMessage(SearchType.PHOTO_SEARCH);
-                menuItemAddRemoveValue = MenuItemAddRemove.REMOVE_GRID_AND_SORT;
-            } else if (event.getSearchQuery().equals("video/%")) {
-                setEmptyListMessage(SearchType.VIDEO_SEARCH);
-                menuItemAddRemoveValue = MenuItemAddRemove.REMOVE_SEARCH;
-            }
-        } else if (event.getSearchType().equals(SearchOperation.SearchType.FAVORITE_SEARCH)) {
-            setEmptyListMessage(SearchType.FAVORITE_SEARCH);
-            menuItemAddRemoveValue = MenuItemAddRemove.REMOVE_SORT;
-        } else if (event.getSearchType().equals(SearchOperation.SearchType.RECENTLY_ADDED_SEARCH)) {
-            setEmptyListMessage(SearchType.RECENTLY_ADDED_SEARCH);
-            menuItemAddRemoveValue = MenuItemAddRemove.REMOVE_SORT;
-        } else if (event.getSearchType().equals(SearchOperation.SearchType.RECENTLY_MODIFIED_SEARCH)) {
-            setEmptyListMessage(SearchType.RECENTLY_MODIFIED_SEARCH);
-            menuItemAddRemoveValue = MenuItemAddRemove.REMOVE_SORT;
-        } else if (event.getSearchType().equals(SearchOperation.SearchType.SHARED_SEARCH)) {
-            setEmptyListMessage(SearchType.SHARED_FILTER);
-            menuItemAddRemoveValue = MenuItemAddRemove.REMOVE_SEARCH;
-        }
-
-        if (!currentSearchType.equals(SearchType.FILE_SEARCH) && getActivity() != null) {
-            getActivity().invalidateOptionsMenu();
-        }
-
-        if (currentSearchType.equals(SearchType.PHOTO_SEARCH)) {
-            new Handler(Looper.getMainLooper()).post(new Runnable() {
-                @Override
-                public void run() {
-                    switchToGridView();
-                }
-            });
-        } else if (currentSearchType.equals(SearchType.NO_SEARCH) || currentSearchType.equals(
-                SearchType.REGULAR_FILTER)) {
-            new Handler(Looper.getMainLooper()).post(switchViewsRunnable);
-        } else {
-            new Handler(Looper.getMainLooper()).post(switchViewsRunnable);
-        }
-
-        searchEvent = null;
     }
 
-    private void setTitle(@StringRes int title) {
-        ((FileDisplayActivity) getActivity()).getSupportActionBar().setTitle(title);
+    private void setTitle(@StringRes final int title) {
+        getActivity().runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                if (getActivity() != null && ((FileDisplayActivity) getActivity()).getSupportActionBar() != null) {
+                    ((FileDisplayActivity) getActivity()).getSupportActionBar().setTitle(title);
+                }
+            }
+        });
     }
 
     @Override
@@ -1467,10 +1555,22 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi
 
     @Override
     public void onRefresh() {
-        super.onRefresh();
-
-        if (searchEvent != null) {
+        if (searchEvent != null && searchFragment) {
             onMessageEvent(searchEvent);
+
+            mRefreshListLayout.setRefreshing(false);
+            mRefreshGridLayout.setRefreshing(false);
+            mRefreshEmptyLayout.setRefreshing(false);
+        } else {
+            super.onRefresh();
         }
     }
+
+    public void setSearchFragment(boolean searchFragment) {
+        this.searchFragment = searchFragment;
+    }
+
+    public boolean getIsSearchFragment() {
+        return searchFragment;
+    }
 }

+ 142 - 74
src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactListFragment.java

@@ -1,4 +1,4 @@
-/**
+/*
  * Nextcloud Android client application
  *
  * @author Tobias Kaminsky
@@ -31,12 +31,14 @@ import android.content.IntentFilter;
 import android.database.Cursor;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
+import android.os.AsyncTask;
 import android.os.Bundle;
 import android.os.Handler;
 import android.provider.ContactsContract;
 import android.support.annotation.NonNull;
 import android.support.design.widget.Snackbar;
 import android.support.v4.graphics.drawable.RoundedBitmapDrawable;
+import android.support.v7.app.ActionBar;
 import android.support.v7.app.AlertDialog;
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
@@ -51,6 +53,10 @@ import android.widget.Button;
 import android.widget.CheckedTextView;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
+import android.widget.Toast;
+import android.widget.ProgressBar;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
 
 import com.evernote.android.job.JobRequest;
 import com.evernote.android.job.util.support.PersistableBundleCompat;
@@ -84,7 +90,8 @@ import butterknife.BindView;
 import butterknife.ButterKnife;
 import ezvcard.Ezvcard;
 import ezvcard.VCard;
-import ezvcard.property.StructuredName;
+
+import static com.owncloud.android.ui.fragment.contactsbackup.ContactListFragment.getDisplayName;
 
 /**
  * This fragment shows all contacts from a file and allows to import them.
@@ -106,8 +113,26 @@ public class ContactListFragment extends FileFragment {
     @BindView(R.id.contactlist_restore_selected)
     public Button restoreContacts;
 
+    @BindView(R.id.empty_list_view_text)
+    public TextView emptyContentMessage;
+
+    @BindView(R.id.empty_list_view_headline)
+    public TextView emptyContentHeadline;
+
+    @BindView(R.id.empty_list_icon)
+    public ImageView emptyContentIcon;
+
+    @BindView(R.id.empty_list_progress)
+    public ProgressBar emptyContentProgressBar;
+
+    @BindView(R.id.empty_list_container)
+    public RelativeLayout emptyListContainer;
+
+
     private ContactListAdapter contactListAdapter;
     private Account account;
+    private ArrayList<VCard> vCards = new ArrayList<>();
+    private OCFile ocFile;
 
     public static ContactListFragment newInstance(OCFile file, Account account) {
         ContactListFragment frag = new ContactListFragment();
@@ -131,66 +156,19 @@ public class ContactListFragment extends FileFragment {
     @Override
     public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
 
-        View view = inflater.inflate(R.layout.contactlist_fragment, null);
+        View view = inflater.inflate(R.layout.contactlist_fragment, container, false);
         ButterKnife.bind(this, view);
 
         setHasOptionsMenu(true);
 
         ContactsPreferenceActivity contactsPreferenceActivity = (ContactsPreferenceActivity) getActivity();
-        contactsPreferenceActivity.getSupportActionBar().setTitle(R.string.actionbar_contacts_restore);
-        contactsPreferenceActivity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
-        contactsPreferenceActivity.setDrawerIndicatorEnabled(false);
-
-        ArrayList<VCard> vCards = new ArrayList<>();
 
-        try {
-            OCFile ocFile = getArguments().getParcelable(FILE_NAME);
-            setFile(ocFile);
-            account = getArguments().getParcelable(ACCOUNT);
-
-            if (!ocFile.isDown()) {
-                Intent i = new Intent(getContext(), FileDownloader.class);
-                i.putExtra(FileDownloader.EXTRA_ACCOUNT, account);
-                i.putExtra(FileDownloader.EXTRA_FILE, ocFile);
-                getContext().startService(i);
-
-                // Listen for download messages
-                IntentFilter downloadIntentFilter = new IntentFilter(FileDownloader.getDownloadAddedMessage());
-                downloadIntentFilter.addAction(FileDownloader.getDownloadFinishMessage());
-                DownloadFinishReceiver mDownloadFinishReceiver = new DownloadFinishReceiver();
-                getContext().registerReceiver(mDownloadFinishReceiver, downloadIntentFilter);
-            } else {
-                File file = new File(ocFile.getStoragePath());
-                vCards.addAll(Ezvcard.parse(file).all());
-                Collections.sort(vCards, new Comparator<VCard>() {
-                    @Override
-                    public int compare(VCard o1, VCard o2) {
-                        if (o1.getFormattedName() != null && o2.getFormattedName() != null) {
-                            return o1.getFormattedName().getValue().compareTo(o2.getFormattedName().getValue());
-                        } else {
-                            if (o1.getFormattedName() == null) {
-                                return 1; // Send the contact to the end of the list
-                            } else {
-                                return -1;
-                            }
-
-                        }
-                    }
-                });
-            }
-        } catch (IOException e) {
-            Log_OC.e(TAG, "Error processing contacts file!", e);
+        ActionBar actionBar = contactsPreferenceActivity.getSupportActionBar();
+        if (actionBar != null) {
+            actionBar.setTitle(R.string.actionbar_contacts_restore);
+            actionBar.setDisplayHomeAsUpEnabled(true);
         }
-
-        restoreContacts.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-
-                if (checkAndAskForContactsWritePermission()) {
-                    getAccountForImport();
-                }
-            }
-        });
+        contactsPreferenceActivity.setDrawerIndicatorEnabled(false);
 
         recyclerView = (RecyclerView) view.findViewById(R.id.contactlist_recyclerview);
 
@@ -210,6 +188,35 @@ public class ContactListFragment extends FileFragment {
         recyclerView.setAdapter(contactListAdapter);
         recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
 
+        ocFile = getArguments().getParcelable(FILE_NAME);
+        setFile(ocFile);
+        account = getArguments().getParcelable(ACCOUNT);
+
+        if (!ocFile.isDown()) {
+            Intent i = new Intent(getContext(), FileDownloader.class);
+            i.putExtra(FileDownloader.EXTRA_ACCOUNT, account);
+            i.putExtra(FileDownloader.EXTRA_FILE, ocFile);
+            getContext().startService(i);
+
+            // Listen for download messages
+            IntentFilter downloadIntentFilter = new IntentFilter(FileDownloader.getDownloadAddedMessage());
+            downloadIntentFilter.addAction(FileDownloader.getDownloadFinishMessage());
+            DownloadFinishReceiver mDownloadFinishReceiver = new DownloadFinishReceiver();
+            getContext().registerReceiver(mDownloadFinishReceiver, downloadIntentFilter);
+        } else {
+            loadContactsTask.execute();
+        }
+
+        restoreContacts.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+
+                if (checkAndAskForContactsWritePermission()) {
+                    getAccountForImport();
+                }
+            }
+        });
+
         return view;
     }
 
@@ -250,6 +257,9 @@ public class ContactListFragment extends FileFragment {
     @Override
     public void onStop() {
         EventBus.getDefault().unregister(this);
+        if (loadContactsTask != null) {
+            loadContactsTask.cancel(true);
+        }
         super.onStop();
     }
 
@@ -276,6 +286,14 @@ public class ContactListFragment extends FileFragment {
         return retval;
     }
 
+    private void setLoadingMessage() {
+        emptyContentHeadline.setText(R.string.file_list_loading);
+        emptyContentMessage.setText("");
+
+        emptyContentIcon.setVisibility(View.GONE);
+        emptyContentProgressBar.setVisibility(View.VISIBLE);
+    }
+
     private void setSelectAllMenuItem(MenuItem selectAll, boolean checked) {
         selectAll.setChecked(checked);
         if (checked) {
@@ -422,7 +440,12 @@ public class ContactListFragment extends FileFragment {
                     if (grantResults[index] >= 0) {
                         getAccountForImport();
                     } else {
-                        Snackbar.make(getView(), R.string.contactlist_no_permission, Snackbar.LENGTH_LONG).show();
+                        if (getView() != null) {
+                            Snackbar.make(getView(), R.string.contactlist_no_permission, Snackbar.LENGTH_LONG)
+                                    .show();
+                        } else {
+                            Toast.makeText(getContext(), R.string.contactlist_no_permission, Toast.LENGTH_LONG).show();
+                        }
                     }
                     break;
                 }
@@ -461,21 +484,71 @@ public class ContactListFragment extends FileFragment {
 
         @Override
         public void onReceive(Context context, Intent intent) {
-            if (intent.getAction().equalsIgnoreCase(FileDownloader.getDownloadFinishMessage())){
+            if (intent.getAction().equalsIgnoreCase(FileDownloader.getDownloadFinishMessage())) {
                 String downloadedRemotePath = intent.getStringExtra(FileDownloader.EXTRA_REMOTE_PATH);
 
                 FileDataStorageManager storageManager = new FileDataStorageManager(account,
                         getContext().getContentResolver());
-                OCFile ocFile = storageManager.getFileByPath(downloadedRemotePath);
-                File file = new File(ocFile.getStoragePath());
+                ocFile = storageManager.getFileByPath(downloadedRemotePath);
+                loadContactsTask.execute();
+            }
+        }
+    }
+
+    public static class VCardComparator implements Comparator<VCard> {
+        @Override
+        public int compare(VCard o1, VCard o2) {
+            String contac1 = getDisplayName(o1);
+            String contac2 = getDisplayName(o2);
+
+            return contac1.compareToIgnoreCase(contac2);
+        }
+
 
+    }
+
+    private AsyncTask loadContactsTask = new AsyncTask() {
+
+        @Override
+        protected void onPreExecute() {
+            setLoadingMessage();
+        }
+
+        @Override
+        protected Object doInBackground(Object[] params) {
+            if (!isCancelled()) {
+                File file = new File(ocFile.getStoragePath());
                 try {
-                    contactListAdapter.replaceVCards(Ezvcard.parse(file).all());
+                    vCards.addAll(Ezvcard.parse(file).all());
+                    Collections.sort(vCards, new VCardComparator());
                 } catch (IOException e) {
                     Log_OC.e(TAG, "IO Exception: " + file.getAbsolutePath());
+                    return false;
                 }
+                return true;
             }
+            return false;
         }
+
+        @Override
+        protected void onPostExecute(Object o) {
+            if (!isCancelled()) {
+                emptyListContainer.setVisibility(View.GONE);
+                contactListAdapter.replaceVCards(vCards);
+            }
+        }
+    };
+
+    public static String getDisplayName(VCard vCard) {
+        if (vCard.getFormattedName() != null) {
+            return vCard.getFormattedName().getValue();
+        } else if (vCard.getTelephoneNumbers() != null && vCard.getTelephoneNumbers().size() > 0) {
+            return vCard.getTelephoneNumbers().get(0).getText();
+        } else if (vCard.getEmails() != null && vCard.getEmails().size() > 0) {
+            return vCard.getEmails().get(0).getValue();
+        }
+
+        return "";
     }
 }
 
@@ -536,7 +609,8 @@ class ContactListAdapter extends RecyclerView.Adapter<ContactListFragment.Contac
 
     @Override
     public void onBindViewHolder(final ContactListFragment.ContactItemViewHolder holder, final int position) {
-        final VCard vcard = vCards.get(position);
+        final int verifiedPosition = holder.getAdapterPosition();
+        final VCard vcard = vCards.get(verifiedPosition);
 
         if (vcard != null) {
 
@@ -545,15 +619,8 @@ class ContactListAdapter extends RecyclerView.Adapter<ContactListFragment.Contac
             } else {
                 holder.getName().setChecked(false);
             }
-            // name
-            StructuredName name = vcard.getStructuredName();
-            if (name != null) {
-                String first = (name.getGiven() == null) ? "" : name.getGiven() + " ";
-                String last = (name.getFamily() == null) ? "" : name.getFamily();
-                holder.getName().setText(first + last);
-            } else {
-                holder.getName().setText("");
-            }
+
+            holder.getName().setText(getDisplayName(vcard));
 
             // photo
             if (vcard.getPhotos().size() > 0) {
@@ -584,15 +651,15 @@ class ContactListAdapter extends RecyclerView.Adapter<ContactListFragment.Contac
                     holder.getName().setChecked(!holder.getName().isChecked());
 
                     if (holder.getName().isChecked()) {
-                        if (!checkedVCards.contains(position)) {
-                            checkedVCards.add(position);
+                        if (!checkedVCards.contains(verifiedPosition)) {
+                            checkedVCards.add(verifiedPosition);
                         }
                         if (checkedVCards.size() == 1) {
                             EventBus.getDefault().post(new VCardToggleEvent(true));
                         }
                     } else {
-                        if (checkedVCards.contains(position)) {
-                            checkedVCards.remove(position);
+                        if (checkedVCards.contains(verifiedPosition)) {
+                            checkedVCards.remove(verifiedPosition);
                         }
 
                         if (checkedVCards.size() == 0) {
@@ -625,4 +692,5 @@ class ContactListAdapter extends RecyclerView.Adapter<ContactListFragment.Contac
 
         notifyDataSetChanged();
     }
+
 }

+ 13 - 0
src/main/java/com/owncloud/android/ui/interfaces/ActivityListInterface.java

@@ -0,0 +1,13 @@
+package com.owncloud.android.ui.interfaces;
+
+import com.owncloud.android.lib.resources.activities.models.RichObject;
+
+/**
+ * Created by alejandro on 12/05/17.
+ */
+
+public interface ActivityListInterface {
+
+    void onActivityClicked(RichObject richObject);
+
+}

+ 28 - 14
src/main/java/com/owncloud/android/ui/preview/PreviewImageActivity.java

@@ -40,6 +40,7 @@ import com.owncloud.android.R;
 import com.owncloud.android.authentication.AccountUtils;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.datamodel.VirtualFolderType;
 import com.owncloud.android.files.services.FileDownloader;
 import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;
 import com.owncloud.android.files.services.FileUploader;
@@ -72,6 +73,8 @@ public class PreviewImageActivity extends FileActivity implements
     private static final String KEY_WAITING_FOR_BINDER = "WAITING_FOR_BINDER";
     private static final String KEY_SYSTEM_VISIBLE = "TRUE";
 
+    public static final String EXTRA_VIRTUAL_TYPE = "EXTRA_VIRTUAL_TYPE";
+
     private ExtendedViewPager mViewPager;
     private PreviewImagePagerAdapter mPreviewImagePagerAdapter;
     private int mSavedPosition = 0;
@@ -128,25 +131,36 @@ public class PreviewImageActivity extends FileActivity implements
     }
 
     private void initViewPager() {
-        // get parent from path
-        String parentPath = getFile().getRemotePath().substring(0,
-                getFile().getRemotePath().lastIndexOf(getFile().getFileName()));
-        OCFile parentFolder = getStorageManager().getFileByPath(parentPath);
-        if (parentFolder == null) {
-            // should not be necessary
-            parentFolder = getStorageManager().getFileByPath(OCFile.ROOT_PATH);
-        }
+        // virtual folder
+        if (getIntent().getSerializableExtra(EXTRA_VIRTUAL_TYPE) != null) {
+            VirtualFolderType type = (VirtualFolderType) getIntent().getSerializableExtra(EXTRA_VIRTUAL_TYPE);
 
-        mPreviewImagePagerAdapter = new PreviewImagePagerAdapter(getSupportFragmentManager(),
-                parentFolder, getAccount(), getStorageManager(), MainApp.isOnlyOnDevice());
+            mPreviewImagePagerAdapter = new PreviewImagePagerAdapter(getSupportFragmentManager(),
+                    type, getAccount(), getStorageManager());
+        } else {
+            // get parent from path
+            String parentPath = getFile().getRemotePath().substring(0,
+                    getFile().getRemotePath().lastIndexOf(getFile().getFileName()));
+            OCFile parentFolder = getStorageManager().getFileByPath(parentPath);
+
+            if (parentFolder == null) {
+                // should not be necessary
+                parentFolder = getStorageManager().getFileByPath(OCFile.ROOT_PATH);
+            }
+
+            mPreviewImagePagerAdapter = new PreviewImagePagerAdapter(getSupportFragmentManager(),
+                    parentFolder, getAccount(), getStorageManager(), MainApp.isOnlyOnDevice());
+        }
 
         mViewPager = (ExtendedViewPager) findViewById(R.id.fragmentPager);
-        int position = mHasSavedPosition ? mSavedPosition :
-                mPreviewImagePagerAdapter.getFilePosition(getFile());
+
+        int position = mHasSavedPosition ? mSavedPosition : mPreviewImagePagerAdapter.getFilePosition(getFile());
         position = (position >= 0) ? position : 0;
-        mViewPager.setAdapter(mPreviewImagePagerAdapter); 
+
+        mViewPager.setAdapter(mPreviewImagePagerAdapter);
         mViewPager.setOnPageChangeListener(this);
         mViewPager.setCurrentItem(position);
+
         if (position == 0 && !getFile().isDown()) {
             // this is necessary because mViewPager.setCurrentItem(0) just after setting the
             // adapter does not result in a call to #onPageSelected(0)
@@ -446,7 +460,7 @@ public class PreviewImageActivity extends FileActivity implements
         super.onAccountSet(stateWasRecovered);
         if (getAccount() != null) {
             OCFile file = getFile();
-            /// Validate handled file  (first image to preview)
+            /// Validate handled file (first image to preview)
             if (file == null) {
                 throw new IllegalStateException("Instanced with a NULL OCFile");
             }

+ 40 - 2
src/main/java/com/owncloud/android/ui/preview/PreviewImagePagerAdapter.java

@@ -27,6 +27,7 @@ import android.view.ViewGroup;
 
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.datamodel.VirtualFolderType;
 import com.owncloud.android.ui.fragment.FileFragment;
 import com.owncloud.android.utils.FileStorageUtils;
 
@@ -87,7 +88,44 @@ public class PreviewImagePagerAdapter extends FragmentStatePagerAdapter {
         //mFragmentManager = fragmentManager;
         mCachedFragments = new HashMap<Integer, FileFragment>();
     }
-    
+
+    /**
+     * Constructor.
+     *
+     * @param fragmentManager {@link FragmentManager} instance that will handle
+     *                        the {@link Fragment}s provided by the adapter.
+     * @param type            Type of virtual folder, e.g. favorite or photos
+     * @param storageManager  Bridge to database.
+     */
+    public PreviewImagePagerAdapter(FragmentManager fragmentManager, VirtualFolderType type,
+                                    Account account, FileDataStorageManager storageManager) {
+        super(fragmentManager);
+
+        if (fragmentManager == null) {
+            throw new IllegalArgumentException("NULL FragmentManager instance");
+        }
+        if (type == null) {
+            throw new IllegalArgumentException("NULL parent folder");
+        }
+        if (storageManager == null) {
+            throw new IllegalArgumentException("NULL storage manager");
+        }
+
+        mAccount = account;
+        mStorageManager = storageManager;
+        mImageFiles = mStorageManager.getVirtualFolderContent(type, true);
+
+        if (type == VirtualFolderType.PHOTOS) {
+            mImageFiles = FileStorageUtils.sortOcFolderDescDateModified(mImageFiles);
+        }
+
+        mObsoleteFragments = new HashSet<Object>();
+        mObsoletePositions = new HashSet<Integer>();
+        mDownloadErrors = new HashSet<Integer>();
+        //mFragmentManager = fragmentManager;
+        mCachedFragments = new HashMap<Integer, FileFragment>();
+    }
+
     /**
      * Returns the image files handled by the adapter.
      * 
@@ -195,7 +233,7 @@ public class PreviewImagePagerAdapter extends FragmentStatePagerAdapter {
     public void resetZoom() {
         Iterator<FileFragment> entries = mCachedFragments.values().iterator();
         while (entries.hasNext()) {
-        FileFragment fileFragment = (FileFragment) entries.next();
+        FileFragment fileFragment = entries.next();
             if (fileFragment instanceof PreviewImageFragment) {
                 ((PreviewImageFragment) fileFragment).getImageView().resetZoom();
             }

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

@@ -595,6 +595,14 @@ public class DisplayUtils {
 
         Menu menu = view.getMenu();
 
+        Account account = AccountUtils.getCurrentOwnCloudAccount(MainApp.getAppContext());
+        boolean searchSupported = AccountUtils.hasSearchSupport(account);
+
+        if (!searchSupported) {
+            menu.removeItem(R.id.nav_bar_favorites);
+            menu.removeItem(R.id.nav_bar_photos);
+        }
+
         if (resources.getBoolean(R.bool.use_home)) {
             menu.findItem(R.id.nav_bar_files).setTitle(resources.
                     getString(R.string.drawer_item_home));

+ 36 - 0
src/main/java/com/owncloud/android/utils/glide/CustomGlideStreamLoader.java

@@ -0,0 +1,36 @@
+/**
+ * Nextcloud Android client application
+ *
+ * @author Alejandro Bautista
+ * Copyright (C) 2017 Alejandro Bautista
+ *
+ * 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.utils.glide;
+
+import com.bumptech.glide.load.data.DataFetcher;
+import com.bumptech.glide.load.model.stream.StreamModelLoader;
+
+import java.io.InputStream;
+
+/**
+ * Custom Model for OwnCloudClient
+ */
+
+public class CustomGlideStreamLoader implements StreamModelLoader<String> {
+    @Override
+    public DataFetcher<InputStream> getResourceFetcher(String url, int width, int height) {
+        return new HttpStreamFetcher(url);
+    }
+}

+ 101 - 0
src/main/java/com/owncloud/android/utils/glide/HttpStreamFetcher.java

@@ -0,0 +1,101 @@
+/**
+ * Nextcloud Android client application
+ *
+ * @author Alejandro Bautista
+ * Copyright (C) 2017 Alejandro Bautista
+ *
+ * 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.utils.glide;
+
+import android.accounts.Account;
+
+import com.bumptech.glide.Priority;
+import com.bumptech.glide.load.data.DataFetcher;
+import com.owncloud.android.MainApp;
+import com.owncloud.android.authentication.AccountUtils;
+import com.owncloud.android.lib.common.OwnCloudAccount;
+import com.owncloud.android.lib.common.OwnCloudClient;
+import com.owncloud.android.lib.common.OwnCloudClientManagerFactory;
+import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.lib.resources.status.OwnCloudVersion;
+
+import org.apache.commons.httpclient.HttpStatus;
+import org.apache.commons.httpclient.methods.GetMethod;
+
+import java.io.InputStream;
+
+/**
+ * Fetcher with OwnCloudClient
+ */
+
+public class HttpStreamFetcher implements DataFetcher<InputStream> {
+
+    private static final String TAG = HttpStreamFetcher.class.getName();
+    private final String mURL;
+
+    public HttpStreamFetcher(String url) {
+        this.mURL = url;
+
+    }
+
+    @Override
+    public InputStream loadData(Priority priority) throws Exception {
+
+        Account mAccount = AccountUtils.getCurrentOwnCloudAccount(MainApp.getAppContext());
+        OwnCloudAccount ocAccount = new OwnCloudAccount(mAccount,
+                MainApp.getAppContext());
+        OwnCloudClient mClient = OwnCloudClientManagerFactory.getDefaultSingleton().
+                getClientFor(ocAccount, MainApp.getAppContext());
+
+        OwnCloudVersion serverOCVersion = AccountUtils.getServerVersion(mAccount);
+        if (mClient != null && serverOCVersion != null) {
+            if (serverOCVersion.supportsRemoteThumbnails()) {
+                GetMethod get = null;
+                try {
+                    get = new GetMethod(mURL);
+                    get.setRequestHeader("Cookie",
+                            "nc_sameSiteCookielax=true;nc_sameSiteCookiestrict=true");
+                    int status = mClient.executeMethod(get);
+                    if (status == HttpStatus.SC_OK) {
+                        InputStream inputStream = get.getResponseBodyAsStream();
+                        return inputStream;
+                    } else {
+                        mClient.exhaustResponse(get.getResponseBodyAsStream());
+                    }
+                } catch (Exception e) {
+                    Log_OC.d(TAG, e.getMessage(), e);
+                }
+            } else {
+                Log_OC.d(TAG, "Server too old");
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public void cleanup() {
+        Log_OC.i(TAG,"Cleanup");
+    }
+
+    @Override
+    public String getId() {
+        return mURL;
+    }
+
+    @Override
+    public void cancel() {
+        Log_OC.i(TAG,"Cancel");
+    }
+}

+ 53 - 0
src/main/java/third_parties/ezvcard_android/ContactOperations.java

@@ -141,6 +141,59 @@ public class ContactOperations {
         context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, operations);
     }
 
+    public void updateContact(VCard vcard, Long key) throws RemoteException, OperationApplicationException {
+
+        List<NonEmptyContentValues> contentValues = new ArrayList<NonEmptyContentValues>();
+        convertName(contentValues, vcard);
+        convertNickname(contentValues, vcard);
+        convertPhones(contentValues, vcard);
+        convertEmails(contentValues, vcard);
+        convertAddresses(contentValues, vcard);
+        convertIms(contentValues, vcard);
+
+        // handle Android Custom fields..This is only valid for Android generated Vcards. As the Android would
+        // generate NickName, ContactEvents other than Birthday and RelationShip with this "X-ANDROID-CUSTOM" name
+        convertCustomFields(contentValues, vcard);
+
+        // handle Iphone kinda of group properties. which are grouped together.
+        convertGroupedProperties(contentValues, vcard);
+
+        convertBirthdays(contentValues, vcard);
+
+        convertWebsites(contentValues, vcard);
+        convertNotes(contentValues, vcard);
+        convertPhotos(contentValues, vcard);
+        convertOrganization(contentValues, vcard);
+
+        ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>(contentValues.size());
+        ContentValues cv = account.getContentValues();
+        //ContactsContract.RawContact.CONTENT_URI needed to add account, backReference is also not needed
+        long contactID = key;
+        ContentProviderOperation operation;
+
+        for (NonEmptyContentValues values : contentValues) {
+            cv = values.getContentValues();
+            if (cv.size() == 0) {
+                continue;
+            }
+
+            String mimeType = cv.getAsString("mimetype");
+            cv.remove("mimetype");
+            //@formatter:off
+            operation =
+                    ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
+                            .withSelection(ContactsContract.Data.RAW_CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ? ", new String[]{"" + contactID, "" + mimeType})
+                            .withValues(cv)
+                            .build();
+            //@formatter:on
+            operations.add(operation);
+        }
+
+        // Executing all the insert operations as a single database transaction
+        context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, operations);
+
+    }
+
     private void convertName(List<NonEmptyContentValues> contentValues, VCard vcard) {
         NonEmptyContentValues values = new NonEmptyContentValues(ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
 

BIN=BIN
src/main/res/drawable-hdpi/ic_list_empty_create_folder.png


BIN=BIN
src/main/res/drawable-hdpi/ic_list_empty_folder.png


BIN=BIN
src/main/res/drawable-hdpi/ic_list_empty_upload.png


BIN=BIN
src/main/res/drawable-mdpi/ic_list_empty_create_folder.png


BIN=BIN
src/main/res/drawable-mdpi/ic_list_empty_folder.png


BIN=BIN
src/main/res/drawable-mdpi/ic_list_empty_upload.png


BIN=BIN
src/main/res/drawable-xhdpi/ic_list_empty_create_folder.png


BIN=BIN
src/main/res/drawable-xhdpi/ic_list_empty_folder.png


BIN=BIN
src/main/res/drawable-xhdpi/ic_list_empty_upload.png


BIN=BIN
src/main/res/drawable-xxhdpi/ic_list_empty_create_folder.png


BIN=BIN
src/main/res/drawable-xxhdpi/ic_list_empty_folder.png


BIN=BIN
src/main/res/drawable-xxhdpi/ic_list_empty_upload.png


BIN=BIN
src/main/res/drawable-xxxhdpi/ic_list_empty_create_folder.png


BIN=BIN
src/main/res/drawable-xxxhdpi/ic_list_empty_folder.png


BIN=BIN
src/main/res/drawable-xxxhdpi/ic_list_empty_upload.png


+ 0 - 27
src/main/res/drawable/main_header_bg.xml

@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ownCloud Android client application
-
-  Copyright (C) 2012  Bartek Przybylski
-  Copyright (C) 2015 ownCloud Inc.
-
-  This program is free software: you can redistribute it and/or modify
-  it under the terms of the GNU General Public License version 2,
-  as published by the Free Software Foundation.
-
-  This program is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-  GNU General Public License for more details.
-
-  You should have received a copy of the GNU General Public License
-  along with this program.  If not, see <http://www.gnu.org/licenses/>.
--->
-<shape xmlns:android="http://schemas.android.com/apk/res/android">
-    <gradient
-        android:startColor="@color/primary"
-        android:endColor="@color/primary"
-        android:angle="270"
-     />
-    <corners android:radius="0dp" />
-</shape>

+ 1 - 1
src/main/res/drawable/round_button.xml

@@ -21,5 +21,5 @@
 -->
 <shape xmlns:android="http://schemas.android.com/apk/res/android"
     android:shape="oval">
-    <solid android:color="@color/nc_blue_accent"/>
+    <solid android:color="@color/color_accent"/>
 </shape>

+ 9 - 3
src/main/res/layout/activity_list_item.xml

@@ -30,8 +30,8 @@
 
     <ImageView
         android:id="@+id/activity_icon"
-        android:layout_width="@dimen/user_icon_size"
-        android:layout_height="@dimen/user_icon_size"
+        android:layout_width="@dimen/file_icon_size"
+        android:layout_height="@dimen/file_icon_size"
         android:layout_alignParentTop="true"
         android:layout_marginRight="24dp"
         android:src="@drawable/ic_activity"/>
@@ -48,7 +48,6 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:ellipsize="end"
-            android:maxLines="2"
             android:text="@string/placeholder_filename"
             android:textAppearance="?android:attr/textAppearanceListItem"/>
 
@@ -61,6 +60,13 @@
             android:text="@string/placeholder_sentence"
             android:textColor="?android:attr/textColorSecondary"/>
 
+        <GridLayout
+            android:id="@+id/list"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="5dp"
+            android:columnCount="3" />
+
         <TextView
             android:id="@+id/activity_datetime"
             android:layout_width="wrap_content"

+ 17 - 0
src/main/res/layout/activity_list_item_header.xml

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical" android:layout_width="match_parent"
+    android:layout_height="wrap_content">
+
+    <TextView
+        android:id="@+id/title_header"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:textSize="20sp"
+        android:layout_marginLeft="10dp"
+        android:layout_marginTop="10dp"
+        android:text="Header"
+
+        />
+
+</LinearLayout>

+ 40 - 27
src/main/res/layout/contactlist_fragment.xml

@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
   Nextcloud Android client application
 
   Copyright (C) 2017 Tobias Kaminsky
@@ -18,39 +17,53 @@
   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/>.
 -->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-              android:layout_width="match_parent"
-              android:layout_height="match_parent"
-              android:animateLayoutChanges="true"
-              android:orientation="vertical">
-
-    <android.support.v7.widget.RecyclerView
-        android:id="@+id/contactlist_recyclerview"
-        android:layout_width="match_parent"
-        android:layout_height="0dp"
-        android:layout_weight="1"
-        android:choiceMode="multipleChoice"/>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:animateLayoutChanges="true"
+    android:orientation="vertical">
 
     <LinearLayout
-        android:id="@+id/contactlist_restore_selected_container"
         android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:background="@color/white"
-        android:orientation="vertical"
-        android:visibility="gone">
+        android:layout_height="match_parent"
+        android:orientation="vertical">
 
-        <ImageView
+        <android.support.v7.widget.RecyclerView
+            android:id="@+id/contactlist_recyclerview"
             android:layout_width="match_parent"
-            android:layout_height="1dp"
-            android:src="@drawable/uploader_list_separator"/>
+            android:layout_height="0dp"
+            android:layout_weight="1"
+            android:choiceMode="multipleChoice" />
 
-        <android.support.v7.widget.AppCompatButton
-            android:id="@+id/contactlist_restore_selected"
-            style="@style/Button.Borderless"
+        <LinearLayout
+            android:id="@+id/contactlist_restore_selected_container"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:text="@string/contaclist_restore_selected"/>
+            android:background="@color/white"
+            android:orientation="vertical"
+            android:visibility="gone">
+
+            <ImageView
+                android:layout_width="match_parent"
+                android:layout_height="1dp"
+                android:src="@drawable/uploader_list_separator" />
 
+            <android.support.v7.widget.AppCompatButton
+                android:id="@+id/contactlist_restore_selected"
+                style="@style/Button.Borderless"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="@string/contaclist_restore_selected" />
+
+        </LinearLayout>
     </LinearLayout>
 
-</LinearLayout>
+    <RelativeLayout
+        android:id="@+id/empty_list_container"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_centerInParent="true">
+
+        <include layout="@layout/empty_list" />
+    </RelativeLayout>
+</RelativeLayout>

+ 1 - 1
src/main/res/layout/edit_share_layout.xml

@@ -42,7 +42,7 @@
             android:id="@+id/share_header_divider"
             android:layout_width="match_parent"
             android:layout_height="@dimen/edit_share_layout_view_height"
-            android:background="@color/nc_blue"
+            android:background="@color/primary"
             />
     <LinearLayout
         android:orientation="vertical"

+ 8 - 7
src/main/res/layout/empty_list.xml

@@ -18,8 +18,8 @@
   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/>.
 -->
-<LinearLayout android:id="@+id/empty_list_view"
-              xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+              android:id="@+id/empty_list_view"
               android:layout_width="match_parent"
               android:layout_height="wrap_content"
               android:layout_gravity="center"
@@ -34,14 +34,14 @@
         android:layout_height="72dp"
         android:contentDescription="@string/file_list_folder"
         android:src="@drawable/ic_list_empty_folder"
-        android:tint="@color/primary"/>
+        android:tint="@color/primary"
+        android:visibility="gone"/>
 
     <ProgressBar
         android:id="@+id/empty_list_progress"
         android:layout_width="72dp"
         android:layout_height="72dp"
-        android:layout_gravity="center_horizontal"
-        android:visibility="gone"/>
+        android:layout_gravity="center_horizontal"/>
 
     <TextView
         android:id="@+id/empty_list_view_headline"
@@ -53,7 +53,7 @@
         android:maxLines="2"
         android:paddingBottom="@dimen/standard_padding"
         android:paddingTop="@dimen/standard_padding"
-        android:text="@string/file_list_empty_headline"
+        android:text="@string/file_list_loading"
         android:textSize="26sp"/>
 
     <TextView
@@ -64,6 +64,7 @@
         android:ellipsize="end"
         android:gravity="center"
         android:maxLines="3"
-        android:text="@string/file_list_empty"/>
+        android:text="@string/file_list_empty"
+        android:visibility="gone"/>
 
 </LinearLayout>

+ 5 - 2
src/main/res/layout/folder_sync_item_header.xml

@@ -51,7 +51,10 @@
             android:layout_height="wrap_content"
             android:background="@color/transparent"
             android:clickable="true"
-            android:padding="@dimen/standard_half_padding"
+            android:paddingTop="@dimen/standard_half_padding"
+            android:paddingBottom="@dimen/standard_half_padding"
+            android:paddingLeft="@dimen/standard_half_padding"
+            android:paddingRight="@dimen/standard_padding"
             android:src="@drawable/ic_cloud_sync_off"/>
 
         <ImageButton
@@ -61,7 +64,7 @@
             android:background="@color/transparent"
             android:clickable="true"
             android:paddingBottom="@dimen/standard_half_padding"
-            android:paddingLeft="@dimen/standard_half_padding"
+            android:paddingLeft="0dp"
             android:paddingRight="@dimen/standard_padding"
             android:paddingTop="@dimen/standard_half_padding"
             android:src="@drawable/ic_dots_vertical"/>

+ 4 - 3
src/main/res/layout/folder_sync_layout.xml

@@ -35,11 +35,12 @@
         <include
             layout="@layout/toolbar_standard"/>
 
-        <FrameLayout
+        <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:layout_above="@+id/bottom_navigation_view"
-            android:layout_below="@+id/appbar">
+            android:layout_below="@+id/appbar"
+            android:orientation="vertical">
 
             <android.support.v7.widget.RecyclerView
                 android:id="@android:id/list"
@@ -86,7 +87,7 @@
                 android:gravity="center"
                 android:text="@string/folder_sync_no_results"
                 android:visibility="gone" />
-        </FrameLayout>
+        </LinearLayout>
 
         <android.support.design.widget.BottomNavigationView
             android:id="@+id/bottom_navigation_view"

+ 5 - 5
src/main/res/layout/list_fragment.xml

@@ -33,7 +33,7 @@
         android:layout_height="match_parent"
         android:footerDividersEnabled="false"
         android:visibility="visible" >
-        
+
         <com.owncloud.android.ui.ExtendedListView
             android:id="@+id/list_root"
             android:layout_width="match_parent"
@@ -89,7 +89,7 @@
         android:layout_height="wrap_content"
         android:layout_alignParentRight="true"
         app:fab_addButtonColorNormal="@color/primary_button_background_color"
-        app:fab_addButtonColorPressed="@color/nc_blue"
+        app:fab_addButtonColorPressed="@color/primary"
         app:fab_addButtonPlusIconColor="@color/white"
         app:fab_labelStyle="@style/menu_labels_style"
         android:layout_marginBottom="@dimen/standard_margin"
@@ -105,7 +105,7 @@
             app:fab_size="mini"
             app:fab_icon="@drawable/ic_action_upload"
             app:fab_colorNormal="@color/primary_button_background_color"
-            app:fab_colorPressed="@color/nc_blue"
+            app:fab_colorPressed="@color/primary"
             app:fab_title=""/>
 
         <com.getbase.floatingactionbutton.FloatingActionButton
@@ -115,7 +115,7 @@
             app:fab_size="mini"
             app:fab_icon="@drawable/ic_import"
             app:fab_colorNormal="@color/primary_button_background_color"
-            app:fab_colorPressed="@color/nc_blue"
+            app:fab_colorPressed="@color/primary"
             app:fab_title=""/>
 
         <com.getbase.floatingactionbutton.FloatingActionButton
@@ -125,7 +125,7 @@
             app:fab_size="mini"
             app:fab_icon="@drawable/ic_action_create_dir"
             app:fab_colorNormal="@color/primary_button_background_color"
-            app:fab_colorPressed="@color/nc_blue"
+            app:fab_colorPressed="@color/primary"
             app:fab_title=""/>
 
     </com.getbase.floatingactionbutton.FloatingActionsMenu>

+ 1 - 1
src/main/res/layout/share_file_layout.xml

@@ -77,7 +77,7 @@
             android:id="@+id/share_header_divider"
             android:layout_width="match_parent"
             android:layout_height="@dimen/standard_eighth_margin"
-            android:background="@color/nc_blue"
+            android:background="@color/primary"
             />
 
         <LinearLayout

+ 0 - 3
src/main/res/values-ast/strings.xml

@@ -260,7 +260,6 @@
     <string name="activity_chooser_title">Unviar enllaz a&#8230;</string>
     <string name="wait_for_tmp_copy_from_private_storage">Copiando ficheru dende l\'almacenamientu priváu</string>
     
-    <string name="oauth_check_onoff">Aniciar sesión con oAuth2</string> 
     <string name="oauth_login_connection">Coneutando col sirvidor d\'OAuth2</string>    
         
     <string name="ssl_validator_header">La identidá del sitiu nun pue certificase</string>
@@ -372,8 +371,6 @@
     <string name="file_migration_use_data_folder">Usar</string>
 
     <string name="file_migration_source_not_readable_title">¡El direutoriu fonte nun ye lleible!</string>
-    <string name="file_migration_source_not_readable">¿Entá quies camudar el camín d\'almacenamientu a %1$s?\n\nNota: tendrán de baxase de nueves tolos datos.</string>
-
     <string name="prefs_category_accounts">Cuentes</string>
     <string name="prefs_add_account">Amestar cuenta</string>
     <string name="drawer_manage_accounts">Xestionar cuentes</string>

+ 32 - 1
src/main/res/values-cs-rCZ/strings.xml

@@ -97,6 +97,9 @@
     <string name="file_list_seconds_ago">před pár sekundami</string>
     <string name="file_list_empty_headline">Nejsou zde žádné soubory</string>
     <string name="file_list_empty">Nahrajte nějaký obsah, nebo synchronizujte s vašimi zařízeními!</string>
+    <string name="file_list_empty_favorites">Označte nějaké soubory jako oblíbené nebo synchronizujte se svými přístroji.</string>
+    <string name="file_list_empty_favorites_filter_list">Zde budou zobrazeny soubory a adresáře označené jako oblíbené</string>
+    <string name="file_list_empty_favorites_filter">Vaše vyhledávání nenalezlo žádné oblíbené soubory</string>
     <string name="file_list_loading">Načítání&#8230;</string>
     <string name="file_list_no_app_for_file_type">Pro tento typ souboru nebyla nalezena aplikace!</string>
     <string name="local_file_list_empty">V tomto adresáři nejsou žádné soubory.</string>
@@ -104,9 +107,18 @@
     <string name="file_list_empty_headline_server_search">Žádné výsledky</string>
     <string name="file_list_empty_favorite_headline">Zatím není nic oblíbeno</string>
     <string name="file_list_empty_shared_headline">Není nic sdílené</string>
+    <string name="file_list_empty_shared">Zde budou zobrazeny vámi sdílené soubory a adresáře</string>
     <string name="file_list_empty_headline_server_search_videos">Žádné video</string>
     <string name="file_list_empty_headline_server_search_photos">Žádná fotka</string>
     <string name="file_list_empty_search">Zkusit hledat v jiné složce?</string>
+    <string name="file_list_empty_recently_modified">Nenalezeny žádné soubory upravené v posledních 7 dnech</string>
+    <string name="file_list_empty_recently_modified_filter">Vaše vyhledávání nenalezlo žádné soubory upravené v posledních 7 dnech</string>
+    <string name="file_list_empty_recently_added">Nenalezeny žádné nedávno přidané soubory</string>
+    <string name="file_list_empty_recently_added_filter">Vaše vyhledávání nenalezlo žádné nedávno přidané soubory.</string>
+    <string name="file_list_empty_text_photos">Nahrajte nějaké fotky nebo aktivujte automatické nahrávání.</string>
+    <string name="file_list_empty_text_photos_filter">Vaše vyhledávání nenalezlo žádné fotky.</string>
+    <string name="file_list_empty_text_videos">Nahrajte nějaká videa nebo aktivujte automatické nahrávání.</string>
+    <string name="file_list_empty_text_videos_filter">Vaše vyhledávání nenalezlo žádná videa.</string>
     <string name="upload_list_empty_headline">Nic k nahrání</string>
     <string name="upload_list_empty_text">Nahrajte nějaký obsah, nebo aktivujte okamžité nahrání!</string>
     <string name="upload_list_empty_text_auto_upload">Nahrajte nějaký obsah nebo aktivujte automatické nahrávání.</string>
@@ -335,6 +347,7 @@
     <string name="instant_video_upload_on_charging">Nahrávat pouze při nabíjení</string>
     <string name="instant_upload_on_charging">Nahrávat pouze při nabíjení</string>
     <string name="instant_upload_path">/InstantUpload</string>
+    <string name="auto_upload_path">/Automatické nahrávání</string>
     <string name="conflict_title">Konflikt souboru</string>
     <string name="conflict_message">Které soubory chcete ponechat? Pokud zvolíte obě verze, zkopírovaný soubor bude mít název doplněný o číslo.</string>
     <string name="conflict_keep_both">Ponechat oba</string>
@@ -399,13 +412,19 @@
     <string name="file_migration_restoring_accounts_configuration">Obnovování konfigurace účtů&#8230;</string>
     <string name="file_migration_ok_finished">Dokončeno</string>
     <string name="file_migration_failed_not_enough_space">CHYBA: Nedostatečné místo</string>
+    <string name="file_migration_failed_not_writable">CHYBA: Do cíle nelze zapisovat</string>
+    <string name="file_migration_failed_not_readable">CHYBA: Soubor nelze číst</string>
     <string name="file_migration_failed_dir_already_exists">CHYBA: Nextcloud adresář již existuje</string>
     <string name="file_migration_failed_while_coping">CHYBA: V průběhu migrace</string>
     <string name="file_migration_failed_while_updating_index">CHYBA: V průběhu aktualizace indexu</string>
 
+    <string name="file_migration_directory_already_exists">Datový adresář již existuje. Vyberte jednu z následujících možností:</string>
     <string name="file_migration_override_data_folder">Nahradit</string>
     <string name="file_migration_use_data_folder">Použít</string>
 
+    <string name="file_migration_source_not_readable_title">Ze zdrojového adresáře nelze číst!</string>
+    <string name="file_migration_source_not_readable">Opravdu chcete změnit adresář úložiště na %1$s?\n\nPoznámka: Všechna data budou stažena znovu.</string>
+
     <string name="prefs_category_accounts">Účty</string>
     <string name="prefs_add_account">Přidat účet</string>
     <string name="drawer_manage_accounts">Spravovat účty</string>
@@ -463,6 +482,9 @@
     <string name="file_list__footer__files">%1$d soubory(ů)</string>
     <string name="file_list__footer__files_and_folder">%1$d soubory(ů), 1 adresář</string>
     <string name="file_list__footer__files_and_folders">%1$d soubory(ů), %2$d adresáře(ů)</string>
+    <string name="set_picture_as">Nastavit obrázek jako</string>
+    <string name="set_as">Nastavit jako</string>
+
     <string name="prefs_instant_behaviour_dialogTitle">Originální soubor bude&#8230;</string>
     <string name="prefs_instant_behaviour_title">Originální soubor bude&#8230;</string>
     <string name="upload_copy_files">Zkopírovat soubor</string>
@@ -524,6 +546,8 @@
     <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>
+    <string name="maintenance_mode">Server je v režimu údržby</string>
+
     <string name="uploads_view_upload_status_waiting_for_charging">Čekání na nabití</string>
     <string name="actionbar_search">Hledat</string>
     <string name="files_drop_not_supported">Toto je Nextcloud funkce, prosím nahrát</string>
@@ -561,6 +585,7 @@
     <string name="activity_list_loading_activity">Načítání aktivit&#8230;</string>
     <string name="activity_list_no_results">Žádné aktivity nebyly nalezeny.</string>
 
+    <string name="notifications_loading_activity">Načítání upozornění&#8230;</string>
     <string name="notifications_no_results_headline">Žádné oznámení</string>
     <string name="notifications_no_results_message">Prosíme, vraťte se později.</string>
 
@@ -633,4 +658,10 @@
     <!-- Notifications -->
     <string name="new_notification_received">Přijato nové upozornění</string>
     <string name="drawer_logout">Odhlásit se</string>
-    </resources>
+    <string name="picture_set_as_no_app">Pro tento typ souboru nebyla nalezena aplikace!</string>
+    <string name="privacy">Soukromí</string>
+    <string name="file_not_found">Soubor nenalezen!</string>
+
+    <string name="folder_sync_folders">Nastavení adresářů</string>
+
+  </resources>

+ 7 - 2
src/main/res/values-de-rDE/strings.xml

@@ -304,7 +304,7 @@
     <string name="activity_chooser_title">Link senden an &#8230;</string>
     <string name="wait_for_tmp_copy_from_private_storage">Kopiere Datei vom privatem Speicher</string>
     
-    <string name="oauth_check_onoff">Anmelden mit oAuth2</string> 
+    <string name="oauth_check_onoff">Anmelden mit OAuth2 </string> 
     <string name="oauth_login_connection">Verbinde mit dem OAuth2-Server …</string>    
         
     <string name="ssl_validator_header">Die Identität der Website konnte nicht überprüft werden</string>
@@ -348,6 +348,7 @@
     <string name="instant_video_upload_on_charging">Nur während des Ladens hochladen</string>
     <string name="instant_upload_on_charging">Nur während des Ladens hochladen</string>
     <string name="instant_upload_path">/SofortUpload</string>
+    <string name="auto_upload_path">/Auto Upload</string>
     <string name="conflict_title">Dateikonfilikt</string>
     <string name="conflict_message">Welche Datei soll behalten werden? Wenn Sie beide Versionen wählen, wird der lokalen Datei eine Zahl am Ende des Dateinamens angefügt.</string>
     <string name="conflict_keep_both">Beide behalten</string>
@@ -418,11 +419,12 @@
     <string name="file_migration_failed_while_coping">FEHLER: Migration fehlgeschlagen</string>
     <string name="file_migration_failed_while_updating_index">FEHLER: Während der Aktualisierung des Indexes</string>
 
+    <string name="file_migration_directory_already_exists">Daten-Verzeichnis existiert bereits. Bitte auswählen:</string>
     <string name="file_migration_override_data_folder">Überschreiben</string>
     <string name="file_migration_use_data_folder">Verwende bestehenden</string>
 
     <string name="file_migration_source_not_readable_title">Quellverzeichnis kann nicht gelesen werden!</string>
-    <string name="file_migration_source_not_readable">Möchten Sie wirklich den Speicherpfad in %1$s ändern?\n\nHinweis: Alle Daten müssen dann erneut heruntergeladen werden.</string>
+    <string name="file_migration_source_not_readable">Möchten Sie wirklich den Speicherpfad in %1$s ändern?\n\nHinweis: Alle Daten müssen dann erneut heruntergeladen werden. </string>
 
     <string name="prefs_category_accounts">Konten</string>
     <string name="prefs_add_account">Konto hinzufügen</string>
@@ -658,5 +660,8 @@
     <string name="drawer_logout">Abmelden</string>
     <string name="picture_set_as_no_app">Keine App gefunden, mit der ein Bid gesetzt werden könnte!</string>
     <string name="privacy">Datenschutz</string>
+    <string name="file_not_found">Datei nicht gefunden!</string>
+
+    <string name="folder_sync_folders">Ordner auswählen</string>
 
   </resources>

+ 12 - 7
src/main/res/values-de/strings.xml

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
-    <string name="about_android">%1$s Android App</string>
+    <string name="about_android">%1$s Android AppAuto </string>
     <string name="about_version">Version %1$s</string>
     <string name="actionbar_sync">Konto aktualisieren</string>
     <string name="actionbar_upload">Hochladen</string>
@@ -212,9 +212,9 @@
     <string name="foreign_files_local_text">Lokal: %1$s</string>
     <string name="foreign_files_remote_text">Remote: %1$s</string>
     <string name="upload_query_move_foreign_files">Es steht nicht genügend Speicherplatz zur Verfügung, um die ausgewählten Dateien in das Verzeichnis %1$s zu kopieren. Sollen diese stattdessen verschoben werden?</string>
-    <string name="pass_code_enter_pass_code">Bitte gib deine PIN ein</string>
+    <string name="pass_code_enter_pass_code">Bitte gib Deine PIN ein</string>
     
-    <string name="pass_code_configure_your_pass_code">Bitte PIN eingeben</string>
+    <string name="pass_code_configure_your_pass_code">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 Deine PIN nochmals eingeben</string>
     <string name="pass_code_remove_your_pass_code">PIN entfernen</string>
@@ -269,7 +269,7 @@
 	<string name="auth_expired_oauth_token_toast">Die Autorisierung ist abgelaufen. Bitte Autorisierung nochmals durchführen</string>
 	<string name="auth_expired_basic_auth_toast">Bitte gib das aktuelle Passwort ein</string>
 	<string name="auth_expired_saml_sso_token_toast">Deine Sitzung ist abgelaufen. Bitte erneut verbinden</string>
-	<string name="auth_connecting_auth_server">Verbinden zum Authentifizierungs-Server ...</string>
+	<string name="auth_connecting_auth_server">Verbinden zum Authentifizierungs-Server</string>
 	<string name="auth_unsupported_auth_method">Der Server unterstützt diese Authentifizierung-Methode nicht</string>
 	<string name="auth_unsupported_multiaccount">%1$s unterstützt nicht mehrere Benutzerkonten</string>
 	<string name="auth_fail_get_user_name">Dein Server gibt keine korrekte Benutzer-ID zurück, bitte kontaktiere einen Administrator</string>
@@ -297,15 +297,15 @@
     <string name="filename_forbidden_characters">Verbotene Zeichen: / \\ &lt; &gt; : \" | ? *</string>
     <string name="filename_forbidden_charaters_from_server">Der Dateiname enthält mindestens ein ungültiges Zeichen</string>
     <string name="filename_empty">Dateiname darf nicht leer sein</string>
-    <string name="wait_a_moment">Bitte warten...</string>
+    <string name="wait_a_moment">Bitte warten</string>
     <string name="wait_checking_credentials">Überprüfe gespeicherte Anmeldeinformationen</string>
     <string name="filedisplay_unexpected_bad_get_content">Ein unerwartetes Problem ist aufgetreten. Bitte versuche, die Datei in einer anderen App zu öffnen</string>
     <string name="filedisplay_no_file_selected">Keine Datei gewählt</string>
     <string name="activity_chooser_title">Link senden an &#8230;</string>
     <string name="wait_for_tmp_copy_from_private_storage">Kopiere Datei vom privatem Speicher</string>
     
-    <string name="oauth_check_onoff">Anmelden mit oAuth2</string> 
-    <string name="oauth_login_connection">Verbinde mit dem oAuth2-Server...</string>    
+    <string name="oauth_check_onoff">Anmelden mit OAuth2 </string> 
+    <string name="oauth_login_connection">Verbinde mit dem OAuth2-Server…</string>    
         
     <string name="ssl_validator_header">Die Identität der Website konnte nicht überprüft werden</string>
     <string name="ssl_validator_reason_cert_not_trusted">- Das Zertifikat des Servers ist nicht vertrauenswürdig</string>
@@ -348,6 +348,7 @@
     <string name="instant_video_upload_on_charging">Nur während des Ladens hochladen</string>
     <string name="instant_upload_on_charging">Nur während des Ladens hochladen</string>
     <string name="instant_upload_path">/SofortUpload</string>
+    <string name="auto_upload_path">/Auto Upload</string>
     <string name="conflict_title">Dateikonfilikt</string>
     <string name="conflict_message">Welche Datei soll behalten werden? Wenn du beide Versionen wählst, wird der lokalen Datei eine Zahl am Ende des Dateinamens angefügt.</string>
     <string name="conflict_keep_both">Beide behalten</string>
@@ -418,6 +419,7 @@
     <string name="file_migration_failed_while_coping">FEHLER: Migration fehlgeschlagen</string>
     <string name="file_migration_failed_while_updating_index">FEHLER: Während der Aktualisierung des Indexes</string>
 
+    <string name="file_migration_directory_already_exists">Daten-Verzeichnis existiert bereits. Bitte auswählen:</string>
     <string name="file_migration_override_data_folder">Überschreiben</string>
     <string name="file_migration_use_data_folder">Verwende bestehenden</string>
 
@@ -659,5 +661,8 @@
     <string name="drawer_logout">Abmelden</string>
     <string name="picture_set_as_no_app">Keine App gefunden, mit der ein Bid gesetzt werden könnte!</string>
     <string name="privacy">Datenschutz</string>
+    <string name="file_not_found">Datei nicht gefunden!</string>
+
+    <string name="folder_sync_folders">Ordner auswählen</string>
 
   </resources>

+ 12 - 1
src/main/res/values-el/strings.xml

@@ -347,6 +347,7 @@
     <string name="instant_video_upload_on_charging">Μεταφόρτωση μόνο κατά τη διάρκεια φόρτισης</string>
     <string name="instant_upload_on_charging">Μεταφόρτωση μόνο κατά τη διάρκεια φόρτισης</string>
     <string name="instant_upload_path">/InstantUpload</string>
+    <string name="auto_upload_path">/Αυτόματη μεταφόρτωση</string>
     <string name="conflict_title">Διένεξη αρχείων</string>
     <string name="conflict_message">Ποια αρχεία θέλετε να διατηρήσετε; Αν επιλέξετε και τις δύο εκδόσεις, θα προστεθεί ένας αριθμός στο όνομα του τοπικού αρχείου.</string>
     <string name="conflict_keep_both">Διατήρηση και των δύο</string>
@@ -417,6 +418,7 @@
     <string name="file_migration_failed_while_coping">ΣΦΑΛΜΑ: Κατά την μεταφορά</string>
     <string name="file_migration_failed_while_updating_index">ΣΦΑΛΜΑ: Κατά την ενημέρωση ευρετηρίου</string>
 
+    <string name="file_migration_directory_already_exists">Ο φάκελος δεδομένων υπάρχει ήδη. Επιλέξτε ένα από τα παρακάτω:</string>
     <string name="file_migration_override_data_folder">Αντικατάσταση</string>
     <string name="file_migration_use_data_folder">Χρήση</string>
 
@@ -480,6 +482,9 @@
     <string name="file_list__footer__files">%1$d αρχεία</string>
     <string name="file_list__footer__files_and_folder">%1$d αρχεία, 1 φάκελος</string>
     <string name="file_list__footer__files_and_folders">%1$d αρχεία, %2$d φάκελοι</string>
+    <string name="set_picture_as">Ορισμός εικόνας ως</string>
+    <string name="set_as">Ορισμός ως</string>
+
     <string name="prefs_instant_behaviour_dialogTitle">Το πρωτότυπο αρχείο θα είναι&#8230;</string>
     <string name="prefs_instant_behaviour_title">Το πρωτότυπο αρχείο θα είναι&#8230;</string>
     <string name="upload_copy_files">Αντιγραφή αρχείου</string>
@@ -541,6 +546,8 @@
     <string name="local_file_not_found_toast">Το αρχείο δεν βρέθηκε στο τοπικό σύστημα αρχείων</string>
     <string name="confirmation_remove_files_alert">Θέλετε να αφαιρέσετε τα επιλεγμένα αντικείμενα;</string>
     <string name="confirmation_remove_folders_alert">Θέλετε να αφαιρέσετε τα επιλεγμένα αντικείμενα με τα περιεχόμενά τους;</string>
+    <string name="maintenance_mode">Ο διακομιστής είναι σε κατάσταση συντήρησης</string>
+
     <string name="uploads_view_upload_status_waiting_for_charging">Αναμονή για φόρτιση συσκευής</string>
     <string name="actionbar_search">Αναζήτηση</string>
     <string name="files_drop_not_supported">Αυτό είναι χαρακτηριστικό του Nextcloud, παρακαλούμε ενημερώστε.</string>
@@ -650,4 +657,8 @@
     <!-- Notifications -->
     <string name="new_notification_received">Νέα ενημέρωση ελήφθη </string>
     <string name="drawer_logout">Έξοδος</string>
-    </resources>
+    <string name="file_not_found">Δεν βρέθηκε το αρχείο!</string>
+
+    <string name="folder_sync_folders">Ρύθμιση φακέλων</string>
+
+  </resources>

+ 7 - 2
src/main/res/values-en-rGB/strings.xml

@@ -303,7 +303,7 @@
     <string name="activity_chooser_title">Send link to &#8230;</string>
     <string name="wait_for_tmp_copy_from_private_storage">Copying file from private storage</string>
     
-    <string name="oauth_check_onoff">Log in with oAuth2</string> 
+    <string name="oauth_check_onoff">Log in with OAuth2</string> 
     <string name="oauth_login_connection">Connecting to OAuth 2 server…</string>    
         
     <string name="ssl_validator_header">The identity of the site could not be verified</string>
@@ -347,6 +347,7 @@
     <string name="instant_video_upload_on_charging">Only upload when charging</string>
     <string name="instant_upload_on_charging">Only upload when charging</string>
     <string name="instant_upload_path">/InstantUpload</string>
+    <string name="auto_upload_path">/Auto Upload</string>
     <string name="conflict_title">File conflict</string>
     <string name="conflict_message">Which files do you want to keep? If you select both versions, the local file will have a number appended to its name.</string>
     <string name="conflict_keep_both">Keep both</string>
@@ -417,11 +418,12 @@
     <string name="file_migration_failed_while_coping">ERROR: Failed during migration</string>
     <string name="file_migration_failed_while_updating_index">ERROR: Failed to updating index</string>
 
+    <string name="file_migration_directory_already_exists">Data folder exists already. Choose one of the following:</string>
     <string name="file_migration_override_data_folder">Replace</string>
     <string name="file_migration_use_data_folder">Use</string>
 
     <string name="file_migration_source_not_readable_title">Source directory not readable!</string>
-    <string name="file_migration_source_not_readable">Do you still want to change the storage path to %1$s?\n\nNote: all data will have to be downloaded again.</string>
+    <string name="file_migration_source_not_readable">Do you still want to change the storage path to %1$s?\n\nNote: All data will have to be downloaded again.</string>
 
     <string name="prefs_category_accounts">Accounts</string>
     <string name="prefs_add_account">Add account</string>
@@ -657,5 +659,8 @@
     <string name="drawer_logout">Logout</string>
     <string name="picture_set_as_no_app">No app found to set a picture with!</string>
     <string name="privacy">Privacy</string>
+    <string name="file_not_found">File not found!</string>
+
+    <string name="folder_sync_folders">Configure folders</string>
 
   </resources>

+ 666 - 255
src/main/res/values-es-rAR/strings.xml

@@ -1,256 +1,667 @@
-<?xml version='1.0' encoding='UTF-8'?>
+<?xml version="1.0" encoding="utf-8"?>
 <resources>
-  <string name="about_version">versión %1$s</string>
-  <string name="actionbar_sync">Actualizar cuenta</string>
-  <string name="actionbar_upload">Subir</string>
-  <string name="actionbar_upload_from_apps">Contenido de otras aplicaciones</string>
-  <string name="actionbar_upload_files">Archivos</string>
-  <string name="actionbar_open_with">Abrir con</string>
-  <string name="actionbar_mkdir">Nueva Carpeta</string>
-  <string name="actionbar_settings">Configuración</string>
-  <string name="actionbar_see_details">Detalles</string>
-  <string name="actionbar_send_file">Mandar</string>
-  <string name="actionbar_sort">Orden</string>
-  <string name="actionbar_sort_title">Ordenar por</string>
-  <string-array name="actionbar_sortby">
-    <item>A-Z</item>
-    <item>Nuevos - Viejos</item>
-  </string-array>
-  <!--TODO re-enable when server-side folder size calculation is available   
-    	<item>Biggest - Smallest</item>-->
-  <!--TODO re-enable when "Accounts" is available in Navigation Drawer-->
-  <!--<string name="drawer_item_accounts">Accounts</string>-->
-  <string name="drawer_item_all_files">Todos los archivos</string>
-  <!--TODO re-enable when "On Device" is available
-    <string name="drawer_item_on_device">On device</string>-->
-  <string name="drawer_open">Abrir</string>
-  <string name="prefs_category_general">General</string>
-  <string name="prefs_category_more">Más</string>
-  <string name="prefs_accounts">Cuentas</string>
-  <string name="prefs_manage_accounts">Gestionar cuentas</string>
-  <string name="prefs_instant_upload">Subir fotos instantáneamente. </string>
-  <string name="prefs_instant_upload_summary">Subir instantáneamente fotos tomadas por la cámara.</string>
-  <string name="prefs_instant_video_upload">Subir videos instantáneamente. </string>
-  <string name="prefs_instant_video_upload_summary">Subir instantáneamente videos tomados por la cámara.</string>
-  <string name="prefs_log_summary">Esto es usado para registrar problemas</string>
-  <string name="prefs_log_summary_history">Esto muestra los registros grabados</string>
-  <string name="prefs_help">Ayuda</string>
-  <string name="prefs_recommend">Recomendar a un amigo</string>
-  <string name="prefs_feedback">Sugerencias</string>
-  <string name="prefs_imprint">Imprint</string>
-  <string name="prefs_remember_last_share_location">Recordar compartir ubicación </string>
-  <string name="prefs_remember_last_upload_location_summary">Recordar la ultima ubicación compartida de subida</string>
-  <string name="recommend_subject">¡Intento %1$s en tu teléfono inteligente!</string>
-  <string name="recommend_text">Quiero invitarte a usar %1$s en tu teléfono inteligente!\nDescárgalo aquí: %2$s</string>
-  <string name="auth_host_url">Dirección del servidor https://...</string>
-  <string name="auth_username">Nombre de usuario</string>
-  <string name="auth_password">Contraseña</string>
-  <string name="auth_register">¿Sos nuevo para %1$s?</string>
-  <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_wrn_no_account_title">No se encontraron cuentas</string>
-  <string name="uploader_wrn_no_account_setup_btn_text">Configurar</string>
-  <string name="uploader_wrn_no_account_quit_btn_text">Salir</string>
-  <string name="file_list_seconds_ago">segundos atrás</string>
-  <string name="file_list_empty">No hay nada. ¡Subí contenido!</string>
-  <string name="local_file_list_empty">No existen archivos en esta carpeta.</string>
-  <string name="file_list_folder">carpeta</string>
-  <string name="file_list_folders">carpetas</string>
-  <string name="file_list_file">archivo</string>
-  <string name="file_list_files">archivo</string>
-  <string name="filedetails_select_file">Pulsá sobre un archivo para mostrar información adicional.</string>
-  <string name="filedetails_size">Tamaño:</string>
-  <string name="filedetails_type">Tipo:</string>
-  <string name="filedetails_created">Creado:</string>
-  <string name="filedetails_modified">Modificado:</string>
-  <string name="filedetails_download">Descargar</string>
-  <string name="filedetails_renamed_in_upload_msg">El archivo fue renombrado como %1$s durante la subida</string>
-  <string name="action_share">Compartir</string>
-  <string name="common_yes">Sí</string>
-  <string name="common_no">No</string>
-  <string name="common_ok">Aceptar</string>
-  <string name="common_cancel">Cancelar</string>
-  <string name="common_back">Volver</string>
-  <string name="common_error">Error</string>
-  <string name="common_loading">Cargando ...</string>
-  <string name="common_error_unknown">Error desconocido</string>
-  <string name="about_title">Acerca de</string>
-  <string name="change_password">Cambiar contraseña</string>
-  <string name="create_account">Crear cuenta</string>
-  <string name="upload_chooser_title">Subir desde ...</string>
-  <string name="uploader_info_dirname">Nombre de la carpeta</string>
-  <string name="uploader_upload_in_progress_ticker">Subiendo...</string>
-  <string name="uploader_upload_in_progress_content">%1$d%% Subiendo %2$s</string>
-  <string name="uploader_upload_succeeded_ticker">Subido con éxito</string>
-  <string name="uploader_upload_failed_ticker">Error al subir el archivo</string>
-  <string name="uploader_upload_failed_content_single">No se pudo completar la subida de %1$s </string>
-  <string name="uploads_view_group_finished_uploads">Subido</string>
-  <string name="uploads_view_upload_status_failed_permission_error">Error de permisos</string>
-  <string name="uploads_view_upload_status_unknown_fail">Error desconocido</string>
-  <string name="downloader_download_in_progress_ticker">Descargando ...</string>
-  <string name="downloader_download_in_progress_content">%1$d%%  descargando %2$s</string>
-  <string name="downloader_download_succeeded_ticker">Descarga completa</string>
-  <string name="downloader_download_failed_ticker">Error al descargar</string>
-  <string name="downloader_download_failed_content">No fue posible completar la descarga de %1$s</string>
-  <string name="downloader_not_downloaded_yet">No descargado</string>
-  <string name="common_choose_account">Elegí una cuenta</string>
-  <string name="sync_fail_content_unauthorized">Contraseña no válida para %1$s</string>
-  <string name="sync_conflicts_in_favourites_ticker">Se encontraron conflictos</string>
-  <string name="sync_conflicts_in_favourites_content">No se pudieron sincronizar %1$d archivos</string>
-  <string name="sync_fail_in_favourites_ticker">Fallo la sincronización de archivos</string>
-  <string name="sync_fail_in_favourites_content">%1$d archivos no pudieron ser sincronizados (%2$d conflictos)</string>
-  <string name="sync_foreign_files_forgotten_ticker">Algunos archivos locales fueron olvidados</string>
-  <string name="sync_foreign_files_forgotten_content">%1$d archivos en la carpeta %2$s no pudieron ser copiados</string>
-  <string name="sync_current_folder_was_removed">El directorio %1$s ya no existe</string>
-  <string name="foreign_files_move">Mover todos</string>
-  <string name="foreign_files_success">Todos los archivos fueron movidos</string>
-  <string name="foreign_files_fail">Algunos archivos no pudieron ser movidos</string>
-  <string name="foreign_files_local_text">Local: %1$s</string>
-  <string name="foreign_files_remote_text">Remote: %1$s</string>
-  <string name="media_notif_ticker">Reproductor de música %1$s</string>
-  <string name="media_state_playing">%1$s (reproduciendo)</string>
-  <string name="media_state_loading">%1$s (cargando)</string>
-  <string name="media_event_done">%1$s reproducción finalizada</string>
-  <string name="media_err_nothing_to_play">No se encuentra archivo de medio</string>
-  <string name="media_err_no_account">No se proporcionó cuenta</string>
-  <string name="media_err_not_in_owncloud">El archivo no está en una cuenta válida </string>
-  <string name="media_err_unsupported">Codec no soportado</string>
-  <string name="media_err_io">El archivo de medios no pudo ser leído </string>
-  <string name="media_err_malformed">Archivo no está correctamente codificado</string>
-  <string name="media_err_timeout">Tiempo expirado mientras se intentaba reproducir</string>
-  <string name="media_err_invalid_progressive_playback">Archivo de medios no puede ser transmitido</string>
-  <string name="media_err_unknown">El archivo de medios no se puede reproducir con el reproductor de medios por defecto </string>
-  <string name="media_err_security_ex">Error de seguridad al intentar reproducir %1$s</string>
-  <string name="media_err_io_ex">Error de entrada al intentar reproducir %1$s</string>
-  <string name="media_err_unexpected">Error inesperado intentando reproducir %1$s</string>
-  <string name="media_rewind_description">Botón rebobinado</string>
-  <string name="media_play_pause_description">Botón de reproducción o pausa </string>
-  <string name="media_forward_description">Botón avance rápido</string>
-  <string name="auth_no_net_conn_title">Sin conexión de red</string>
-  <string name="auth_nossl_plain_ok_title">Conexión segura no disponible.</string>
-  <string name="auth_connection_established">Conexión establecida</string>
-  <string name="auth_not_configured_title">Configuración de servidor en formato incorrecto</string>
-  <string name="auth_account_not_new">Una cuenta para el mismo usuario y servidor ya existe en el dispositivo</string>
-  <string name="auth_account_not_the_same">El usuario ingresado no concuerda con el usuario de esta cuenta</string>
-  <string name="auth_unknown_error_title">¡Ocurrió un error desconocido!</string>
-  <string name="auth_unknown_host_title">No fue posible encontrar la dirección</string>
-  <string name="auth_incorrect_path_title">Instancia de servidor no encontrada</string>
-  <string name="auth_timeout_title">El servidor tardó demasiado en responder</string>
-  <string name="auth_ssl_general_error_title">Error al inicializar el SSL</string>
-  <string name="auth_ssl_unverified_server_title">No se ha podido verifica la identidad SSL del servidor</string>
-  <string name="auth_bad_oc_version_title">No es posible reconocer la versión del servidor</string>
-  <string name="auth_wrong_connection_title">No fue posible establecer la conexión</string>
-  <string name="auth_secure_connection">Conexión segura establecida</string>
-  <string name="auth_unauthorized">Nombre de usuario o contraseña no válidas</string>
-  <string name="auth_oauth_error">Autorización no satisfactoria</string>
-  <string name="auth_oauth_error_access_denied">Acceso denegado por el servidor de autorización</string>
-  <string name="auth_expired_oauth_token_toast">Tu autorización ha expirado. Por favor, obtenga una nueva autorización</string>
-  <string name="auth_expired_saml_sso_token_toast">Su sesión ha expirado. Por favor, conéctese de nuevo</string>
-  <string name="auth_unsupported_auth_method">El servidor no soporta este método de autenticación</string>
-  <string name="auth_unsupported_multiaccount">%1$s no soporta múltiples cuentas</string>
-  <string name="auth_fail_get_user_name">Tú servidor no esta regresando una identificación de usuario correcta, por favor contacta a un administrador</string>
-  <string name="common_rename">Renombrar</string>
-  <string name="common_remove">Borrar</string>
-  <string name="confirmation_remove_alert">¿Realmente quieres eliminar %1$s?</string>
-  <string name="confirmation_remove_folder_alert">¿Realmente deseas eliminar %1$s y todo su contenido?</string>
-  <string name="confirmation_remove_local">Sólo local</string>
-  <string name="remove_success_msg">Borrado correctamente</string>
-  <string name="remove_fail_msg">El borrado no pudo ser completado</string>
-  <string name="rename_dialog_title">Ingrese un nombre</string>
-  <string name="rename_local_fail_msg">No fue posible cambiar el nombre de la copia local, intentalo con un nombre diferente</string>
-  <string name="rename_server_fail_msg">No se pudo cambiar el nombre</string>
-  <string name="sync_file_fail_msg">No pudo comprobarse el archivo remoto</string>
-  <string name="sync_file_nothing_to_do_msg">Ya está sincronizado</string>
-  <string name="create_dir_fail_msg">La carpeta puede no haber sido creada</string>
-  <string name="filename_forbidden_characters">Caracteres prohibidos: / \\ &lt; &gt; : \" | ? *</string>
-  <string name="filename_empty">El nombre de archivo no puede estar vacío</string>
-  <string name="wait_a_moment">Esperá un momento</string>
-  <string name="filedisplay_unexpected_bad_get_content">Problema inesperado; por favor, intentá con otra aplicación para abrir el archivo</string>
-  <string name="filedisplay_no_file_selected">No se seleccionó ningún archivo</string>
-  <string name="activity_chooser_title">Enviar enlace a...</string>
-  <string name="oauth_check_onoff">Iniciando sesión con oAuth2</string>
-  <string name="oauth_login_connection">Conectando al servidor oAuth2...</string>
-  <string name="ssl_validator_header">La identidad del sitio no pudo ser verificada</string>
-  <string name="ssl_validator_reason_cert_not_trusted">- El certificado del servidor no es confiable</string>
-  <string name="ssl_validator_reason_cert_expired">- El certificado del servidor caducó</string>
-  <string name="ssl_validator_reason_cert_not_yet_valid">- El certificado del servidor es demasiado nuevo</string>
-  <string name="ssl_validator_reason_hostname_not_verified">- La URL no se condice con el nombre del servidor en el certificado</string>
-  <string name="ssl_validator_question">¿Confiás en el certificado de todos modos?</string>
-  <string name="ssl_validator_not_saved">No fue posible guardar el certificado</string>
-  <string name="ssl_validator_btn_details_see">Detalles</string>
-  <string name="ssl_validator_btn_details_hide">Ocultar</string>
-  <string name="ssl_validator_label_subject">Generado para:</string>
-  <string name="ssl_validator_label_issuer">Generado por:</string>
-  <string name="ssl_validator_label_CN">Nombre común:</string>
-  <string name="ssl_validator_label_O">Organización:</string>
-  <string name="ssl_validator_label_OU">Unidad de la organización:</string>
-  <string name="ssl_validator_label_C">Pais:</string>
-  <string name="ssl_validator_label_ST">Provincia:</string>
-  <string name="ssl_validator_label_L">Ubicación:</string>
-  <string name="ssl_validator_label_validity">Validez:</string>
-  <string name="ssl_validator_label_validity_from">De:</string>
-  <string name="ssl_validator_label_validity_to">Para:</string>
-  <string name="ssl_validator_label_signature">Firma:</string>
-  <string name="ssl_validator_label_signature_algorithm">Algoritmo:</string>
-  <string name="ssl_validator_null_cert">El certificado no puede ser mostrado</string>
-  <string name="ssl_validator_no_info_about_error">- No existe información sobre el error</string>
-  <string name="placeholder_sentence">Este es un texto temporario</string>
-  <string name="placeholder_filename">marcadordeposición.txt</string>
-  <string name="placeholder_filetype">Imagen PNG</string>
-  <string name="placeholder_filesize">389 KB</string>
-  <string name="placeholder_timestamp">2012/05/18 12:23 PM</string>
-  <string name="placeholder_media_time">12:23:45</string>
-  <string name="instant_upload_path">/SubidasInstantáneas</string>
-  <string name="conflict_keep_both">Mantener ambas</string>
-  <string name="preview_image_description">Previsualización de imagen</string>
-  <string name="preview_image_error_unknown_format">Esta imagen no puede ser mostrada</string>
-  <string name="error__upload__local_file_not_copied">%1$s no pudo ser copiado a la carpeta local %2$s </string>
-  <string name="share_link_no_support_share_api">Lo sentimos, compartir no esta activado en su servidor. Por favor contacte a su
-⇥⇥administrator.</string>
-  <string name="share_link_file_no_exist">Imposible compartir. Por favor revise si el archivo existe</string>
-  <string name="share_link_file_error">Un error ocurrió cuando se intentaba compartir el archivo o carpeta</string>
-  <string name="unshare_link_file_no_exist">Imposible dejar de compartir. Por favor revise si los archivos existen</string>
-  <string name="unshare_link_file_error">Un error ocurrió cuando se intentaba dejar de compartir el archivo o carpeta</string>
-  <string name="activity_chooser_send_file_title">Mandar</string>
-  <string name="copy_link">Copiar dirección url</string>
-  <string name="clipboard_text_copied">Copiado al portapapeles</string>
-  <string name="error_cant_bind_to_operations_service">Error critico: no se puede realizar operaciones</string>
-  <string name="network_error_socket_exception">Un error ocurrió mientras se conectaba con el Servidor.</string>
-  <string name="network_error_socket_timeout_exception">Un error ocurrió mientras se conectaba con el Servidor. La operación no se realizó </string>
-  <string name="network_error_connect_timeout_exception">Un error ocurrió esperando al Servidor, la operación no se realizó</string>
-  <string name="network_host_not_available">Operación no completada, Servidor no disponible.</string>
-  <string name="forbidden_permissions">Tu no tienes permiso %s</string>
-  <string name="forbidden_permissions_rename">para renombrar este archivo</string>
-  <string name="forbidden_permissions_delete">para borrar este archivo</string>
-  <string name="share_link_forbidden_permissions">para compartir este archivo</string>
-  <string name="unshare_link_forbidden_permissions">para dejar de compartir este archivo</string>
-  <string name="forbidden_permissions_create">para crear el archivo</string>
-  <string name="uploader_upload_forbidden_permissions">para subir en esta carpeta</string>
-  <string name="downloader_download_file_not_found">El archivo no esta mas disponible en este Servidor</string>
-  <string name="prefs_category_accounts">Cuentas</string>
-  <string name="prefs_add_account">Añadir cuenta</string>
-  <string name="actionbar_logger">Registro</string>
-  <string name="log_send_mail_subject">%1$s Registros de la aplicación Android</string>
-  <string name="saml_authentication_required_text">Autentificación requerida</string>
-  <string name="saml_authentication_wrong_pass">Clave incorrecta</string>
-  <string name="actionbar_move">Mover</string>
-  <string name="file_list_empty_moving">Nada aquí. Puedes agregar una carpeta!</string>
-  <string name="folder_picker_choose_button_text">Elegir</string>
-  <string name="move_file_not_found">Imposible mover. Por favor revisa si el archivo existe</string>
-  <string name="move_file_invalid_overwrite">El archivo ya existe en la carpeta destino</string>
-  <string name="move_file_error">Un error ocurrió intentando mover el archivo o carpeta</string>
-  <string name="forbidden_permissions_move">para mover este archivo</string>
-  <string name="copy_file_invalid_overwrite">El archivo ya existe en la carpeta destino</string>
-  <string name="prefs_category_details">Detalles</string>
-  <string name="auth_host_address">Dirección del servidor</string>
-  <string name="share_dialog_title">Compartiendo</string>
-  <string name="share_via_link_section_title">Compartir vínculo</string>
-  <string name="share_via_link_expiration_date_label">Asignar fecha de vencimiento</string>
-  <string name="share_via_link_password_label">Proteger con contraseña </string>
-  <string name="share_search">Buscar</string>
-  <string name="share_privilege_can_share">puede compartir</string>
-  <string name="share_privilege_can_edit">podés editar</string>
-  <string name="share_privilege_can_edit_create">crear</string>
-  <string name="share_privilege_can_edit_delete">borrar</string>
-</resources>
+    <string name="about_android">%1$s aplicación Android</string>
+    <string name="about_version">versión %1$s</string>
+    <string name="actionbar_sync">Actualizar cuenta</string>
+    <string name="actionbar_upload">Cargar</string>
+    <string name="actionbar_upload_from_apps">Contenido de otras aplicaciones</string>
+    <string name="actionbar_upload_files">Archivos</string>
+    <string name="actionbar_open_with">Abrir con</string>
+    <string name="actionbar_mkdir">Nueva carpeta</string>
+    <string name="actionbar_settings">Configuraciones</string>
+    <string name="actionbar_see_details">Detalles</string>
+    <string name="actionbar_send_file">Enviar</string>
+    <string name="actionbar_sort">Ordenar</string>
+    <string name="actionbar_sort_title">Ordenar por</string>
+    <string name="sort_by">Ordenar por</string>
+    <string name="menu_item_sort_by_name_a_z">A - Z</string>
+    <string name="menu_item_sort_by_name_z_a">Z - A</string>
+    <string name="menu_item_sort_by_date_newest_first">Más reciente primero</string>
+    <string name="menu_item_sort_by_date_oldest_first">Más antiguo primero</string>
+    <string name="menu_item_sort_by_size_biggest_first">Más grande primero</string>
+    <string name="menu_item_sort_by_size_smallest_first">Más pequeño primero</string>
+
+    <string name="drawer_item_all_files">Todos los archivos</string>
+    <string name="drawer_item_files">Archivos</string>
+    <string name="drawer_item_home">Inicio</string>
+    <string name="drawer_item_favorites">Favoritos</string>
+    <string name="drawer_item_photos">Fotos</string>
+    <string name="drawer_item_on_device">Disponibles sin conexión</string>
+    <string name="drawer_item_recently_added">Agregado recientemente</string>
+    <string name="drawer_item_recently_modified">Modificado recientemente</string>
+    <string name="drawer_item_shared">Compartido</string>
+    <string name="drawer_item_videos">Videos</string>
+    <string name="drawer_item_settings">Configuraciones</string>
+    <string name="drawer_item_uploads_list">Cargas</string>
+    <string name="drawer_item_activities">Actividades</string>
+    <string name="drawer_item_notifications">Notificaciones</string>
+    <string name="drawer_quota">%1$s de %2$s usados</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>
+    <string name="prefs_accounts">Cuentas</string>
+    <string name="prefs_manage_accounts">Administrar cuentas</string>
+    <string name="prefs_passcode">Bloqueo con código de seguridad</string>
+    <string name="prefs_fingerprint">Bloqueo por huella digital</string>
+    <string name="prefs_fingerprint_notsetup">No se ha establecido ninguna huella digital. </string>
+    <string name="prefs_show_hidden_files">Mostrar archivos ocultos</string>
+    <string name="prefs_instant_upload">Carga instantánea de imágenes</string>
+    <string name="prefs_instant_upload_summary">Cargar instantaneamente las fotografías tomadas por la cámara</string>
+    <string name="prefs_instant_video_upload">Carga instantánea de video</string>
+    <string name="prefs_instant_video_upload_summary">Cargar instantáneamente los videos grabados por la cámara</string>
+    <string name="prefs_log_title">Habilitar registro</string>
+    <string name="prefs_log_summary">Esto se usa para registrar problemas</string>
+    <string name="prefs_log_title_history">Histórico del registro</string>
+    <string name="prefs_log_summary_history">Esto muestra los registros guardados</string>
+    <string name="prefs_log_delete_history_button">Borrar historial</string>
+    <string name="prefs_calendar_contacts">Sincronizar calendario  &amp; contactos</string>
+    <string name="prefs_calendar_contacts_summary">Configurar DAVdroid (v1.3.0+) para la cuenta actual</string>
+    <string name="prefs_calendar_contacts_address_resolve_error">La dirección del servidor para la cuenta no se pudo resolver para DAVdroid</string>
+    <string name="prefs_calendar_contacts_no_store_error">No ha sido instalado F-Droid o Google Play </string>
+    <string name="prefs_calendar_contacts_sync_setup_successful">Configuración de la sincronizacion del calendario &amp; contactos </string>
+    <string name="prefs_help">Ayuda</string>
+    <string name="prefs_recommend">Recomendar a un amigo</string>
+    <string name="prefs_feedback">Retroalimentación</string>
+    <string name="prefs_imprint">Exención de responsabilidad </string>
+    <string name="prefs_remember_last_share_location">Recordar la ubicación del elemento compartido</string>
+    <string name="prefs_remember_last_upload_location_summary">Recordar la ubicación del elemento compartido más recientemente usado</string>
+
+	<string name="recommend_subject">Prueba  %1$s en tu teléfono inteligente!</string>
+	<string name="recommend_text">Quisiera invitarlo a usar %1$s en su teléfono inteligente\nDescargue aquí: %2$s</string>
+
+    <string name="auth_check_server">Verficar el servidor</string>
+    <string name="auth_host_url">Dirección del servidor https://…</string>
+    <string name="auth_username">Nombre de usuario</string>
+    <string name="auth_password">Contraseña</string>
+    <string name="auth_register">Aún no tiene un servidor? \nHaga click aquí para obtener uno de un proveedor</string>
+    <string name="sync_string_files">Archivos</string>
+    <string name="setup_btn_connect">Conectar</string>
+    <string name="uploader_btn_upload_text">Cargar</string>
+    <string name="uploader_top_message">Seleccione la carpeta de cargas</string>
+    <string name="uploader_wrn_no_account_title">No se encontró la cuenta</string>
+    <string name="uploader_wrn_no_account_text">No existen cuentas  %1$s en su dispositivo. Favor de configurar una cuenta primero.</string>
+    <string name="uploader_wrn_no_account_setup_btn_text">Ajustes</string>
+    <string name="uploader_wrn_no_account_quit_btn_text">Salir</string>
+    <string name="uploader_error_title_no_file_to_upload">No hay un archivo para cargar</string>
+    <string name="uploader_error_message_received_piece_of_text">%1$s no puede cargar una fragmento de texto como un archivo.</string>
+    <string name="uploader_error_message_no_file_to_upload">La información recibida no contiene un archivo válido.</string>
+    <string name="uploader_error_title_file_cannot_be_uploaded">Este archivo no puede ser cargado</string>
+    <string name="uploader_error_message_read_permission_not_granted">%1$s no tiene permitido leer un archivo recibido</string>
+    <string name="uploader_error_message_source_file_not_found">El archivo seleccionado para cargar no fue encontrado. Favor de verificar si el archivo existe.</string>
+    <string name="uploader_error_message_source_file_not_copied">No fue posible copiar el archivo a una carpeta temporal. Favor de intentar enviarlo de nuevo.</string>
+    <string name="uploader_upload_files_behaviour">Opción de carga:</string>
+    <string name="uploader_upload_files_behaviour_move_to_nextcloud_folder">Mover el archivo a la carpeta de Nextcloud</string>
+    <string name="uploader_upload_files_behaviour_only_upload">Mantener el archivo en la carpeta de origen</string>
+    <string name="uploader_upload_files_behaviour_upload_and_delete_from_source">Borrar el archivo de la carpeta de origen</string>
+    <string name="file_list_seconds_ago">hace algunos segundos</string>
+    <string name="file_list_empty_headline">No hay archivos aquí</string>
+    <string name="file_list_empty">Cargue algún contenido o sincronice con sus dispositivos.</string>
+    <string name="file_list_empty_favorites">Marque algunos archivos como favoritos o sincronice con sus dispositivos.</string>
+    <string name="file_list_empty_favorites_filter_list">Los archivos y carpetas que marque como favoritos se mostrarán aquí</string>
+    <string name="file_list_empty_favorites_filter">Su búsqueda no regresó archivos marcados como favoritos. </string>
+    <string name="file_list_loading">Cargando&#8230;</string>
+    <string name="file_list_no_app_for_file_type">No se cuenta con una aplicación que maneje este tipo de achivo. </string>
+    <string name="local_file_list_empty">No hay archivos en esta carpeta</string>
+    <string name="file_list_empty_headline_search">No hay resultados en esta carpeta</string>
+    <string name="file_list_empty_headline_server_search">No hay resultados</string>
+    <string name="file_list_empty_favorite_headline">Aún no hay nada marcado como favorito</string>
+    <string name="file_list_empty_shared_headline">Aún no hay nada compartido</string>
+    <string name="file_list_empty_shared">Los archivos y carpetas que comparta se mostrarán aquí. </string>
+    <string name="file_list_empty_headline_server_search_videos">No hay videos</string>
+    <string name="file_list_empty_headline_server_search_photos">No hay fotos</string>
+    <string name="file_list_empty_search">¿Tal vez está dentro de una carpeta diferente?</string>
+    <string name="file_list_empty_recently_modified">No se encontraron archivos que hayan sido modificado en los últimos 7 días</string>
+    <string name="file_list_empty_recently_modified_filter">Su búsqueda no encontró archivos que hayan sido modificados 
+en los últimos 7 días. </string>
+    <string name="file_list_empty_recently_added">No se encontraron archivos agregados recientemente</string>
+    <string name="file_list_empty_recently_added_filter">Su búsqueda no encontró archivos recientemente agregados. </string>
+    <string name="file_list_empty_text_photos">Cargue algunas fotos o active la carga automática.</string>
+    <string name="file_list_empty_text_photos_filter">Su búsqueda no encontró fotografías. </string>
+    <string name="file_list_empty_text_videos">Cargue algunos videos o active la carga automática.</string>
+    <string name="file_list_empty_text_videos_filter">Su búsqueda no encontró videos. </string>
+    <string name="upload_list_empty_headline">No hay cargas disponibles</string>
+    <string name="upload_list_empty_text">Cargue algún contenido o active la carga instantánea</string>
+    <string name="upload_list_empty_text_auto_upload">Cargue algún contenido o active la carga automática</string>
+    <string name="file_list_folder">carpeta</string>
+    <string name="file_list_folders">carpetas</string>
+    <string name="file_list_file">archivo</string>
+    <string name="file_list_files">archivos</string>
+    <string name="filedetails_select_file">Pulse un archivo para mostrar información adicional.</string>
+    <string name="filedetails_size">Tamaño:</string>
+    <string name="filedetails_type">Tipo:</string>
+    <string name="filedetails_created">Creado:</string>
+    <string name="filedetails_modified">Modificado:</string>
+    <string name="filedetails_download">Descargar</string>
+    <string name="filedetails_sync_file">Sincronizar</string>
+    <string name="filedetails_renamed_in_upload_msg">El archivo se renombró como %1$s durante la carga</string>
+    <string name="list_layout">Vista enlistada</string>
+    <string name="action_share">Compartir</string>
+    <string name="common_yes">Sí</string>
+    <string name="common_no">No</string>
+    <string name="common_ok">OK</string>
+    <string name="common_remove_upload">Eliminar carga</string>
+    <string name="common_retry_upload">Reintentar carga</string>
+    <string name="common_cancel_sync">Cancelar sincronización</string>
+    <string name="common_cancel">Cancelar</string>
+    <string name="common_back">Atrás</string>
+    <string name="common_save">Guardar</string>
+    <string name="common_save_exit">Guardar &amp; salir</string>
+    <string name="common_error">Error</string>
+    <string name="common_loading">Cargando  &#8230;</string>
+    <string name="common_unknown">desconocido</string>
+    <string name="common_error_unknown">Error desconocido</string>
+    <string name="common_pending">Pendiente</string>
+    <string name="about_title">Acerca de</string>
+    <string name="change_password">Cambiar contraseña</string>
+    <string name="delete_account">Eliminar cuenta</string>
+    <string name="delete_account_warning">Eliminar cuenta %s?\\n\\nEl borrado no se puede deshacer.</string>
+    <string name="create_account">Crear cuenta</string>
+    <string name="upload_chooser_title">Cargar desde &#8230;</string>
+    <string name="uploader_info_dirname">Nombre de la carpeta</string>
+    <string name="uploader_upload_in_progress_ticker">Cargando &#8230;</string>
+    <string name="uploader_upload_in_progress_content">%1$d%% Cargando %2$s</string>
+    <string name="uploader_upload_succeeded_ticker">Cargado</string>
+    <string name="uploader_upload_succeeded_content_single">%1$s cargado</string>
+    <string name="uploader_upload_failed_ticker">Falla en la carga</string>
+    <string name="uploader_upload_failed_content_single">No fue posible cargar %1$s</string>
+    <string name="uploader_upload_failed_credentials_error">Falla en la carga, necesita autenticarse de nuevo</string>
+    <string name="uploads_view_title">Cargas</string>
+    <string name="uploads_view_group_current_uploads">Actual</string>
+    <string name="uploads_view_group_failed_uploads">Se presentó una falla (pulse para reintentar)</string>
+    <string name="uploads_view_group_finished_uploads">Cargado</string>
+    <string name="uploads_view_upload_status_succeeded">Completado</string>
+    <string name="uploads_view_upload_status_cancelled">Cancelado</string>
+    <string name="uploads_view_upload_status_paused">Pausado</string>
+    <string name="uploads_view_upload_status_failed_connection_error">Error de conexión</string>
+    <string name="uploads_view_upload_status_failed_retry">La recarga se reintentará en breve</string>
+    <string name="uploads_view_upload_status_failed_credentials_error">Error de credenciales</string>
+    <string name="uploads_view_upload_status_failed_folder_error">Error de carpeta</string>
+    <string name="uploads_view_upload_status_failed_file_error">Error de archivo</string>
+    <string name="uploads_view_upload_status_failed_localfile_error">No se encontró el archivo local</string>
+    <string name="uploads_view_upload_status_failed_permission_error">Error de permisos</string>
+    <string name="uploads_view_upload_status_conflict">Conflicto</string>
+    <string name="uploads_view_upload_status_service_interrupted">La aplicación ha sido terminada</string>
+    <string name="uploads_view_upload_status_unknown_fail">Error desconocido</string>
+    <string name="uploads_view_upload_status_waiting_for_wifi">Aguardando conectividad Wi-Fi</string>
+    <string name="uploads_view_later_waiting_to_upload">Esperando para cargar</string>
+    <string name="downloader_download_in_progress_ticker">Descargando &#8230;</string>
+    <string name="downloader_download_in_progress_content">%1$d%% Descargando %2$s</string>
+    <string name="downloader_download_succeeded_ticker">Descargado</string>
+    <string name="downloader_download_succeeded_content">%1$s descargado</string>
+    <string name="downloader_download_failed_ticker">Falla en la descarga</string>
+    <string name="downloader_download_failed_content">No fue posible descargar %1$s</string>
+    <string name="downloader_not_downloaded_yet">Aún no ha descargado</string>
+    <string name="downloader_download_failed_credentials_error">Falla en la descarga, necesita ingresar a su cuenta de nuevo</string>
+    <string name="common_choose_account">Elija una cuenta</string>
+    <string name="sync_fail_ticker">Falla en la sincronización</string>
+    <string name="sync_fail_ticker_unauthorized">Falla en la sincronización, necesita volver a inicar sesión</string>
+    <string name="sync_fail_content">No fue posible completar la sincronización de %1$s</string>
+    <string name="sync_fail_content_unauthorized">Contraseña inválida para %1$s</string>
+    <string name="sync_conflicts_in_favourites_ticker">Se encontraron conflictos</string>
+    <string name="sync_conflicts_in_favourites_content">%1$d archivos mantenidos-en-sincronización no pudieron ser sinconizados</string>
+    <string name="sync_fail_in_favourites_ticker">Falla en archivos mantenidos-en-sincronización.</string>
+    <string name="sync_fail_in_favourites_content">El contenido de%1$d archivos no pudo ser sincronizado (%2$d conflictos)</string>
+    <string name="sync_foreign_files_forgotten_ticker">Algunos archivos locales se han perdido</string>
+    <string name="sync_foreign_files_forgotten_content">%1$d archivos de la carpeta %2$s no pudieron ser copiadas</string>
+    <string name="sync_foreign_files_forgotten_explanation">A partir de la versión 1.3.16, los archivos cargados desde este dispositivo son copiados a la carpeta local %1$s para prevenir perdidas de datos cuando un archivo se sincroniza entre múltiples cuentas. \n\nDervado de este cambio, todos los archivos cargados con versiones anteriores de la aplicación fueron copiados a la carpeta %2$s. Sin embargo, un error evitó que se completara esta operación durante la sincronizacion de la cuenta. Usted puede dejar el(los) archivo(s) como está(n) y eliminar la liga a %3$s, o bine, mover el(los) archivo(s) a la carpeta %1$s y mantener la liga a%4$s.\n\nSe enlistan a continuación los archivos locales asi como los archivos remotos en %5$s a donde estaban ligados.</string>
+    <string name="sync_current_folder_was_removed">La carpeta %1$s ya no existe</string>
+    <string name="foreign_files_move">Mover todo</string>
+    <string name="foreign_files_success">Todos los archivos fueron movidos</string>
+    <string name="foreign_files_fail">Algunos archivos no puderon ser movidos</string>
+    <string name="foreign_files_local_text">Local: %1$s</string>
+    <string name="foreign_files_remote_text">Remoto: %1$s</string>
+    <string name="upload_query_move_foreign_files">El espacio insuficiente evita que se copien los archivos seleccionados dentro de la carpeta %1$s. ¿Le gustaría moverlos ahí en su lugar?</string>
+    <string name="pass_code_enter_pass_code">Favor de ingresar su código de seguridad</string>
+    
+    <string name="pass_code_configure_your_pass_code">Ingrese su código de seguridad</string>
+    <string name="pass_code_configure_your_pass_code_explanation">El código de seguridad será solicitado cada vez que inicie la aplicación</string>
+    <string name="pass_code_reenter_your_pass_code">Favor de reingresar el código de seguridad</string>
+    <string name="pass_code_remove_your_pass_code">Elimine su código de seguridad</string>
+    <string name="pass_code_mismatch">Los códigos de seguridad no son iguales</string>
+    <string name="pass_code_wrong">Código de seguridad incorrecto</string>
+    <string name="pass_code_removed">Código de seguridad eliminado</string>
+    <string name="pass_code_stored">Código de seguridad almacenado</string>
+    
+    <string name="media_notif_ticker">Reproductor de música %1$s</string>
+    <string name="media_state_playing">%1$s (reproduciendo)</string>
+    <string name="media_state_loading">%1$s (cargando)</string>
+    <string name="media_event_done">%1$s reproducción finalizada</string>
+    <string name="media_err_nothing_to_play">No se encontró el archivo</string>
+    <string name="media_err_no_account">No se ha proporcionado una cuenta</string>
+    <string name="media_err_not_in_owncloud">El archivo no está en una cuenta válida</string>
+    <string name="media_err_unsupported">Codec no soportado</string>
+    <string name="media_err_io">No fue posible leer el archivo de medios</string>
+    <string name="media_err_malformed">El archivo de medios tiene una codificacion incorrecta</string>
+    <string name="media_err_timeout">El intento de reproducir el archivo agotó el tiempo de espera.</string>
+    <string name="media_err_invalid_progressive_playback">Archivo de medio no puede ser transformado a un flujo</string>
+    <string name="media_err_unknown">El reproductor predeterminado no puede reproducir el archivo de medios</string>
+    <string name="media_err_security_ex">Se presentó un error de seguridad al intentar reproducir %1$s</string>
+    <string name="media_err_io_ex">Se presentó un error de entrada al intentar reproducir %1$s </string>
+    <string name="media_err_unexpected">Se presentó un error inesperado al intentar reproducir %1$s</string>
+    <string name="media_rewind_description">Botón de rebobinar</string>
+    <string name="media_play_pause_description">Botón de reproducir o pausar</string>
+    <string name="media_forward_description">Botón de avanzar rápido</string>
+
+	<string name="auth_getting_authorization">Obteniendo autorización &#8230;</string>
+	<string name="auth_trying_to_login">Intentando iniciar en sesión &#8230;</string>
+	<string name="auth_no_net_conn_title">No hay conexión de red</string>
+	<string name="auth_nossl_plain_ok_title">Conexión segura no disponible.</string>
+	<string name="auth_connection_established">Conexión establecida</string>
+	<string name="auth_testing_connection">Probando conexión</string>
+	<string name="auth_not_configured_title">La configuración del servidor está mal formada. </string>
+	<string name="auth_account_not_new">Ya existe una cuenta en el dispositivo para el mismo usuario y servidor </string>
+	<string name="auth_account_not_the_same">El usuario ingresado no corresponde con el usuario de esta cuenta</string>
+	<string name="auth_unknown_error_title">¡Se presentó un error desconocido!</string>
+	<string name="auth_unknown_host_title">No fue posible encontrar el servidor</string>
+	<string name="auth_incorrect_path_title">El servidor no se encontró </string>
+	<string name="auth_timeout_title">El servidor tardó demasiado en responder</string>
+	<string name="auth_incorrect_address_title">El formato de dirección para el servidor es erróneo</string>
+	<string name="auth_ssl_general_error_title">Falla en la inicialización de SSL</string>
+	<string name="auth_ssl_unverified_server_title">No fue posible verificar la identidad del servidor SSL</string>
+	<string name="auth_bad_oc_version_title">Versión del servidor no reconocida</string>
+	<string name="auth_wrong_connection_title">No fue posible establecer la conexión</string>
+	<string name="auth_secure_connection">Conexión segura establecida</string>
+	<string name="auth_unauthorized">Nombre de usuario o contraseña incorrecto</string>
+	<string name="auth_oauth_error">Autorización no exitosa</string>
+	<string name="auth_oauth_error_access_denied">Acceso denegado por el servidor de autorización</string>
+	<string name="auth_wtf_reenter_URL">Estado inesperado, favor de reingresar la dirección del servidor</string>
+	<string name="auth_expired_oauth_token_toast">Su autorización ha expirado. Favor de volver a autorizar</string>
+	<string name="auth_expired_basic_auth_toast">Por favor ingrese su contraseña actual</string>
+	<string name="auth_expired_saml_sso_token_toast">Su sesión ha expirado. Favor de conectarse de nuevo</string>
+	<string name="auth_connecting_auth_server">Conectando al servidor de autenticación...</string>
+	<string name="auth_unsupported_auth_method">El servidor no soporta este método de autenticación</string>
+	<string name="auth_unsupported_multiaccount">%1$s no soporta cuentas múltiples</string>
+	<string name="auth_fail_get_user_name">Su servidor no está regresando un ID de usuario correcto, favor de contactar al adminitrador</string>
+	<string name="auth_can_not_auth_against_server">No es posible autenticarse en este servidor</string>
+    <string name="auth_account_does_not_exist">La cuenta aún no existe en el dispositivo</string>
+
+
+    <string name="favorite">Establer como disponible sin conexión</string>
+    <string name="unfavorite">Establecer como disponible con conexión</string>
+    <string name="favorite_real">Establecer como favorito</string>
+    <string name="unset_favorite_real">Quitar de los favoritos</string>
+    <string name="common_rename">Renombrar</string>
+    <string name="common_remove">Eliminar</string>
+    <string name="confirmation_remove_file_alert">¿Realmente desea eliminar %1$s?</string>
+    <string name="confirmation_remove_folder_alert">¿Realmente quiere eliminar %1$s y sus contenidos?</string>
+    <string name="confirmation_remove_local">Sólo local</string>
+    <string name="remove_success_msg">Eliminado</string>
+    <string name="remove_fail_msg">Falla al eliminar</string>
+    <string name="rename_dialog_title">Ingrese un nombre nuevo</string>
+    <string name="rename_local_fail_msg">No fue posible renombar la copia local, intente con un nombre diferente</string>
+    <string name="rename_server_fail_msg">No fue posible renombrar el servidor</string>
+    <string name="sync_file_fail_msg">No fue posible verificar el archivo remoto</string>
+    <string name="sync_file_nothing_to_do_msg">Los contenidos del archivo ya han sido sincronizados</string>
+    <string name="create_dir_fail_msg">No fue posible crear la carpeta</string>
+    <string name="filename_forbidden_characters">Caracteres inválidos: / \\ &lt; &gt; : \" | ? *</string>
+    <string name="filename_forbidden_charaters_from_server">El nombre del archivo contiene al menos un caracter inválido.</string>
+    <string name="filename_empty">El nombre del archivo no puede estar vacío</string>
+    <string name="wait_a_moment">Espere un momento...</string>
+    <string name="wait_checking_credentials">Verificando credenciales almacenadas</string>
+    <string name="filedisplay_unexpected_bad_get_content">Problema inesperado, favor de seleccionar el archivo desde una aplicación diferente</string>
+    <string name="filedisplay_no_file_selected">No se ha seleccionado algún archivo</string>
+    <string name="activity_chooser_title">Enviar el link a &#8230;</string>
+    <string name="wait_for_tmp_copy_from_private_storage">Copiando el archivo desde almacenamiento privado</string>
+    
+    <string name="oauth_check_onoff">Iniciar sesión con oAuth2</string> 
+    <string name="oauth_login_connection">Conectando al servidor OAuth 2...</string>    
+        
+    <string name="ssl_validator_header">La identidad del sitio no pudo ser verificada</string>
+    <string name="ssl_validator_reason_cert_not_trusted">- El certificado del servidor no es de confianza</string>
+    <string name="ssl_validator_reason_cert_expired">- El certificado del servidor expiró</string>
+    <string name="ssl_validator_reason_cert_not_yet_valid">- Las fechas del certificado del servidor están en el futuro</string>
+    <string name="ssl_validator_reason_hostname_not_verified">- La URL no corresponde con el nombre del servidor en el certificado</string>
+    <string name="ssl_validator_question">¿Desea confiar en este certificado de todas formas?</string>
+    <string name="ssl_validator_not_saved">No fue posible guardar el certificado</string>
+    <string name="ssl_validator_btn_details_see">Detalles</string>
+    <string name="ssl_validator_btn_details_hide">Ocultar</string>
+    <string name="ssl_validator_label_subject">Emitido para:</string>
+    <string name="ssl_validator_label_issuer">Emitido por:</string>
+    <string name="ssl_validator_label_CN">Nombre común:</string>
+    <string name="ssl_validator_label_O">Organización:</string>
+    <string name="ssl_validator_label_OU">Unidad organizacional</string>
+    <string name="ssl_validator_label_C">Pais:</string>
+    <string name="ssl_validator_label_ST">Estado:</string>
+    <string name="ssl_validator_label_L">Ubicación:</string>
+    <string name="ssl_validator_label_validity">Validez:</string>
+    <string name="ssl_validator_label_validity_from">De:</string>
+    <string name="ssl_validator_label_validity_to">Para:</string>
+    <string name="ssl_validator_label_signature">Firma:</string>
+    <string name="ssl_validator_label_signature_algorithm">Algoritmo:</string>
+    <string name="digest_algorithm_not_available">Este algoritmo de verificación no está disponible en su teléfono</string>
+    <string name="ssl_validator_label_certificate_fingerprint">Huella digital:</string>
+    <string name="certificate_load_problem">Se presentó un problema al cargar el certificado.</string>
+    <string name="ssl_validator_null_cert">El certificado no puede ser mostrado.</string>
+    <string name="ssl_validator_no_info_about_error">- No hay información acerca del error</string>
+
+    <string name="placeholder_sentence">Este es un marcador de posición</string>
+    <string name="placeholder_filename">marcadordeposición.txt</string>
+    <string name="placeholder_filetype">Imagen PNG</string>
+    <string name="placeholder_filesize">389 KB</string>
+    <string name="placeholder_timestamp">2012/05/18 12:23 PM</string>
+    <string name="placeholder_media_time">12:23:45</string>
+
+    <string name="auto_upload_on_wifi">Cargar sólo mediante Wi-Fi</string>
+    <string name="instant_upload_on_wifi">Cargar imágenes sólo a través de Wi-Fi</string>
+    <string name="instant_video_upload_on_wifi">Cargar videos sólo a través de Wi-Fi</string>
+    <string name="instant_video_upload_on_charging">Cargar archivos sólo con el dispositivo conectado a la toma de corriente</string>
+    <string name="instant_upload_on_charging">Cargar archivos sólo con el dispositivo conectado a la toma de corriente</string>
+    <string name="instant_upload_path">/CargasInstantáneas</string>
+    <string name="auto_upload_path">/Carga automática</string>
+    <string name="conflict_title">Conflicto de archivo</string>
+    <string name="conflict_message">¿Qué archivos desea mantener? Si selecciona ambas versiones, se le agregará un número al nombre del archivo local.</string>
+    <string name="conflict_keep_both">Mantener ambas</string>
+    <string name="conflict_use_local_version">versión local</string>
+    <string name="conflict_use_server_version">versión de servidor</string>
+
+    <string name="preview_sorry">Disculpe. </string>
+    <string name="preview_image_description">Vista previa de imagen</string>
+    <string name="preview_image_error_unknown_format">No es posible mostrar la imagen</string>
+
+    <string name="error__upload__local_file_not_copied">%1$s no pudo ser copiado a la carpeta local %2$s</string>
+    <string name="prefs_instant_upload_path_title">Carpeta de carga instantánea</string>
+    <string name="prefs_folder_sync_local_path_title">Carpeta local</string>
+    <string name="prefs_folder_sync_remote_path_title">Carpeta remota</string>
+    <string name="prefs_instant_upload_path_use_subfolders_title">Usar sub carpetas</string>
+    <string name="prefs_instant_upload_path_use_subfolders_summary">Almacenar en sub carpetas con base en el año y mes</string>
+
+	<string name="share_link_no_support_share_api">No se permite compartir en su servidor. Favor de contactar a su adminstrador. </string>
+	<string name="share_link_file_no_exist">No fue posible compartir. Favor de revisar si el archivo existe</string>
+	<string name="share_link_file_error">Se presentó un error al trtatar de compartir este archivo o carpeta</string>
+	<string name="unshare_link_file_no_exist">Falla al dejar de compartir. Favor de revisar si existe el archivo</string>
+	<string name="unshare_link_file_error">Se presentó un error al tratar de dejar de compartir este archivo o carpeta</string>
+    <string name="update_link_file_no_exist">Falla al actualizar. Favor de verificar si el archivo existe</string>
+    <string name="update_link_file_error">Se presentó un error al tratar de actualizar el recurso compartido</string>
+    <string name="share_link_password_title">Ingrese una contraseña</string>
+    <string name="share_link_empty_password">Debe ingresar una contraseña</string>
+
+    <string name="activity_chooser_send_file_title">Enviar</string>
+
+    <string name="copy_link">Copiar link</string>
+    <string name="clipboard_text_copied">Copiado al portapapeles</string>
+    <string name="clipboard_no_text_to_copy">No se ha recibido texto para copiar al portapapeles</string>
+    <string name="clipboard_uxexpected_error">Se presentó un error inesperado al copiar al portapapeles</string>
+    <string name="clipboard_label">Texto copiado desde %1$s</string>
+
+    <string name="error_cant_bind_to_operations_service">Error crítico: No se pueden realizar operaciones</string>
+
+    <string name="network_error_socket_exception">Se presentó un error durante la conexión alel servidor.</string>
+    <string name="network_error_socket_timeout_exception">Se presentó un error al esperar respuesta del servidor. La operación no pudo ser completada.</string>
+    <string name="network_error_connect_timeout_exception">Se presentó un error al esperar respuesta del servidor La operación no pudo ser completada.</string>
+    <string name="network_host_not_available">La operación no pudo ser completada. El servidor no está disponible</string>
+
+    <string name="forbidden_permissions">No se le permite %s</string>
+    <string name="forbidden_permissions_rename">para renombrar este archivo</string>
+    <string name="forbidden_permissions_delete">para borrar este archivo</string>
+    <string name="share_link_forbidden_permissions">para compartir este archivo</string>
+    <string name="unshare_link_forbidden_permissions">para dejar de compartir este archivo</string>
+    <string name="update_link_forbidden_permissions">para actualizar este recurso compartido</string>
+    <string name="forbidden_permissions_create">para crear el archivo</string>
+    <string name="uploader_upload_forbidden_permissions">para cargar a esta carpeta</string>
+    <string name="downloader_download_file_not_found">El archivo ya no se encuentra disponible en el servidor</string>
+
+    <string name="file_migration_dialog_title">Actualizando la ruta de almacenamiento</string>
+    <string name="file_migration_finish_button">Terminar</string>
+    <string name="file_migration_preparing">Preparando la migración&#8230;</string>
+    <string name="file_migration_checking_destination">Verificando el destino&#8230;</string>
+    <string name="file_migration_saving_accounts_configuration">Guardando la configuración de las cuentas&#8230;</string>
+    <string name="file_migration_waiting_for_unfinished_sync">Esperando que todas las sincronizaciones terminen&#8230;</string>
+    <string name="file_migration_migrating">Moviendo información&#8230;</string>
+    <string name="file_migration_updating_index">Actualizando índice&#8230;</string>
+    <string name="file_migration_cleaning">Limpiando&#8230;</string>
+    <string name="file_migration_restoring_accounts_configuration">Guardando la configuración de las cuentas&#8230;</string>
+    <string name="file_migration_ok_finished">Terminado</string>
+    <string name="file_migration_failed_not_enough_space">ERROR: Espacio insuficiente</string>
+    <string name="file_migration_failed_not_writable">ERROR: El archivo destino no se puede escribir</string>
+    <string name="file_migration_failed_not_readable">ERROR: El archivo fuente no se puede leer</string>
+    <string name="file_migration_failed_dir_already_exists">ERROR: El directorio de Nextcloud ya existe</string>
+    <string name="file_migration_failed_while_coping">ERROR: Falla durante la migración</string>
+    <string name="file_migration_failed_while_updating_index">ERROR: Falla durante la actualización del índice</string>
+
+    <string name="file_migration_directory_already_exists">La carpeta de datos ya existe. Seleccione una de las siguientes opciones:</string>
+    <string name="file_migration_override_data_folder">Remplazar</string>
+    <string name="file_migration_use_data_folder">Usar</string>
+
+    <string name="file_migration_source_not_readable_title">¡El directorio fuente no se puede leer!</string>
+    <string name="file_migration_source_not_readable">¿Aún desea cambiar la ruta de almacenamiento a %1$s?\n\nNota: todos los datos tendrán que ser descargados de nuevo. </string>
+
+    <string name="prefs_category_accounts">Cuentas</string>
+    <string name="prefs_add_account">Agregar cuenta</string>
+    <string name="drawer_manage_accounts">Administrar cuentas</string>
+    <string name="auth_redirect_non_secure_connection_title">La conexión segura se está redirigiendo a través de una ruta insegura.</string>
+
+	<string name="actionbar_logger">Registros</string>
+	<string name="log_send_history_button">Enviar histórico</string>
+	<string name="log_send_no_mail_app">No se encontró alguna aplicación para el envío de bitácoras. Favor de instalar un cliente de correo electrónico. </string>
+	<string name="log_send_mail_subject"> %1$s bitácora de aplicación Android</string>
+	<string name="log_progress_dialog_text">Cargando información &#8230;</string>
+
+	<string name="saml_authentication_required_text">Autenticación requerida</string>
+	<string name="saml_authentication_wrong_pass">Contraseña incorrecta</string>
+	<string name="actionbar_move">Mover</string>
+    <string name="actionbar_copy">Copiar</string>
+	<string name="file_list_empty_moving">No hay nada aquí. Puede agregar una carpeta.</string>
+	<string name="folder_picker_choose_button_text">Seleccionar</string>
+
+    <string name="move_file_not_found">No fue posible mover el archivo. Favor de verificar si existe. </string>
+    <string name="move_file_invalid_into_descendent">No es posible mover una carpeta dentro de una de sus sub carpetas</string>
+    <string name="move_file_invalid_overwrite">El archivo ya existe en la carpeta de destino</string>
+    <string name="move_file_error">Se presentó un error al intentar mover este archivo o carpeta</string>
+    <string name="forbidden_permissions_move">para mover este archivo</string>
+
+
+    <string name="copy_file_not_found">Falla al copiar. Favor de revisar si existe el archivo</string>
+    <string name="copy_file_invalid_into_descendent">No es posible copiar una carpeta dentro de una de sus sub carpetas</string>
+    <string name="copy_file_invalid_overwrite">El archivo ya existe en la carpeta destino</string>
+    <string name="copy_file_error">Se presentó un error al intentar copiar este archivo o carpeta</string>
+    <string name="forbidden_permissions_copy">para copiar este archivo</string>
+
+    <string name="prefs_category_instant_uploading">Cargas instantáneas</string>
+    <string name="prefs_category_details">Detalles</string>
+
+	<string name="prefs_instant_video_upload_path_title">Carpeta de video para cargas instantáneas</string>
+    <string name="sync_folder_failed_content">La sincronización de %1$s carpeta no se pudo completar</string>
+
+	<string name="shared_subject_header">compartido</string>
+	<string name="with_you_subject_header">con usted</string>
+    
+	<string name="subject_user_shared_with_you">%1$s ha compartido \"%2$s\" con usted</string>
+    <string name="subject_shared_with_you">\"%1$s\" ha sido compartido con usted</string>
+
+    <string name="auth_refresh_button">Actualizar conexión</string>
+    <string name="auth_host_address">Dirección del servidor</string>
+    <string name="common_error_out_memory">Memoria insuficiente</string>
+
+    <string name="username">Nombre de usuario</string>
+
+    <string name="file_list__footer__folder">1 carpeta</string>
+    <string name="file_list__footer__folders">%1$d carpetas</string>
+    <string name="file_list__footer__file">1 archivo</string>
+    <string name="file_list__footer__file_and_folder">1 archivo, 1 carpeta</string>
+    <string name="file_list__footer__file_and_folders">1 archivo, %1$d carpeta</string>
+    <string name="file_list__footer__files">%1$d archivos</string>
+    <string name="file_list__footer__files_and_folder">%1$d archivos, 1 carpeta</string>
+    <string name="file_list__footer__files_and_folders">%1$d archivos, %2$d carpetas</string>
+    <string name="set_picture_as">Establecer imagen como</string>
+    <string name="set_as">Establecer Como</string>
+
+    <string name="prefs_instant_behaviour_dialogTitle">El archivo original será&#8230;</string>
+    <string name="prefs_instant_behaviour_title">El archivo original será&#8230;</string>
+    <string name="upload_copy_files">Copiar archivo</string>
+    <string name="upload_move_files">Mover archivo</string>
+    <string name="select_all">Seleccionar todo</string>
+
+    <string name="pref_behaviour_entries_keep_file">mantenido en la carpeta original</string>
+    <string name="pref_behaviour_entries_move">movido a la capreta de la aplicación</string>
+    <string name="pref_behaviour_entries_delete_file">Borrado</string>
+    <string name="prefs_storage_path">Ruta de almacenamiento</string>
+    <string name="prefs_common">Común</string>
+
+    <string name="share_dialog_title">Compartiendo</string>
+    <string name="share_file">Compartir %1$s</string>
+    <string name="share_with_user_section_title">Compartir con usuarios y grupos</string>
+    <string name="share_no_users">Aún no se ha compartido información con los usuarios</string>
+    <string name="share_add_user_or_group">Agregar usuario o grupo</string>
+    <string name="share_via_link_section_title">Compartir link</string>
+    <string name="share_via_link_expiration_date_label">Establecer fecha de expiración</string>
+    <string name="share_via_link_password_label">Proteger con contraseña</string>
+    <string name="share_via_link_password_title">Asegurado</string>
+    <string name="share_via_link_edit_permission_label">Permitir edición</string>
+    <string name="share_via_link_hide_file_listing_permission_label">Ocultar listado de archivos</string>
+    <string name="share_get_public_link_button">Obtener link</string>
+    <string name="share_with_title">Compartir con &#8230;</string>
+    <string name="share_with_edit_title">Compartir con %1$s</string>
+
+    <string name="share_search">Buscar</string>
+
+    <string name="search_users_and_groups_hint">Buscar usuarios y grupos</string>
+    <string name="share_group_clarification">%1$s (grupo)</string>
+    <string name="share_remote_clarification">%1$s (remoto)</string>
+    <string name="share_email_clarification">%1$s (correo electrónico)</string>
+    <string name="share_known_remote_clarification">%1$s ( a las %2$s )</string>
+
+    <string name="share_sharee_unavailable"> Actualice la versión del servidor para permitir compartir entre usuarios desde dentro de sus clientes.\nFavor de contactar a su adminsitrador</string>
+    <string name="share_privilege_can_share">puede compartir</string>
+    <string name="share_privilege_can_edit">puede editar</string>
+    <string name="share_privilege_can_edit_create">crear</string>
+    <string name="share_privilege_can_edit_change">cambiar</string>
+    <string name="share_privilege_can_edit_delete">borrar</string>
+    <string name="edit_share_unshare">Dejar de compartir</string>
+    <string name="edit_share_done">terminado</string>
+
+    <string name="action_retry_uploads">El reintento falló</string>
+    <string name="action_clear_failed_uploads">Borrar fallidos</string>
+    <string name="action_clear_successful_uploads">Borrados</string>
+    <string name="action_clear_finished_uploads">Borrar cargas terminadas</string>
+
+    <string name="action_switch_grid_view">Vista de cuadrícula</string>
+    <string name="action_switch_list_view">Vista de lista</string>
+
+    <string name="manage_space_title">Administrar espacio</string>
+    <string name="manage_space_description">Las configuraciones , base de datos y certificados del servior de los datos de %1$s serán borrados permanentemente.\n\nLos archivos descargados se mantendrán sin cambios.\n\nEste proceso puede tomar algo de tiempo. </string>
+    <string name="manage_space_clear_data">Borrar datos</string>
+    <string name="manage_space_error">No fue posible borrar algunos archivos</string>
+
+    <string name="permission_storage_access">Se requieren permisos adicionales para cargar y descargar archivos. </string>
+    <string name="local_file_not_found_toast">No se encontró el archivo en sistema de archivos local</string>
+    <string name="confirmation_remove_files_alert">¿Realmente desea eliminar los elementos seleccionados?</string>
+    <string name="confirmation_remove_folders_alert">¿Realmente desea eliminar los elementos seleccionados y su contenido?</string>
+    <string name="maintenance_mode">El servidor se encuentra en modo mantenimiento</string>
+
+    <string name="uploads_view_upload_status_waiting_for_charging">Aguardando la regarga del dispositivo </string>
+    <string name="actionbar_search">Buscar</string>
+    <string name="files_drop_not_supported">Esta es una característica de Nextcloud, favor de actualizar.</string>
+    <string name="learn_more">Conozca más</string>
+    <string name="drawer_folder_sync">Carga automática</string>
+    <string name="drawer_participate">Participe</string>
+    <string name="participate_testing_headline">Ayúdenos probando</string>
+    <string name="participate_testing_bug_text">¿Encontró una falla? ¿Hay algo raro?</string>
+    <string name="participate_testing_report_text">Reportar un tema en Github</string>
+    <string name="participate_testing_version_text">¿Le interesaría ayudarnos a probar la siguiente versión?</string>
+    <string name="participate_beta_headline">Probar la versión de desarrollo</string>
+    <string name="participate_beta_text">Esto incluye todas las últimas funcionalidades y es lo más nuevo. Fallas/errores pueden ocurrir y si es el caso, favor de reportarnoslos. </string>
+    <string name="participate_release_candidate_headline">Candidato a lanzamiento</string>
+    <string name="participate_release_candidate_text">El candidato a lanzamiento (CL) es una foto del más próximo lanzamiento y se espera que sea estable. Las pruebas a su configuración individual podrían ayudarnos a asegurar esto. Regístrese para hacer pruebas en la Play Store o consulte directamente la sección de \"versiones\" en F-Droid. </string>
+    <string name="participate_contribute_headline">Contribuya activamente</string>
+    <string name="participate_contribute_irc_text">Únase a las conversaciones en IRC: &lt;a href=\"%1$s\">#nextcloud-mobile&lt;/a></string>
+    <string name="participate_contribute_forum_text">Ayude a los demás en el &lt;a href=\"%1$s\">foro&lt;/a></string>
+    <string name="participate_contribute_translate_text">&lt;a href=\"%1$s\">Traduzca&lt;/a> la aplicación </string>
+    <string name="participate_contribute_github_text">Revise, corrija y escriba código, consulte &lt;a href=\"%1$s\">CONTRIBUIR.md&lt;/a> para más detalles </string>
+    <string name="move_to">Mover a&#8230;</string>
+    <string name="copy_to">Copiar a&#8230;</string>
+    <string name="choose_remote_folder">Seleccione la carpeta&#8230;</string>
+    <string name="folder_sync_loading_folders">Cargando carpetas&#8230;</string>
+    <string name="folder_sync_no_results">No se encontraron carpetas de medios</string>
+    <string name="folder_sync_preferences">Preferencias de carga automática</string>
+    <string name="folder_sync_settings">Configuraciones </string>
+    <string name="folder_sync_new_info">La carga instantánea ha sido completamente moderinzada. Reconfigure su carga automática desde el menu principal. \n\nDisfrute de las nuevas y extendidas capacidades de la carga automática. </string>
+    <string name="folder_sync_preferences_folder_path">Para %1$s</string>
+    <plurals name="items_selected_count">
+        <item quantity="one">%d seleccionado</item>
+        <item quantity="other">%d seleccionado</item>
+    </plurals>
+
+    <string name="activity_list_loading_activity">Cargando actividades&#8230;</string>
+    <string name="activity_list_no_results">No se encontraron actividades. </string>
+
+    <string name="notifications_loading_activity">Cargando notificaciones&#8230;</string>
+    <string name="notifications_no_results_headline">No hay notificaciones</string>
+    <string name="notifications_no_results_message">Favor de verificar más tarde. </string>
+
+    <string name="upload_file_dialog_title">Ingrese el nombre y el tipo del archivo a cargar</string>
+    <string name="upload_file_dialog_filename">Nombre de archivo</string>
+    <string name="upload_file_dialog_filetype">Tipo de archivo</string>
+    <string name="upload_file_dialog_filetype_snippet_text">Archivo snippet de texto(.txt)</string>
+    <string name="upload_file_dialog_filetype_internet_shortcut">Archivo de acceso directo a Internet(%s)</string>
+    <string name="upload_file_dialog_filetype_googlemap_shortcut">Archivo de acceso directo a Google Maps(%s)</string>
+
+    <string name="storage_description_default">Predeterminado</string>
+    <string name="storage_description_sd_no">tarjeta SD %1$d</string>
+    <string name="storage_description_unknown">Desconocido</string>
+
+    <!-- What's new feature and texts to show -->
+    <string name="whats_new_title">Qué hay de nuevo en Nextcloud</string>
+
+    <!-- Welcome to Nc intro features -->
+    <string name="welcome_feature_1_title">Un lugar seguro para todos sus datos</string>
+    <string name="welcome_feature_1_text">Acceda, comparta y proteja sus archivos en casa y la oficina</string>
+
+    <string name="welcome_feature_2_title">Multi cuenta</string>
+    <string name="welcome_feature_2_text">Conéctese a todas sus nubes</string>
+
+    <string name="welcome_feature_3_title">Carga instatánea</string>
+    <string name="welcome_feature_3_text">Mantenga sus fotos seguras</string>
+
+    <string name="whats_new_skip">Saltar</string>
+
+    <string name="fingerprint_scan_finger">Favor de escanear su dedo</string>
+    <string name="fingerprint_unknown">El dedo no ha sido reconocido</string>
+
+    <!-- User information -->
+    <string name="user_info_full_name">Nombre completo</string>
+    <string name="user_info_email">Correo electrónico</string>
+    <string name="user_info_phone">Número telefónico</string>
+    <string name="user_info_address">Dirección</string>
+    <string name="user_info_website">Sitio web</string>
+    <string name="user_info_twitter">Twitter</string>
+
+    <string name="user_information_description">Información del usuario</string>
+
+    <!-- Activities -->
+    <string name="activities_no_results_headline">Aún no hay actividades</string>
+    <string name="activities_no_results_message">Este flujo le mostrará eventos tales como \nagregados, cambios &amp; elementos compartidos</string>
+    <string name="webview_error">Se presentó un error</string>
+    <string name="prefs_category_about">Acerca de</string>
+
+    <string name="actionbar_contacts">Respaldar contactos</string>
+    <string name="actionbar_contacts_restore">Restaurar contactos</string>
+    <string name="contacts_backup_button">Respaldar ahora</string>
+    <string name="contacts_restore_button">Restaurar el último respaldo</string>
+    <string name="contacts_header_restore">Restaurar</string>
+    <string name="contacts_header_backup">Respaldar</string>
+    <string name="contacts_automatic_backup">Respaldo de contactos</string>
+    <string name="contacts_last_backup">Último respaldo</string>
+    <string name="contacts_read_permission">Se requiere el permiso para leer la lista de contactos</string>
+    <string name="contacts_write_permission">Se requiere el permiso para cambiar la lista de contactos</string>
+    <string name="contactlist_title">Restaurar contactos</string>
+    <string name="contaclist_restore_selected">Restaurar los contactos seleccionados</string>
+    <string name="contactlist_account_chooser_title">Seleccione la cuenta a importar</string>
+    <string name="contactlist_no_permission">¡No se otorgaron permisos, nada fue importado!</string>
+    <string name="contacts_preference_choose_date">Seleccione una fecha</string>
+    <string name="contacts_preference_backup_never">nunca</string>
+    <string name="contacts_preferences_no_file_found">No se encontraron archivos</string>
+    <string name="contacts_preferences_something_strange_happened">¡Su último respaldo no fue encontrado!</string>
+    <string name="contacts_preferences_backup_scheduled">El respaldo está calendarizado y deberá iniciar en breve</string>
+    <string name="contacts_preferences_import_scheduled">La importación está calendarizada y deberá iniciar en breve</string>
+
+    <!-- Notifications -->
+    <string name="new_notification_received">No se han recibido nuevas notificaciones </string>
+    <string name="drawer_logout">Salir de la sesión</string>
+    <string name="picture_set_as_no_app">¡No se encontró una aplicación con la cual establecer una imagen!</string>
+    <string name="privacy">Privacidad</string>
+    <string name="file_not_found">¡Archivo no encontrado!</string>
+
+    <string name="folder_sync_folders">Configurar careptas</string>
+
+  </resources>

+ 12 - 7
src/main/res/values-es-rMX/strings.xml

@@ -8,7 +8,7 @@
     <string name="actionbar_upload_files">Archivos</string>
     <string name="actionbar_open_with">Abrir con</string>
     <string name="actionbar_mkdir">Nueva carpeta</string>
-    <string name="actionbar_settings">Ajustes</string>
+    <string name="actionbar_settings">Configuraciones</string>
     <string name="actionbar_see_details">Detalles</string>
     <string name="actionbar_send_file">Enviar</string>
     <string name="actionbar_sort">Ordenar</string>
@@ -26,12 +26,12 @@
     <string name="drawer_item_home">Inicio</string>
     <string name="drawer_item_favorites">Favoritos</string>
     <string name="drawer_item_photos">Fotos</string>
-    <string name="drawer_item_on_device">En el dispositivo</string>
+    <string name="drawer_item_on_device">Disponibles sin conexión</string>
     <string name="drawer_item_recently_added">Agregado recientemente</string>
     <string name="drawer_item_recently_modified">Modificado recientemente</string>
     <string name="drawer_item_shared">Compartido</string>
     <string name="drawer_item_videos">Videos</string>
-    <string name="drawer_item_settings">Ajustes</string>
+    <string name="drawer_item_settings">Configuraciones</string>
     <string name="drawer_item_uploads_list">Cargas</string>
     <string name="drawer_item_activities">Actividades</string>
     <string name="drawer_item_notifications">Notificaciones</string>
@@ -277,8 +277,8 @@ en los últimos 7 días. </string>
     <string name="auth_account_does_not_exist">La cuenta aún no existe en el dispositivo</string>
 
 
-    <string name="favorite">Establer como disponible fuera de línea</string>
-    <string name="unfavorite">Establecer como disponible en línea</string>
+    <string name="favorite">Establer como disponible sin conexión</string>
+    <string name="unfavorite">Establecer como disponible con conexión</string>
     <string name="favorite_real">Establecer como favorito</string>
     <string name="unset_favorite_real">Quitar de los favoritos</string>
     <string name="common_rename">Renombrar</string>
@@ -348,6 +348,7 @@ en los últimos 7 días. </string>
     <string name="instant_video_upload_on_charging">Cargar archivos sólo con el dispositivo conectado a la toma de corriente</string>
     <string name="instant_upload_on_charging">Cargar archivos sólo con el dispositivo conectado a la toma de corriente</string>
     <string name="instant_upload_path">/CargasInstantáneas</string>
+    <string name="auto_upload_path">/Carga automática</string>
     <string name="conflict_title">Conflicto de archivo</string>
     <string name="conflict_message">¿Qué archivos desea mantener? Si selecciona ambas versiones, se le agregará un número al nombre del archivo local.</string>
     <string name="conflict_keep_both">Mantener ambas</string>
@@ -418,6 +419,7 @@ en los últimos 7 días. </string>
     <string name="file_migration_failed_while_coping">ERROR: Falla durante la migración</string>
     <string name="file_migration_failed_while_updating_index">ERROR: Falla durante la actualización del índice</string>
 
+    <string name="file_migration_directory_already_exists">La carpeta de datos ya existe. Seleccione una de las siguientes opciones:</string>
     <string name="file_migration_override_data_folder">Remplazar</string>
     <string name="file_migration_use_data_folder">Usar</string>
 
@@ -537,7 +539,7 @@ en los últimos 7 días. </string>
     <string name="action_switch_list_view">Vista de lista</string>
 
     <string name="manage_space_title">Administrar espacio</string>
-    <string name="manage_space_description">Los ajustes, base de datos y certificados del servior de los datos de %1$s serán borrados permanentemente.\n\nLos archivos descargados se mantendrán sin cambios.\n\nEste proceso puede tomar algo de tiempo. </string>
+    <string name="manage_space_description">Las configuraciones , base de datos y certificados del servior de los datos de %1$s serán borrados permanentemente.\n\nLos archivos descargados se mantendrán sin cambios.\n\nEste proceso puede tomar algo de tiempo. </string>
     <string name="manage_space_clear_data">Borrar datos</string>
     <string name="manage_space_error">No fue posible borrar algunos archivos</string>
 
@@ -572,7 +574,7 @@ en los últimos 7 días. </string>
     <string name="folder_sync_loading_folders">Cargando carpetas&#8230;</string>
     <string name="folder_sync_no_results">No se encontraron carpetas de medios</string>
     <string name="folder_sync_preferences">Preferencias de carga automática</string>
-    <string name="folder_sync_settings">Ajustes</string>
+    <string name="folder_sync_settings">Configuraciones </string>
     <string name="folder_sync_new_info">La carga instantánea ha sido completamente moderinzada. Reconfigure su carga automática desde el menu principal. \n\nDisfrute de las nuevas y extendidas capacidades de la carga automática. </string>
     <string name="folder_sync_preferences_folder_path">Para %1$s</string>
     <plurals name="items_selected_count">
@@ -658,5 +660,8 @@ en los últimos 7 días. </string>
     <string name="drawer_logout">Salir de la sesión</string>
     <string name="picture_set_as_no_app">¡No se encontró una aplicación con la cual establecer una imagen!</string>
     <string name="privacy">Privacidad</string>
+    <string name="file_not_found">¡Archivo no encontrado!</string>
+
+    <string name="folder_sync_folders">Configurar careptas</string>
 
   </resources>

+ 14 - 1
src/main/res/values-es/strings.xml

@@ -348,6 +348,7 @@
     <string name="instant_video_upload_on_charging">Subir solamente al cargar</string>
     <string name="instant_upload_on_charging">Subir solamente al cargar</string>
     <string name="instant_upload_path">/InstantUpload</string>
+    <string name="auto_upload_path">/Carga automática</string>
     <string name="conflict_title">Conflicto con archivo</string>
     <string name="conflict_message">¿Qué archivos desea mantener? Si selecciona ambas versiones, el archivo local tendrá un número añadido a su nombre.</string>
     <string name="conflict_keep_both">Mantener ambos</string>
@@ -418,6 +419,7 @@
     <string name="file_migration_failed_while_coping">ERROR: Fallo durante la migración</string>
     <string name="file_migration_failed_while_updating_index">ERROR: Fallo al actualizar el índice</string>
 
+    <string name="file_migration_directory_already_exists">La carpeta de datos ya existe. Elige una de las siguientes:</string>
     <string name="file_migration_override_data_folder">Reemplazar</string>
     <string name="file_migration_use_data_folder">Usar</string>
 
@@ -481,6 +483,9 @@
     <string name="file_list__footer__files">%1$d archivos</string>
     <string name="file_list__footer__files_and_folder">%1$d archivos, 1 carpeta</string>
     <string name="file_list__footer__files_and_folders">%1$d archivos, %2$d carpetas</string>
+    <string name="set_picture_as">Establecer imagen como</string>
+    <string name="set_as">Establecer como</string>
+
     <string name="prefs_instant_behaviour_dialogTitle">El archivo original será&#8230;</string>
     <string name="prefs_instant_behaviour_title">El archivo original será&#8230;</string>
     <string name="upload_copy_files">Copiar archivo</string>
@@ -542,6 +547,8 @@
     <string name="local_file_not_found_toast">El archivo no se encuentra en el sistema de archivos local.</string>
     <string name="confirmation_remove_files_alert">¿Está seguro de que quiere eliminar los elementos seleccionados?</string>
     <string name="confirmation_remove_folders_alert">¿Está seguro de que quiere eliminar los elementos seleccionados y sus contenidos?</string>
+    <string name="maintenance_mode">Servidor en modo mantenimiento</string>
+
     <string name="uploads_view_upload_status_waiting_for_charging">Esperando la carga del dispositivo</string>
     <string name="actionbar_search">Buscar</string>
     <string name="files_drop_not_supported">Esta es una característica de Nextcloud. Por favor, actualice.</string>
@@ -651,4 +658,10 @@
     <!-- Notifications -->
     <string name="new_notification_received">Nueva notificación recibida</string>
     <string name="drawer_logout">Desconectar</string>
-    </resources>
+    <string name="picture_set_as_no_app">No se encontró ninguna aplicación para establecer una imagen!</string>
+    <string name="privacy">Privacidad</string>
+    <string name="file_not_found">¡Archivo no encontrado!</string>
+
+    <string name="folder_sync_folders">Configurar carpetas</string>
+
+  </resources>

+ 5 - 0
src/main/res/values-fr/strings.xml

@@ -347,6 +347,7 @@
     <string name="instant_video_upload_on_charging">Téléverser les images uniquement si le chargeur est branché</string>
     <string name="instant_upload_on_charging">Téléverser les images uniquement si le chargeur est branché</string>
     <string name="instant_upload_path">/InstantUpload</string>
+    <string name="auto_upload_path">/Téléversement automatique</string>
     <string name="conflict_title">Conflit de fichiers</string>
     <string name="conflict_message">Quels fichiers voulez-vous conserver ? Si vous sélectionnez les deux, un chiffre sera ajouté au nom du fichier local.</string>
     <string name="conflict_keep_both">Conserver les deux</string>
@@ -417,6 +418,7 @@
     <string name="file_migration_failed_while_coping">ERREUR : Echec lors de la migration</string>
     <string name="file_migration_failed_while_updating_index">ERREUR : Echec lors de la mise à jour de l\'index</string>
 
+    <string name="file_migration_directory_already_exists">Le dossier de données existe déjà. Choisissez une des options suivantes :</string>
     <string name="file_migration_override_data_folder">Remplacer</string>
     <string name="file_migration_use_data_folder">Conserver le dossier actuel</string>
 
@@ -657,5 +659,8 @@
     <string name="drawer_logout">Se déconnecter</string>
     <string name="picture_set_as_no_app">Aucune application trouvée pour utiliser cette image !</string>
     <string name="privacy">Vie privée</string>
+    <string name="file_not_found">Fichier non trouvé !</string>
+
+    <string name="folder_sync_folders">Configurer les dossiers</string>
 
   </resources>

+ 666 - 318
src/main/res/values-gl/strings.xml

@@ -1,319 +1,667 @@
-<?xml version='1.0' encoding='UTF-8'?>
+<?xml version="1.0" encoding="utf-8"?>
 <resources>
-  <string name="about_version">versión %1$s</string>
-  <string name="actionbar_sync">Actualizar a conta</string>
-  <string name="actionbar_upload">Enviar</string>
-  <string name="actionbar_upload_from_apps">Contido doutras aplicacións</string>
-  <string name="actionbar_upload_files">Ficheiros</string>
-  <string name="actionbar_open_with">Abrir con</string>
-  <string name="actionbar_mkdir">Novo cartafol</string>
-  <string name="actionbar_settings">Axustes</string>
-  <string name="actionbar_see_details">Detalles</string>
-  <string name="actionbar_send_file">Enviar</string>
-  <string name="actionbar_sort">Ordenar</string>
-  <string name="actionbar_sort_title">Ordenar por</string>
-  <string-array name="actionbar_sortby">
-    <item>A-Z</item>
-    <item>Máis novo - Máis antigo</item>
-  </string-array>
-  <!--TODO re-enable when server-side folder size calculation is available   
-    	<item>Biggest - Smallest</item>-->
-  <!--TODO re-enable when "Accounts" is available in Navigation Drawer-->
-  <!--<string name="drawer_item_accounts">Accounts</string>-->
-  <string name="drawer_item_all_files">Todos os ficheiros</string>
-  <!--TODO re-enable when "On Device" is available
-    <string name="drawer_item_on_device">On device</string>-->
-  <string name="drawer_item_settings">Axustes</string>
-  <string name="drawer_item_uploads_list">Envíos</string>
-  <string name="drawer_close">Pechar</string>
-  <string name="drawer_open">Abrir</string>
-  <string name="prefs_category_general">Xeral</string>
-  <string name="prefs_category_more">Máis</string>
-  <string name="prefs_accounts">Contas</string>
-  <string name="prefs_manage_accounts">Xestionar as contas</string>
-  <string name="prefs_passcode">Código de bloqueo</string>
-  <string name="prefs_instant_upload">Envío instantáneo de fotos</string>
-  <string name="prefs_instant_upload_summary">Enviar instantaneamente as fotos tiradas coa cámara</string>
-  <string name="prefs_instant_video_upload">Envío instantáneo de vídeos</string>
-  <string name="prefs_instant_video_upload_summary">Enviar instantaneamente os vídeos gravados coa cámara</string>
-  <string name="prefs_log_summary">Isto empregase para rexistrar os problemas</string>
-  <string name="prefs_log_summary_history">Isto amosa os rexistros gravados</string>
-  <string name="prefs_help">Axuda</string>
-  <string name="prefs_recommend">Recomendar a un amigo</string>
-  <string name="prefs_feedback">Comentarios</string>
-  <string name="prefs_imprint">Impresión</string>
-  <string name="prefs_remember_last_share_location">Lembrar a localización da compartición</string>
-  <string name="prefs_remember_last_upload_location_summary">Lembrar a localización do envío da última compartición</string>
-  <string name="recommend_subject">Tente %1$s no seu teléfono intelixente!</string>
-  <string name="recommend_text">Quero convidalo a empregar %1$s no seu teléfono intelixente!
-Descárgueo de aquí: %2$s</string>
-  <string name="auth_host_url">Enderezo do servidor https://…</string>
-  <string name="auth_username">Nome de usuario</string>
-  <string name="auth_password">Contrasinal</string>
-  <string name="auth_register">Novo en %1$s?</string>
-  <string name="sync_string_files">Ficheiros</string>
-  <string name="setup_btn_connect">Conectar</string>
-  <string name="uploader_btn_upload_text">Enviar</string>
-  <string name="uploader_wrn_no_account_title">Non se atoparon contas</string>
-  <string name="uploader_wrn_no_account_setup_btn_text">Instalación</string>
-  <string name="uploader_wrn_no_account_quit_btn_text">Saír</string>
-  <string name="file_list_seconds_ago">segundos atrás</string>
-  <string name="file_list_empty">Aquí non hai nada. Envíe algo!</string>
-  <string name="file_list_loading">Cargando...</string>
-  <string name="local_file_list_empty">Non hai ficheiros neste cartafol.</string>
-  <string name="file_list_folder">cartafol</string>
-  <string name="file_list_folders">cartafoles</string>
-  <string name="file_list_file">ficheiro</string>
-  <string name="file_list_files">ficheiros</string>
-  <string name="filedetails_select_file">Prema nun ficheiro para que amose a información adicional.</string>
-  <string name="filedetails_size">Tamaño:</string>
-  <string name="filedetails_type">Tipo:</string>
-  <string name="filedetails_created">Creado:</string>
-  <string name="filedetails_modified">Modificado:</string>
-  <string name="filedetails_download">Descargar</string>
-  <string name="filedetails_sync_file">Sincronizar</string>
-  <string name="filedetails_renamed_in_upload_msg">O ficheiro foi renomeado a %1$s durante o envío</string>
-  <string name="action_share">Compartir</string>
-  <string name="common_yes">Si</string>
-  <string name="common_no">Non</string>
-  <string name="common_ok">Aceptar</string>
-  <string name="common_cancel">Cancelar</string>
-  <string name="common_back">Atrás</string>
-  <string name="common_error">Erro</string>
-  <string name="common_loading">Cargando ...</string>
-  <string name="common_unknown">descoñecido</string>
-  <string name="common_error_unknown">Produciuse un erro descoñecido</string>
-  <string name="about_title">Sobre</string>
-  <string name="change_password">Cambiar o contrasinal</string>
-  <string name="create_account">Crear unha conta</string>
-  <string name="upload_chooser_title">Enviar desde…</string>
-  <string name="uploader_info_dirname">Nome do cartafol</string>
-  <string name="uploader_upload_in_progress_ticker">Enviando…</string>
-  <string name="uploader_upload_in_progress_content">%1$d%% enviando %2$s</string>
-  <string name="uploader_upload_succeeded_ticker">Enviado correctamente</string>
-  <string name="uploader_upload_failed_ticker">Produciuse un fallou no envío</string>
-  <string name="uploader_upload_failed_content_single">Non foi posíbel completar o envío de %1$s</string>
-  <string name="uploads_view_title">Envíos</string>
-  <string name="uploads_view_group_current_uploads">Actual</string>
-  <string name="uploads_view_group_finished_uploads">Enviado</string>
-  <string name="uploads_view_upload_status_succeeded">Completado</string>
-  <string name="uploads_view_upload_status_failed_credentials_error">Produciuse un erro de credenciais</string>
-  <string name="uploads_view_upload_status_failed_folder_error">Produciuse un erro de cartafol</string>
-  <string name="uploads_view_upload_status_failed_file_error">Produciuse un erro de ficheiro</string>
-  <string name="uploads_view_upload_status_failed_permission_error"> Erro nos permisos   </string>
-  <string name="uploads_view_upload_status_unknown_fail">Produciuse un erro descoñecido</string>
-  <string name="uploads_view_later_waiting_to_upload">Agardando polo envío</string>
-  <string name="downloader_download_in_progress_ticker">Descargando…</string>
-  <string name="downloader_download_in_progress_content">%1$d%% descargando %2$s</string>
-  <string name="downloader_download_succeeded_ticker">Completouse a descarga</string>
-  <string name="downloader_download_failed_ticker">Produciuse un fallo na descarga</string>
-  <string name="downloader_download_failed_content">Non foi posíbel completar a descarga de %1$s</string>
-  <string name="downloader_not_downloaded_yet">Non descargado aínda</string>
-  <string name="common_choose_account">Escoller unha conta</string>
-  <string name="sync_fail_content_unauthorized">Contrasinal incorrecto para %1$s</string>
-  <string name="sync_conflicts_in_favourites_ticker">Atopáronse conflictos</string>
-  <string name="sync_conflicts_in_favourites_content">%1$d ficheiros «manter sincronizados» non foi posíbel sincronizalos</string>
-  <string name="sync_fail_in_favourites_ticker">Produciuse unha falla no mantemento sincronizado de ficheiros</string>
-  <string name="sync_fail_in_favourites_content">Non foi posíbel sincronizar o contido de %1$d ficheiros (%2$d conflitos)</string>
-  <string name="sync_foreign_files_forgotten_ticker">Algúns ficheiros locais foron esquecidos</string>
-  <string name="sync_foreign_files_forgotten_content">Non é posíbel copiar %1$d ficheiros do cartafol %2$s en</string>
-  <string name="sync_foreign_files_forgotten_explanation">Desde a versión 1.3.16, os ficheiros enviados desde este dispositivo cópianse no cartafol local %1$s para evitar a perda de datos cando se sincroniza un ficheiro con varias contas.\n\nPor mor deste cambio, todos os ficheiros enviados coas versións anteriores desta aplicación cópianse no cartafol %2$s. Porén, un erro impediu a finalización desta operación durante a sincronización da conta. É posíbel deixar o(s) ficheiro(s) como está(n) e retirar a ligazón a %3$s, ou mover o(s) ficheiro(s) ao directorio %1$s e manter a ligazón a %4$s.\n\nA seguir enuméranse o(s) ficheiro(s) local(is), e o(s) ficheiro(s) remoto(s) en %5$s co(s) que estaba(n) ligado(s).</string>
-  <string name="sync_current_folder_was_removed">O cartafol %1$s xa non existe</string>
-  <string name="foreign_files_move">Mover todo</string>
-  <string name="foreign_files_success">Foron movidos todos os ficheiros</string>
-  <string name="foreign_files_fail">Algúns ficheiros non puideron seren movidos</string>
-  <string name="foreign_files_local_text">Local: %1$s</string>
-  <string name="foreign_files_remote_text">Remoto: %1$s</string>
-  <string name="pass_code_configure_your_pass_code">Escriba o seu código de acceso</string>
-  <string name="pass_code_configure_your_pass_code_explanation">Solicitaráselle o código de acceso cada vez que inicie a aplicación</string>
-  <string name="pass_code_remove_your_pass_code">Retirar o seu código de acceso</string>
-  <string name="pass_code_mismatch">Os códigos de acceso non son iguais</string>
-  <string name="pass_code_wrong">Código de acceso incorrecto</string>
-  <string name="pass_code_removed">Retirouse o código de acceso</string>
-  <string name="pass_code_stored">O código de acceso foi almacenado</string>
-  <string name="media_notif_ticker">%1$s reprodutor musical</string>
-  <string name="media_state_playing">%1$s (reproducindo)</string>
-  <string name="media_state_loading">%1$s (cargando)</string>
-  <string name="media_event_done">Rematou a reprodución de %1$s</string>
-  <string name="media_err_nothing_to_play">Non se atopan ficheiros multimedia</string>
-  <string name="media_err_no_account">Non foi fornecida unha conta</string>
-  <string name="media_err_not_in_owncloud">O ficheiro non está nunha conta axeitada</string>
-  <string name="media_err_unsupported">Códec multimedia non admitido</string>
-  <string name="media_err_io">Non é posíbel ler o ficheiro multimedia</string>
-  <string name="media_err_malformed">O ficheiro multimedia non está codificado correctamente</string>
-  <string name="media_err_timeout">Esgotouse o tempo de espera tentando reproducir</string>
-  <string name="media_err_invalid_progressive_playback">Non é posíbel enviar como fluxo o ficheiro multimedia</string>
-  <string name="media_err_unknown">Non é posíbel reproducir o ficheiro multimedia co reprodutor «stock»</string>
-  <string name="media_err_security_ex">Produciuse un erro de seguridade tentando reproducir %1$s</string>
-  <string name="media_err_io_ex">Produciuse un erro de entrada tentando reproducir %1$s</string>
-  <string name="media_err_unexpected">Produciuse un erro non agardado tentando reproducir %1$s</string>
-  <string name="media_rewind_description">Botón de retroceso</string>
-  <string name="media_play_pause_description">Botón de reprodución/pausa</string>
-  <string name="media_forward_description">Botón de avance rápido</string>
-  <string name="auth_no_net_conn_title">Sen conexión de rede</string>
-  <string name="auth_nossl_plain_ok_title">Non hai conexión seguras dispoñíbeis.</string>
-  <string name="auth_connection_established">Estabeleceuse a conexión</string>
-  <string name="auth_testing_connection">Probando a conexión</string>
-  <string name="auth_not_configured_title">Configuración errada do servidor</string>
-  <string name="auth_account_not_new">Xa existe unha conta do mesmo usuario e servidor neste dispositivo</string>
-  <string name="auth_account_not_the_same">O usuario que introduciu non coincide co usuario desta conta</string>
-  <string name="auth_unknown_error_title">Produciuse un erro descoñecido!</string>
-  <string name="auth_unknown_host_title">Non foi posíbel atopar a máquina</string>
-  <string name="auth_incorrect_path_title">Non se atopou unha instancia do servidor</string>
-  <string name="auth_timeout_title">O servidor tardou de máis en responder</string>
-  <string name="auth_ssl_general_error_title">Produciuse un fallo ao preparar o SSL</string>
-  <string name="auth_ssl_unverified_server_title">Non foi posíbel verificar a identidade do servidor SSL</string>
-  <string name="auth_bad_oc_version_title">Versión do servidor non recoñecida</string>
-  <string name="auth_wrong_connection_title">Non é posíbel estabelecer a conexión</string>
-  <string name="auth_secure_connection">Estabeleceuse unha conexión segura</string>
-  <string name="auth_unauthorized">Nome de usuario ou contrasinal incorrecto</string>
-  <string name="auth_oauth_error">A autorización non foi aceptada</string>
-  <string name="auth_oauth_error_access_denied">O acceso foi denegado polo servidor de autorización</string>
-  <string name="auth_expired_oauth_token_toast">A súa autorización caducou. Autorícese de novo</string>
-  <string name="auth_expired_saml_sso_token_toast">A súa sesión caducou. Acceda de novo</string>
-  <string name="auth_unsupported_auth_method">O servidor non admite este método de autenticación</string>
-  <string name="auth_unsupported_multiaccount">%1$s non admite contas múltipes</string>
-  <string name="auth_fail_get_user_name">O seu servidor non devolveu un ID de usuario correcto, contacte cun administrador
-	</string>
-  <string name="auth_account_does_not_exist">Aínda non existe a conta no dispositivo</string>
-  <string name="common_rename">Renomear</string>
-  <string name="common_remove">Retirar</string>
-  <string name="confirmation_remove_alert">Confirma que quere retirar %1$s?</string>
-  <string name="confirmation_remove_folder_alert">Confirma que quere retirar %1$s e o seu contido?</string>
-  <string name="confirmation_remove_local">Só local</string>
-  <string name="remove_success_msg">Retirado correctamente</string>
-  <string name="remove_fail_msg">Non foi posíbel retiralo</string>
-  <string name="rename_dialog_title">Introducir un novo nome</string>
-  <string name="rename_local_fail_msg">Non foi posíbel cambiarlle o nome á copia local. Proba con outro nome diferente.</string>
-  <string name="rename_server_fail_msg">Non foi posíbel completar a operación de cambio de nome</string>
-  <string name="sync_file_fail_msg">Non foi posíbel comprobar o ficheiro remoto</string>
-  <string name="sync_file_nothing_to_do_msg">Os contidos do ficheiro xa están sincronizados</string>
-  <string name="create_dir_fail_msg">Non foi posíbel crear o cartafol</string>
-  <string name="filename_forbidden_characters">Caracteres non permitidos: / \\ &lt; &gt; : \" | ? *</string>
-  <string name="filename_forbidden_charaters_from_server">O nome de ficheiro contén algún carácter incorrecto</string>
-  <string name="filename_empty">O nome de ficheiro non pode estar baleiro</string>
-  <string name="wait_a_moment">Agarde un chisco</string>
-  <string name="filedisplay_unexpected_bad_get_content">Produciuse un erro non agardado. Seleccione o ficheiro con outra aplicación diferente</string>
-  <string name="filedisplay_no_file_selected">Non se escolleu ningún ficheiro</string>
-  <string name="activity_chooser_title">Enviar a ligazón a ...</string>
-  <string name="wait_for_tmp_copy_from_private_storage">Copiando o ficheiro desde o almacenamento privado</string>
-  <string name="oauth_check_onoff">Acceder con oAuth2</string>
-  <string name="oauth_login_connection">Conectando co servidor oAuth2…</string>
-  <string name="ssl_validator_header">Non foi posíbel verificar a identidade do sitio</string>
-  <string name="ssl_validator_reason_cert_not_trusted">- O certificado do servidor non é de confianza</string>
-  <string name="ssl_validator_reason_cert_expired">- O certificado do servidor caducou</string>
-  <string name="ssl_validator_reason_cert_not_yet_valid">- As datas de validez do certificado están son do futuro</string>
-  <string name="ssl_validator_reason_hostname_not_verified">- O URL non coincide co nome de máquina no certificado</string>
-  <string name="ssl_validator_question">Aínda así, quere fiar neste certificado igualmente?</string>
-  <string name="ssl_validator_not_saved">Non foi posíbel gardar o certificado</string>
-  <string name="ssl_validator_btn_details_see">Detalles</string>
-  <string name="ssl_validator_btn_details_hide">Agochar</string>
-  <string name="ssl_validator_label_subject">Emitido para:</string>
-  <string name="ssl_validator_label_issuer">Emitido por:</string>
-  <string name="ssl_validator_label_CN">Nome común:</string>
-  <string name="ssl_validator_label_O">Organización:</string>
-  <string name="ssl_validator_label_OU">Departamento da organización:</string>
-  <string name="ssl_validator_label_C">País</string>
-  <string name="ssl_validator_label_ST">Estado:</string>
-  <string name="ssl_validator_label_L">Lugar:</string>
-  <string name="ssl_validator_label_validity">Validez:</string>
-  <string name="ssl_validator_label_validity_from">De:</string>
-  <string name="ssl_validator_label_validity_to">A:</string>
-  <string name="ssl_validator_label_signature">Sinatura:</string>
-  <string name="ssl_validator_label_signature_algorithm">Algoritmo:</string>
-  <string name="ssl_validator_null_cert">Non é posíbel amosar o certificado.</string>
-  <string name="ssl_validator_no_info_about_error">- Non hai información sobre este erro</string>
-  <string name="placeholder_sentence">Isto é un marcador de posición</string>
-  <string name="placeholder_filename">placeholder.txt</string>
-  <string name="placeholder_filetype">Imaxe PNG</string>
-  <string name="placeholder_filesize">389 KB</string>
-  <string name="placeholder_timestamp">2012/05/18 12:23 PM</string>
-  <string name="placeholder_media_time">12:23:45</string>
-  <string name="instant_upload_path">/EnvíoInstantáneo</string>
-  <string name="conflict_title">Conflito de ficheiro</string>
-  <string name="conflict_message">Que ficheiros quere conservar? Se selecciona ambas versións, o ficheiro copiado terá un número engadido ao nome.</string>
-  <string name="conflict_keep_both">Manter ambos</string>
-  <string name="conflict_use_local_version">versión local</string>
-  <string name="conflict_use_server_version">versión no servidor</string>
-  <string name="preview_image_description">Vista previa da imaxe</string>
-  <string name="preview_image_error_unknown_format">Esta imaxe non pode ser amosada</string>
-  <string name="error__upload__local_file_not_copied">Non foi posíbel copiar %1$s no cartafol local %2$s</string>
-  <string name="share_link_no_support_share_api">O seu servidor non ten activada a opción de compartir. Póñase en contacto co
-		administrador.</string>
-  <string name="share_link_file_no_exist">Non foi posíbel compartir. Comprobe que existe o ficheiro</string>
-  <string name="share_link_file_error">Produciuse un erro ao tentar compartir este ficheiro ou cartafol.</string>
-  <string name="unshare_link_file_no_exist">Non foi posíbel deixar de compartir. Comprobe que existe o ficheiro</string>
-  <string name="unshare_link_file_error">Produciuse un erro ao tentar deixar de compartir este ficheiro ou cartafol</string>
-  <string name="share_link_password_title">Escriba un contrasinal</string>
-  <string name="share_link_empty_password">Ten que escribir un contrasinal</string>
-  <string name="activity_chooser_send_file_title">Enviar</string>
-  <string name="copy_link">Copiar a ligazón</string>
-  <string name="clipboard_text_copied">Copiado no portapapeis.</string>
-  <string name="error_cant_bind_to_operations_service">Produciuse un erro crítico: non é posíbel realizar as operacións</string>
-  <string name="network_error_socket_exception">Produciuse un erro mentres conectaba co servidor.</string>
-  <string name="network_error_socket_timeout_exception">Produciuse un erro mentres agardaba polo servidor, a operación non se puido levar a fin</string>
-  <string name="network_error_connect_timeout_exception">Produciuse un erro mentres agardaba polo servidor, a operación non se puido levar a fin</string>
-  <string name="network_host_not_available">A operación non se completou, o servidor non está dispoñíbel</string>
-  <string name="forbidden_permissions">Non ten permisos %s</string>
-  <string name="forbidden_permissions_rename">para renomear este ficheiro</string>
-  <string name="forbidden_permissions_delete">para eliminar este ficheiro</string>
-  <string name="share_link_forbidden_permissions">para compartir este ficheiro</string>
-  <string name="unshare_link_forbidden_permissions">para deixar de compartir este ficheiro</string>
-  <string name="forbidden_permissions_create">para crear o ficheiro</string>
-  <string name="uploader_upload_forbidden_permissions">para envialo a este cartafol</string>
-  <string name="downloader_download_file_not_found">O ficheiro xa non está dispoñíbel no servidor</string>
-  <string name="prefs_category_accounts">Contas</string>
-  <string name="prefs_add_account">Engadir unha conta</string>
-  <string name="auth_redirect_non_secure_connection_title">A conexión segura está a ser redirixida a través dunha ruta non segura.</string>
-  <string name="actionbar_logger">Rexistros</string>
-  <string name="log_send_mail_subject">Rexistros da aplicación %1$s Android</string>
-  <string name="saml_authentication_required_text">Requírese autenticación</string>
-  <string name="saml_authentication_wrong_pass">Contrasinal incorrecto</string>
-  <string name="actionbar_move">Mover</string>
-  <string name="file_list_empty_moving">Aquí non hai nada. Pode engadir un cartafol!</string>
-  <string name="folder_picker_choose_button_text">Escoller</string>
-  <string name="move_file_not_found">Non é posíbel movelo. Comprobe se existe o ficheiro</string>
-  <string name="move_file_invalid_into_descendent">Non é posíbel mover un cartafol cara un descendente</string>
-  <string name="move_file_invalid_overwrite">Este ficheiro xa existe no cartafol de destino</string>
-  <string name="move_file_error">Produciuse un erro ao tentar mover este ficheiro ou cartafol.</string>
-  <string name="forbidden_permissions_move">para mover este ficheiro</string>
-  <string name="copy_file_not_found">Non se puido copiar. Por favor comprobe que o ficheiro existe</string>
-  <string name="copy_file_invalid_into_descendent">Non é posible copiar un cartafol nun descendente seu</string>
-  <string name="copy_file_invalid_overwrite">Este ficheiro xa existe no cartafol de destino</string>
-  <string name="copy_file_error">Oconteceu un erro mentras se intentaba copiar este ficheiro ou cartafol</string>
-  <string name="forbidden_permissions_copy">copiar este ficheiro</string>
-  <string name="prefs_category_details">Detalles</string>
-  <string name="sync_folder_failed_content">A sincronización do cartafol %1$s non se completou</string>
-  <string name="shared_subject_header">compartido</string>
-  <string name="with_you_subject_header">con vostede</string>
-  <string name="subject_user_shared_with_you">%1$s compartiu «%2$s» con vostede</string>
-  <string name="subject_shared_with_you">«%1$s» foi compartido con vostede</string>
-  <string name="auth_refresh_button">Actualizar a conexión</string>
-  <string name="auth_host_address">Enderezo do servidor</string>
-  <string name="common_error_out_memory">Non hai memoria abondo</string>
-  <string name="username">Nome de usuario</string>
-  <string name="file_list__footer__folder">1 cartafol</string>
-  <string name="file_list__footer__folders">%1$d cartafoles</string>
-  <string name="file_list__footer__file">1 ficheiro</string>
-  <string name="file_list__footer__file_and_folder">1 ficheiro, 1 cartafol</string>
-  <string name="file_list__footer__file_and_folders">1 ficheiro, %1$d cartafoles</string>
-  <string name="file_list__footer__files">%1$d ficheiros</string>
-  <string name="file_list__footer__files_and_folder">%1$d ficheiros, 1 cartafol</string>
-  <string name="file_list__footer__files_and_folders">%1$d ficheiros, %2$d cartafoles</string>
-  <string name="share_dialog_title">Compartindo</string>
-  <string name="share_no_users">Aínda non hai datos compartidos con usuarios</string>
-  <string name="share_via_link_section_title">Ligazón para compartir</string>
-  <string name="share_via_link_expiration_date_label">Definir a data de caducidade</string>
-  <string name="share_via_link_password_label">Protexido con contrasinal</string>
-  <string name="share_via_link_edit_permission_label">Permitir a edición</string>
-  <string name="share_search">Buscar</string>
-  <string name="search_users_and_groups_hint">Buscar usuarios e grupos</string>
-  <string name="share_group_clarification">%1$s (grupo)</string>
-  <string name="share_sharee_unavailable">Sentímolo, pero a versión do seu servidor non permite compartir con usuarios desde o cliente.
-\nPor favor contacte co seu administrador</string>
-  <string name="share_privilege_can_share">pode compartir</string>
-  <string name="share_privilege_can_edit">pode editar</string>
-  <string name="share_privilege_can_edit_create">crear</string>
-  <string name="share_privilege_can_edit_change">cambio</string>
-  <string name="share_privilege_can_edit_delete">eliminar</string>
-</resources>
+    <string name="about_android">Aplicación %1$s Android</string>
+    <string name="about_version">versión %1$s</string>
+    <string name="actionbar_sync">Actualizar a conta</string>
+    <string name="actionbar_upload">Enviar</string>
+    <string name="actionbar_upload_from_apps">Contido doutras aplicacións</string>
+    <string name="actionbar_upload_files">Ficheiros</string>
+    <string name="actionbar_open_with">Abrir con</string>
+    <string name="actionbar_mkdir">Novo cartafol</string>
+    <string name="actionbar_settings">Axustes</string>
+    <string name="actionbar_see_details">Detalles</string>
+    <string name="actionbar_send_file">Enviar</string>
+    <string name="actionbar_sort">Ordenar</string>
+    <string name="actionbar_sort_title">Ordenar por</string>
+    <string name="sort_by">Ordenar por</string>
+    <string name="menu_item_sort_by_name_a_z">A - Z</string>
+    <string name="menu_item_sort_by_name_z_a">Z - A</string>
+    <string name="menu_item_sort_by_date_newest_first">Primeiro o máis recente</string>
+    <string name="menu_item_sort_by_date_oldest_first">Primeiro o máis antigo</string>
+    <string name="menu_item_sort_by_size_biggest_first">Primeiro o máis grande</string>
+    <string name="menu_item_sort_by_size_smallest_first">Primeiro o máis pequeno</string>
+
+    <string name="drawer_item_all_files">Todos os ficheiros</string>
+    <string name="drawer_item_files">Ficheiros</string>
+    <string name="drawer_item_home">Inicio</string>
+    <string name="drawer_item_favorites">Favoritos</string>
+    <string name="drawer_item_photos">Fotos</string>
+    <string name="drawer_item_on_device">No dispositivo</string>
+    <string name="drawer_item_recently_added">Engadido recentemente</string>
+    <string name="drawer_item_recently_modified">Modificado recentemente</string>
+    <string name="drawer_item_shared">Compartido</string>
+    <string name="drawer_item_videos">Vídeos</string>
+    <string name="drawer_item_settings">Axustes</string>
+    <string name="drawer_item_uploads_list">Envíos</string>
+    <string name="drawer_item_activities">Actividades</string>
+    <string name="drawer_item_notifications">Notificacións</string>
+    <string name="drawer_quota">Usado %1$s de %2$s</string>
+	<string name="drawer_close">Pechar</string>
+    <string name="drawer_open">Abrir</string>
+    <string name="prefs_category_general">Xeral</string>
+    <string name="prefs_category_more">Máis</string>
+    <string name="prefs_accounts">Contas</string>
+    <string name="prefs_manage_accounts">Xestionar as contas</string>
+    <string name="prefs_passcode">Código de bloqueo</string>
+    <string name="prefs_fingerprint">Bloqueo coa pegada dactilar</string>
+    <string name="prefs_fingerprint_notsetup">Non foi estabelecida ningunha pegada dactilar</string>
+    <string name="prefs_show_hidden_files">Amosar os ficheiros agochados</string>
+    <string name="prefs_instant_upload">Envío instantáneo de imaxes</string>
+    <string name="prefs_instant_upload_summary">Enviar instantaneamente as imaxes da cámara</string>
+    <string name="prefs_instant_video_upload">Envío instantáneo de vídeos</string>
+    <string name="prefs_instant_video_upload_summary">Enviar instantaneamente os vídeos gravados coa cámara</string>
+    <string name="prefs_log_title">Activar o rexistro</string>
+    <string name="prefs_log_summary">Isto empregase para rexistrar os problemas</string>
+    <string name="prefs_log_title_history">Historial do rexistro</string>
+    <string name="prefs_log_summary_history">Isto amosa os rexistros gravados</string>
+    <string name="prefs_log_delete_history_button">Eliminar o historial</string>
+    <string name="prefs_calendar_contacts">Sincronizar calendario e contactos</string>
+    <string name="prefs_calendar_contacts_summary">Configurar DAVdroid (v1.3.0 +) para a conta actual</string>
+    <string name="prefs_calendar_contacts_address_resolve_error">DAVdroid non foi quen de resolver o enderezo do servidor para a conta</string>
+    <string name="prefs_calendar_contacts_no_store_error">Nin F-Droid nin Google Play están instalados</string>
+    <string name="prefs_calendar_contacts_sync_setup_successful">Configurada a sincronización do calendario e dos contactos</string>
+    <string name="prefs_help">Axuda</string>
+    <string name="prefs_recommend">Recomendar a un amigo</string>
+    <string name="prefs_feedback">Comentarios</string>
+    <string name="prefs_imprint">Exención de responsabilidade</string>
+    <string name="prefs_remember_last_share_location">Lembrar a localización do elemento compartido</string>
+    <string name="prefs_remember_last_upload_location_summary">Lembrar a localización do elemento compartido usado máis recentemente</string>
+
+	<string name="recommend_subject">Probe %1$s no seu teléfono intelixente!</string>
+	<string name="recommend_text">Quixera convidalo a usar %1$s no seu teléfono intelixente\nDescargueo aquí: %2$s</string>
+
+    <string name="auth_check_server">Comprobar o servidor</string>
+    <string name="auth_host_url">Enderezo do servidor https://…</string>
+    <string name="auth_username">Nome de usuario</string>
+    <string name="auth_password">Contrasinal</string>
+    <string name="auth_register">Aínda non ten un servidor? \nPrema aquí para obter un dun provedor</string>
+    <string name="sync_string_files">Ficheiros</string>
+    <string name="setup_btn_connect">Conectar</string>
+    <string name="uploader_btn_upload_text">Enviar</string>
+    <string name="uploader_top_message">Seleccione o cartafol de envío</string>
+    <string name="uploader_wrn_no_account_title">Non se atoparon contas</string>
+    <string name="uploader_wrn_no_account_text">Non existen contas %1$s no seu dispositivo. Configure primeiro unha conta.</string>
+    <string name="uploader_wrn_no_account_setup_btn_text">Instalación</string>
+    <string name="uploader_wrn_no_account_quit_btn_text">Saír</string>
+    <string name="uploader_error_title_no_file_to_upload">Non hai ficheiros para enviar</string>
+    <string name="uploader_error_message_received_piece_of_text">%1$s non pode enviar un fragmento de texto coma se for un ficheiro.</string>
+    <string name="uploader_error_message_no_file_to_upload">Os datos recibidos non inclúen un ficheiro correcto.</string>
+    <string name="uploader_error_title_file_cannot_be_uploaded">Non é posíbel enviar este ficheiro</string>
+    <string name="uploader_error_message_read_permission_not_granted">%1$s non ten permisos para ler o ficheiro recibido</string>
+    <string name="uploader_error_message_source_file_not_found">Non foi atopado o ficheiro seleccionado para enviar. Comprobe se existe o ficheiro</string>
+    <string name="uploader_error_message_source_file_not_copied">Non foi posíbel copiar o ficheiro nun cartafol temporal. Tente volver envialo.</string>
+    <string name="uploader_upload_files_behaviour">Opción de envío:</string>
+    <string name="uploader_upload_files_behaviour_move_to_nextcloud_folder">Mover o ficheiro cara o cartafol de Nextcloud</string>
+    <string name="uploader_upload_files_behaviour_only_upload">Manter o ficheiro no cartafol de orixe</string>
+    <string name="uploader_upload_files_behaviour_upload_and_delete_from_source">Eliminar o ficheiro do cartafol de orixe</string>
+    <string name="file_list_seconds_ago">segundos atrás</string>
+    <string name="file_list_empty_headline">Aquí non hai ficheiros</string>
+    <string name="file_list_empty">Envíe algún contido ou sincronice cos seus dispositivos</string>
+    <string name="file_list_empty_favorites">Marque como favoritos algúns ficheiros ou sincronice cos seus dispositivos!</string>
+    <string name="file_list_empty_favorites_filter_list">Os ficheiros e cartafoles que marque como favoritos amosaranse aquí</string>
+    <string name="file_list_empty_favorites_filter">A súa busca non atopou ningún ficheiro favorito.</string>
+    <string name="file_list_loading">Cargando&#8230;</string>
+    <string name="file_list_no_app_for_file_type">Non foi estabelecida unha aplicación para manexar este tipo de ficheiro.</string>
+    <string name="local_file_list_empty">Non hai ficheiros neste cartafol.</string>
+    <string name="file_list_empty_headline_search">Non hai resultados neste cartafol</string>
+    <string name="file_list_empty_headline_server_search">Sen resultados</string>
+    <string name="file_list_empty_favorite_headline">Aínda non hay nada marcado como favorito</string>
+    <string name="file_list_empty_shared_headline">Aínda non hay nada compartido</string>
+    <string name="file_list_empty_shared">Os ficheiros e cartafoles que comparta amosaranse aquí</string>
+    <string name="file_list_empty_headline_server_search_videos">Non hai vídeos</string>
+    <string name="file_list_empty_headline_server_search_photos">Non hai fotos</string>
+    <string name="file_list_empty_search">Quizáis estea nun cartafol diferente?</string>
+    <string name="file_list_empty_recently_modified">Non se atoparon ficheiros modificados nos últimos 7 días.</string>
+    <string name="file_list_empty_recently_modified_filter">A súa busca non atopou ficheiros que teñan sido modificados
+nos últimos 7 días.</string>
+    <string name="file_list_empty_recently_added">Non se atoparon ficheiros engadidos recentemente</string>
+    <string name="file_list_empty_recently_added_filter">A súa busca non atopou ningún ficheiro engadido recentemente.</string>
+    <string name="file_list_empty_text_photos">Envíe algunhas fotos ou active o envío automático.</string>
+    <string name="file_list_empty_text_photos_filter">A súa busca non atopou ningunha fotografía.</string>
+    <string name="file_list_empty_text_videos">Envíe algún vídeo ou active o envío automático.</string>
+    <string name="file_list_empty_text_videos_filter">A súa busca non atopou ningún vídeo.</string>
+    <string name="upload_list_empty_headline">Non hai envío dispoñíbeis</string>
+    <string name="upload_list_empty_text">Envíe algún contido ou active o envío automático.</string>
+    <string name="upload_list_empty_text_auto_upload">Envíe algún contido ou active o envío automático.</string>
+    <string name="file_list_folder">cartafol</string>
+    <string name="file_list_folders">cartafoles</string>
+    <string name="file_list_file">ficheiro</string>
+    <string name="file_list_files">ficheiros</string>
+    <string name="filedetails_select_file">Toque nun ficheiro para que amose a información adicional.</string>
+    <string name="filedetails_size">Tamaño:</string>
+    <string name="filedetails_type">Tipo:</string>
+    <string name="filedetails_created">Creado:</string>
+    <string name="filedetails_modified">Modificado:</string>
+    <string name="filedetails_download">Descargar</string>
+    <string name="filedetails_sync_file">Sincronizar</string>
+    <string name="filedetails_renamed_in_upload_msg">O ficheiro foi renomeado a %1$s durante o envío</string>
+    <string name="list_layout">Ver como lista</string>
+    <string name="action_share">Compartir</string>
+    <string name="common_yes">Si</string>
+    <string name="common_no">Non</string>
+    <string name="common_ok">Aceptar</string>
+    <string name="common_remove_upload">Retirar o envío</string>
+    <string name="common_retry_upload">Tentar de novo o envío</string>
+    <string name="common_cancel_sync">Cancelar a sincronización</string>
+    <string name="common_cancel">Cancelar</string>
+    <string name="common_back">Atrás</string>
+    <string name="common_save">Gardar</string>
+    <string name="common_save_exit">Gardar e saír</string>
+    <string name="common_error">Erro</string>
+    <string name="common_loading">Cargando &#8230;</string>
+    <string name="common_unknown">descoñecido</string>
+    <string name="common_error_unknown">Produciuse un erro descoñecido</string>
+    <string name="common_pending">Pendente</string>
+    <string name="about_title">Sobre</string>
+    <string name="change_password">Cambiar o contrasinal</string>
+    <string name="delete_account">Retirar a conta</string>
+    <string name="delete_account_warning">Eliminar a conta %s?\n\n Esta acción non pode desfacerse.</string>
+    <string name="create_account">Crear unha conta</string>
+    <string name="upload_chooser_title">Enviar desde &#8230;</string>
+    <string name="uploader_info_dirname">Nome do cartafol</string>
+    <string name="uploader_upload_in_progress_ticker">Enviando &#8230;</string>
+    <string name="uploader_upload_in_progress_content">%1$d%% enviando %2$s</string>
+    <string name="uploader_upload_succeeded_ticker">Enviado</string>
+    <string name="uploader_upload_succeeded_content_single">Enviado %1$s</string>
+    <string name="uploader_upload_failed_ticker">Produciuse unha falla no envío</string>
+    <string name="uploader_upload_failed_content_single">Non foi posíbel enviar: %1$s</string>
+    <string name="uploader_upload_failed_credentials_error">O envío fracasou, é necesario que se autentique de novo.</string>
+    <string name="uploads_view_title">Envíos</string>
+    <string name="uploads_view_group_current_uploads">Actual</string>
+    <string name="uploads_view_group_failed_uploads">Produciuse unha falla (toque para volver tentalo)</string>
+    <string name="uploads_view_group_finished_uploads">Enviado</string>
+    <string name="uploads_view_upload_status_succeeded">Completado</string>
+    <string name="uploads_view_upload_status_cancelled">Cancelado</string>
+    <string name="uploads_view_upload_status_paused">Pausado</string>
+    <string name="uploads_view_upload_status_failed_connection_error">Produciuse un erro de conexión</string>
+    <string name="uploads_view_upload_status_failed_retry">En breve volverá a iniciarse o envío</string>
+    <string name="uploads_view_upload_status_failed_credentials_error">Produciuse un erro de credenciais</string>
+    <string name="uploads_view_upload_status_failed_folder_error">Produciuse un erro de cartafol</string>
+    <string name="uploads_view_upload_status_failed_file_error">Produciuse un erro de ficheiro</string>
+    <string name="uploads_view_upload_status_failed_localfile_error">Non se atopou o ficheiro local</string>
+    <string name="uploads_view_upload_status_failed_permission_error"> Erro nos permisos   </string>
+    <string name="uploads_view_upload_status_conflict">Conflito</string>
+    <string name="uploads_view_upload_status_service_interrupted">A aplicación interrompeuse</string>
+    <string name="uploads_view_upload_status_unknown_fail">Produciuse un erro descoñecido</string>
+    <string name="uploads_view_upload_status_waiting_for_wifi">Agardando pola conexión WiFi</string>
+    <string name="uploads_view_later_waiting_to_upload">Agardando polo envío</string>
+    <string name="downloader_download_in_progress_ticker">Descargando &#8230;</string>
+    <string name="downloader_download_in_progress_content">%1$d%% descargando %2$s</string>
+    <string name="downloader_download_succeeded_ticker">Descargado</string>
+    <string name="downloader_download_succeeded_content">Descargando %1$s</string>
+    <string name="downloader_download_failed_ticker">Produciuse unha falla na descarga</string>
+    <string name="downloader_download_failed_content">Non foi posíbel descargar %1$s</string>
+    <string name="downloader_not_downloaded_yet">Non descargado aínda</string>
+    <string name="downloader_download_failed_credentials_error">A descarga fracasou, é necesario que se autentique de novo.</string>
+    <string name="common_choose_account">Escoller unha conta</string>
+    <string name="sync_fail_ticker">Produciuse unha falla na sincronización</string>
+    <string name="sync_fail_ticker_unauthorized">Produciuse unha falla na sincronización, é necesario que se autentique de novo.</string>
+    <string name="sync_fail_content">Non foi posíbel completar a sincronización de %1$s</string>
+    <string name="sync_fail_content_unauthorized">Contrasinal incorrecto para %1$s</string>
+    <string name="sync_conflicts_in_favourites_ticker">Atopáronse conflictos</string>
+    <string name="sync_conflicts_in_favourites_content">%1$d ficheiros «manter sincronizados» non foi posíbel sincronizalos</string>
+    <string name="sync_fail_in_favourites_ticker">Produciuse unha falla no mantemento sincronizado de ficheiros</string>
+    <string name="sync_fail_in_favourites_content">Non foi posíbel sincronizar o contido de %1$d ficheiros (%2$d conflitos)</string>
+    <string name="sync_foreign_files_forgotten_ticker">Algúns ficheiros locais foron esquecidos</string>
+    <string name="sync_foreign_files_forgotten_content">Non é posíbel copiar %1$d ficheiros do cartafol %2$s en</string>
+    <string name="sync_foreign_files_forgotten_explanation">A partires da versión 1.3.16, os ficheiros enviados desde este dispositivo cópianse no cartafol local %1$s para evitar a perda de datos cando se sincroniza un único ficheiro con varias contas.\n\nPor mor deste cambio, todos os ficheiros enviados con versións anteriores desta aplicación foron copiados no cartafol %2$s. Porén, un erro impediu que se completara esta operación durante a sincronización da conta. Pode deixar os ficheiros tal e como están e eliminar a ligazón cara %3$s ou mover los ficheiros para o cartafol %1$s e manter a ligazón cara %4$s.\n\nEmbaixo amósanse os ficheiros locais e os ficheiros remotos en %5$s aos que foron enlazados.</string>
+    <string name="sync_current_folder_was_removed">O cartafol %1$s xa non existe</string>
+    <string name="foreign_files_move">Mover todo</string>
+    <string name="foreign_files_success">Foron movidos todos os ficheiros</string>
+    <string name="foreign_files_fail">Algúns ficheiros non puideron seren movidos</string>
+    <string name="foreign_files_local_text">Local: %1$s</string>
+    <string name="foreign_files_remote_text">Remoto: %1$s</string>
+    <string name="upload_query_move_foreign_files">Non hai espazo abondo para copiar os ficheiros seleccionados no cartafol %1$s. No canto diso, gustaríalle movelos?</string>
+    <string name="pass_code_enter_pass_code">Introduza o seu código de seguridade</string>
+    
+    <string name="pass_code_configure_your_pass_code">Introduza o seu código de seguridade</string>
+    <string name="pass_code_configure_your_pass_code_explanation">Solicitaráselle o código de seguridade cada vez que inicie a aplicación</string>
+    <string name="pass_code_reenter_your_pass_code">Introduza de novo o seu código de seguridade</string>
+    <string name="pass_code_remove_your_pass_code">Retirar o seu código de seguridade</string>
+    <string name="pass_code_mismatch">Os códigos de seguridade non son iguais</string>
+    <string name="pass_code_wrong">Código de seguridade incorrecto</string>
+    <string name="pass_code_removed">Retirouse o código de seguridade</string>
+    <string name="pass_code_stored">O código de seguridade foi almacenado</string>
+    
+    <string name="media_notif_ticker">%1$s reprodutor musical</string>
+    <string name="media_state_playing">%1$s (reproducindo)</string>
+    <string name="media_state_loading">%1$s (cargando)</string>
+    <string name="media_event_done">Rematou a reprodución de %1$s</string>
+    <string name="media_err_nothing_to_play">Non se atopan ficheiros multimedia</string>
+    <string name="media_err_no_account">Non foi fornecida unha conta</string>
+    <string name="media_err_not_in_owncloud">O ficheiro non está nunha conta correcta</string>
+    <string name="media_err_unsupported">Códec multimedia non admitido</string>
+    <string name="media_err_io">Non foi posíbel ler o ficheiro multimedia</string>
+    <string name="media_err_malformed">O ficheiro multimedia ten unha codificación incorrecta</string>
+    <string name="media_err_timeout">O intento de reproducir o ficheiro esgotou o tempo de espera.</string>
+    <string name="media_err_invalid_progressive_playback">O ficheiro multimedia non pode ser transformado nun fluxo</string>
+    <string name="media_err_unknown">O reprodutor predeterminado non pode reproducir o ficheiro mltimedia</string>
+    <string name="media_err_security_ex">Produciuse un erro de seguridade ao tentar reproducir %1$s</string>
+    <string name="media_err_io_ex">Produciuse un erro de entrada ao tentar reproducir %1$s</string>
+    <string name="media_err_unexpected">Produciuse un erro non agardado ao tentar reproducir %1$s</string>
+    <string name="media_rewind_description">Botón de retroceso</string>
+    <string name="media_play_pause_description">Botón de reprodución/pausa</string>
+    <string name="media_forward_description">Botón de avance rápido</string>
+
+	<string name="auth_getting_authorization">Obtendo autorización &#8230;</string>
+	<string name="auth_trying_to_login">Tentando acceder a &#8230;</string>
+	<string name="auth_no_net_conn_title">Sen conexión de rede</string>
+	<string name="auth_nossl_plain_ok_title">Non hai conexións seguras dispoñíbeis.</string>
+	<string name="auth_connection_established">Estabeleceuse a conexión</string>
+	<string name="auth_testing_connection">Probando a conexión</string>
+	<string name="auth_not_configured_title">Configuración errada do servidor</string>
+	<string name="auth_account_not_new">Xa existe unha conta en este dispositivo cos mesmos datos de usuario e servidor</string>
+	<string name="auth_account_not_the_same">O usuario que inseriu non coincide co usuario desta conta</string>
+	<string name="auth_unknown_error_title">Produciuse un erro descoñecido!</string>
+	<string name="auth_unknown_host_title">Non foi posíbel atopar a máquina</string>
+	<string name="auth_incorrect_path_title">Non se atopou o servidor</string>
+	<string name="auth_timeout_title">O servidor tardou de máis en responder</string>
+	<string name="auth_incorrect_address_title">O formato do enderezo do servidor é incorrecto</string>
+	<string name="auth_ssl_general_error_title">Produciuse unha falla ao preparar o SSL</string>
+	<string name="auth_ssl_unverified_server_title">Non foi posíbel verificar a identidade do servidor SSL</string>
+	<string name="auth_bad_oc_version_title">Versión do servidor non recoñecida</string>
+	<string name="auth_wrong_connection_title">Non foi posíbel establecer a conexión</string>
+	<string name="auth_secure_connection">Estabeleceuse unha conexión segura</string>
+	<string name="auth_unauthorized">Nome de usuario ou contrasinal incorrecto</string>
+	<string name="auth_oauth_error">A autorización non foi aceptada</string>
+	<string name="auth_oauth_error_access_denied">O acceso foi denegado polo servidor de autorización</string>
+	<string name="auth_wtf_reenter_URL">Estado non agardado; introduza de novo o enderezo do servidor</string>
+	<string name="auth_expired_oauth_token_toast">A súa autorización caducou. Autorícese de novo</string>
+	<string name="auth_expired_basic_auth_toast">Introduza o seu contrasinal actual</string>
+	<string name="auth_expired_saml_sso_token_toast">A súa sesión caducou. Acceda de novo</string>
+	<string name="auth_connecting_auth_server">Conectando co servidor de autenticación…</string>
+	<string name="auth_unsupported_auth_method">O servidor non admite este método de autenticación</string>
+	<string name="auth_unsupported_multiaccount">%1$s non admite contas múltipes</string>
+	<string name="auth_fail_get_user_name">O seu servidor non está devolvendo unha identificación de usuario correcta; contacte cun administrador</string>
+	<string name="auth_can_not_auth_against_server">Non é posíbel autenticarse neste servidor</string>
+    <string name="auth_account_does_not_exist">A conta aínda non existe no dispositivo</string>
+
+
+    <string name="favorite">Estabelecer como dispoñíbel sen conexión</string>
+    <string name="unfavorite">Estabelecer como dispoñíbel con conexión</string>
+    <string name="favorite_real">Estabelecer como favorito</string>
+    <string name="unset_favorite_real">Retirar de favoritos</string>
+    <string name="common_rename">Renomear</string>
+    <string name="common_remove">Retirar</string>
+    <string name="confirmation_remove_file_alert">Confirma que quere retirar %1$s?</string>
+    <string name="confirmation_remove_folder_alert">Confirma que quere retirar %1$s e todo o seu contido?</string>
+    <string name="confirmation_remove_local">Só local</string>
+    <string name="remove_success_msg">Retirado</string>
+    <string name="remove_fail_msg">Non foi posíbel retiralo</string>
+    <string name="rename_dialog_title">Introduza un nome novo</string>
+    <string name="rename_local_fail_msg">Non foi posíbel renomear a copia local, ténteo cun un nome diferente</string>
+    <string name="rename_server_fail_msg">Non foi posíbel renomear o servidor</string>
+    <string name="sync_file_fail_msg">Non foi posíbel comprobar o ficheiro remoto</string>
+    <string name="sync_file_nothing_to_do_msg">Os contidos do ficheiro xa están sincronizados</string>
+    <string name="create_dir_fail_msg">Non foi posíbel crear o cartafol</string>
+    <string name="filename_forbidden_characters">Caracteres non permitidos: / \\ &lt; &gt; : \" | ? *</string>
+    <string name="filename_forbidden_charaters_from_server">O nome de ficheiro contén algún carácter incorrecto</string>
+    <string name="filename_empty">O nome de ficheiro non pode estar baleiro</string>
+    <string name="wait_a_moment">Agarde un chisco</string>
+    <string name="wait_checking_credentials">Comprobando as credenciais almacenadas</string>
+    <string name="filedisplay_unexpected_bad_get_content">Produciuse un problema non agardado, seleccione o ficheiro desde una aplicación diferente</string>
+    <string name="filedisplay_no_file_selected">Non seleccionou ningún ficheiro</string>
+    <string name="activity_chooser_title">Enviar a ligazón a &#8230;</string>
+    <string name="wait_for_tmp_copy_from_private_storage">Copiando o ficheiro desde o almacenamento privado</string>
+    
+    <string name="oauth_check_onoff">Acceder con oAuth2</string> 
+    <string name="oauth_login_connection">Conectando co servidor oAuth2…</string>    
+        
+    <string name="ssl_validator_header">Non foi posíbel verificar a identidade do sitio</string>
+    <string name="ssl_validator_reason_cert_not_trusted">- O certificado do servidor non é de confianza</string>
+    <string name="ssl_validator_reason_cert_expired">- O certificado do servidor caducou</string>
+    <string name="ssl_validator_reason_cert_not_yet_valid">- As datas de validez do certificado están son do futuro</string>
+    <string name="ssl_validator_reason_hostname_not_verified">- O URL non coincide co nome de máquina no certificado</string>
+    <string name="ssl_validator_question">Aínda así, quere fiar neste certificado igualmente?</string>
+    <string name="ssl_validator_not_saved">Non foi posíbel gardar o certificado</string>
+    <string name="ssl_validator_btn_details_see">Detalles</string>
+    <string name="ssl_validator_btn_details_hide">Agochar</string>
+    <string name="ssl_validator_label_subject">Emitido para:</string>
+    <string name="ssl_validator_label_issuer">Emitido por:</string>
+    <string name="ssl_validator_label_CN">Nome común:</string>
+    <string name="ssl_validator_label_O">Organización:</string>
+    <string name="ssl_validator_label_OU">Departamento da organización:</string>
+    <string name="ssl_validator_label_C">País</string>
+    <string name="ssl_validator_label_ST">Estado:</string>
+    <string name="ssl_validator_label_L">Lugar:</string>
+    <string name="ssl_validator_label_validity">Validez:</string>
+    <string name="ssl_validator_label_validity_from">De:</string>
+    <string name="ssl_validator_label_validity_to">A:</string>
+    <string name="ssl_validator_label_signature">Sinatura:</string>
+    <string name="ssl_validator_label_signature_algorithm">Algoritmo:</string>
+    <string name="digest_algorithm_not_available">Este algoritmo de resumo non está dispoñíbel no seu teléfono.</string>
+    <string name="ssl_validator_label_certificate_fingerprint">Pegada dactilar</string>
+    <string name="certificate_load_problem">Existe un problema ao cargar o certificado.</string>
+    <string name="ssl_validator_null_cert">Non é posíbel amosar o certificado.</string>
+    <string name="ssl_validator_no_info_about_error">- Non hai información sobre este erro</string>
+
+    <string name="placeholder_sentence">Isto é un marcador de posición</string>
+    <string name="placeholder_filename">placeholder.txt</string>
+    <string name="placeholder_filetype">Imaxe PNG</string>
+    <string name="placeholder_filesize">389 KB</string>
+    <string name="placeholder_timestamp">2012/05/18 12:23 PM</string>
+    <string name="placeholder_media_time">12:23:45</string>
+
+    <string name="auto_upload_on_wifi">Enviar só con WiFi</string>
+    <string name="instant_upload_on_wifi">Enviar fotografías só con WiFi</string>
+    <string name="instant_video_upload_on_wifi">Enviar vídeos só con WiFi</string>
+    <string name="instant_video_upload_on_charging">Enviar só cando estea cargando</string>
+    <string name="instant_upload_on_charging">Enviar só cando estea cargando</string>
+    <string name="instant_upload_path">/EnvíoInstantáneo</string>
+    <string name="auto_upload_path">/Envío automático</string>
+    <string name="conflict_title">Conflito de ficheiro</string>
+    <string name="conflict_message">Que ficheiros quere manter? Se selecciona ámbalas dúas versións, engadiráselle un número ao nome do ficheiro local.</string>
+    <string name="conflict_keep_both">Manter ambos</string>
+    <string name="conflict_use_local_version">versión local</string>
+    <string name="conflict_use_server_version">versión no servidor</string>
+
+    <string name="preview_sorry">Disculpe.</string>
+    <string name="preview_image_description">Vista previa da imaxe</string>
+    <string name="preview_image_error_unknown_format">Non é posíbel amosar a imaxe</string>
+
+    <string name="error__upload__local_file_not_copied">Non foi posíbel copiar %1$s no cartafol local %2$s</string>
+    <string name="prefs_instant_upload_path_title">Cartafol de envío instántaneo</string>
+    <string name="prefs_folder_sync_local_path_title">Cartafol local</string>
+    <string name="prefs_folder_sync_remote_path_title">Cartafol remoto</string>
+    <string name="prefs_instant_upload_path_use_subfolders_title">Usar subcartafoles</string>
+    <string name="prefs_instant_upload_path_use_subfolders_summary">Arquivar en subcartafoles baseados en ano e mes.</string>
+
+	<string name="share_link_no_support_share_api">O seu servidor non ten activada a compartición. Póñase en contacto co administrador</string>
+	<string name="share_link_file_no_exist">Non se puido actualizar. Comprobe que o ficheiro existe</string>
+	<string name="share_link_file_error">Produciuse un erro ao tentar compartir este ficheiro ou cartafol</string>
+	<string name="unshare_link_file_no_exist">Non foi posíbel deixar de compartir. Comprobe que existe o ficheiro</string>
+	<string name="unshare_link_file_error">Produciuse un erro ao tentar deixar de compartir este ficheiro ou cartafol</string>
+    <string name="update_link_file_no_exist">Non se puido actualizar. Comprobe que o ficheiro existe</string>
+    <string name="update_link_file_error">Produciuse un erro ao tentar actualizar o elemento compartido</string>
+    <string name="share_link_password_title">Escriba un contrasinal</string>
+    <string name="share_link_empty_password">Ten que escribir un contrasinal</string>
+
+    <string name="activity_chooser_send_file_title">Enviar</string>
+
+    <string name="copy_link">Copiar a ligazón</string>
+    <string name="clipboard_text_copied">Copiado no portapapeis.</string>
+    <string name="clipboard_no_text_to_copy">Non se ha recibiu ningún texto para copiar no portapapeis</string>
+    <string name="clipboard_uxexpected_error">Produciuse un erro non agardado ao copiar no portapapeis</string>
+    <string name="clipboard_label">Texto copiado desde %1$s</string>
+
+    <string name="error_cant_bind_to_operations_service">produciuse un erro crítico: Non é posíbel realizar operacións</string>
+
+    <string name="network_error_socket_exception">produciuse un erro durante a conexión co servidor</string>
+    <string name="network_error_socket_timeout_exception">Produciuse un erro agardando a resposta do servidor. Non foi posíbel completar a operación.</string>
+    <string name="network_error_connect_timeout_exception">Produciuse un erro agardando a resposta do servidor. Non foi posíbel completar a operación.</string>
+    <string name="network_host_not_available">Non foi posíbel completar a operación. O servidor non está dispoñíbel</string>
+
+    <string name="forbidden_permissions">Non ten permiso %s</string>
+    <string name="forbidden_permissions_rename">para renomear este ficheiro</string>
+    <string name="forbidden_permissions_delete">para eliminar este ficheiro</string>
+    <string name="share_link_forbidden_permissions">para compartir este ficheiro</string>
+    <string name="unshare_link_forbidden_permissions">para deixar de compartir este ficheiro</string>
+    <string name="update_link_forbidden_permissions">para actualizar esta compartición</string>
+    <string name="forbidden_permissions_create">para crear este ficheiro</string>
+    <string name="uploader_upload_forbidden_permissions">para enviar este cartafol</string>
+    <string name="downloader_download_file_not_found">O ficheiro xa non está dispoñíbel no servidor</string>
+
+    <string name="file_migration_dialog_title">Actualizando a ruta do almacenamento</string>
+    <string name="file_migration_finish_button">Rematar</string>
+    <string name="file_migration_preparing">Preparando a migración&#8230;</string>
+    <string name="file_migration_checking_destination">Comprobando o destino&#8230;</string>
+    <string name="file_migration_saving_accounts_configuration">Gardando a configuración das contas&#8230;</string>
+    <string name="file_migration_waiting_for_unfinished_sync">Agardando que rematen todas as sincronizacións&#8230;</string>
+    <string name="file_migration_migrating">Movendo datos&#8230;</string>
+    <string name="file_migration_updating_index">Actualizando o índice&#8230;</string>
+    <string name="file_migration_cleaning">Limpando&#8230;</string>
+    <string name="file_migration_restoring_accounts_configuration">Restaurando a configuración das contas&#8230;</string>
+    <string name="file_migration_ok_finished">Rematado</string>
+    <string name="file_migration_failed_not_enough_space">ERRO: Non hai espazo abondo</string>
+    <string name="file_migration_failed_not_writable">ERRO: Non se pode escribir no ficheiro de destino</string>
+    <string name="file_migration_failed_not_readable">ERRO: Non se pode ler o ficheiro de orixe</string>
+    <string name="file_migration_failed_dir_already_exists">ERRO: xa existe o directorio de Nextcloud</string>
+    <string name="file_migration_failed_while_coping">ERRO: Produciuse unha falla durante a migración</string>
+    <string name="file_migration_failed_while_updating_index">ERRO: Produciuse unha falla ao actualizar o índice</string>
+
+    <string name="file_migration_directory_already_exists">Xa existe o cartafol de datos. Escolla un dos seguintes:</string>
+    <string name="file_migration_override_data_folder">Substituír</string>
+    <string name="file_migration_use_data_folder">Usar</string>
+
+    <string name="file_migration_source_not_readable_title">Non se pode ler o ficheiro de orixe</string>
+    <string name="file_migration_source_not_readable">Aínda quere cambiar a ruta do almacenamento a |%1$s?\n\nNota: haberá que volver descargar todos os datos.</string>
+
+    <string name="prefs_category_accounts">Contas</string>
+    <string name="prefs_add_account">Engadir unha conta</string>
+    <string name="drawer_manage_accounts">Administrar contas</string>
+    <string name="auth_redirect_non_secure_connection_title">A conexión segura está a ser redirixida a través dunha ruta insegura.</string>
+
+	<string name="actionbar_logger">Rexistros</string>
+	<string name="log_send_history_button">Enviar o historial</string>
+	<string name="log_send_no_mail_app">Non se atopou ningunha aplicación para o envío de rexistros. Instale un cliente de correo-e.</string>
+	<string name="log_send_mail_subject">Rexistros da aplicación %1$s Android</string>
+	<string name="log_progress_dialog_text">Cargando datos &#8230;</string>
+
+	<string name="saml_authentication_required_text">Requírese autenticación</string>
+	<string name="saml_authentication_wrong_pass">Contrasinal incorrecto</string>
+	<string name="actionbar_move">Mover</string>
+    <string name="actionbar_copy">Copiar</string>
+	<string name="file_list_empty_moving">Aquí non hai nada. Pode engadir un cartafol.</string>
+	<string name="folder_picker_choose_button_text">Escoller</string>
+
+    <string name="move_file_not_found">Non se puido mover o ficheiro. Comprobe que o ficheiro existe</string>
+    <string name="move_file_invalid_into_descendent">Non é posíbel mover un cartafol cara un dos seus propios cartafoles</string>
+    <string name="move_file_invalid_overwrite">Este ficheiro xa existe no cartafol de destino</string>
+    <string name="move_file_error">Produciuse un erro ao tentar mover este ficheiro ou cartafol.</string>
+    <string name="forbidden_permissions_move">para mover este ficheiro</string>
+
+
+    <string name="copy_file_not_found">Non se puido copiar. Comprobe que o ficheiro existe</string>
+    <string name="copy_file_invalid_into_descendent">Non é posíbel copiar un cartafol nun dos seus propios cartafoles</string>
+    <string name="copy_file_invalid_overwrite">Este ficheiro xa existe no cartafol de destino</string>
+    <string name="copy_file_error">Oconteceu un erro mentras se intentaba copiar este ficheiro ou cartafol</string>
+    <string name="forbidden_permissions_copy">copiar este ficheiro</string>
+
+    <string name="prefs_category_instant_uploading">Envíos instantáneos</string>
+    <string name="prefs_category_details">Detalles</string>
+
+	<string name="prefs_instant_video_upload_path_title">Cartafol de vídeo para envíos instantáneos</string>
+    <string name="sync_folder_failed_content">A sincronización do cartafol %1$s non se completou</string>
+
+	<string name="shared_subject_header">compartido</string>
+	<string name="with_you_subject_header">con vostede</string>
+    
+	<string name="subject_user_shared_with_you">%1$s compartiu «%2$s» con vostede</string>
+    <string name="subject_shared_with_you">«%1$s» foi compartido con vostede</string>
+
+    <string name="auth_refresh_button">Actualizar a conexión</string>
+    <string name="auth_host_address">Enderezo do servidor</string>
+    <string name="common_error_out_memory">Non hai memoria abondo</string>
+
+    <string name="username">Nome de usuario</string>
+
+    <string name="file_list__footer__folder">1 cartafol</string>
+    <string name="file_list__footer__folders">%1$d cartafoles</string>
+    <string name="file_list__footer__file">1 ficheiro</string>
+    <string name="file_list__footer__file_and_folder">1 ficheiro, 1 cartafol</string>
+    <string name="file_list__footer__file_and_folders">1 ficheiro, %1$d cartafoles</string>
+    <string name="file_list__footer__files">%1$d ficheiros</string>
+    <string name="file_list__footer__files_and_folder">%1$d ficheiros, 1 cartafol</string>
+    <string name="file_list__footer__files_and_folders">%1$d ficheiros, %2$d cartafoles</string>
+    <string name="set_picture_as">Establecer a imaxe como</string>
+    <string name="set_as">Estabelecer como</string>
+
+    <string name="prefs_instant_behaviour_dialogTitle">O ficheiro orixinal vai ser&#8230;</string>
+    <string name="prefs_instant_behaviour_title">O ficheiro orixinal vai ser&#8230;</string>
+    <string name="upload_copy_files">Copiar o ficheiro</string>
+    <string name="upload_move_files">Mover o ficheiro</string>
+    <string name="select_all">Seleccionar todo</string>
+
+    <string name="pref_behaviour_entries_keep_file">mantense no cartafol orixinal</string>
+    <string name="pref_behaviour_entries_move">movido car o cartafol da aplicación</string>
+    <string name="pref_behaviour_entries_delete_file">eliminado</string>
+    <string name="prefs_storage_path">Ruta de almacenamento</string>
+    <string name="prefs_common">Común</string>
+
+    <string name="share_dialog_title">Compartindo</string>
+    <string name="share_file">Compartir con %1$s</string>
+    <string name="share_with_user_section_title">Compartir con outros usuarios e grupos</string>
+    <string name="share_no_users">Aínda non hai datos compartidos con usuarios</string>
+    <string name="share_add_user_or_group">Engadir usuario ou grupo</string>
+    <string name="share_via_link_section_title">Compartir ligazón</string>
+    <string name="share_via_link_expiration_date_label">Definir a data de caducidade</string>
+    <string name="share_via_link_password_label">Protexer con contrasinal</string>
+    <string name="share_via_link_password_title">Asegurado</string>
+    <string name="share_via_link_edit_permission_label">Permitir a edición</string>
+    <string name="share_via_link_hide_file_listing_permission_label">Agochar a lista de ficheiros</string>
+    <string name="share_get_public_link_button">Obter a ligazón</string>
+    <string name="share_with_title">Compartir con &#8230;</string>
+    <string name="share_with_edit_title">Compartir con %1$s</string>
+
+    <string name="share_search">Buscar</string>
+
+    <string name="search_users_and_groups_hint">Buscar usuarios e grupos</string>
+    <string name="share_group_clarification">%1$s (grupo)</string>
+    <string name="share_remote_clarification">%1$s (remoto)</string>
+    <string name="share_email_clarification">%1$s (correo-e)</string>
+    <string name="share_known_remote_clarification">%1$s ( ás %2$s )</string>
+
+    <string name="share_sharee_unavailable">Actualice a versión do servidor para permitir compartir entre usuarios dende os seus clientes.\nContacte co administrador</string>
+    <string name="share_privilege_can_share">pode compartir</string>
+    <string name="share_privilege_can_edit">pode editar</string>
+    <string name="share_privilege_can_edit_create">crear</string>
+    <string name="share_privilege_can_edit_change">cambio</string>
+    <string name="share_privilege_can_edit_delete">eliminar</string>
+    <string name="edit_share_unshare">Deixar de compartir</string>
+    <string name="edit_share_done">feito</string>
+
+    <string name="action_retry_uploads">Fracasou o novo intento</string>
+    <string name="action_clear_failed_uploads">Fracasou a limpeza</string>
+    <string name="action_clear_successful_uploads">Limpo</string>
+    <string name="action_clear_finished_uploads">Limpar os envíos rematados</string>
+
+    <string name="action_switch_grid_view">Vista como grella</string>
+    <string name="action_switch_list_view">Vista como lista</string>
+
+    <string name="manage_space_title">Administrar o espazo</string>
+    <string name="manage_space_description">Van ser eliminados permanentemente as configuracións , base de datos e certificados do servidor de datos de %1$s.\n\nOs ficheiros descargados manteranse sen cambios.\n\nEste proceso pode levar bastante tempo.</string>
+    <string name="manage_space_clear_data">Limpar os datos</string>
+    <string name="manage_space_error">Algúns ficheiros non puideron ser eliminados</string>
+
+    <string name="permission_storage_access">Requirense permisos adicionais para enviar e descargar ficheiros.</string>
+    <string name="local_file_not_found_toast">Non se atopou o ficheiro no sistema local de ficheiros</string>
+    <string name="confirmation_remove_files_alert">Confirma que quere retirar os elementos seleccionados?</string>
+    <string name="confirmation_remove_folders_alert">Confirma que quere retirar os elementos seleccionados e o seu contido?</string>
+    <string name="maintenance_mode">Servidor en modo de mantemento</string>
+
+    <string name="uploads_view_upload_status_waiting_for_charging">Agardando pola carga</string>
+    <string name="actionbar_search">Buscar</string>
+    <string name="files_drop_not_supported">Esta é unha funcionalidade de Nextcloud, actualice.</string>
+    <string name="learn_more">Aprender máis</string>
+    <string name="drawer_folder_sync">Envío automático</string>
+    <string name="drawer_participate">Participar</string>
+    <string name="participate_testing_headline">Axudanos facendo probas</string>
+    <string name="participate_testing_bug_text">Atopaches un fallo? hai algo estraño?</string>
+    <string name="participate_testing_report_text">Informe dun fallo no GitHub</string>
+    <string name="participate_testing_version_text">Iinteresaríalle axudarnos a probar a seguinte versión?</string>
+    <string name="participate_beta_headline">Probar a versión de desenvolvemento</string>
+    <string name="participate_beta_text">Isto inclúe todas las últimas funcionalidades y es lo más nuevo. Poden ocorrer fallas e erros e, se é o caso, infórmenos diso.</string>
+    <string name="participate_release_candidate_headline">Candidata de publicación</string>
+    <string name="participate_release_candidate_text">A candidata de publicación (release candidate - RC) é unha foto da versión máis proxima a publicar e agardase que sexa estábel. Probar a súa configuración individual podería axudarnos a asegurar iso. Rexístrese para facer probas na Play Store ou consulte directamente a sección de «versións» en F-Droid.</string>
+    <string name="participate_contribute_headline">Colabore activamente</string>
+    <string name="participate_contribute_irc_text">Únase ás conversas no IRC: &lt;a href=\\"%1$s\\">#nextcloud-mobile&lt;/a></string>
+    <string name="participate_contribute_forum_text">Axude a outros no &lt;a href=\\"%1$s\\">foro&lt;/a></string>
+    <string name="participate_contribute_translate_text">&lt;a href=\\"%1$s\\">Traduza&lt;/a> a aplicación</string>
+    <string name="participate_contribute_github_text">Revise, corrixa e escriba código, vexa &lt;a href=\\"%1$s\\">CONTRIBUIR.md&lt;/a> para obter máis detalles</string>
+    <string name="move_to">Mover para&#8230;</string>
+    <string name="copy_to">Copiar en&#8230;</string>
+    <string name="choose_remote_folder">Escolla o cartafol&#8230;</string>
+    <string name="folder_sync_loading_folders">Cargando cartafoles&#8230;</string>
+    <string name="folder_sync_no_results">Non se atopan cartafoles multimedia</string>
+    <string name="folder_sync_preferences">Preferencias de envío automático</string>
+    <string name="folder_sync_settings">Axustes</string>
+    <string name="folder_sync_new_info">O envío automático foi renovado completamente. Reconfigure os seus envíos instantáneos no menú principal.\n\nGoce das novas e ampliadas capacidades do envío automático!</string>
+    <string name="folder_sync_preferences_folder_path">Para %1$s</string>
+    <plurals name="items_selected_count">
+        <item quantity="one">%d selecionado</item>
+        <item quantity="other">%d selecionados</item>
+    </plurals>
+
+    <string name="activity_list_loading_activity">Cargando actividades&#8230;</string>
+    <string name="activity_list_no_results">Non se atoparon actividades.</string>
+
+    <string name="notifications_loading_activity">Cargando notificacións&#8230;</string>
+    <string name="notifications_no_results_headline">Non hai notificacións</string>
+    <string name="notifications_no_results_message">Compróbeo máis tarde.</string>
+
+    <string name="upload_file_dialog_title">Introduza o nome e o tipo do ficheiro a enviar</string>
+    <string name="upload_file_dialog_filename">Nome de ficheiro</string>
+    <string name="upload_file_dialog_filetype">Tipo de ficheiro</string>
+    <string name="upload_file_dialog_filetype_snippet_text">Fragmento de teto(.txt)</string>
+    <string name="upload_file_dialog_filetype_internet_shortcut">Ficheiro de atallo a internet(%s)</string>
+    <string name="upload_file_dialog_filetype_googlemap_shortcut">Ficheiro de atallo aGoogle Maps(%s)</string>
+
+    <string name="storage_description_default">Predeterminado</string>
+    <string name="storage_description_sd_no">Tarxeta SD %1$d</string>
+    <string name="storage_description_unknown">Descoñecido</string>
+
+    <!-- What's new feature and texts to show -->
+    <string name="whats_new_title">Que hai de novo no Nextcloud</string>
+
+    <!-- Welcome to Nc intro features -->
+    <string name="welcome_feature_1_title">Un lugar seguro para todos os seus datos</string>
+    <string name="welcome_feature_1_text">Acceda, comparta e protexa os seus ficheiros na casa e na oficina</string>
+
+    <string name="welcome_feature_2_title">Múltiples contas</string>
+    <string name="welcome_feature_2_text">Conéctese a todas as aúas nubes</string>
+
+    <string name="welcome_feature_3_title">Envío instantáneo</string>
+    <string name="welcome_feature_3_text">Manteña as súas fotos a seguro</string>
+
+    <string name="whats_new_skip">Omitir</string>
+
+    <string name="fingerprint_scan_finger">Escanée o seu dedo</string>
+    <string name="fingerprint_unknown">O dedo non foi recoñecido</string>
+
+    <!-- User information -->
+    <string name="user_info_full_name">Nome completo</string>
+    <string name="user_info_email">Correo-e</string>
+    <string name="user_info_phone">Número de teléfono</string>
+    <string name="user_info_address">Enderezo</string>
+    <string name="user_info_website">Sitio web</string>
+    <string name="user_info_twitter">Twitter</string>
+
+    <string name="user_information_description">Información do usuario</string>
+
+    <!-- Activities -->
+    <string name="activities_no_results_headline">Aínda non houbo actividade</string>
+    <string name="activities_no_results_message">Este fluxo amosaralle eventos como\nadicións, cambios e elementos compartidos</string>
+    <string name="webview_error">Produciuse un erro</string>
+    <string name="prefs_category_about">Sobre</string>
+
+    <string name="actionbar_contacts">Copia de seguridade dos contactos</string>
+    <string name="actionbar_contacts_restore">Restaurar os contactos</string>
+    <string name="contacts_backup_button">Facer agora a copia de seguridade</string>
+    <string name="contacts_restore_button">Restaurar a última copia de seguridade</string>
+    <string name="contacts_header_restore">Restaurar</string>
+    <string name="contacts_header_backup">Copia de seguridade</string>
+    <string name="contacts_automatic_backup">Copia de seguridade dos contactos</string>
+    <string name="contacts_last_backup">Última copia de seguridade</string>
+    <string name="contacts_read_permission">Necesitase permiso para ler a lista de contactos</string>
+    <string name="contacts_write_permission">Necesitase permiso para cambiar a lista de contactos</string>
+    <string name="contactlist_title">Restaurar os contactos</string>
+    <string name="contaclist_restore_selected">Restaurar os contactos seleccionados</string>
+    <string name="contactlist_account_chooser_title">Escolla unha conta para importala</string>
+    <string name="contactlist_no_permission">Non se concederon permisos. Non se importou nada!</string>
+    <string name="contacts_preference_choose_date">Escolla a data</string>
+    <string name="contacts_preference_backup_never">nunca</string>
+    <string name="contacts_preferences_no_file_found">Non se atopou o ficheiro</string>
+    <string name="contacts_preferences_something_strange_happened">Non foi posíbel atopar a súa última copia de seguridade!</string>
+    <string name="contacts_preferences_backup_scheduled">A copia de seguridade está programada e comezará en breve</string>
+    <string name="contacts_preferences_import_scheduled">A importación está programada e comezará en breve</string>
+
+    <!-- Notifications -->
+    <string name="new_notification_received">Recibiuse unha nova notificación</string>
+    <string name="drawer_logout">Saír</string>
+    <string name="picture_set_as_no_app">Non se atopou unha aplicación coa que estabelecer unha imaxe!</string>
+    <string name="privacy">Intimidade</string>
+    <string name="file_not_found">Non se atopou o ficheiro!</string>
+
+    <string name="folder_sync_folders">Configurar os cartafoles</string>
+
+  </resources>

+ 2 - 5
src/main/res/values-is/strings.xml

@@ -305,7 +305,6 @@ Smelltu hér til að fá þér einn frá þjónustuaðila.</string>
     <string name="activity_chooser_title">Senda tengil til &#8230;</string>
     <string name="wait_for_tmp_copy_from_private_storage">Afrita skrá úr einkageymslu</string>
     
-    <string name="oauth_check_onoff">Skrá inn með oAuth2</string> 
     <string name="oauth_login_connection">Tengist við OAuth-auðkenningarþjón …</string>    
         
     <string name="ssl_validator_header">Ekki var hægt að sannreyna auðkenni vefsvæðisins</string>
@@ -419,12 +418,11 @@ Smelltu hér til að fá þér einn frá þjónustuaðila.</string>
     <string name="file_migration_failed_while_coping">VILLA: Mistókst við yfirfærslu</string>
     <string name="file_migration_failed_while_updating_index">VILLA: Mistókst að uppfæra skráningarvísi</string>
 
+    <string name="file_migration_directory_already_exists">Gagnamappa er þegar til. Veldu eitt af eftirfarandi:</string>
     <string name="file_migration_override_data_folder">Skipta út</string>
     <string name="file_migration_use_data_folder">Nota</string>
 
     <string name="file_migration_source_not_readable_title">Upprunamappa er ekki lesanleg!</string>
-    <string name="file_migration_source_not_readable">Viltu enn breyta slóð gagnageymslu í %1$s?\n\nAthugaðu: öll gögn þarf að sækja aftur.</string>
-
     <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>
@@ -659,5 +657,4 @@ Smelltu hér til að fá þér einn frá þjónustuaðila.</string>
     <string name="drawer_logout">Útskráning</string>
     <string name="picture_set_as_no_app">Engin forrit fundust til að setja mynd!</string>
     <string name="privacy">Gagnaleynd</string>
-
-  </resources>
+    </resources>

+ 70 - 132
src/main/res/values-it/strings.xml

@@ -16,6 +16,11 @@
     <string name="sort_by">Ordina per</string>
     <string name="menu_item_sort_by_name_a_z">A - Z</string>
     <string name="menu_item_sort_by_name_z_a">Z - A</string>
+    <string name="menu_item_sort_by_date_newest_first">Prima i più recenti</string>
+    <string name="menu_item_sort_by_date_oldest_first">Prima i più datati</string>
+    <string name="menu_item_sort_by_size_biggest_first">Prima i più grandi</string>
+    <string name="menu_item_sort_by_size_smallest_first">Prima i più piccoli</string>
+
     <string name="drawer_item_all_files">Tutti i file</string>
     <string name="drawer_item_files">File</string>
     <string name="drawer_item_favorites">Preferiti</string>
@@ -38,11 +43,12 @@
     <string name="prefs_manage_accounts">Gestisci account</string>
     <string name="prefs_passcode">Blocco con codice di sicurezza</string>
     <string name="prefs_fingerprint">Blocco con impronta digitale</string>
+    <string name="prefs_fingerprint_notsetup">Non è stata impostata alcuna impronta digitale</string>
     <string name="prefs_show_hidden_files">Mostra i file nascosti</string>
-    <string name="prefs_instant_upload">Caricamenti istantanei delle foto</string>
-    <string name="prefs_instant_upload_summary">Carica immediatamente le foto dalla fotocamera</string>
+    <string name="prefs_instant_upload">Caricamenti istantanei delle immagini</string>
+    <string name="prefs_instant_upload_summary">Carica immediatamente le immagini scattate dalla fotocamera</string>
     <string name="prefs_instant_video_upload">Caricamenti istantanei dei video</string>
-    <string name="prefs_instant_video_upload_summary">Carica immediatamente i video dalla fotocamera</string>
+    <string name="prefs_instant_video_upload_summary">Carica immediatamente i video registrati dalla fotocamera</string>
     <string name="prefs_log_title">Abilita la registrazione</string>
     <string name="prefs_log_summary">Usato per registrare i problemi nei log</string>
     <string name="prefs_log_title_history">Cronologia di registrazione</string>
@@ -51,23 +57,15 @@
     <string name="prefs_calendar_contacts">Sincronizza calendario e contatti</string>
     <string name="prefs_calendar_contacts_summary">Configura DAVdroid (v1.3.0+) per l\'account corrente</string>
     <string name="prefs_calendar_contacts_address_resolve_error">L\'indirizzo del server per l\'account non può essere risolto da DAVdroid</string>
-    <string name="prefs_calendar_contacts_no_store_error">Nessuna applicazione Google Play o F-Droid installata</string>
-    <string name="prefs_calendar_contacts_sync_setup_successful">Sincronizzazione calendario e contatti configurata correttamente</string>
     <string name="prefs_help">Aiuto</string>
     <string name="prefs_recommend">Consiglia a un amico</string>
     <string name="prefs_feedback">Segnalazioni</string>
     <string name="prefs_imprint">Imprint</string>
-    <string name="prefs_remember_last_share_location">Ricorda la posizione della condivisione</string>
-    <string name="prefs_remember_last_upload_location_summary">Ricorda l\'ultima posizione di caricamento della condivisione</string>
-
-	<string name="recommend_subject">Prova %1$s sul tuo smartphone!</string>
-	<string name="recommend_text">Vorrei invitarti a usare %1$s sul tuo smartphone!\nScarica qui: %2$s</string>
-
-    <string name="auth_check_server">Controlla server</string>
+    <string name="recommend_subject">Prova %1$s sul tuo smartphone!</string>
+	<string name="auth_check_server">Controlla server</string>
     <string name="auth_host_url">Indirizzo server https://...</string>
     <string name="auth_username">Nome utente</string>
     <string name="auth_password">Password</string>
-    <string name="auth_register">Non hai ancora un server?\\nFai clic qui per ottenerne uno da un fornitore.</string>
     <string name="sync_string_files">File</string>
     <string name="setup_btn_connect">Connetti</string>
     <string name="uploader_btn_upload_text">Carica</string>
@@ -79,30 +77,22 @@
     <string name="uploader_error_title_no_file_to_upload">Nessun file da caricare</string>
     <string name="uploader_error_message_received_piece_of_text">%1$s non può  caricare un pezzo di testo come un file.</string>
     <string name="uploader_error_message_no_file_to_upload">I dati ricevuti non includono alcun file valido.</string>
-    <string name="uploader_error_title_file_cannot_be_uploaded">Il file non può essere caricato</string>
+    <string name="uploader_error_title_file_cannot_be_uploaded">Questo file non può essere caricato</string>
     <string name="uploader_error_message_read_permission_not_granted">%1$s non ha il permesso di leggere un file ricevuto</string>
-    <string name="uploader_error_message_source_file_not_found">Il file da caricare non è stato trovato nella sua posizione. Controlla che il file esista.</string>
-    <string name="uploader_error_message_source_file_not_copied">Si è verificato un errore durante il tentativo di copiare il file in una cartella temporanea. Prova a inviarlo ancora.</string>
     <string name="uploader_upload_files_behaviour">Opzione di caricamento:</string>
     <string name="uploader_upload_files_behaviour_move_to_nextcloud_folder">Sposta il file nella cartella di Nextcloud</string>
     <string name="uploader_upload_files_behaviour_only_upload">Mantieni il file nella cartella di origine</string>
     <string name="uploader_upload_files_behaviour_upload_and_delete_from_source">Elimina il file dalla cartella di origine</string>
     <string name="file_list_seconds_ago">secondi fa</string>
     <string name="file_list_empty_headline">Qui non c\'è alcun file</string>
-    <string name="file_list_empty">Carica alcuni contenuti o sincronizza con i tuoi dispositivi!</string>
     <string name="file_list_loading">Caricamento in corso&#8230;</string>
-    <string name="file_list_no_app_for_file_type">Nessuna applicazione trovata per il tipo di file!</string>
     <string name="local_file_list_empty">Non ci sono file in questa cartella.</string>
     <string name="file_list_empty_headline_search">Nessun risultato in questa cartella</string>
     <string name="file_list_empty_headline_server_search">Nessun risultato</string>
     <string name="file_list_empty_shared_headline">Ancora nessuna condivisione</string>
     <string name="file_list_empty_headline_server_search_videos">Nessun video</string>
     <string name="file_list_empty_headline_server_search_photos">Nessuna foto</string>
-    <string name="file_list_empty_search">Vuoi provare a cercare in un\'altra cartella?</string>
-    <string name="file_list_empty_text_photos_filter">Nessuna foto trovata per la tua ricerca!</string>
-    <string name="file_list_empty_text_videos_filter">Nessun video trovato per la tua ricerca!</string>
     <string name="upload_list_empty_headline">Nessun caricamento disponibile</string>
-    <string name="upload_list_empty_text">Carica alcuni contenuti o attiva il caricamento istantaneo!</string>
     <string name="file_list_folder">cartella</string>
     <string name="file_list_folders">cartelle</string>
     <string name="file_list_file">file</string>
@@ -114,14 +104,11 @@
     <string name="filedetails_modified">Modificato:</string>
     <string name="filedetails_download">Scarica</string>
     <string name="filedetails_sync_file">Sincronizza</string>
-    <string name="filedetails_renamed_in_upload_msg">Il file è stato rinominato in %1$s durante il caricamento</string>
-    <string name="list_layout">Disposizione elenco</string>
     <string name="action_share">Condividi</string>
     <string name="common_yes">Sì</string>
     <string name="common_no">No</string>
     <string name="common_ok">OK</string>
     <string name="common_remove_upload">Rimuovi caricamento</string>
-    <string name="common_retry_upload">Riprova caricamento</string>
     <string name="common_cancel_sync">Annulla sincronizzazione</string>
     <string name="common_cancel">Annulla</string>
     <string name="common_back">Indietro</string>
@@ -141,10 +128,10 @@
     <string name="uploader_info_dirname">Nome della cartella</string>
     <string name="uploader_upload_in_progress_ticker">Caricamento in corso &#8230;</string>
     <string name="uploader_upload_in_progress_content">%1$d%% Caricamento di %2$s</string>
-    <string name="uploader_upload_succeeded_ticker">Caricamento effettuato</string>
+    <string name="uploader_upload_succeeded_ticker">Caricati</string>
     <string name="uploader_upload_succeeded_content_single">%1$s caricato</string>
     <string name="uploader_upload_failed_ticker">Caricamento non riuscito</string>
-    <string name="uploader_upload_failed_content_single">Il caricamento di %1$s non può essere completato</string>
+    <string name="uploader_upload_failed_content_single">Impossibile caricare %1$s</string>
     <string name="uploader_upload_failed_credentials_error">Caricamento non riuscito, devi effettuare nuovamente l\'accesso</string>
     <string name="uploads_view_title">Caricamenti</string>
     <string name="uploads_view_group_current_uploads">Attuale</string>
@@ -161,23 +148,20 @@
     <string name="uploads_view_upload_status_failed_localfile_error">File locale non trovato</string>
     <string name="uploads_view_upload_status_failed_permission_error">Errore di permessi</string>
     <string name="uploads_view_upload_status_conflict">Conflitto</string>
-    <string name="uploads_view_upload_status_service_interrupted">L\'applicazione è stata terminata</string>
+    <string name="uploads_view_upload_status_service_interrupted">Applicazione terminata</string>
     <string name="uploads_view_upload_status_unknown_fail">Errore sconosciuto</string>
-    <string name="uploads_view_upload_status_waiting_for_wifi">In attesa della connettività wifi</string>
     <string name="uploads_view_later_waiting_to_upload">In attesa di caricamento</string>
     <string name="downloader_download_in_progress_ticker">Scaricamento in corso &#8230;</string>
     <string name="downloader_download_in_progress_content">%1$d%% Scaricamento di %2$s</string>
-    <string name="downloader_download_succeeded_ticker">Scaricamento effettuato</string>
+    <string name="downloader_download_succeeded_ticker">Scaricati</string>
     <string name="downloader_download_succeeded_content">%1$s scaricato</string>
     <string name="downloader_download_failed_ticker">Scaricamento non riuscito</string>
-    <string name="downloader_download_failed_content">Scaricamento di %1$s non è stato completato</string>
+    <string name="downloader_download_failed_content">Impossibile scaricare %1$s</string>
     <string name="downloader_not_downloaded_yet">Non ancora scaricato</string>
     <string name="downloader_download_failed_credentials_error">Scaricamento non riuscito, devi effettuare nuovamente l\'accesso</string>
     <string name="common_choose_account">Scegli account</string>
     <string name="sync_fail_ticker">Sincronizzazione non riuscita</string>
-    <string name="sync_fail_ticker_unauthorized">Sincronizzazione non riuscita, devi ripetere l\'accesso</string>
-    <string name="sync_fail_content">La sincronizzazione di %1$s non può essere completata</string>
-    <string name="sync_fail_content_unauthorized">Password non valida per %1$s</string>
+    <string name="sync_fail_content_unauthorized">Password errata per %1$s</string>
     <string name="sync_conflicts_in_favourites_ticker">Conflitti rilevati</string>
     <string name="sync_conflicts_in_favourites_content">%1$d file non possono essere sincronizzati</string>
     <string name="sync_fail_in_favourites_ticker">Sincronizzazione dei file non riuscita</string>
@@ -185,13 +169,11 @@
     <string name="sync_foreign_files_forgotten_ticker">Alcuni file locali sono stati trascurati</string>
     <string name="sync_foreign_files_forgotten_content">%1$d file della cartella %2$s non possono essere copiati</string>
     <string name="sync_foreign_files_forgotten_explanation">Dalla versione 1.3.16, i file caricati da questo dispositivo sono copiati nella cartella locale %1$s per evitare perdite di dati in caso di sincronizzazione di un singolo file con più account.\n\nA causa di questa modifica, tutti i file caricati nelle versioni precedenti di questa applicazione sono copiati nella cartella %2$s. In ogni caso, un errore ha impedito il completamento di questa operazione durante la sincronizzazione dell\'account.  Puoi mantenere i file intatti e rimuovere il collegamento a %3$s o spostare i file nella cartella %1$s e mantenere il collegamento a %4$s.\n\nQui sotto sono elencati i file locali e i file remoti in %5$s ai quali sono collegati.</string>
-    <string name="sync_current_folder_was_removed">La cartella %1$s non esiste più</string>
     <string name="foreign_files_move">Sposta tutto</string>
     <string name="foreign_files_success">Tutti i file sono stati spostati</string>
     <string name="foreign_files_fail">Alcuni file non possono essere spostati</string>
     <string name="foreign_files_local_text">Locale: %1$s</string>
     <string name="foreign_files_remote_text">Remoto %1$s</string>
-    <string name="upload_query_move_foreign_files">Non c\'è spazio sufficiente per copiare i file selezionati nella cartella %1$s. Vuoi invece spostarli?</string>
     <string name="pass_code_enter_pass_code">Digita il tuo codice segreto</string>
     
     <string name="pass_code_configure_your_pass_code">Digita il tuo codice segreto</string>
@@ -211,14 +193,7 @@
     <string name="media_err_no_account">Nessun account fornito</string>
     <string name="media_err_not_in_owncloud">Il file non è in un account valido</string>
     <string name="media_err_unsupported">Codificatore multimediale non supportato</string>
-    <string name="media_err_io">Il file multimediale non può essere letto</string>
-    <string name="media_err_malformed">File multimediale non codificato correttamente</string>
-    <string name="media_err_timeout">La riproduzione ha richiesto troppo tempo</string>
-    <string name="media_err_invalid_progressive_playback">Il file multimediale non può essere trasmesso</string>
-    <string name="media_err_unknown">Il file multimediale non può essere riprodotto con il lettore integrato</string>
-    <string name="media_err_security_ex">Errore di sicurezza durante il tentativo di riprodurre %1$s</string>
-    <string name="media_err_io_ex">Errore di input durante il tentativo di riprodurre %1$s</string>
-    <string name="media_err_unexpected">Errore inatteso durante il tentativo di riprodurre %1$s</string>
+    <string name="media_err_io">Impossibile leggere il file multimediale</string>
     <string name="media_rewind_description">Pulsante Riavvolgi</string>
     <string name="media_play_pause_description">Pulsante Riproduci o pausa</string>
     <string name="media_forward_description">Pulsante Avanti veloce</string>
@@ -230,60 +205,50 @@
 	<string name="auth_connection_established">Connessione stabilita</string>
 	<string name="auth_testing_connection">Prova di connessione</string>
 	<string name="auth_not_configured_title">Configurazione non corretta del server</string>
-	<string name="auth_account_not_new">Esiste già un account su questo dispositivo per lo stesso utente e server</string>
 	<string name="auth_account_not_the_same">L\'utente digitato non corrisponde all\'utente di questo account</string>
 	<string name="auth_unknown_error_title">Si è verificato un errore sconosciuto!</string>
 	<string name="auth_unknown_host_title">Impossibile trovare l\'host</string>
-	<string name="auth_incorrect_path_title">Istanza del server non trovata</string>
+	<string name="auth_incorrect_path_title">Server non trovato</string>
 	<string name="auth_timeout_title">Il server ha richiesto troppo tempo per rispondere</string>
-	<string name="auth_incorrect_address_title">Formato indirizzo del server errato</string>
+	<string name="auth_incorrect_address_title">Formato dell\'indirizzo del server errato</string>
 	<string name="auth_ssl_general_error_title">Inizializzazione  SSL non riuscita</string>
-	<string name="auth_ssl_unverified_server_title">Impossibile verificare l\'identità SSL del server</string>
+	<string name="auth_ssl_unverified_server_title">Impossibile verificare l\'identità del server SSL</string>
 	<string name="auth_bad_oc_version_title">Versione del server non riconosciuta</string>
 	<string name="auth_wrong_connection_title">Impossibile stabilire la connessione</string>
 	<string name="auth_secure_connection">Connessione sicura stabilita</string>
 	<string name="auth_unauthorized">Nome utente o password errati</string>
 	<string name="auth_oauth_error">Autorizzazione non riuscita</string>
 	<string name="auth_oauth_error_access_denied">Accesso negato dal server di autorizzazione</string>
-	<string name="auth_wtf_reenter_URL">Stato inatteso; digita nuovamente l\'indirizzo del server</string>
 	<string name="auth_expired_oauth_token_toast">Autorizzazione scaduta. Richiedi l\'autorizzazione</string>
 	<string name="auth_expired_basic_auth_toast">Digita la password attuale</string>
 	<string name="auth_expired_saml_sso_token_toast">Sessione scaduta. Riconnettiti</string>
-	<string name="auth_connecting_auth_server">Connessione al server di autenticazione in corso...</string>
+	<string name="auth_connecting_auth_server">Connessione al server di autenticazione...</string>
 	<string name="auth_unsupported_auth_method">Il server non supporta questo metodo di autenticazione</string>
 	<string name="auth_unsupported_multiaccount">%1$s non supporta account multipli</string>
-	<string name="auth_fail_get_user_name">Il tuo server non ha restituito un id utente corretto, contatta un amministratore </string>
 	<string name="auth_can_not_auth_against_server">Impossibile autenticarsi a questo server</string>
-    <string name="auth_account_does_not_exist">L\'account non esiste ancora sul dispositivo</string>
-    
     <string name="favorite">Imposta come disponibile non in linea</string>
     <string name="unfavorite">Rimuovi come disponibile non in linea</string>
     <string name="favorite_real">Imposta come preferito</string>
     <string name="common_rename">Rinomina</string>
     <string name="common_remove">Rimuovi</string>
     <string name="confirmation_remove_file_alert">Vuoi davvero rimuovere %1$s?</string>
-    <string name="confirmation_remove_folder_alert">Vuoi davvero rimuovere %1$s e il suo contenuto?</string>
     <string name="confirmation_remove_local">Solo localmente</string>
-    <string name="remove_success_msg">Rimozione effettuata con successo</string>
+    <string name="remove_success_msg">Rimossi</string>
     <string name="remove_fail_msg">La rimozione non può essere completata</string>
     <string name="rename_dialog_title">Digita un nuovo nome</string>
-    <string name="rename_local_fail_msg">La copia locale non può essere rinominata; prova un nome diverso</string>
-    <string name="rename_server_fail_msg">La rinomina non può essere completata</string>
-    <string name="sync_file_fail_msg">Il file remoto non può essere controllato</string>
     <string name="sync_file_nothing_to_do_msg">Contenuti del file già sincronizzati</string>
-    <string name="create_dir_fail_msg">La cartella non può essere creata</string>
+    <string name="create_dir_fail_msg">Impossibile creare la cartella</string>
     <string name="filename_forbidden_characters">Caratteri proibiti: / \\ &lt; &gt; : \" | ? *</string>
     <string name="filename_forbidden_charaters_from_server">Il nome del file contiene almeno un carattere non valido</string>
     <string name="filename_empty">Il nome del file non può essere vuoto</string>
-    <string name="wait_a_moment">Attendi</string>
+    <string name="wait_a_moment">Attendi...</string>
     <string name="wait_checking_credentials">Controllo delle credenziali memorizzate</string>
-    <string name="filedisplay_unexpected_bad_get_content">Problema inatteso; prova un\'altra applicazione per selezionare il file</string>
-    <string name="filedisplay_no_file_selected">Non è stato selezionato alcun file</string>
+    <string name="filedisplay_no_file_selected">Nessun file selezionato</string>
     <string name="activity_chooser_title">Invia collegamento a &#8230;</string>
     <string name="wait_for_tmp_copy_from_private_storage">Copia file dall\'archiviazione privata</string>
     
-    <string name="oauth_check_onoff">Accesso con oAuth2</string> 
-    <string name="oauth_login_connection">Connessione al server oAuth2 in corso...</string>    
+    <string name="oauth_check_onoff">Accedi con OAuth2</string> 
+    <string name="oauth_login_connection">Connessione al server OAuth2...</string>    
         
     <string name="ssl_validator_header">L\'identità del sito non può essere verificata</string>
     <string name="ssl_validator_reason_cert_not_trusted">- Il certificato del server non è affidabile</string>
@@ -291,7 +256,7 @@
     <string name="ssl_validator_reason_cert_not_yet_valid">- Il certificato del server è troppo recente</string>
     <string name="ssl_validator_reason_hostname_not_verified">- L\'URL non corrisponde al nome host nel certificato</string>
     <string name="ssl_validator_question">Vuoi fidarti comunque di questo certificato?</string>
-    <string name="ssl_validator_not_saved">Il certificato non può essere salvato</string>
+    <string name="ssl_validator_not_saved">Impossibile salvare il certificato</string>
     <string name="ssl_validator_btn_details_see">Dettagli</string>
     <string name="ssl_validator_btn_details_hide">Nascondi</string>
     <string name="ssl_validator_label_subject">Emesso a:</string>
@@ -320,21 +285,15 @@
     <string name="placeholder_timestamp">2012/05/18 12:23 PM</string>
     <string name="placeholder_media_time">12:23:45</string>
 
-    <string name="auto_upload_on_wifi">Carica solo tramite wifi</string>
-    <string name="instant_upload_on_wifi">Carica le immagini solo tramite wifi</string>
-    <string name="instant_video_upload_on_wifi">Carica i video solo tramite wifi</string>
-    <string name="instant_video_upload_on_charging">Carica solo in fase di ricarica</string>
-    <string name="instant_upload_on_charging">Carica solo in fase di ricarica</string>
     <string name="instant_upload_path">/InstantUpload</string>
     <string name="conflict_title">File in conflitto</string>
-    <string name="conflict_message">Quali file vuoi tenere? Se selezioni entrambi le versioni, il file locale avrà un numero aggiunto al suo nome.</string>
     <string name="conflict_keep_both">Mantieni entrambi</string>
     <string name="conflict_use_local_version">Versione locale</string>
     <string name="conflict_use_server_version">versione del server</string>
 
-    <string name="preview_sorry">Spiacenti!</string>
+    <string name="preview_sorry">Spiacenti.</string>
     <string name="preview_image_description">Anteprima dell\'immagine</string>
-    <string name="preview_image_error_unknown_format">L\'immagine non può essere mostrata</string>
+    <string name="preview_image_error_unknown_format">Impossibile mostrare l\'immagine</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">Cartella caricamenti istantanei</string>
@@ -343,7 +302,6 @@
     <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>
 
-	<string name="share_link_no_support_share_api">Spiacenti, la condivisione non è abilitata sul tuo server. Contatta il tuo amministratore.</string>
 	<string name="share_link_file_no_exist">Impossibile condividere. Assicurati che il file esista</string>
 	<string name="share_link_file_error">Si è verificato un errore durante il tentativo di condivisione del file o della cartella</string>
 	<string name="unshare_link_file_no_exist">Impossibile rimuovere dalla condivisione. Assicurati che il file esista</string>
@@ -357,56 +315,44 @@
 
     <string name="copy_link">Copia collegamento</string>
     <string name="clipboard_text_copied">Copiato negli appunti</string>
-    <string name="clipboard_no_text_to_copy">Nessun testo da copiare negli appunti</string>
     <string name="clipboard_uxexpected_error">Errore inatteso durante la copia negli appunti</string>
     <string name="clipboard_label">Testo copiato da %1$s</string>
 
-    <string name="error_cant_bind_to_operations_service">Errore grave: impossibile eseguire le operazioni</string>
+    <string name="network_host_not_available">Impossibile completare l\'operazione. Server non disponibile</string>
 
-    <string name="network_error_socket_exception">Si è verificato un errore durante la connessione al server.</string>
-    <string name="network_error_socket_timeout_exception">Si è verificato un errore in attesa della risposta del server, l\'operazione non è stata completata</string>
-    <string name="network_error_connect_timeout_exception">Si è verificato un errore in attesa della risposta del server, l\'operazione non è stata completata</string>
-    <string name="network_host_not_available">L\'operazione non è stata completata, il server non è disponibile</string>
-    <string name="forbidden_permissions">Non hai i permessi %s</string>
+    <string name="forbidden_permissions">Non ti è consentito %s</string>
     <string name="forbidden_permissions_rename">per rinominare questo file</string>
     <string name="forbidden_permissions_delete">per eliminare questo file</string>
     <string name="share_link_forbidden_permissions">per condividere questo file</string>
     <string name="unshare_link_forbidden_permissions">per rimuovere la condivisione di questo file</string>
     <string name="update_link_forbidden_permissions">per aggiornare questa condivisione</string>
-    <string name="forbidden_permissions_create">per creare il file</string>
+    <string name="forbidden_permissions_create">per creare questo file</string>
     <string name="uploader_upload_forbidden_permissions">per caricare in questa cartella</string>
     <string name="downloader_download_file_not_found">Il file non è più disponibile sul server</string>
 
     <string name="file_migration_dialog_title">Aggiornamento del percorso di archiviazione</string>
     <string name="file_migration_finish_button">Fine</string>
-    <string name="file_migration_preparing">Preparazione della migrazione&#8230;</string>
     <string name="file_migration_checking_destination">Controllo della destinazione&#8230;</string>
-    <string name="file_migration_saving_accounts_configuration">Salvataggio della configurazione degli account&#8230;</string>
-    <string name="file_migration_waiting_for_unfinished_sync">In attesa del completamento delle sincronizzazioni&#8230;</string>
     <string name="file_migration_migrating">Spostamento dei dati&#8230;</string>
     <string name="file_migration_updating_index">Aggiornamento dell\'indice&#8230;</string>
     <string name="file_migration_cleaning">Pulizia&#8230;</string>
-    <string name="file_migration_restoring_accounts_configuration">Ripristino della configurazione degli account&#8230;</string>
     <string name="file_migration_ok_finished">Fine</string>
-    <string name="file_migration_failed_not_enough_space">ERRORE: spazio libero insufficiente</string>
-    <string name="file_migration_failed_not_writable">ERRORE: il file non è scrivibile</string>
-    <string name="file_migration_failed_not_readable">ERRORE: il file non è leggibile</string>
+    <string name="file_migration_failed_not_enough_space">ERRORE: spazio insufficiente</string>
+    <string name="file_migration_failed_not_writable">ERRORE: file di destinazione non scrivibile</string>
+    <string name="file_migration_failed_not_readable">ERRORE: file sorgente non leggibile</string>
     <string name="file_migration_failed_dir_already_exists">ERRORE: la cartella di Nextcloud esiste già</string>
-    <string name="file_migration_failed_while_coping">ERRORE: durante la migrazione</string>
-    <string name="file_migration_failed_while_updating_index">ERRORE: durante l\'aggiornamento dell\'indice</string>
+    <string name="file_migration_failed_while_coping">ERRORE: problema durante la migrazione</string>
+    <string name="file_migration_failed_while_updating_index">ERRORE: aggiornamento dell\'indice non riuscito</string>
 
-    <string name="file_migration_directory_already_exists">La cartella dei dati esiste già, cosa vuoi fare?</string>
-    <string name="file_migration_override_data_folder">Sovrascrivi</string>
-    <string name="file_migration_use_data_folder">Utilizza quella esistente</string>
+    <string name="file_migration_override_data_folder">Sostituisci</string>
+    <string name="file_migration_use_data_folder">Usa</string>
 
+    <string name="file_migration_source_not_readable_title">Cartella sorgente non leggibile!</string>
     <string name="prefs_category_accounts">Account</string>
     <string name="prefs_add_account">Aggiungi account</string>
     <string name="drawer_manage_accounts">Gestisci account</string>
-    <string name="auth_redirect_non_secure_connection_title">La connessione sicura è rediretta attraverso un percorso non sicuro.</string>
-
-	<string name="actionbar_logger">Registri</string>
+    <string name="actionbar_logger">Registri</string>
 	<string name="log_send_history_button">Cronologia invii</string>
-	<string name="log_send_no_mail_app">Non è stata trovata alcuna applicazione per l\'invio dei log. Installa un client di posta.</string>
 	<string name="log_send_mail_subject">Registri applicazione %1$s Android</string>
 	<string name="log_progress_dialog_text">Caricamento dati in corso &#8230;</string>
 
@@ -414,26 +360,22 @@
 	<string name="saml_authentication_wrong_pass">Password errata</string>
 	<string name="actionbar_move">Sposta</string>
     <string name="actionbar_copy">Copia</string>
-	<string name="file_list_empty_moving">Qui non c\'è niente. Puoi aggiungere una cartella!</string>
+	<string name="file_list_empty_moving">Non c\'è niente qui. Puoi aggiungere una cartella.</string>
 	<string name="folder_picker_choose_button_text">Scegli</string>
 
-    <string name="move_file_not_found">Impossibile spostare. Assicurati che il file esista</string>
-    <string name="move_file_invalid_into_descendent">Impossibile spostare una cartella in una cartella inferiore</string>
-    <string name="move_file_invalid_overwrite">Il file esiste già nella cartella di destinazione</string>
+    <string name="move_file_not_found">Impossibile spostare il file. Controlla che esista</string>
     <string name="move_file_error">Si è verificato un errore durante il tentativo di spostare il file o la cartella</string>
     <string name="forbidden_permissions_move">per spostare questo file</string>
 
 
     <string name="copy_file_not_found">Impossibile copiare. Assicurati che il file esista</string>
-    <string name="copy_file_invalid_into_descendent">Impossibile copiare una cartella in una cartella inferiore</string>
-    <string name="copy_file_invalid_overwrite">Il file esiste già nella cartella di destinazione</string>
     <string name="copy_file_error">Si è verificato un errore durante il tentativo di copiare il file o la cartella</string>
     <string name="forbidden_permissions_copy">per copiare questo file</string>
 
     <string name="prefs_category_instant_uploading">Caricamenti istantanei</string>
     <string name="prefs_category_details">Dettagli</string>
 
-	<string name="prefs_instant_video_upload_path_title">Cartella caricamenti istantanei dei video</string>
+	<string name="prefs_instant_video_upload_path_title">Cartella dei video per caricamento automatico</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>
@@ -456,6 +398,9 @@
     <string name="file_list__footer__files">%1$d file</string>
     <string name="file_list__footer__files_and_folder">%1$d file, 1 cartella</string>
     <string name="file_list__footer__files_and_folders">%1$d file, %2$d cartelle</string>
+    <string name="set_picture_as">Imposta immagine come</string>
+    <string name="set_as">Imposta come</string>
+
     <string name="prefs_instant_behaviour_dialogTitle">Il file originale sarà&#8230;</string>
     <string name="prefs_instant_behaviour_title">Il file originale sarà&#8230;</string>
     <string name="upload_copy_files">Copia file</string>
@@ -491,7 +436,6 @@
     <string name="share_email_clarification">%1$s (email)</string>
     <string name="share_known_remote_clarification">%1$s ( su %2$s )</string>
 
-    <string name="share_sharee_unavailable">Spiacenti, la versione del tuo server non consente la condivisione con utenti dai client. \nContatta il tuo amministratore.</string>
     <string name="share_privilege_can_share">può condividere</string>
     <string name="share_privilege_can_edit">può modificare</string>
     <string name="share_privilege_can_edit_create">crea</string>
@@ -500,48 +444,39 @@
     <string name="edit_share_unshare">Interrompi la condivisione</string>
     <string name="edit_share_done">completato</string>
 
-    <string name="action_retry_uploads">Riprova caricamenti non riusciti</string>
+    <string name="action_retry_uploads">Nuovo tentativo non riuscito</string>
     <string name="action_clear_failed_uploads">Cancella i caricamenti non riusciti</string>
-    <string name="action_clear_successful_uploads">Cancella i caricamenti avvenuti</string>
-    <string name="action_clear_finished_uploads">Cancella tutti i caricamenti completati</string>
-
     <string name="action_switch_grid_view">Vista Griglia</string>
     <string name="action_switch_list_view">Vista Elenco</string>
 
     <string name="manage_space_title">Gestisci lo spazio</string>
-    <string name="manage_space_description">Impostazioni, database e certificati server dai dati di %1$s saranno eliminati definitivamente. \n\n\I file scaricati rimarranno intatti.\n\nQuesto processo può richiedere del tempo.</string>
     <string name="manage_space_clear_data">Cancella i dati</string>
     <string name="manage_space_error">Alcuni file non possono essere eliminati.</string>
 
-    <string name="permission_storage_access">Permessi aggiuntivi sono richiesti per caricare e scaricare i file.</string>
-    <string name="local_file_not_found_toast">Il file non è stato trovato nel file system locale</string>
+    <string name="local_file_not_found_toast">File non 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="uploads_view_upload_status_waiting_for_charging">In attesa della ricarica del dispositivo</string>
+    <string name="maintenance_mode">Server in manutenzione</string>
+
     <string name="actionbar_search">Cerca</string>
     <string name="files_drop_not_supported">Questa è una funzionalità di Nextcloud, aggiorna.</string>
     <string name="learn_more">Scopri altro</string>
     <string name="drawer_folder_sync">Carica automaticamente</string>
     <string name="drawer_participate">Partecipa</string>
-    <string name="participate_testing_headline">Aiutaci nella fase di test</string>
-    <string name="participate_testing_bug_text">Hai trovato un bug? Qualcosa di strano?</string>
     <string name="participate_testing_report_text">Segnala un problema su GitHub</string>
-    <string name="participate_testing_version_text">Sei interessato ad aiutarci a provare la nostra prossima versione?</string>
+    <string name="participate_beta_headline">Prova la versione di sviluppo</string>
     <string name="participate_release_candidate_headline">Candidata al rilascio</string>
-    <string name="participate_release_candidate_text">Questa candidata al rilascio (RC) è uno snapshot della prossima versione e dovrebbe essere stabile. La prova della tua specifica configurazione potrebbe aiutare ad assicurare che lo sia. Registrati per i test su Google Play o controlla manualmente nella sezione \"versioni\" su F-Droid.</string>
     <string name="participate_contribute_headline">Contribuisci attivamente</string>
     <string name="participate_contribute_irc_text">Unisciti alla chat su IRC: &lt;a href=\"%1$s\">#nextcloud-mobile&lt;/a></string>
     <string name="participate_contribute_forum_text">Aiuta gli altri sul &lt;a href=\"%1$s\">forum&lt;/a></string>
     <string name="participate_contribute_translate_text">&lt;a href=\"%1$s\">Traduci&lt;/a> l\'applicazione</string>
-    <string name="participate_contribute_github_text">Contribuisci come sviluppatore, vedi &lt;a href=\"https://github.com/nextcloud/android/blob/master/CONTRIBUTING.md\">CONTRIBUTING.md&lt;/a> per i dettagli</string>
+    <string name="participate_contribute_github_text">Contribuisci come sviluppatore, vedi &lt;a href=\"%1$s\">CONTRIBUTING.md&lt;/a> per i dettagli</string>
     <string name="move_to">Sposta in&#8230;</string>
     <string name="copy_to">Copia in&#8230;</string>
     <string name="choose_remote_folder">Scegli la cartella&#8230;</string>
     <string name="folder_sync_loading_folders">Caricamento cartelle&#8230;</string>
     <string name="folder_sync_no_results">Nessuna cartella di file multimediali trovata.</string>
-    <string name="folder_sync_preferences">Preferenze di caricamento automatico</string>
     <string name="folder_sync_settings">Impostazioni</string>
-    <string name="folder_sync_new_info">Il caricamento istantaneo è stato riscritto completamente. Vedi il menu principale e riconfigura il caricamento automatico. Ci dispiace per l\'inconveniente.\n\nGoditi le nuove ed estese capacità di caricamento automatico!</string>
     <string name="folder_sync_preferences_folder_path">Per %1$s</string>
     <plurals name="items_selected_count">
         <item quantity="one">%d selezionato</item>
@@ -553,7 +488,6 @@
 
     <string name="notifications_loading_activity">Caricamento notifiche in corso&#8230;</string>
     <string name="notifications_no_results_headline">Nessuna notifica</string>
-    <string name="upload_file_dialog_title">Digita il nome e il tipo del file da caricare</string>
     <string name="upload_file_dialog_filename">Nome file</string>
     <string name="upload_file_dialog_filetype">Tipo file</string>
     <string name="upload_file_dialog_filetype_snippet_text">File dl frammento di testo(.txt)</string>
@@ -569,8 +503,6 @@
 
     <!-- Welcome to Nc intro features -->
     <string name="welcome_feature_1_title">Un posto sicuro per tutti i tuoi dati</string>
-    <string name="welcome_feature_1_text">Accedi, condividi e proteggi i tuoi file a casa e nella tua azienda</string>
-
     <string name="welcome_feature_2_title">Account multipli</string>
     <string name="welcome_feature_2_text">Collega tutti i tuoi cloud</string>
 
@@ -579,11 +511,12 @@
 
     <string name="whats_new_skip">Salta</string>
 
+    <string name="fingerprint_scan_finger">Esegui la scansione del tuo dito</string>
     <string name="fingerprint_unknown">Dito non riconosciuto</string>
 
     <!-- User information -->
     <string name="user_info_full_name">Nome completo</string>
-    <string name="user_info_email">Posta elettronica</string>
+    <string name="user_info_email">Email</string>
     <string name="user_info_phone">Numero di telefono</string>
     <string name="user_info_address">Indirizzo</string>
     <string name="user_info_website">Sito web</string>
@@ -593,27 +526,32 @@
 
     <!-- Activities -->
     <string name="activities_no_results_headline">Ancora nessuna attività</string>
-    <string name="activities_no_results_message">Questo flusso mostrerà gli eventi come aggiunte, cambiamenti e condivisioni</string>
     <string name="webview_error">Si è verificato un errore</string>
     <string name="prefs_category_about">Informazioni</string>
 
-    <string name="actionbar_contacts">Backup contatti</string>
     <string name="contacts_restore_button">Ripristina ultimo backup</string>
     <string name="contacts_header_restore">Ripristino</string>
     <string name="contacts_header_backup">Backup</string>
     <string name="contacts_automatic_backup">Backup dei contatti</string>
     <string name="contacts_last_backup">Ultimo backup</string>
-    <string name="contacts_read_permission">Permesso di lettura dei contatti richiesto</string>
-    <string name="contacts_write_permission">Permesso di scrittura per i contatti richiesto</string>
+    <string name="contacts_read_permission">Permesso di lettura dell\'elenco dei contatti richiesto </string>
+    <string name="contacts_write_permission">Permesso di modifica dell\'elenco dei contatti richiesto </string>
     <string name="contactlist_title">Ripristina contatti</string>
     <string name="contaclist_restore_selected">Ripristina contatti selezionati</string>
-    <string name="contactlist_account_chooser_title">Scegli account per l\'importazione</string>
-    <string name="contactlist_no_permission">Nessun permesso, non è stato importato niente!</string>
+    <string name="contactlist_account_chooser_title">Scegli account da importare</string>
     <string name="contacts_preference_choose_date">Scegli data</string>
     <string name="contacts_preference_backup_never">mai</string>
     <string name="contacts_preferences_no_file_found">Nessun file trovato</string>
+    <string name="contacts_preferences_something_strange_happened">Non troviamo il tuo ultimo backup!</string>
+    <string name="contacts_preferences_backup_scheduled">Backup pianificato e partirà a breve</string>
+    <string name="contacts_preferences_import_scheduled">Importazione pianificata e partirà a breve</string>
+
     <!-- Notifications -->
     <string name="new_notification_received">Nuova notifica ricevuta</string>
+    <string name="drawer_logout">Esci</string>
+    <string name="privacy">Riservatezza</string>
+    <string name="file_not_found">File non trovato!</string>
 
+    <string name="folder_sync_folders">Configura cartelle</string>
 
-</resources>
+  </resources>

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

@@ -250,7 +250,6 @@
     <string name="activity_chooser_title">リンクを送信&#8230;</string>
     <string name="wait_for_tmp_copy_from_private_storage">プライベートストレージからファイルをコピー中</string>
     
-    <string name="oauth_check_onoff">oAuth2でログイン</string> 
     <string name="ssl_validator_header">サイトの識別子を確認できませんでした</string>
     <string name="ssl_validator_reason_cert_not_trusted">- サーバー証明書は信頼されていません</string>
     <string name="ssl_validator_reason_cert_expired">- サーバー証明書は有効期限切れです</string>

+ 17 - 12
src/main/res/values-nb-rNO/strings.xml

@@ -163,9 +163,9 @@
     <string name="uploader_upload_in_progress_content">%1$d%% Laster opp %2$s</string>
     <string name="uploader_upload_succeeded_ticker">Opplastet</string>
     <string name="uploader_upload_succeeded_content_single">%1$s lastet opp</string>
-    <string name="uploader_upload_failed_ticker">Opplasting feilet</string>
+    <string name="uploader_upload_failed_ticker">Opplasting mislyktes</string>
     <string name="uploader_upload_failed_content_single">Kunne ikke laste opp %1$s</string>
-    <string name="uploader_upload_failed_credentials_error">Opplasting feilet, du må logge inn på nytt</string>
+    <string name="uploader_upload_failed_credentials_error">Opplasting mislyktes, du må logge inn på nytt</string>
     <string name="uploads_view_title">Opplastinger</string>
     <string name="uploads_view_group_current_uploads">Nåværende</string>
     <string name="uploads_view_group_failed_uploads">Mislyktes (trykk for å prøve igjen)</string>
@@ -189,13 +189,13 @@
     <string name="downloader_download_in_progress_content">%1$d%% Laster ned %2$s</string>
     <string name="downloader_download_succeeded_ticker">Nedlastet</string>
     <string name="downloader_download_succeeded_content">%1$s lastet ned</string>
-    <string name="downloader_download_failed_ticker">Nedlasting feilet</string>
+    <string name="downloader_download_failed_ticker">Nedlasting mislyktes</string>
     <string name="downloader_download_failed_content">Kunne ikke laste ned %1$s</string>
     <string name="downloader_not_downloaded_yet">Ikke lastet ned enda</string>
     <string name="downloader_download_failed_credentials_error">Nedlasting mislyktes, du må logge inn på nytt</string>
     <string name="common_choose_account">Velg konto</string>
-    <string name="sync_fail_ticker">Synkronisering feilet</string>
-    <string name="sync_fail_ticker_unauthorized">Synkronisering feilet, du må logge inn på nytt</string>
+    <string name="sync_fail_ticker">Synkronisering mislyktes</string>
+    <string name="sync_fail_ticker_unauthorized">Synkronisering mislyktes, du må logge inn på nytt</string>
     <string name="sync_fail_content">Synkronisering av %1$s kunne ikke fullføres</string>
     <string name="sync_fail_content_unauthorized">Feil passord for %1$s</string>
     <string name="sync_conflicts_in_favourites_ticker">Konflikter funnet</string>
@@ -304,8 +304,8 @@
     <string name="activity_chooser_title">Send lenke til &#8230;</string>
     <string name="wait_for_tmp_copy_from_private_storage">Kopierer fil fra privat lager</string>
     
-    <string name="oauth_check_onoff">Logg inn med oAuth2</string> 
-    <string name="oauth_login_connection">Kobler til oAuth2 tjener...</string>    
+    <string name="oauth_check_onoff">Logg inn med OAuth2</string> 
+    <string name="oauth_login_connection">Kobler til OAuth2-tjener...</string>    
         
     <string name="ssl_validator_header">Identiteten til siden kunne ikke bekreftes</string>
     <string name="ssl_validator_reason_cert_not_trusted">- Tjenerens sertifikat er ikke til å stole på</string>
@@ -348,6 +348,7 @@
     <string name="instant_video_upload_on_charging">Last kun opp under lading</string>
     <string name="instant_upload_on_charging">Last kun opp under lading</string>
     <string name="instant_upload_path">/Direkteopplasting</string>
+    <string name="auto_upload_path">/Auto-opplasting</string>
     <string name="conflict_title">Filkonflikt</string>
     <string name="conflict_message">Hvilke filer ønsker du å beholder? Hvis du velger begge versjonene, får den lokale filen lagt til et tall i navnet.</string>
     <string name="conflict_keep_both">Behold begge</string>
@@ -418,11 +419,12 @@
     <string name="file_migration_failed_while_coping">FEIL: Under migrering</string>
     <string name="file_migration_failed_while_updating_index">FEIL: Under oppdatering av indeks</string>
 
+    <string name="file_migration_directory_already_exists">Datamappen finnes allerede. Velg en av disse:</string>
     <string name="file_migration_override_data_folder">Erstatt</string>
     <string name="file_migration_use_data_folder">Bruk</string>
 
     <string name="file_migration_source_not_readable_title">Målmappa er ikke lesbar!</string>
-    <string name="file_migration_source_not_readable">Ønsker du å endre lagringsstien til %1$s\n\nMerk: All data vil måtte lastes ned igjen.</string>
+    <string name="file_migration_source_not_readable">Ønsker du fremdeles å endre lagringssti til %1$s ?\n\nMerk: All data vil måtte lastes ned igjen.</string>
 
     <string name="prefs_category_accounts">Kontoer</string>
     <string name="prefs_add_account">Legg til en konto</string>
@@ -529,7 +531,7 @@
     <string name="edit_share_done">ferdig</string>
 
     <string name="action_retry_uploads">Nytt forsøk mislyktes</string>
-    <string name="action_clear_failed_uploads">Sletting feilet</string>
+    <string name="action_clear_failed_uploads">Sletting mislyktes</string>
     <string name="action_clear_successful_uploads">Sletting vellykket</string>
     <string name="action_clear_finished_uploads">Slett alle ferdige</string>
 
@@ -559,8 +561,8 @@
     <string name="participate_testing_version_text">Er du interessert i å hjelpe oss å teste ned neste versjonen?</string>
     <string name="participate_beta_headline">Test utvikler-versjonen</string>
     <string name="participate_beta_text">Dette inkluderer alle kommende funksjoner og er helt på kanten. Feil/feilmeldinger kan oppstå og i sådant fall, meld fra om dem til oss.</string>
-    <string name="participate_release_candidate_headline">Release candidate</string>
-    <string name="participate_release_candidate_text">Release candidate (RC) er en pakke av den kommende utgaven og er forventet å være stabil. Ved å teste denne med ditt oppsett vil kunne hjelpe oss å sikre dette. Meld deg på for testen i Play butikken eller se i versjonsseksjonen i F-Droid.</string>
+    <string name="participate_release_candidate_headline">Slippkandidat</string>
+    <string name="participate_release_candidate_text">Slippkandidat (RC) er en øyeblikkspakke av den kommende utgaven og er forventet å være stabil. Ved å teste denne med ditt oppsett hjelper du til å med dette. Meld deg på testing i Play-butikken eller se i seksjonen \"Versjon\" for programmet i F-Droid.</string>
     <string name="participate_contribute_headline">Bidra aktivt</string>
     <string name="participate_contribute_irc_text">Sludre med oss på IRC: &lt;a href=\"%1$s\">#nextcloud-mobile&lt;/a></string>
     <string name="participate_contribute_forum_text">Hjelp andre på vårt &lt;a href=\"%1$s\">forum&lt;/a></string>
@@ -583,7 +585,7 @@
     <string name="activity_list_loading_activity">Laster inn aktiviteter&#8230;</string>
     <string name="activity_list_no_results">Ingen aktiviteter funnet.</string>
 
-    <string name="notifications_loading_activity">Lsater inn varsler&#8230;</string>
+    <string name="notifications_loading_activity">Laster inn varsler&#8230;</string>
     <string name="notifications_no_results_headline">Ingen varsler</string>
     <string name="notifications_no_results_message">Kom innom senere og ta en titt.</string>
 
@@ -658,5 +660,8 @@
     <string name="drawer_logout">Utlogging</string>
     <string name="picture_set_as_no_app">Fant ikke noe program å sette bilder med.</string>
     <string name="privacy">Personvern</string>
+    <string name="file_not_found">Finner ikke filen!</string>
+
+    <string name="folder_sync_folders">Sett opp mapper</string>
 
   </resources>

+ 7 - 2
src/main/res/values-nl/strings.xml

@@ -349,6 +349,7 @@ Kies er eentje van een provider.</string>
     <string name="instant_video_upload_on_charging">Alleen uploaden bij opladen</string>
     <string name="instant_upload_on_charging">Alleen uploaden bij opladen</string>
     <string name="instant_upload_path">/InstantUpload</string>
+    <string name="auto_upload_path">/Automatisch uploaden</string>
     <string name="conflict_title">Bestandsconflict</string>
     <string name="conflict_message">Welke bestanden wil je bewaren? Als je beide versies selecteert zal het lokale bestand een volgnummer aan de naam toegevoegd krijgen.</string>
     <string name="conflict_keep_both">Beide bewaren</string>
@@ -419,6 +420,7 @@ Kies er eentje van een provider.</string>
     <string name="file_migration_failed_while_coping">FOUT: Tijdens migratie</string>
     <string name="file_migration_failed_while_updating_index">FOUT: Tijdens bijwerken index</string>
 
+    <string name="file_migration_directory_already_exists">Datamap bestaat al. Kies een van de volgende:</string>
     <string name="file_migration_override_data_folder">Vervangen</string>
     <string name="file_migration_use_data_folder">Gebruiken</string>
 
@@ -432,7 +434,7 @@ Kies er eentje van een provider.</string>
 
 	<string name="actionbar_logger">Logs</string>
 	<string name="log_send_history_button">Geschiedenis versturen</string>
-	<string name="log_send_no_mail_app">Geen applicatie gevonden voor het versturen van de logs. Installeer een e-mailapplicatie.</string>
+	<string name="log_send_no_mail_app">Geen applicatie gevonden voor het versturen van de logs. Installeer een email client.</string>
 	<string name="log_send_mail_subject">%1$s-Android-app-logs</string>
 	<string name="log_progress_dialog_text">Gegevens laden&#160;&#8230;</string>
 
@@ -621,7 +623,7 @@ Kies er eentje van een provider.</string>
 
     <!-- User information -->
     <string name="user_info_full_name">Volledige naam</string>
-    <string name="user_info_email">E-mailadres</string>
+    <string name="user_info_email">Email</string>
     <string name="user_info_phone">Telefoonnummer</string>
     <string name="user_info_address">Adres</string>
     <string name="user_info_website">Website</string>
@@ -661,5 +663,8 @@ Kies er eentje van een provider.</string>
     <string name="drawer_logout">Uitloggen</string>
     <string name="picture_set_as_no_app">Geen app gevonden om afbeelding in te stellen</string>
     <string name="privacy">Privacy</string>
+    <string name="file_not_found">Bestand niet gevonden!</string>
+
+    <string name="folder_sync_folders">Mappen instellen</string>
 
   </resources>

+ 4 - 0
src/main/res/values-pl/strings.xml

@@ -417,6 +417,7 @@
     <string name="file_migration_failed_while_coping">BŁĄD: Nieudana migracja</string>
     <string name="file_migration_failed_while_updating_index">BŁĄD: Nieudana aktualizacja indeksu</string>
 
+    <string name="file_migration_directory_already_exists">Katalog danych już istnieje. Wybierz jeden z poniższych:</string>
     <string name="file_migration_override_data_folder">Zamień</string>
     <string name="file_migration_use_data_folder">Użyj</string>
 
@@ -659,5 +660,8 @@
     <string name="drawer_logout">Wyloguj</string>
     <string name="picture_set_as_no_app">Nie znaleziono aplikacji do ustawienia obrazu!</string>
     <string name="privacy">Prywatność</string>
+    <string name="file_not_found">Nie odnaleziono pliku</string>
+
+    <string name="folder_sync_folders">Skonfiguruj foldery</string>
 
   </resources>

+ 8 - 3
src/main/res/values-pt-rBR/strings.xml

@@ -347,7 +347,8 @@
     <string name="instant_video_upload_on_wifi">Somente enviar vídeos por Wi-Fi</string>
     <string name="instant_video_upload_on_charging">Somente enviar quando carregando</string>
     <string name="instant_upload_on_charging">Somente enviar quando carregando</string>
-    <string name="instant_upload_path">/Upload automático</string>
+    <string name="instant_upload_path">/EnvioAutomático</string>
+    <string name="auto_upload_path">/Envio Automático</string>
     <string name="conflict_title">Conflito de arquivo</string>
     <string name="conflict_message">Quais arquivos você quer manter? Se você selecionar ambos, o arquivo local terá um número adicionado ao seu nome.</string>
     <string name="conflict_keep_both">Manter ambos</string>
@@ -418,11 +419,12 @@
     <string name="file_migration_failed_while_coping">ERRO: Falha durante a migração</string>
     <string name="file_migration_failed_while_updating_index">ERRO: Falha ao atualizar índice</string>
 
+    <string name="file_migration_directory_already_exists">Pasta Data já existe. Escolha uma das seguintes:</string>
     <string name="file_migration_override_data_folder">Substituir</string>
     <string name="file_migration_use_data_folder">Usar</string>
 
     <string name="file_migration_source_not_readable_title">Diretório fonte não legível!</string>
-    <string name="file_migration_source_not_readable">Você ainda quer mudar o caminho de armazenagem para %1$s?\n\nImportante: Todos os dados terão de ser baixados novamente.</string>
+    <string name="file_migration_source_not_readable">Quer realmente mudar o caminho de armazenamento para %1$s?\n\nAtenção: Todos os dados terão que ser baixados novamente.</string>
 
     <string name="prefs_category_accounts">Contas</string>
     <string name="prefs_add_account">Adicionar uma conta</string>
@@ -490,7 +492,7 @@
     <string name="upload_move_files">Mover o arquivo</string>
     <string name="select_all">Selecionar tudo</string>
 
-    <string name="pref_behaviour_entries_keep_file">mantido na pasta original</string>
+    <string name="pref_behaviour_entries_keep_file">Mantido na pasta original</string>
     <string name="pref_behaviour_entries_move">movido para a pasta aplicativos</string>
     <string name="pref_behaviour_entries_delete_file">excluído</string>
     <string name="prefs_storage_path">Caminho do armazenamento</string>
@@ -658,5 +660,8 @@
     <string name="drawer_logout">Sair</string>
     <string name="picture_set_as_no_app">Nenhum aplicativo encontrado para atribuir uma imagem!</string>
     <string name="privacy">Privacidade</string>
+    <string name="file_not_found">Arquivo não encontrado!</string>
+
+    <string name="folder_sync_folders">Configurar pastas</string>
 
   </resources>

+ 9 - 4
src/main/res/values-ru/strings.xml

@@ -93,9 +93,9 @@
     <string name="uploader_error_message_source_file_not_found">Файл для загрузки не был найден в положенном месте. Пожалуйста проверьте, существует ли файл.</string>
     <string name="uploader_error_message_source_file_not_copied">Произошла ошибка во время копирования этого файла во временный каталог. Пожалуйста попробуйте отправить его заново.</string>
     <string name="uploader_upload_files_behaviour">Настройка загрузки:</string>
-    <string name="uploader_upload_files_behaviour_move_to_nextcloud_folder">Перемещать файл в папку Nextcloud</string>
-    <string name="uploader_upload_files_behaviour_only_upload">Сохранять файл в исходном каталоге</string>
-    <string name="uploader_upload_files_behaviour_upload_and_delete_from_source">Удалять файл из исходного каталога</string>
+    <string name="uploader_upload_files_behaviour_move_to_nextcloud_folder">Переместить файл в папку Nextcloud</string>
+    <string name="uploader_upload_files_behaviour_only_upload">Сохранить файл в исходном каталоге</string>
+    <string name="uploader_upload_files_behaviour_upload_and_delete_from_source">Удалить файл из исходного каталога</string>
     <string name="file_list_seconds_ago">несколько секунд назад</string>
     <string name="file_list_empty_headline">Здесь нет файлов</string>
     <string name="file_list_empty">Загрузите что-нибудь или синхронизируйте со своими устройствами!</string>
@@ -114,7 +114,7 @@
     <string name="file_list_empty_headline_server_search_photos">Фотографии отсутствуют</string>
     <string name="file_list_empty_search">Искать в другом каталоге?</string>
     <string name="file_list_empty_recently_modified">Не найдно файлов, изменённых за последние 7 дней</string>
-    <string name="file_list_empty_recently_modified_filter">По запросу не найдно файлов, 
+    <string name="file_list_empty_recently_modified_filter">По запросу не найдено файлов, 
 изменённых за последние 7 дней!</string>
     <string name="file_list_empty_recently_added">Не найдено файлов, добавленных недавно</string>
     <string name="file_list_empty_recently_added_filter">По запросу не найдено файлов, добавленных недавно!</string>
@@ -350,6 +350,7 @@
     <string name="instant_video_upload_on_charging">Загружать только при зарядке</string>
     <string name="instant_upload_on_charging">Загружать только при зарядке</string>
     <string name="instant_upload_path">/Автозагрузка</string>
+    <string name="auto_upload_path">/Автозагрузка</string>
     <string name="conflict_title">Конфликт файлов</string>
     <string name="conflict_message">Какие файлы вы хотите сохранить? Если вы выберете обе версии, локальный файл будет иметь номер, добавленный к его имени.</string>
     <string name="conflict_keep_both">Сохранить оба</string>
@@ -420,6 +421,7 @@
     <string name="file_migration_failed_while_coping">ОШИБКА: Ошибка при миграции</string>
     <string name="file_migration_failed_while_updating_index">ОШИБКА: Ошибка при обновлении индекса</string>
 
+    <string name="file_migration_directory_already_exists">Каталог с данными уже существует. Выберите одно из действий:</string>
     <string name="file_migration_override_data_folder">Перезаписать</string>
     <string name="file_migration_use_data_folder">Использовать существующий</string>
 
@@ -662,5 +664,8 @@
     <string name="drawer_logout">Выйти</string>
     <string name="picture_set_as_no_app">Не надено приложения, с помощью которого можно установить изображение!</string>
     <string name="privacy">Конфиденциальность</string>
+    <string name="file_not_found">Файл не найден!</string>
+
+    <string name="folder_sync_folders">Настроить каталоги</string>
 
   </resources>

+ 1 - 4
src/main/res/values-sq/strings.xml

@@ -422,8 +422,6 @@ në 7 ditët e fundit.</string>
     <string name="file_migration_use_data_folder">Përdor ekzistueset</string>
 
     <string name="file_migration_source_not_readable_title">Direktoria burim nuk është lexueshme!</string>
-    <string name="file_migration_source_not_readable">Doni akoma ta ndryshoni rrugën e kujtesës në %1$s? \n\n Shënim: të gjitha të dhënat duhet të shkarkohen edhe njëherë.</string>
-
     <string name="prefs_category_accounts">Llogari</string>
     <string name="prefs_add_account">Shtoni llogari</string>
     <string name="drawer_manage_accounts">Menaxhoni llogaritë</string>
@@ -658,5 +656,4 @@ në 7 ditët e fundit.</string>
     <string name="drawer_logout">Dilni</string>
     <string name="picture_set_as_no_app">Nuk u gjet aplikacioni me të cilin vendoset foto!</string>
     <string name="privacy">Privatësi</string>
-
-  </resources>
+    </resources>

+ 12 - 7
src/main/res/values-tr/strings.xml

@@ -151,7 +151,7 @@
     <string name="common_loading">Yükleniyor&#8230;</string>
     <string name="common_unknown">bilinmiyor</string>
     <string name="common_error_unknown">Bilinmeyen sorun</string>
-    <string name="common_pending">Bekliyor</string>
+    <string name="common_pending">Bekleyen</string>
     <string name="about_title">Hakkında</string>
     <string name="change_password">Parola değiştir</string>
     <string name="delete_account">Hesabı kaldır</string>
@@ -304,7 +304,7 @@
     <string name="activity_chooser_title">Bağlantıyı gönder&#8230;</string>
     <string name="wait_for_tmp_copy_from_private_storage">Dosya kişisel depolamadan kopyalanıyor</string>
     
-    <string name="oauth_check_onoff">oAuth2 ile oturum açın</string> 
+    <string name="oauth_check_onoff">OAuth2 ile Oturum Aç</string> 
     <string name="oauth_login_connection">OAuth2 sunucusuna bağlanılıyor…</string>    
         
     <string name="ssl_validator_header">Sitenin kimliği doğrulanamadı</string>
@@ -348,6 +348,7 @@
     <string name="instant_video_upload_on_charging">Yalnız şarj edilirken yüklensin</string>
     <string name="instant_upload_on_charging">Yalnız şarj edilirken yüklensin</string>
     <string name="instant_upload_path">/AnındaYükle</string>
+    <string name="auto_upload_path">/Otomatik Yükleme</string>
     <string name="conflict_title">Dosya çakışması</string>
     <string name="conflict_message">Hangi dosyaları saklamak istiyorsunuz? Her ikisini de saklamayı seçerseniz yerel dosyanın adına bir sayı eklenecek.</string>
     <string name="conflict_keep_both">İkisini de sakla</string>
@@ -418,11 +419,12 @@
     <string name="file_migration_failed_while_coping">HATA: Aktarımda sorun çıktı</string>
     <string name="file_migration_failed_while_updating_index">HATA: Dizin güncellenirken sorun çıktı</string>
 
+    <string name="file_migration_directory_already_exists">Veri klasörü zaten var. Şunlardan birini seçin:</string>
     <string name="file_migration_override_data_folder">Değiştirilsin</string>
     <string name="file_migration_use_data_folder">Kullanılsın</string>
 
     <string name="file_migration_source_not_readable_title">Kaynak klasör okunabilir değil!</string>
-    <string name="file_migration_source_not_readable">Buna rağmen depolama konumunu %1$s olarak değiştirmek istediğinize emin misiniz?\n\nNot: Tüm verilerin yeniden indirilmesi gerekecek.</string>
+    <string name="file_migration_source_not_readable">Depolama yolunu gene de %1$s olarak değiştirmek istediğinizden emin misiniz?\n\nNot: Tüm verilerin yeniden indirilmesi gerekecek.</string>
 
     <string name="prefs_category_accounts">Hesaplar</string>
     <string name="prefs_add_account">Hesap ekle</string>
@@ -551,7 +553,7 @@
     <string name="actionbar_search">Arama</string>
     <string name="files_drop_not_supported">Bu bir Nextcloud özelliğidir, lütfen güncelleyin.</string>
     <string name="learn_more">Ayrıntılı bilgi alın</string>
-    <string name="drawer_folder_sync">Otomatik yükle</string>
+    <string name="drawer_folder_sync">Otomatik yükleme</string>
     <string name="drawer_participate">Katkıda bulunun</string>
     <string name="participate_testing_headline">Denememize yardımcı olun</string>
     <string name="participate_testing_bug_text">Bir hata mı buldunuz? Bir gariplik mi var?</string>
@@ -576,8 +578,8 @@
     <string name="folder_sync_new_info">Anında yükleme tamamen elden geçirildi. Lütfen ama menüye giderek otomatik yükleme ayarlarınızı yeniden yapın.\n\nYeni ve geliştirilmiş otomatik yükleme özellklerinin tadını çıkarın.</string>
     <string name="folder_sync_preferences_folder_path">%1$s için</string>
     <plurals name="items_selected_count">
-        <item quantity="one">%d seçili</item>
-        <item quantity="other">%d seçili</item>
+        <item quantity="one">%d seçilmiş</item>
+        <item quantity="other">%d seçilmiş</item>
     </plurals>
 
     <string name="activity_list_loading_activity">İşlemler yükleniyor&#8230;</string>
@@ -592,7 +594,7 @@
     <string name="upload_file_dialog_filetype">Dosya türü</string>
     <string name="upload_file_dialog_filetype_snippet_text">Kod parçası metin dosyası(.txt)</string>
     <string name="upload_file_dialog_filetype_internet_shortcut">İnternet kısayol dosya(%s)</string>
-    <string name="upload_file_dialog_filetype_googlemap_shortcut">Google haritalar kısayol dosya(%s)</string>
+    <string name="upload_file_dialog_filetype_googlemap_shortcut">Google haritalar kısayol dosya(%s)</string>
 
     <string name="storage_description_default">Varsayılan</string>
     <string name="storage_description_sd_no">SD kart  %1$d</string>
@@ -658,5 +660,8 @@
     <string name="drawer_logout">Oturumu Kapat</string>
     <string name="picture_set_as_no_app">Görselin ayarlanabileceği bir uygulama bulunamadı!</string>
     <string name="privacy">Gizlilik</string>
+    <string name="file_not_found">Dosya bulunamadı!</string>
+
+    <string name="folder_sync_folders">Klasör ayarları</string>
 
   </resources>

+ 1 - 5
src/main/res/values-zh-rCN/strings.xml

@@ -307,7 +307,6 @@
     <string name="activity_chooser_title">发送链接给 &#8230;</string>
     <string name="wait_for_tmp_copy_from_private_storage">从私有存储中拷贝文件</string>
     
-    <string name="oauth_check_onoff">使用oAuth2登陆</string> 
     <string name="oauth_login_connection">连接到OAuth 2服务器...</string>    
         
     <string name="ssl_validator_header">站点身份无法验证</string>
@@ -425,8 +424,6 @@
     <string name="file_migration_use_data_folder">使用</string>
 
     <string name="file_migration_source_not_readable_title">源目录不可读!</string>
-    <string name="file_migration_source_not_readable">您还想将存储路径更改为%1$s?\ n \ note:所有数据都必须重新下载。</string>
-
     <string name="prefs_category_accounts">账号</string>
     <string name="prefs_add_account">添加账号</string>
     <string name="drawer_manage_accounts">管理账号</string>
@@ -660,5 +657,4 @@
     <string name="drawer_logout">退出</string>
     <string name="picture_set_as_no_app">没有应用程序发现设置图片!</string>
     <string name="privacy">隐私</string>
-
-  </resources>
+    </resources>

+ 0 - 2
src/main/res/values/colors.xml

@@ -19,8 +19,6 @@
 -->
 <resources>
 
-    <color name="nc_blue">@color/primary</color>
-    <color name="nc_blue_accent">@color/color_accent</color>
     <color name="owncloud_blue_bright">#00ddff</color>
 
     <color name="list_item_lastmod_and_filesize_text">@color/secondaryTextColor</color>

+ 15 - 3
src/main/res/values/setup.xml

@@ -49,15 +49,15 @@
     <array name="whatsnew_urls"></array>
 
     <!-- Colors -->
-    <color name="primary">#1E2751</color>
-    <color name="primary_dark">#0e1227</color>
+    <color name="primary">#0082c9</color>
+    <color name="primary_dark">#006AA3</color>
     <color name="color_accent">#007CC2</color>
     <color name="login_text_color">@color/white</color>
     <color name="login_text_hint_color">#7fC0E3</color>
     <color name="login_background_color">#FFFFFF</color>
     <color name="login_logo_background_color">#FFFFFF</color>
     <color name="background_color">#FFFFFF</color>
-    <color name="primary_button_background_color">#1E2751</color>
+    <color name="primary_button_background_color">@color/color_accent</color>
     <color name="primary_button_text_color">@color/white</color>
     <color name="secondary_button_background_color">#D6D7D7</color>
     <color name="secondary_button_text_color">@color/black</color>
@@ -84,11 +84,16 @@
     <bool name="videos_enabled">false</bool>
     <bool name="show_drawer_logout">false</bool>
 
+    <!-- Various other options -->
+    <bool name="allow_profile_click">true</bool>
+
     <!-- Bottom toolbar -->
     <bool name="bottom_toolbar_enabled">false</bool>
 
     <!-- Help, imprint and feedback, and other things -->
     <bool name="fingerprint_enabled">true</bool>
+    <bool name="passcode_enabled">true</bool>
+    <bool name="show_hidden_files_enabled">true</bool>
     <bool name="davdroid_integration_enabled">true</bool>
     <bool name="help_enabled">true</bool>
     <string name="url_help">https://help.nextcloud.com/c/feature</string>
@@ -104,6 +109,13 @@
     <string name="url_app_download">"https://play.google.com/store/apps/details?id=com.nextcloud.client"</string>
     <string name="url_server_install">https://nextcloud.com/install</string>
 
+    <!-- synced folder light; if enabled: move to setting & global upload settings -->
+    <bool name="syncedFolder_light">false</bool>
+    <string name="syncedFolder_remote_folder">@string/auto_upload_path</string>
+    <bool name="syncedFolder_light_on_charging">false</bool>
+    <bool name="syncedFolder_light_use_subfolders">false</bool>
+    <string name="syncedFolder_light_upload_behaviour">FileUploader.LOCAL_BEHAVIOUR_FORGET</string>
+
     <!--Destination mail for sending log files -->
     <string name="mail_logger"></string>
 

+ 6 - 2
src/main/res/values/strings.xml

@@ -305,7 +305,7 @@
     <string name="activity_chooser_title">Send link to &#8230;</string>
     <string name="wait_for_tmp_copy_from_private_storage">Copying file from private storage</string>
     
-    <string name="oauth_check_onoff">Login with oAuth2</string> 
+    <string name="oauth_check_onoff">Log in with oAuth2</string> 
     <string name="oauth_login_connection">Connecting to OAuth 2 server…</string>    
         
     <string name="ssl_validator_header">The identity of the site could not be verified</string>
@@ -349,6 +349,7 @@
     <string name="instant_video_upload_on_charging">Only upload when charging</string>
     <string name="instant_upload_on_charging">Only upload when charging</string>
     <string name="instant_upload_path">/InstantUpload</string>
+    <string name="auto_upload_path">/Auto Upload</string>
     <string name="conflict_title">File conflict</string>
     <string name="conflict_message">Which files do you want to keep? If you select both versions, the local file will have a number appended to its name.</string>
     <string name="conflict_keep_both">Keep both</string>
@@ -424,7 +425,7 @@
     <string name="file_migration_use_data_folder">Use</string>
 
     <string name="file_migration_source_not_readable_title">Source directory not readable!</string>
-    <string name="file_migration_source_not_readable">Do you still want to change the storage path to %1$s?\n\nNote: all data will have to be downloaded again.</string>
+    <string name="file_migration_source_not_readable">Do you still want to change the storage path to %1$s?\n\nNote: All data will have to be downloaded again.</string>
 
     <string name="prefs_category_accounts">Accounts</string>
     <string name="prefs_add_account">Add account</string>
@@ -667,6 +668,9 @@
     <string name="drawer_logout">Logout</string>
     <string name="picture_set_as_no_app">No app found to set a picture with!</string>
     <string name="privacy">Privacy</string>
+    <string name="file_not_found">File not found!</string>
+
+    <string name="folder_sync_folders">Configure folders</string>
 
   <string name="empty" translatable="false"/>
 </resources>

+ 4 - 4
src/main/res/values/styles.xml

@@ -106,7 +106,7 @@
 
 	<style name="Button.Login" parent="Button">
 		<item name="colorButtonNormal">@color/white</item>
-		<item name="android:textColor">@color/nc_blue</item>
+		<item name="android:textColor">@color/primary</item>
 	</style>
 
 	<style name="Button.Borderless" parent="Base.Widget.AppCompat.Button.Borderless">
@@ -150,8 +150,8 @@
 	
 	<style name="Theme.ownCloud.Widget.ActionBar"
 		parent="style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
-		<item name="android:background">@drawable/main_header_bg</item>
-		<item name="background">@drawable/main_header_bg</item>
+		<item name="android:background">@color/primary</item>
+		<item name="background">@color/primary</item>
     	<item name="android:textColor">#ffffff</item>
     	<item name="android:shadowColor">#222222</item>
     	<item name="android:shadowRadius">1</item>
@@ -271,7 +271,7 @@
 	
 	<style name="OAuthDialog" parent="style/Theme.AppCompat.Light.Dialog.Alert">
 		<item name="windowNoTitle">false</item>
-		<item name="colorAccent">@color/nc_blue_accent</item>
+		<item name="colorAccent">@color/color_accent</item>
 	</style>    
 		
 	<color name="setup_text_hint">#777777</color>

+ 23 - 9
src/main/res/xml/preferences.xml

@@ -17,11 +17,25 @@
   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 -->
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
-	<PreferenceCategory android:title="@string/prefs_category_general">
-		<ListPreference
-			android:title="@string/prefs_storage_path"
-			android:key="storage_path" />
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+				  android:key="preference_screen">
+    <PreferenceCategory
+        android:title="@string/prefs_category_general"
+        android:key="general">
+        <ListPreference
+            android:title="@string/prefs_storage_path"
+            android:key="storage_path"/>
+	</PreferenceCategory>
+	<PreferenceCategory
+		android:title="@string/drawer_folder_sync"
+		android:key="folder_sync">
+		<android.preference.SwitchPreference
+			android:title="@string/auto_upload_on_wifi"
+			android:key="synced_folder_on_wifi"/>
+        <Preference
+			android:title="@string/folder_sync_folders"
+			android:id="@+id/folder_sync_folders"
+			android:key="folder_sync_folders"/>
 	</PreferenceCategory>
 
     <PreferenceCategory android:title="@string/prefs_category_instant_uploading" android:key="instant_uploading_category">
@@ -75,13 +89,13 @@
 		<Preference 		android:key="log_history"
 	                        android:title="@string/prefs_log_title_history"
 	                        android:summary="@string/prefs_log_summary_history"/ -->
-                        
+
     </PreferenceCategory>
 
 	<PreferenceCategory android:title="@string/prefs_category_details" android:key="details">
-		<android.preference.CheckBoxPreference android:title="@string/prefs_passcode" android:key="set_pincode" />
-		<android.preference.CheckBoxPreference android:title="@string/prefs_fingerprint" android:key="use_fingerprint" />
-		<android.preference.CheckBoxPreference android:title="@string/prefs_show_hidden_files" android:key="show_hidden_files" />
+		<android.preference.SwitchPreference android:title="@string/prefs_passcode" android:key="set_pincode" />
+		<android.preference.SwitchPreference android:title="@string/prefs_fingerprint" android:key="use_fingerprint" />
+		<android.preference.SwitchPreference android:title="@string/prefs_show_hidden_files" android:key="show_hidden_files" />
 	</PreferenceCategory>
 
 	<PreferenceCategory android:title="@string/prefs_category_more" android:key="more">

+ 17 - 5
src/modified/res/values/setup.xml

@@ -49,15 +49,15 @@
     <array name="whatsnew_urls"></array>
 
     <!-- Colors -->
-    <color name="primary">@color/nc_blue</color>
+    <color name="primary">#1E2751</color>
     <color name="primary_dark">#006AA3</color>
-    <color name="color_accent">@color/nc_blue_accent</color>
+    <color name="color_accent">#007CC2</color>
     <color name="login_text_color">@color/white</color>
     <color name="login_text_hint_color">#7fC0E3</color>
     <color name="login_background_color">#FFFFFF</color>
     <color name="login_logo_background_color">#FFFFFF</color>
     <color name="background_color">#FFFFFF</color>
-    <color name="primary_button_background_color">@color/nc_blue_accent</color>
+    <color name="primary_button_background_color">@color/color_accent</color>
     <color name="primary_button_text_color">@color/white</color>
     <color name="secondary_button_background_color">#D6D7D7</color>
     <color name="secondary_button_text_color">@color/black</color>
@@ -84,12 +84,17 @@
     <bool name="videos_enabled">true</bool>
     <bool name="show_drawer_logout">true</bool>
 
+    <!-- Various other options -->
+    <bool name="allow_profile_click">false</bool>
+
     <!-- Bottom toolbar -->
     <bool name="bottom_toolbar_enabled">true</bool>
 
     <!-- Help, imprint and feedback, and other things -->
-    <bool name="fingerprint_enabled">true</bool>
-    <bool name="davdroid_integration_enabled">true</bool>
+    <bool name="fingerprint_enabled">false</bool>
+    <bool name="passcode_enabled">false</bool>
+    <bool name="show_hidden_files_enabled">false</bool>
+    <bool name="davdroid_integration_enabled">false</bool>
     <bool name="help_enabled">true</bool>
     <string name="url_help">https://help.nextcloud.com/c/feature</string>
     <bool name="privacy_enabled">true</bool>
@@ -104,6 +109,13 @@
     <string name="url_app_download">"https://play.google.com/store/apps/details?id=com.nextcloud.client"</string>
     <string name="url_server_install">https://nextcloud.com/install</string>
 
+    <!-- synced folder light; if enabled: move to setting & global upload settings -->
+    <bool name="syncedFolder_light">true</bool>
+    <string name="syncedFolder_remote_folder">@string/instant_upload_path</string>
+    <bool name="syncedFolder_light_on_charging">false</bool>
+    <bool name="syncedFolder_light_use_subfolders">false</bool>
+    <string name="syncedFolder_light_upload_behaviour">FileUploader.LOCAL_BEHAVIOUR_FORGET</string>
+
     <!--Destination mail for sending log files -->
     <string name="mail_logger"></string>