From e8e691b746b2c8e4b6573c6407d6caec09a69db1 Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Wed, 19 Aug 2020 13:28:03 +0100 Subject: [PATCH] Avoid adding setup toast in the middle of setup This improves the experience of going through secret storage setup / reset flows by avoiding intermittent toasts that appear and disappear in the middle of the operation. --- src/CrossSigningManager.js | 11 +++++++++++ src/DeviceListener.ts | 6 +++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/CrossSigningManager.js b/src/CrossSigningManager.js index 46f0284776..da09a436e9 100644 --- a/src/CrossSigningManager.js +++ b/src/CrossSigningManager.js @@ -35,6 +35,17 @@ function isCachingAllowed() { return secretStorageBeingAccessed; } +/** + * This can be used by other components to check if secret storage access is in + * progress, so that we can e.g. avoid intermittently showing toasts during + * secret storage setup. + * + * @returns {bool} + */ +export function isSecretStorageBeingAccessed() { + return secretStorageBeingAccessed; +} + export class AccessCancelledError extends Error { constructor() { super("Secret storage access canceled"); diff --git a/src/DeviceListener.ts b/src/DeviceListener.ts index a37521118f..aa9580834f 100644 --- a/src/DeviceListener.ts +++ b/src/DeviceListener.ts @@ -28,7 +28,8 @@ import { hideToast as hideUnverifiedSessionsToast, showToast as showUnverifiedSessionsToast, } from "./toasts/UnverifiedSessionToast"; -import {privateShouldBeEncrypted} from "./createRoom"; +import { privateShouldBeEncrypted } from "./createRoom"; +import { isSecretStorageBeingAccessed } from "./CrossSigningManager"; const KEY_BACKUP_POLL_INTERVAL = 5 * 60 * 1000; @@ -170,6 +171,9 @@ export default class DeviceListener { } private shouldShowSetupEncryptionToast() { + // If we're in the middle of a secret storage operation, we're likely + // modifying the state involved here, so don't add new toasts to setup. + if (isSecretStorageBeingAccessed()) return false; // In a default configuration, show the toasts. If the well-known config causes e2ee default to be false // then do not show the toasts until user is in at least one encrypted room. if (privateShouldBeEncrypted()) return true;