diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/sync/ShareAPI.kt b/app/src/main/java/it/niedermann/owncloud/notes/persistence/sync/ShareAPI.kt index 69c7429ba..1b48d4f96 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/sync/ShareAPI.kt +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/sync/ShareAPI.kt @@ -67,6 +67,6 @@ interface ShareAPI { @GET("shares/?format=json") fun getShareFromNote( @Query("path") path: String, - @Query("shared_with_me") sharedWithMe: Boolean = true + @Query("shared_with_me") sharedWithMe: Boolean = false ): Call>> } diff --git a/app/src/main/java/it/niedermann/owncloud/notes/share/NoteShareActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/share/NoteShareActivity.java index 761280000..22d4bd0b9 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/share/NoteShareActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/share/NoteShareActivity.java @@ -355,11 +355,21 @@ private void setShareWithYou() { return; } - final var share = shares.get(0); + OCShare share = null; + for (OCShare s : shares) { + if (account.getAccountName().split("@")[0].equalsIgnoreCase(s.getShareWith())) { + share = s; + break; + } + } + if (share == null) { + return; + } + binding.sharedWithYouUsername.setText( String.format(getString(R.string.note_share_activity_shared_with_you), share.getOwnerDisplayName())); - AvatarLoader.INSTANCE.load(this, binding.sharedWithYouAvatar, account); + AvatarLoader.INSTANCE.load(this, binding.sharedWithYouAvatar, account, share.getUserId()); binding.sharedWithYouAvatar.setVisibility(View.VISIBLE); String description = share.getNote(); @@ -370,6 +380,8 @@ private void setShareWithYou() { } else { binding.sharedWithYouNoteContainer.setVisibility(View.GONE); } + + binding.sharedWithYouContainer.setVisibility(View.VISIBLE); } } @@ -538,10 +550,8 @@ private void populateSharesList(List targetList) { // Get shares from remote final var remoteShares = repository.getShareFromNote(note); - if (remoteShares != null) { - for (var entity : remoteShares) { - addSharesToList(entity.getId(), targetList); - } + for (var entity : remoteShares) { + addSharesToList(entity.getId(), targetList); } } diff --git a/app/src/main/java/it/niedermann/owncloud/notes/share/adapter/ShareeListAdapter.java b/app/src/main/java/it/niedermann/owncloud/notes/share/adapter/ShareeListAdapter.java index 3c45dbd63..021f9a738 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/share/adapter/ShareeListAdapter.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/share/adapter/ShareeListAdapter.java @@ -215,6 +215,11 @@ protected final void sortShares() { List users = new ArrayList<>(); for (OCShare share : shares) { + if (share.getShareWith().equalsIgnoreCase(account.getAccountName().split("@")[0])) { + // this is then an incoming share, shown via "shared with you" + continue; + } + if (share.getShareType() != null) { if (ShareType.PUBLIC_LINK == share.getShareType() || ShareType.EMAIL == share.getShareType()) { links.add(share); diff --git a/app/src/main/java/it/niedermann/owncloud/notes/share/adapter/holder/ShareViewHolder.java b/app/src/main/java/it/niedermann/owncloud/notes/share/adapter/holder/ShareViewHolder.java index afdfc217d..9e27e206d 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/share/adapter/holder/ShareViewHolder.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/share/adapter/holder/ShareViewHolder.java @@ -13,7 +13,6 @@ import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; import com.owncloud.android.lib.resources.shares.OCShare; @@ -78,7 +77,7 @@ public void bind(OCShare share, ShareeListAdapterListener listener) { binding.icon.setTag(share.getShareWith()); if (share.getSharedWithDisplayName() != null) { - AvatarLoader.INSTANCE.load(context, binding.icon, account, share.getSharedWithDisplayName()); + AvatarLoader.INSTANCE.load(context, binding.icon, account, share.getShareWith()); } // binding.icon.setOnClickListener(v -> listener.showProfileBottomSheet(user, share.getShareWith())); @@ -89,8 +88,9 @@ public void bind(OCShare share, ShareeListAdapterListener listener) { binding.name.setText(name); - if (accountUserName.equalsIgnoreCase(share.getShareWith()) || - accountUserName.equalsIgnoreCase(share.getUserId())) { + if (accountUserName.equalsIgnoreCase(share.getShareWith()) && accountUserName.equalsIgnoreCase(share.getUserId())) { + binding.overflowMenu.setVisibility(View.GONE); + } else { binding.overflowMenu.setVisibility(View.VISIBLE); String permissionName = SharingMenuHelper.getPermissionName(context, share); @@ -99,8 +99,6 @@ public void bind(OCShare share, ShareeListAdapterListener listener) { // bind listener to edit privileges binding.overflowMenu.setOnClickListener(v -> listener.showSharingMenuActionSheet(share)); binding.shareNameLayout.setOnClickListener(v -> listener.showPermissionsDialog(share)); - } else { - binding.overflowMenu.setVisibility(View.GONE); } } diff --git a/app/src/main/java/it/niedermann/owncloud/notes/share/repository/ShareRepository.kt b/app/src/main/java/it/niedermann/owncloud/notes/share/repository/ShareRepository.kt index f9be06f2e..3d12660a7 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/share/repository/ShareRepository.kt +++ b/app/src/main/java/it/niedermann/owncloud/notes/share/repository/ShareRepository.kt @@ -35,6 +35,7 @@ import it.niedermann.owncloud.notes.shared.util.StringConstants import it.niedermann.owncloud.notes.shared.util.extensions.getErrorMessage import it.niedermann.owncloud.notes.shared.util.extensions.toExpirationDateString import org.json.JSONObject +import retrofit2.Response import java.util.Date class ShareRepository(private val applicationContext: Context, private val account: SingleSignOnAccount) { @@ -58,13 +59,7 @@ class ShareRepository(private val applicationContext: Context, private val accou val notesPathResponseResult = getNotesPathResponseResult() ?: return null val notesPath = notesPathResponseResult.notesPath val notesSuffix = notesPathResponseResult.fileSuffix - return if (note.category.isEmpty()) { - StringConstants.PATH + notesPath + StringConstants.PATH + note.title + notesSuffix - } else { - StringConstants.PATH + notesPath + StringConstants.PATH + note.category + StringConstants.PATH + - note.title + - notesSuffix - } + return StringConstants.PATH + notesPath + StringConstants.PATH + note.category + StringConstants.PATH + note.title + notesSuffix } fun getShareEntitiesForSpecificNote(note: Note): List { @@ -286,25 +281,37 @@ class ShareRepository(private val applicationContext: Context, private val accou } } - fun getShareFromNote(note: Note): List? { + fun getShareFromNote(note: Note): List { val shareAPI = apiProvider.getShareAPI(applicationContext, account) - val path = getNotePath(note) ?: return null - val call = shareAPI.getShareFromNote(path) - val response = call.execute() + val path = getNotePath(note) ?: return emptyList() + + val callSharedWithMe = shareAPI.getShareFromNote(path, true) + var response = callSharedWithMe.execute() + val sharedWithMe = parseResponse(response) + + val callSharedWithOthers = shareAPI.getShareFromNote(path, false) + response = callSharedWithOthers.execute() + val sharedWithOthers = parseResponse(response) + sharedWithOthers.addAll(sharedWithMe) + + return sharedWithOthers + } + + private fun parseResponse(response: Response>>): MutableList { return try { if (response.isSuccessful) { val body = response.body() Log_OC.d(tag, "Response successful: $body") - body?.ocs?.data?.toOCShareList() + body?.ocs?.data?.toOCShareList()?.toMutableList() ?: mutableListOf() } else { val errorBody = response.errorBody()?.string() Log_OC.d(tag, "Response failed: $errorBody") - null + mutableListOf() } } catch (e: Exception) { Log_OC.d(tag, "Exception while getting share from note: ", e) - null + mutableListOf() } }