/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ package com.facebook.react.bridge.queue import android.os.Looper import com.facebook.react.bridge.queue.MessageQueueThreadImpl.Companion.create import com.facebook.react.bridge.queue.MessageQueueThreadSpec.Companion.mainThreadSpec internal class ReactQueueConfigurationImpl private constructor( private val uiQueueThread: MessageQueueThreadImpl, private val nativeModulesQueueThread: MessageQueueThreadImpl, private val jsQueueThread: MessageQueueThreadImpl, ) : ReactQueueConfiguration { override fun getUIQueueThread(): MessageQueueThread = uiQueueThread override fun getNativeModulesQueueThread(): MessageQueueThread = nativeModulesQueueThread override fun getJSQueueThread(): MessageQueueThread = jsQueueThread /** * Should be called when the corresponding [com.facebook.react.bridge.CatalystInstance] is * destroyed so that we shut down the proper queue threads. */ override fun destroy() { if (nativeModulesQueueThread.looper != Looper.getMainLooper()) { nativeModulesQueueThread.quitSynchronous() } if (jsQueueThread.looper != Looper.getMainLooper()) { jsQueueThread.quitSynchronous() } } companion object { @JvmStatic fun create( spec: ReactQueueConfigurationSpec, exceptionHandler: QueueThreadExceptionHandler, ): ReactQueueConfigurationImpl { val uiThread = create(mainThreadSpec(), exceptionHandler) val jsThread = create(spec.jSQueueThreadSpec, exceptionHandler) val nativeModulesThread = create(spec.nativeModulesQueueThreadSpec, exceptionHandler) return ReactQueueConfigurationImpl(uiThread, nativeModulesThread, jsThread) } } }