Skip to content

Commit 933cbcb

Browse files
committed
add custom permissions to bottom sheet
Signed-off-by: alperozturk <alper_ozturk@proton.me>
1 parent 61b76e2 commit 933cbcb

6 files changed

Lines changed: 53 additions & 60 deletions

File tree

app/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingFragment.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -691,6 +691,11 @@ public void onQuickPermissionChanged(OCShare share, int permission) {
691691
fileOperationsHelper.setPermissionsToShare(share, permission);
692692
}
693693

694+
@Override
695+
public void openShareDetails(OCShare share) {
696+
modifyExistingShare(share, FileDetailsSharingProcessFragment.SCREEN_TYPE_CUSTOM_PERMISSION);
697+
}
698+
694699
//launcher for contact permission
695700
private final ActivityResultLauncher<String> requestContactPermissionLauncher =
696701
registerForActivityResult(new ActivityResultContracts.RequestPermission(), isGranted -> {

app/src/main/java/com/owncloud/android/ui/fragment/FileDetailsSharingProcessFragment.kt

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ class FileDetailsSharingProcessFragment :
7171
// types of screens to be displayed
7272
const val SCREEN_TYPE_PERMISSION = 1 // permissions screen
7373
const val SCREEN_TYPE_NOTE = 2 // note screen
74+
const val SCREEN_TYPE_CUSTOM_PERMISSION = 3 // custom permissions screen
75+
7476

7577
/**
7678
* fragment instance to be called while creating new share for internal and external share
@@ -187,7 +189,11 @@ class FileDetailsSharingProcessFragment :
187189

188190
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
189191
super.onViewCreated(view, savedInstanceState)
190-
if (shareProcessStep == SCREEN_TYPE_PERMISSION) {
192+
if (shareProcessStep == SCREEN_TYPE_PERMISSION || shareProcessStep == SCREEN_TYPE_CUSTOM_PERMISSION) {
193+
if (shareProcessStep == SCREEN_TYPE_CUSTOM_PERMISSION) {
194+
binding.customPermissionRadioButton.isChecked = true
195+
}
196+
191197
showShareProcessFirst()
192198
} else {
193199
showShareProcessSecond()
@@ -288,8 +294,11 @@ class FileDetailsSharingProcessFragment :
288294
private fun setupModificationUI() {
289295
if (share?.isFolder == true) updateViewForFolder() else updateViewForFile()
290296

291-
// read only / allow upload and editing / file drop
292-
if (SharingMenuHelper.isUploadAndEditingAllowed(share)) {
297+
// custom permissions / read only / allow upload and editing / file drop
298+
if (sharePermissionManager.isCustomPermission(share)) {
299+
binding.customPermissionRadioButton.isChecked = true
300+
binding.customPermissionLayout.setVisibilityWithAnimation(true)
301+
} else if (SharingMenuHelper.isUploadAndEditingAllowed(share)) {
293302
binding.editingRadioButton.isChecked = true
294303
} else if (SharingMenuHelper.isFileDrop(share) && share?.isFolder == true) {
295304
binding.fileDropRadioButton.isChecked = true

app/src/main/java/com/owncloud/android/ui/fragment/QuickSharingPermissionsBottomSheetDialog.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -115,14 +115,12 @@ private void handlePermissionChanged(List<QuickPermissionModel> quickPermissionM
115115
permissionFlag = ocShare.isFolder() ? MAXIMUM_PERMISSIONS_FOR_FOLDER : MAXIMUM_PERMISSIONS_FOR_FILE;
116116
} else if (permissionName.equalsIgnoreCase(res.getString(R.string.link_share_view_only))) {
117117
permissionFlag = READ_PERMISSION_FLAG;
118-
} else if (permissionName.equalsIgnoreCase(res.getString(R.string.link_share_file_drop)) || permissionName.equalsIgnoreCase(res.getString(R.string.share_create_permission))) {
118+
} else if (permissionName.equalsIgnoreCase(res.getString(R.string.link_share_file_drop))) {
119119
permissionFlag = CREATE_PERMISSION_FLAG + READ_PERMISSION_FLAG;
120-
} else if (permissionName.equalsIgnoreCase(res.getString(R.string.share_edit_permission))) {
121-
permissionFlag = UPDATE_PERMISSION_FLAG + READ_PERMISSION_FLAG;
122-
} else if (permissionName.equalsIgnoreCase(res.getString(R.string.share_delete_permission))) {
123-
permissionFlag = DELETE_PERMISSION_FLAG + READ_PERMISSION_FLAG;
124-
} else if (permissionName.equalsIgnoreCase(res.getString(R.string.share_re_share_permission))) {
125-
permissionFlag = SHARE_PERMISSION_FLAG + READ_PERMISSION_FLAG;
120+
} else if (permissionName.equalsIgnoreCase(res.getString(R.string.share_custom_permission))) {
121+
dismiss();
122+
actions.openShareDetails(ocShare);
123+
return;
126124
}
127125

128126
actions.onQuickPermissionChanged(ocShare, permissionFlag);
@@ -157,5 +155,6 @@ protected void onStop() {
157155

158156
public interface QuickPermissionSharingBottomSheetActions {
159157
void onQuickPermissionChanged(OCShare share, int permission);
158+
void openShareDetails(OCShare share);
160159
}
161160
}

app/src/main/java/com/owncloud/android/ui/fragment/util/SharePermissionManager.kt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,23 @@ class SharePermissionManager {
5757
fun hasPermission(permission: Int, permissionFlag: Int): Boolean {
5858
return permission != OCShare.NO_PERMISSION && (permission and permissionFlag) == permissionFlag
5959
}
60+
61+
fun isCustomPermission(share: OCShare?): Boolean {
62+
if (share == null) return false
63+
val permissions = share.permissions
64+
if (permissions == OCShare.NO_PERMISSION) return false
65+
66+
val hasRead = hasPermission(permissions, OCShare.READ_PERMISSION_FLAG)
67+
if (!hasRead) return false
68+
69+
val hasCreate = hasPermission(permissions, OCShare.CREATE_PERMISSION_FLAG)
70+
val hasUpdate = hasPermission(permissions, OCShare.UPDATE_PERMISSION_FLAG)
71+
val hasDelete = hasPermission(permissions, OCShare.DELETE_PERMISSION_FLAG)
72+
val hasShare = hasPermission(permissions, OCShare.SHARE_PERMISSION_FLAG)
73+
74+
return when {
75+
share.isFolder -> hasCreate || hasUpdate || hasDelete || hasShare
76+
else -> hasUpdate || hasShare || hasDelete
77+
}
78+
}
6079
}

app/src/main/java/com/owncloud/android/ui/fragment/util/SharingMenuHelper.java

Lines changed: 9 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,19 @@
1717
import com.owncloud.android.lib.resources.shares.OCShare;
1818

1919
import static com.owncloud.android.lib.resources.shares.OCShare.CREATE_PERMISSION_FLAG;
20-
import static com.owncloud.android.lib.resources.shares.OCShare.DELETE_PERMISSION_FLAG;
2120
import static com.owncloud.android.lib.resources.shares.OCShare.MAXIMUM_PERMISSIONS_FOR_FILE;
2221
import static com.owncloud.android.lib.resources.shares.OCShare.MAXIMUM_PERMISSIONS_FOR_FOLDER;
2322
import static com.owncloud.android.lib.resources.shares.OCShare.NO_PERMISSION;
2423
import static com.owncloud.android.lib.resources.shares.OCShare.READ_PERMISSION_FLAG;
2524
import static com.owncloud.android.lib.resources.shares.OCShare.SHARE_PERMISSION_FLAG;
26-
import static com.owncloud.android.lib.resources.shares.OCShare.UPDATE_PERMISSION_FLAG;
2725

2826
/**
2927
* Helper calls for visibility logic of the sharing menu.
3028
*/
3129
public final class SharingMenuHelper {
3230

31+
private static final SharePermissionManager sharePermissionManager = new SharePermissionManager();
32+
3333
private SharingMenuHelper() {
3434
// utility class -> private constructor
3535
}
@@ -68,50 +68,21 @@ public static boolean isSecureFileDrop(OCShare share) {
6868
return (share.getPermissions() & ~SHARE_PERMISSION_FLAG) == CREATE_PERMISSION_FLAG + READ_PERMISSION_FLAG;
6969
}
7070

71-
public static boolean isCreatePermission(OCShare share) {
72-
if (share.getPermissions() == NO_PERMISSION) {
73-
return false;
74-
}
75-
76-
return (share.getPermissions() & ~SHARE_PERMISSION_FLAG) == CREATE_PERMISSION_FLAG;
77-
}
78-
79-
public static boolean isUpdatePermission(OCShare share) {
80-
if (share.getPermissions() == NO_PERMISSION) {
81-
return false;
82-
}
83-
84-
return (share.getPermissions() & ~SHARE_PERMISSION_FLAG) == UPDATE_PERMISSION_FLAG;
85-
}
86-
87-
public static boolean isDeletePermission(OCShare share) {
88-
if (share.getPermissions() == NO_PERMISSION) {
89-
return false;
90-
}
91-
92-
return (share.getPermissions() & ~SHARE_PERMISSION_FLAG) == DELETE_PERMISSION_FLAG;
93-
}
94-
9571
public static String getPermissionName(Context context, OCShare share) {
9672
final var res = context.getResources();
9773

98-
if (SharingMenuHelper.isUploadAndEditingAllowed(share)) {
74+
if (sharePermissionManager.isCustomPermission(share)) {
75+
return res.getString(R.string.share_custom_permission);
76+
} else if (SharingMenuHelper.isUploadAndEditingAllowed(share)) {
9977
return res.getString(R.string.share_permission_can_edit);
10078
} else if (SharingMenuHelper.isReadOnly(share)) {
10179
return res.getString(R.string.share_permission_view_only);
10280
} else if (SharingMenuHelper.isSecureFileDrop(share)) {
10381
return res.getString(R.string.share_permission_secure_file_drop);
10482
} else if (SharingMenuHelper.isFileDrop(share)) {
10583
return res.getString(R.string.share_permission_file_drop);
106-
} else if (SharingMenuHelper.isCreatePermission(share)) {
107-
return res.getString(R.string.share_create_permission);
108-
} else if (SharingMenuHelper.isUpdatePermission(share)) {
109-
return res.getString(R.string.share_edit_permission);
110-
} else if (SharingMenuHelper.isDeletePermission(share)) {
111-
return res.getString(R.string.share_delete_permission);
112-
} else if (SharingMenuHelper.canReshare(share)) {
113-
return res.getString(R.string.share_re_share_permission);
11484
}
85+
11586
return null;
11687
}
11788

@@ -122,20 +93,14 @@ public static String getPermissionName(Context context, OCShare share) {
12293
public static int getPermissionCheckedItem(Context context, OCShare share, String[] permissionArray) {
12394
int permissionName;
12495

125-
if (SharingMenuHelper.isUploadAndEditingAllowed(share)) {
96+
if (sharePermissionManager.isCustomPermission(share)) {
97+
permissionName = R.string.share_custom_permission;
98+
} else if (SharingMenuHelper.isUploadAndEditingAllowed(share)) {
12699
permissionName = share.isFolder() ? R.string.link_share_allow_upload_and_editing : R.string.link_share_editing;
127100
} else if (SharingMenuHelper.isReadOnly(share)) {
128101
permissionName = R.string.link_share_view_only;
129102
} else if (SharingMenuHelper.isFileDrop(share)) {
130103
permissionName = R.string.link_share_file_drop;
131-
} else if (SharingMenuHelper.isCreatePermission(share)) {
132-
permissionName = R.string.share_create_permission;
133-
} else if (SharingMenuHelper.isUpdatePermission(share)) {
134-
permissionName = R.string.share_edit_permission;
135-
} else if (SharingMenuHelper.isDeletePermission(share)) {
136-
permissionName = R.string.share_delete_permission;
137-
} else if (SharingMenuHelper.canReshare(share)) {
138-
permissionName = R.string.share_re_share_permission;
139104
} else {
140105
return 0;
141106
}

app/src/main/res/values/attrs.xml

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,17 +30,13 @@
3030
<item>@string/link_share_view_only</item>
3131
<item>@string/link_share_allow_upload_and_editing</item>
3232
<item>@string/link_share_file_drop</item>
33-
<item>@string/share_create_permission</item>
34-
<item>@string/share_edit_permission</item>
35-
<item>@string/share_delete_permission</item>
36-
<item>@string/share_re_share_permission</item>
33+
<item>@string/share_custom_permission</item>
3734
</string-array>
3835

3936
<string-array name="file_share_permission_dialog_values" translatable="false">
4037
<item>@string/link_share_view_only</item>
4138
<item>@string/link_share_editing</item>
42-
<item>@string/share_edit_permission</item>
43-
<item>@string/share_re_share_permission</item>
39+
<item>@string/share_custom_permission</item>
4440
</string-array>
4541
<string-array name="sub_folder_rule_values" translatable="false">
4642
<item>@string/sub_folder_rule_month</item>

0 commit comments

Comments
 (0)