Browse Source

Merge pull request #13517 from nextcloud/bugfix/ss-test-after-offline-folder-creation

Fix ScreenShot Tests After Offline Folder Creation Operations
Tobias Kaminsky 8 months ago
parent
commit
ff6220fd5a
85 changed files with 116 additions and 132 deletions
  1. BIN
      app/screenshots/gplay/debug/com.nextcloud.client.SyncedFoldersActivityIT_open.png
  2. BIN
      app/screenshots/gplay/debug/com.nextcloud.client.UploadListActivityActivityIT_openDrawer.png
  3. BIN
      app/screenshots/gplay/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepBoth.png
  4. BIN
      app/screenshots/gplay/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepExisting.png
  5. BIN
      app/screenshots/gplay/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepNew.png
  6. BIN
      app/screenshots/gplay/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_screenshotTextFiles.png
  7. BIN
      app/screenshots/gplay/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openContactsPreference.png
  8. BIN
      app/screenshots/gplay/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openVCF.png
  9. BIN
      app/screenshots/gplay/debug/com.owncloud.android.ui.activity.FolderPickerActivityIT_open.png
  10. BIN
      app/screenshots/gplay/debug/com.owncloud.android.ui.activity.FolderPickerActivityIT_testChooseLocationAction.png
  11. BIN
      app/screenshots/gplay/debug/com.owncloud.android.ui.activity.FolderPickerActivityIT_testMoveOrCopy.png
  12. BIN
      app/screenshots/gplay/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_open.png
  13. BIN
      app/screenshots/gplay/debug/com.owncloud.android.ui.activity.ReceiveExternalFilesActivityIT_open.png
  14. BIN
      app/screenshots/gplay/debug/com.owncloud.android.ui.activity.ReceiveExternalFilesActivityIT_openMultiAccount.png
  15. BIN
      app/screenshots/gplay/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testFileActionsBottomSheet.png
  16. BIN
      app/screenshots/gplay/debug/com.owncloud.android.ui.fragment.BackupListFragmentIT_showCalendarList.png
  17. BIN
      app/screenshots/gplay/debug/com.owncloud.android.ui.fragment.BackupListFragmentIT_showContactList.png
  18. BIN
      app/screenshots/gplay/debug/com.owncloud.android.ui.fragment.BackupListFragmentIT_showLoading.png
  19. BIN
      app/screenshots/gplay/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showSharedFiles.png
  20. BIN
      app/screenshots/gplay/debug/com.owncloud.android.ui.preview.PreviewTextFileFragmentTest_displayJavaSnippetFile.png
  21. BIN
      app/screenshots/gplay/debug/com.owncloud.android.ui.preview.PreviewTextFileFragmentTest_displaySimpleTextFile.png
  22. 53 25
      app/src/androidTest/java/com/nextcloud/client/jobs/ContactsBackupIT.kt
  23. 1 1
      app/src/androidTest/java/com/owncloud/android/ui/activity/ConflictsResolveActivityIT.java
  24. 1 0
      app/src/androidTest/java/com/owncloud/android/ui/dialog/DialogFragmentIT.java
  25. 35 9
      app/src/androidTest/java/com/owncloud/android/ui/fragment/OCFileListFragmentStaticServerIT.kt
  26. 2 1
      app/src/main/java/com/nextcloud/client/etm/pages/EtmFileTransferFragment.kt
  27. 1 1
      app/src/main/java/com/owncloud/android/datamodel/OCFile.java
  28. 0 2
      app/src/main/java/com/owncloud/android/ui/activity/UploadFilesActivity.java
  29. 15 28
      app/src/main/java/com/owncloud/android/ui/dialog/ConflictsResolveDialog.kt
  30. 4 4
      app/src/main/java/com/owncloud/android/ui/dialog/parcel/ConflictDialogData.kt
  31. 2 0
      app/src/main/java/com/owncloud/android/ui/fragment/OCFileListBottomSheetDialog.java
  32. 1 8
      app/src/main/res/layout/conflict_resolve_dialog.xml
  33. 0 1
      app/src/main/res/values-ar/strings.xml
  34. 0 1
      app/src/main/res/values-ast/strings.xml
  35. 0 1
      app/src/main/res/values-b+en+001/strings.xml
  36. 0 1
      app/src/main/res/values-bg-rBG/strings.xml
  37. 0 1
      app/src/main/res/values-ca/strings.xml
  38. 0 1
      app/src/main/res/values-cs-rCZ/strings.xml
  39. 0 1
      app/src/main/res/values-da/strings.xml
  40. 0 1
      app/src/main/res/values-de/strings.xml
  41. 0 1
      app/src/main/res/values-el/strings.xml
  42. 0 1
      app/src/main/res/values-es-rAR/strings.xml
  43. 0 1
      app/src/main/res/values-es-rEC/strings.xml
  44. 0 1
      app/src/main/res/values-es-rMX/strings.xml
  45. 0 1
      app/src/main/res/values-es/strings.xml
  46. 0 1
      app/src/main/res/values-eu/strings.xml
  47. 0 1
      app/src/main/res/values-fa/strings.xml
  48. 0 1
      app/src/main/res/values-fi-rFI/strings.xml
  49. 0 1
      app/src/main/res/values-fr/strings.xml
  50. 0 1
      app/src/main/res/values-ga/strings.xml
  51. 0 1
      app/src/main/res/values-gd/strings.xml
  52. 0 1
      app/src/main/res/values-gl/strings.xml
  53. 0 1
      app/src/main/res/values-hr/strings.xml
  54. 0 1
      app/src/main/res/values-hu-rHU/strings.xml
  55. 0 1
      app/src/main/res/values-in/strings.xml
  56. 0 1
      app/src/main/res/values-is/strings.xml
  57. 0 1
      app/src/main/res/values-it/strings.xml
  58. 0 1
      app/src/main/res/values-ja-rJP/strings.xml
  59. 0 1
      app/src/main/res/values-ka/strings.xml
  60. 0 1
      app/src/main/res/values-ko/strings.xml
  61. 0 1
      app/src/main/res/values-lo/strings.xml
  62. 0 1
      app/src/main/res/values-lt-rLT/strings.xml
  63. 0 1
      app/src/main/res/values-mk/strings.xml
  64. 0 1
      app/src/main/res/values-nb-rNO/strings.xml
  65. 0 1
      app/src/main/res/values-nl/strings.xml
  66. 0 1
      app/src/main/res/values-pl/strings.xml
  67. 0 1
      app/src/main/res/values-pt-rBR/strings.xml
  68. 0 1
      app/src/main/res/values-pt-rPT/strings.xml
  69. 0 1
      app/src/main/res/values-ro/strings.xml
  70. 0 1
      app/src/main/res/values-ru/strings.xml
  71. 0 1
      app/src/main/res/values-sc/strings.xml
  72. 0 1
      app/src/main/res/values-sk-rSK/strings.xml
  73. 0 1
      app/src/main/res/values-sl/strings.xml
  74. 0 1
      app/src/main/res/values-sr/strings.xml
  75. 0 1
      app/src/main/res/values-sv/strings.xml
  76. 0 1
      app/src/main/res/values-th-rTH/strings.xml
  77. 0 1
      app/src/main/res/values-tk/strings.xml
  78. 0 1
      app/src/main/res/values-tr/strings.xml
  79. 0 1
      app/src/main/res/values-uk/strings.xml
  80. 0 1
      app/src/main/res/values-vi/strings.xml
  81. 0 1
      app/src/main/res/values-zh-rCN/strings.xml
  82. 0 1
      app/src/main/res/values-zh-rHK/strings.xml
  83. 0 1
      app/src/main/res/values-zh-rTW/strings.xml
  84. 0 1
      app/src/main/res/values/strings.xml
  85. 1 1
      scripts/analysis/lint-results.txt

BIN
app/screenshots/gplay/debug/com.nextcloud.client.SyncedFoldersActivityIT_open.png


BIN
app/screenshots/gplay/debug/com.nextcloud.client.UploadListActivityActivityIT_openDrawer.png


BIN
app/screenshots/gplay/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepBoth.png


BIN
app/screenshots/gplay/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepExisting.png


BIN
app/screenshots/gplay/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_keepNew.png


BIN
app/screenshots/gplay/debug/com.owncloud.android.ui.activity.ConflictsResolveActivityIT_screenshotTextFiles.png


BIN
app/screenshots/gplay/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openContactsPreference.png


BIN
app/screenshots/gplay/debug/com.owncloud.android.ui.activity.ContactsPreferenceActivityIT_openVCF.png


BIN
app/screenshots/gplay/debug/com.owncloud.android.ui.activity.FolderPickerActivityIT_open.png


BIN
app/screenshots/gplay/debug/com.owncloud.android.ui.activity.FolderPickerActivityIT_testChooseLocationAction.png


BIN
app/screenshots/gplay/debug/com.owncloud.android.ui.activity.FolderPickerActivityIT_testMoveOrCopy.png


BIN
app/screenshots/gplay/debug/com.owncloud.android.ui.activity.ManageAccountsActivityIT_open.png


BIN
app/screenshots/gplay/debug/com.owncloud.android.ui.activity.ReceiveExternalFilesActivityIT_open.png


BIN
app/screenshots/gplay/debug/com.owncloud.android.ui.activity.ReceiveExternalFilesActivityIT_openMultiAccount.png


BIN
app/screenshots/gplay/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testFileActionsBottomSheet.png


BIN
app/screenshots/gplay/debug/com.owncloud.android.ui.fragment.BackupListFragmentIT_showCalendarList.png


BIN
app/screenshots/gplay/debug/com.owncloud.android.ui.fragment.BackupListFragmentIT_showContactList.png


BIN
app/screenshots/gplay/debug/com.owncloud.android.ui.fragment.BackupListFragmentIT_showLoading.png


BIN
app/screenshots/gplay/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showSharedFiles.png


BIN
app/screenshots/gplay/debug/com.owncloud.android.ui.preview.PreviewTextFileFragmentTest_displayJavaSnippetFile.png


BIN
app/screenshots/gplay/debug/com.owncloud.android.ui.preview.PreviewTextFileFragmentTest_displaySimpleTextFile.png


+ 53 - 25
app/src/androidTest/java/com/nextcloud/client/jobs/ContactsBackupIT.kt

@@ -1,9 +1,8 @@
 /*
  * Nextcloud - Android Client
  *
- * SPDX-FileCopyrightText: 2020 Tobias Kaminsky <tobias@kaminsky.me>
- * SPDX-FileCopyrightText: 2020 Nextcloud GmbH
- * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
+ * SPDX-FileCopyrightText: 2024 Alper Ozturk <alper.ozturk@nextcloud.com>
+ * SPDX-License-Identifier: AGPL-3.0-or-later
  */
 package com.nextcloud.client.jobs
 
@@ -11,6 +10,7 @@ import android.Manifest
 import androidx.test.rule.GrantPermissionRule
 import androidx.work.WorkManager
 import com.nextcloud.client.core.ClockImpl
+import com.nextcloud.client.preferences.AppPreferences
 import com.nextcloud.client.preferences.AppPreferencesImpl
 import com.nextcloud.test.RetryTestRule
 import com.owncloud.android.AbstractIT
@@ -20,8 +20,9 @@ import com.owncloud.android.datamodel.OCFile
 import com.owncloud.android.operations.DownloadFileOperation
 import ezvcard.Ezvcard
 import ezvcard.VCard
-import junit.framework.Assert.assertEquals
-import junit.framework.Assert.assertTrue
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertTrue
+import org.junit.Assert.fail
 import org.junit.Rule
 import org.junit.Test
 import java.io.BufferedInputStream
@@ -29,15 +30,15 @@ import java.io.File
 import java.io.FileInputStream
 
 class ContactsBackupIT : AbstractOnServerIT() {
-    val workmanager = WorkManager.getInstance(targetContext)
-    val preferences = AppPreferencesImpl.fromContext(targetContext)
-    private val backgroundJobManager = BackgroundJobManagerImpl(workmanager, ClockImpl(), preferences)
+    private val workManager = WorkManager.getInstance(targetContext)
+    private val preferences: AppPreferences = AppPreferencesImpl.fromContext(targetContext)
+    private val backgroundJobManager = BackgroundJobManagerImpl(workManager, ClockImpl(), preferences)
 
     @get:Rule
-    val writeContactsRule = GrantPermissionRule.grant(Manifest.permission.WRITE_CONTACTS)
+    val writeContactsRule: GrantPermissionRule = GrantPermissionRule.grant(Manifest.permission.WRITE_CONTACTS)
 
     @get:Rule
-    val readContactsRule = GrantPermissionRule.grant(Manifest.permission.READ_CONTACTS)
+    val readContactsRule: GrantPermissionRule = GrantPermissionRule.grant(Manifest.permission.READ_CONTACTS)
 
     @get:Rule
     val retryTestRule = RetryTestRule() // flaky test
@@ -46,38 +47,54 @@ class ContactsBackupIT : AbstractOnServerIT() {
 
     @Test
     fun importExport() {
-        val intArray = IntArray(1)
-        intArray[0] = 0
+        val intArray = intArrayOf(0)
 
         // import file to local contacts
         backgroundJobManager.startImmediateContactsImport(null, null, getFile(vcard).absolutePath, intArray)
-
-        shortSleep()
+        longSleep()
 
         // export contact
         backgroundJobManager.startImmediateContactsBackup(user)
-
         longSleep()
 
-        val backupFolder: String = targetContext.resources.getString(R.string.contacts_backup_folder) +
+        val folderPath: String = targetContext.resources.getString(R.string.contacts_backup_folder) +
             OCFile.PATH_SEPARATOR
 
         refreshFolder("/")
         longSleep()
+        longSleep()
 
-        refreshFolder(backupFolder)
+        refreshFolder(folderPath)
+        longSleep()
         longSleep()
 
-        val backupOCFile = storageManager.getFolderContent(
-            storageManager.getFileByDecryptedRemotePath(backupFolder),
-            false
-        )[0]
+        if (folderPath.isEmpty()) {
+            fail("folderPath cannot be empty")
+        }
+
+        val folder = fileDataStorageManager.getFileByDecryptedRemotePath(folderPath)
+        if (folder == null) {
+            fail("folder cannot be null")
+        }
 
-        assertTrue(DownloadFileOperation(user, backupOCFile, AbstractIT.targetContext).execute(client).isSuccess)
+        val ocFile = storageManager.getFolderContent(folder, false).firstOrNull()
+        if (ocFile == null) {
+            fail("ocFile cannot be null")
+        }
+
+        if (ocFile?.storagePath == null) {
+            fail("ocFile.storagePath cannot be null")
+        }
+
+        assertTrue(DownloadFileOperation(user, ocFile, AbstractIT.targetContext).execute(client).isSuccess)
+
+        val file = ocFile?.storagePath?.let { File(it) }
+        if (file == null) {
+            fail("file cannot be null")
+        }
 
-        val backupFile = File(backupOCFile.storagePath)
         val vcardInputStream = BufferedInputStream(FileInputStream(getFile(vcard)))
-        val backupFileInputStream = BufferedInputStream(FileInputStream(backupFile))
+        val backupFileInputStream = BufferedInputStream(FileInputStream(file))
 
         // verify same
         val originalCards: ArrayList<VCard> = ArrayList()
@@ -87,6 +104,17 @@ class ContactsBackupIT : AbstractOnServerIT() {
         backupCards.addAll(Ezvcard.parse(backupFileInputStream).all())
 
         assertEquals(originalCards.size, backupCards.size)
-        assertEquals(originalCards[0].formattedName.toString(), backupCards[0].formattedName.toString())
+
+        val originalCardFormattedName = originalCards.firstOrNull()?.formattedName
+        if (originalCardFormattedName == null) {
+            fail("originalCardFormattedName cannot be null")
+        }
+
+        val backupCardFormattedName = backupCards.firstOrNull()?.formattedName
+        if (backupCardFormattedName == null) {
+            fail("backupCardFormattedName cannot be null")
+        }
+
+        assertEquals(originalCardFormattedName.toString(), backupCardFormattedName.toString())
     }
 }

+ 1 - 1
app/src/androidTest/java/com/owncloud/android/ui/activity/ConflictsResolveActivityIT.java

@@ -63,8 +63,8 @@ public class ConflictsResolveActivityIT extends AbstractIT {
         ConflictsResolveActivity sut = activityRule.launchActivity(intent);
 
         ConflictsResolveDialog dialog = ConflictsResolveDialog.newInstance(targetContext,
-                                                                           existingFile,
                                                                            newFile,
+                                                                           existingFile,
                                                                            UserAccountManagerImpl
                                                                                .fromContext(targetContext)
                                                                                .getUser()

+ 1 - 0
app/src/androidTest/java/com/owncloud/android/ui/dialog/DialogFragmentIT.java

@@ -390,6 +390,7 @@ public class DialogFragmentIT extends AbstractIT {
 
         DeviceInfo info = new DeviceInfo();
         OCFile ocFile = new OCFile("/test.md");
+        ocFile.setRemoteId("00000001");
 
         Intent intent = new Intent(targetContext, FileDisplayActivity.class);
         FileDisplayActivity fda = activityRule.launchActivity(intent);

+ 35 - 9
app/src/androidTest/java/com/owncloud/android/ui/fragment/OCFileListFragmentStaticServerIT.kt

@@ -35,6 +35,7 @@ class OCFileListFragmentStaticServerIT : AbstractIT() {
         val sut = testActivityRule.launchActivity(null)
 
         OCFile("/1.png").apply {
+            remoteId = "00000001"
             mimeType = "image/png"
             fileLength = 1024000
             modificationTimestamp = 1188206955000
@@ -43,6 +44,7 @@ class OCFileListFragmentStaticServerIT : AbstractIT() {
         }
 
         OCFile("/image.png").apply {
+            remoteId = "00000002"
             mimeType = "image/png"
             isPreviewAvailable = false
             fileLength = 3072000
@@ -53,6 +55,7 @@ class OCFileListFragmentStaticServerIT : AbstractIT() {
         }
 
         OCFile("/live photo.png").apply {
+            remoteId = "00000003"
             mimeType = "image/png"
             isPreviewAvailable = false
             fileLength = 3072000
@@ -63,6 +66,7 @@ class OCFileListFragmentStaticServerIT : AbstractIT() {
         }
 
         OCFile("/video.mp4").apply {
+            remoteId = "00000004"
             mimeType = "video/mp4"
             isPreviewAvailable = false
             fileLength = 12092000
@@ -96,6 +100,7 @@ class OCFileListFragmentStaticServerIT : AbstractIT() {
         val fragment = OCFileListFragment()
 
         OCFile("/sharedToUser.jpg").apply {
+            remoteId = "00000001"
             parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
             isSharedWithSharee = true
             sharees = listOf(ShareeUser("Admin", "Server Admin", ShareType.USER))
@@ -104,6 +109,7 @@ class OCFileListFragmentStaticServerIT : AbstractIT() {
         }
 
         OCFile("/sharedToGroup.jpg").apply {
+            remoteId = "00000002"
             parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
             isSharedWithSharee = true
             sharees = listOf(ShareeUser("group", "Group", ShareType.GROUP))
@@ -112,6 +118,7 @@ class OCFileListFragmentStaticServerIT : AbstractIT() {
         }
 
         OCFile("/sharedToEmail.jpg").apply {
+            remoteId = "00000003"
             parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
             isSharedWithSharee = true
             sharees = listOf(ShareeUser("admin@nextcloud.localhost", "admin@nextcloud.localhost", ShareType.EMAIL))
@@ -120,6 +127,7 @@ class OCFileListFragmentStaticServerIT : AbstractIT() {
         }
 
         OCFile("/publicLink.jpg").apply {
+            remoteId = "00000004"
             parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
             isSharedViaLink = true
             modificationTimestamp = 1000
@@ -127,6 +135,7 @@ class OCFileListFragmentStaticServerIT : AbstractIT() {
         }
 
         OCFile("/sharedToFederatedUser.jpg").apply {
+            remoteId = "00000005"
             parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
             isSharedWithSharee = true
             sharees = listOf(
@@ -137,6 +146,7 @@ class OCFileListFragmentStaticServerIT : AbstractIT() {
         }
 
         OCFile("/sharedToPersonalCircle.jpg").apply {
+            remoteId = "00000006"
             parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
             isSharedWithSharee = true
             sharees = listOf(ShareeUser("circle", "Circle (Personal circle)", ShareType.CIRCLE))
@@ -170,6 +180,7 @@ class OCFileListFragmentStaticServerIT : AbstractIT() {
 //        }
 
         OCFile("/sharedToUserRoom.jpg").apply {
+            remoteId = "00000007"
             parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
             isSharedWithSharee = true
             sharees = listOf(ShareeUser("Conversation", "Admin", ShareType.ROOM))
@@ -178,6 +189,7 @@ class OCFileListFragmentStaticServerIT : AbstractIT() {
         }
 
         OCFile("/sharedToGroupRoom.jpg").apply {
+            remoteId = "00000008"
             parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
             isSharedWithSharee = true
             sharees = listOf(ShareeUser("Conversation", "Meeting", ShareType.ROOM))
@@ -186,6 +198,7 @@ class OCFileListFragmentStaticServerIT : AbstractIT() {
         }
 
         OCFile("/sharedToUsers.jpg").apply {
+            remoteId = "00000009"
             parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
             isSharedWithSharee = true
             sharees = listOf(
@@ -198,6 +211,7 @@ class OCFileListFragmentStaticServerIT : AbstractIT() {
         }
 
         OCFile("/notShared.jpg").apply {
+            remoteId = "000000010"
             parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
             modificationTimestamp = 1000
             sut.storageManager.saveFile(this)
@@ -232,6 +246,7 @@ class OCFileListFragmentStaticServerIT : AbstractIT() {
         val fragment = OCFileListFragment()
 
         OCFile("/normal/").apply {
+            remoteId = "00000001"
             mimeType = MimeType.DIRECTORY
             modificationTimestamp = 1624003571000
             parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
@@ -239,6 +254,7 @@ class OCFileListFragmentStaticServerIT : AbstractIT() {
         }
 
         OCFile("/sharedViaLink/").apply {
+            remoteId = "00000002"
             mimeType = MimeType.DIRECTORY
             isSharedViaLink = true
             modificationTimestamp = 1619003571000
@@ -247,6 +263,7 @@ class OCFileListFragmentStaticServerIT : AbstractIT() {
         }
 
         OCFile("/share/").apply {
+            remoteId = "00000003"
             mimeType = MimeType.DIRECTORY
             isSharedWithSharee = true
             modificationTimestamp = 1619303571000
@@ -255,6 +272,7 @@ class OCFileListFragmentStaticServerIT : AbstractIT() {
         }
 
         OCFile("/groupFolder/").apply {
+            remoteId = "00000004"
             mimeType = MimeType.DIRECTORY
             modificationTimestamp = 1615003571000
             parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
@@ -263,6 +281,7 @@ class OCFileListFragmentStaticServerIT : AbstractIT() {
         }
 
         OCFile("/encrypted/").apply {
+            remoteId = "00000005"
             mimeType = MimeType.DIRECTORY
             isEncrypted = true
             decryptedRemotePath = "/encrypted/"
@@ -272,6 +291,7 @@ class OCFileListFragmentStaticServerIT : AbstractIT() {
         }
 
         OCFile("/locked/").apply {
+            remoteId = "00000006"
             mimeType = MimeType.DIRECTORY
             isLocked = true
             decryptedRemotePath = "/locked/"
@@ -310,12 +330,15 @@ class OCFileListFragmentStaticServerIT : AbstractIT() {
         folder.setFolder()
         sut.storageManager.saveFile(folder)
 
-        val imageFile = OCFile("/test/image.png")
-        imageFile.mimeType = "image/png"
-        imageFile.fileLength = 1024000
-        imageFile.modificationTimestamp = 1188206955000
-        imageFile.parentId = sut.storageManager.getFileByEncryptedRemotePath("/test/").fileId
-        imageFile.storagePath = getFile("java.md").absolutePath
+        val imageFile = OCFile("/test/image.png").apply {
+            remoteId = "00000001"
+            mimeType = "image/png"
+            fileLength = 1024000
+            modificationTimestamp = 1188206955000
+            parentId = sut.storageManager.getFileByEncryptedRemotePath("/test/").fileId
+            storagePath = getFile("java.md").absolutePath
+        }
+
         sut.storageManager.saveFile(imageFile)
 
         sut.addFragment(fragment)
@@ -334,8 +357,11 @@ class OCFileListFragmentStaticServerIT : AbstractIT() {
         val activity = testActivityRule.launchActivity(null)
         val sut = OCFileListFragment()
 
-        val folder = OCFile("/test/")
-        folder.setFolder()
+        val folder = OCFile("/test/").apply {
+            remoteId = "000001"
+            setFolder()
+        }
+
         activity.storageManager.saveFile(folder)
 
         activity.addFragment(sut)
@@ -357,7 +383,7 @@ class OCFileListFragmentStaticServerIT : AbstractIT() {
 
             testFolder.richWorkspace = "1"
             activity.storageManager.saveFile(testFolder)
-            sut.adapter.setCurrentDirectory(testFolder)
+            sut.adapter.currentDirectory = testFolder
             Assert.assertTrue(sut.adapter.shouldShowHeader())
         }
     }

+ 2 - 1
app/src/main/java/com/nextcloud/client/etm/pages/EtmFileTransferFragment.kt

@@ -26,6 +26,7 @@ import com.nextcloud.client.jobs.transfer.TransferManager
 import com.owncloud.android.R
 import com.owncloud.android.datamodel.OCFile
 import com.owncloud.android.db.OCUpload
+import java.util.Locale
 
 class EtmFileTransferFragment : EtmBaseFragment() {
 
@@ -96,7 +97,7 @@ class EtmFileTransferFragment : EtmBaseFragment() {
             vh.state.text = transfer.state.toString()
             if (transfer.progress >= 0) {
                 vh.progressEnabled = true
-                vh.progress.text = transfer.progress.toString()
+                vh.progress.text = String.format(Locale.getDefault(), "%d", transfer.progress)
             } else {
                 vh.progressEnabled = false
             }

+ 1 - 1
app/src/main/java/com/owncloud/android/datamodel/OCFile.java

@@ -777,7 +777,7 @@ public class OCFile implements Parcelable, Comparable<OCFile>, ServerFileInterfa
     }
 
     public boolean isRootDirectory() {
-        return decryptedRemotePath.equals(ROOT_PATH);
+        return ROOT_PATH.equals(decryptedRemotePath);
     }
 
     public boolean isOfflineOperation() {

+ 0 - 2
app/src/main/java/com/owncloud/android/ui/activity/UploadFilesActivity.java

@@ -109,8 +109,6 @@ public class UploadFilesActivity extends DrawerActivity implements LocalFileList
     private UploadFilesLayoutBinding binding;
     private boolean isWithinEncryptedFolder = false;
 
-
-    @VisibleForTesting
     public LocalFileListFragment getFileListFragment() {
         return mFileListFragment;
     }

+ 15 - 28
app/src/main/java/com/owncloud/android/ui/dialog/ConflictsResolveDialog.kt

@@ -151,21 +151,21 @@ class ConflictsResolveDialog : DialogFragment(), Injectable {
             .setNegativeButton(R.string.common_cancel) { _: DialogInterface?, _: Int ->
                 listener?.conflictDecisionMade(Decision.CANCEL)
             }
-            .setTitle(data?.folderName)
+            .setTitle(data?.dialogTitle)
     }
 
     private fun okButtonClick() {
         binding.run {
-            val isFolderNameNotExists = (data?.folderName == null)
+            val isDialogTitleNotExists = (data?.dialogTitle == null)
             val decision = when {
                 leftCheckbox.isChecked && rightCheckbox.isChecked ->
-                    if (isFolderNameNotExists) Decision.KEEP_BOTH_FOLDER else Decision.KEEP_BOTH
+                    if (isDialogTitleNotExists) Decision.KEEP_BOTH_FOLDER else Decision.KEEP_BOTH
 
                 leftCheckbox.isChecked ->
-                    if (isFolderNameNotExists) Decision.KEEP_OFFLINE_FOLDER else Decision.KEEP_LOCAL
+                    if (isDialogTitleNotExists) Decision.KEEP_OFFLINE_FOLDER else Decision.KEEP_LOCAL
 
                 rightCheckbox.isChecked ->
-                    if (isFolderNameNotExists) Decision.KEEP_SERVER_FOLDER else Decision.KEEP_SERVER
+                    if (isDialogTitleNotExists) Decision.KEEP_SERVER_FOLDER else Decision.KEEP_SERVER
 
                 else -> null
             }
@@ -179,19 +179,12 @@ class ConflictsResolveDialog : DialogFragment(), Injectable {
             data?.let {
                 val (leftData, rightData) = it.checkboxData
 
-                folderName.visibility = if (it.folderName == null) {
+                headline.visibility = if (it.headline == null) {
                     View.GONE
                 } else {
                     View.VISIBLE
                 }
-                folderName.text = it.folderName
-
-                title.visibility = if (it.title == null) {
-                    View.GONE
-                } else {
-                    View.VISIBLE
-                }
-                title.text = it.title
+                headline.text = it.headline
 
                 description.text = it.description
 
@@ -340,8 +333,6 @@ class ConflictsResolveDialog : DialogFragment(), Injectable {
             rightFile: OCFile,
             context: Context
         ): ConflictDialogData {
-            val folderName = null
-
             val leftTitle = context.getString(R.string.prefs_synced_folders_local_path_title)
             val leftTimestamp =
                 DisplayUtils.getRelativeTimestamp(context, offlineOperation.createdAt?.times(1000L) ?: 0)
@@ -355,21 +346,17 @@ class ConflictsResolveDialog : DialogFragment(), Injectable {
 
             val title = context.getString(R.string.conflict_folder_headline)
             val description = context.getString(R.string.conflict_message_description_for_folder)
-            return ConflictDialogData(folderName, title, description, Pair(leftCheckBoxData, rightCheckBoxData))
+            return ConflictDialogData(null, title, description, Pair(leftCheckBoxData, rightCheckBoxData))
         }
 
         @JvmStatic
-        private fun getFileConflictData(file: File, rightFile: OCFile, context: Context): ConflictDialogData {
-            val parentFile = File(rightFile.remotePath).parentFile
-            val folderName = if (parentFile != null) {
-                String.format(context.getString(R.string.in_folder), parentFile.absolutePath)
-            } else {
-                null
-            }
+        private fun getFileConflictData(leftFile: File, rightFile: OCFile, context: Context): ConflictDialogData {
+            // TODO Path needs to be set it correctly for encrypted folders
+            val title = rightFile.decryptedRemotePath
 
             val leftTitle = context.getString(R.string.conflict_local_file)
-            val leftTimestamp = DisplayUtils.getRelativeTimestamp(context, file.lastModified())
-            val leftFileSize = DisplayUtils.bytesToHumanReadable(file.length())
+            val leftTimestamp = DisplayUtils.getRelativeTimestamp(context, leftFile.lastModified())
+            val leftFileSize = DisplayUtils.bytesToHumanReadable(leftFile.length())
             val leftCheckBoxData = ConflictFileData(leftTitle, leftTimestamp.toString(), leftFileSize)
 
             val rightTitle = context.getString(R.string.conflict_server_file)
@@ -377,9 +364,9 @@ class ConflictsResolveDialog : DialogFragment(), Injectable {
             val rightFileSize = DisplayUtils.bytesToHumanReadable(rightFile.fileLength)
             val rightCheckBoxData = ConflictFileData(rightTitle, rightTimestamp.toString(), rightFileSize)
 
-            val title = context.getString(R.string.choose_which_file)
+            val headline = context.getString(R.string.choose_which_file)
             val description = context.getString(R.string.conflict_message_description)
-            return ConflictDialogData(folderName, title, description, Pair(leftCheckBoxData, rightCheckBoxData))
+            return ConflictDialogData(title, headline, description, Pair(leftCheckBoxData, rightCheckBoxData))
         }
     }
 }

+ 4 - 4
app/src/main/java/com/owncloud/android/ui/dialog/parcel/ConflictDialogData.kt

@@ -12,8 +12,8 @@ import android.os.Parcelable
 import com.nextcloud.utils.extensions.readParcelableCompat
 
 data class ConflictDialogData(
-    val folderName: String?,
-    val title: String?,
+    val dialogTitle: String?,
+    val headline: String?,
     val description: String,
     val checkboxData: Pair<ConflictFileData, ConflictFileData>
 ) : Parcelable {
@@ -28,8 +28,8 @@ data class ConflictDialogData(
     )
 
     override fun writeToParcel(parcel: Parcel, flags: Int) {
-        parcel.writeString(folderName)
-        parcel.writeString(title)
+        parcel.writeString(dialogTitle)
+        parcel.writeString(headline)
         parcel.writeString(description)
         parcel.writeParcelable(checkboxData.first, flags)
         parcel.writeParcelable(checkboxData.second, flags)

+ 2 - 0
app/src/main/java/com/owncloud/android/ui/fragment/OCFileListBottomSheetDialog.java

@@ -212,6 +212,8 @@ public class OCFileListBottomSheetDialog extends BottomSheetDialog implements In
     }
 
     private void filterActionsForOfflineOperations() {
+        if (file == null) return;
+
         if (!file.isOfflineOperation() || file.isRootDirectory()) {
             return;
         }

+ 1 - 8
app/src/main/res/layout/conflict_resolve_dialog.xml

@@ -17,14 +17,7 @@
     android:paddingBottom="@dimen/standard_padding">
 
     <TextView
-        android:id="@+id/folder_name"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:text="@string/in_folder"
-        android:paddingBottom="@dimen/standard_padding" />
-
-    <TextView
-        android:id="@+id/title"
+        android:id="@+id/headline"
         android:layout_marginTop="@dimen/standard_margin"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"

+ 0 - 1
app/src/main/res/values-ar/strings.xml

@@ -485,7 +485,6 @@
     <string name="image_preview_unit_megapixel">%s ميغا بكسل</string>
     <string name="image_preview_unit_millimetres">%s مللي</string>
     <string name="image_preview_unit_seconds">%s ثانية</string>
-    <string name="in_folder">في مجلد %1$s</string>
     <string name="instant_upload_existing">ارفع الملفات الموجودة مسبقاً أيضاً</string>
     <string name="instant_upload_on_charging">ارفع وقت الشحن فقط</string>
     <string name="instant_upload_path">/InstantUpload</string>

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

@@ -297,7 +297,6 @@
     <string name="image_preview_unit_megapixel">%s MP</string>
     <string name="image_preview_unit_millimetres">%s mm</string>
     <string name="image_preview_unit_seconds">%s s</string>
-    <string name="in_folder">na carpeta %1$s</string>
     <string name="instant_upload_on_charging">Namái xubir al cargar</string>
     <string name="instant_upload_path">/XubidaNelIntre</string>
     <string name="invalid_url">La URL ye inválisa</string>

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

@@ -485,7 +485,6 @@
     <string name="image_preview_unit_megapixel">%s MP</string>
     <string name="image_preview_unit_millimetres">%s mm</string>
     <string name="image_preview_unit_seconds">%s s</string>
-    <string name="in_folder">in folder %1$s</string>
     <string name="instant_upload_existing">Also upload existing files</string>
     <string name="instant_upload_on_charging">Only upload when charging</string>
     <string name="instant_upload_path">/InstantUpload</string>

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

@@ -405,7 +405,6 @@
     <string name="icon_for_empty_list">Икона за празен списък</string>
     <string name="icon_of_dashboard_widget">Икона на изпълним модул на табло за управление</string>
     <string name="icon_of_widget_entry">Икона на вход на изпълним модул</string>
-    <string name="in_folder">в папка %1$s</string>
     <string name="instant_upload_existing">Качете и съществуващи файлове</string>
     <string name="instant_upload_on_charging">Качване само при зареждане</string>
     <string name="instant_upload_path">/InstantUpload</string>

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

@@ -398,7 +398,6 @@
     <string name="icon_for_empty_list">Icona per a la llista buida</string>
     <string name="icon_of_dashboard_widget">Icona del giny del tauler</string>
     <string name="icon_of_widget_entry">Icona de l\'entrada del giny</string>
-    <string name="in_folder">en la carpeta %1$s</string>
     <string name="instant_upload_existing">També pujar fitxers existents</string>
     <string name="instant_upload_on_charging">Pujada només durant la càrrega de bateria</string>
     <string name="instant_upload_path">/CàrregaInstantània</string>

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

@@ -449,7 +449,6 @@
     <string name="image_preview_unit_megapixel">%s MP</string>
     <string name="image_preview_unit_millimetres">%s mm</string>
     <string name="image_preview_unit_seconds">%s s</string>
-    <string name="in_folder">ve složce %1$s</string>
     <string name="instant_upload_existing">Také nahrát už existující soubory</string>
     <string name="instant_upload_on_charging">Nahrávat pouze při nabíjení</string>
     <string name="instant_upload_path">/InstantUpload</string>

+ 0 - 1
app/src/main/res/values-da/strings.xml

@@ -439,7 +439,6 @@
     <string name="image_preview_unit_megapixel">%s MP</string>
     <string name="image_preview_unit_millimetres">%s mm</string>
     <string name="image_preview_unit_seconds">%s s</string>
-    <string name="in_folder">i mappen %1$s</string>
     <string name="instant_upload_existing">Send også eksisterende filer</string>
     <string name="instant_upload_on_charging">Upload kun under opladning</string>
     <string name="instant_upload_path">/Øjeblikkelig upload</string>

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

@@ -485,7 +485,6 @@
     <string name="image_preview_unit_megapixel">%s MP</string>
     <string name="image_preview_unit_millimetres">%s mm</string>
     <string name="image_preview_unit_seconds">%s s</string>
-    <string name="in_folder">in Ordner %1$s</string>
     <string name="instant_upload_existing">Vorhandene Dateien ebenfalls hochladen</string>
     <string name="instant_upload_on_charging">Nur während des Ladens der Batterie hochladen</string>
     <string name="instant_upload_path">/SofortUpload</string>

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

@@ -411,7 +411,6 @@
     <string name="icon_of_widget_entry">Εικονίδιο κενού γραφικού στοιχείου</string>
     <string name="image_editor_flip_horizontal">Οριζόντια περιστροφή</string>
     <string name="image_editor_flip_vertical">Κάθετη περιστροφή</string>
-    <string name="in_folder">Στον φάκελο %1$s</string>
     <string name="instant_upload_existing">Μεταφόρτωση, επίσης, υπαρχόντων αρχείων</string>
     <string name="instant_upload_on_charging">Μεταφόρτωση μόνο κατά τη διάρκεια φόρτισης</string>
     <string name="instant_upload_path">/InstantUpload</string>

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

@@ -469,7 +469,6 @@
     <string name="image_preview_unit_megapixel">%s MP</string>
     <string name="image_preview_unit_millimetres">%s mm</string>
     <string name="image_preview_unit_seconds">%s s</string>
-    <string name="in_folder">en la carpeta %1$s</string>
     <string name="instant_upload_existing">Cargue también archivos existentes</string>
     <string name="instant_upload_on_charging">Cargar archivos sólo con el dispositivo conectado a la toma de corriente</string>
     <string name="instant_upload_path">/SubidasInstantáneas</string>

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

@@ -412,7 +412,6 @@
     <string name="image_editor_rotate_ccw">Girar en sentido antihorario</string>
     <string name="image_editor_rotate_cw">Girar en sentido horario</string>
     <string name="image_editor_unable_to_edit_image">No se puede editar la imagen.</string>
-    <string name="in_folder">en la carpeta %1$s</string>
     <string name="instant_upload_existing">También cargar archivos existentes</string>
     <string name="instant_upload_on_charging">Cargar archivos sólo con el dispositivo conectado a la toma de corriente</string>
     <string name="instant_upload_path">/Cargas Automáticas</string>

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

@@ -469,7 +469,6 @@
     <string name="image_preview_unit_megapixel">%s MP</string>
     <string name="image_preview_unit_millimetres">%s mm</string>
     <string name="image_preview_unit_seconds">%s s</string>
-    <string name="in_folder">en la carpeta %1$s</string>
     <string name="instant_upload_existing">Cargar también archivos existentes</string>
     <string name="instant_upload_on_charging">Cargar archivos sólo con el dispositivo conectado a la toma de corriente</string>
     <string name="instant_upload_path">/Cargas Automáticas</string>

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

@@ -466,7 +466,6 @@
     <string name="image_preview_unit_megapixel">%s MP</string>
     <string name="image_preview_unit_millimetres">%s mm</string>
     <string name="image_preview_unit_seconds">%s s</string>
-    <string name="in_folder">en carpeta %1$s</string>
     <string name="instant_upload_existing">Subir también archivos existentes</string>
     <string name="instant_upload_on_charging">Subir solo al cargar batería</string>
     <string name="instant_upload_path">/SubidaInstantánea</string>

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

@@ -485,7 +485,6 @@
     <string name="image_preview_unit_megapixel">%s MP</string>
     <string name="image_preview_unit_millimetres">%s mm</string>
     <string name="image_preview_unit_seconds">%s s</string>
-    <string name="in_folder">%1$skarpetan</string>
     <string name="instant_upload_existing">Existitzen diren fitxategiak ere igo</string>
     <string name="instant_upload_on_charging">Igo bakarrik gailua kargatzean</string>
     <string name="instant_upload_path">/InstantUpload</string>

+ 0 - 1
app/src/main/res/values-fa/strings.xml

@@ -442,7 +442,6 @@
     <string name="image_preview_unit_megapixel">%s مگاپیکسل</string>
     <string name="image_preview_unit_millimetres">%s میلی‌متر</string>
     <string name="image_preview_unit_seconds">%s ثانیه</string>
-    <string name="in_folder">در پوشه %1$s</string>
     <string name="instant_upload_existing">فایل های موجود را نیز بارگذاری کنید</string>
     <string name="instant_upload_on_charging">فقط هنگامی که گوشی شارژ می شود آپلود کنید</string>
     <string name="instant_upload_path">آپلود فوری</string>

+ 0 - 1
app/src/main/res/values-fi-rFI/strings.xml

@@ -415,7 +415,6 @@
     <string name="image_preview_unit_megapixel">%s MP</string>
     <string name="image_preview_unit_millimetres">%s mm</string>
     <string name="image_preview_unit_seconds">%s s</string>
-    <string name="in_folder">kansiossa %1$s</string>
     <string name="instant_upload_existing">Siirrä myös olemassaolevat tiedostot palvelimelle</string>
     <string name="instant_upload_on_charging">Lähetä vain ladattaessa virtaa</string>
     <string name="instant_upload_path">/InstantUpload</string>

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

@@ -482,7 +482,6 @@
     <string name="image_preview_unit_megapixel">%s MP</string>
     <string name="image_preview_unit_millimetres">%s mm</string>
     <string name="image_preview_unit_seconds">%s s</string>
-    <string name="in_folder">dans le dossier %1$s</string>
     <string name="instant_upload_existing">Téléverser aussi les fichiers existants</string>
     <string name="instant_upload_on_charging">Téléverser uniquement lors de la recharge</string>
     <string name="instant_upload_path">/InstantUpload</string>

+ 0 - 1
app/src/main/res/values-ga/strings.xml

@@ -485,7 +485,6 @@
     <string name="image_preview_unit_megapixel">%s MP</string>
     <string name="image_preview_unit_millimetres">%s mm</string>
     <string name="image_preview_unit_seconds">%s s</string>
-    <string name="in_folder">i bhfillteán %1$s</string>
     <string name="instant_upload_existing">Uaslódáil comhaid atá ann cheana féin freisin</string>
     <string name="instant_upload_on_charging">Íoslódáil ach amháin nuair a mhuirearú</string>
     <string name="instant_upload_path">/Uaslódáil Meandaracha</string>

+ 0 - 1
app/src/main/res/values-gd/strings.xml

@@ -344,7 +344,6 @@
     <string name="hint_password">Facal-faire</string>
     <string name="host_not_available">Chan eil am frithealaiche ri làimh</string>
     <string name="host_your_own_server">Òstaich am frithealaiche agad fhèin</string>
-    <string name="in_folder">sa phasgan %1$s</string>
     <string name="instant_upload_existing">Luchdaich suas na faidhlichean a tha ann mu thràth cuideachd</string>
     <string name="instant_upload_on_charging">Na luchdaich suas ach nuair a bhios an t-uidheam ’ga theàirrdseadh</string>
     <string name="instant_upload_path">/InstantUpload</string>

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

@@ -485,7 +485,6 @@
     <string name="image_preview_unit_megapixel">%s MP</string>
     <string name="image_preview_unit_millimetres">%s mm</string>
     <string name="image_preview_unit_seconds">%s s</string>
-    <string name="in_folder">no cartafol %1$s</string>
     <string name="instant_upload_existing">Envíar tamén os ficheiros existentes</string>
     <string name="instant_upload_on_charging">Enviar só cando estea cargando</string>
     <string name="instant_upload_path">/EnvíoInstantáneo</string>

+ 0 - 1
app/src/main/res/values-hr/strings.xml

@@ -382,7 +382,6 @@
     <string name="hint_password">Zaporka</string>
     <string name="host_not_available">Poslužitelj nije dostupan</string>
     <string name="host_your_own_server">Postavi vlastiti poslužitelj</string>
-    <string name="in_folder">u mapi %1$s</string>
     <string name="instant_upload_existing">Također otpremi postojeće datoteke</string>
     <string name="instant_upload_on_charging">Otpremanje samo tijekom punjenja</string>
     <string name="instant_upload_path">/InstantUpload</string>

+ 0 - 1
app/src/main/res/values-hu-rHU/strings.xml

@@ -429,7 +429,6 @@
     <string name="image_preview_unit_megapixel">%s MP</string>
     <string name="image_preview_unit_millimetres">%s mm</string>
     <string name="image_preview_unit_seconds">%s s</string>
-    <string name="in_folder">%1$s mappában</string>
     <string name="instant_upload_existing">A meglévő fájlokat is töltse fel</string>
     <string name="instant_upload_on_charging">Feltöltés csak töltés közben</string>
     <string name="instant_upload_path">/InstantUpload</string>

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

@@ -430,7 +430,6 @@ Otomatis unggah hanya bekerja dengan baik apabila Anda mengeluarkan aplikasi ini
     <string name="image_editor_unable_to_edit_image">Tidak dapat mengedit gambar.</string>
     <string name="image_preview_filedetails">Detail berkas</string>
     <string name="image_preview_image_taking_conditions">Kondisi pengambilan gambar</string>
-    <string name="in_folder">di folder %1$s</string>
     <string name="instant_upload_existing">Juga unggah berkas yang ada</string>
     <string name="instant_upload_on_charging">Hanya unggah ketika dicas</string>
     <string name="instant_upload_path">/UnggahInstan</string>

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

@@ -415,7 +415,6 @@
     <string name="image_preview_unit_megapixel">%s MP</string>
     <string name="image_preview_unit_millimetres">%s mm</string>
     <string name="image_preview_unit_seconds">%s s</string>
-    <string name="in_folder">í möppunni %1$s</string>
     <string name="instant_upload_existing">Senda líka inn fyrirliggjandi skrár</string>
     <string name="instant_upload_on_charging">Einungis senda inn þegar verið er að hlaða</string>
     <string name="instant_upload_path">/BeinInnsending</string>

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

@@ -447,7 +447,6 @@
     <string name="image_preview_unit_megapixel">%s MP</string>
     <string name="image_preview_unit_millimetres">%s mm</string>
     <string name="image_preview_unit_seconds">%s s</string>
-    <string name="in_folder">nella cartella %1$s</string>
     <string name="instant_upload_existing">Carica anche i file esistenti</string>
     <string name="instant_upload_on_charging">Carica solo durante la ricarica</string>
     <string name="instant_upload_path">/InstantUpload</string>

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

@@ -470,7 +470,6 @@
     <string name="image_preview_unit_megapixel">%s MP</string>
     <string name="image_preview_unit_millimetres">%s mm</string>
     <string name="image_preview_unit_seconds">%s 秒</string>
-    <string name="in_folder">フォルダー%1$sの中で</string>
     <string name="instant_upload_existing">既存のファイルもアップロード</string>
     <string name="instant_upload_on_charging">充電中のみアップロード</string>
     <string name="instant_upload_path">/InstantUpload</string>

+ 0 - 1
app/src/main/res/values-ka/strings.xml

@@ -424,7 +424,6 @@
     <string name="image_preview_unit_megapixel">%s MP</string>
     <string name="image_preview_unit_millimetres">%s mm</string>
     <string name="image_preview_unit_seconds">%s s</string>
-    <string name="in_folder">in folder %1$s</string>
     <string name="instant_upload_existing">Also upload existing files</string>
     <string name="instant_upload_on_charging">Only upload when charging</string>
     <string name="instant_upload_path">/InstantUpload</string>

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

@@ -480,7 +480,6 @@
     <string name="image_preview_unit_megapixel">%s MP</string>
     <string name="image_preview_unit_millimetres">%s mm</string>
     <string name="image_preview_unit_seconds">%s초</string>
-    <string name="in_folder">%1$s 폴더 안에</string>
     <string name="instant_upload_existing">이미 존재하는 파일도 올리기</string>
     <string name="instant_upload_on_charging">충전 중에만 업로드</string>
     <string name="instant_upload_path">/InstantUpload</string>

+ 0 - 1
app/src/main/res/values-lo/strings.xml

@@ -347,7 +347,6 @@
     <string name="hint_password">ລະຫັດຜ່ານ</string>
     <string name="host_not_available">ເຊີເວີບໍ່ວ່າງ</string>
     <string name="host_your_own_server">ເຊີເວີຂອງທ່ານເອງ</string>
-    <string name="in_folder">ໃນໂຟນເດີ %1$s</string>
     <string name="instant_upload_existing">ອັບໂຫຼດຟາຍທີ່ມີຢູ່ແລ້ວ</string>
     <string name="instant_upload_on_charging">ພຽງແຕ່ອັບໂຫຼດເທົ່ານັ້ນ</string>
     <string name="instant_upload_path">/ອັບໂຫຼດທັນທີ</string>

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

@@ -376,7 +376,6 @@
     <string name="hint_password">Slaptažodis</string>
     <string name="host_not_available">Serveris neprieinamas</string>
     <string name="host_your_own_server">Administruoti savo serverį</string>
-    <string name="in_folder">aplanke %1$s</string>
     <string name="instant_upload_existing">Taip pat įkelkite esamus failus</string>
     <string name="instant_upload_on_charging">Įkelti failus tik kai kraunasi</string>
     <string name="instant_upload_path">/InstantUpload</string>

+ 0 - 1
app/src/main/res/values-mk/strings.xml

@@ -358,7 +358,6 @@
     <string name="hint_password">Лозинка</string>
     <string name="host_not_available">Серверот не е достапен</string>
     <string name="host_your_own_server">Хостирајте го вашиот сервер</string>
-    <string name="in_folder">во папката %1$s</string>
     <string name="instant_upload_existing">Прикачување на постоечките датотеки</string>
     <string name="instant_upload_on_charging">Прикачувај само додека се полни</string>
     <string name="instant_upload_path">/InstantUpload</string>

+ 0 - 1
app/src/main/res/values-nb-rNO/strings.xml

@@ -483,7 +483,6 @@
     <string name="image_preview_unit_megapixel">%s MP</string>
     <string name="image_preview_unit_millimetres">%s mm</string>
     <string name="image_preview_unit_seconds">%s s</string>
-    <string name="in_folder">i mappen %1$s</string>
     <string name="instant_upload_existing">Last også opp eksisterende filer</string>
     <string name="instant_upload_on_charging">Bare last opp under lading</string>
     <string name="instant_upload_path">/Direkteopplasting</string>

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

@@ -470,7 +470,6 @@
     <string name="image_preview_unit_megapixel">%s MP</string>
     <string name="image_preview_unit_millimetres">%s mm</string>
     <string name="image_preview_unit_seconds">%s s</string>
-    <string name="in_folder">in map %1$s</string>
     <string name="instant_upload_existing">Upload ook bestaande bestanden</string>
     <string name="instant_upload_on_charging">Alleen uploaden bij opladen</string>
     <string name="instant_upload_path">/InstantUpload</string>

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

@@ -464,7 +464,6 @@
     <string name="image_preview_unit_megapixel">%s MP</string>
     <string name="image_preview_unit_millimetres">%s mm</string>
     <string name="image_preview_unit_seconds">%s s</string>
-    <string name="in_folder">w katalogu %1$s</string>
     <string name="instant_upload_existing">Wyślij również istniejące pliki</string>
     <string name="instant_upload_on_charging">Wysyłaj tylko podczas ładowania</string>
     <string name="instant_upload_path">/InstantUpload</string>

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

@@ -483,7 +483,6 @@
     <string name="image_preview_unit_megapixel">%s MP</string>
     <string name="image_preview_unit_millimetres">%s mm</string>
     <string name="image_preview_unit_seconds">%s s</string>
-    <string name="in_folder">na pasta %1$s</string>
     <string name="instant_upload_existing">Enviar arquivos existentes também</string>
     <string name="instant_upload_on_charging">Só enviar quando carregando</string>
     <string name="instant_upload_path">/EnvioAutomático</string>

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

@@ -410,7 +410,6 @@
     <string name="image_preview_unit_megapixel">%s MP</string>
     <string name="image_preview_unit_millimetres">%s mm</string>
     <string name="image_preview_unit_seconds">%s s</string>
-    <string name="in_folder">na pasta %1$s</string>
     <string name="instant_upload_existing">Também envia ficheiros existentes</string>
     <string name="instant_upload_on_charging">Carregar ficheiros apenas quando o carregador está ligado</string>
     <string name="instant_upload_path">/Envio Instantâneo </string>

+ 0 - 1
app/src/main/res/values-ro/strings.xml

@@ -434,7 +434,6 @@
     <string name="image_preview_unit_megapixel">%s MP</string>
     <string name="image_preview_unit_millimetres">%s mm</string>
     <string name="image_preview_unit_seconds">%s s</string>
-    <string name="in_folder">în folderul %1$s</string>
     <string name="instant_upload_existing">De asemenea încarcă fisiere existente</string>
     <string name="instant_upload_on_charging">Se încarcă numai în timpul alimentării cu curent</string>
     <string name="instant_upload_path">/Încărcare instantă</string>

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

@@ -486,7 +486,6 @@
     <string name="image_preview_unit_megapixel">%s МПкс</string>
     <string name="image_preview_unit_millimetres">%s мм</string>
     <string name="image_preview_unit_seconds">%s с</string>
-    <string name="in_folder">в папку %1$s</string>
     <string name="instant_upload_existing">Также загрузить существующие файлы</string>
     <string name="instant_upload_on_charging">Только во время зарядки</string>
     <string name="instant_upload_path">/Автозагрузка</string>

+ 0 - 1
app/src/main/res/values-sc/strings.xml

@@ -362,7 +362,6 @@
     <string name="hint_password">Crae</string>
     <string name="host_not_available">Su serbidore no est a disponimentu</string>
     <string name="host_your_own_server">Retzi su serbidore tuo</string>
-    <string name="in_folder">in sa cartella %1$s</string>
     <string name="instant_upload_existing">Càrriga puru is documentos chi esistint giai</string>
     <string name="instant_upload_on_charging">Càrriga isceti cando est carrighende sa bateria</string>
     <string name="instant_upload_path">/Carrigamentu istantàneu</string>

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

@@ -463,7 +463,6 @@
     <string name="image_preview_unit_megapixel">%s MP</string>
     <string name="image_preview_unit_millimetres">%s mm</string>
     <string name="image_preview_unit_seconds">%s s</string>
-    <string name="in_folder">v priečinku %1$s</string>
     <string name="instant_upload_existing">Nahrať aj existujúce súbory</string>
     <string name="instant_upload_on_charging">Nahrať iba počas nabíjania</string>
     <string name="instant_upload_path">/InstantUpload</string>

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

@@ -427,7 +427,6 @@
     <string name="image_preview_unit_megapixel">%s MP</string>
     <string name="image_preview_unit_millimetres">%s mm</string>
     <string name="image_preview_unit_seconds">%s s</string>
-    <string name="in_folder">v mapi %1$s</string>
     <string name="instant_upload_existing">Pošlji tudi obstoječe datoteke</string>
     <string name="instant_upload_on_charging">Usklajuj le med polnjenjem naprave</string>
     <string name="instant_upload_path">/Hipno nalaganje</string>

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

@@ -471,7 +471,6 @@
     <string name="image_preview_unit_megapixel">%s MP</string>
     <string name="image_preview_unit_millimetres">%s mm</string>
     <string name="image_preview_unit_seconds">%s s</string>
-    <string name="in_folder">У фолдеру %1$s</string>
     <string name="instant_upload_existing">Отпреми и постојеће фајлове</string>
     <string name="instant_upload_on_charging">Отпремај само на пуњењу</string>
     <string name="instant_upload_path">/InstantUpload</string>

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

@@ -485,7 +485,6 @@
     <string name="image_preview_unit_megapixel">%s MP</string>
     <string name="image_preview_unit_millimetres">%s mm</string>
     <string name="image_preview_unit_seconds">%s s</string>
-    <string name="in_folder">i mapp %1$s</string>
     <string name="instant_upload_existing">Ladda även upp befintliga filer</string>
     <string name="instant_upload_on_charging">Ladda enbart upp när enheten laddas</string>
     <string name="instant_upload_path">/AutomatiskUppladdning</string>

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

@@ -361,7 +361,6 @@
     <string name="image_editor_rotate_ccw">หมุนทวนเข็มนาฬิกา</string>
     <string name="image_editor_rotate_cw">หมุนตามเข็มนาฬิกา</string>
     <string name="image_editor_unable_to_edit_image">ไม่สามารถแก้ไขรูปภาพ</string>
-    <string name="in_folder">ในโฟลเดอร์ %1$s</string>
     <string name="instant_upload_existing">อัปโหลดไฟล์ที่มีอยู่เดิมด้วย</string>
     <string name="instant_upload_on_charging">อัปโหลดขณะชาร์จเท่านั้น</string>
     <string name="instant_upload_path">/อัพโหลดทันที</string>

+ 0 - 1
app/src/main/res/values-tk/strings.xml

@@ -338,7 +338,6 @@
     <string name="hint_password">Açarsöz</string>
     <string name="host_not_available">Serwer elýeterli däl</string>
     <string name="host_your_own_server">Öz serweriňizi ýerleşdiriň</string>
-    <string name="in_folder">%1$s bukjada</string>
     <string name="instant_upload_existing">Bar bolan faýllary hem ýükläň</string>
     <string name="instant_upload_on_charging">Diňe zarýad berlende ýükläň</string>
     <string name="instant_upload_path">/ Çaltýüklemek</string>

+ 0 - 1
app/src/main/res/values-tr/strings.xml

@@ -485,7 +485,6 @@
     <string name="image_preview_unit_megapixel">%s MP</string>
     <string name="image_preview_unit_millimetres">%s mm</string>
     <string name="image_preview_unit_seconds">%s s</string>
-    <string name="in_folder">%1$s klasöründe</string>
     <string name="instant_upload_existing">Var olan dosyalar da yüklensin</string>
     <string name="instant_upload_on_charging">Yalnızca şarj edilirken yüklensin</string>
     <string name="instant_upload_path">/AnındaYükle</string>

+ 0 - 1
app/src/main/res/values-uk/strings.xml

@@ -476,7 +476,6 @@
     <string name="image_preview_image_taking_conditions">Умови отримання зображення</string>
     <string name="image_preview_unit_millimetres">%s мм</string>
     <string name="image_preview_unit_seconds">%s с</string>
-    <string name="in_folder">в каталозі %1$s</string>
     <string name="instant_upload_existing">Також завантажити існуючі файли</string>
     <string name="instant_upload_on_charging">Завантаження тільки під час заряджання</string>
     <string name="internal_two_way_sync">Внутрішня двостороння синхронізація</string>

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

@@ -387,7 +387,6 @@
     <string name="hint_password">Mật khẩu</string>
     <string name="host_not_available">Máy chủ không khả dụng</string>
     <string name="host_your_own_server">Host máy chủ của riêng bạn</string>
-    <string name="in_folder">trong thư mục %1$s</string>
     <string name="instant_upload_existing">Cũng tải lên các tệp hiện có</string>
     <string name="instant_upload_on_charging">Chỉ tải lên khi đang sạc pin</string>
     <string name="instant_upload_path">/Upload tức thì</string>

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

@@ -459,7 +459,6 @@
     <string name="image_preview_unit_megapixel">%s MP</string>
     <string name="image_preview_unit_millimetres">%s mm</string>
     <string name="image_preview_unit_seconds">%s s</string>
-    <string name="in_folder">在文件夹 %1$s 内 </string>
     <string name="instant_upload_existing">同时上传现有文件</string>
     <string name="instant_upload_on_charging">仅在充电时上传</string>
     <string name="instant_upload_path">/实时上传</string>

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

@@ -485,7 +485,6 @@
     <string name="image_preview_unit_megapixel">%s MP</string>
     <string name="image_preview_unit_millimetres">%s mm</string>
     <string name="image_preview_unit_seconds">%s s</string>
-    <string name="in_folder">在資料夾 %1$s</string>
     <string name="instant_upload_existing">一併上傳存在的檔案</string>
     <string name="instant_upload_on_charging">只在充電時上傳</string>
     <string name="instant_upload_path">/InstantUpload</string>

+ 0 - 1
app/src/main/res/values-zh-rTW/strings.xml

@@ -485,7 +485,6 @@
     <string name="image_preview_unit_megapixel">%s MP</string>
     <string name="image_preview_unit_millimetres">%s mm</string>
     <string name="image_preview_unit_seconds">%s s</string>
-    <string name="in_folder">在資料夾 %1$s</string>
     <string name="instant_upload_existing">同時上傳既有的檔案</string>
     <string name="instant_upload_on_charging">只在充電時上傳</string>
     <string name="instant_upload_path">/InstantUpload</string>

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

@@ -1075,7 +1075,6 @@
     <string name="drawer_item_gallery">Media</string>
     <string name="player_stop">stop</string>
     <string name="player_toggle">toggle</string>
-    <string name="in_folder">in folder %1$s</string>
     <string name="choose_which_file">Choose which file to keep!</string>
     <string name="wrong_storage_path">Data storage folder does not exist!</string>
     <string name="wrong_storage_path_desc">This might be due to a backup restore on another device. Falling back to default. Please check settings to adjust data storage folder.</string>

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

@@ -1,2 +1,2 @@
 DO NOT TOUCH; GENERATED BY DRONE
-      <span class="mdl-layout-title">Lint Report: 3 errors and 61 warnings</span>
+      <span class="mdl-layout-title">Lint Report: 3 errors and 59 warnings</span>