浏览代码

Merge branch 'master' into serverUnavailable

Andy Scherzinger 6 年之前
父节点
当前提交
1dcff6b609
共有 94 个文件被更改,包括 582 次插入695 次删除
  1. 3 3
      .drone.yml
  2. 4 4
      build.gradle
  3. 1 0
      drawable_resources/ic_close.svg
  4. 1 0
      drawable_resources/ic_sync.svg
  5. 1 1
      scripts/analysis/analysis-wrapper.sh
  6. 1 1
      scripts/analysis/findbugs-results.txt
  7. 1 1
      scripts/analysis/lint-results.txt
  8. 11 0
      scripts/uploadReport.sh
  9. 1 1
      src/generic/fastlane/metadata/android/fr-FR/full_description.txt
  10. 1 1
      src/generic/fastlane/metadata/android/tr-TR/full_description.txt
  11. 1 6
      src/gplay/AndroidManifest.xml
  12. 5 3
      src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java
  13. 2 2
      src/main/java/com/owncloud/android/datamodel/MediaProvider.java
  14. 13 18
      src/main/java/com/owncloud/android/operations/CopyFileOperation.java
  15. 14 21
      src/main/java/com/owncloud/android/operations/MoveFileOperation.java
  16. 5 5
      src/main/java/com/owncloud/android/providers/UsersAndGroupsSearchProvider.java
  17. 0 155
      src/main/java/com/owncloud/android/ui/CustomPopup.java
  18. 6 1
      src/main/java/com/owncloud/android/ui/activity/StorageMigration.java
  19. 9 3
      src/main/java/com/owncloud/android/ui/activity/SyncedFoldersActivity.java
  20. 38 50
      src/main/java/com/owncloud/android/ui/activity/UploadListActivity.java
  21. 8 6
      src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java
  22. 181 119
      src/main/java/com/owncloud/android/ui/adapter/UploadListAdapter.java
  23. 2 2
      src/main/java/com/owncloud/android/ui/dialog/SamlWebViewDialog.java
  24. 2 2
      src/main/java/com/owncloud/android/ui/fragment/FileFragment.java
  25. 2 2
      src/main/java/com/owncloud/android/ui/fragment/LocalFileListFragment.java
  26. 23 24
      src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java
  27. 2 2
      src/main/java/com/owncloud/android/ui/fragment/SearchShareesFragment.java
  28. 2 1
      src/main/java/com/owncloud/android/ui/fragment/ShareFileFragment.java
  29. 13 6
      src/main/java/com/owncloud/android/ui/preview/PreviewImageFragment.java
  30. 2 4
      src/main/java/com/owncloud/android/ui/preview/PreviewImagePagerAdapter.java
  31. 17 10
      src/main/java/com/owncloud/android/utils/BitmapUtils.java
  32. 8 0
      src/main/res/drawable/ic_close.xml
  33. 8 0
      src/main/res/drawable/ic_sync.xml
  34. 22 4
      src/main/res/layout/upload_list_header.xml
  35. 1 1
      src/main/res/layout/upload_list_item.xml
  36. 4 20
      src/main/res/menu/upload_list_menu.xml
  37. 1 4
      src/main/res/values-b+en+001/strings.xml
  38. 0 3
      src/main/res/values-b+es+419/strings.xml
  39. 0 3
      src/main/res/values-bg-rBG/strings.xml
  40. 0 3
      src/main/res/values-ca/strings.xml
  41. 1 3
      src/main/res/values-cs-rCZ/strings.xml
  42. 5 7
      src/main/res/values-da/strings.xml
  43. 1 3
      src/main/res/values-de/strings.xml
  44. 1 4
      src/main/res/values-el/strings.xml
  45. 1 4
      src/main/res/values-eo/strings.xml
  46. 0 3
      src/main/res/values-es-rAR/strings.xml
  47. 0 3
      src/main/res/values-es-rCL/strings.xml
  48. 0 3
      src/main/res/values-es-rCO/strings.xml
  49. 0 3
      src/main/res/values-es-rCR/strings.xml
  50. 0 3
      src/main/res/values-es-rDO/strings.xml
  51. 0 3
      src/main/res/values-es-rEC/strings.xml
  52. 0 3
      src/main/res/values-es-rGT/strings.xml
  53. 0 3
      src/main/res/values-es-rHN/strings.xml
  54. 0 3
      src/main/res/values-es-rMX/strings.xml
  55. 0 3
      src/main/res/values-es-rNI/strings.xml
  56. 0 3
      src/main/res/values-es-rPA/strings.xml
  57. 0 3
      src/main/res/values-es-rPE/strings.xml
  58. 0 3
      src/main/res/values-es-rPR/strings.xml
  59. 0 3
      src/main/res/values-es-rPY/strings.xml
  60. 0 3
      src/main/res/values-es-rSV/strings.xml
  61. 0 3
      src/main/res/values-es-rUY/strings.xml
  62. 1 4
      src/main/res/values-es/strings.xml
  63. 1 2
      src/main/res/values-et-rEE/strings.xml
  64. 0 3
      src/main/res/values-eu/strings.xml
  65. 3 4
      src/main/res/values-fi-rFI/strings.xml
  66. 7 3
      src/main/res/values-fr/strings.xml
  67. 1 3
      src/main/res/values-gl/strings.xml
  68. 4 7
      src/main/res/values-hu-rHU/strings.xml
  69. 0 3
      src/main/res/values-in/strings.xml
  70. 1 4
      src/main/res/values-is/strings.xml
  71. 1 3
      src/main/res/values-it/strings.xml
  72. 6 3
      src/main/res/values-iw/strings.xml
  73. 24 3
      src/main/res/values-ja-rJP/strings.xml
  74. 0 3
      src/main/res/values-ka-rGE/strings.xml
  75. 0 3
      src/main/res/values-ko/strings.xml
  76. 0 3
      src/main/res/values-lt-rLT/strings.xml
  77. 31 25
      src/main/res/values-lv/strings.xml
  78. 5 4
      src/main/res/values-nb-rNO/strings.xml
  79. 1 3
      src/main/res/values-nl/strings.xml
  80. 1 3
      src/main/res/values-pl/strings.xml
  81. 1 3
      src/main/res/values-pt-rBR/strings.xml
  82. 1 4
      src/main/res/values-pt-rPT/strings.xml
  83. 1 4
      src/main/res/values-ru/strings.xml
  84. 1 4
      src/main/res/values-sk-rSK/strings.xml
  85. 0 3
      src/main/res/values-sl/strings.xml
  86. 0 3
      src/main/res/values-sq/strings.xml
  87. 1 4
      src/main/res/values-sr/strings.xml
  88. 1 4
      src/main/res/values-sv/strings.xml
  89. 7 3
      src/main/res/values-tr/strings.xml
  90. 1 2
      src/main/res/values-vi/strings.xml
  91. 1 4
      src/main/res/values-zh-rCN/strings.xml
  92. 53 4
      src/main/res/values-zh-rTW/strings.xml
  93. 1 2
      src/main/res/values/dims.xml
  94. 1 4
      src/main/res/values/strings.xml

+ 3 - 3
.drone.yml

@@ -15,13 +15,13 @@ pipeline:
         - emulator -avd android-27 -no-window -no-audio &
         - ./wait_for_emulator.sh
         - ./gradlew assembleGplayDebug
-        - ./gradlew jacocoTestGplayDebugUnitTestReport || scripts/uploadReport.sh $LOG_USERNAME $LOG_PASSWORD $DRONE_BUILD_NUMBER "Unit"
+        - ./gradlew jacocoTestGplayDebugUnitTestReport || scripts/uploadReport.sh $LOG_USERNAME $LOG_PASSWORD $DRONE_BUILD_NUMBER "Unit" $DRONE_PULL_REQUEST $GIT_USERNAME $GIT_TOKEN
         - ./gradlew installGplayDebugAndroidTest
-        - ./gradlew createGplayDebugCoverageReport || scripts/uploadReport.sh $LOG_USERNAME $LOG_PASSWORD $DRONE_BUILD_NUMBER "IT"
+        - ./gradlew createGplayDebugCoverageReport || scripts/uploadReport.sh $LOG_USERNAME $LOG_PASSWORD $DRONE_BUILD_NUMBER "IT" $DRONE_PULL_REQUEST $GIT_USERNAME $GIT_TOKEN
         - ./gradlew combinedTestReport
         - curl -o codecov.sh https://codecov.io/bash
         - bash ./codecov.sh -t fc506ba4-33c3-43e4-a760-aada38c24fd5
-        secrets: [ LOG_USERNAME, LOG_PASSWORD ]
+        secrets: [ LOG_USERNAME, LOG_PASSWORD, GIT_USERNAME, GIT_TOKEN ]
         when:
             matrix:
                 FLAVOR: Gplay

+ 4 - 4
build.gradle

@@ -128,8 +128,8 @@ android {
             versionDev {
                 applicationId "com.nextcloud.android.beta"
                 dimension "default"
-                versionCode 20190207
-                versionName "20190207"
+                versionCode 20190212
+                versionName "20190212"
             }
         }
     }
@@ -263,8 +263,8 @@ dependencies {
     //androidTestImplementation "com.android.support:support-annotations:${supportLibraryVersion}"
     implementation 'org.jetbrains:annotations:17.0.0'
 
-    compileOnly "org.projectlombok:lombok:1.18.4"
-    annotationProcessor "org.projectlombok:lombok:1.18.4"
+    compileOnly "org.projectlombok:lombok:1.18.6"
+    annotationProcessor "org.projectlombok:lombok:1.18.6"
 
     androidTestImplementation 'tools.fastlane:screengrab:1.2.0'
 

+ 1 - 0
drawable_resources/ic_close.svg

@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24"><path d="M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z" /></svg>

+ 1 - 0
drawable_resources/ic_sync.svg

@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="24" height="24" viewBox="0 0 24 24"><path d="M12,18A6,6 0 0,1 6,12C6,11 6.25,10.03 6.7,9.2L5.24,7.74C4.46,8.97 4,10.43 4,12A8,8 0 0,0 12,20V23L16,19L12,15M12,4V1L8,5L12,9V6A6,6 0 0,1 18,12C18,13 17.75,13.97 17.3,14.8L18.76,16.26C19.54,15.03 20,13.57 20,12A8,8 0 0,0 12,4Z" /></svg>

+ 1 - 1
scripts/analysis/analysis-wrapper.sh

@@ -74,7 +74,7 @@ else
     fi
 
     # add comment with results
-    lintResultNew=$(grep "Lint Report.* [0-9]* warnings" build/reports/lint/lint.html | cut -f2 -d':' |cut -f1 -d'<')
+    lintResultNew=$(grep "Lint Report.* [0-9]* warning" build/reports/lint/lint.html | cut -f2 -d':' |cut -f1 -d'<')
 
     lintErrorNew=$(echo $lintResultNew | grep "[0-9]* error" -o | cut -f1 -d" ")
     if ( [ -z $lintErrorNew ] ); then

+ 1 - 1
scripts/analysis/findbugs-results.txt

@@ -1 +1 @@
-526
+484

+ 1 - 1
scripts/analysis/lint-results.txt

@@ -1,2 +1,2 @@
 DO NOT TOUCH; GENERATED BY DRONE
-      <span class="mdl-layout-title">Lint Report: 69 warnings</span>
+      <span class="mdl-layout-title">Lint Report: 68 warnings</span>

+ 11 - 0
scripts/uploadReport.sh

@@ -1,5 +1,13 @@
 #!/usr/bin/env bash
 
+#1: LOG_USERNAME
+#2: LOG_PASSWORD
+#3: DRONE_BUILD_NUMBER
+#4: TYPE (IT or Unit)
+#5: DRONE_PULL_REQUEST
+#6: GIT_USERNAME
+#7: GIT_TOKEN
+
 URL=https://nextcloud.kaminsky.me/remote.php/webdav/android-integrationTests
 ID=$3
 USER=$1
@@ -16,4 +24,7 @@ find . -type d -exec curl -u $USER:$PASS -X MKCOL $URL/$ID/$(echo {} | sed s#\./
 find . -type f -exec curl -u $USER:$PASS -X PUT $URL/$ID/$(echo {} | sed s#\./##) --upload-file {} \;
 
 echo "Uploaded failing tests to https://www.kaminsky.me/nc-dev/android-integrationTests/$ID"
+
+curl -u $6:$7 -X POST https://api.github.com/repos/nextcloud/android/issues/$5/comments -d "{ \"body\" : \"$TYPE test failed: https://www.kaminsky.me/nc-dev/android-integrationTests/$ID \" }"
+
 exit 1

+ 1 - 1
src/generic/fastlane/metadata/android/fr-FR/full_description.txt

@@ -9,7 +9,7 @@ Fonctionnalitées :
 * Rester à jour avec vos notifications
 * Utilisation de plusieurs comptes
 * Accès sécurisé à vos données avec votre empreinte digitale ou code PIN
-* Intégration avec DAVdroid pour une synchronisation facile des contacts & agenda
+* Intégration avec DAVx5 (autrefois connu comme DAVdroid) pour une synchronisation facile des contacts & agenda
 
 S'il vous plait, rapporter les bogues à l'adresse suivante : https://github.com/nextcloud/android/issues et parler de cette application à l'adresse suivante : https://help.nextcloud.com/c/clients/android
 

+ 1 - 1
src/generic/fastlane/metadata/android/tr-TR/full_description.txt

@@ -9,7 +9,7 @@ Copyleft Nextcloud Android uygulaması, Nextcloud üzerindeki tüm dosyalarını
 * Bildirimler ile güncel kalma
 * Birden çok hesap desteği
 *Parmak izi ya da PIN kodu ile verilerinize güvenli erişme
-* Davdroid bütünleştirmesi ile takvim ve kişileri eşitleme
+* DAVx5 (eski adı DAVdroid) bütünleştirmesi ile takvim ve kişileri eşitleme
 
 Kullanımda karşılaşabileceğiniz hataları https://github.com/nextcloud/android/issues adresinden bildirebilir, uygulama hakkındaki konuları https://help.nextcloud.com/c/clients/android adresinde tartışabilirsiniz
 

+ 1 - 6
src/gplay/AndroidManifest.xml

@@ -84,12 +84,7 @@
         <service
             android:name="com.evernote.android.job.gcm.PlatformGcmService"
             android:enabled="true"
-            android:exported="true"
-            android:permission="com.google.android.gms.permission.BIND_NETWORK_TASK_SERVICE"
-            tools:replace="android:enabled">
-            <intent-filter>
-                <action android:name="com.google.android.gms.gcm.ACTION_TASK_READY"/>
-            </intent-filter>
+            tools:node="remove">
         </service>
 
     </application>

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

@@ -1305,9 +1305,11 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
         }
 
         /// be gentle with the user
-        IndeterminateProgressDialog dialog =
-                IndeterminateProgressDialog.newInstance(R.string.auth_trying_to_login, true);
-        dialog.show(getSupportFragmentManager(), WAIT_DIALOG_TAG);
+        IndeterminateProgressDialog dialog = IndeterminateProgressDialog.newInstance(R.string.auth_trying_to_login,
+                                                                                     true);
+        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
+        ft.add(dialog, WAIT_DIALOG_TAG);
+        ft.commitAllowingStateLoss();
 
         /// validate credentials accessing the root folder
         OwnCloudCredentials credentials = OwnCloudCredentialsFactory.newBasicCredentials(username, password);

+ 2 - 2
src/main/java/com/owncloud/android/datamodel/MediaProvider.java

@@ -118,8 +118,8 @@ public final class MediaProvider {
                         filePath = cursorImages.getString(cursorImages.getColumnIndexOrThrow(
                                 MediaStore.MediaColumns.DATA));
 
-                        // check if valid path
-                        if (filePath != null && filePath.lastIndexOf('/') > 0) {
+                        // check if valid path and file exists
+                        if (filePath != null && filePath.lastIndexOf('/') > 0 && new File(filePath).exists()) {
                             mediaFolder.filePaths.add(filePath);
                             mediaFolder.absolutePath = filePath.substring(0, filePath.lastIndexOf('/'));
                         }

+ 13 - 18
src/main/java/com/owncloud/android/operations/CopyFileOperation.java

@@ -31,11 +31,8 @@ import com.owncloud.android.operations.common.SyncOperation;
  */
 public class CopyFileOperation extends SyncOperation {
 
-    //private static final String TAG = MoveFileOperation.class.getSimpleName();
-
-    private String mSrcPath;
-    private String mTargetParentPath;
-    private OCFile mFile;
+    private String srcPath;
+    private String targetParentPath;
 
     /**
      * Constructor
@@ -44,13 +41,11 @@ public class CopyFileOperation extends SyncOperation {
      * @param targetParentPath Path to the folder where the file will be copied into.
      */
     public CopyFileOperation(String srcPath, String targetParentPath) {
-        mSrcPath = srcPath;
-        mTargetParentPath = targetParentPath;
-        if (!mTargetParentPath.endsWith(OCFile.PATH_SEPARATOR)) {
-            mTargetParentPath += OCFile.PATH_SEPARATOR;
+        this.srcPath = srcPath;
+        this.targetParentPath = targetParentPath;
+        if (!this.targetParentPath.endsWith(OCFile.PATH_SEPARATOR)) {
+            this.targetParentPath += OCFile.PATH_SEPARATOR;
         }
-
-        mFile = null;
     }
 
     /**
@@ -61,24 +56,24 @@ public class CopyFileOperation extends SyncOperation {
     @Override
     protected RemoteOperationResult run(OwnCloudClient client) {
         /// 1. check copy validity
-        if (mTargetParentPath.startsWith(mSrcPath)) {
+        if (targetParentPath.startsWith(srcPath)) {
             return new RemoteOperationResult(ResultCode.INVALID_COPY_INTO_DESCENDANT);
         }
-        mFile = getStorageManager().getFileByPath(mSrcPath);
-        if (mFile == null) {
+        OCFile file = getStorageManager().getFileByPath(srcPath);
+        if (file == null) {
             return new RemoteOperationResult(ResultCode.FILE_NOT_FOUND);
         }
 
         /// 2. remote copy
-        String targetPath = mTargetParentPath + mFile.getFileName();
-        if (mFile.isFolder()) {
+        String targetPath = targetParentPath + file.getFileName();
+        if (file.isFolder()) {
             targetPath += OCFile.PATH_SEPARATOR;
         }
-        RemoteOperationResult result = new CopyFileRemoteOperation(mSrcPath, targetPath, false).execute(client);
+        RemoteOperationResult result = new CopyFileRemoteOperation(srcPath, targetPath, false).execute(client);
 
         /// 3. local copy
         if (result.isSuccess()) {
-            getStorageManager().copyLocalFile(mFile, targetPath);
+            getStorageManager().copyLocalFile(file, targetPath);
         }
         // TODO handle ResultCode.PARTIAL_COPY_DONE in client Activity, for the moment
 

+ 14 - 21
src/main/java/com/owncloud/android/operations/MoveFileOperation.java

@@ -28,15 +28,12 @@ import com.owncloud.android.operations.common.SyncOperation;
 
 
 /**
- * Operation mmoving an {@link OCFile} to a different folder.
+ * Operation moving an {@link OCFile} to a different folder.
  */
 public class MoveFileOperation extends SyncOperation {
 
-    //private static final String TAG = MoveFileOperation.class.getSimpleName();
-
-    private String mSrcPath;
-    private String mTargetParentPath;
-    private OCFile mFile;
+    private String srcPath;
+    private String targetParentPath;
 
     /**
      * Constructor
@@ -45,13 +42,11 @@ public class MoveFileOperation extends SyncOperation {
      * @param targetParentPath  Path to the folder where the file will be moved into.
      */
     public MoveFileOperation(String srcPath, String targetParentPath) {
-        mSrcPath = srcPath;
-        mTargetParentPath = targetParentPath;
-        if (!mTargetParentPath.endsWith(OCFile.PATH_SEPARATOR)) {
-            mTargetParentPath += OCFile.PATH_SEPARATOR;
+        this.srcPath = srcPath;
+        this.targetParentPath = targetParentPath;
+        if (!this.targetParentPath.endsWith(OCFile.PATH_SEPARATOR)) {
+            this.targetParentPath += OCFile.PATH_SEPARATOR;
         }
-
-        mFile = null;
     }
 
     /**
@@ -62,29 +57,27 @@ public class MoveFileOperation extends SyncOperation {
     @Override
     protected RemoteOperationResult run(OwnCloudClient client) {
         /// 1. check move validity
-        if (mTargetParentPath.startsWith(mSrcPath)) {
+        if (targetParentPath.startsWith(srcPath)) {
             return new RemoteOperationResult(ResultCode.INVALID_MOVE_INTO_DESCENDANT);
         }
-        mFile = getStorageManager().getFileByPath(mSrcPath);
-        if (mFile == null) {
+        OCFile file = getStorageManager().getFileByPath(srcPath);
+        if (file == null) {
             return new RemoteOperationResult(ResultCode.FILE_NOT_FOUND);
         }
 
         /// 2. remote move
-        String targetPath = mTargetParentPath + mFile.getFileName();
-        if (mFile.isFolder()) {
+        String targetPath = targetParentPath + file.getFileName();
+        if (file.isFolder()) {
             targetPath += OCFile.PATH_SEPARATOR;
         }
-        RemoteOperationResult result = new MoveFileRemoteOperation(mSrcPath, targetPath, false).execute(client);
+        RemoteOperationResult result = new MoveFileRemoteOperation(srcPath, targetPath, false).execute(client);
 
         /// 3. local move
         if (result.isSuccess()) {
-            getStorageManager().moveLocalFile(mFile, targetPath, mTargetParentPath);
+            getStorageManager().moveLocalFile(file, targetPath, targetParentPath);
         }
         // TODO handle ResultCode.PARTIAL_MOVE_DONE in client Activity, for the moment
 
         return result;
     }
-
-
 }

+ 5 - 5
src/main/java/com/owncloud/android/providers/UsersAndGroupsSearchProvider.java

@@ -75,15 +75,15 @@ public class UsersAndGroupsSearchProvider extends ContentProvider {
     private static final int RESULTS_PER_PAGE = 50;
     private static final int REQUESTED_PAGE = 1;
 
-    public static String AUTHORITY;
+    static String AUTHORITY;
     public static String ACTION_SHARE_WITH;
 
     public static final String CONTENT = "content";
 
-    public static String DATA_USER;
-    public static String DATA_GROUP;
-    public static String DATA_ROOM;
-    public static String DATA_REMOTE;
+    static String DATA_USER;
+    static String DATA_GROUP;
+    static String DATA_ROOM;
+    static String DATA_REMOTE;
 
     private UriMatcher mUriMatcher;
 

+ 0 - 155
src/main/java/com/owncloud/android/ui/CustomPopup.java

@@ -1,155 +0,0 @@
-/**
- * ownCloud Android client application
- *
- * @author Lorensius. W. T
- * Copyright (C) 2011  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/>.
- */
-package com.owncloud.android.ui;
-
-import android.content.Context;
-import android.graphics.Rect;
-import android.graphics.drawable.BitmapDrawable;
-import android.graphics.drawable.Drawable;
-import android.view.Gravity;
-import android.view.LayoutInflater;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.View.OnTouchListener;
-import android.view.ViewGroup.LayoutParams;
-import android.view.WindowManager;
-import android.widget.PopupWindow;
-
-/**
- * Represents a custom PopupWindows
- */
-public class CustomPopup {
-    protected final View mAnchor;
-    protected final PopupWindow mWindow;
-    private View root;
-    private Drawable background;
-    protected final WindowManager mWManager;
-
-    public CustomPopup(View anchor) {
-        mAnchor = anchor;
-        mWindow = new PopupWindow(anchor.getContext());
-
-        mWindow.setTouchInterceptor(new OnTouchListener() {
-
-            public boolean onTouch(View v, MotionEvent event) {
-                if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
-                    CustomPopup.this.dismiss();
-                    return true;
-                }
-                return false;
-            }
-        });
-
-        mWManager = (WindowManager) anchor.getContext().getSystemService(Context.WINDOW_SERVICE);
-        onCreate();
-    }
-
-    public void onCreate() {
-        // not used at the moment
-    }
-
-    public void onShow() {
-        // not used at the moment
-    }
-
-    public void preShow() {
-        if (root == null) {
-            throw new IllegalStateException(
-                    "setContentView called with a view to display");
-        }
-
-        onShow();
-
-        if (background == null) {
-            mWindow.setBackgroundDrawable(new BitmapDrawable());
-        } else {
-            mWindow.setBackgroundDrawable(background);
-        }
-
-        mWindow.setWidth(WindowManager.LayoutParams.WRAP_CONTENT);
-        mWindow.setHeight(WindowManager.LayoutParams.WRAP_CONTENT);
-        mWindow.setTouchable(true);
-        mWindow.setFocusable(true);
-        mWindow.setOutsideTouchable(true);
-
-        mWindow.setContentView(root);
-    }
-
-    public void setBackgroundDrawable(Drawable background) {
-        this.background = background;
-    }
-
-    public void setContentView(View root) {
-        this.root = root;
-        mWindow.setContentView(root);
-    }
-
-    public void setContentView(int layoutResId) {
-        LayoutInflater inflater = (LayoutInflater) mAnchor.getContext()
-                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-        setContentView(inflater.inflate(layoutResId, null));
-    }
-
-    public void showDropDown() {
-        showDropDown(0, 0);
-    }
-
-    public void showDropDown(int x, int y) {
-        preShow();
-        mWindow.setAnimationStyle(android.R.style.Animation_Dialog);
-        mWindow.showAsDropDown(mAnchor, x, y);
-    }
-
-    public void showLikeQuickAction() {
-        showLikeQuickAction(0, 0);
-    }
-
-    public void showLikeQuickAction(int x, int y) {
-        preShow();
-
-        mWindow.setAnimationStyle(android.R.style.Animation_Dialog);
-        int[] location = new int[2];
-        mAnchor.getLocationOnScreen(location);
-
-        Rect anchorRect = new Rect(location[0], location[1], location[0]
-                + mAnchor.getWidth(), location[1] + mAnchor.getHeight());
-
-        root.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
-                LayoutParams.WRAP_CONTENT));
-        root.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
-
-        int rootW = root.getWidth();
-        int rootH = root.getHeight();
-        int screenW = mWManager.getDefaultDisplay().getWidth();
-
-        int xpos = ((screenW - rootW) / 2) + x;
-        int ypos = anchorRect.top - rootH + y;
-
-        if (rootH > anchorRect.top) {
-            ypos = anchorRect.bottom + y;
-        }
-        mWindow.showAtLocation(mAnchor, Gravity.NO_GRAVITY, xpos, ypos);
-    }
-
-    public void dismiss() {
-        mWindow.dismiss();
-    }
-
-}

+ 6 - 1
src/main/java/com/owncloud/android/ui/activity/StorageMigration.java

@@ -324,6 +324,11 @@ public class StorageMigration {
                 this.mResId = resId;
             }
 
+            MigrationException(int resId, Throwable t) {
+                super(t);
+                this.mResId = resId;
+            }
+
             private int getResId() { return mResId; }
         }
 
@@ -433,7 +438,7 @@ public class StorageMigration {
                 manager.migrateStoredFiles(mStorageSource, mStorageTarget);
             } catch (Exception e) {
                 Log_OC.e(TAG,e.getMessage(),e);
-                throw new MigrationException(R.string.file_migration_failed_while_updating_index);
+                throw new MigrationException(R.string.file_migration_failed_while_updating_index, e);
             }
         }
 

+ 9 - 3
src/main/java/com/owncloud/android/ui/activity/SyncedFoldersActivity.java

@@ -93,8 +93,8 @@ import static com.owncloud.android.datamodel.SyncedFolderDisplayItem.UNPERSISTED
 public class SyncedFoldersActivity extends FileActivity implements SyncedFolderAdapter.ClickListener,
         SyncedFolderPreferencesDialogFragment.OnSyncedFolderPreferenceListener {
 
-    public static final String[] PRIORITIZED_FOLDERS = new String[]{"Camera", "Screenshots"};
-    public static final List<String> SPECIAL_MANUFACTURER = Arrays.asList("Samsung", "Huawei", "Xiaomi");
+    private static final String[] PRIORITIZED_FOLDERS = new String[]{"Camera", "Screenshots"};
+    private static final List<String> SPECIAL_MANUFACTURER = Arrays.asList("Samsung", "Huawei", "Xiaomi");
     public static final String EXTRA_SHOW_SIDEBAR = "SHOW_SIDEBAR";
     private static final String SYNCED_FOLDER_PREFERENCES_DIALOG_TAG = "SYNCED_FOLDER_PREFERENCES_DIALOG";
     private static final String TAG = SyncedFoldersActivity.class.getSimpleName();
@@ -226,7 +226,13 @@ public class SyncedFoldersActivity extends FileActivity implements SyncedFolderA
         Account currentAccount = AccountUtils.getCurrentOwnCloudAccount(this);
         for (SyncedFolder syncedFolder : syncedFolderArrayList) {
             if (currentAccount != null && syncedFolder.getAccount().equals(currentAccount.name)) {
-                currentAccountSyncedFoldersList.add(syncedFolder);
+
+                // delete non-existing & disabled synced folders
+                if (!new File(syncedFolder.getLocalPath()).exists() && !syncedFolder.isEnabled()) {
+                    mSyncedFolderProvider.deleteSyncedFolder(syncedFolder.getId());
+                } else {
+                    currentAccountSyncedFoldersList.add(syncedFolder);
+                }
             }
         }
 

+ 38 - 50
src/main/java/com/owncloud/android/ui/activity/UploadListActivity.java

@@ -37,6 +37,8 @@ import android.view.View;
 import android.widget.ImageView;
 import android.widget.TextView;
 
+import com.evernote.android.job.Job;
+import com.evernote.android.job.JobManager;
 import com.evernote.android.job.JobRequest;
 import com.evernote.android.job.util.support.PersistableBundleCompat;
 import com.google.android.material.bottomnavigation.BottomNavigationView;
@@ -56,6 +58,8 @@ import com.owncloud.android.utils.DisplayUtils;
 import com.owncloud.android.utils.FilesSyncHelper;
 import com.owncloud.android.utils.ThemeUtils;
 
+import java.util.Set;
+
 import androidx.recyclerview.widget.GridLayoutManager;
 import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
 import butterknife.BindString;
@@ -72,14 +76,12 @@ public class UploadListActivity extends FileActivity {
 
     private static final String TAG = UploadListActivity.class.getSimpleName();
 
-    private UploadMessagesReceiver mUploadMessagesReceiver;
+    private UploadsStorageManager uploadStorageManager;
 
-    private Menu menu;
+    private UploadMessagesReceiver uploadMessagesReceiver;
 
     private UploadListAdapter uploadListAdapter;
 
-    private UploadsStorageManager uploadStorageManager;
-
     public SwipeRefreshLayout swipeListRefreshLayout;
 
     @BindView(R.id.empty_list_view_text)
@@ -183,6 +185,25 @@ public class UploadListActivity extends FileActivity {
     }
 
     private void refresh() {
+        // scan for missing auto uploads files
+        Set<Job> jobs = JobManager.instance().getAllJobsForTag(FilesSyncJob.TAG);
+
+        if (jobs.isEmpty()) {
+            PersistableBundleCompat persistableBundleCompat = new PersistableBundleCompat();
+            persistableBundleCompat.putBoolean(FilesSyncJob.OVERRIDE_POWER_SAVING, true);
+            new JobRequest.Builder(FilesSyncJob.TAG)
+                .setExact(1_000L)
+                .setUpdateCurrent(false)
+                .setExtras(persistableBundleCompat)
+                .build()
+                .schedule();
+        }
+
+        // retry failed uploads
+        FileUploader.UploadRequester requester = new FileUploader.UploadRequester();
+        new Thread(() -> requester.retryFailedUploads(this, null, null)).start();
+
+        // update UI
         uploadListAdapter.loadUploadItemsFromDb();
         swipeListRefreshLayout.setRefreshing(false);
     }
@@ -195,12 +216,12 @@ public class UploadListActivity extends FileActivity {
         setDrawerMenuItemChecked(R.id.nav_uploads);
 
         // Listen for upload messages
-        mUploadMessagesReceiver = new UploadMessagesReceiver();
+        uploadMessagesReceiver = new UploadMessagesReceiver();
         IntentFilter uploadIntentFilter = new IntentFilter();
         uploadIntentFilter.addAction(FileUploader.getUploadsAddedMessage());
         uploadIntentFilter.addAction(FileUploader.getUploadStartMessage());
         uploadIntentFilter.addAction(FileUploader.getUploadFinishMessage());
-        registerReceiver(mUploadMessagesReceiver, uploadIntentFilter);
+        registerReceiver(uploadMessagesReceiver, uploadIntentFilter);
 
         Log_OC.v(TAG, "onResume() end");
 
@@ -209,14 +230,22 @@ public class UploadListActivity extends FileActivity {
     @Override
     protected void onPause() {
         Log_OC.v(TAG, "onPause() start");
-        if (mUploadMessagesReceiver != null) {
-            unregisterReceiver(mUploadMessagesReceiver);
-            mUploadMessagesReceiver = null;
+        if (uploadMessagesReceiver != null) {
+            unregisterReceiver(uploadMessagesReceiver);
+            uploadMessagesReceiver = null;
         }
         super.onPause();
         Log_OC.v(TAG, "onPause() end");
     }
 
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        MenuInflater inflater = getMenuInflater();
+        inflater.inflate(R.menu.upload_list_menu, menu);
+
+        return true;
+    }
+
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
         boolean retval = true;
@@ -228,43 +257,11 @@ public class UploadListActivity extends FileActivity {
                     openDrawer();
                 }
                 break;
-
-            case R.id.action_retry_uploads:
-                FileUploader.UploadRequester requester = new FileUploader.UploadRequester();
-
-                new Thread(() -> requester.retryFailedUploads(this, null, null)).start();
-
-                if (menu != null) {
-                    menu.removeItem(R.id.action_retry_uploads);
-                }
-                break;
-
             case R.id.action_clear_failed_uploads:
                 uploadStorageManager.clearFailedButNotDelayedUploads();
                 uploadListAdapter.loadUploadItemsFromDb();
                 break;
 
-            case R.id.action_clear_successfull_uploads:
-                uploadStorageManager.clearSuccessfulUploads();
-                uploadListAdapter.loadUploadItemsFromDb();
-                break;
-
-            case R.id.action_force_rescan:
-                PersistableBundleCompat persistableBundleCompat = new PersistableBundleCompat();
-                persistableBundleCompat.putBoolean(FilesSyncJob.OVERRIDE_POWER_SAVING, true);
-                new JobRequest.Builder(FilesSyncJob.TAG)
-                        .setExact(1_000L)
-                        .setUpdateCurrent(false)
-                        .setExtras(persistableBundleCompat)
-                        .build()
-                        .schedule();
-
-                if (menu != null) {
-                    menu.removeItem(R.id.action_force_rescan);
-                }
-
-                break;
-
             default:
                 retval = super.onOptionsItemSelected(item);
         }
@@ -272,15 +269,6 @@ public class UploadListActivity extends FileActivity {
         return retval;
     }
 
-    @Override
-    public boolean onCreateOptionsMenu(Menu menu) {
-        MenuInflater inflater = getMenuInflater();
-        inflater.inflate(R.menu.upload_list_menu, menu);
-        this.menu = menu;
-
-        return true;
-    }
-
     @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         super.onActivityResult(requestCode, resultCode, data);

+ 8 - 6
src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java

@@ -456,17 +456,19 @@ public class OCFileListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
         int foldersCount = 0;
         int count = mFiles.size();
         OCFile file;
+        final boolean showHiddenFiles = PreferenceManager.showHiddenFilesEnabled(mContext);
         for (int i = 0; i < count; i++) {
             file = getItem(i);
             if (file.isFolder()) {
                 foldersCount++;
             } else {
-                if (!file.isHidden()) {
+                if (!file.isHidden() || showHiddenFiles) {
                     filesCount++;
                 }
             }
         }
 
+
         return generateFooterText(filesCount, foldersCount);
     }
 
@@ -584,17 +586,17 @@ public class OCFileListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
 
         // early exit
         if (objects.size() > 0 && mStorageManager != null) {
-            if (searchType.equals(ExtendedListFragment.SearchType.SHARED_FILTER)) {
+            if (searchType == ExtendedListFragment.SearchType.SHARED_FILTER) {
                 parseShares(objects);
             } else {
                 parseVirtuals(objects, searchType);
             }
         }
 
-        if (!searchType.equals(ExtendedListFragment.SearchType.PHOTO_SEARCH) &&
-                !searchType.equals(ExtendedListFragment.SearchType.PHOTOS_SEARCH_FILTER) &&
-                !searchType.equals(ExtendedListFragment.SearchType.RECENTLY_MODIFIED_SEARCH) &&
-                !searchType.equals(ExtendedListFragment.SearchType.RECENTLY_MODIFIED_SEARCH_FILTER)) {
+        if (searchType != ExtendedListFragment.SearchType.PHOTO_SEARCH &&
+                searchType != ExtendedListFragment.SearchType.PHOTOS_SEARCH_FILTER &&
+                searchType != ExtendedListFragment.SearchType.RECENTLY_MODIFIED_SEARCH &&
+                searchType != ExtendedListFragment.SearchType.RECENTLY_MODIFIED_SEARCH_FILTER) {
             FileSortOrder sortOrder = PreferenceManager.getSortOrderByFolder(mContext, folder);
             mFiles = sortOrder.sortCloudFiles(mFiles);
         } else {

+ 181 - 119
src/main/java/com/owncloud/android/ui/adapter/UploadListAdapter.java

@@ -58,41 +58,80 @@ import java.util.Arrays;
 import java.util.Comparator;
 
 import androidx.annotation.NonNull;
+import butterknife.BindView;
+import butterknife.ButterKnife;
 
 /**
  * This Adapter populates a ListView with following types of uploads: pending,active, completed. Filtering possible.
  */
 public class UploadListAdapter extends SectionedRecyclerViewAdapter<SectionedViewHolder> {
-
     private static final String TAG = UploadListAdapter.class.getSimpleName();
 
-    private ProgressListener mProgressListener;
-
-    private FileActivity mParentActivity;
-
-    private UploadsStorageManager mUploadsStorageManager;
-
-    private UploadGroup[] mUploadGroups;
+    private ProgressListener progressListener;
+    private FileActivity parentActivity;
+    private UploadsStorageManager uploadsStorageManager;
+    private UploadGroup[] uploadGroups;
 
     @Override
     public int getSectionCount() {
-        return mUploadGroups.length;
+        return uploadGroups.length;
     }
 
     @Override
     public int getItemCount(int section) {
-        return mUploadGroups[section].getItems().length;
+        return uploadGroups[section].getItems().length;
     }
 
     @Override
     public void onBindHeaderViewHolder(SectionedViewHolder holder, int section, boolean expanded) {
         HeaderViewHolder headerViewHolder = (HeaderViewHolder) holder;
 
-        UploadGroup group = mUploadGroups[section];
+        UploadGroup group = uploadGroups[section];
+
+        headerViewHolder.title.setText(String.format(parentActivity.getString(R.string.uploads_view_group_header),
+                                                     group.getGroupName(), group.getGroupItemCount()));
+        headerViewHolder.title.setTextColor(ThemeUtils.primaryAccentColor(parentActivity));
+
+        headerViewHolder.title.setOnClickListener(v -> toggleSectionExpanded(section));
+
+        switch (group.type) {
+            case CURRENT:
+                headerViewHolder.action.setImageResource(R.drawable.ic_close);
+                break;
+            case FINISHED:
+                headerViewHolder.action.setImageResource(R.drawable.ic_close);
+                break;
+            case FAILED:
+                headerViewHolder.action.setImageResource(R.drawable.ic_sync);
+                break;
+        }
+
+        headerViewHolder.action.setOnClickListener(v -> {
+            switch (group.type) {
+                case CURRENT:
+                    FileUploader.FileUploaderBinder uploaderBinder = parentActivity.getFileUploaderBinder();
+
+                    if (uploaderBinder != null) {
+                        for (OCUpload upload : group.getItems()) {
+                            uploaderBinder.cancel(upload);
+                        }
+                    }
+                    break;
+                case FINISHED:
+                    uploadsStorageManager.clearSuccessfulUploads();
+                    break;
+                case FAILED:
+                    new Thread(() -> new FileUploader.UploadRequester()
+                        .retryFailedUploads(parentActivity, null, null)).start();
+                    break;
+
+                default:
+                    // do nothing
+                    break;
+            }
 
-        headerViewHolder.title.setText(String.format(mParentActivity.getString(R.string.uploads_view_group_header),
-                group.getGroupName(), group.getGroupItemCount()));
-        headerViewHolder.title.setTextColor(ThemeUtils.primaryAccentColor(mParentActivity));
+            loadUploadItemsFromDb();
+        });
     }
 
     @Override
@@ -100,33 +139,36 @@ public class UploadListAdapter extends SectionedRecyclerViewAdapter<SectionedVie
         // not needed
     }
 
-    public UploadListAdapter(FileActivity parentActivity) {
+    public UploadListAdapter(FileActivity fileActivity) {
         Log_OC.d(TAG, "UploadListAdapter");
-        mParentActivity = parentActivity;
-        mUploadsStorageManager = new UploadsStorageManager(mParentActivity.getContentResolver(),
-                parentActivity.getApplicationContext());
-        mUploadGroups = new UploadGroup[3];
+        parentActivity = fileActivity;
+        uploadsStorageManager = new UploadsStorageManager(parentActivity.getContentResolver(),
+                                                          parentActivity.getApplicationContext());
+        uploadGroups = new UploadGroup[3];
 
         shouldShowHeadersForEmptySections(false);
 
-        mUploadGroups[0] = new UploadGroup(mParentActivity.getString(R.string.uploads_view_group_current_uploads)) {
+        uploadGroups[0] = new UploadGroup(Type.CURRENT,
+                                          parentActivity.getString(R.string.uploads_view_group_current_uploads)) {
             @Override
             public void refresh() {
-                fixAndSortItems(mUploadsStorageManager.getCurrentAndPendingUploadsForCurrentAccount());
+                fixAndSortItems(uploadsStorageManager.getCurrentAndPendingUploadsForCurrentAccount());
             }
         };
 
-        mUploadGroups[1] = new UploadGroup(mParentActivity.getString(R.string.uploads_view_group_failed_uploads)) {
+        uploadGroups[1] = new UploadGroup(Type.FAILED,
+                                          parentActivity.getString(R.string.uploads_view_group_failed_uploads)) {
             @Override
             public void refresh() {
-                fixAndSortItems(mUploadsStorageManager.getFailedButNotDelayedUploadsForCurrentAccount());
+                fixAndSortItems(uploadsStorageManager.getFailedButNotDelayedUploadsForCurrentAccount());
             }
         };
 
-        mUploadGroups[2] = new UploadGroup(mParentActivity.getString(R.string.uploads_view_group_finished_uploads)) {
+        uploadGroups[2] = new UploadGroup(Type.FINISHED,
+                                          parentActivity.getString(R.string.uploads_view_group_finished_uploads)) {
             @Override
             public void refresh() {
-                fixAndSortItems(mUploadsStorageManager.getFinishedUploadsForCurrentAccount());
+                fixAndSortItems(uploadsStorageManager.getFinishedUploadsForCurrentAccount());
             }
         };
         loadUploadItemsFromDb();
@@ -136,7 +178,7 @@ public class UploadListAdapter extends SectionedRecyclerViewAdapter<SectionedVie
     public void onBindViewHolder(SectionedViewHolder holder, int section, int relativePosition, int absolutePosition) {
         ItemViewHolder itemViewHolder = (ItemViewHolder) holder;
 
-        OCUpload item = mUploadGroups[section].getItem(relativePosition);
+        OCUpload item = uploadGroups[section].getItem(relativePosition);
 
         itemViewHolder.name.setText(item.getLocalPath());
 
@@ -161,14 +203,14 @@ public class UploadListAdapter extends SectionedRecyclerViewAdapter<SectionedVie
 
         // upload date
         long updateTime = item.getUploadEndTimestamp();
-        CharSequence dateString = DisplayUtils.getRelativeDateTimeString(mParentActivity, updateTime,
-                DateUtils.SECOND_IN_MILLIS, DateUtils.WEEK_IN_MILLIS, 0);
+        CharSequence dateString = DisplayUtils.getRelativeDateTimeString(parentActivity, updateTime,
+                                                                         DateUtils.SECOND_IN_MILLIS, DateUtils.WEEK_IN_MILLIS, 0);
         itemViewHolder.date.setText(dateString);
 
-        Account account = AccountUtils.getOwnCloudAccountByName(mParentActivity, item.getAccountName());
+        Account account = AccountUtils.getOwnCloudAccountByName(parentActivity, item.getAccountName());
         if (account != null) {
-            itemViewHolder.account.setText(DisplayUtils.getAccountNameDisplayText(mParentActivity, account,
-                    account.name, item.getAccountName()));
+            itemViewHolder.account.setText(DisplayUtils.getAccountNameDisplayText(parentActivity, account,
+                                                                                  account.name, item.getAccountName()));
         } else {
             itemViewHolder.account.setText(item.getAccountName());
         }
@@ -187,31 +229,31 @@ public class UploadListAdapter extends SectionedRecyclerViewAdapter<SectionedVie
         switch (item.getUploadStatus()) {
             case UPLOAD_IN_PROGRESS:
                 ThemeUtils.colorHorizontalProgressBar(itemViewHolder.progressBar,
-                        ThemeUtils.primaryAccentColor(mParentActivity));
+                                                      ThemeUtils.primaryAccentColor(parentActivity));
                 itemViewHolder.progressBar.setProgress(0);
                 itemViewHolder.progressBar.setVisibility(View.VISIBLE);
 
-                FileUploader.FileUploaderBinder binder = mParentActivity.getFileUploaderBinder();
+                FileUploader.FileUploaderBinder binder = parentActivity.getFileUploaderBinder();
                 if (binder != null) {
                     if (binder.isUploadingNow(item)) {
                         // really uploading, so...
                         // ... unbind the old progress bar, if any; ...
-                        if (mProgressListener != null) {
+                        if (progressListener != null) {
                             binder.removeDatatransferProgressListener(
-                                    mProgressListener,
-                                    mProgressListener.getUpload()   // the one that was added
+                                progressListener,
+                                progressListener.getUpload()   // the one that was added
                             );
                         }
                         // ... then, bind the current progress bar to listen for updates
-                        mProgressListener = new ProgressListener(item, itemViewHolder.progressBar);
-                        binder.addDatatransferProgressListener(mProgressListener, item);
+                        progressListener = new ProgressListener(item, itemViewHolder.progressBar);
+                        binder.addDatatransferProgressListener(progressListener, item);
                     } else {
                         // not really uploading; stop listening progress if view is reused!
-                        if (mProgressListener != null && mProgressListener.isWrapping(itemViewHolder.progressBar)) {
-                            binder.removeDatatransferProgressListener(mProgressListener,
-                                    mProgressListener.getUpload()   // the one that was added
+                        if (progressListener != null && progressListener.isWrapping(itemViewHolder.progressBar)) {
+                            binder.removeDatatransferProgressListener(progressListener,
+                                                                      progressListener.getUpload()   // the one that was added
                             );
-                            mProgressListener = null;
+                            progressListener = null;
                         }
                     }
                 } else {
@@ -239,7 +281,7 @@ public class UploadListAdapter extends SectionedRecyclerViewAdapter<SectionedVie
             itemViewHolder.button.setImageResource(R.drawable.ic_action_cancel_grey);
             itemViewHolder.button.setVisibility(View.VISIBLE);
             itemViewHolder.button.setOnClickListener(v -> {
-                FileUploader.FileUploaderBinder uploaderBinder = mParentActivity.getFileUploaderBinder();
+                FileUploader.FileUploaderBinder uploaderBinder = parentActivity.getFileUploaderBinder();
                 if (uploaderBinder != null) {
                     uploaderBinder.cancel(item);
                     loadUploadItemsFromDb();
@@ -251,7 +293,7 @@ public class UploadListAdapter extends SectionedRecyclerViewAdapter<SectionedVie
             itemViewHolder.button.setImageResource(R.drawable.ic_action_delete_grey);
             itemViewHolder.button.setVisibility(View.VISIBLE);
             itemViewHolder.button.setOnClickListener(v -> {
-                mUploadsStorageManager.removeUpload(item);
+                uploadsStorageManager.removeUpload(item);
                 loadUploadItemsFromDb();
             });
 
@@ -263,17 +305,17 @@ public class UploadListAdapter extends SectionedRecyclerViewAdapter<SectionedVie
 
         // click on item
         if (item.getUploadStatus() == UploadStatus.UPLOAD_FAILED) {
-            if (UploadResult.CREDENTIAL_ERROR.equals(item.getLastResult())) {
+            if (UploadResult.CREDENTIAL_ERROR == item.getLastResult()) {
                 itemViewHolder.itemLayout.setOnClickListener(v ->
-                        mParentActivity.getFileOperationsHelper().checkCurrentCredentials(
-                                item.getAccount(mParentActivity)));
+                                                                 parentActivity.getFileOperationsHelper().checkCurrentCredentials(
+                                                                     item.getAccount(parentActivity)));
             } else {
                 // not a credentials error
                 itemViewHolder.itemLayout.setOnClickListener(v -> {
                     File file = new File(item.getLocalPath());
                     if (file.exists()) {
                         FileUploader.UploadRequester requester = new FileUploader.UploadRequester();
-                        requester.retry(mParentActivity, item);
+                        requester.retry(parentActivity, item);
                         loadUploadItemsFromDb();
                     } else {
                         DisplayUtils.showSnackMessage(
@@ -318,7 +360,7 @@ public class UploadListAdapter extends SectionedRecyclerViewAdapter<SectionedVie
                 if (allowedToCreateNewThumbnail) {
                     final ThumbnailsCacheManager.ThumbnailGenerationTask task =
                             new ThumbnailsCacheManager.ThumbnailGenerationTask(
-                                    itemViewHolder.thumbnail, mParentActivity.getStorageManager(), mParentActivity.getAccount()
+                                itemViewHolder.thumbnail, parentActivity.getStorageManager(), parentActivity.getAccount()
                             );
                     if (thumbnail == null) {
                         if (MimeTypeUtil.isVideo(fakeFileToCheatThumbnailsCacheManagerInterface)) {
@@ -329,9 +371,9 @@ public class UploadListAdapter extends SectionedRecyclerViewAdapter<SectionedVie
                     }
                     final ThumbnailsCacheManager.AsyncThumbnailDrawable asyncDrawable =
                             new ThumbnailsCacheManager.AsyncThumbnailDrawable(
-                                    mParentActivity.getResources(),
-                                    thumbnail,
-                                    task
+                                parentActivity.getResources(),
+                                thumbnail,
+                                task
                             );
                     itemViewHolder.thumbnail.setImageDrawable(asyncDrawable);
                     task.execute(new ThumbnailsCacheManager.ThumbnailGenerationTaskObject(
@@ -340,7 +382,7 @@ public class UploadListAdapter extends SectionedRecyclerViewAdapter<SectionedVie
             }
 
             if ("image/png".equals(item.getMimeType())) {
-                itemViewHolder.thumbnail.setBackgroundColor(mParentActivity.getResources()
+                itemViewHolder.thumbnail.setBackgroundColor(parentActivity.getResources()
                         .getColor(R.color.background_color));
             }
 
@@ -365,8 +407,8 @@ public class UploadListAdapter extends SectionedRecyclerViewAdapter<SectionedVie
                     }
 
                     final ThumbnailsCacheManager.AsyncThumbnailDrawable asyncDrawable =
-                            new ThumbnailsCacheManager.AsyncThumbnailDrawable(mParentActivity.getResources(), thumbnail,
-                                    task);
+                        new ThumbnailsCacheManager.AsyncThumbnailDrawable(parentActivity.getResources(), thumbnail,
+                                                                          task);
 
                     itemViewHolder.thumbnail.setImageDrawable(asyncDrawable);
                     task.execute(new ThumbnailsCacheManager.ThumbnailGenerationTaskObject(file, null));
@@ -375,12 +417,12 @@ public class UploadListAdapter extends SectionedRecyclerViewAdapter<SectionedVie
             }
 
             if ("image/png".equalsIgnoreCase(item.getMimeType())) {
-                itemViewHolder.thumbnail.setBackgroundColor(mParentActivity.getResources()
+                itemViewHolder.thumbnail.setBackgroundColor(parentActivity.getResources()
                         .getColor(R.color.background_color));
             }
         } else {
             itemViewHolder.thumbnail.setImageDrawable(MimeTypeUtil.getFileTypeIcon(item.getMimeType(), fileName,
-                    account, mParentActivity));
+                                                                                   account, parentActivity));
         }
     }
 
@@ -397,16 +439,16 @@ public class UploadListAdapter extends SectionedRecyclerViewAdapter<SectionedVie
         switch (upload.getUploadStatus()) {
 
             case UPLOAD_IN_PROGRESS:
-                status = mParentActivity.getString(R.string.uploads_view_later_waiting_to_upload);
-                FileUploader.FileUploaderBinder binder = mParentActivity.getFileUploaderBinder();
+                status = parentActivity.getString(R.string.uploads_view_later_waiting_to_upload);
+                FileUploader.FileUploaderBinder binder = parentActivity.getFileUploaderBinder();
                 if (binder != null && binder.isUploadingNow(upload)) {
                     // really uploading, bind the progress bar to listen for progress updates
-                    status = mParentActivity.getString(R.string.uploader_upload_in_progress_ticker);
+                    status = parentActivity.getString(R.string.uploader_upload_in_progress_ticker);
                 }
                 break;
 
             case UPLOAD_SUCCEEDED:
-                status = mParentActivity.getString(R.string.uploads_view_upload_status_succeeded);
+                status = parentActivity.getString(R.string.uploads_view_upload_status_succeeded);
                 break;
 
             case UPLOAD_FAILED:
@@ -424,81 +466,82 @@ public class UploadListAdapter extends SectionedRecyclerViewAdapter<SectionedVie
         String status;
         switch (result) {
             case CREDENTIAL_ERROR:
-                status = mParentActivity.getString(R.string.uploads_view_upload_status_failed_credentials_error);
+                status = parentActivity.getString(R.string.uploads_view_upload_status_failed_credentials_error);
                 break;
             case FOLDER_ERROR:
-                status = mParentActivity.getString(R.string.uploads_view_upload_status_failed_folder_error);
+                status = parentActivity.getString(R.string.uploads_view_upload_status_failed_folder_error);
                 break;
             case FILE_NOT_FOUND:
-                status = mParentActivity.getString(R.string.uploads_view_upload_status_failed_localfile_error);
+                status = parentActivity.getString(R.string.uploads_view_upload_status_failed_localfile_error);
                 break;
             case FILE_ERROR:
-                status = mParentActivity.getString(R.string.uploads_view_upload_status_failed_file_error);
+                status = parentActivity.getString(R.string.uploads_view_upload_status_failed_file_error);
                 break;
             case PRIVILEGES_ERROR:
-                status = mParentActivity.getString(R.string.uploads_view_upload_status_failed_permission_error);
+                status = parentActivity.getString(R.string.uploads_view_upload_status_failed_permission_error);
                 break;
             case NETWORK_CONNECTION:
-                status = mParentActivity.getString(R.string.uploads_view_upload_status_failed_connection_error);
+                status = parentActivity.getString(R.string.uploads_view_upload_status_failed_connection_error);
                 break;
             case DELAYED_FOR_WIFI:
-                status = mParentActivity.getString(R.string.uploads_view_upload_status_waiting_for_wifi);
+                status = parentActivity.getString(R.string.uploads_view_upload_status_waiting_for_wifi);
                 break;
             case DELAYED_FOR_CHARGING:
-                status = mParentActivity.getString(R.string.uploads_view_upload_status_waiting_for_charging);
+                status = parentActivity.getString(R.string.uploads_view_upload_status_waiting_for_charging);
                 break;
             case CONFLICT_ERROR:
-                status = mParentActivity.getString(R.string.uploads_view_upload_status_conflict);
+                status = parentActivity.getString(R.string.uploads_view_upload_status_conflict);
                 break;
             case SERVICE_INTERRUPTED:
-                status = mParentActivity.getString(R.string.uploads_view_upload_status_service_interrupted);
+                status = parentActivity.getString(R.string.uploads_view_upload_status_service_interrupted);
                 break;
             case CANCELLED:
                 // should not get here ; cancelled uploads should be wiped out
-                status = mParentActivity.getString(R.string.uploads_view_upload_status_cancelled);
+                status = parentActivity.getString(R.string.uploads_view_upload_status_cancelled);
                 break;
             case UPLOADED:
                 // should not get here ; status should be UPLOAD_SUCCESS
-                status = mParentActivity.getString(R.string.uploads_view_upload_status_succeeded);
+                status = parentActivity.getString(R.string.uploads_view_upload_status_succeeded);
                 break;
             case MAINTENANCE_MODE:
-                status = mParentActivity.getString(R.string.maintenance_mode);
+                status = parentActivity.getString(R.string.maintenance_mode);
                 break;
             case SSL_RECOVERABLE_PEER_UNVERIFIED:
-                status = mParentActivity.getString(
+                status =
+                    parentActivity.getString(
                                 R.string.uploads_view_upload_status_failed_ssl_certificate_not_trusted
                         );
                 break;
             case UNKNOWN:
-                status = mParentActivity.getString(R.string.uploads_view_upload_status_unknown_fail);
+                status = parentActivity.getString(R.string.uploads_view_upload_status_unknown_fail);
                 break;
             case LOCK_FAILED:
-                status = mParentActivity.getString(R.string.upload_lock_failed);
+                status = parentActivity.getString(R.string.upload_lock_failed);
                 break;
             case DELAYED_IN_POWER_SAVE_MODE:
-                status = mParentActivity.getString(
+                status = parentActivity.getString(
                         R.string.uploads_view_upload_status_waiting_exit_power_save_mode);
                 break;
             case VIRUS_DETECTED:
-                status = mParentActivity.getString(R.string.uploads_view_upload_status_virus_detected);
+                status = parentActivity.getString(R.string.uploads_view_upload_status_virus_detected);
                 break;
             case LOCAL_STORAGE_FULL:
-                status = mParentActivity.getString(R.string.upload_local_storage_full);
+                status = parentActivity.getString(R.string.upload_local_storage_full);
                 break;
             case OLD_ANDROID_API:
-                status = mParentActivity.getString(R.string.upload_old_android);
+                status = parentActivity.getString(R.string.upload_old_android);
                 break;
             case SYNC_CONFLICT:
-                status = mParentActivity.getString(R.string.upload_sync_conflict);
+                status = parentActivity.getString(R.string.upload_sync_conflict);
                 break;
             case CANNOT_CREATE_FILE:
-                status = mParentActivity.getString(R.string.upload_cannot_create_file);
+                status = parentActivity.getString(R.string.upload_cannot_create_file);
                 break;
             case LOCAL_STORAGE_NOT_COPIED:
-                status = mParentActivity.getString(R.string.upload_local_storage_not_copied);
+                status = parentActivity.getString(R.string.upload_local_storage_not_copied);
                 break;
             default:
-                status = mParentActivity.getString(R.string.upload_unknown_error);
+                status = parentActivity.getString(R.string.upload_unknown_error);
                 break;
         }
 
@@ -523,21 +566,20 @@ public class UploadListAdapter extends SectionedRecyclerViewAdapter<SectionedVie
     public void loadUploadItemsFromDb() {
         Log_OC.d(TAG, "loadUploadItemsFromDb");
 
-        for (UploadGroup group : mUploadGroups) {
+        for (UploadGroup group : uploadGroups) {
             group.refresh();
         }
 
         notifyDataSetChanged();
     }
 
-    private boolean onUploadItemClick(OCUpload file) {
+    private void onUploadItemClick(OCUpload file) {
         File f = new File(file.getLocalPath());
         if (!f.exists()) {
-            DisplayUtils.showSnackMessage(mParentActivity, R.string.local_file_not_found_message);
+            DisplayUtils.showSnackMessage(parentActivity, R.string.local_file_not_found_message);
         } else {
             openFileWithDefault(file.getLocalPath());
         }
-        return true;
     }
 
 
@@ -553,46 +595,60 @@ public class UploadListAdapter extends SectionedRecyclerViewAdapter<SectionedVie
         }
         myIntent.setDataAndType(Uri.fromFile(file), mimetype);
         try {
-            mParentActivity.startActivity(myIntent);
+            parentActivity.startActivity(myIntent);
         } catch (ActivityNotFoundException e) {
-            DisplayUtils.showSnackMessage(mParentActivity, R.string.file_list_no_app_for_file_type);
+            DisplayUtils.showSnackMessage(parentActivity, R.string.file_list_no_app_for_file_type);
             Log_OC.i(TAG, "Could not find app for sending log history.");
         }
     }
 
     static class HeaderViewHolder extends SectionedViewHolder {
-        private final TextView title;
+        @BindView(R.id.upload_list_title)
+        TextView title;
+
+        @BindView(R.id.upload_list_action)
+        ImageView action;
 
         HeaderViewHolder(View itemView) {
             super(itemView);
-            title = itemView.findViewById(R.id.upload_list_title);
+            ButterKnife.bind(this, itemView);
         }
     }
 
     static class ItemViewHolder extends SectionedViewHolder {
-        private TextView name;
-        private ImageView thumbnail;
-        private TextView fileSize;
-        private TextView date;
-        private TextView status;
-        private TextView account;
-        private TextView remotePath;
-        private ProgressBar progressBar;
-        private ImageButton button;
-        private LinearLayout itemLayout;
+        @BindView(R.id.upload_name)
+        public TextView name;
+
+        @BindView(R.id.thumbnail)
+        public ImageView thumbnail;
+
+        @BindView(R.id.upload_file_size)
+        public TextView fileSize;
+
+        @BindView(R.id.upload_date)
+        public TextView date;
+
+        @BindView(R.id.upload_status)
+        public TextView status;
+
+        @BindView(R.id.upload_account)
+        public TextView account;
+
+        @BindView(R.id.upload_remote_path)
+        public TextView remotePath;
+
+        @BindView(R.id.upload_progress_bar)
+        public ProgressBar progressBar;
+
+        @BindView(R.id.upload_right_button)
+        public  ImageButton button;
+
+        @BindView(R.id.upload_list_item_layout)
+        public LinearLayout itemLayout;
 
         ItemViewHolder(View itemView) {
             super(itemView);
-            name = itemView.findViewById(R.id.upload_name);
-            thumbnail = itemView.findViewById(R.id.thumbnail);
-            fileSize = itemView.findViewById(R.id.upload_file_size);
-            date = itemView.findViewById(R.id.upload_date);
-            status = itemView.findViewById(R.id.upload_status);
-            account = itemView.findViewById(R.id.upload_account);
-            remotePath = itemView.findViewById(R.id.upload_remote_path);
-            progressBar = itemView.findViewById(R.id.upload_progress_bar);
-            button = itemView.findViewById(R.id.upload_right_button);
-            itemLayout = itemView.findViewById(R.id.upload_list_item_layout);
+            ButterKnife.bind(this, itemView);
         }
     }
 
@@ -600,11 +656,17 @@ public class UploadListAdapter extends SectionedRecyclerViewAdapter<SectionedVie
         void refresh();
     }
 
+    enum Type {
+        CURRENT, FINISHED, FAILED
+    }
+
     abstract class UploadGroup implements Refresh {
+        private Type type;
         private OCUpload[] items;
         private String name;
 
-        UploadGroup(String groupName) {
+        UploadGroup(Type type, String groupName) {
+            this.type = type;
             this.name = groupName;
             items = new OCUpload[0];
         }
@@ -626,7 +688,7 @@ public class UploadListAdapter extends SectionedRecyclerViewAdapter<SectionedVie
         }
 
         void fixAndSortItems(OCUpload... array) {
-            FileUploader.FileUploaderBinder binder = mParentActivity.getFileUploaderBinder();
+            FileUploader.FileUploaderBinder binder = parentActivity.getFileUploaderBinder();
 
             for (OCUpload upload : array) {
                 upload.setDataFixed(binder);
@@ -640,7 +702,7 @@ public class UploadListAdapter extends SectionedRecyclerViewAdapter<SectionedVie
             return items == null ? 0 : items.length;
         }
 
-        public Comparator<OCUpload> comparator = new Comparator<OCUpload>() {
+        Comparator<OCUpload> comparator = new Comparator<OCUpload>() {
             @Override
             public int compare(OCUpload upload1, OCUpload upload2) {
                 if (upload1 == null && upload2 == null) {
@@ -652,8 +714,8 @@ public class UploadListAdapter extends SectionedRecyclerViewAdapter<SectionedVie
                 if (upload2 == null) {
                     return 1;
                 }
-                if (UploadStatus.UPLOAD_IN_PROGRESS.equals(upload1.getFixedUploadStatus())) {
-                    if (!UploadStatus.UPLOAD_IN_PROGRESS.equals(upload2.getFixedUploadStatus())) {
+                if (UploadStatus.UPLOAD_IN_PROGRESS == upload1.getFixedUploadStatus()) {
+                    if (UploadStatus.UPLOAD_IN_PROGRESS != upload2.getFixedUploadStatus()) {
                         return -1;
                     }
                     // both are in progress
@@ -662,7 +724,7 @@ public class UploadListAdapter extends SectionedRecyclerViewAdapter<SectionedVie
                     } else if (upload2.isFixedUploadingNow()) {
                         return 1;
                     }
-                } else if (upload2.getFixedUploadStatus().equals(UploadStatus.UPLOAD_IN_PROGRESS)) {
+                } else if (upload2.getFixedUploadStatus() == UploadStatus.UPLOAD_IN_PROGRESS) {
                     return 1;
                 }
                 if (upload1.getFixedUploadEndTimeStamp() == 0 || upload2.getFixedUploadEndTimeStamp() == 0) {

+ 2 - 2
src/main/java/com/owncloud/android/ui/dialog/SamlWebViewDialog.java

@@ -92,8 +92,8 @@ public class SamlWebViewDialog extends DialogFragment {
             mWebViewClient = new SsoWebViewClient(activity, mHandler, mSsoWebViewClientListener);
 
         } catch (ClassCastException e) {
-            throw new ClassCastException(activity.toString() + " must implement " +
-                    SsoWebViewClientListener.class.getSimpleName());
+            throw new IllegalArgumentException(activity.toString() + " must implement " +
+                    SsoWebViewClientListener.class.getSimpleName(), e);
         }
     }
 

+ 2 - 2
src/main/java/com/owncloud/android/ui/fragment/FileFragment.java

@@ -104,8 +104,8 @@ public class FileFragment extends Fragment {
             mContainerActivity = (ContainerActivity) activity;
 
         } catch (ClassCastException e) {
-            throw new ClassCastException(activity.toString() + " must implement " +
-                    ContainerActivity.class.getSimpleName());
+            throw new IllegalArgumentException(activity.toString() + " must implement " +
+                    ContainerActivity.class.getSimpleName(), e);
         }
     }
 

+ 2 - 2
src/main/java/com/owncloud/android/ui/fragment/LocalFileListFragment.java

@@ -72,8 +72,8 @@ public class LocalFileListFragment extends ExtendedListFragment implements Local
         try {
             mContainerActivity = (ContainerActivity) activity;
         } catch (ClassCastException e) {
-            throw new ClassCastException(activity.toString() + " must implement " +
-                    LocalFileListFragment.ContainerActivity.class.getSimpleName());
+            throw new IllegalArgumentException(activity.toString() + " must implement " +
+                    LocalFileListFragment.ContainerActivity.class.getSimpleName(), e);
         }
     }
 

+ 23 - 24
src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java

@@ -240,15 +240,15 @@ public class OCFileListFragment extends ExtendedListFragment implements
             mContainerActivity = (FileFragment.ContainerActivity) context;
 
         } catch (ClassCastException e) {
-            throw new ClassCastException(context.toString() + " must implement " +
-                    FileFragment.ContainerActivity.class.getSimpleName());
+            throw new IllegalArgumentException(context.toString() + " must implement " +
+                    FileFragment.ContainerActivity.class.getSimpleName(), e);
         }
         try {
             setOnRefreshListener((OnEnforceableRefreshListener) context);
 
         } catch (ClassCastException e) {
-            throw new ClassCastException(context.toString() + " must implement " +
-                    SwipeRefreshLayout.OnRefreshListener.class.getSimpleName());
+            throw new IllegalArgumentException(context.toString() + " must implement " +
+                    SwipeRefreshLayout.OnRefreshListener.class.getSimpleName(), e);
         }
     }
 
@@ -703,14 +703,14 @@ public class OCFileListFragment extends ExtendedListFragment implements
 
         MenuItem menuItemOrig;
 
-        if (menuItemAddRemoveValue.equals(MenuItemAddRemove.ADD_SORT)) {
+        if (menuItemAddRemoveValue == MenuItemAddRemove.ADD_SORT) {
             if (menu.findItem(R.id.action_sort) == null) {
                 menuItemOrig = mOriginalMenuItems.get(1);
                 menu.add(menuItemOrig.getGroupId(), menuItemOrig.getItemId(), menuItemOrig.getOrder(),
                         menuItemOrig.getTitle());
             }
 
-        } else if (menuItemAddRemoveValue.equals(MenuItemAddRemove.ADD_GRID_AND_SORT)) {
+        } else if (menuItemAddRemoveValue == MenuItemAddRemove.ADD_GRID_AND_SORT) {
             if (menu.findItem(R.id.action_switch_view) == null) {
                 menuItemOrig = mOriginalMenuItems.get(0);
                 menu.add(menuItemOrig.getGroupId(), menuItemOrig.getItemId(), menuItemOrig.getOrder(),
@@ -722,9 +722,9 @@ public class OCFileListFragment extends ExtendedListFragment implements
                 menu.add(menuItemOrig.getGroupId(), menuItemOrig.getItemId(), menuItemOrig.getOrder(),
                         menuItemOrig.getTitle());
             }
-        } else if (menuItemAddRemoveValue.equals(MenuItemAddRemove.REMOVE_SEARCH)) {
+        } else if (menuItemAddRemoveValue == MenuItemAddRemove.REMOVE_SEARCH) {
             menu.removeItem(R.id.action_search);
-        } else if (menuItemAddRemoveValue.equals(MenuItemAddRemove.ADD_GRID_AND_SORT_WITH_SEARCH)) {
+        } else if (menuItemAddRemoveValue == MenuItemAddRemove.ADD_GRID_AND_SORT_WITH_SEARCH) {
             if (menu.findItem(R.id.action_switch_view) == null) {
                 menuItemOrig = mOriginalMenuItems.get(0);
                 menu.add(menuItemOrig.getGroupId(), menuItemOrig.getItemId(), menuItemOrig.getOrder(),
@@ -742,23 +742,22 @@ public class OCFileListFragment extends ExtendedListFragment implements
                 menu.add(menuItemOrig.getGroupId(), menuItemOrig.getItemId(), menuItemOrig.getOrder(),
                         menuItemOrig.getTitle());
             }
-        } else if (menuItemAddRemoveValue.equals(MenuItemAddRemove.REMOVE_SORT)) {
+        } else if (menuItemAddRemoveValue == MenuItemAddRemove.REMOVE_SORT) {
             menu.removeItem(R.id.action_sort);
             menu.removeItem(R.id.action_search);
-        } else if (menuItemAddRemoveValue.equals(MenuItemAddRemove.REMOVE_GRID_AND_SORT)) {
+        } else if (menuItemAddRemoveValue == MenuItemAddRemove.REMOVE_GRID_AND_SORT) {
             menu.removeItem(R.id.action_sort);
             menu.removeItem(R.id.action_switch_view);
             menu.removeItem(R.id.action_search);
         }
-
     }
 
     /**
      * Call this, when the user presses the up button.
-     * <p>
+     *
      * Tries to move up the current folder one level. If the parent folder was removed from the
      * database, it continues browsing up until finding an existing folders.
-     * <p/>
+     *
      * return       Count of folder levels browsed up.
      */
     public int onBrowseUp() {
@@ -1345,7 +1344,7 @@ public class OCFileListFragment extends ExtendedListFragment implements
             }
         }
 
-        if (currentSearchType != null && !currentSearchType.equals(SearchType.FILE_SEARCH) && getActivity() != null) {
+        if (SearchType.FILE_SEARCH != currentSearchType && getActivity() != null) {
             getActivity().invalidateOptionsMenu();
         }
     }
@@ -1353,21 +1352,21 @@ public class OCFileListFragment extends ExtendedListFragment implements
     private void setEmptyView(SearchEvent event) {
 
         if (event != null) {
-            if (SearchRemoteOperation.SearchType.FILE_SEARCH.equals(event.getSearchType())) {
+            if (SearchRemoteOperation.SearchType.FILE_SEARCH == event.getSearchType()) {
                 setEmptyListMessage(SearchType.FILE_SEARCH);
-            } else if (event.getSearchType().equals(SearchRemoteOperation.SearchType.CONTENT_TYPE_SEARCH)) {
+            } else if (event.getSearchType() == SearchRemoteOperation.SearchType.CONTENT_TYPE_SEARCH) {
                 if ("image/%".equals(event.getSearchQuery())) {
                     setEmptyListMessage(SearchType.PHOTO_SEARCH);
                 } else if ("video/%".equals(event.getSearchQuery())) {
                     setEmptyListMessage(SearchType.VIDEO_SEARCH);
                 }
-            } else if (SearchRemoteOperation.SearchType.FAVORITE_SEARCH.equals(event.getSearchType())) {
+            } else if (SearchRemoteOperation.SearchType.FAVORITE_SEARCH == event.getSearchType()) {
                 setEmptyListMessage(SearchType.FAVORITE_SEARCH);
-            } else if (SearchRemoteOperation.SearchType.RECENTLY_ADDED_SEARCH.equals(event.getSearchType())) {
+            } else if (SearchRemoteOperation.SearchType.RECENTLY_ADDED_SEARCH == event.getSearchType()) {
                 setEmptyListMessage(SearchType.RECENTLY_ADDED_SEARCH);
-            } else if (SearchRemoteOperation.SearchType.RECENTLY_MODIFIED_SEARCH.equals(event.getSearchType())) {
+            } else if (SearchRemoteOperation.SearchType.RECENTLY_MODIFIED_SEARCH == event.getSearchType()) {
                 setEmptyListMessage(SearchType.RECENTLY_MODIFIED_SEARCH);
-            } else if (SearchRemoteOperation.SearchType.SHARED_SEARCH.equals(event.getSearchType())) {
+            } else if (SearchRemoteOperation.SearchType.SHARED_SEARCH == event.getSearchType()) {
                 setEmptyListMessage(SearchType.SHARED_FILTER);
             }
         }
@@ -1438,9 +1437,9 @@ public class OCFileListFragment extends ExtendedListFragment implements
 
         setFabVisible(false);
 
-        if (event.getUnsetType().equals(SearchEvent.UnsetType.UNSET_BOTTOM_NAV_BAR)) {
+        if (event.getUnsetType() == SearchEvent.UnsetType.UNSET_BOTTOM_NAV_BAR) {
             unsetAllMenuItems(false);
-        } else if (event.getUnsetType().equals(SearchEvent.UnsetType.UNSET_DRAWER)) {
+        } else if (event.getUnsetType() == SearchEvent.UnsetType.UNSET_DRAWER) {
             unsetAllMenuItems(true);
         }
 
@@ -1471,7 +1470,7 @@ public class OCFileListFragment extends ExtendedListFragment implements
             }
         };
 
-        if (currentSearchType.equals(SearchType.PHOTO_SEARCH)) {
+        if (currentSearchType == SearchType.PHOTO_SEARCH) {
             new Handler(Looper.getMainLooper()).post(this::switchToGridView);
         } else {
             new Handler(Looper.getMainLooper()).post(switchViewsRunnable);
@@ -1480,7 +1479,7 @@ public class OCFileListFragment extends ExtendedListFragment implements
         final Account currentAccount = AccountUtils.getCurrentOwnCloudAccount(MainApp.getAppContext());
 
         final RemoteOperation remoteOperation;
-        if (!currentSearchType.equals(SearchType.SHARED_FILTER)) {
+        if (currentSearchType != SearchType.SHARED_FILTER) {
             boolean searchOnlyFolders = false;
             if (getArguments() != null && getArguments().getBoolean(ARG_SEARCH_ONLY_FOLDER, false)) {
                 searchOnlyFolders = true;

+ 2 - 2
src/main/java/com/owncloud/android/ui/fragment/SearchShareesFragment.java

@@ -195,8 +195,8 @@ public class SearchShareesFragment extends Fragment implements ShareUserListAdap
         try {
             mListener = (ShareFragmentListener) activity;
         } catch (ClassCastException e) {
-            throw new ClassCastException(activity.toString()
-                    + " must implement OnFragmentInteractionListener");
+            throw new IllegalArgumentException(activity.toString()
+                    + " must implement OnFragmentInteractionListener", e);
         }
     }
 

+ 2 - 1
src/main/java/com/owncloud/android/ui/fragment/ShareFileFragment.java

@@ -576,7 +576,8 @@ public class ShareFileFragment extends Fragment implements ShareUserListAdapter.
         try {
             mListener = (ShareFragmentListener) activity;
         } catch (ClassCastException e) {
-            throw new ClassCastException(activity.toString() + " must implement OnShareFragmentInteractionListener");
+            throw new IllegalArgumentException(
+                activity.toString() + " must implement OnShareFragmentInteractionListener", e);
         }
     }
 

+ 13 - 6
src/main/java/com/owncloud/android/ui/preview/PreviewImageFragment.java

@@ -145,7 +145,7 @@ public class PreviewImageFragment extends FileFragment {
     /**
      * Creates an empty fragment for image previews.
      *
-     * MUST BE KEPT: the system uses it when tries to reinstantiate a fragment automatically
+     * MUST BE KEPT: the system uses it when tries to re-instantiate a fragment automatically
      * (for instance, when the device is turned a aside).
      *
      * DO NOT CALL IT: an {@link OCFile} and {@link Account} must be provided for a successful
@@ -159,6 +159,11 @@ public class PreviewImageFragment extends FileFragment {
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         Bundle args = getArguments();
+
+        if (args == null) {
+            throw new IllegalArgumentException("Arguments may not be null!");
+        }
+
         setFile(args.getParcelable(ARG_FILE));
         // TODO better in super, but needs to check ALL the class extending FileFragment;
         // not right now
@@ -266,9 +271,7 @@ public class PreviewImageFragment extends FileFragment {
                     }
                 }
                 mMultiView.setVisibility(View.GONE);
-                if (getResources() != null) {
-                    mImageView.setBackgroundColor(getResources().getColor(R.color.black));
-                }
+                mImageView.setBackgroundColor(getResources().getColor(R.color.black));
                 mImageView.setVisibility(View.VISIBLE);
 
             } else {
@@ -713,7 +716,11 @@ public class PreviewImageFragment extends FileFragment {
     }
 
     private void togglePreviewImageFullScreen() {
-        ((PreviewImageActivity) getActivity()).toggleFullScreen();
+        Activity activity = getActivity();
+
+        if (activity != null) {
+            ((PreviewImageActivity) activity).toggleFullScreen();
+        }
         toggleImageBackground();
     }
 
@@ -721,7 +728,7 @@ public class PreviewImageFragment extends FileFragment {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && getFile() != null
                 && (MIME_TYPE_PNG.equalsIgnoreCase(getFile().getMimeType()) ||
                 MIME_TYPE_SVG.equalsIgnoreCase(getFile().getMimeType())) && getActivity() != null
-                && getActivity() instanceof PreviewImageActivity && getResources() != null) {
+            && getActivity() instanceof PreviewImageActivity) {
             PreviewImageActivity previewImageActivity = (PreviewImageActivity) getActivity();
 
             if (mImageView.getDrawable() instanceof LayerDrawable) {

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

@@ -154,10 +154,9 @@ public class PreviewImagePagerAdapter extends FragmentStatePagerAdapter {
         } else if (file.isDown()) {
             fragment = PreviewImageFragment.newInstance(file, mObsoletePositions.contains(i), false);
         } else {
-            if (mDownloadErrors.contains(i)) {
+            if (mDownloadErrors.remove(i)) {
                 fragment = FileDownloadFragment.newInstance(file, mAccount, true);
                 ((FileDownloadFragment) fragment).setError(true);
-                mDownloadErrors.remove(i);
             } else {
                 if (file.isEncrypted()) {
                     fragment = FileDownloadFragment.newInstance(file, mAccount, mObsoletePositions.contains(i));
@@ -212,8 +211,7 @@ public class PreviewImagePagerAdapter extends FragmentStatePagerAdapter {
 
     @Override
     public int getItemPosition(@NonNull Object object) {
-        if (mObsoleteFragments.contains(object)) {
-            mObsoleteFragments.remove(object);
+        if (mObsoleteFragments.remove(object)) {
             return POSITION_NONE;
         }
         return super.getItemPosition(object);

+ 17 - 10
src/main/java/com/owncloud/android/utils/BitmapUtils.java

@@ -45,6 +45,13 @@ import androidx.exifinterface.media.ExifInterface;
 public final class BitmapUtils {
     public static final String TAG = BitmapUtils.class.getSimpleName();
 
+    private static final int INDEX_RED = 0;
+    private static final int INDEX_GREEN = 1;
+    private static final int INDEX_BLUE = 2;
+    private static final int INDEX_HUE = 0;
+    private static final int INDEX_SATURATION = 1;
+    private static final int INDEX_LUMINATION = 2;
+
     private BitmapUtils() {
         // utility class -> private constructor
     }
@@ -300,22 +307,22 @@ public final class BitmapUtils {
         }
 
         // Reduce values bigger than rgb requirements
-        rgb[0] = rgb[0] % 255;
-        rgb[1] = rgb[1] % 255;
-        rgb[2] = rgb[2] % 255;
+        rgb[INDEX_RED] = rgb[INDEX_RED] % 255;
+        rgb[INDEX_GREEN] = rgb[INDEX_GREEN] % 255;
+        rgb[INDEX_BLUE] = rgb[INDEX_BLUE] % 255;
 
-        double[] hsl = rgbToHsl(rgb[0], rgb[1], rgb[2]);
+        double[] hsl = rgbToHsl(rgb[INDEX_RED], rgb[INDEX_GREEN], rgb[INDEX_BLUE]);
 
         // Classic formula to check the brightness for our eye
         // If too bright, lower the sat
-        double bright = Math.sqrt(0.299 * Math.pow(rgb[0], 2) + 0.587 * Math.pow(rgb[1], 2) + 0.114
-                * Math.pow(rgb[2], 2));
+        double bright = Math.sqrt(0.299 * Math.pow(rgb[INDEX_RED], 2) + 0.587 * Math.pow(rgb[INDEX_GREEN], 2) + 0.114
+                * Math.pow(rgb[INDEX_BLUE], 2));
 
         if (bright >= 200) {
             sat = 60;
         }
 
-        return new int[]{(int) (hsl[0] * 360), sat, lum};
+        return new int[]{(int) (hsl[INDEX_HUE] * 360), sat, lum};
     }
 
     private static double[] rgbToHsl(double rUntrimmed, double gUntrimmed, double bUntrimmed) {
@@ -346,9 +353,9 @@ public final class BitmapUtils {
         }
 
         double[] hsl = new double[]{0.0, 0.0, 0.0};
-        hsl[0] = h;
-        hsl[1] = s;
-        hsl[2] = l;
+        hsl[INDEX_HUE] = h;
+        hsl[INDEX_SATURATION] = s;
+        hsl[INDEX_LUMINATION] = l;
 
         return hsl;
     }

+ 8 - 0
src/main/res/drawable/ic_close.xml

@@ -0,0 +1,8 @@
+<!-- drawable/close.xml -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:height="24dp"
+    android:width="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+    <path android:fillColor="#757575" android:pathData="M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z" />
+</vector>

+ 8 - 0
src/main/res/drawable/ic_sync.xml

@@ -0,0 +1,8 @@
+<!-- drawable/sync.xml -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:height="24dp"
+    android:width="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+    <path android:fillColor="#757575" android:pathData="M12,18A6,6 0 0,1 6,12C6,11 6.25,10.03 6.7,9.2L5.24,7.74C4.46,8.97 4,10.43 4,12A8,8 0 0,0 12,20V23L16,19L12,15M12,4V1L8,5L12,9V6A6,6 0 0,1 18,12C18,13 17.75,13.97 17.3,14.8L18.76,16.26C19.54,15.03 20,13.57 20,12A8,8 0 0,0 12,4Z" />
+</vector>

+ 22 - 4
src/main/res/layout/upload_list_header.xml

@@ -21,21 +21,39 @@
   License along with this program.  If not, see <http://www.gnu.org/licenses/>.
 -->
 
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     android:id="@+id/ListItemLayout"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:orientation="horizontal"
-    android:padding="@dimen/standard_half_padding">
+    android:orientation="horizontal">
 
     <TextView
         android:id="@+id/upload_list_title"
         style="@style/TextAppearance.AppCompat.Body2"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
+        android:layout_alignParentStart="true"
+        android:layout_alignParentLeft="true"
+        android:layout_toStartOf="@id/upload_list_action"
+        android:layout_toLeftOf="@id/upload_list_action"
         android:ellipsize="middle"
+        android:padding="@dimen/standard_half_padding"
         android:textColor="@color/color_accent"
         tools:text="Current (2)" />
 
-</LinearLayout>
+    <ImageView
+        android:id="@+id/upload_list_action"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentEnd="true"
+        android:layout_alignParentRight="true"
+        android:contentDescription="@string/delete_entries"
+        android:paddingStart="@dimen/standard_half_padding"
+        android:paddingLeft="@dimen/standard_half_padding"
+        android:paddingTop="@dimen/standard_half_padding"
+        android:paddingEnd="@dimen/zero"
+        android:paddingRight="@dimen/zero"
+        android:paddingBottom="@dimen/standard_half_padding"
+        android:src="@drawable/nav_trashbin" />
+</RelativeLayout>

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

@@ -143,7 +143,7 @@
             android:id="@+id/upload_right_button"
             android:layout_width="@dimen/upload_list_item_image_size"
             android:layout_height="@dimen/upload_list_item_image_size"
-            android:layout_gravity="center"
+            android:layout_gravity="center|end"
             android:background="@android:color/transparent"
             android:contentDescription="@string/upload_item_action_button" />
     </FrameLayout>

+ 4 - 20
src/main/res/menu/upload_list_menu.xml

@@ -1,6 +1,5 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ownCloud Android client application
+<?xml version="1.0" encoding="utf-8"?><!--
+  Nextcloud Android client application
 
   Copyright (C) 2012  Bartek Przybylski
   Copyright (C) 2012-2013 ownCloud Inc.
@@ -22,23 +21,8 @@
         android:id="@+id/upload_list_actions"
         android:checkableBehavior="none">
 
-        <item
-            android:id="@+id/action_retry_uploads"
-            android:title="@string/action_retry_uploads"/>
         <item
             android:id="@+id/action_clear_failed_uploads"
-            android:title="@string/action_clear_failed_uploads"/>
-
-        <item
-            android:id="@+id/action_clear_successfull_uploads"
-            android:title="@string/action_clear_successful_uploads"/>
-    </group>
-    <group
-        android:id="@+id/upload_list_force_scan"
-        android:checkableBehavior="none">
-
-        <item
-            android:id="@+id/action_force_rescan"
-            android:title="@string/action_force_rescan"/>
+            android:title="@string/action_clear_failed_uploads" />
     </group>
-</menu>
+</menu>

+ 1 - 4
src/main/res/values-b+en+001/strings.xml

@@ -512,10 +512,7 @@
     <string name="share_privilege_can_edit_change">can change</string>
     <string name="share_privilege_can_edit_delete">can delete</string>
 
-    <string name="action_retry_uploads">Retry failed uploads</string>
     <string name="action_clear_failed_uploads">Clear failed uploads</string>
-    <string name="action_clear_successful_uploads">Clear successful uploads</string>
-    <string name="action_force_rescan">Force rescan</string>
 
     <string name="action_switch_grid_view">Grid view</string>
     <string name="action_switch_list_view">List view</string>
@@ -841,4 +838,4 @@
     <string name="upload_sync_conflict">Sync conflict, please resolve manually</string>
     <string name="upload_cannot_create_file">Cannot create local file</string>
     <string name="upload_local_storage_not_copied">File could not be copied to local storage</string>
-</resources>
+    </resources>

+ 0 - 3
src/main/res/values-b+es+419/strings.xml

@@ -385,10 +385,7 @@
 
     <string name="share_privilege_can_share">puede compartir</string>
     <string name="share_privilege_can_edit">puede editar</string>
-    <string name="action_retry_uploads">Reintentar cargas fallidas</string>
     <string name="action_clear_failed_uploads">Borrar cargas fallidas</string>
-    <string name="action_clear_successful_uploads">Borrar cargas exitosas</string>
-    <string name="action_force_rescan">Forzar rescaneo</string>
 
     <string name="action_switch_grid_view">Vista de cuadrícula</string>
     <string name="action_switch_list_view">Vista de lista</string>

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

@@ -508,10 +508,7 @@
     <string name="share_privilege_can_edit_change">може да променя</string>
     <string name="share_privilege_can_edit_delete">може да изтрива</string>
 
-    <string name="action_retry_uploads">Нов опит за провалените</string>
     <string name="action_clear_failed_uploads">Изчисти провалените качвания</string>
-    <string name="action_clear_successful_uploads">Изчисти успешните качвания</string>
-    <string name="action_force_rescan">Сканирай наново</string>
 
     <string name="action_switch_grid_view">Решетъчен изглед</string>
     <string name="action_switch_list_view">Списъчен изглед</string>

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

@@ -508,10 +508,7 @@
     <string name="share_privilege_can_edit_change">pot canviar</string>
     <string name="share_privilege_can_edit_delete">pot esborrar</string>
 
-    <string name="action_retry_uploads">Reintenta les pujades fallides</string>
     <string name="action_clear_failed_uploads">Netejar les pujades fallides</string>
-    <string name="action_clear_successful_uploads">Netejar les pujades correctes</string>
-    <string name="action_force_rescan">Forçar un re-escaneig</string>
 
     <string name="action_switch_grid_view">Vista de graella</string>
     <string name="action_switch_list_view">Vista de llista</string>

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

@@ -520,10 +520,7 @@
     <string name="share_privilege_can_edit_change">může měnit</string>
     <string name="share_privilege_can_edit_delete">může smazat</string>
 
-    <string name="action_retry_uploads">Zkusit znovu nezdařená nahrání</string>
     <string name="action_clear_failed_uploads">Vyčistit nezdařené nahrávání</string>
-    <string name="action_clear_successful_uploads">Vyčistit úspěšná nahrání</string>
-    <string name="action_force_rescan">Vynutit indexaci</string>
 
     <string name="action_switch_grid_view">Zobrazení v mřížce</string>
     <string name="action_switch_list_view">Zobrazení v seznamu</string>
@@ -851,4 +848,5 @@
     <string name="upload_sync_conflict">Konflikt synchronizace, vyřešte ručně</string>
     <string name="upload_cannot_create_file">Nedaří se vytvořit místní soubor</string>
     <string name="upload_local_storage_not_copied">Soubor se nepodařilo zkopírovat na místní úložiště</string>
+    <string name="delete_entries">Smazat položky</string>
 </resources>

+ 5 - 7
src/main/res/values-da/strings.xml

@@ -3,7 +3,7 @@
     <string name="about_android">%1$s Android app</string>
     <string name="about_version">version %1$s</string>
     <string name="actionbar_sync">Genindlæs konto</string>
-    <string name="actionbar_open_with">Åben med</string>
+    <string name="actionbar_open_with">Åbn med</string>
     <string name="actionbar_mkdir">Ny mappe</string>
     <string name="actionbar_settings">Indstillinger</string>
     <string name="actionbar_see_details">Detaljer</string>
@@ -33,7 +33,7 @@
     <string name="drawer_quota">%1$s af %2$s brugt</string>
     <string name="drawer_quota_unlimited">%1$s brugt</string>
 	<string name="drawer_close">Luk sidebar</string>
-    <string name="drawer_open">Åben sidebar</string>
+    <string name="drawer_open">Åbn sidebar</string>
     <string name="prefs_category_general">Generel</string>
     <string name="prefs_category_more">Mere</string>
     <string name="prefs_manage_accounts">Administrer konti</string>
@@ -120,7 +120,7 @@ Enheds legitimationsoplysninger er sat op
     <string name="upload_list_empty_text_auto_upload">Upload noget indhold eller aktiver auto upload.</string>
     <string name="file_list_folder">mappe</string>
     <string name="filedetails_download">Hent</string>
-    <string name="filedetails_sync_file">Synkronisere</string>
+    <string name="filedetails_sync_file">Synkronisér</string>
     <string name="filedetails_renamed_in_upload_msg">File omdøbt %1$sunder overførelse</string>
     <string name="list_layout">Liste layout</string>
     <string name="action_send_share">Send/Del</string>
@@ -514,10 +514,7 @@ Enheds legitimationsoplysninger er sat op
     <string name="share_privilege_can_edit_change">kan ændre</string>
     <string name="share_privilege_can_edit_delete">kan slette</string>
 
-    <string name="action_retry_uploads">Prøv fejlede uploads igen</string>
     <string name="action_clear_failed_uploads">Fjern fejlede uploads</string>
-    <string name="action_clear_successful_uploads">Fjern vellykkede uploads</string>
-    <string name="action_force_rescan">Tving genscan</string>
 
     <string name="action_switch_grid_view">Grid visning</string>
     <string name="action_switch_list_view">List visning</string>
@@ -795,7 +792,7 @@ Enheds legitimationsoplysninger er sat op
     <string name="stream_not_possible_headline">Intern streaming ikke mulig</string>
     <string name="stream_not_possible_message">Hent venligst media i stedet, eller brug ekstern app.</string>
     <string name="folder_already_exists">Mappe findes allerede</string>
-    <string name="actionbar_open_as_richdocument">Åben med Collabora</string>
+    <string name="actionbar_open_as_richdocument">Åbn med Collabora</string>
     <string name="notification_icon">Notifikationsikon</string>
     <string name="folder_confirm_create">Opret</string>
     <string name="file_delete">Slet</string>
@@ -843,4 +840,5 @@ Enheds legitimationsoplysninger er sat op
     <string name="upload_sync_conflict">Synkroniserings konflikt, udred venligst manuelt</string>
     <string name="upload_cannot_create_file">Kan ikke oprette filen lokalt</string>
     <string name="upload_local_storage_not_copied">Filen kunne ikke kopieres til lokalt lager</string>
+    <string name="delete_entries">Slet poster</string>
 </resources>

+ 1 - 3
src/main/res/values-de/strings.xml

@@ -512,10 +512,7 @@
     <string name="share_privilege_can_edit_change">kann ändern</string>
     <string name="share_privilege_can_edit_delete">kann löschen</string>
 
-    <string name="action_retry_uploads">Fehlgeschlagene Uploads neu starten</string>
     <string name="action_clear_failed_uploads">Fehlgeschlagene Uploads entfernen</string>
-    <string name="action_clear_successful_uploads">Lösche erfolgreich hochgeladene Dateien</string>
-    <string name="action_force_rescan">Neuen Scan erzwingen</string>
 
     <string name="action_switch_grid_view">Rasteransicht</string>
     <string name="action_switch_list_view">Listenansicht</string>
@@ -841,4 +838,5 @@
     <string name="upload_sync_conflict">Synchronisierungskonflikt, bitte manuell beheben</string>
     <string name="upload_cannot_create_file">Datei kann lokal nicht erstellt werden</string>
     <string name="upload_local_storage_not_copied">Datei konnte nicht in den lokalen Speicher kopiert werden</string>
+    <string name="delete_entries">Einträgen entfernen</string>
 </resources>

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

@@ -501,10 +501,7 @@
     <string name="share_privilege_can_edit_change">δυνατότητα αλλαγής</string>
     <string name="share_privilege_can_edit_delete">δυνατότητα διαγραφής</string>
 
-    <string name="action_retry_uploads">Επανάληψη αποτυχημένων μεταφορτώσεων</string>
     <string name="action_clear_failed_uploads">Εκκαθάριση αποτυχημένων μεταφορτώσεων</string>
-    <string name="action_clear_successful_uploads">Εκκαθάριση επιτυχών μεταφορτώσεων</string>
-    <string name="action_force_rescan">Επιβολή σάρωσης</string>
 
     <string name="action_switch_grid_view">Προβολή πλέγματος</string>
     <string name="action_switch_list_view">Προβολή λίστας</string>
@@ -762,4 +759,4 @@
     <string name="upload_unknown_error">Άγνωστο σφάλμα</string>
     <string name="upload_cannot_create_file">Αδυναμία δημιουργίας τοπικού αρχείου</string>
     <string name="upload_local_storage_not_copied">Το αρχείο δεν μπορεί να αντιγραφεί σε τοπικό αποθηκευτικό χώρο</string>
-</resources>
+    </resources>

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

@@ -512,10 +512,7 @@
     <string name="share_privilege_can_edit_change">povas ŝanĝi</string>
     <string name="share_privilege_can_edit_delete">povas forigi</string>
 
-    <string name="action_retry_uploads">Reprovi malsukcesajn alŝutojn</string>
     <string name="action_clear_failed_uploads">Vakigi malsukcesajn alŝutojn</string>
-    <string name="action_clear_successful_uploads">Vakigi sukcesajn alsûtojn</string>
-    <string name="action_force_rescan">Aktualigi nun</string>
 
     <string name="action_switch_grid_view">Krada vido</string>
     <string name="action_switch_list_view">Lista vido</string>
@@ -841,4 +838,4 @@
     <string name="upload_sync_conflict">Sinkroniga konflikto; bv. solvi ĝin permane</string>
     <string name="upload_cannot_create_file">Ne eblas krei lokan dosieron</string>
     <string name="upload_local_storage_not_copied">Dosiero ne eblis kopiiĝi al loka konservejo</string>
-</resources>
+    </resources>

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

@@ -460,10 +460,7 @@
     <string name="share_privilege_can_edit_change">puede cambiar</string>
     <string name="share_privilege_can_edit_delete">puede borrar</string>
 
-    <string name="action_retry_uploads">Reintentar subidas fallidas</string>
     <string name="action_clear_failed_uploads">Borrar subidas fallidas</string>
-    <string name="action_clear_successful_uploads">Borrar subidas exitosas</string>
-    <string name="action_force_rescan">Forzar reescaneo</string>
 
     <string name="action_switch_grid_view">Vista de cuadrícula</string>
     <string name="action_switch_list_view">Vista de lista</string>

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

@@ -463,10 +463,7 @@
 
     <string name="share_privilege_can_share">puede compartir</string>
     <string name="share_privilege_can_edit">puede editar</string>
-    <string name="action_retry_uploads">Reintentar cargas fallidas</string>
     <string name="action_clear_failed_uploads">Borrar cargas fallidas</string>
-    <string name="action_clear_successful_uploads">Borrar cargas exitosas</string>
-    <string name="action_force_rescan">Forzar rescaneo</string>
 
     <string name="action_switch_grid_view">Vista de cuadrícula</string>
     <string name="action_switch_list_view">Vista de lista</string>

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

@@ -463,10 +463,7 @@
 
     <string name="share_privilege_can_share">puede compartir</string>
     <string name="share_privilege_can_edit">puede editar</string>
-    <string name="action_retry_uploads">Reintentar cargas fallidas</string>
     <string name="action_clear_failed_uploads">Borrar cargas fallidas</string>
-    <string name="action_clear_successful_uploads">Borrar cargas exitosas</string>
-    <string name="action_force_rescan">Forzar rescaneo</string>
 
     <string name="action_switch_grid_view">Vista de cuadrícula</string>
     <string name="action_switch_list_view">Vista de lista</string>

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

@@ -463,10 +463,7 @@
 
     <string name="share_privilege_can_share">puede compartir</string>
     <string name="share_privilege_can_edit">puede editar</string>
-    <string name="action_retry_uploads">Reintentar cargas fallidas</string>
     <string name="action_clear_failed_uploads">Borrar cargas fallidas</string>
-    <string name="action_clear_successful_uploads">Borrar cargas exitosas</string>
-    <string name="action_force_rescan">Forzar rescaneo</string>
 
     <string name="action_switch_grid_view">Vista de cuadrícula</string>
     <string name="action_switch_list_view">Vista de lista</string>

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

@@ -463,10 +463,7 @@
 
     <string name="share_privilege_can_share">puede compartir</string>
     <string name="share_privilege_can_edit">puede editar</string>
-    <string name="action_retry_uploads">Reintentar cargas fallidas</string>
     <string name="action_clear_failed_uploads">Borrar cargas fallidas</string>
-    <string name="action_clear_successful_uploads">Borrar cargas exitosas</string>
-    <string name="action_force_rescan">Forzar rescaneo</string>
 
     <string name="action_switch_grid_view">Vista de cuadrícula</string>
     <string name="action_switch_list_view">Vista de lista</string>

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

@@ -463,10 +463,7 @@
 
     <string name="share_privilege_can_share">puede compartir</string>
     <string name="share_privilege_can_edit">puede editar</string>
-    <string name="action_retry_uploads">Reintentar cargas fallidas</string>
     <string name="action_clear_failed_uploads">Borrar cargas fallidas</string>
-    <string name="action_clear_successful_uploads">Borrar cargas exitosas</string>
-    <string name="action_force_rescan">Forzar rescaneo</string>
 
     <string name="action_switch_grid_view">Vista de cuadrícula</string>
     <string name="action_switch_list_view">Vista de lista</string>

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

@@ -463,10 +463,7 @@
 
     <string name="share_privilege_can_share">puede compartir</string>
     <string name="share_privilege_can_edit">puede editar</string>
-    <string name="action_retry_uploads">Reintentar cargas fallidas</string>
     <string name="action_clear_failed_uploads">Borrar cargas fallidas</string>
-    <string name="action_clear_successful_uploads">Borrar cargas exitosas</string>
-    <string name="action_force_rescan">Forzar rescaneo</string>
 
     <string name="action_switch_grid_view">Vista de cuadrícula</string>
     <string name="action_switch_list_view">Vista de lista</string>

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

@@ -385,10 +385,7 @@
 
     <string name="share_privilege_can_share">puede compartir</string>
     <string name="share_privilege_can_edit">puede editar</string>
-    <string name="action_retry_uploads">Reintentar cargas fallidas</string>
     <string name="action_clear_failed_uploads">Borrar cargas fallidas</string>
-    <string name="action_clear_successful_uploads">Borrar cargas exitosas</string>
-    <string name="action_force_rescan">Forzar rescaneo</string>
 
     <string name="action_switch_grid_view">Vista de cuadrícula</string>
     <string name="action_switch_list_view">Vista de lista</string>

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

@@ -483,10 +483,7 @@
     <string name="share_privilege_can_edit_change">puede cambiar</string>
     <string name="share_privilege_can_edit_delete">pude borrar</string>
 
-    <string name="action_retry_uploads">Reintentar cargas fallidas</string>
     <string name="action_clear_failed_uploads">Borrar cargas fallidas</string>
-    <string name="action_clear_successful_uploads">Borrar cargas exitosas</string>
-    <string name="action_force_rescan">Forzar rescaneo</string>
 
     <string name="action_switch_grid_view">Vista de cuadrícula</string>
     <string name="action_switch_list_view">Vista de lista</string>

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

@@ -385,10 +385,7 @@
 
     <string name="share_privilege_can_share">puede compartir</string>
     <string name="share_privilege_can_edit">puede editar</string>
-    <string name="action_retry_uploads">Reintentar cargas fallidas</string>
     <string name="action_clear_failed_uploads">Borrar cargas fallidas</string>
-    <string name="action_clear_successful_uploads">Borrar cargas exitosas</string>
-    <string name="action_force_rescan">Forzar rescaneo</string>
 
     <string name="action_switch_grid_view">Vista de cuadrícula</string>
     <string name="action_switch_list_view">Vista de lista</string>

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

@@ -385,10 +385,7 @@
 
     <string name="share_privilege_can_share">puede compartir</string>
     <string name="share_privilege_can_edit">puede editar</string>
-    <string name="action_retry_uploads">Reintentar cargas fallidas</string>
     <string name="action_clear_failed_uploads">Borrar cargas fallidas</string>
-    <string name="action_clear_successful_uploads">Borrar cargas exitosas</string>
-    <string name="action_force_rescan">Forzar rescaneo</string>
 
     <string name="action_switch_grid_view">Vista de cuadrícula</string>
     <string name="action_switch_list_view">Vista de lista</string>

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

@@ -385,10 +385,7 @@
 
     <string name="share_privilege_can_share">puede compartir</string>
     <string name="share_privilege_can_edit">puede editar</string>
-    <string name="action_retry_uploads">Reintentar cargas fallidas</string>
     <string name="action_clear_failed_uploads">Borrar cargas fallidas</string>
-    <string name="action_clear_successful_uploads">Borrar cargas exitosas</string>
-    <string name="action_force_rescan">Forzar rescaneo</string>
 
     <string name="action_switch_grid_view">Vista de cuadrícula</string>
     <string name="action_switch_list_view">Vista de lista</string>

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

@@ -385,10 +385,7 @@
 
     <string name="share_privilege_can_share">puede compartir</string>
     <string name="share_privilege_can_edit">puede editar</string>
-    <string name="action_retry_uploads">Reintentar cargas fallidas</string>
     <string name="action_clear_failed_uploads">Borrar cargas fallidas</string>
-    <string name="action_clear_successful_uploads">Borrar cargas exitosas</string>
-    <string name="action_force_rescan">Forzar rescaneo</string>
 
     <string name="action_switch_grid_view">Vista de cuadrícula</string>
     <string name="action_switch_list_view">Vista de lista</string>

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

@@ -385,10 +385,7 @@
 
     <string name="share_privilege_can_share">puede compartir</string>
     <string name="share_privilege_can_edit">puede editar</string>
-    <string name="action_retry_uploads">Reintentar cargas fallidas</string>
     <string name="action_clear_failed_uploads">Borrar cargas fallidas</string>
-    <string name="action_clear_successful_uploads">Borrar cargas exitosas</string>
-    <string name="action_force_rescan">Forzar rescaneo</string>
 
     <string name="action_switch_grid_view">Vista de cuadrícula</string>
     <string name="action_switch_list_view">Vista de lista</string>

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

@@ -463,10 +463,7 @@
 
     <string name="share_privilege_can_share">puede compartir</string>
     <string name="share_privilege_can_edit">puede editar</string>
-    <string name="action_retry_uploads">Reintentar cargas fallidas</string>
     <string name="action_clear_failed_uploads">Borrar cargas fallidas</string>
-    <string name="action_clear_successful_uploads">Borrar cargas exitosas</string>
-    <string name="action_force_rescan">Forzar rescaneo</string>
 
     <string name="action_switch_grid_view">Vista de cuadrícula</string>
     <string name="action_switch_list_view">Vista de lista</string>

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

@@ -385,10 +385,7 @@
 
     <string name="share_privilege_can_share">puede compartir</string>
     <string name="share_privilege_can_edit">puede editar</string>
-    <string name="action_retry_uploads">Reintentar cargas fallidas</string>
     <string name="action_clear_failed_uploads">Borrar cargas fallidas</string>
-    <string name="action_clear_successful_uploads">Borrar cargas exitosas</string>
-    <string name="action_force_rescan">Forzar rescaneo</string>
 
     <string name="action_switch_grid_view">Vista de cuadrícula</string>
     <string name="action_switch_list_view">Vista de lista</string>

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

@@ -510,10 +510,7 @@
     <string name="share_privilege_can_edit_change">puede cambiar</string>
     <string name="share_privilege_can_edit_delete">puede eliminar</string>
 
-    <string name="action_retry_uploads">Reintentar cargas fallidas</string>
     <string name="action_clear_failed_uploads">Borrar cargas fallidas</string>
-    <string name="action_clear_successful_uploads">Limpiar subidas exitosas</string>
-    <string name="action_force_rescan">Forzar reescaneo</string>
 
     <string name="action_switch_grid_view">Vista en cuadrícula</string>
     <string name="action_switch_list_view">Vista de lista</string>
@@ -835,4 +832,4 @@
     <string name="upload_sync_conflict">Conflicto al sincronizar. Por favor, resuélvelo manualmente</string>
     <string name="upload_cannot_create_file">No se puede crear el archivo local</string>
     <string name="upload_local_storage_not_copied">No se ha podido copiar el archivo al almacenamiento local</string>
-</resources>
+    </resources>

+ 1 - 2
src/main/res/values-et-rEE/strings.xml

@@ -383,9 +383,8 @@
     <string name="share_privilege_can_edit_change">saab muuta</string>
     <string name="share_privilege_can_edit_delete">saab kustutada</string>
 
-    <string name="action_retry_uploads">Proovi ebaõnnestunud üleslaadimisi uuesti</string>
     <string name="action_clear_failed_uploads">Puhasta ebaõnnestunud üleslaadimised</string>
-    <string name="action_clear_successful_uploads">Puhasta õnnestunud üleslaadimised</string>
+
     <string name="action_switch_grid_view">Ruudustikvaade</string>
     <string name="action_switch_list_view">Nimekirjavaade</string>
 

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

@@ -414,10 +414,7 @@ Mesedez, baimendu berriz</string>
 
     <string name="share_privilege_can_share">elkarbana dezake</string>
     <string name="share_privilege_can_edit">editatu dezake</string>
-    <string name="action_retry_uploads">Erroredun igoerak berriz saiatu</string>
     <string name="action_clear_failed_uploads">Erroredun igoerak garbitu</string>
-    <string name="action_clear_successful_uploads">Ondo igo diren igoerak garbitu</string>
-    <string name="action_force_rescan">Bireskaneatzea behartu</string>
 
     <string name="action_switch_grid_view">Sare ikuspegia</string>
     <string name="action_switch_list_view">Zerrenda ikuspegia</string>

+ 3 - 4
src/main/res/values-fi-rFI/strings.xml

@@ -45,6 +45,8 @@
     <string name="prefs_lock_device_credentials_enabled">Laitteen kirjautumistiedot käytössä</string>
     <string name="prefs_lock_device_credentials_not_setup">Laitteelle ei ole määritelty kirjautumistietoja.</string>
     <string name="prefs_show_hidden_files">Näytä piilotetut tiedostot</string>
+    <string name="prefs_enable_media_scan_notifications">Näytä mediakartoituksen ilmoitukset</string>
+    <string name="prefs_enable_media_scan_notifications_summary">Ilmoita uusista löydetyistä mediakansioista</string>
     <string name="prefs_log_delete_history_button">Poista historia</string>
     <string name="prefs_calendar_contacts">Synkronoi kalenteri &amp; kontaktit</string>
     <string name="prefs_calendar_contacts_no_store_error">Sekä F-Droid että Google Play asentamatta</string>
@@ -498,10 +500,7 @@
     <string name="share_privilege_can_edit_change">voi muuttaa</string>
     <string name="share_privilege_can_edit_delete">voi poistaa</string>
 
-    <string name="action_retry_uploads">Yritä lähetystä uudelleen</string>
     <string name="action_clear_failed_uploads">Tyhjennä epäonnistuneet lähetykset</string>
-    <string name="action_clear_successful_uploads">Tyhjennä onnistuneet lähetykset</string>
-    <string name="action_force_rescan">Pakota uudelleenskannaus</string>
 
     <string name="action_switch_grid_view">Ruudukkonäkymä</string>
     <string name="action_switch_list_view">Luettelonäkymä</string>
@@ -790,4 +789,4 @@ GNU yleinen lisenssi, versio 2</string>
     <string name="upload_old_android"><![CDATA[Salaus on mahdollista vain Androidin versiolla 5.0 ja sitä uudemmilla]]></string>
     <string name="upload_cannot_create_file">Paikallista tiedostoa ei voi luoda</string>
     <string name="upload_local_storage_not_copied">Tiedostoa ei voitu kopioida paikalliseen tallennustilaan</string>
-</resources>
+    </resources>

+ 7 - 3
src/main/res/values-fr/strings.xml

@@ -49,6 +49,8 @@
     <string name="prefs_enable_media_scan_notifications_summary">Notifier les nouveaux dossiers multimédias trouvés</string>
     <string name="prefs_log_delete_history_button">Effacer le journal</string>
     <string name="prefs_calendar_contacts">Synchroniser les contacts du calendrier&amp;</string>
+    <string name="prefs_calendar_contacts_summary">Configurer DAVx5 (autrefois connu comme DAVdroid) (v1.3.0+) pour le compte actuel</string>
+    <string name="prefs_calendar_contacts_address_resolve_error">L\'adresse du serveur pour le compte n\'a pas pu être résolu pour DAVx5 (autrefois connu comme DAVdroid)</string>
     <string name="prefs_calendar_contacts_no_store_error">Ni Google Play Store ou F-Droid ne sont installés</string>
     <string name="prefs_calendar_contacts_sync_setup_successful">Synchronisation de l\'agenda &amp; des contacts configurée</string>
     <string name="prefs_daily_contacts_sync_summary">Sauvegarde quotidienne de vos contacts</string>
@@ -512,10 +514,7 @@ Attention la suppression est irréversible.</string>
     <string name="share_privilege_can_edit_change">Peut modifier</string>
     <string name="share_privilege_can_edit_delete">Peut supprimer</string>
 
-    <string name="action_retry_uploads">Relancer les envois en erreur</string>
     <string name="action_clear_failed_uploads">Effacer les envois en erreur</string>
-    <string name="action_clear_successful_uploads">Effacer les envois réussis</string>
-    <string name="action_force_rescan">Actualiser</string>
 
     <string name="action_switch_grid_view">Affichage mosaïque</string>
     <string name="action_switch_list_view">Affichage liste</string>
@@ -650,6 +649,8 @@ Attention la suppression est irréversible.</string>
     <string name="resized_image_not_possible_download">Aucune image réduite disponible. Télécharger l\'image originale ?</string>
 
     <string name="store_short_desc">L\'application Android Nextcloud donne un accès mobile à tous les fichiers sur votre Nextcloud</string>
+    <string name="store_full_desc">L\'application, libre de copie, Nextcloud pour Android, vous donne accès à tous les fichiers dans votre Nextcloud.\nFonctionnalitées :\n* Interface moderne et simple d\'utilisation, adapté au thème de votre serveur\n* Envoyer des fichiers sur votre serveur Nextcloud\n* Partage de fichiers avec d\'autres personnes\n* Conserver vos fichiers et dossiers favoris synchronisés\n* Rechercher parmis tout vos dossiers sur votre serveur\n* Envoi automatisé de vos photos et vidéos prises sur vos appareils\n* Rester à jour avec vos notifications\n* Utilisation de plusieurs comptes\n* Accès sécurisé à vos données avec votre empreinte digitale ou code PIN\n* Intégration avec DAVx5 (autrefois connu comme DAVdroid) pour une synchronisation facile des contacts &amp; agenda\n\nS\'il vous plait, rapporter les bogues à l\'adresse suivante : https://github.com/nextcloud/android/issues et parler de cette application à l\'adresse suivante : https://help.nextcloud.com/c/clients/android\n\nNouveau sur Nextcloud? Nextcloud est un serveur privé de synchronisation &amp; partage de fichier, et de communication. C\'est un logiciel libre, et vous pouvez héberger vous même ou payez une companie pour le faire pour vous. Vous êtes en total contrôle de vos photos, votre calendrier, vos contacts, vos documents et tout le reste.\n\nAllez voir Nextcloud à l\'adresse suivante https://nextcloud.com</string>
+
     <string name="drawer_current_account">Compte actuel</string>
     <string name="drawer_middle_account">Compte du milieu</string>
     <string name="drawer_end_account">Dernier compte</string>
@@ -709,6 +710,8 @@ Attention la suppression est irréversible.</string>
     <string name="screenshot_03_drawer">Accédez rapidement aux fichiers hors-connexion, partagez, consultez l\'activé et bien plus</string>
     <string name="screenshot_04_accounts">Connectez-vous avec plusieurs comptes</string>
     <string name="screenshot_05_autoUpload">Téléversez instantanément vos photos &amp; vidéos</string>
+    <string name="screenshot_06_davdroid">Synchronisez Agenda &amp; Contacts avec DAVx5 (autrefois connue comme DAVdroid)</string>
+
     <string name="userinfo_no_info_headline">Aucunes informations personnelles renseignées</string>
     <string name="userinfo_no_info_text">Ajouter le nom, la photo et les coordonnées sur votre page de profil.</string>
     <string name="drawer_header_background">Image d\'arrière-plan de l\'en-tête du menu-tiroir</string>
@@ -837,4 +840,5 @@ Attention la suppression est irréversible.</string>
     <string name="upload_sync_conflict">Conflit de synchronisation, veuillez le résoudre manuellement</string>
     <string name="upload_cannot_create_file">Impossible de créer le fichier local</string>
     <string name="upload_local_storage_not_copied">Le fichier n\'a pas pu être copié sur le stockage local</string>
+    <string name="delete_entries">Supprimer les éléments</string>
 </resources>

+ 1 - 3
src/main/res/values-gl/strings.xml

@@ -512,10 +512,7 @@
     <string name="share_privilege_can_edit_change">pode cambiar</string>
     <string name="share_privilege_can_edit_delete">pode eliminar</string>
 
-    <string name="action_retry_uploads">Tentar de novo os envíos fallados</string>
     <string name="action_clear_failed_uploads">Limpar os envíos fallados</string>
-    <string name="action_clear_successful_uploads">Limpar os envíos satisfactorios</string>
-    <string name="action_force_rescan">Forzar un novo escaneo</string>
 
     <string name="action_switch_grid_view">Ver como grella</string>
     <string name="action_switch_list_view">Ver como lista</string>
@@ -861,4 +858,5 @@ Esta é a versión oficial de desenvolvemento, que presenta unha mostra diaria d
     <string name="upload_sync_conflict">Conflito ao sincronizar, resólvao manualmente</string>
     <string name="upload_cannot_create_file">Non é posíbel crear o ficheiro local</string>
     <string name="upload_local_storage_not_copied">Non foi posíbel copiar o ficheiro no almacenamento local</string>
+    <string name="delete_entries">Eliminar entradas</string>
 </resources>

+ 4 - 7
src/main/res/values-hu-rHU/strings.xml

@@ -10,10 +10,10 @@
     <string name="actionbar_send_file">Küldés</string>
     <string name="actionbar_sort">Rendezés</string>
     <string name="sort_by">Rendezés elve</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_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">Újabbak elöl</string>
-    <string name="menu_item_sort_by_date_oldest_first">Régebbieak elöl</string>
+    <string name="menu_item_sort_by_date_oldest_first">Régebbiek elöl</string>
     <string name="menu_item_sort_by_size_biggest_first">Nagyobbak elöl</string>
     <string name="menu_item_sort_by_size_smallest_first">Kisebbek elöl</string>
 
@@ -513,10 +513,7 @@
     <string name="share_privilege_can_edit_change">módosíthat</string>
     <string name="share_privilege_can_edit_delete">törölhet</string>
 
-    <string name="action_retry_uploads">Sikertelen feltöltések újrapróbálása</string>
     <string name="action_clear_failed_uploads">Sikertelen feltöltések eltávolítása</string>
-    <string name="action_clear_successful_uploads">Sikeres feltöltések eltávolítása</string>
-    <string name="action_force_rescan">Újra-átfésülés kényszerítése</string>
 
     <string name="action_switch_grid_view">Rács nézet</string>
     <string name="action_switch_list_view">Lista nézet</string>
@@ -859,4 +856,4 @@ A Nextcloud itt érhető el: https://nextcloud.com</string>
     <string name="upload_sync_conflict">Szinkronizációs ütközés, kérlek javítsd manuálisan</string>
     <string name="upload_cannot_create_file">Nem lehet a helyi fájlt létrehozni</string>
     <string name="upload_local_storage_not_copied">A fájlt nem lehet a helyi tárolóra másolni</string>
-</resources>
+    </resources>

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

@@ -465,10 +465,7 @@
     <string name="share_privilege_can_edit_change">dapat mengubah</string>
     <string name="share_privilege_can_edit_delete">dapat menghapus</string>
 
-    <string name="action_retry_uploads">Ulangi unggahan yang gagal.</string>
     <string name="action_clear_failed_uploads">Bersihkan unggahan gagal.</string>
-    <string name="action_clear_successful_uploads">Bersihkan unggahan yang berhasil.</string>
-    <string name="action_force_rescan">Paksa untuk memindah ulang.</string>
 
     <string name="action_switch_grid_view">Tampilan kotak</string>
     <string name="action_switch_list_view">Tampilan lis</string>

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

@@ -510,10 +510,7 @@
     <string name="share_privilege_can_edit_change">getur breytt</string>
     <string name="share_privilege_can_edit_delete">getur eytt</string>
 
-    <string name="action_retry_uploads">Prófa aftur innsendingar sem mistókust</string>
     <string name="action_clear_failed_uploads">Hreinsa lista yfir innsendingar sem mistókust</string>
-    <string name="action_clear_successful_uploads">Hreinsa lista yfir innsendingar sem tókust</string>
-    <string name="action_force_rescan">Þvinga endurskönnun</string>
 
     <string name="action_switch_grid_view">Reitir</string>
     <string name="action_switch_list_view">Listi</string>
@@ -835,4 +832,4 @@
     <string name="upload_sync_conflict">Árekstur í samstillingu, leystu þetta handvirkt</string>
     <string name="upload_cannot_create_file">Get ekki búið til skrá á tölvu</string>
     <string name="upload_local_storage_not_copied">Skrá var ekki hægt að afrita í staðværa gagnageymslu</string>
-</resources>
+    </resources>

+ 1 - 3
src/main/res/values-it/strings.xml

@@ -512,10 +512,7 @@
     <string name="share_privilege_can_edit_change">può cambiare</string>
     <string name="share_privilege_can_edit_delete">può eliminare</string>
 
-    <string name="action_retry_uploads">Riprova caricamenti non riusciti</string>
     <string name="action_clear_failed_uploads">Cancella caricamenti non riusciti</string>
-    <string name="action_clear_successful_uploads">Cancella i caricamenti completati</string>
-    <string name="action_force_rescan">Forza nuova scansione</string>
 
     <string name="action_switch_grid_view">Vista Griglia</string>
     <string name="action_switch_list_view">Vista Elenco</string>
@@ -841,4 +838,5 @@
     <string name="upload_sync_conflict">Conflitto di sincronizzazione, risolvi manualmente</string>
     <string name="upload_cannot_create_file">Impossibile creare il file locale</string>
     <string name="upload_local_storage_not_copied">Il file non può essere copiato nell\'archiviazione locale</string>
+    <string name="delete_entries">Elimina voci</string>
 </resources>

+ 6 - 3
src/main/res/values-iw/strings.xml

@@ -198,6 +198,7 @@
         <item quantity="many">נכשל בהתעקה של %1$d קבצים מתיקייה %2$s לתוך</item>
         <item quantity="other">נכשל בהתעקה של %1$d קובצים מתיקייה %2$s לתוך</item>
     </plurals>
+    <string name="sync_foreign_files_forgotten_explanation">החל מגרסה 1.3.16, קבצים שנשלחים מהמכשיר הזה מועתקים אל התיקייה המקומית %1$s כדי למנוע אבדן נתונים במקרה שקובץ אחד מסונכרן בין כמה חשבונות.\n\nעקב השינוי הזה, כל הקבצים שנשלחו בעזרת גרסאות קודמות של היישומון הועתקו לתיקייה %2$s. עם זאת, שגיאה מנעה את השלמת הפעולה הזאת במהלך סנכרון החשבון. באפשרותך להשאיר את הקובץ או הקבצים כמו שהם ולמחוק את הקישור אל %3$s, או להעביר את הקבצים אל התיקייה %1$s ולשמור את הקישור אל %4$s.\n\nלהלן כל הקבצים המקומיים והמרוחקים שתחת %5$s שאליהם הם מקושרים.</string>
     <string name="sync_current_folder_was_removed">התיקייה %1$s לא קיימת יותר</string>
     <string name="foreign_files_move">להעביר הכול</string>
     <string name="foreign_files_success">כל הקבצים הועברו</string>
@@ -519,10 +520,7 @@
     <string name="share_privilege_can_edit_change">הרשאות לערוך</string>
     <string name="share_privilege_can_edit_delete">האשרות למחוק</string>
 
-    <string name="action_retry_uploads">לנסות העלאות שנכשלו מחדש</string>
     <string name="action_clear_failed_uploads">פינוי העלאות שנכשלו</string>
-    <string name="action_clear_successful_uploads">פינוי העלאות שהצליחו</string>
-    <string name="action_force_rescan">אילוץ סריקה מחדש</string>
 
     <string name="action_switch_grid_view">תצוגת טבלה</string>
     <string name="action_switch_list_view">תצוגת רשימה</string>
@@ -549,6 +547,9 @@
     <string name="participate_testing_report_text">דיווח על תקלה ב־GitHub</string>
     <string name="participate_testing_version_text">מעניין אותך לסייע לנו על ידי בדיקת איכות לגרסה הבאה?</string>
     <string name="participate_beta_headline">בדיקת גרסת הפיתוח</string>
+    <string name="participate_beta_text">לרבות כל התכונות הקרבות וזה כבר בהליכי פיתוח. תקלות/שגיאות עשויות להתרחש, אפילו כשהן מתרחשות, נא לדווח לנו על הממצאים שלך.</string>
+    <string name="participate_release_candidate_headline">מועמדת להפצה</string>
+    <string name="participate_release_candidate_text">המהדורה שמועמדת להפצה (RC) היא חתך זמני והיא מיועדת להיות המהדורה היציבה. בדיקת התצורה שלך עשויה לסייע לוודא שכך זה יהיה. ניתן להירשם לניסוי בחנות Play או לחפש ידנית את בסעיף „גרסה” בתוך F-Droid.</string>
     <string name="participate_contribute_headline">תרומה פעילה</string>
     <string name="participate_contribute_irc_text">הצטרפות לשיח ב־IRC:</string>
     <string name="participate_contribute_forum_text">ניתן לסייע לאחרים</string>
@@ -567,6 +568,7 @@
     <string name="synced_folders_loading_folders">התיקיות נטענות…</string>
     <string name="synced_folders_no_results">לא נמצאו תיקיות מדיה</string>
     <string name="synced_folders_preferences">העדפות להעלאה אוטומטית</string>
+    <string name="synced_folders_new_info">ההעלאה המידית שופצה לחלוטין. עליך להגדיר העלאה אוטומטית מהתפריט הראשי.\n\nמזמינים אותך ליהנות מההעלאה האוטומטית החדשה והמשופרת.</string>
     <string name="synced_folders_preferences_folder_path">עבור %1$s</string>
     <plurals name="items_selected_count">
         <item quantity="one">נבחר %d</item>
@@ -841,4 +843,5 @@
     <string name="upload_sync_conflict">סתירת סנכרון, נא לפתור ידנית</string>
     <string name="upload_cannot_create_file">לא ניתן ליצור קובץ מקומי</string>
     <string name="upload_local_storage_not_copied">לא ניתן להעתיק קובץ לאחסון המקומי</string>
+    <string name="delete_entries">מחיקת רשומות</string>
 </resources>

+ 24 - 3
src/main/res/values-ja-rJP/strings.xml

@@ -45,9 +45,12 @@
     <string name="prefs_lock_device_credentials_enabled">デバイスの資格情報が有効です</string>
     <string name="prefs_lock_device_credentials_not_setup">デバイスの資格情報が設定されていません。</string>
     <string name="prefs_show_hidden_files">隠しファイルを表示</string>
+    <string name="prefs_enable_media_scan_notifications">メディアのスキャン結果通知を表示する</string>
     <string name="prefs_enable_media_scan_notifications_summary">新たに見つかったメディアフォルダを通知する</string>
     <string name="prefs_log_delete_history_button">履歴の削除</string>
     <string name="prefs_calendar_contacts">コンタクト &amp; カレンダーを同期</string>
+    <string name="prefs_calendar_contacts_summary">DAVx5 (旧称 DAVdroid) (v1.3.0+) を現在のアカウントに設定する</string>
+    <string name="prefs_calendar_contacts_address_resolve_error">このアカウントのDAVx5 (f旧称 DAVdroid)用サーバアドレスが解決できませんでした</string>
     <string name="prefs_calendar_contacts_no_store_error">F-Droid も Google Play もインストールされていません</string>
     <string name="prefs_calendar_contacts_sync_setup_successful">カレンダー &amp; 連絡先の同期設定しました</string>
     <string name="prefs_daily_contacts_sync_summary">連絡先のデイリーバックアップ</string>
@@ -505,10 +508,7 @@
     <string name="share_privilege_can_edit_change">変更可能</string>
     <string name="share_privilege_can_edit_delete">削除可能</string>
 
-    <string name="action_retry_uploads">失敗したアップロードを再試行する</string>
     <string name="action_clear_failed_uploads">失敗したアップロードのクリア</string>
-    <string name="action_clear_successful_uploads">成功したアップロードをクリアする</string>
-    <string name="action_force_rescan">強制再スキャン</string>
 
     <string name="action_switch_grid_view">グリッド表示</string>
     <string name="action_switch_list_view">リスト表示</string>
@@ -642,6 +642,8 @@
     <string name="resized_image_not_possible_download">サイズ変更された画像はありません。 フルイメージをダウンロードしますか?</string>
 
     <string name="store_short_desc">NextcloudのAndroidアプリは、あなたのNextcloudのすべてのファイルにモバイルアクセスを提供します。</string>
+    <string name="store_full_desc">あなたにモバイル・フリーダムをもたらすコピーレフト化された無償の Nextcloud Android アプリ。\n\nフィーチャー:\n* 簡単でモダンなインタフェースであなたのサーバに適合\n* あなたのNextcloudサーバにファイルをアップロード\n* ファイルの共有\n* お気に入りのファイルやフォルダをいつでも同期\n* サーバのすべてのフォルダをまたいで検索\n* あなたのデバイスで撮影した写真やビデオの自動アップロード\n* 更新の通知\n* 複数アカウントのサポート\n* 指紋やPIN認証であなたのデータに安全にアクセス\n* DAVx5 (旧称 DAVdroid) との統合によりカレンダーや連絡先の同期を簡単にセットアップ\n\n問題の報告は https://github.com/nextcloud/android/issues 、アプリについての議論は https://help.nextcloud.com/c/clients/android まで\n\nNextcloudは初めてですか? Nextcloud は個人ファイルの同期・共有とコミュニケーションのためのサーバです。無償のソフトウェアにより自分のためのホストをたてたり、そのための有償サービスを企業から受けることが出来るので、あなたの写真やカレンダー、連絡先、ドキュメントその他あらゆるファイルを自身でコントロールできます。\n\nNextcloud 詳細はhttps://nextcloud.comまで。</string>
+
     <string name="drawer_current_account">現在のアカウント</string>
     <string name="drawer_middle_account">ミドルアカウント</string>
     <string name="drawer_end_account">最後のアカウント</string>
@@ -704,6 +706,8 @@
     <string name="screenshot_03_drawer">アクティビティ、共有、オフラインファイルなどに素早くアクセス</string>
     <string name="screenshot_04_accounts">別のアカウントに接続する</string>
     <string name="screenshot_05_autoUpload">写真を自動的にアップロード &amp; ビデオ</string>
+    <string name="screenshot_06_davdroid">カレンダー&amp;連絡先をDAVx5 (旧称 DAVdroid)で同期する</string>
+
     <string name="userinfo_no_info_headline">個人情報が設定されていない</string>
     <string name="userinfo_no_info_text">プロフィールページに名前、写真、連絡先の詳細を追加します。</string>
     <string name="drawer_header_background">ドロワーヘッダーの背景イメージ</string>
@@ -766,6 +770,8 @@
     <string name="notification_channel_general_name">一般的な通知</string>
     <string name="notification_channel_general_description">新しいメディアフォルダなどの通知を表示する</string>
     <string name="new_media_folder_detected">新しい %1$s メディアフォルダが検出されました。</string>
+    <string name="configure_new_media_folder_detection_notifications">構成</string>
+    <string name="disable_new_media_folder_detection_notifications">無効</string>
     <string name="new_media_folder_photos">写真</string>
     <string name="new_media_folder_videos">ビデオ</string>
     <string name="outdated_server">サーバーのEOLが終わったので、アップグレードしてください!</string>
@@ -814,5 +820,20 @@
     <string name="create_file_from_template">テンプレートからファイルを作成する</string>
     <string name="error_retrieving_templates">テンプレートの取得中にエラーが発生しました</string>
     <string name="battery_optimization_title">バッテリー最適化</string>
+    <string name="battery_optimization_message">あなたのデバイスでバッテリー最適化が有効に設定されている場合、自動アップロードはこのアプリを最適化の対象から除外した場合にのみ正常に動作します</string>
+    <string name="battery_optimization_disable">無効</string>
     <string name="battery_optimization_close">閉じる</string>
+    <string name="battery_optimization_no_setting">バッテリーの設定を直接変更できません。手動で設定を調整してください。</string>
+    <string name="file_details_no_content">詳細のロードに失敗しました</string>
+    <string name="error_starting_direct_camera_upload">カメラ起動エラー</string>
+    <string name="uploader_upload_files_behaviour_not_writable">ソースフォルダーが読み取り専用のため、ファイルのアップロードのみ行ないます</string>
+    <string name="auto_upload_file_behaviour_kept_in_folder">読み取り専用のため元のフォルダに残しました</string>
+    <string name="scanQR_description">QRコードを用いてログイン</string>
+    <string name="upload_unknown_error">不明なエラー</string>
+    <string name="upload_lock_failed">フォルダのロックに失敗しました</string>
+    <string name="upload_local_storage_full">ローカルストレージに空きがありません</string>
+    <string name="upload_old_android"><![CDATA[暗号化はAndroid 5.0以降で可能]]></string>
+    <string name="upload_sync_conflict">同期の競合が発生しました。手動で解決してください。</string>
+    <string name="upload_cannot_create_file">ローカルファイルが作成できません</string>
+    <string name="upload_local_storage_not_copied">ローカルストレージへにファイルをコピーできませんでした</string>
     </resources>

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

@@ -434,10 +434,7 @@
 
     <string name="share_privilege_can_share">შეუძლიათ გაზიარება</string>
     <string name="share_privilege_can_edit">შეგიძლია შეცვლა</string>
-    <string name="action_retry_uploads">წარუმატებლად დასრულებული ატვირთების ხელახლა გაშვება</string>
     <string name="action_clear_failed_uploads">წარუმატებლად დასრულებული ატვირთების გასუფთავება</string>
-    <string name="action_clear_successful_uploads">წარმატებით დასრულებული ატვირთების გასუფთავება</string>
-    <string name="action_force_rescan">ხელახალი სკანირების ძალდატანება</string>
 
     <string name="action_switch_grid_view">ბადისებური ხედი</string>
     <string name="action_switch_list_view">ჩამონათვლისებური ხედი</string>

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

@@ -494,10 +494,7 @@
     <string name="share_privilege_can_edit_change">변경가능</string>
     <string name="share_privilege_can_edit_delete">삭제가능</string>
 
-    <string name="action_retry_uploads">실패한 업로드 다시 시도</string>
     <string name="action_clear_failed_uploads">실패한 업로드 삭제</string>
-    <string name="action_clear_successful_uploads">성공한 업로드 삭제</string>
-    <string name="action_force_rescan">강제로 다시 검사</string>
 
     <string name="action_switch_grid_view">바둑판식 보기</string>
     <string name="action_switch_list_view">목록 보기</string>

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

@@ -443,10 +443,7 @@
 
     <string name="share_privilege_can_share">gali dalintis</string>
     <string name="share_privilege_can_edit">gali redaguoti</string>
-    <string name="action_retry_uploads">Pabandyti iš naujo nepavykusius įkėlimus</string>
     <string name="action_clear_failed_uploads">Išvalyti baigtus įkėlimus</string>
-    <string name="action_clear_successful_uploads">Išvalyti sėkmingus įkėlimus</string>
-    <string name="action_force_rescan">Inicijuoti skenavimą iš naujo</string>
 
     <string name="action_switch_grid_view">Tinklelio vaizdas</string>
     <string name="action_switch_list_view">Sąrašas</string>

+ 31 - 25
src/main/res/values-lv/strings.xml

@@ -28,7 +28,7 @@
     <string name="drawer_item_videos">Video</string>
     <string name="drawer_item_settings">Iestatījumi</string>
     <string name="drawer_item_uploads_list">Augšupielādes</string>
-    <string name="drawer_item_activities">Izmaiņas</string>
+    <string name="drawer_item_activities">Darbības</string>
     <string name="drawer_item_notifications">Paziņojumi</string>
     <string name="drawer_quota">%1$s no %2$s lietoti</string>
     <string name="drawer_quota_unlimited">%1$s izmantoti</string>
@@ -45,6 +45,8 @@
     <string name="prefs_lock_device_credentials_enabled">Ierīces akreditācijas ieslēgta</string>
     <string name="prefs_lock_device_credentials_not_setup">Ierīces akreditācijas dati nav uzstādīti.</string>
     <string name="prefs_show_hidden_files">Rādīt slēptās datnes</string>
+    <string name="prefs_enable_media_scan_notifications">Rādīt mediju skenēšanas paziņojumus</string>
+    <string name="prefs_enable_media_scan_notifications_summary">Paziņt par jaunas mediju mapes atrašanu</string>
     <string name="prefs_log_delete_history_button">Dzēst vēsturi</string>
     <string name="prefs_calendar_contacts">Sinhronizēt kalendāra &amp; kontaktus</string>
     <string name="prefs_calendar_contacts_no_store_error">F-Droid vai Google Play nav uzstādīts</string>
@@ -55,7 +57,8 @@
     <string name="prefs_feedback">Atsauksmes</string>
     <string name="prefs_imprint">Importēt</string>
 
-	<string name="recommend_text">Izmanto %1$s aplikāciju arī Tu.\nLejuplādē to šeit: %2$s</string>
+	<string name="recommend_subject">Izmēģini %1$s savā ierīcē!</string>
+	<string name="recommend_text">Izmanto %1$s lietotni arī Tu.\nLejuplādē to šeit: %2$s</string>
     <string name="recommend_urls">%1$s vai %2$s</string>
 
     <string name="auth_check_server">Pārbaudīt serveri</string>
@@ -72,7 +75,7 @@
     <string name="uploader_wrn_no_account_setup_btn_text">Iestatīt</string>
     <string name="uploader_wrn_no_account_quit_btn_text">Iziet</string>
     <string name="uploader_error_title_no_file_to_upload">Nav datņu augšupielādei</string>
-    <string name="uploader_error_message_no_file_to_upload">Saņemtie dati neietver derīgu datni.</string>
+    <string name="uploader_error_message_no_file_to_upload">Saņemtie dati nesatur derīgu datni.</string>
     <string name="uploader_error_title_file_cannot_be_uploaded">Šo datni nevar augšupielādēt</string>
     <string name="uploader_error_message_read_permission_not_granted">%1$s nav atļauts lasīt saņemto datni</string>
     <string name="uploader_error_message_source_file_not_found">Augšupielādējamā datne netika atrasta. Lūdzu pārbaudi vai datne eksistē.</string>
@@ -85,8 +88,8 @@
     <string name="file_list_empty_headline">Šeit nav datņu</string>
     <string name="folder_list_empty_headline">Šeit nav mapju</string>
     <string name="file_list_empty">Augšupielādē kaut ko vai sinhronizē saturu ar savām ierīcēm!</string>
-    <string name="file_list_empty_favorites_filter_list">Faili un mapes kurus pievienosiet izlasei, būs redzami šeit</string>
-    <string name="file_list_empty_favorites_filter">Nekas netika atrast starp izlases datnēm.</string>
+    <string name="file_list_empty_favorites_filter_list">Datnes un mapes kuras pievienosiet favorītiem, būs redzami šeit</string>
+    <string name="file_list_empty_favorites_filter">Nekas netika atrast starp favorītu datnēm.</string>
     <string name="file_list_loading">Ielādē …</string>
     <string name="file_list_no_app_for_file_type">Neviena lietotne nevar atvērt šo datnes tipu.</string>
     <string name="local_file_list_empty">Šajā mapē nav datņu</string>
@@ -144,7 +147,7 @@
     <string name="uploader_upload_succeeded_content_single">%1$s augšupielādēts</string>
     <string name="uploader_upload_failed_ticker">Neizdevās augšupielādēt</string>
     <string name="uploader_upload_failed_content_single">Nevarēja augšupielādēt %1$s</string>
-    <string name="uploader_upload_failed_credentials_error">Augšupielāde neizdevās, pierakstieties atkārtoti.</string>
+    <string name="uploader_upload_failed_credentials_error">Augšupielāde neizdevās, piesakieties vēlreiz.</string>
     <string name="uploads_view_upload_status_failed_ssl_certificate_not_trusted">Neuzticams servera sertifikāts</string>
     <string name="uploads_view_title">Augšupielādes</string>
     <string name="uploads_view_group_current_uploads">Pašreizējais</string>
@@ -171,11 +174,11 @@
     <string name="downloader_download_failed_ticker">Neizdevās lejupielādēt</string>
     <string name="downloader_download_failed_content">Nevarēja lejupielādēt %1$s</string>
     <string name="downloader_not_downloaded_yet">Vēl nav lejupielādēts</string>
-    <string name="downloader_download_failed_credentials_error">Lejupielāde neizdevās, pierakstieties atkārtoti.</string>
+    <string name="downloader_download_failed_credentials_error">Lejupielāde neizdevās, piesakieties vēlreiz.</string>
     <string name="common_choose_account">Izvēlieties kontu</string>
     <string name="common_switch_account">Pārslēgt kontu</string>
     <string name="sync_fail_ticker">Sinhronizācija neizdevās</string>
-    <string name="sync_fail_ticker_unauthorized">Sinhronizācija neizdevās, piesakies vēlreiz</string>
+    <string name="sync_fail_ticker_unauthorized">Sinhronizācija neizdevās, piesakieties vēlreiz</string>
     <string name="sync_fail_content">Nevarēja sinhronizēt %1$s</string>
     <string name="sync_fail_content_unauthorized">Nepareiza parole kontam %1$s</string>
     <string name="sync_conflicts_in_favourites_ticker">Ir atrasti konflikti</string>
@@ -215,8 +218,8 @@
     <string name="media_state_playing">%1$s (atskaņot)</string>
     <string name="media_state_loading">%1$s (ielādēt)</string>
     <string name="media_event_done">%1$s atskaņošana pabeigta</string>
-    <string name="media_err_nothing_to_play">Nav atrasts neviens multivides fails</string>
-    <string name="media_err_not_in_owncloud">Šis fails nav pieejamā kontā</string>
+    <string name="media_err_nothing_to_play">Nav atrasta neviens multivides datne</string>
+    <string name="media_err_not_in_owncloud">Šī datne nav pieejamā kontā</string>
     <string name="media_err_unsupported">Neatbalstīts mediju kodekss</string>
     <string name="media_err_io">Nevarēja nolasīt medija datni</string>
     <string name="media_err_malformed">Multivides failam nav pareiza iekodēšana</string>
@@ -263,6 +266,8 @@
     <string name="auth_access_failed">Piekļuve neizdevās: %1$s</string>
     <string name="auth_illegal_login_used">Nepareizs pierakstīšanās datu URL izmantots</string>
 
+    <string name="favorite">Pievienot favorītiem</string>
+    <string name="unset_favorite">Noņemt no favorītiem</string>
     <string name="encrypted">Uzstādīt kā šifrētu</string>
     <string name="unset_encrypted">Atstatīt šifrēšanu</string>
     <string name="common_rename">Pārsaukt</string>
@@ -286,7 +291,7 @@
     <string name="activity_chooser_title">Sūtīt saiti uz…</string>
     <string name="wait_for_tmp_copy_from_private_storage">Notiek faila kopēšana no privāta krātuves</string>
 
-    <string name="oauth_check_onoff">Pierakstīties izmantojot OAuth 2.0</string>
+    <string name="oauth_check_onoff">Pieteikties izmantojot OAuth 2.0</string>
     <string name="oauth_login_connection">Savienojas ar OAuth 2.0 serveri…</string>
 
     <string name="ssl_validator_header">Servera identitāti nevarēja pārbaudīt</string>
@@ -326,7 +331,8 @@
     <string name="auto_upload_on_wifi">Augšupielādēt tikai neirobežotā Wi-Fi</string>
     <string name="instant_upload_on_charging">Augšupielādēt tikai uzlādes laikā</string>
     <string name="instant_upload_path">/TūlītējaAugšupielāde</string>
-    <string name="conflict_title">Fails konfliktē</string>
+    <string name="conflict_title">Datne konfliktē</string>
+    <string name="conflict_message">Kuras datnes vālaties paturēt? Ja izvēlēsieties abas versijas, lokālai datnei nosaukumam tiks pievienots numurs.</string>
     <string name="conflict_keep_both">Paturēt abas</string>
     <string name="conflict_use_local_version">lokālā versija</string>
     <string name="conflict_use_server_version">servera versija</string>
@@ -334,13 +340,15 @@
     <string name="preview_sorry">Atvainojiet</string>
     <string name="preview_image_description">Attēla priekšskatījums</string>
     <string name="preview_image_error_unknown_format">Nevar attēlot attēlu</string>
+    <string name="preview_image_error_no_local_file">Nav lokālās datnes lai priekšskatītu</string>
+
     <string name="error__upload__local_file_not_copied">%1$s nevar kopēt uz %2$s lokālo mapi</string>
     <string name="prefs_synced_folders_local_path_title">Vietējā mape</string>
     <string name="prefs_synced_folders_remote_path_title">Attālinātā mape</string>
     <string name="prefs_instant_upload_path_use_subfolders_title">Lietot apakšmapi</string>
     <string name="prefs_instant_upload_path_use_subfolders_summary">Saglabāt apakšmapēs pēc gada un mēneša</string>
 
-	<string name="share_link_file_no_exist">Nevar koplietot. Lūdzu, pārbaudiet, vai fails pastāv</string>
+	<string name="share_link_file_no_exist">Nevar koplietot. Lūdzu, pārbaudiet, vai datne pastāv</string>
 	<string name="share_link_file_error">Radās kļūda, mēģinot koplietot šo failu vai mapi</string>
 	<string name="unshare_link_file_no_exist">Neizdevās beigt koplietošanu. Lūdzu pārbaudiet vai datne eksistē</string>
 	<string name="unshare_link_file_error">Radās kļūda mēģinot beigt datnes vai mapes koplietošanu.</string>
@@ -369,7 +377,7 @@
     <string name="update_link_forbidden_permissions">lai atjauninātu šo koplietošanu</string>
     <string name="forbidden_permissions_create">lai izveidotu šo datni</string>
     <string name="uploader_upload_forbidden_permissions">lai augšupielādētu šo mapi</string>
-    <string name="downloader_download_file_not_found">Fails serverī vairs nav pieejams</string>
+    <string name="downloader_download_file_not_found">Datne serverī vairs nav pieejama</string>
 
     <string name="file_migration_dialog_title">Atjauninot saglabāšanas vietu</string>
     <string name="file_migration_preparing">Sagatavo migrāciju…</string>
@@ -399,7 +407,7 @@
     <string name="drawer_manage_accounts">Pārvaldīt kontus</string>
     <string name="auth_redirect_non_secure_connection_title">Drošais savienojums novirzīts caur nedrošu ceļu.</string>
 
-	<string name="actionbar_logger">Žurnāl faili</string>
+	<string name="actionbar_logger">Žurnāli</string>
 	<string name="log_send_history_button">Sūtīt vēsturi</string>
 	<string name="log_send_no_mail_app">Nav atrasta neviena lietotne log failu sūtīšanai. Lūdzu instalējiet E-Pasta klientu.</string>
 	<string name="log_send_mail_subject">%1$s Android programmas žurnāli</string>
@@ -419,7 +427,7 @@
     <string name="forbidden_permissions_move">lai pārvietotu šo datni</string>
 
 
-    <string name="copy_file_not_found">Nevar nokopēt. Lūdzu, pārbaudiet, vai fails pastāv</string>
+    <string name="copy_file_not_found">Nevar nokopēt. Lūdzu, pārbaudiet, vai datne pastāv</string>
     <string name="copy_file_invalid_into_descendent">Nav iespējams kopēt mapi tās apakšmapē</string>
     <string name="copy_file_invalid_overwrite">Datne jau pastāv mērķa mapē</string>
     <string name="copy_file_error">Radās kļūda, mēģinot kopēt šo failu vai mapi</string>
@@ -446,13 +454,13 @@
     <plurals name="file_list__footer__file">
         <item quantity="zero">%1$d faili</item>
         <item quantity="one">%1$d fails</item>
-        <item quantity="other">%1$d faili</item>
+        <item quantity="other">%1$d datnes</item>
     </plurals>
     <string name="set_picture_as">Izmantot attēlu kā</string>
     <string name="set_as">Saglabāt kā</string>
 
-    <string name="prefs_instant_behaviour_dialogTitle">Orģinālais fails būs…</string>
-    <string name="prefs_instant_behaviour_title">Orģinālais fails būs…</string>
+    <string name="prefs_instant_behaviour_dialogTitle">Orģinālā datne būs…</string>
+    <string name="prefs_instant_behaviour_title">Orģinālā datne būs…</string>
     <string name="select_all">Atzīmēt visu</string>
     <string name="deselect_all">Atcelt atzīmi</string>
 
@@ -499,10 +507,7 @@
     <string name="share_privilege_can_edit_change">var mainīt</string>
     <string name="share_privilege_can_edit_delete">var dzēst</string>
 
-    <string name="action_retry_uploads">Atkārtot neizdevušās augšupielādes</string>
     <string name="action_clear_failed_uploads">Notīrīt neizdevušās augšupielādes</string>
-    <string name="action_clear_successful_uploads">Notīrīt sekmīgās augšupielādes</string>
-    <string name="action_force_rescan">Piespiest pārskanēšanu</string>
 
     <string name="action_switch_grid_view">Režģa izkārtojums</string>
     <string name="action_switch_list_view">Saraksta izkārtojums</string>
@@ -556,9 +561,9 @@
     <string name="notifications_no_results_headline">Nav paziņojumu</string>
     <string name="upload_file_dialog_filename">Faila nosaukums</string>
     <string name="upload_file_dialog_filetype">Faila tips</string>
-    <string name="upload_file_dialog_filetype_snippet_text">Mazs teksta fails(.txt)</string>
-    <string name="upload_file_dialog_filetype_internet_shortcut">Interneta saīsnes fails(%s)</string>
-    <string name="upload_file_dialog_filetype_googlemap_shortcut">Google Maps īsceļa fails (%s)</string>
+    <string name="upload_file_dialog_filetype_snippet_text">Maza teksta datne(.txt)</string>
+    <string name="upload_file_dialog_filetype_internet_shortcut">Interneta saīsnes datne(%s)</string>
+    <string name="upload_file_dialog_filetype_googlemap_shortcut">Google Maps īsceļa datne(%s)</string>
 
     <string name="storage_description_default">Noklusējuma</string>
 
@@ -635,6 +640,7 @@
 	<string name="restore">Atjaunot datni</string>
     <string name="new_version_was_created">Jauna versija izveidota</string>
     <string name="new_comment">Jauns komentārs…</string>
+    <string name="error_comment_file">Kļūda komentējot datni</string>
     <string name="dismiss">Atmest</string>
     <string name="drawer_item_trashbin">Dzēstās datnes</string>
     <string name="trashbin_activity_title">Dzēstās datnes</string>

+ 5 - 4
src/main/res/values-nb-rNO/strings.xml

@@ -49,6 +49,8 @@
     <string name="prefs_enable_media_scan_notifications_summary">Varsle om nye mediamapper</string>
     <string name="prefs_log_delete_history_button">Slett historikk</string>
     <string name="prefs_calendar_contacts">Synkroniser kalender &amp; kontakter</string>
+    <string name="prefs_calendar_contacts_summary">Konfigurer DAVx5 (tidligere DAVdroid) (v1.3.0+)  for gjeldende konto</string>
+    <string name="prefs_calendar_contacts_address_resolve_error">Adresse til tjener kan ikke nås for DAVx5 (tidligere DAVdroid)</string>
     <string name="prefs_calendar_contacts_no_store_error">Hverken F-Droid eller Google Play er installert</string>
     <string name="prefs_calendar_contacts_sync_setup_successful">Kalender &amp; kontaktsynkronisering ble satt opp</string>
     <string name="prefs_daily_contacts_sync_summary">Daglig sikkerhetskopiering av kontakter</string>
@@ -510,10 +512,7 @@
     <string name="share_privilege_can_edit_change">kan endre</string>
     <string name="share_privilege_can_edit_delete">kan slette</string>
 
-    <string name="action_retry_uploads">Prøv å laste opp igjen.</string>
     <string name="action_clear_failed_uploads">Fjern feilede opplastinger</string>
-    <string name="action_clear_successful_uploads">Fjern fullførte opplastinger</string>
-    <string name="action_force_rescan">Tving reskanning</string>
 
     <string name="action_switch_grid_view">Rutenett-visning</string>
     <string name="action_switch_list_view">Listevisning</string>
@@ -707,6 +706,8 @@
     <string name="screenshot_03_drawer">Rask tilgang til aktivitet, delinger, frakoblede filer og mer</string>
     <string name="screenshot_04_accounts">Koble til forskjellige kontoer</string>
     <string name="screenshot_05_autoUpload">Last opp bilder og videoer automatisk</string>
+    <string name="screenshot_06_davdroid">Synkroniser kalender &amp;kontakter med DAVx5 (tidligere DAVdroid)</string>
+
     <string name="userinfo_no_info_headline">Ingen personlig info satt</string>
     <string name="userinfo_no_info_text">Legg til navn, bilde og kontaktdetaljer på profilsiden.</string>
     <string name="drawer_header_background">Bakgrunsbilde for innledning på meny</string>
@@ -835,4 +836,4 @@
     <string name="upload_sync_conflict">Synkroniseringskonflikt, vennligst fiks manuelt</string>
     <string name="upload_cannot_create_file">Kan ikke opprette lokal fil</string>
     <string name="upload_local_storage_not_copied">Filen kunne ikke kopieres til lokal lagring</string>
-</resources>
+    </resources>

+ 1 - 3
src/main/res/values-nl/strings.xml

@@ -512,10 +512,7 @@
     <string name="share_privilege_can_edit_change">kan wijzigen</string>
     <string name="share_privilege_can_edit_delete">kan verwijderen</string>
 
-    <string name="action_retry_uploads">Probeer mislukte uploads opnieuw</string>
     <string name="action_clear_failed_uploads">Wis mislukte uploads</string>
-    <string name="action_clear_successful_uploads">Wis gelukte uploads</string>
-    <string name="action_force_rescan">Indexering forceren</string>
 
     <string name="action_switch_grid_view">Rasterindeling </string>
     <string name="action_switch_list_view">Lijstindeling</string>
@@ -841,4 +838,5 @@
     <string name="upload_sync_conflict">Sync-konflikt, los het a.u.b. manueel op</string>
     <string name="upload_cannot_create_file">Kan geen lokaal bestand aanmaken</string>
     <string name="upload_local_storage_not_copied">Bestand kan niet naar de lokale opschlag gekopieerd worden</string>
+    <string name="delete_entries">Verwijder records</string>
 </resources>

+ 1 - 3
src/main/res/values-pl/strings.xml

@@ -520,10 +520,7 @@
     <string name="share_privilege_can_edit_change">może zmienić</string>
     <string name="share_privilege_can_edit_delete">może usunąć</string>
 
-    <string name="action_retry_uploads">Ponów nieudane wysyłanie</string>
     <string name="action_clear_failed_uploads">Wyczyść nieudane wysyłanie</string>
-    <string name="action_clear_successful_uploads">Wyczyść udane wysyłanie</string>
-    <string name="action_force_rescan">Wymuś indeksowanie</string>
 
     <string name="action_switch_grid_view">Widok siatki</string>
     <string name="action_switch_list_view">Widok listy</string>
@@ -853,4 +850,5 @@ Wersja Nextcloud Dev jest wersją rozwojową, można ją zainstalować równoleg
     <string name="upload_sync_conflict">Konflikt synchronizacji, proszę rozwiązać ręcznie</string>
     <string name="upload_cannot_create_file">Nie można utworzyć pliku lokalnego</string>
     <string name="upload_local_storage_not_copied">Nie można skopiować pliku do lokalnego magazynu</string>
+    <string name="delete_entries">Usuń wpisy</string>
 </resources>

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

@@ -512,10 +512,7 @@
     <string name="share_privilege_can_edit_change">pode alterar</string>
     <string name="share_privilege_can_edit_delete">pode excluir</string>
 
-    <string name="action_retry_uploads">Retentar envios falhados</string>
     <string name="action_clear_failed_uploads">Limpar envios falhados</string>
-    <string name="action_clear_successful_uploads">Limpar envios concluídos</string>
-    <string name="action_force_rescan">Forçar verificação</string>
 
     <string name="action_switch_grid_view">Vista em grade</string>
     <string name="action_switch_list_view">Lista de visualização</string>
@@ -841,4 +838,5 @@
     <string name="upload_sync_conflict">Conflito na sincronização, resolva manualmente</string>
     <string name="upload_cannot_create_file">Não foi possível criar o arquivo local</string>
     <string name="upload_local_storage_not_copied">O arquivo não pôde ser copiado para o armazenamento local</string>
+    <string name="delete_entries">Excluir entradas</string>
 </resources>

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

@@ -510,10 +510,7 @@
     <string name="share_privilege_can_edit_change">pode alterar</string>
     <string name="share_privilege_can_edit_delete">pode apagar</string>
 
-    <string name="action_retry_uploads">Repetir envios falhados</string>
     <string name="action_clear_failed_uploads">Limpar envios falhados</string>
-    <string name="action_clear_successful_uploads">Limpar envios bem sucedidos</string>
-    <string name="action_force_rescan">Forçar reanálise</string>
 
     <string name="action_switch_grid_view">Vista em grelha</string>
     <string name="action_switch_list_view">Vista em lista</string>
@@ -839,4 +836,4 @@ Tanto a versão oficial dev como a versão regular estão disponíveis no F-droi
     <string name="upload_sync_conflict">Conflito de sincronização, por favor, resolva-o manualmente</string>
     <string name="upload_cannot_create_file">Não é possível criar ficheiro local</string>
     <string name="upload_local_storage_not_copied">O ficheiro não pôde ser copiado para o armazenamento local</string>
-</resources>
+    </resources>

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

@@ -520,10 +520,7 @@
     <string name="share_privilege_can_edit_change">Разрешить изменять</string>
     <string name="share_privilege_can_edit_delete">Разрешить удалять</string>
 
-    <string name="action_retry_uploads">Повторить неудавшиеся</string>
     <string name="action_clear_failed_uploads">Убрать неудавшиеся</string>
-    <string name="action_clear_successful_uploads">Убрать успешные</string>
-    <string name="action_force_rescan">Перепроверить список</string>
 
     <string name="action_switch_grid_view">Вид сеткой</string>
     <string name="action_switch_list_view">Вид списком</string>
@@ -851,4 +848,4 @@
     <string name="upload_sync_conflict">Требуется вмешательство для разрешения конфликта синхронизации</string>
     <string name="upload_cannot_create_file">Невозможно создать локальный файл</string>
     <string name="upload_local_storage_not_copied">Невозможно скопировать файл в локальное хранилище</string>
-</resources>
+    </resources>

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

@@ -518,10 +518,7 @@
     <string name="share_privilege_can_edit_change">môže zmeniť</string>
     <string name="share_privilege_can_edit_delete">môže odstrániť</string>
 
-    <string name="action_retry_uploads">Zopakovať zlyhané nahrávania</string>
     <string name="action_clear_failed_uploads">Odstrániť zlyhané nahrávania</string>
-    <string name="action_clear_successful_uploads">Odstrániť úspešné nahrávania</string>
-    <string name="action_force_rescan">Vynútiť prehľadávanie</string>
 
     <string name="action_switch_grid_view">Zobrazenie mriežky</string>
     <string name="action_switch_list_view">Zobrazenie zoznamu</string>
@@ -845,4 +842,4 @@
     <string name="upload_sync_conflict">Chyba synchronizácie, prosím vyriešte manuálne</string>
     <string name="upload_cannot_create_file">Nieje možné vytvoriť lokálny súbor</string>
     <string name="upload_local_storage_not_copied">Nepodarilo sa skopírovať súbor na lokálne úložište</string>
-</resources>
+    </resources>

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

@@ -465,10 +465,7 @@
     <string name="share_privilege_can_edit_change">lahko spremeni</string>
     <string name="share_privilege_can_edit_delete">lahko izbriše</string>
 
-    <string name="action_retry_uploads">Ponovi neuspela nalaganja</string>
     <string name="action_clear_failed_uploads">Pobriši neuspela nalaganja</string>
-    <string name="action_clear_successful_uploads">Pobriši uspela nalaganja</string>
-    <string name="action_force_rescan">Vsili osvežitev</string>
 
     <string name="action_switch_grid_view">Mrežni pogled</string>
     <string name="action_switch_list_view">Seznamski pogled</string>

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

@@ -513,10 +513,7 @@
     <string name="share_privilege_can_edit_change">mund të ndryshohet</string>
     <string name="share_privilege_can_edit_delete">mund të fshihet</string>
 
-    <string name="action_retry_uploads">Riprovoni ngarkimet e dështuara</string>
     <string name="action_clear_failed_uploads">Pastroni ngarkimet e dështuara</string>
-    <string name="action_clear_successful_uploads">Fshi ngarkimet e suksesshme</string>
-    <string name="action_force_rescan">Riskanim i detyruar</string>
 
     <string name="action_switch_grid_view">Pamje galeri</string>
     <string name="action_switch_list_view">Pamje listë</string>

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

@@ -516,10 +516,7 @@
     <string name="share_privilege_can_edit_change">може да мења</string>
     <string name="share_privilege_can_edit_delete">може да брише</string>
 
-    <string name="action_retry_uploads">Понови неуспела отпремања</string>
     <string name="action_clear_failed_uploads">Избриши неуспела отпремања</string>
-    <string name="action_clear_successful_uploads">Очисти успела отпремања</string>
-    <string name="action_force_rescan">Форсирај поновно скенирање</string>
 
     <string name="action_switch_grid_view">Приказ мреже</string>
     <string name="action_switch_list_view">Приказ листе</string>
@@ -846,4 +843,4 @@
     <string name="upload_sync_conflict">Конфликт приликом синхронизације, разрешите га ручно</string>
     <string name="upload_cannot_create_file">Не могу да направим локални фајл</string>
     <string name="upload_local_storage_not_copied">Фајл није могао да се копира на локално складиште</string>
-</resources>
+    </resources>

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

@@ -513,10 +513,7 @@
     <string name="share_privilege_can_edit_change">kan ändra</string>
     <string name="share_privilege_can_edit_delete">kan radera</string>
 
-    <string name="action_retry_uploads">Försök igen med misslyckade uppladdningar</string>
     <string name="action_clear_failed_uploads">Ta bort misslyckade uppladdningar</string>
-    <string name="action_clear_successful_uploads">Ta bort lyckade uppladdningar</string>
-    <string name="action_force_rescan">Tvinga ny genomsökning</string>
 
     <string name="action_switch_grid_view">Rutnätsvy</string>
     <string name="action_switch_list_view">Listvy</string>
@@ -836,4 +833,4 @@
     <string name="upload_sync_conflict">Synkroniseringskonflikt, lös problemet manuellt</string>
     <string name="upload_cannot_create_file">Kan inte skapa lokal fil</string>
     <string name="upload_local_storage_not_copied">Filen kunde inte kopieras till lokal lagringsplats</string>
-</resources>
+    </resources>

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

@@ -49,6 +49,8 @@
     <string name="prefs_enable_media_scan_notifications_summary">Yeni bulunan ortam klasörleri bildirilsin</string>
     <string name="prefs_log_delete_history_button">Geçmişi sil</string>
     <string name="prefs_calendar_contacts">Takvim ve kişiler eşitlensin</string>
+    <string name="prefs_calendar_contacts_summary">Geçerli hesap için DAVx5 (eski adı DAVdroid) (v1.3.0+) kurulumu</string>
+    <string name="prefs_calendar_contacts_address_resolve_error">DAVx5 (eski adı DAVdroid) sunucu adı ya da adresi çözümlenemedi</string>
     <string name="prefs_calendar_contacts_no_store_error">F-Droid ya da Google Play kurulmamış</string>
     <string name="prefs_calendar_contacts_sync_setup_successful">Takvim ve kişi eşitlemesi ayarları</string>
     <string name="prefs_daily_contacts_sync_summary">Kişilerinizin günlük yedeği</string>
@@ -510,10 +512,7 @@
     <string name="share_privilege_can_edit_change">düzenleyebilir</string>
     <string name="share_privilege_can_edit_delete">silebilir</string>
 
-    <string name="action_retry_uploads">Tamamlanamayan yüklemeler yinelensin</string>
     <string name="action_clear_failed_uploads">Tamamlanamayan yüklemeler silinsin</string>
-    <string name="action_clear_successful_uploads">Sorunsuz yüklemeler temizlensin</string>
-    <string name="action_force_rescan">Yeniden tarama dayatılsın</string>
 
     <string name="action_switch_grid_view">Tablo görünümü</string>
     <string name="action_switch_list_view">Liste görünümü</string>
@@ -648,6 +647,8 @@
     <string name="resized_image_not_possible_download">Boyutu değiştirilmiş bir görsel yok. Tam görsel indirilsin mi?</string>
 
     <string name="store_short_desc">Nextcloud Android uygulaması Nextcloud üzerindeki tüm dosyalarınıza erişmenizi sağlar.</string>
+    <string name="store_full_desc">Copyleft Nextcloud Android uygulaması, Nextcloud üzerindeki tüm dosyalarınıza erişmenizi sağlar.\n\nÖzellikleri:\* Sunucunuzun temasına uygun, kolay kullanılan modern arayüz\n* Dosyalarınızı Nextcloud sunucunuza yükleme\n* Dosyalarınızı başkalarıyla paylaşma\n* Sık kullandığınız dosya ve klasörleri eşitleme\n* Sunucunuzdaki tüm klasörlerde arama yapma\n* Çektiğiniz fotoğraf ve görüntüleri otomatik yükleme\n* Bildirimler ile güncel kalma\n* Birden çok hesap desteği\n*Parmak izi ya da PIN kodu ile verilerinize güvenli erişme\n* DAVx5 (eski adı DAVdroid) bütünleştirmesi ile takvim ve kişileri eşitleme\n\nKullanımda karşılaşabileceğiniz hataları https://github.com/nextcloud/android/issues adresinden bildirebilir, uygulama hakkındaki konuları https://help.nextcloud.com/c/clients/android adresinde tartışabilirsiniz\n\nNextcloud ile yeni mi tanıştınız? Nextcloud özel bir veri depolama ve paylaşma ağıdır. Tamamen açık kaynak kodludur. Dosyalarınızı kendi sunucunuzda saklayabileceğiniz gibi ücretli hizmet olarak da satın alabilirsiniz. Böylece fotoğraflarınız, dosyalarınız, takviminiz, belgeleriniz, kişileriniz ve diğer tüm özel bilgileriniz sizin kontrolünüzde olur. \n\nAyrıntılı bilgi almak için https://nextcloud.com adresinden web sitemize bakabilirsiniz.</string>
+
     <string name="drawer_current_account">Geçerli hesap</string>
     <string name="drawer_middle_account">Orta hesap</string>
     <string name="drawer_end_account">Son hesap</string>
@@ -707,6 +708,8 @@
     <string name="screenshot_03_drawer">İşlem, paylaşım, çevrimdışı dosyalar ve diğer özelliklere kolayca erişin</string>
     <string name="screenshot_04_accounts">Farklı hesaplara bağlanın</string>
     <string name="screenshot_05_autoUpload">Fotoğraf ve görüntülerinizi otomatik olarak yükleyin</string>
+    <string name="screenshot_06_davdroid">DAVx5 (eski adı DAVdroid) ile Takvim ve Kişileri eşitlem</string>
+
     <string name="userinfo_no_info_headline">Herhangi bir kişisel bilgi ayarlanmamış</string>
     <string name="userinfo_no_info_text">Profil sayfanızdan ad, görsel ve iletişim bilgilerinizi ekleyin.</string>
     <string name="drawer_header_background">Çekmece üst bilgisinin arka plan görseli</string>
@@ -835,4 +838,5 @@
     <string name="upload_sync_conflict">Eşitleme çakışması, lütfen sorunu el ile çözün</string>
     <string name="upload_cannot_create_file">Yerel dosya oluşturulamadı</string>
     <string name="upload_local_storage_not_copied">Dosya yerel depolamaya kopyalanamadı</string>
+    <string name="delete_entries">Kayıtları sil</string>
 </resources>

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

@@ -392,9 +392,8 @@
     <string name="share_privilege_can_edit_change">có thể chỉnh sửa</string>
     <string name="share_privilege_can_edit_delete">có thể xóa</string>
 
-    <string name="action_retry_uploads">Thử lại các tải lên bị lỗi</string>
     <string name="action_clear_failed_uploads">Dọn dẹp các tải lên bị lỗi</string>
-    <string name="action_clear_successful_uploads">Dọn dẹp các tải lên đã hoàn tất</string>
+
     <string name="manage_space_title">Quản lý dung lượng</string>
     <string name="manage_space_clear_data">Xóa dữ liệu</string>
 

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

@@ -508,10 +508,7 @@
     <string name="share_privilege_can_edit_change">可以修改</string>
     <string name="share_privilege_can_edit_delete">允许删除</string>
 
-    <string name="action_retry_uploads">重试失败上传任务</string>
     <string name="action_clear_failed_uploads">清除失败上传任务</string>
-    <string name="action_clear_successful_uploads">清除成功上传任务</string>
-    <string name="action_force_rescan">强制重新扫描</string>
 
     <string name="action_switch_grid_view">网格视图</string>
     <string name="action_switch_list_view">列表视图</string>
@@ -832,4 +829,4 @@
     <string name="upload_sync_conflict">同步时发生异常,请手动同步</string>
     <string name="upload_cannot_create_file">无法新建本地文件</string>
     <string name="upload_local_storage_not_copied">文件无法被复制到本地存储</string>
-</resources>
+    </resources>

+ 53 - 4
src/main/res/values-zh-rTW/strings.xml

@@ -509,10 +509,7 @@
     <string name="share_privilege_can_edit_change">允許更動</string>
     <string name="share_privilege_can_edit_delete">允許刪除</string>
 
-    <string name="action_retry_uploads">重試失敗的上傳</string>
     <string name="action_clear_failed_uploads">清除失敗的上傳</string>
-    <string name="action_clear_successful_uploads">清除成功的上傳</string>
-    <string name="action_force_rescan">強制重新掃描</string>
 
     <string name="action_switch_grid_view">網格檢視</string>
     <string name="action_switch_list_view">清單檢視</string>
@@ -541,12 +538,17 @@
     <string name="participate_beta_headline">測試開發版本</string>
     <string name="participate_beta_text">這包含所有最新功能,預期執行上仍可能會有錯誤,若發現錯誤請回報給我們。</string>
     <string name="participate_release_candidate_headline">最終測試版</string>
+    <string name="participate_release_candidate_text">最終測試版是新版本發行前的快照,應該相當穩定。您的測試將協助我們確保穩定性,在 Play 商店中註冊成為測試者,或是在 F-Droid 中尋找「版本」區塊</string>
     <string name="participate_contribute_headline">積極貢獻</string>
+    <string name="participate_contribute_irc_text">加入 IRC:</string>
     <string name="participate_contribute_forum_text">幫助其他人</string>
     <string name="participate_contribute_forum_forum">論壇</string>
     <string name="participate_contribute_translate_translate">翻譯</string>
     <string name="participate_contribute_translate_text">應用程式</string>
+    <string name="participate_contribute_github_text">檢查、修改和撰寫程式碼,請參見 %1$s</string>
     <string name="participate_rc_play_store">從Google Play商店取得正式發行版</string>
+    <string name="participate_rc_fdroid">從 F-Driod 應用程式取得發行版本</string>
+    <string name="participate_dev_fdroid">從 F-Droid 應用程式取得開發版</string>
     <string name="participate_dev_direct_download">直接下載開發版</string>
     <string name="move_to">移動至…</string>
     <string name="copy_to">複製到…</string>
@@ -555,6 +557,7 @@
     <string name="synced_folders_loading_folders">載入資料夾…</string>
     <string name="synced_folders_no_results">沒有發現媒體檔案</string>
     <string name="synced_folders_preferences">自動上傳偏好</string>
+    <string name="synced_folders_new_info">即時上傳已經完全改版,請在選單中重新設定自動上傳。\n\n享受全新且強大的自動上傳。</string>
     <plurals name="items_selected_count">
         <item quantity="other">%d 已選</item>
     </plurals>
@@ -563,12 +566,17 @@
     <string name="notifications_no_results_headline">沒有通知</string>
     <string name="notifications_no_results_message">請稍候再檢查</string>
 
+    <string name="upload_file_dialog_title">輸入上傳的檔名和類型</string>
     <string name="upload_file_dialog_filename">檔案名稱</string>
     <string name="upload_file_dialog_filetype">檔案類型</string>
+    <string name="upload_file_dialog_filetype_snippet_text">片段文字檔(.txt)</string>
+    <string name="upload_file_dialog_filetype_internet_shortcut">網路捷徑(%s)</string>
     <string name="upload_file_dialog_filetype_googlemap_shortcut">Google 地圖捷徑 (%s)</string>
 
     <string name="storage_description_default">預設</string>
 
+    <!-- What's new feature and texts to show -->
+    <string name="whats_new_title">新增到 %1$s </string>
     <string name="whats_new_skip">略過</string>
 
     <!-- User information -->
@@ -582,6 +590,7 @@
 
     <!-- Activities -->
     <string name="activities_no_results_headline">目前沒有任何活動</string>
+    <string name="activities_no_results_message">目前沒有新增、修改和分享的事件</string>
     <string name="prefs_category_about">關於</string>
 
     <string name="actionbar_contacts">備份聯絡人</string>
@@ -601,6 +610,7 @@
     <string name="contacts_preferences_import_scheduled">匯入已排定並且會盡快開始</string>
 
     <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="file_not_synced">檔案不能同步,將顯示最新可用版本。</string>
@@ -613,18 +623,29 @@
     <string name="test_server_button">測試伺服器連線</string>
     <string name="resharing_is_not_allowed">不允許重新分享</string>
     <string name="fallback_weblogin_back">返回</string>
+    <string name="fallback_weblogin_text">還原舊的登入方式</string>
+
     <string name="foreground_service_upload">上傳檔案中…</string>
     <string name="foreground_service_download">下載檔案中...</string>
 
     <string name="prefs_sourcecode">取得原始碼</string>
     <string name="prefs_license">授權</string>
     <string name="prefs_gpl_v2">GNU產生公開授權,第2版</string>
+    <string name="push_notifications_not_implemented">由於私人Google Play服務的相依性,推送通知已停用</string>
+    <string name="push_notifications_old_login">由於過期的登入工作階段,沒有推送通知。請考慮重新登入您的帳號</string>
     <string name="push_notifications_temp_error">推送通知目前無法使用</string>
 
+    <string name="sync_in_progress">取得檔案最近的版本</string>
     <string name="date_unknown">未知</string>
 
+    <string name="resized_image_not_possible">沒有可用調整過的相片</string>
+    <string name="resized_image_not_possible_download">沒有可用調整過的相片,下載完整相片?</string>
+
     <string name="store_short_desc">Nextcloud Android 應用程式讓您存取您 Nextcloud 上的所有檔案。</string>
     <string name="drawer_current_account">目前帳戶</string>
+    <string name="drawer_middle_account">中間帳號</string>
+    <string name="drawer_end_account">最後帳號</string>
+    <string name="contactlist_item_icon">聯絡清單的使用者圖示</string>
     <string name="activity_icon">活動</string>
     <string name="file_icon">檔案</string>
     <string name="user_icon">使用者</string>
@@ -644,6 +665,12 @@
     <string name="synced_folders_type">類型</string>
     <string name="sync_status_button">同步狀態按鈕</string>
     <string name="synced_folder_settings_button">設定按鈕</string>
+    <string name="upload_item_action_button">上傳動作按鈕</string>
+    <string name="forward">向前</string>
+    <string name="what_s_new_image">有什麼新圖片?</string>
+
+    <string name="store_short_dev_desc">Nextcloud 開發應用程式是一個開發版的快照,而且可以同時安裝</string>
+    <string name="prefs_category_dev">開發版</string>
     <string name="dev_version_no_information_available">沒用資訊</string>
     <string name="dev_version_no_new_version_available">沒有新版本</string>
     <string name="folder_icon">資料夾圖示</string>
@@ -654,19 +681,26 @@
     <string name="share">分享</string>
     <string name="link">連結</string>
 
+    <string name="notification_channel_upload_name">上傳通知頻道</string>
+    <string name="notification_channel_download_name">下載通知頻道</string>
     <string name="notification_channel_download_description">顯示下載進度</string>
     <string name="notification_channel_upload_description">顯示上傳進度</string>
     <string name="notification_channel_media_name">媒體播放器</string>
     <string name="notification_channel_media_description">媒體播放器進度</string>
     <string name="notification_channel_file_sync_name">檔案同步</string>
+    <string name="notification_channel_file_sync_description">顯示檔案同步進度和結果</string>
+    <string name="notification_channel_file_observer_name">檔案觀察器</string>
     <string name="notification_channel_file_observer_description">檢查變動的檔案</string>
 
     <string name="account_not_found">沒有找到任何帳戶</string>
 
     <string name="screenshot_01_gridView">您資料的安全屋</string>
     <string name="screenshot_02_listView">輕輕鬆鬆地瀏覽分享您的檔案</string>
+    <string name="screenshot_03_drawer">快速地存取活動、分享、離線檔案和更多</string>
     <string name="screenshot_04_accounts">連結其它帳號</string>
     <string name="screenshot_05_autoUpload">自動上傳照片&amp;影片</string>
+    <string name="screenshot_06_davdroid">使用 DAVx5 (DAVdriod)日暦&amp;同步</string>
+
     <string name="userinfo_no_info_headline">未設定個人資訊</string>
     <string name="userinfo_no_info_text">在您的個人檔案中新增名字、頭像和聯絡資訊</string>
     <string name="account_icon">帳號圖示</string>
@@ -678,6 +712,7 @@
     <string name="end_to_end_encryption_enter_password">請輸入密碼來解密私鑰</string>
     <string name="end_to_end_encryption_generating_keys">正在產生金鑰…</string>
     <string name="end_to_end_encryption_title">設定加密</string>
+    <string name="end_to_end_encryption_passphrase_title">為您12個字的加密密碼加上註解</string>
     <string name="end_to_end_encryption_not_supported">加密功能只能在 KitKat(4.4 以上) 才能啟用</string>
     <string name="end_to_end_encryption_not_enabled">伺服器上的端對端加密被停用</string>
     <string name="end_to_end_encryption_confirm_button">設定加密</string>
@@ -685,6 +720,8 @@
     <string name="end_to_end_encryption_unsuccessful">不能儲存金鑰,請重試。</string>
     <string name="end_to_end_encryption_dialog_close">關閉</string>
     <string name="end_to_end_encryption_storing_keys">儲存金鑰</string>
+    <string name="copy_move_to_encrypted_folder_not_supported">不支援複製移動加密的資料夾</string>
+    <string name="untrusted_domain">存取未受信任的域名,更多資訊請參照文件</string>
     <string name="notification_channel_push_name">通知</string>
     <string name="sendbutton_description">傳送按鈕圖示</string>
 
@@ -700,8 +737,10 @@
     <string name="sharee_add_failed">分享失敗</string>
     <string name="unsharing_failed">取消分享失敗</string>
     <string name="updating_share_failed">上傳分享失敗</string>
+    <string name="whats_new_device_credentials_title">使用裝置的內部保護</string>
     <string name="login">登入</string>
     <string name="host_your_own_server">擁有您自己的伺服器</string>
+    <string name="first_run_1_text">在您的控制下維持資料的安全</string>
     <string name="restore_button_description">復原檔案</string>
 	<string name="restore">復原檔案</string>
     <string name="new_version_was_created">新版本已建立</string>
@@ -710,6 +749,8 @@
     <string name="file_version_restored_successfully">成功地回復檔案版本</string>
     <string name="file_version_restored_error">回復失敗!</string>
     <string name="notification_channel_general_name">一般通知</string>
+    <string name="notification_channel_general_description">顯示新的或相似的媒體資料夾通知</string>
+    <string name="new_media_folder_detected">偵測新媒體資料夾 %1$s</string>
     <string name="configure_new_media_folder_detection_notifications">設定</string>
     <string name="disable_new_media_folder_detection_notifications">停用</string>
     <string name="new_media_folder_photos">相片</string>
@@ -722,6 +763,7 @@
     <string name="action_empty_trashbin">清空回收桶</string>
     <string name="trashbin_loading_failed">載入回收桶失敗!</string>
     <string name="trashbin_file_not_deleted">檔案 %1$s 無法被刪除!</string>
+    <string name="trashbin_file_not_restored">檔案 %1$s 不能被還原!</string>
     <string name="trashbin_not_emptied">無法永久刪除文件!</string>
     <string name="stream">串流…</string>
     <string name="stream_not_possible_headline">不可能使用內部串流</string>
@@ -738,7 +780,10 @@
     <string name="single_sign_on_request_token" formatted="true">允許%1$s存取您的Nextcloud帳號%2$s?</string>
     <string name="permission_deny">否</string>
     <string name="permission_allow">允許</string>
+    <string name="share_send_note">給接收者的訊息</string>
     <string name="note_confirm">傳送</string>
+    <string name="send_note">傳留言給接收者</string>
+    <string name="note_could_not_sent">傳送留言失敗</string>
     <string name="hint_note">筆記</string>
     <string name="no_browser_available">沒有應用程式可以開啟連結</string>
     <string name="no_pdf_app_available">沒有應用程式可以開啟 PDF</string>
@@ -756,14 +801,18 @@
     <string name="create_file_from_template">建立範本…</string>
     <string name="error_retrieving_templates">取得範本時發生錯誤</string>
     <string name="battery_optimization_title">電池優化</string>
+    <string name="battery_optimization_message">您的裝置可能啟用了電池優化。自動上傳功能只能在此應用程式排除的情況下才能運作。</string>
     <string name="battery_optimization_disable">停用</string>
     <string name="battery_optimization_close">關閉</string>
+    <string name="battery_optimization_no_setting">轉價電池設定頁面失敗,請在系統設定中手動調整。</string>
     <string name="file_details_no_content">載入詳細資訊失敗</string>
     <string name="error_starting_direct_camera_upload">無法啟動相機</string>
+    <string name="uploader_upload_files_behaviour_not_writable">來源資料夾是唯讀;檔案只能上傳</string>
     <string name="scanQR_description">使用 QR Code 登入</string>
     <string name="upload_unknown_error">未知的錯誤</string>
+    <string name="upload_lock_failed">鎖定資料夾失敗</string>
     <string name="upload_local_storage_full">本地儲存空間已無空間</string>
     <string name="upload_sync_conflict">同步發生衝突,請手動處理</string>
     <string name="upload_cannot_create_file">無法建立本地檔案</string>
     <string name="upload_local_storage_not_copied">無法複製檔案到本地資料夾</string>
-</resources>
+    </resources>

+ 1 - 2
src/main/res/values/dims.xml

@@ -82,7 +82,7 @@
     <dimen name="scroll_view_height">180dp</dimen>
     <dimen name="upload_list_item_frame_layout_width">60dp</dimen>
     <dimen name="upload_list_item_text_size">12sp</dimen>
-    <dimen name="upload_list_item_image_size">35dp</dimen>
+    <dimen name="upload_list_item_image_size">24dp</dimen>
     <dimen name="uploader_list_item_layout_image_margin">12dp</dimen>
     <dimen name="media_grid_spacing">2dp</dimen>
     <dimen name="account_item_layout_user_image_left_start_margin">12dp</dimen>
@@ -138,7 +138,6 @@
     <dimen name="toolbar_user_information_layout_margin">12dp</dimen>
     <dimen name="bottom_sheet_text_size">16sp</dimen>
     <dimen name="permission_dialog_text_size">18sp</dimen>
-    <dimen name="permission_dialog_text_padding">56dp</dimen>
     <dimen name="button_corner_radius">24dp</dimen>
     <integer name="media_grid_width">4</integer>
 </resources>

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

@@ -513,10 +513,7 @@
     <string name="share_privilege_can_edit_change">can change</string>
     <string name="share_privilege_can_edit_delete">can delete</string>
 
-    <string name="action_retry_uploads">Retry failed uploads</string>
     <string name="action_clear_failed_uploads">Clear failed uploads</string>
-    <string name="action_clear_successful_uploads">Clear successful uploads</string>
-    <string name="action_force_rescan">Force rescan</string>
 
     <string name="action_switch_grid_view">Grid view</string>
     <string name="action_switch_list_view">List view</string>
@@ -829,7 +826,6 @@
     <string name="no_pdf_app_available">No App available to handle PDF</string>
     <string name="share_via_link_hide_download">Hide download</string>
     <string name="unread_comments">Unread comments exist</string>
-
     <string name="richdocuments_failed_to_load_document">Failed to load document!</string>
     <string name="create_new_document">Create new document</string>
     <string name="create_new_spreadsheet">Create new spreadsheet</string>
@@ -858,4 +854,5 @@
     <string name="upload_cannot_create_file">Cannot create local file</string>
     <string name="upload_local_storage_not_copied">File could not be copied to local storage</string>
     <string name="host_not_available">Server not available</string>
+    <string name="delete_entries">Delete entries</string>
 </resources>