From 319090332975d7cbfb298c2a64ee14d62c795715 Mon Sep 17 00:00:00 2001 From: neijrbuilders Date: Thu, 22 Jan 2026 10:33:10 -0300 Subject: [PATCH 1/3] refactor: simplify simulated data generation in MainActivity by removing unused method and hardcoding tokenReferenceId --- .../samsung/android/spay_mock/MainActivity.kt | 26 +++---------------- 1 file changed, 3 insertions(+), 23 deletions(-) diff --git a/samsung-wallet-app-mock/app/src/main/java/com/samsung/android/spay_mock/MainActivity.kt b/samsung-wallet-app-mock/app/src/main/java/com/samsung/android/spay_mock/MainActivity.kt index 1017b0a..25574d0 100644 --- a/samsung-wallet-app-mock/app/src/main/java/com/samsung/android/spay_mock/MainActivity.kt +++ b/samsung-wallet-app-mock/app/src/main/java/com/samsung/android/spay_mock/MainActivity.kt @@ -156,15 +156,10 @@ class MainActivity : ComponentActivity() { private fun simulateSamsungApp2App() { try { - // Gerar dados simulados (Mastercard/Visa) - val simulatedJson = generateSamsungSimulatedData() - val simulatedData = android.util.Base64.encodeToString( - simulatedJson.toByteArray(Charsets.UTF_8), - android.util.Base64.NO_WRAP - ) + // Gerar dados simulados com tokenReferenceId + val simulatedData = "9e4eeb4e-71af-4024-b3ff-05c7a2d4460d" - Log.d(TAG, "📋 [SAMSUNG] JSON gerado: $simulatedJson") - Log.d(TAG, "📋 [SAMSUNG] Base64 gerado: $simulatedData") + Log.d(TAG, "📋 [SAMSUNG] Simulated Data: $simulatedData") val intent = Intent(BuildConfig.SAMSUNG_TARGET_APP_ACTION).apply { setPackage(BuildConfig.SAMSUNG_TARGET_APP_PACKAGE) @@ -193,21 +188,6 @@ class MainActivity : ComponentActivity() { } } - private fun generateSamsungSimulatedData(): String { - - val mastercardData = """ - { - "paymentAppProviderId": "MASTERCARD_PROVIDER_123465", - "paymentAppInstanceId": "INSTANCE_1234", - "tokenUniqueReference": "TOKEN_1758556574675_98397", - "accountPanSuffix": "1234", - "accountExpiry": "12/25" - } - """.trimIndent() - - return mastercardData - } - private fun clearResults() { samsungResultState = SamsungResultState() Log.d(TAG, "🧹 [SAMSUNG] Resultados limpos") From 33d8d13a141b05728b40d5694c4d6b7ace0e9cca Mon Sep 17 00:00:00 2001 From: neijrbuilders Date: Thu, 22 Jan 2026 11:41:00 -0300 Subject: [PATCH 2/3] feat: add input field for simulated data in MainActivity for both Google and Samsung wallet apps --- .../google/android/gms_mock/MainActivity.kt | 42 ++++++++++++++++--- .../samsung/android/spay_mock/MainActivity.kt | 42 ++++++++++++++++--- 2 files changed, 74 insertions(+), 10 deletions(-) diff --git a/google-wallet-app-mock/app/src/main/java/com/google/android/gms_mock/MainActivity.kt b/google-wallet-app-mock/app/src/main/java/com/google/android/gms_mock/MainActivity.kt index b5aee61..9685e1b 100644 --- a/google-wallet-app-mock/app/src/main/java/com/google/android/gms_mock/MainActivity.kt +++ b/google-wallet-app-mock/app/src/main/java/com/google/android/gms_mock/MainActivity.kt @@ -13,12 +13,17 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Close import androidx.compose.material3.AlertDialog import androidx.compose.material3.Button +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.material3.TextButton +import androidx.compose.material3.TextField import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -40,6 +45,9 @@ class MainActivity : ComponentActivity() { // Variável para controlar o estado do resultado na tela private var resultState by mutableStateOf(ResultState()) + // Estado do input de dados simulados + private var simulatedDataInput by mutableStateOf("9e4eeb4e-71af-4024-b3ff-05c7a2d4460d") + data class AlertState( val show: Boolean = false, val title: String = "", @@ -165,7 +173,9 @@ class MainActivity : ComponentActivity() { GoogleWalletMockTheme { Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding -> App2AppSimulator( - onSimulateClick = { simulateApp2App() }, + simulatedDataInput = simulatedDataInput, + onSimulatedDataChange = { simulatedDataInput = it }, + onSimulateClick = { simulateApp2App(simulatedDataInput) }, onClearClick = { clearResults() }, resultState = resultState, modifier = Modifier.padding(innerPadding) @@ -199,11 +209,8 @@ class MainActivity : ComponentActivity() { } } - private fun simulateApp2App() { + private fun simulateApp2App(simulatedData: String) { try { - // Gerar dados simulados com tokenReferenceId - val simulatedData = "9e4eeb4e-71af-4024-b3ff-05c7a2d4460d" - Log.d(TAG, "📋 [GOOGLE] Simulated Data: $simulatedData") val intent = Intent(BuildConfig.TARGET_APP_ACTION).apply { @@ -238,6 +245,8 @@ class MainActivity : ComponentActivity() { @Composable fun App2AppSimulator( + simulatedDataInput: String, + onSimulatedDataChange: (String) -> Unit, onSimulateClick: () -> Unit, onClearClick: () -> Unit, resultState: MainActivity.ResultState, @@ -256,6 +265,27 @@ fun App2AppSimulator( modifier = Modifier.padding(bottom = 32.dp) ) + TextField( + value = simulatedDataInput, + onValueChange = onSimulatedDataChange, + label = { Text("Token Reference ID") }, + modifier = Modifier + .fillMaxWidth() + .padding(bottom = 16.dp), + singleLine = true, + textStyle = MaterialTheme.typography.bodyMedium, + trailingIcon = { + if (simulatedDataInput.isNotEmpty()) { + IconButton(onClick = { onSimulatedDataChange("") }) { + Icon( + imageVector = Icons.Default.Close, + contentDescription = "Limpar" + ) + } + } + } + ) + Button( onClick = onSimulateClick ) { @@ -393,6 +423,8 @@ fun ResultDisplay( fun App2AppSimulatorPreview() { GoogleWalletMockTheme { App2AppSimulator( + simulatedDataInput = "9e4eeb4e-71af-4024-b3ff-05c7a2d4460d", + onSimulatedDataChange = { }, onSimulateClick = { }, onClearClick = { }, resultState = MainActivity.ResultState() diff --git a/samsung-wallet-app-mock/app/src/main/java/com/samsung/android/spay_mock/MainActivity.kt b/samsung-wallet-app-mock/app/src/main/java/com/samsung/android/spay_mock/MainActivity.kt index 25574d0..6e1ea17 100644 --- a/samsung-wallet-app-mock/app/src/main/java/com/samsung/android/spay_mock/MainActivity.kt +++ b/samsung-wallet-app-mock/app/src/main/java/com/samsung/android/spay_mock/MainActivity.kt @@ -13,12 +13,17 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Close import androidx.compose.material3.AlertDialog import androidx.compose.material3.Button +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.material3.TextButton +import androidx.compose.material3.TextField import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -40,6 +45,9 @@ class MainActivity : ComponentActivity() { // Estado de resultado Samsung private var samsungResultState by mutableStateOf(SamsungResultState()) + // Estado do input de dados simulados + private var simulatedDataInput by mutableStateOf("9e4eeb4e-71af-4024-b3ff-05c7a2d4460d") + data class AlertState( val show: Boolean = false, val title: String = "", @@ -154,11 +162,8 @@ class MainActivity : ComponentActivity() { return message.toString() } - private fun simulateSamsungApp2App() { + private fun simulateSamsungApp2App(simulatedData: String) { try { - // Gerar dados simulados com tokenReferenceId - val simulatedData = "9e4eeb4e-71af-4024-b3ff-05c7a2d4460d" - Log.d(TAG, "📋 [SAMSUNG] Simulated Data: $simulatedData") val intent = Intent(BuildConfig.SAMSUNG_TARGET_APP_ACTION).apply { @@ -200,7 +205,9 @@ class MainActivity : ComponentActivity() { SamsungwalletappmockTheme { Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding -> SamsungApp2AppSimulator( - onSamsungSimulateClick = { simulateSamsungApp2App() }, + simulatedDataInput = simulatedDataInput, + onSimulatedDataChange = { simulatedDataInput = it }, + onSamsungSimulateClick = { simulateSamsungApp2App(simulatedDataInput) }, onClearClick = { clearResults() }, samsungResultState = samsungResultState, modifier = Modifier.padding(innerPadding) @@ -226,6 +233,8 @@ class MainActivity : ComponentActivity() { @Composable fun SamsungApp2AppSimulator( + simulatedDataInput: String, + onSimulatedDataChange: (String) -> Unit, onSamsungSimulateClick: () -> Unit, onClearClick: () -> Unit, samsungResultState: MainActivity.SamsungResultState, @@ -244,6 +253,27 @@ fun SamsungApp2AppSimulator( modifier = Modifier.padding(bottom = 24.dp) ) + TextField( + value = simulatedDataInput, + onValueChange = onSimulatedDataChange, + label = { Text("Token Reference ID") }, + modifier = Modifier + .fillMaxWidth() + .padding(bottom = 16.dp), + singleLine = true, + textStyle = MaterialTheme.typography.bodyMedium, + trailingIcon = { + if (simulatedDataInput.isNotEmpty()) { + IconButton(onClick = { onSimulatedDataChange("") }) { + Icon( + imageVector = Icons.Default.Close, + contentDescription = "Limpar" + ) + } + } + } + ) + Button( onClick = onSamsungSimulateClick, colors = androidx.compose.material3.ButtonDefaults.buttonColors( @@ -392,6 +422,8 @@ fun SamsungResultDisplay( fun SamsungApp2AppSimulatorPreview() { SamsungwalletappmockTheme { SamsungApp2AppSimulator( + simulatedDataInput = "9e4eeb4e-71af-4024-b3ff-05c7a2d4460d", + onSimulatedDataChange = { }, onSamsungSimulateClick = { }, onClearClick = { }, samsungResultState = MainActivity.SamsungResultState() From 56adbf3a61d8241948e9ffa8d2e9b6f729bbd0d6 Mon Sep 17 00:00:00 2001 From: neijrbuilders Date: Thu, 22 Jan 2026 11:56:54 -0300 Subject: [PATCH 3/3] refactor: replace hardcoded simulated data with a constant in MainActivity for Google and Samsung wallet apps --- .../main/java/com/google/android/gms_mock/MainActivity.kt | 5 +++-- .../main/java/com/samsung/android/spay_mock/MainActivity.kt | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/google-wallet-app-mock/app/src/main/java/com/google/android/gms_mock/MainActivity.kt b/google-wallet-app-mock/app/src/main/java/com/google/android/gms_mock/MainActivity.kt index 9685e1b..69021f0 100644 --- a/google-wallet-app-mock/app/src/main/java/com/google/android/gms_mock/MainActivity.kt +++ b/google-wallet-app-mock/app/src/main/java/com/google/android/gms_mock/MainActivity.kt @@ -37,6 +37,7 @@ import com.google.android.gms_mock.ui.theme.GoogleWalletMockTheme class MainActivity : ComponentActivity() { companion object { private const val TAG = "GoogleWalletMock" + internal const val DEFAULT_SIMULATED_DATA = "9e4eeb4e-71af-4024-b3ff-05c7a2d4460d" } // Variável para controlar o estado do alerta @@ -46,7 +47,7 @@ class MainActivity : ComponentActivity() { private var resultState by mutableStateOf(ResultState()) // Estado do input de dados simulados - private var simulatedDataInput by mutableStateOf("9e4eeb4e-71af-4024-b3ff-05c7a2d4460d") + private var simulatedDataInput by mutableStateOf(DEFAULT_SIMULATED_DATA) data class AlertState( val show: Boolean = false, @@ -423,7 +424,7 @@ fun ResultDisplay( fun App2AppSimulatorPreview() { GoogleWalletMockTheme { App2AppSimulator( - simulatedDataInput = "9e4eeb4e-71af-4024-b3ff-05c7a2d4460d", + simulatedDataInput = MainActivity.DEFAULT_SIMULATED_DATA, onSimulatedDataChange = { }, onSimulateClick = { }, onClearClick = { }, diff --git a/samsung-wallet-app-mock/app/src/main/java/com/samsung/android/spay_mock/MainActivity.kt b/samsung-wallet-app-mock/app/src/main/java/com/samsung/android/spay_mock/MainActivity.kt index 6e1ea17..b5254ab 100644 --- a/samsung-wallet-app-mock/app/src/main/java/com/samsung/android/spay_mock/MainActivity.kt +++ b/samsung-wallet-app-mock/app/src/main/java/com/samsung/android/spay_mock/MainActivity.kt @@ -37,6 +37,7 @@ import com.samsung.android.spay_mock.ui.theme.SamsungwalletappmockTheme class MainActivity : ComponentActivity() { companion object { private const val TAG = "SamsungWalletMock" + internal const val DEFAULT_SIMULATED_DATA = "9e4eeb4e-71af-4024-b3ff-05c7a2d4460d" } // Estado de alerta @@ -46,7 +47,7 @@ class MainActivity : ComponentActivity() { private var samsungResultState by mutableStateOf(SamsungResultState()) // Estado do input de dados simulados - private var simulatedDataInput by mutableStateOf("9e4eeb4e-71af-4024-b3ff-05c7a2d4460d") + private var simulatedDataInput by mutableStateOf(DEFAULT_SIMULATED_DATA) data class AlertState( val show: Boolean = false, @@ -422,7 +423,7 @@ fun SamsungResultDisplay( fun SamsungApp2AppSimulatorPreview() { SamsungwalletappmockTheme { SamsungApp2AppSimulator( - simulatedDataInput = "9e4eeb4e-71af-4024-b3ff-05c7a2d4460d", + simulatedDataInput = MainActivity.DEFAULT_SIMULATED_DATA, onSimulatedDataChange = { }, onSamsungSimulateClick = { }, onClearClick = { },