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 3b97559634ae..7b7b5ce7725e 100644 --- a/app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java +++ b/app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java @@ -1895,12 +1895,14 @@ public List getSharesWithForAFile(String filePath, String accountName) + ProviderTableMeta.OCSHARES_SHARE_TYPE + " = ? OR " + ProviderTableMeta.OCSHARES_SHARE_TYPE + " = ? OR " + ProviderTableMeta.OCSHARES_SHARE_TYPE + " = ? OR " + + ProviderTableMeta.OCSHARES_SHARE_TYPE + " = ? OR " + ProviderTableMeta.OCSHARES_SHARE_TYPE + " = ? ) "; String[] selectionArgs = new String[]{filePath, accountName, Integer.toString(ShareType.USER.getValue()), Integer.toString(ShareType.GROUP.getValue()), Integer.toString(ShareType.EMAIL.getValue()), Integer.toString(ShareType.FEDERATED.getValue()), + Integer.toString(ShareType.FEDERATED_GROUP.getValue()), Integer.toString(ShareType.ROOM.getValue()), Integer.toString(ShareType.CIRCLE.getValue()) }; diff --git a/app/src/main/java/com/owncloud/android/operations/CreateShareWithShareeOperation.java b/app/src/main/java/com/owncloud/android/operations/CreateShareWithShareeOperation.java index 68a5751938cb..28e732052c72 100644 --- a/app/src/main/java/com/owncloud/android/operations/CreateShareWithShareeOperation.java +++ b/app/src/main/java/com/owncloud/android/operations/CreateShareWithShareeOperation.java @@ -63,6 +63,7 @@ public class CreateShareWithShareeOperation extends SyncOperation { private static final Set supportedShareTypes = new HashSet<>(Arrays.asList(ShareType.USER, ShareType.GROUP, ShareType.FEDERATED, + ShareType.FEDERATED_GROUP, ShareType.EMAIL, ShareType.ROOM, ShareType.CIRCLE)); diff --git a/app/src/main/java/com/owncloud/android/operations/UnshareOperation.java b/app/src/main/java/com/owncloud/android/operations/UnshareOperation.java index 8168c0dd1197..3735703ea9f9 100644 --- a/app/src/main/java/com/owncloud/android/operations/UnshareOperation.java +++ b/app/src/main/java/com/owncloud/android/operations/UnshareOperation.java @@ -130,7 +130,7 @@ protected RemoteOperationResult run(OwnCloudClient client) { if (ShareType.PUBLIC_LINK == share.getShareType()) { file.setSharedViaLink(false); } else if (ShareType.USER == share.getShareType() || ShareType.GROUP == share.getShareType() - || ShareType.FEDERATED == share.getShareType()) { + || ShareType.FEDERATED == share.getShareType() || ShareType.FEDERATED_GROUP == share.getShareType()) { // Check if it is the last share List sharesWith = getStorageManager(). getSharesWithForAFile(remotePath, diff --git a/app/src/main/java/com/owncloud/android/operations/UpdateSharePermissionsOperation.java b/app/src/main/java/com/owncloud/android/operations/UpdateSharePermissionsOperation.java index fa17a12bc5f2..aef74794354b 100644 --- a/app/src/main/java/com/owncloud/android/operations/UpdateSharePermissionsOperation.java +++ b/app/src/main/java/com/owncloud/android/operations/UpdateSharePermissionsOperation.java @@ -49,7 +49,7 @@ public UpdateSharePermissionsOperation(long shareId, FileDataStorageManager stor @Override protected RemoteOperationResult run(OwnCloudClient client) { - OCShare share = getStorageManager().getShareById(shareId); // ShareType.USER | ShareType.GROUP + OCShare share = getStorageManager().getShareById(shareId); // ShareType.USER | ShareType.GROUP | ShareType.FEDERATED_GROUP if (share == null) { // TODO try to get remote share before failing? diff --git a/app/src/main/java/com/owncloud/android/providers/UsersAndGroupsSearchProvider.java b/app/src/main/java/com/owncloud/android/providers/UsersAndGroupsSearchProvider.java index 22d40c1957d4..ef8df0f9c355 100644 --- a/app/src/main/java/com/owncloud/android/providers/UsersAndGroupsSearchProvider.java +++ b/app/src/main/java/com/owncloud/android/providers/UsersAndGroupsSearchProvider.java @@ -100,6 +100,7 @@ public class UsersAndGroupsSearchProvider extends ContentProvider { private String DATA_GROUP; private String DATA_ROOM; private String DATA_REMOTE; + private String DATA_REMOTE_GROUP; private String DATA_EMAIL; private String DATA_CIRCLE; @@ -142,6 +143,7 @@ public boolean onCreate() { DATA_GROUP = AUTHORITY + ".data.group"; DATA_ROOM = AUTHORITY + ".data.room"; DATA_REMOTE = AUTHORITY + ".data.remote"; + DATA_REMOTE_GROUP = AUTHORITY + ".data.remote_group"; DATA_EMAIL = AUTHORITY + ".data.email"; DATA_CIRCLE = AUTHORITY + ".data.circle"; @@ -149,6 +151,7 @@ public boolean onCreate() { sShareTypes.put(DATA_GROUP, ShareType.GROUP); sShareTypes.put(DATA_ROOM, ShareType.ROOM); sShareTypes.put(DATA_REMOTE, ShareType.FEDERATED); + sShareTypes.put(DATA_REMOTE_GROUP, ShareType.FEDERATED_GROUP); sShareTypes.put(DATA_EMAIL, ShareType.EMAIL); sShareTypes.put(DATA_CIRCLE, ShareType.CIRCLE); @@ -228,6 +231,7 @@ private Cursor searchForUsersOrGroups(Uri uri) { Uri groupBaseUri = new Uri.Builder().scheme(CONTENT).authority(DATA_GROUP).build(); Uri roomBaseUri = new Uri.Builder().scheme(CONTENT).authority(DATA_ROOM).build(); Uri remoteBaseUri = new Uri.Builder().scheme(CONTENT).authority(DATA_REMOTE).build(); + Uri remoteGroupBaseUri = new Uri.Builder().scheme(CONTENT).authority(DATA_REMOTE_GROUP).build(); Uri emailBaseUri = new Uri.Builder().scheme(CONTENT).authority(DATA_EMAIL).build(); Uri circleBaseUri = new Uri.Builder().scheme(CONTENT).authority(DATA_CIRCLE).build(); @@ -297,6 +301,24 @@ private Cursor searchForUsersOrGroups(Uri uri) { } break; + case FEDERATED_GROUP: + if (federatedShareAllowed) { + icon = R.drawable.ic_group; + dataUri = Uri.withAppendedPath(remoteGroupBaseUri, shareWith); + + if (userName.equals(shareWith)) { + displayName = name; + subline = getContext().getString(R.string.remote); + subline = ""; + } else { + String[] uriSplitted = shareWith.split("@"); + displayName = name; + subline = getContext().getString(R.string.share_known_remote_on_clarification, + uriSplitted[uriSplitted.length - 1]); + } + } + break; + case USER: displayName = userName; subline = (status.getMessage() == null || status.getMessage().isEmpty()) ? null : diff --git a/app/src/main/java/com/owncloud/android/ui/AvatarGroupLayout.java b/app/src/main/java/com/owncloud/android/ui/AvatarGroupLayout.java index 9eb18b558650..fea9f26aea42 100644 --- a/app/src/main/java/com/owncloud/android/ui/AvatarGroupLayout.java +++ b/app/src/main/java/com/owncloud/android/ui/AvatarGroupLayout.java @@ -106,6 +106,7 @@ public void setAvatars(@NonNull User user, viewThemeUtils.files.createAvatar(sharee.getShareType(), avatar, context); break; case FEDERATED: + case FEDERATED_GROUP: showFederatedShareAvatar(context, sharee.getUserId(), avatarRadius, diff --git a/app/src/main/java/com/owncloud/android/ui/adapter/ShareViewHolder.java b/app/src/main/java/com/owncloud/android/ui/adapter/ShareViewHolder.java index ba473160174c..26159013d544 100644 --- a/app/src/main/java/com/owncloud/android/ui/adapter/ShareViewHolder.java +++ b/app/src/main/java/com/owncloud/android/ui/adapter/ShareViewHolder.java @@ -64,11 +64,11 @@ public void bind(OCShare share, float avatarRadiusDimension) { this.avatarRadiusDimension = avatarRadiusDimension; String name = share.getSharedWithDisplayName(); - + if ("".equals(name) && !"".equals(share.getShareWith())) { name = share.getShareWith(); } - + binding.icon.setTag(null); if (share.getShareType() != null) { @@ -88,6 +88,10 @@ public void bind(OCShare share, name = context.getString(R.string.share_remote_clarification, name); setImage(binding.icon, share.getSharedWithDisplayName()); break; + case FEDERATED_GROUP: + name = context.getString(R.string.share_remote_clarification, name); + setImage(binding.icon, share.getSharedWithDisplayName()); + break; case USER: binding.icon.setTag(share.getShareWith()); float avatarRadius = context.getResources().getDimension(R.dimen.list_item_avatar_icon_radius); diff --git a/app/src/main/java/com/owncloud/android/utils/theme/FilesSpecificViewThemeUtils.kt b/app/src/main/java/com/owncloud/android/utils/theme/FilesSpecificViewThemeUtils.kt index 78048099d818..5bb10a3ade5c 100644 --- a/app/src/main/java/com/owncloud/android/utils/theme/FilesSpecificViewThemeUtils.kt +++ b/app/src/main/java/com/owncloud/android/utils/theme/FilesSpecificViewThemeUtils.kt @@ -73,6 +73,10 @@ class FilesSpecificViewThemeUtils @Inject constructor( createAvatarBase(R.drawable.ic_group) androidViewThemeUtils.colorImageViewBackgroundAndIcon(avatar) } + ShareType.FEDERATED_GROUP -> { + createAvatarBase(R.drawable.ic_group) + androidViewThemeUtils.colorImageViewBackgroundAndIcon(avatar) + } ShareType.ROOM -> { createAvatarBase(R.drawable.first_run_talk, AvatarPadding.LARGE) androidViewThemeUtils.colorImageViewBackgroundAndIcon(avatar)