diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/Application.java b/app/src/main/java/it/niedermann/nextcloud/deck/Application.java index 6fbf7c8a2..7531b065c 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/Application.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/Application.java @@ -1,5 +1,6 @@ package it.niedermann.nextcloud.deck; +import android.annotation.SuppressLint; import android.content.Context; import android.content.SharedPreferences; import android.graphics.Color; @@ -98,10 +99,33 @@ public static void saveBrandColors(@NonNull Context context, @ColorInt int mainC editor.apply(); } + @SuppressLint("ApplySharedPref") + public static void saveBrandColorsSynchronously(@NonNull Context context, @ColorInt int mainColor, @ColorInt int textColor) { + if (isBrandingEnabled(context) && context instanceof BrandedActivity) { + final BrandedActivity activity = (BrandedActivity) context; + activity.applyBrand(mainColor, textColor); + BrandedActivity.applyBrandToStatusbar(activity.getWindow(), mainColor, textColor); + } + SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(context).edit(); + DeckLog.log("--- Write: shared_preference_theme_main" + " | " + mainColor); + DeckLog.log("--- Write: shared_preference_theme_text" + " | " + textColor); + editor.putInt(context.getString(R.string.shared_preference_theme_main), mainColor); + editor.putInt(context.getString(R.string.shared_preference_theme_text), textColor); + editor.commit(); + } + // -------------------------------------- // Current account / board / stack states // -------------------------------------- + @SuppressLint("ApplySharedPref") + public static void saveCurrentAccountIdSynchronously(@NonNull Context context, long accountId) { + SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(context).edit(); + DeckLog.log("--- Write: shared_preference_last_account" + " | " + accountId); + editor.putLong(context.getString(R.string.shared_preference_last_account), accountId); + editor.commit(); + } + public static void saveCurrentAccountId(@NonNull Context context, long accountId) { SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(context).edit(); DeckLog.log("--- Write: shared_preference_last_account" + " | " + accountId); @@ -116,6 +140,14 @@ public static long readCurrentAccountId(@NonNull Context context) { return accountId; } + @SuppressLint("ApplySharedPref") + public static void saveCurrentBoardIdSynchronously(@NonNull Context context, long accountId, long boardId) { + SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(context).edit(); + DeckLog.log("--- Write: shared_preference_last_board_for_account_" + accountId + " | " + boardId); + editor.putLong(context.getString(R.string.shared_preference_last_board_for_account_) + accountId, boardId); + editor.commit(); + } + public static void saveCurrentBoardId(@NonNull Context context, long accountId, long boardId) { SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(context).edit(); DeckLog.log("--- Write: shared_preference_last_board_for_account_" + accountId + " | " + boardId); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/openlink/OpenLinkActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/openlink/OpenLinkActivity.java index 37b3de284..83da76777 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/openlink/OpenLinkActivity.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/openlink/OpenLinkActivity.java @@ -72,7 +72,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { }); } else { DeckLog.info("uri does not have userinfo. Looking for accounts on host " + uri.getHost()); - syncManager.readAccountsForHostWithReadAccessToBoard(uri.getHost(), boardRemoteId).observe(this, (accounts) -> { + observeOnce(syncManager.readAccountsForHostWithReadAccessToBoard(uri.getHost(), boardRemoteId), this, (accounts) -> { if (accounts.size() == 0) { DeckLog.info("found no account on host with read access to this board"); openInBrowser(); @@ -97,17 +97,19 @@ public void applyBrand(int mainColor, int textColor) { @UiThread private void launchMainActivity(@NonNull Account account, Long boardRemoteId) { + SingleAccountHelper.setCurrentAccount(this, account.getName()); + Application.saveCurrentAccountIdSynchronously(this, account.getId()); + try { + Application.saveBrandColorsSynchronously(this, Color.parseColor(account.getColor()), Color.parseColor(account.getTextColor())); + } catch (Throwable t) { + DeckLog.logError(t); + } + syncManager = new SyncManager(this); observeOnce(syncManager.getBoard(account.getId(), boardRemoteId), this, (board) -> { - try { - Application.saveBrandColors(this, Color.parseColor(account.getColor()), Color.parseColor(account.getTextColor())); - } catch (Throwable t) { - DeckLog.logError(t); - } - Application.saveCurrentBoardId(this, account.getId(), board.getLocalId()); - SingleAccountHelper.setCurrentAccount(this, account.getName()); + Application.saveCurrentBoardIdSynchronously(this, account.getId(), board.getLocalId()); DeckLog.info("starting " + MainActivity.class.getSimpleName() + " with [" + account + ", " + board.getLocalId() + "]"); Intent intent = new Intent(this, MainActivity.class) - .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); + .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); finish(); });