Skip to content

Commit cd3596d

Browse files
longvantruongpandeymanggmattinanntgithub-advanced-security[bot]
authored
chore: merge main into mobile sdk custom (#23)
* chore: custom sdk tcb * chore: custom sdk tcb * chore: custom sdk tcb * chore: custom sdk tcb * chore: custom sdk tcb * fix: blackduck issues (#22) * fixes blackduck issues * fix: dokka version * fix: Workflow does not contain permissions (#20) Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> * chore: handle back press survey * chore: handle back press survey --------- Co-authored-by: Anshuman Pandey <[email protected]> Co-authored-by: Matti Nannt <[email protected]> Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
1 parent 574d159 commit cd3596d

File tree

5 files changed

+41
-7
lines changed

5 files changed

+41
-7
lines changed

.github/workflows/publish-to-maven-central.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# .github/workflows/publish-to-maven-central.yml
22

33
name: Publish to Maven Central
4+
permissions:
5+
contents: read
46
on:
57
release:
68
types: [released]

android/build.gradle.kts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,6 @@ plugins {
1212
id("maven-publish")
1313
}
1414

15-
// Import JaCoCo configuration
16-
// apply(from = "../jacoco.gradle.kts")
17-
1815
version = "1.0.2"
1916
val groupId = "com.formbricks"
2017
val artifactId = "android"

android/src/main/java/com/formbricks/android/Formbricks.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ interface FormbricksCallback {
2121
fun onSurveyFinished()
2222
fun onSurveyClosed()
2323
fun onPageCommitVisible()
24+
fun onSurveyDismissByBack()
2425
fun onError(error: Exception)
2526
fun onSuccess(successType: SuccessType)
2627
}
@@ -34,6 +35,7 @@ object Formbricks {
3435
internal var language: String = "default"
3536
internal var loggingEnabled: Boolean = true
3637
internal var autoDismissErrors: Boolean = true
38+
internal var isBackPressEnable: Boolean = false
3739
private var fragmentManager: FragmentManager? = null
3840
internal var isInitialized = false
3941

@@ -74,6 +76,7 @@ object Formbricks {
7476
loggingEnabled = config.loggingEnabled
7577
fragmentManager = config.fragmentManager
7678
autoDismissErrors = config.autoDismissErrors
79+
isBackPressEnable = config.isBackPressEnable
7780
config.userId?.let { UserManager.set(it) }
7881
config.attributes?.let { UserManager.setAttributes(it) }
7982
config.attributes?.get("language")?.let { UserManager.setLanguage(it) }

android/src/main/java/com/formbricks/android/helper/FormbricksConfig.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,15 @@ class FormbricksConfig private constructor(
1717
val loggingEnabled: Boolean,
1818
val fragmentManager: FragmentManager?,
1919
val autoDismissErrors: Boolean = true,
20+
val isBackPressEnable: Boolean = false,
2021
) {
2122
class Builder(private val appUrl: String, private val environmentId: String) {
2223
private var userId: String? = null
2324
private var attributes: MutableMap<String,String> = mutableMapOf()
2425
private var loggingEnabled = false
2526
private var fragmentManager: FragmentManager? = null
2627
private var autoDismissErrors = true
28+
private var isBackPressEnable = false
2729

2830
fun setUserId(userId: String): Builder {
2931
this.userId = userId
@@ -55,6 +57,11 @@ class FormbricksConfig private constructor(
5557
return this
5658
}
5759

60+
fun setIsBackPressEnable(isBackPressEnable: Boolean): Builder{
61+
this.isBackPressEnable = isBackPressEnable
62+
return this
63+
}
64+
5865
fun build(): FormbricksConfig {
5966
return FormbricksConfig(
6067
appUrl = appUrl,
@@ -63,7 +70,8 @@ class FormbricksConfig private constructor(
6370
attributes = attributes,
6471
loggingEnabled = loggingEnabled,
6572
fragmentManager = fragmentManager,
66-
autoDismissErrors = autoDismissErrors
73+
autoDismissErrors = autoDismissErrors,
74+
isBackPressEnable = isBackPressEnable
6775
)
6876
}
6977
}

android/src/main/java/com/formbricks/android/webview/FormbricksFragment.kt

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import android.os.Handler
1111
import android.os.Looper
1212
import android.provider.OpenableColumns
1313
import android.util.Base64
14+
import android.view.KeyEvent
1415
import android.view.LayoutInflater
1516
import android.view.View
1617
import android.view.ViewGroup
@@ -49,7 +50,7 @@ class FormbricksFragment(val hiddenFields: Map<String, Any>? = null) : BottomShe
4950
override fun onClose() {
5051
Handler(Looper.getMainLooper()).post {
5152
Formbricks.callback?.onSurveyClosed()
52-
dismiss()
53+
dismissAllowingStateLoss()
5354
}
5455
}
5556

@@ -75,7 +76,7 @@ class FormbricksFragment(val hiddenFields: Map<String, Any>? = null) : BottomShe
7576
val error = SDKError.unableToLoadFormbicksJs
7677
Formbricks.callback?.onError(error)
7778
Logger.e(error)
78-
dismiss()
79+
dismissAllowingStateLoss()
7980
}
8081
})
8182

@@ -163,7 +164,7 @@ class FormbricksFragment(val hiddenFields: Map<String, Any>? = null) : BottomShe
163164
if (cm.messageLevel() == ConsoleMessage.MessageLevel.ERROR) {
164165
Formbricks.callback?.onError(SDKError.surveyDisplayFetchError)
165166
if (Formbricks.autoDismissErrors) {
166-
dismiss()
167+
dismissAllowingStateLoss()
167168
}
168169
}
169170
val log = "[CONSOLE:${cm.messageLevel()}] \"${cm.message()}\", source: ${cm.sourceId()} (${cm.lineNumber()})"
@@ -209,6 +210,21 @@ class FormbricksFragment(val hiddenFields: Map<String, Any>? = null) : BottomShe
209210
}
210211

211212
viewModel.loadHtml(surveyId = surveyId, hiddenFields = hiddenFields)
213+
handleBackPressIfEnable()
214+
}
215+
216+
private fun handleBackPressIfEnable() {
217+
if (Formbricks.isBackPressEnable) {
218+
dialog?.setOnKeyListener { _, keyCode, event ->
219+
if (keyCode == KeyEvent.KEYCODE_BACK && event.action == KeyEvent.ACTION_UP) {
220+
dismissAllowingStateLoss()
221+
Formbricks.callback?.onSurveyDismissByBack()
222+
true
223+
} else {
224+
false
225+
}
226+
}
227+
}
212228
}
213229

214230
private fun getFileName(uri: Uri): String? {
@@ -243,6 +259,14 @@ class FormbricksFragment(val hiddenFields: Map<String, Any>? = null) : BottomShe
243259
}
244260
}
245261

262+
override fun onDestroyView() {
263+
super.onDestroyView()
264+
binding.formbricksWebview.removeJavascriptInterface(WebAppInterface.INTERFACE_NAME)
265+
binding.formbricksWebview.webChromeClient = null
266+
(binding.formbricksWebview.parent as? ViewGroup)?.removeView(binding.formbricksWebview)
267+
binding.formbricksWebview.destroy()
268+
}
269+
246270
companion object {
247271
private val TAG: String by lazy { FormbricksFragment::class.java.simpleName }
248272

0 commit comments

Comments
 (0)