@@ -10,10 +10,21 @@ import com.formbricks.android.helper.FormbricksConfig
1010import com.formbricks.android.logger.Logger
1111import com.formbricks.android.manager.SurveyManager
1212import com.formbricks.android.manager.UserManager
13+ import com.formbricks.android.model.enums.SuccessType
1314import com.formbricks.android.model.error.SDKError
1415import com.formbricks.android.webview.FormbricksFragment
1516import java.lang.RuntimeException
1617
18+ @Keep
19+ interface FormbricksCallback {
20+ fun onSurveyStarted ()
21+ fun onSurveyFinished ()
22+ fun onSurveyClosed ()
23+ fun onPageCommitVisible ()
24+ fun onError (error : Exception )
25+ fun onSuccess (successType : SuccessType )
26+ }
27+
1728@Keep
1829object Formbricks {
1930 internal lateinit var applicationContext: Context
@@ -22,9 +33,12 @@ object Formbricks {
2233 internal lateinit var appUrl: String
2334 internal var language: String = " default"
2435 internal var loggingEnabled: Boolean = true
36+ internal var autoDismissErrors: Boolean = true
2537 private var fragmentManager: FragmentManager ? = null
2638 internal var isInitialized = false
2739
40+ var callback: FormbricksCallback ? = null
41+
2842 /* *
2943 * Initializes the Formbricks SDK with the given [Context] config [FormbricksConfig].
3044 * This method is mandatory to be called, and should be only once per application lifecycle.
@@ -48,6 +62,7 @@ object Formbricks {
4862 fun setup (context : Context , config : FormbricksConfig , forceRefresh : Boolean = false) {
4963 if (isInitialized && ! forceRefresh) {
5064 val error = SDKError .sdkIsAlreadyInitialized
65+ callback?.onError(error)
5166 Logger .e(error)
5267 return
5368 }
@@ -58,7 +73,7 @@ object Formbricks {
5873 environmentId = config.environmentId
5974 loggingEnabled = config.loggingEnabled
6075 fragmentManager = config.fragmentManager
61-
76+ autoDismissErrors = config.autoDismissErrors
6277 config.userId?.let { UserManager .set(it) }
6378 config.attributes?.let { UserManager .setAttributes(it) }
6479 config.attributes?.get(" language" )?.let { UserManager .setLanguage(it) }
@@ -79,15 +94,17 @@ object Formbricks {
7994 * ```
8095 *
8196 */
82- fun setUserId (userId : String ) {
97+ fun setUserId (userId : String , allowOverrideUserId : Boolean = false ) {
8398 if (! isInitialized) {
8499 val error = SDKError .sdkIsNotInitialized
100+ callback?.onError(error)
85101 Logger .e(error)
86102 return
87103 }
88104
89- if (UserManager .userId != null ) {
105+ if (UserManager .userId != null && ! allowOverrideUserId ) {
90106 val error = RuntimeException (" A userId is already set ${UserManager .userId} - please call logout first before setting a new one" )
107+ callback?.onError(error)
91108 Logger .e(error)
92109 return
93110 }
@@ -107,6 +124,7 @@ object Formbricks {
107124 fun setAttribute (attribute : String , key : String ) {
108125 if (! isInitialized) {
109126 val error = SDKError .sdkIsNotInitialized
127+ callback?.onError(error)
110128 Logger .e(error)
111129 return
112130 }
@@ -125,6 +143,7 @@ object Formbricks {
125143 fun setAttributes (attributes : Map <String , String >) {
126144 if (! isInitialized) {
127145 val error = SDKError .sdkIsNotInitialized
146+ callback?.onError(error)
128147 Logger .e(error)
129148 return
130149 }
@@ -143,6 +162,7 @@ object Formbricks {
143162 fun setLanguage (language : String ) {
144163 if (! isInitialized) {
145164 val error = SDKError .sdkIsNotInitialized
165+ callback?.onError(error)
146166 Logger .e(error)
147167 return
148168 }
@@ -159,20 +179,22 @@ object Formbricks {
159179 * ```
160180 *
161181 */
162- fun track (action : String ) {
182+ fun track (action : String , hiddenFields : Map < String , Any > ? = null ) {
163183 if (! isInitialized) {
164184 val error = SDKError .sdkIsNotInitialized
185+ callback?.onError(error)
165186 Logger .e(error)
166187 return
167188 }
168189
169190 if (! isInternetAvailable()) {
170191 val error = SDKError .connectionIsNotAvailable
192+ callback?.onError(error)
171193 Logger .e(error)
172194 return
173195 }
174196
175- SurveyManager .track(action)
197+ SurveyManager .track(action = action, hiddenFields = hiddenFields )
176198 }
177199
178200 /* *
@@ -187,10 +209,12 @@ object Formbricks {
187209 fun logout () {
188210 if (! isInitialized) {
189211 val error = SDKError .sdkIsNotInitialized
212+ callback?.onError(error)
190213 Logger .e(error)
191214 return
192215 }
193216
217+ callback?.onSuccess(SuccessType .LOGOUT_SUCCESS )
194218 UserManager .logout()
195219 }
196220
@@ -209,15 +233,16 @@ object Formbricks {
209233 }
210234
211235 // / Assembles the survey fragment and presents it
212- internal fun showSurvey (id : String ) {
236+ internal fun showSurvey (id : String , hiddenFields : Map < String , Any > ? = null ) {
213237 if (fragmentManager == null ) {
214238 val error = SDKError .fragmentManagerIsNotSet
239+ callback?.onError(error)
215240 Logger .e(error)
216241 return
217242 }
218243
219244 fragmentManager?.let {
220- FormbricksFragment .show(it, surveyId = id)
245+ FormbricksFragment .show(it, surveyId = id, hiddenFields = hiddenFields )
221246 }
222247 }
223248
0 commit comments