1 // Copyright 2015-present 650 Industries. All rights reserved.
2 package host.exp.exponent.kernel
3 
4 import de.greenrobot.event.EventBus
5 import host.exp.exponent.ExpoUpdatesAppLoader
6 import host.exp.exponent.kernel.KernelConstants.AddedExperienceEventEvent
7 import host.exp.exponent.kernel.KernelConstants.ExperienceOptions
8 
9 abstract class KernelInterface {
10   abstract fun handleError(errorMessage: String)
11   abstract fun handleError(exception: Exception)
12   abstract fun openExperience(options: ExperienceOptions)
13   abstract fun reloadVisibleExperience(manifestUrl: String, forceCache: Boolean): Boolean
14   abstract fun getAppLoaderForManifestUrl(manifestUrl: String?): ExpoUpdatesAppLoader?
15 
16   fun reloadVisibleExperience(manifestUrl: String): Boolean {
17     return reloadVisibleExperience(manifestUrl, false)
18   }
19 
20   fun addEventForExperience(manifestUrl: String, event: KernelConstants.ExperienceEvent) {
21     if (!manifestUrlToEvents.containsKey(manifestUrl)) {
22       manifestUrlToEvents[manifestUrl] =
23         mutableSetOf()
24     }
25     manifestUrlToEvents[manifestUrl]!!.add(event)
26     EventBus.getDefault().post(AddedExperienceEventEvent(manifestUrl))
27   }
28 
29   fun consumeExperienceEvents(manifestUrl: String): Set<KernelConstants.ExperienceEvent> {
30     val result: Set<KernelConstants.ExperienceEvent>
31     if (manifestUrlToEvents.containsKey(manifestUrl)) {
32       result = manifestUrlToEvents[manifestUrl]!!
33       manifestUrlToEvents.remove(manifestUrl)
34     } else {
35       result = mutableSetOf()
36     }
37     return result
38   }
39 
40   companion object {
41     private val manifestUrlToEvents = mutableMapOf<String, MutableSet<KernelConstants.ExperienceEvent>>()
42   }
43 }
44