Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/stefan-niedermann/nextcloud-deck.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Niedermann <info@niedermann.it>2021-06-17 20:40:58 +0300
committerStefan Niedermann <info@niedermann.it>2021-06-17 20:40:58 +0300
commit398e1d64aed19ae9e04975ede2c3b1c86e3c47e5 (patch)
tree57ad7a443e9202ef63ee0e24ae8fb9363933d150 /app/src/main
parent714eee03090deb490c797e1a70293e0cb54c92a3 (diff)
Use IResponseCallback in favor of observeOnce for importing accounts
Signed-off-by: Stefan Niedermann <info@niedermann.it>
Diffstat (limited to 'app/src/main')
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java30
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java33
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/util/LiveDataHelper.java29
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/ImportAccountActivity.java38
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java23
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/MainViewModel.java5
6 files changed, 63 insertions, 95 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java
index 89aec9beb..f9723fa27 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java
@@ -317,8 +317,18 @@ public class SyncManager {
}
@AnyThread
- public WrappedLiveData<Account> createAccount(@NonNull Account account) {
- return dataBaseAdapter.createAccount(account);
+ public void createAccount(@NonNull Account account, @NonNull IResponseCallback<Account> callback) {
+ executor.submit(() -> {
+ try {
+ final Account createdAccount = dataBaseAdapter.createAccountDirectly(account);
+ if (createdAccount == null) {
+ throw new RuntimeException("Created account is null. Source: " + account);
+ }
+ callback.onResponse(createdAccount);
+ } catch (Throwable t) {
+ callback.onError(t);
+ }
+ });
}
public boolean hasInternetConnection() {
@@ -510,12 +520,12 @@ public class SyncManager {
@AnyThread
public void createBoard(long accountId, @NonNull Board board, @NonNull IResponseCallback<FullBoard> callback) {
executor.submit(() -> {
- Account account = dataBaseAdapter.getAccountByIdDirectly(accountId);
- User owner = dataBaseAdapter.getUserByUidDirectly(accountId, account.getUserName());
+ final Account account = dataBaseAdapter.getAccountByIdDirectly(accountId);
+ final User owner = dataBaseAdapter.getUserByUidDirectly(accountId, account.getUserName());
if (owner == null) {
- callback.onError(new Exception("Owner is null. This can be the case if the Deck app has never before been opened in the webinterface"));
+ callback.onError(new IllegalStateException("Owner is null. This can be the case if the Deck app has never before been opened in the webinterface"));
} else {
- FullBoard fullBoard = new FullBoard();
+ final FullBoard fullBoard = new FullBoard();
board.setOwnerId(owner.getLocalId());
fullBoard.setOwner(owner);
fullBoard.setBoard(board);
@@ -720,10 +730,10 @@ public class SyncManager {
@AnyThread
public void deleteComment(long accountId, long localCardId, long localCommentId, @NonNull IResponseCallback<Void> callback) {
executor.submit(() -> {
- Account account = dataBaseAdapter.getAccountByIdDirectly(accountId);
- Card card = dataBaseAdapter.getCardByLocalIdDirectly(accountId, localCardId);
- DeckComment entity = dataBaseAdapter.getCommentByLocalIdDirectly(accountId, localCommentId);
- OcsComment commentEntity = OcsComment.of(entity);
+ final Account account = dataBaseAdapter.getAccountByIdDirectly(accountId);
+ final Card card = dataBaseAdapter.getCardByLocalIdDirectly(accountId, localCardId);
+ final DeckComment entity = dataBaseAdapter.getCommentByLocalIdDirectly(accountId, localCommentId);
+ final OcsComment commentEntity = OcsComment.of(entity);
new DataPropagationHelper(serverAdapter, dataBaseAdapter, executor).deleteEntity(new DeckCommentsDataProvider(null, card),
commentEntity, ResponseCallback.from(account, callback));
});
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java
index eb720e345..703d50730 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java
@@ -75,7 +75,6 @@ import it.niedermann.nextcloud.deck.model.widget.filter.FilterWidgetUser;
import it.niedermann.nextcloud.deck.model.widget.filter.dto.FilterWidgetCard;
import it.niedermann.nextcloud.deck.model.widget.singlecard.SingleCardWidgetModel;
import it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.LiveDataHelper;
-import it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.WrappedLiveData;
import it.niedermann.nextcloud.deck.ui.upcomingcards.UpcomingCardsAdapterItem;
import it.niedermann.nextcloud.deck.ui.widget.singlecard.SingleCardWidget;
@@ -514,20 +513,19 @@ public class DataBaseAdapter {
db.getLabelDao().delete(label);
}
- public WrappedLiveData<Account> createAccount(Account account) {
- return LiveDataHelper.wrapInLiveData(() -> {
- final long id = db.getAccountDao().insert(account);
+ @WorkerThread
+ public Account createAccountDirectly(@NonNull Account account) {
+ final long id = db.getAccountDao().insert(account);
- widgetNotifierExecutor.submit(() -> {
- DeckLog.verbose("Adding new created", Account.class.getSimpleName(), " with ", id, " to all instances of ", EWidgetType.UPCOMING_WIDGET.name());
- for (FilterWidget widget : getFilterWidgetsByType(EWidgetType.UPCOMING_WIDGET)) {
- widget.getAccounts().add(new FilterWidgetAccount(id, false));
- updateFilterWidgetDirectly(widget);
- }
- notifyFilterWidgetsAboutChangedEntity(FilterWidget.EChangedEntityType.ACCOUNT, id);
- });
- return readAccountDirectly(id);
+ widgetNotifierExecutor.submit(() -> {
+ DeckLog.verbose("Adding new created", Account.class.getSimpleName(), " with ", id, " to all instances of ", EWidgetType.UPCOMING_WIDGET.name());
+ for (FilterWidget widget : getFilterWidgetsByType(EWidgetType.UPCOMING_WIDGET)) {
+ widget.getAccounts().add(new FilterWidgetAccount(id, false));
+ updateFilterWidgetDirectly(widget);
+ }
+ notifyFilterWidgetsAboutChangedEntity(FilterWidget.EChangedEntityType.ACCOUNT, id);
});
+ return readAccountDirectly(id);
}
public void deleteAccount(long id) {
@@ -588,15 +586,6 @@ public class DataBaseAdapter {
return distinctUntilChanged(db.getBoardDao().getBoardsWithEditPermissionsForAccount(accountId));
}
- public WrappedLiveData<Board> createBoard(long accountId, @NonNull Board board) {
- return LiveDataHelper.wrapInLiveData(() -> {
- board.setAccountId(accountId);
- final long id = db.getBoardDao().insert(board);
- notifyFilterWidgetsAboutChangedEntity(FilterWidget.EChangedEntityType.BOARD, id);
- return db.getBoardDao().getBoardByLocalIdDirectly(id);
- });
- }
-
@WorkerThread
public long createBoardDirectly(long accountId, @NonNull Board board) {
board.setAccountId(accountId);
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/util/LiveDataHelper.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/util/LiveDataHelper.java
index 059ed5e6b..397d1339f 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/util/LiveDataHelper.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/util/LiveDataHelper.java
@@ -65,20 +65,6 @@ public class LiveDataHelper {
liveData.observe(owner, tempObserver);
}
- public static <T> WrappedLiveData<T> wrapInLiveData(final LiveDataWrapper<T> liveDataWrapper) {
- final WrappedLiveData<T> liveData = new WrappedLiveData<>();
-
- executor.submit(() -> {
- try {
- liveDataWrapper.postResult(liveData);
- } catch (Throwable t) {
- liveData.postError(t);
- }
- });
-
- return liveData;
- }
-
public interface DataChangeProcessor<T> {
void onDataChanged(T data);
}
@@ -86,19 +72,4 @@ public class LiveDataHelper {
public interface DataTransformator<I, O> {
O transform(I data);
}
-
- public interface LiveDataWrapper<T> {
- T getData();
-
- default void postResult(WrappedLiveData<T> liveData) {
- liveData.setError(null);
- T data = null;
- try {
- data = getData();
- } catch (RuntimeException e) {
- liveData.setError(e);
- }
- liveData.postValue(data);
- }
- }
} \ No newline at end of file
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/ImportAccountActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/ImportAccountActivity.java
index 39fa8dead..85b1d6b1e 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/ImportAccountActivity.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/ImportAccountActivity.java
@@ -24,6 +24,7 @@ import com.nextcloud.android.sso.ui.UiExceptionManager;
import it.niedermann.nextcloud.deck.DeckLog;
import it.niedermann.nextcloud.deck.R;
+import it.niedermann.nextcloud.deck.api.IResponseCallback;
import it.niedermann.nextcloud.deck.api.ResponseCallback;
import it.niedermann.nextcloud.deck.databinding.ActivityImportAccountBinding;
import it.niedermann.nextcloud.deck.exceptions.OfflineException;
@@ -31,7 +32,6 @@ import it.niedermann.nextcloud.deck.model.Account;
import it.niedermann.nextcloud.deck.model.ocs.Capabilities;
import it.niedermann.nextcloud.deck.persistence.sync.SyncManager;
import it.niedermann.nextcloud.deck.persistence.sync.SyncWorker;
-import it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.WrappedLiveData;
import it.niedermann.nextcloud.deck.ui.exception.ExceptionDialogFragment;
import it.niedermann.nextcloud.deck.ui.exception.ExceptionHandler;
@@ -114,20 +114,12 @@ public class ImportAccountActivity extends AppCompatActivity {
SingleAccountHelper.setCurrentAccount(getApplicationContext(), account.name);
SyncManager syncManager = new SyncManager(ImportAccountActivity.this);
- final WrappedLiveData<Account> accountLiveData = syncManager.createAccount(new Account(account.name, account.userId, account.url));
- accountLiveData.observe(ImportAccountActivity.this, (Account createdAccount) -> {
- if (accountLiveData.hasError()) {
- final Throwable error = accountLiveData.getError();
- if (error instanceof SQLiteConstraintException) {
- DeckLog.error("Account has already been added, this should not be the case");
- }
- assert error != null;
- setStatusText(error.getMessage());
- runOnUiThread(() -> ExceptionDialogFragment.newInstance(error, createdAccount).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName()));
- restoreWifiPref();
- } else {
+ final Account accountToCreate = new Account(account.name, account.userId, account.url);
+ syncManager.createAccount(accountToCreate, new IResponseCallback<Account>() {
+ @Override
+ public void onResponse(Account createdAccount) {
// Remember last account - THIS HAS TO BE DONE SYNCHRONOUSLY
- SharedPreferences.Editor editor = sharedPreferences.edit();
+ final SharedPreferences.Editor editor = sharedPreferences.edit();
DeckLog.log("--- Write: shared_preference_last_account | ", createdAccount.getId());
editor.putLong(sharedPreferenceLastAccount, createdAccount.getId());
editor.commit();
@@ -157,11 +149,8 @@ public class ImportAccountActivity extends AppCompatActivity {
} else {
setStatusText(getString(R.string.deck_outdated_please_update, response.getDeckVersion().getOriginalVersion()));
runOnUiThread(() -> {
- binding.updateDeckButton.setOnClickListener((v) -> {
- Intent openURL = new Intent(Intent.ACTION_VIEW);
- openURL.setData(Uri.parse(createdAccount.getUrl() + urlFragmentUpdateDeck));
- startActivity(openURL);
- });
+ binding.updateDeckButton.setOnClickListener((v) -> startActivity(new Intent(Intent.ACTION_VIEW)
+ .setData(Uri.parse(createdAccount.getUrl() + urlFragmentUpdateDeck))));
binding.updateDeckButton.setVisibility(View.VISIBLE);
});
rollbackAccountCreation(syncManager, createdAccount.getId());
@@ -185,6 +174,17 @@ public class ImportAccountActivity extends AppCompatActivity {
}
});
}
+
+ @Override
+ public void onError(Throwable error) {
+ IResponseCallback.super.onError(error);
+ if (error instanceof SQLiteConstraintException) {
+ DeckLog.error("Account has already been added, this should not be the case");
+ }
+ setStatusText(error.getMessage());
+ runOnUiThread(() -> ExceptionDialogFragment.newInstance(error, accountToCreate).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName()));
+ restoreWifiPref();
+ }
});
}
});
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java
index 9b9978f7d..b65069d69 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java
@@ -77,7 +77,6 @@ import it.niedermann.nextcloud.deck.model.internal.FilterInformation;
import it.niedermann.nextcloud.deck.model.ocs.Capabilities;
import it.niedermann.nextcloud.deck.model.ocs.Version;
import it.niedermann.nextcloud.deck.persistence.sync.SyncManager;
-import it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.WrappedLiveData;
import it.niedermann.nextcloud.deck.ui.about.AboutActivity;
import it.niedermann.nextcloud.deck.ui.accountswitcher.AccountSwitcherDialog;
import it.niedermann.nextcloud.deck.ui.archivedboards.ArchivedBoardsActvitiy;
@@ -834,14 +833,11 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen
default:
try {
AccountImporter.onActivityResult(requestCode, resultCode, data, this, (account) -> {
- final WrappedLiveData<Account> accountLiveData = mainViewModel.createAccount(new Account(account.name, account.userId, account.url));
- accountLiveData.observe(this, (createdAccount) -> {
- if (!accountLiveData.hasError()) {
- if (createdAccount == null) {
- throw new IllegalStateException("Created account must not be null");
- }
-
- final SyncManager importSyncManager = new SyncManager(this, account.name);
+ final Account accountToCreate = new Account(account.name, account.userId, account.url);
+ mainViewModel.createAccount(accountToCreate, new IResponseCallback<Account>() {
+ @Override
+ public void onResponse(Account createdAccount) {
+ final SyncManager importSyncManager = new SyncManager(MainActivity.this, account.name);
importSyncManager.refreshCapabilities(new ResponseCallback<Capabilities>(createdAccount) {
@SuppressLint("StringFormatInvalid")
@Override
@@ -915,13 +911,16 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen
}
}
});
- } else {
- final Throwable error = accountLiveData.getError();
+ }
+
+ @Override
+ public void onError(Throwable error) {
+ IResponseCallback.super.onError(error);
if (error instanceof SQLiteConstraintException) {
DeckLog.warn("Account already added");
BrandedSnackbar.make(binding.coordinatorLayout, R.string.account_already_added, Snackbar.LENGTH_LONG).show();
} else {
- ExceptionDialogFragment.newInstance(error, createdAccount).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName());
+ ExceptionDialogFragment.newInstance(error, accountToCreate).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName());
}
}
});
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainViewModel.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainViewModel.java
index 44667e4ad..ffa220d94 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainViewModel.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainViewModel.java
@@ -32,7 +32,6 @@ import it.niedermann.nextcloud.deck.model.internal.FilterInformation;
import it.niedermann.nextcloud.deck.model.ocs.Capabilities;
import it.niedermann.nextcloud.deck.model.ocs.comment.DeckComment;
import it.niedermann.nextcloud.deck.persistence.sync.SyncManager;
-import it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.WrappedLiveData;
@SuppressWarnings("WeakerAccess")
public class MainViewModel extends AndroidViewModel {
@@ -130,8 +129,8 @@ public class MainViewModel extends AndroidViewModel {
return syncManager.hasAccounts();
}
- public WrappedLiveData<Account> createAccount(@NonNull Account accout) {
- return syncManager.createAccount(accout);
+ public void createAccount(@NonNull Account account, @NonNull IResponseCallback<Account> callback) {
+ syncManager.createAccount(account, callback);
}
public void deleteAccount(long id) {