From fe83ba63896df7e7559e3868646ad406c8a95f00 Mon Sep 17 00:00:00 2001 From: alperozturk Date: Wed, 25 Jun 2025 14:37:38 +0200 Subject: [PATCH 1/5] fix Signed-off-by: alperozturk --- .../owncloud/notes/persistence/CapabilitiesClient.java | 4 ++++ .../owncloud/notes/persistence/NotesRepository.java | 10 ++++++++-- .../owncloud/notes/share/NoteShareActivity.java | 10 +++++++++- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/CapabilitiesClient.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/CapabilitiesClient.java index 8c0e93bce..bd3d66027 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/CapabilitiesClient.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/CapabilitiesClient.java @@ -43,6 +43,10 @@ public static Capabilities getCapabilities(@NonNull Context context, @NonNull Si } else { Log.w(TAG, "Response headers of capabilities are null"); } + + final var repository = NotesRepository.getInstance(context); + repository.insertCapabilities(capabilities); + return capabilities; } catch (RuntimeException e) { final var cause = e.getCause(); diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java index 7e00aec15..7002d812c 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java @@ -331,6 +331,10 @@ public void updateCapabilitiesETag(long id, String capabilitiesETag) { db.getAccountDao().updateCapabilitiesETag(id, capabilitiesETag); } + public void insertCapabilities(Capabilities capabilities) { + db.getCapabilitiesDao().insert(capabilities); + } + public void updateModified(long id, long modified) { db.getAccountDao().updateModified(id, modified); } @@ -339,7 +343,6 @@ public void updateDirectEditingAvailable(final long id, final boolean available) db.getAccountDao().updateDirectEditingAvailable(id, available); } - // Notes public LiveData getNoteById$(long id) { @@ -876,6 +879,9 @@ public synchronized void scheduleSync(@Nullable Account account, boolean onlyLoc if (isSyncPossible() && (!Boolean.TRUE.equals(syncActive.get(account.getId())) || onlyLocalChanges)) { syncActive.put(account.getId(), true); try { + final var ssoAccount = AccountImporter.getSingleSignOnAccount(context, account.getAccountName()); + CapabilitiesClient.getCapabilities(context,ssoAccount, null, ApiProvider.getInstance()); + Log.d(TAG, "... starting now"); final NotesServerSyncTask syncTask = new NotesServerSyncTask(context, this, account, onlyLocalChanges, apiProvider) { @Override @@ -920,7 +926,7 @@ void onPostExecute(SyncResultStatus status) { callbacksPull.put(account.getId(), new ArrayList<>()); } syncExecutor.submit(syncTask); - } catch (NextcloudFilesAppAccountNotFoundException e) { + } catch (Throwable e) { Log.e(TAG, "... Could not find " + SingleSignOnAccount.class.getSimpleName() + " for account name " + account.getAccountName()); e.printStackTrace(); } 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 e770719bd..f48af5fe4 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 @@ -19,6 +19,7 @@ import android.provider.ContactsContract; import android.text.InputType; import android.text.TextUtils; +import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.view.inputmethod.EditorInfo; @@ -149,9 +150,16 @@ private void initializeArguments() { executorService.submit(() -> { try { final var ssoAcc = SingleAccountHelper.getCurrentSingleSignOnAccount(NoteShareActivity.this); + Log.i(TAG, "SSOAccount created"); + repository = new ShareRepository(NoteShareActivity.this, ssoAcc); + Log.i(TAG, "ShareRepository is created"); + capabilities = repository.getCapabilities(); + Log.i(TAG, "Capabilities are fetched"); + repository.getSharesForNotesAndSaveShareEntities(); + Log.i(TAG, "Notes share entities are fetched"); runOnUiThread(() -> { binding.searchContainer.setVisibility(View.VISIBLE); @@ -171,7 +179,7 @@ private void initializeArguments() { binding.loadingLayout.setVisibility(View.GONE); }); } catch (Exception e) { - throw new RuntimeException(e); + Log.e(TAG, "Exception at NoteShareActivity.init: " + e); } }); } From 8d2ea9647332e1c93ba9dd7ae34c397f76b11372 Mon Sep 17 00:00:00 2001 From: alperozturk Date: Wed, 25 Jun 2025 14:40:12 +0200 Subject: [PATCH 2/5] fix agp Signed-off-by: alperozturk --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 9125a35f7..4dd4b3668 100644 --- a/build.gradle +++ b/build.gradle @@ -22,7 +22,7 @@ buildscript { google() } dependencies { - classpath 'com.android.tools.build:gradle:8.11.0' + classpath 'com.android.tools.build:gradle:8.10.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion" // NOTE: Do not place your application dependencies here; they belong From 08defb952387d85ad4b7af4f863824f9d7487971 Mon Sep 17 00:00:00 2001 From: alperozturk Date: Wed, 25 Jun 2025 14:52:31 +0200 Subject: [PATCH 3/5] update capabilities Signed-off-by: alperozturk --- .../owncloud/notes/main/MainActivity.java | 6 +++--- .../owncloud/notes/main/MainViewModel.java | 15 ++++++++++++--- .../notes/persistence/NotesRepository.java | 3 --- 3 files changed, 15 insertions(+), 9 deletions(-) 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 2d08ffc91..7d12bbe32 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 @@ -286,7 +286,7 @@ protected void onCreate(Bundle savedInstanceState) { .apply(RequestOptions.circleCropTransform()) .into(activityBinding.launchAccountSwitcher); - mainViewModel.synchronizeNotes(nextAccount, new IResponseCallback<>() { + mainViewModel.synchronizeNotes(this, nextAccount, new IResponseCallback<>() { @Override public void onSuccess(Void v) { Log.d(TAG, "Successfully synchronized notes for " + nextAccount.getAccountName()); @@ -376,7 +376,7 @@ protected void onResume() { try { // It is possible that after the deletion of the last account, this onResponse gets called before the ImportAccountActivity gets started. if (SingleAccountHelper.getCurrentSingleSignOnAccount(this) != null) { - mainViewModel.synchronizeNotes(currentAccount, new IResponseCallback<>() { + mainViewModel.synchronizeNotes(this, currentAccount, new IResponseCallback<>() { @Override public void onSuccess(Void v) { Log.d(TAG, "Successfully synchronized notes for " + currentAccount.getAccountName()); @@ -477,7 +477,7 @@ else if (dy < 0) final var syncLiveData = mainViewModel.getCurrentAccount(); final Observer syncObserver = currentAccount -> { syncLiveData.removeObservers(this); - mainViewModel.synchronizeCapabilitiesAndNotes(currentAccount, new IResponseCallback<>() { + mainViewModel.synchronizeCapabilitiesAndNotes(this, currentAccount, new IResponseCallback<>() { @Override public void onSuccess(Void v) { Log.d(TAG, "Successfully synchronized capabilities and notes for " + currentAccount.getAccountName()); 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 a6c15aca8..5a58e00e3 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 @@ -44,6 +44,7 @@ import com.nextcloud.android.sso.exceptions.NextcloudHttpRequestFailedException; import com.nextcloud.android.sso.exceptions.UnknownErrorException; import com.nextcloud.android.sso.helper.SingleAccountHelper; +import com.owncloud.android.lib.common.utils.Log_OC; import java.util.ArrayList; import java.util.Collection; @@ -379,13 +380,13 @@ private static List fromCategoriesWithNotesCount(@NonNull Contex return items; } - public void synchronizeCapabilitiesAndNotes(@NonNull Account localAccount, @NonNull IResponseCallback callback) { + public void synchronizeCapabilitiesAndNotes(Context context, @NonNull Account localAccount, @NonNull IResponseCallback callback) { Log.i(TAG, "[synchronizeCapabilitiesAndNotes] Synchronize capabilities for " + localAccount.getAccountName()); synchronizeCapabilities(localAccount, new IResponseCallback<>() { @Override public void onSuccess(Void v) { Log.i(TAG, "[synchronizeCapabilitiesAndNotes] Synchronize notes for " + localAccount.getAccountName()); - synchronizeNotes(localAccount, callback); + synchronizeNotes(context, localAccount, callback); } @Override @@ -442,7 +443,7 @@ public void synchronizeCapabilities(@NonNull Account localAccount, @NonNull IRes /** * Updates the network status if necessary and pulls the latest notes of the given {@param localAccount} */ - public void synchronizeNotes(@NonNull Account currentAccount, @NonNull IResponseCallback callback) { + public void synchronizeNotes(Context context, @NonNull Account currentAccount, @NonNull IResponseCallback callback) { executor.submit(() -> { Log.v(TAG, "[synchronize] - currentAccount: " + currentAccount.getAccountName()); if (!repo.isSyncPossible()) { @@ -450,6 +451,14 @@ public void synchronizeNotes(@NonNull Account currentAccount, @NonNull IResponse } if (repo.isSyncPossible()) { repo.scheduleSync(currentAccount, false); + + try { + final var ssoAccount = AccountImporter.getSingleSignOnAccount(context, currentAccount.getAccountName()); + CapabilitiesClient.getCapabilities(context, ssoAccount, null, ApiProvider.getInstance()); + } catch (Throwable t) { + Log_OC.e(TAG, t.getMessage()); + } + callback.onSuccess(null); } else { // Sync is not possible if (repo.isNetworkConnected() && repo.isSyncOnlyOnWifi()) { diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java index 7002d812c..2009702ca 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java @@ -879,9 +879,6 @@ public synchronized void scheduleSync(@Nullable Account account, boolean onlyLoc if (isSyncPossible() && (!Boolean.TRUE.equals(syncActive.get(account.getId())) || onlyLocalChanges)) { syncActive.put(account.getId(), true); try { - final var ssoAccount = AccountImporter.getSingleSignOnAccount(context, account.getAccountName()); - CapabilitiesClient.getCapabilities(context,ssoAccount, null, ApiProvider.getInstance()); - Log.d(TAG, "... starting now"); final NotesServerSyncTask syncTask = new NotesServerSyncTask(context, this, account, onlyLocalChanges, apiProvider) { @Override From 95aeee103d45b39db4127cc2b507dcb6ebd3e6f0 Mon Sep 17 00:00:00 2001 From: alperozturk Date: Wed, 25 Jun 2025 14:53:53 +0200 Subject: [PATCH 4/5] fix imports Signed-off-by: alperozturk --- .../niedermann/owncloud/notes/main/MainActivity.java | 1 - .../niedermann/owncloud/notes/main/MainViewModel.java | 2 +- .../owncloud/notes/share/NoteShareActivity.java | 10 +--------- 3 files changed, 2 insertions(+), 11 deletions(-) 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 7d12bbe32..c94f2ba44 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 @@ -99,7 +99,6 @@ import it.niedermann.owncloud.notes.persistence.CapabilitiesWorker; import it.niedermann.owncloud.notes.persistence.entity.Account; import it.niedermann.owncloud.notes.persistence.entity.Note; -import it.niedermann.owncloud.notes.share.helper.AvatarLoader; import it.niedermann.owncloud.notes.shared.model.CategorySortingMethod; import it.niedermann.owncloud.notes.shared.model.IResponseCallback; import it.niedermann.owncloud.notes.shared.model.NavigationCategory; 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 5a58e00e3..a40a6f715 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 @@ -15,8 +15,8 @@ import static it.niedermann.owncloud.notes.main.slots.SlotterUtil.fillListByCategory; import static it.niedermann.owncloud.notes.main.slots.SlotterUtil.fillListByInitials; import static it.niedermann.owncloud.notes.main.slots.SlotterUtil.fillListByTime; -import static it.niedermann.owncloud.notes.shared.model.CategorySortingMethod.SORT_MODIFIED_DESC; import static it.niedermann.owncloud.notes.shared.model.CategorySortingMethod.SORT_LEXICOGRAPHICAL_DESC; +import static it.niedermann.owncloud.notes.shared.model.CategorySortingMethod.SORT_MODIFIED_DESC; import static it.niedermann.owncloud.notes.shared.model.ENavigationCategoryType.DEFAULT_CATEGORY; import static it.niedermann.owncloud.notes.shared.model.ENavigationCategoryType.FAVORITES; import static it.niedermann.owncloud.notes.shared.model.ENavigationCategoryType.RECENT; 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 f48af5fe4..14206421c 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 @@ -19,7 +19,6 @@ import android.provider.ContactsContract; import android.text.InputType; import android.text.TextUtils; -import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.view.inputmethod.EditorInfo; @@ -150,16 +149,9 @@ private void initializeArguments() { executorService.submit(() -> { try { final var ssoAcc = SingleAccountHelper.getCurrentSingleSignOnAccount(NoteShareActivity.this); - Log.i(TAG, "SSOAccount created"); - repository = new ShareRepository(NoteShareActivity.this, ssoAcc); - Log.i(TAG, "ShareRepository is created"); - capabilities = repository.getCapabilities(); - Log.i(TAG, "Capabilities are fetched"); - repository.getSharesForNotesAndSaveShareEntities(); - Log.i(TAG, "Notes share entities are fetched"); runOnUiThread(() -> { binding.searchContainer.setVisibility(View.VISIBLE); @@ -179,7 +171,7 @@ private void initializeArguments() { binding.loadingLayout.setVisibility(View.GONE); }); } catch (Exception e) { - Log.e(TAG, "Exception at NoteShareActivity.init: " + e); + Log_OC.e(TAG, "Exception at NoteShareActivity.init: " + e); } }); } From c3ba70c9199cbecbab84081985d55bac7a8352cd Mon Sep 17 00:00:00 2001 From: alperozturk Date: Wed, 25 Jun 2025 14:54:33 +0200 Subject: [PATCH 5/5] revert Signed-off-by: alperozturk --- .../niedermann/owncloud/notes/persistence/NotesRepository.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java index 2009702ca..172ebc5f9 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java @@ -923,7 +923,7 @@ void onPostExecute(SyncResultStatus status) { callbacksPull.put(account.getId(), new ArrayList<>()); } syncExecutor.submit(syncTask); - } catch (Throwable e) { + } catch (NextcloudFilesAppAccountNotFoundException e) { Log.e(TAG, "... Could not find " + SingleSignOnAccount.class.getSimpleName() + " for account name " + account.getAccountName()); e.printStackTrace(); }