Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/android.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortobiasKaminsky <tobias@kaminsky.me>2022-06-13 10:15:20 +0300
committertobiasKaminsky <tobias@kaminsky.me>2022-06-13 17:17:28 +0300
commit60757a18534639775494058a684f62cf827beca3 (patch)
treeb531199d3b269413aed72bb7bd8766b6878808dc
parentc56ccc83637f2c594d2a337cde34d0a04366749d (diff)
Groupfolders cannot be encryptedgroupfolderCannotBeEncrypted
added test showing folder types Signed-off-by: tobiasKaminsky <tobias@kaminsky.me>
-rw-r--r--app/screenshots/gplay/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showFolderTypes.pngbin0 -> 12297 bytes
-rw-r--r--app/screenshots/gplay/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showSharedFiles.pngbin50672 -> 49864 bytes
-rw-r--r--app/src/androidTest/java/com/owncloud/android/ui/fragment/OCFileListFragmentStaticServerIT.kt120
-rw-r--r--app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java1
-rw-r--r--app/src/main/java/com/owncloud/android/datamodel/OCFile.java6
-rw-r--r--app/src/main/java/com/owncloud/android/files/FileMenuFilter.java6
-rw-r--r--app/src/main/java/com/owncloud/android/ui/activity/EditorWebView.java1
-rw-r--r--app/src/main/java/com/owncloud/android/ui/activity/ShareActivity.java1
-rw-r--r--app/src/main/java/com/owncloud/android/ui/adapter/UploaderAdapter.java1
-rw-r--r--app/src/main/java/com/owncloud/android/utils/DisplayUtils.java9
-rw-r--r--app/src/main/java/com/owncloud/android/utils/MimeTypeUtil.java6
-rwxr-xr-xscripts/androidScreenshotTest1
12 files changed, 122 insertions, 30 deletions
diff --git a/app/screenshots/gplay/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showFolderTypes.png b/app/screenshots/gplay/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showFolderTypes.png
new file mode 100644
index 0000000000..453ff46dd7
--- /dev/null
+++ b/app/screenshots/gplay/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showFolderTypes.png
Binary files differ
diff --git a/app/screenshots/gplay/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showSharedFiles.png b/app/screenshots/gplay/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showSharedFiles.png
index 435df38e17..4dde9d5c1e 100644
--- a/app/screenshots/gplay/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showSharedFiles.png
+++ b/app/screenshots/gplay/debug/com.owncloud.android.ui.fragment.OCFileListFragmentStaticServerIT_showSharedFiles.png
Binary files differ
diff --git a/app/src/androidTest/java/com/owncloud/android/ui/fragment/OCFileListFragmentStaticServerIT.kt b/app/src/androidTest/java/com/owncloud/android/ui/fragment/OCFileListFragmentStaticServerIT.kt
index bec8a63a56..fded525180 100644
--- a/app/src/androidTest/java/com/owncloud/android/ui/fragment/OCFileListFragmentStaticServerIT.kt
+++ b/app/src/androidTest/java/com/owncloud/android/ui/fragment/OCFileListFragmentStaticServerIT.kt
@@ -29,6 +29,7 @@ import com.owncloud.android.AbstractIT
import com.owncloud.android.datamodel.OCFile
import com.owncloud.android.lib.resources.shares.ShareType
import com.owncloud.android.lib.resources.shares.ShareeUser
+import com.owncloud.android.utils.MimeType
import com.owncloud.android.utils.ScreenshotTest
import org.junit.After
import org.junit.Assert
@@ -80,90 +81,103 @@ class OCFileListFragmentStaticServerIT : AbstractIT() {
/**
* Use same values as {@link FileDetailSharingFragmentIT listSharesFileAllShareTypes }
*/
+ @Test
+ @ScreenshotTest
fun showSharedFiles() {
val sut = testActivityRule.launchActivity(null)
val fragment = OCFileListFragment()
- val userShare = OCFile("/sharedToUser.jpg").apply {
+ OCFile("/sharedToUser.jpg").apply {
parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
isSharedWithSharee = true
sharees = listOf(ShareeUser("Admin", "Server Admin", ShareType.USER))
+ modificationTimestamp = 1000
+ sut.storageManager.saveFile(this)
}
- sut.storageManager.saveFile(userShare)
- val groupShare = OCFile("/sharedToGroup.jpg").apply {
+ OCFile("/sharedToGroup.jpg").apply {
parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
isSharedWithSharee = true
sharees = listOf(ShareeUser("group", "Group", ShareType.GROUP))
+ modificationTimestamp = 1000
+ sut.storageManager.saveFile(this)
}
- sut.storageManager.saveFile(groupShare)
- val emailShare = OCFile("/sharedToEmail.jpg").apply {
+ OCFile("/sharedToEmail.jpg").apply {
parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
isSharedWithSharee = true
sharees = listOf(ShareeUser("admin@nextcloud.localhost", "admin@nextcloud.localhost", ShareType.EMAIL))
+ modificationTimestamp = 1000
+ sut.storageManager.saveFile(this)
}
- sut.storageManager.saveFile(emailShare)
- val publicLink = OCFile("/publicLink.jpg").apply {
+ OCFile("/publicLink.jpg").apply {
parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
isSharedViaLink = true
+ modificationTimestamp = 1000
+ sut.storageManager.saveFile(this)
}
- sut.storageManager.saveFile(publicLink)
- val federatedUserShare = OCFile("/sharedToFederatedUser.jpg").apply {
+ OCFile("/sharedToFederatedUser.jpg").apply {
parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
isSharedWithSharee = true
sharees = listOf(
ShareeUser("admin@remote.nextcloud.com", "admin@remote.nextcloud.com (remote)", ShareType.FEDERATED)
)
+ modificationTimestamp = 1000
+ sut.storageManager.saveFile(this)
}
- sut.storageManager.saveFile(federatedUserShare)
- val personalCircleShare = OCFile("/sharedToPersonalCircle.jpg").apply {
+ OCFile("/sharedToPersonalCircle.jpg").apply {
parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
isSharedWithSharee = true
sharees = listOf(ShareeUser("circle", "Circle (Personal circle)", ShareType.CIRCLE))
+ modificationTimestamp = 1000
+ sut.storageManager.saveFile(this)
}
- sut.storageManager.saveFile(personalCircleShare)
// as we cannot distinguish circle types, we do not need them right now
-// val publicCircleShare = OCFile("/sharedToPublicCircle.jpg").apply {
+// OCFile("/sharedToPublicCircle.jpg").apply {
// parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
// isSharedWithSharee = true
// sharees = listOf(ShareeUser("circle", "Circle (Public circle)", ShareType.CIRCLE))
+// modificationTimestamp = 1000
+// sut.storageManager.saveFile(this)
// }
-// sut.storageManager.saveFile(publicCircleShare)
//
-// val closedCircleShare = OCFile("/sharedToClosedCircle.jpg").apply {
+// OCFile("/sharedToClosedCircle.jpg").apply {
// parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
// isSharedWithSharee = true
// sharees = listOf(ShareeUser("circle", "Circle (Closed circle)", ShareType.CIRCLE))
+// modificationTimestamp = 1000
+// sut.storageManager.saveFile(this)
// }
-// sut.storageManager.saveFile(closedCircleShare)
//
-// val secretCircleShare = OCFile("/sharedToSecretCircle.jpg").apply {
+// OCFile("/sharedToSecretCircle.jpg").apply {
// parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
// isSharedWithSharee = true
// sharees = listOf(ShareeUser("circle", "Circle (Secret circle)", ShareType.CIRCLE))
+// modificationTimestamp = 1000
+// sut.storageManager.saveFile(this)
// }
-// sut.storageManager.saveFile(secretCircleShare)
- val userRoomShare = OCFile("/sharedToUserRoom.jpg").apply {
+ OCFile("/sharedToUserRoom.jpg").apply {
parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
isSharedWithSharee = true
sharees = listOf(ShareeUser("Conversation", "Admin", ShareType.ROOM))
+ modificationTimestamp = 1000
+ sut.storageManager.saveFile(this)
}
- sut.storageManager.saveFile(userRoomShare)
- val groupRoomShare = OCFile("/sharedToGroupRoom.jpg").apply {
+ OCFile("/sharedToGroupRoom.jpg").apply {
parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
isSharedWithSharee = true
sharees = listOf(ShareeUser("Conversation", "Meeting", ShareType.ROOM))
+ modificationTimestamp = 1000
+ sut.storageManager.saveFile(this)
}
- sut.storageManager.saveFile(groupRoomShare)
- val usersShare = OCFile("/sharedToUsers.jpg").apply {
+ OCFile("/sharedToUsers.jpg").apply {
parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
isSharedWithSharee = true
sharees = listOf(
@@ -171,13 +185,67 @@ class OCFileListFragmentStaticServerIT : AbstractIT() {
ShareeUser("User", "User", ShareType.USER),
ShareeUser("Christine", "Christine Scott", ShareType.USER)
)
+ modificationTimestamp = 1000
+ sut.storageManager.saveFile(this)
+ }
+
+ OCFile("/notShared.jpg").apply {
+ parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
+ modificationTimestamp = 1000
+ sut.storageManager.saveFile(this)
+ }
+
+ sut.addFragment(fragment)
+
+ shortSleep()
+
+ val root = sut.storageManager.getFileByEncryptedRemotePath("/")
+
+ sut.runOnUiThread {
+ fragment.listDirectory(root, false, false)
+ fragment.adapter.setShowShareAvatar(true)
+ }
+
+ waitForIdleSync()
+ shortSleep()
+ shortSleep()
+ shortSleep()
+
+ screenshot(sut)
+ }
+
+ /**
+ * Use same values as {@link FileDetailSharingFragmentIT listSharesFileAllShareTypes }
+ */
+ @Test
+ @ScreenshotTest
+ fun showFolderTypes() {
+ val sut = testActivityRule.launchActivity(null)
+ val fragment = OCFileListFragment()
+
+ OCFile("/normal/").apply {
+ mimeType = MimeType.DIRECTORY
+ modificationTimestamp = 1624003571000
+ parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
+ sut.storageManager.saveFile(this)
+ }
+
+ OCFile("/groupFolder/").apply {
+ mimeType = MimeType.DIRECTORY
+ modificationTimestamp = 1615003571000
+ parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
+ permissions += "M"
+ sut.storageManager.saveFile(this)
}
- sut.storageManager.saveFile(usersShare)
- val noShare = OCFile("/notShared.jpg").apply {
+ OCFile("/encrypted/").apply {
+ mimeType = MimeType.DIRECTORY
+ isEncrypted = true
+ decryptedRemotePath = "/encrypted/"
+ modificationTimestamp = 1614003571000
parentId = sut.storageManager.getFileByEncryptedRemotePath("/").fileId
+ sut.storageManager.saveFile(this)
}
- sut.storageManager.saveFile(noShare)
sut.addFragment(fragment)
diff --git a/app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java b/app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java
index ed19d1880e..3904029c8e 100644
--- a/app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java
+++ b/app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java
@@ -506,6 +506,7 @@ public class FileDataStorageManager {
cv.put(ProviderTableMeta.FILE_LOCK_TIMESTAMP, file.getLockTimestamp());
cv.put(ProviderTableMeta.FILE_LOCK_TIMEOUT, file.getLockTimeout());
cv.put(ProviderTableMeta.FILE_LOCK_TOKEN, file.getLockToken());
+ cv.put(ProviderTableMeta.FILE_MODIFIED, file.getModificationTimestamp());
return cv;
}
diff --git a/app/src/main/java/com/owncloud/android/datamodel/OCFile.java b/app/src/main/java/com/owncloud/android/datamodel/OCFile.java
index c497109799..9a74a6af9b 100644
--- a/app/src/main/java/com/owncloud/android/datamodel/OCFile.java
+++ b/app/src/main/java/com/owncloud/android/datamodel/OCFile.java
@@ -52,6 +52,7 @@ public class OCFile implements Parcelable, Comparable<OCFile>, ServerFileInterfa
@VisibleForTesting
public final static String PERMISSION_CAN_RESHARE = "R";
private final static String PERMISSION_CAN_WRITE = "CK";
+ private final static String PERMISSION_GROUPFOLDER = "M";
public static final String PATH_SEPARATOR = "/";
public static final String ROOT_PATH = PATH_SEPARATOR;
@@ -618,6 +619,11 @@ public class OCFile implements Parcelable, Comparable<OCFile>, ServerFileInterfa
return permissions != null && permissions.contains(PERMISSION_CAN_WRITE);
}
+ public boolean isGroupFolder() {
+ String permissions = getPermissions();
+ return permissions != null && permissions.contains(PERMISSION_GROUPFOLDER);
+ }
+
public static final Parcelable.Creator<OCFile> CREATOR = new Parcelable.Creator<OCFile>() {
@Override
diff --git a/app/src/main/java/com/owncloud/android/files/FileMenuFilter.java b/app/src/main/java/com/owncloud/android/files/FileMenuFilter.java
index 6796d9d574..1f8e301f09 100644
--- a/app/src/main/java/com/owncloud/android/files/FileMenuFilter.java
+++ b/app/src/main/java/com/owncloud/android/files/FileMenuFilter.java
@@ -310,7 +310,7 @@ public class FileMenuFilter {
}
private void filterEncrypt(List<Integer> toShow, List<Integer> toHide, boolean endToEndEncryptionEnabled) {
- if (files.isEmpty() || !isSingleSelection() || isSingleFile() || isEncryptedFolder()
+ if (files.isEmpty() || !isSingleSelection() || isSingleFile() || isEncryptedFolder() || isGroupFolder()
|| !endToEndEncryptionEnabled) {
toHide.add(R.id.action_encrypted);
} else {
@@ -546,6 +546,10 @@ public class FileMenuFilter {
}
}
+ private boolean isGroupFolder() {
+ return files.iterator().next().isGroupFolder();
+ }
+
private boolean isSingleImage() {
return isSingleSelection() && MimeTypeUtil.isImage(files.iterator().next());
}
diff --git a/app/src/main/java/com/owncloud/android/ui/activity/EditorWebView.java b/app/src/main/java/com/owncloud/android/ui/activity/EditorWebView.java
index 9dc2b73ed4..9321dfc40b 100644
--- a/app/src/main/java/com/owncloud/android/ui/activity/EditorWebView.java
+++ b/app/src/main/java/com/owncloud/android/ui/activity/EditorWebView.java
@@ -156,6 +156,7 @@ public abstract class EditorWebView extends ExternalSiteWebView {
file.isSharedWithSharee(),
file.isSharedViaLink(),
file.isEncrypted(),
+ file.isGroupFolder(),
file.getMountType(),
this,
themeColorUtils,
diff --git a/app/src/main/java/com/owncloud/android/ui/activity/ShareActivity.java b/app/src/main/java/com/owncloud/android/ui/activity/ShareActivity.java
index dcb767eeb1..120c91bc84 100644
--- a/app/src/main/java/com/owncloud/android/ui/activity/ShareActivity.java
+++ b/app/src/main/java/com/owncloud/android/ui/activity/ShareActivity.java
@@ -76,6 +76,7 @@ public class ShareActivity extends FileActivity {
file.isSharedWithSharee(),
file.isSharedViaLink(),
file.isEncrypted(),
+ file.isGroupFolder(),
file.getMountType(),
this,
themeColorUtils,
diff --git a/app/src/main/java/com/owncloud/android/ui/adapter/UploaderAdapter.java b/app/src/main/java/com/owncloud/android/ui/adapter/UploaderAdapter.java
index c0ff816821..513388cd0d 100644
--- a/app/src/main/java/com/owncloud/android/ui/adapter/UploaderAdapter.java
+++ b/app/src/main/java/com/owncloud/android/ui/adapter/UploaderAdapter.java
@@ -108,6 +108,7 @@ public class UploaderAdapter extends SimpleAdapter {
final Drawable icon = MimeTypeUtil.getFolderTypeIcon(isShared,
file.isSharedViaLink(),
file.isEncrypted(),
+ file.isGroupFolder(),
user,
file.getMountType(),
mContext,
diff --git a/app/src/main/java/com/owncloud/android/utils/DisplayUtils.java b/app/src/main/java/com/owncloud/android/utils/DisplayUtils.java
index cd77c578df..2ab1908be8 100644
--- a/app/src/main/java/com/owncloud/android/utils/DisplayUtils.java
+++ b/app/src/main/java/com/owncloud/android/utils/DisplayUtils.java
@@ -858,8 +858,13 @@ public final class DisplayUtils {
stopShimmer(shimmerThumbnail, thumbnailView);
thumbnailView.setImageDrawable(MimeTypeUtil
.getFolderTypeIcon(file.isSharedWithMe() || file.isSharedWithSharee(),
- file.isSharedViaLink(), file.isEncrypted(),
- file.getMountType(), context, themeColorUtils, themeDrawableUtils));
+ file.isSharedViaLink(),
+ file.isEncrypted(),
+ file.isGroupFolder(),
+ file.getMountType(),
+ context,
+ themeColorUtils,
+ themeDrawableUtils));
} else {
if (file.getRemoteId() != null && file.isPreviewAvailable()) {
// Thumbnail in cache?
diff --git a/app/src/main/java/com/owncloud/android/utils/MimeTypeUtil.java b/app/src/main/java/com/owncloud/android/utils/MimeTypeUtil.java
index 40b6754ba4..7a82487104 100644
--- a/app/src/main/java/com/owncloud/android/utils/MimeTypeUtil.java
+++ b/app/src/main/java/com/owncloud/android/utils/MimeTypeUtil.java
@@ -157,6 +157,7 @@ public final class MimeTypeUtil {
public static Drawable getFolderTypeIcon(boolean isSharedViaUsers,
boolean isSharedViaLink,
boolean isEncrypted,
+ boolean isGroupfolder,
WebdavEntry.MountType mountType,
Context context,
ThemeColorUtils themeColorUtils,
@@ -164,6 +165,7 @@ public final class MimeTypeUtil {
return getFolderTypeIcon(isSharedViaUsers,
isSharedViaLink,
isEncrypted,
+ isGroupfolder,
null,
mountType,
context,
@@ -183,6 +185,7 @@ public final class MimeTypeUtil {
public static Drawable getFolderTypeIcon(boolean isSharedViaUsers,
boolean isSharedViaLink,
boolean isEncrypted,
+ boolean isGroupFolder,
@Nullable User user,
WebdavEntry.MountType mountType,
Context context,
@@ -198,7 +201,7 @@ public final class MimeTypeUtil {
drawableId = R.drawable.folder_encrypted;
} else if (WebdavEntry.MountType.EXTERNAL == mountType) {
drawableId = R.drawable.folder_external;
- } else if (WebdavEntry.MountType.GROUP == mountType) {
+ } else if (WebdavEntry.MountType.GROUP == mountType || isGroupFolder) {
drawableId = R.drawable.folder_group;
} else {
drawableId = R.drawable.folder;
@@ -216,6 +219,7 @@ public final class MimeTypeUtil {
return getFolderTypeIcon(false,
false,
false,
+ false,
WebdavEntry.MountType.INTERNAL,
context,
themeColorUtils,
diff --git a/scripts/androidScreenshotTest b/scripts/androidScreenshotTest
index 99a0c0e073..fdf2e1eda0 100755
--- a/scripts/androidScreenshotTest
+++ b/scripts/androidScreenshotTest
@@ -61,6 +61,7 @@ done < <(adb devices | cut -f1)
if [ "$emulatorIsRunning" == false ] ; then
"$(command -v emulator)" -writable-system -avd uiComparison -no-snapshot -gpu swiftshader_indirect -no-audio -skin 500x833 &
+ sleep 20
fi
if [ -e $5 ] ; then