diff --git a/app/src/main/java/org/mozilla/fenix/home/HomeMenu.kt b/app/src/main/java/org/mozilla/fenix/home/HomeMenu.kt index 19581bbaea..d58cd7a931 100644 --- a/app/src/main/java/org/mozilla/fenix/home/HomeMenu.kt +++ b/app/src/main/java/org/mozilla/fenix/home/HomeMenu.kt @@ -121,7 +121,16 @@ class HomeMenu( onItemTapped.invoke(Item.Help) } + // Only query account manager if it has been initialized. + // We don't want to cause its initialization just for this check. + val accountAuthItem = if (context.components.backgroundServices.accountManagerAvailableQueue.isReady()) { + if (context.components.backgroundServices.accountManager.accountNeedsReauth()) reconnectToSyncItem else null + } else { + null + } + listOfNotNull( + accountAuthItem, whatsNewItem, BrowserMenuDivider(), BrowserMenuCategory( diff --git a/app/src/main/java/org/mozilla/fenix/utils/RunWhenReadyQueue.kt b/app/src/main/java/org/mozilla/fenix/utils/RunWhenReadyQueue.kt index 2a820a652f..9b7167d1ca 100644 --- a/app/src/main/java/org/mozilla/fenix/utils/RunWhenReadyQueue.kt +++ b/app/src/main/java/org/mozilla/fenix/utils/RunWhenReadyQueue.kt @@ -19,6 +19,13 @@ class RunWhenReadyQueue { private val tasks = CopyOnWriteArrayList<() -> Unit>() private val isReady = AtomicBoolean(false) + /** + * Was this queue ever marked as 'ready' via a call to [ready]? + * + * @return Boolean value indicating if this queue is 'ready'. + */ + fun isReady(): Boolean = isReady.get() + /** * Runs the [task] if this queue is marked as ready, or queues it for later execution. * Task will be executed on the main thread.