@@ -2,7 +2,7 @@ package com.cloudinary
22
33import java.util.regex.Pattern
44
5- private const val ALGO_VERSION = ' C '
5+ private const val ALGO_VERSION = ' D '
66private const val PRODUCT = " A"
77private const val SDK = ' H'
88private const val ERROR_SIGNATURE = " E"
@@ -13,16 +13,19 @@ internal fun generateAnalyticsSignature(
1313 kotlinVersion : KotlinVersion = KotlinVersion .CURRENT ,
1414 osType : String = "Z ",
1515 osVersion : String = "AA "
16-
1716): String {
1817 return try {
19- val osType = generateOsTypeString();
20- val osVersion = generateOsVersionString(osType);
18+ val osTypeString = with (osType) {
19+ generateOsTypeString(osType)
20+ }
21+ val osVersionString = with (osVersion) {
22+ generateOsVersionString(osTypeString, osVersion)
23+ }
2124 val kotlinVerString = with (kotlinVersion) {
2225 generateVersionString(major, minor) // ignore kotlin patch
2326 }
2427
25- " $ALGO_VERSION$PRODUCT$SDK${generateVersionString(sdkVersion)}$kotlinVerString$osType$osVersion $NO_FEATURE_CHAR "
28+ " $ALGO_VERSION$PRODUCT$SDK${generateVersionString(sdkVersion)}$kotlinVerString$osTypeString$osVersionString $NO_FEATURE_CHAR "
2629 } catch (e: Exception ) {
2730 ERROR_SIGNATURE
2831 }
@@ -50,7 +53,16 @@ private fun generateVersionString(major: Any, minor: Any, patch: Any? = null): S
5053 return patchStr + minorStr + majorStr
5154}
5255
56+ private fun generateOSVersionString (major : Any , minor : Any? = "0", patch : Any? = null): String {
57+ val patchStr = if (patch != null ) patch.toString().toAnalyticsVersionStr() else " "
58+ val minorStr = minor.toString().padStart(2 , ' 0' ).toLong().toString(2 ).toAnalyticsVersionStr()
59+ val majorStr = major.toString().padStart(2 , ' 0' ).toLong().toString(2 ).toAnalyticsVersionStr()
60+
61+ return " $majorStr$minorStr "
62+ }
63+
5364private fun String.toAnalyticsVersionStr (): String {
65+ val num = this .toInt(2 )
5466 return when (val num = this .toInt(2 )) {
5567 in 0 .. 25 -> {
5668 (' A' + num).toString()
@@ -62,20 +74,29 @@ private fun String.toAnalyticsVersionStr(): String {
6274 }
6375}
6476
65- private fun generateOsTypeString () : String {
77+ private fun generateOsTypeString (osType : String? = null) : String {
78+ osType?.let {
79+ return osType
80+ }
6681 if (System .getProperty(" java.runtime.name" ).equals(" Android Runtime" )) {
6782 return " A"
6883 }
6984 return " Z"
7085}
7186
72- private fun generateOsVersionString (osType : String ) : String { // 5.15.41-android13-8-00055-g4f5025129fe8-ab8949913 5.4.86-android11-2-00006-gae78026f427c-ab7595864
87+ private fun generateOsVersionString (osType : String , osVersion : String? = null ) : String { // 5.15.41-android13-8-00055-g4f5025129fe8-ab8949913 5.4.86-android11-2-00006-gae78026f427c-ab7595864
7388 if (osType == " A" ) {
74- var version = System .getProperty(" os.version" );
89+ var version = osVersion
90+ if (version == null ) {
91+ version = System .getProperty(" os.version" );
92+ }
93+
7594 val pattern = Pattern .compile(" android(\\ d+)" )
7695 val matcher = pattern.matcher(version)
7796 if (matcher.find()) {
78- return matcher.group(1 );
97+ val versionArray = matcher.group(1 ).split(" ." )
98+ val versioString = generateOSVersionString(versionArray[0 ]);
99+ return versioString
79100 }
80101 }
81102 return " AA" ;
0 commit comments