diff --git a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/common/InputGuard.kt b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/common/InputGuard.kt index 527a9facd..593a1eca8 100644 --- a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/common/InputGuard.kt +++ b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/common/InputGuard.kt @@ -1,6 +1,7 @@ package com.onesignal.common import com.onesignal.debug.internal.logging.Logging +import com.onesignal.internal.SdkOperation internal fun hasNullByte(value: String?): Boolean = value != null && '\u0000' in value @@ -22,6 +23,12 @@ fun isMissing( return error != null } +internal fun isMissing( + value: String?, + operation: SdkOperation, + parameter: String, +): Boolean = isMissing(value, "$operation: $parameter") + /** * Returns true when any of [values] is missing, per [isMissing]. */ diff --git a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/internal/SdkOperation.kt b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/internal/SdkOperation.kt new file mode 100644 index 000000000..4e3280fa4 --- /dev/null +++ b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/internal/SdkOperation.kt @@ -0,0 +1,24 @@ +package com.onesignal.internal + +// Public entry points that wait for or require init. [label] is the API name the app called. +internal enum class SdkOperation(val label: String) { + INIT_WITH_CONTEXT("initWithContext"), + SESSION("Session"), + NOTIFICATIONS("Notifications"), + LOCATION("Location"), + IN_APP_MESSAGES("InAppMessages"), + USER("User"), + LOGIN("login"), + LOGOUT("logout"), + UPDATE_USER_JWT("updateUserJwt"), + JWT_LISTENERS("OneSignal"), + GET_CONSENT_REQUIRED("getConsentRequired"), + SET_CONSENT_REQUIRED("setConsentRequired"), + GET_CONSENT_GIVEN("getConsentGiven"), + SET_CONSENT_GIVEN("setConsentGiven"), + GET_DISABLE_GMS_MISSING_PROMPT("getDisableGMSMissingPrompt"), + SET_DISABLE_GMS_MISSING_PROMPT("setDisableGMSMissingPrompt"), + ; + + override fun toString() = label +} diff --git a/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/common/InputGuardTests.kt b/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/common/InputGuardTests.kt index ae2957658..40f8630d3 100644 --- a/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/common/InputGuardTests.kt +++ b/OneSignalSDK/onesignal/core/src/test/java/com/onesignal/common/InputGuardTests.kt @@ -2,6 +2,7 @@ package com.onesignal.common import com.onesignal.debug.LogLevel import com.onesignal.debug.internal.logging.Logging +import com.onesignal.internal.SdkOperation import io.kotest.core.spec.style.FunSpec import io.kotest.matchers.shouldBe @@ -24,4 +25,11 @@ class InputGuardTests : FunSpec({ isMissing("abc\u0000", "addAlias: id") shouldBe true hasMissingEntries(mapOf("external_id" to "\u0000: 1"), "addAliases", allowEmptyValue = false) shouldBe true } + + test("the operation overload applies the same checks and logs the public API name") { + isMissing(null, SdkOperation.LOGIN, "externalId") shouldBe true + isMissing("\u0000", SdkOperation.LOGIN, "externalId") shouldBe true + isMissing("user-1", SdkOperation.LOGIN, "externalId") shouldBe false + "${SdkOperation.LOGIN}: externalId" shouldBe "login: externalId" + } })