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