From 2325e11ee20c6c5c15b148eae163b1f5d3acc491 Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Fri, 13 Nov 2026 15:15:01 +0100 Subject: [PATCH 1/2] feat(account): unify Signed-off-by: alperozturk96 --- .../notes/main/EcosystemAccountMatcher.kt | 25 +++++++++++++++++++ .../owncloud/notes/main/MainActivity.java | 2 +- .../owncloud/notes/main/MainViewModel.java | 4 --- .../owncloud/notes/share/NoteShareFragment.kt | 9 ++----- .../helper/UsersAndGroupsSearchProvider.java | 4 +-- build.gradle | 2 +- gradle/verification-metadata.xml | 24 ++++++++++++++++++ 7 files changed, 55 insertions(+), 15 deletions(-) create mode 100644 app/src/main/java/it/niedermann/owncloud/notes/main/EcosystemAccountMatcher.kt diff --git a/app/src/main/java/it/niedermann/owncloud/notes/main/EcosystemAccountMatcher.kt b/app/src/main/java/it/niedermann/owncloud/notes/main/EcosystemAccountMatcher.kt new file mode 100644 index 000000000..daaaa9fa1 --- /dev/null +++ b/app/src/main/java/it/niedermann/owncloud/notes/main/EcosystemAccountMatcher.kt @@ -0,0 +1,25 @@ +/* + * Nextcloud - Android Client + * + * SPDX-FileCopyrightText: 2026 Alper Ozturk + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +package it.niedermann.owncloud.notes.main + +import com.nextcloud.android.common.core.utils.AccountNameUtils +import it.niedermann.owncloud.notes.persistence.entity.Account + +object EcosystemAccountMatcher { + + @JvmStatic + fun find(accounts: List, receivedAccountName: String): Account? = + accounts.firstOrNull { it.accountName == receivedAccountName } + ?: accounts.firstOrNull { it.isSameAccount(receivedAccountName) } + + private fun Account.isSameAccount(receivedAccountName: String): Boolean { + val receivedUser = AccountNameUtils.getUserPart(receivedAccountName) + val isSameUser = receivedUser.equals(AccountNameUtils.getUserPart(accountName), ignoreCase = true) || + receivedUser.equals(userName, ignoreCase = true) + return isSameUser && AccountNameUtils.isSameServer(url, AccountNameUtils.getServerPart(receivedAccountName)) + } +} diff --git a/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java index 11c2b4673..5eb96c7aa 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java @@ -498,7 +498,7 @@ private void handleEcosystemIntent(Intent intent) { ecosystemManager.receiveAccount(intent, new AccountReceiverCallback() { @Override public void onAccountReceived(@NotNull String accountName) { - final var account = mainViewModel.getAccountByName(accountName); + final var account = EcosystemAccountMatcher.find(mainViewModel.getAccounts(), accountName); if (account != null) { onAccountChosen(account); } else { diff --git a/app/src/main/java/it/niedermann/owncloud/notes/main/MainViewModel.java b/app/src/main/java/it/niedermann/owncloud/notes/main/MainViewModel.java index 771cb42a4..bae942e5a 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/main/MainViewModel.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/main/MainViewModel.java @@ -126,10 +126,6 @@ public LiveData getCurrentAccount() { return distinctUntilChanged(currentAccount); } - public Account getAccountByName(String accountName) { - return repo.getAccountByName(accountName); - } - public void postCurrentAccount(@NonNull Account account) { state.set(KEY_CURRENT_ACCOUNT, account); BrandingUtil.saveBrandColor(getApplication(), account.getColor()); diff --git a/app/src/main/java/it/niedermann/owncloud/notes/share/NoteShareFragment.kt b/app/src/main/java/it/niedermann/owncloud/notes/share/NoteShareFragment.kt index 706f0193a..29c0e9e6a 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/share/NoteShareFragment.kt +++ b/app/src/main/java/it/niedermann/owncloud/notes/share/NoteShareFragment.kt @@ -320,13 +320,8 @@ class NoteShareFragment : BrandedFragment(), ShareeListAdapterListener, NoteShar return true } - val share = shares[0] - val ownerDisplayName = share.ownerDisplayName - return TextUtils.isEmpty(ownerDisplayName) || account!!.accountName - .split("@".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()[0].equals( - ownerDisplayName, - ignoreCase = true - ) + val ownerId = shares[0].userId + return ownerId.isNullOrEmpty() || ownerId.equals(account!!.userName, ignoreCase = true) } private fun setShareWithYou() { diff --git a/app/src/main/java/it/niedermann/owncloud/notes/share/helper/UsersAndGroupsSearchProvider.java b/app/src/main/java/it/niedermann/owncloud/notes/share/helper/UsersAndGroupsSearchProvider.java index 020ee4893..e622c6860 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/share/helper/UsersAndGroupsSearchProvider.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/share/helper/UsersAndGroupsSearchProvider.java @@ -23,6 +23,7 @@ import android.net.Uri; import android.provider.BaseColumns; +import com.nextcloud.android.common.core.utils.AccountNameUtils; import com.owncloud.android.lib.resources.shares.GetShareesRemoteOperation; import com.owncloud.android.lib.resources.shares.ShareType; import com.owncloud.android.lib.resources.users.Status; @@ -151,10 +152,9 @@ public Cursor searchForUsersOrGroups(String userQuery, boolean isFederationShare displayName = name; subline = context.getString(R.string.remote); } else { - String[] uriSplitted = shareWith.split("@"); displayName = name; subline = context.getString(R.string.share_known_remote_on_clarification, - uriSplitted[uriSplitted.length - 1]); + AccountNameUtils.getServerPart(shareWith)); } } break; diff --git a/build.gradle b/build.gradle index f4ee8a020..a0a0acce9 100644 --- a/build.gradle +++ b/build.gradle @@ -13,7 +13,7 @@ buildscript { kotlinVersion = '2.4.21' commonsVersion = '2.4.1' androidCommonsVersion = '1.1.1' - nextcloudAndroidCommonLib = "0.34.0" + nextcloudAndroidCommonLib = "580a84868ae2af10b2ace13dadc083f166047493" singleSignOnVersion = "1.3.5" } repositories { diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index dd469b5fe..0d3d0d891 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -14478,6 +14478,14 @@ + + + + + + + + @@ -14754,6 +14762,14 @@ + + + + + + + + @@ -15026,6 +15042,14 @@ + + + + + + + + From 36600da74c6e51607c71b44a42253808fb2a4521 Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Fri, 13 Nov 2026 15:17:25 +0100 Subject: [PATCH 2/2] fix threading Signed-off-by: alperozturk96 --- .../java/it/niedermann/owncloud/notes/main/MainActivity.java | 2 +- .../java/it/niedermann/owncloud/notes/main/MainViewModel.java | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java index 5eb96c7aa..729b69db6 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java @@ -498,7 +498,7 @@ private void handleEcosystemIntent(Intent intent) { ecosystemManager.receiveAccount(intent, new AccountReceiverCallback() { @Override public void onAccountReceived(@NotNull String accountName) { - final var account = EcosystemAccountMatcher.find(mainViewModel.getAccounts(), accountName); + final var account = mainViewModel.findEcosystemAccount(accountName); if (account != null) { onAccountChosen(account); } else { diff --git a/app/src/main/java/it/niedermann/owncloud/notes/main/MainViewModel.java b/app/src/main/java/it/niedermann/owncloud/notes/main/MainViewModel.java index bae942e5a..45db86949 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/main/MainViewModel.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/main/MainViewModel.java @@ -126,6 +126,10 @@ public LiveData getCurrentAccount() { return distinctUntilChanged(currentAccount); } + public Account findEcosystemAccount(String accountName) { + return EcosystemAccountMatcher.find(repo.getAccounts(), accountName); + } + public void postCurrentAccount(@NonNull Account account) { state.set(KEY_CURRENT_ACCOUNT, account); BrandingUtil.saveBrandColor(getApplication(), account.getColor());