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..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; @@ -286,7 +285,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 +375,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 +476,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..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; @@ -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/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..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 @@ -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) { 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..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 @@ -171,7 +171,7 @@ private void initializeArguments() { binding.loadingLayout.setVisibility(View.GONE); }); } catch (Exception e) { - throw new RuntimeException(e); + Log_OC.e(TAG, "Exception at NoteShareActivity.init: " + e); } }); } 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