Skip to content

Commit

Permalink
Merge pull request #907 from radixdlt/feature/m2m-poc
Browse files Browse the repository at this point in the history
Mobile Connect
  • Loading branch information
jakub-rdx authored Jun 27, 2024
2 parents 62f5258 + 5798ea5 commit bb8d1ec
Show file tree
Hide file tree
Showing 131 changed files with 2,700 additions and 2,052 deletions.
13 changes: 3 additions & 10 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@ android {
buildConfigField "boolean", "CRASH_REPORTING_AVAILABLE", "true"
buildConfigField "boolean", "EXPERIMENTAL_FEATURES_ENABLED", "false"
buildConfigField "String", "NPS_SURVEY_URL", '"https://wallet-net-promoter-score.radixdlt.com/"'
buildConfigField "String", "RCR_URL", '"https://radix-connect-relay.radixdlt.com/"'
buildConfigField "String", "REFINER_FORM_UUID", '"3432b6e0-dfad-11ee-a53c-95167f067d9c"'
buildConfigField "String", "IMAGE_HOST_BASE_URL", '"https://image-service.radixdlt.com"'
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
Expand Down Expand Up @@ -278,6 +279,7 @@ dependencies {

androidTestImplementation libs.androidXJunit
androidTestImplementation libs.espresso
androidTestImplementation libs.espressoIntents
androidTestImplementation libs.composeUiTestJunit

implementation libs.composeUiToolingPreview
Expand Down Expand Up @@ -312,16 +314,7 @@ tasks.withType(Test.class).configureEach {
*/
task buildDefaultLanguage {
copy {
from('src/main/res/values-en/strings.xml') {
filter {
line ->
if (line.isEmpty()) {
'\\n\\n'
} else {
line
}
}
}
from('src/main/res/values-en/strings.xml')
into 'src/main/res/values/'
}
// Move content from values/strings.xml to values-en/strings.xml
Expand Down
40 changes: 34 additions & 6 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,34 +3,53 @@
xmlns:tools="http://schemas.android.com/tools">

<uses-feature android:name="android.hardware.camera" />

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" tools:node="remove"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:node="remove" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" tools:node="remove"/>
<uses-permission android:name="com.google.android.gms.permission.AD_ID" tools:node="remove"/>
<uses-permission
android:name="android.permission.READ_PHONE_STATE"
tools:node="remove" />
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
tools:node="remove" />
<uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE"
tools:node="remove" />
<uses-permission
android:name="com.google.android.gms.permission.AD_ID"
tools:node="remove" />

<application
android:name=".RadixApplication"
android:allowBackup="true"
android:backupAgent=".WalletBackupAgent"
android:icon="@mipmap/ic_launcher"
android:networkSecurityConfig="@xml/network_security_config"
android:label="@string/app_name"
android:networkSecurityConfig="@xml/network_security_config"
android:supportsRtl="true"
android:theme="@style/Theme.BabylonWallet">
<activity
android:name=".MainActivity"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@style/Theme.App.Starting"
android:launchMode="singleTask"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />

<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />

<data android:scheme="radixwallet" />
<data android:host="*" />
</intent-filter>
</activity>
<meta-data
android:name="firebase_crashlytics_collection_enabled"
Expand All @@ -43,5 +62,14 @@
tools:node="remove" />

</application>

<queries>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="https" />
</intent>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="http" />
</intent>
</queries>
</manifest>
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.babylon.wallet.android

import Constants
import androidx.compose.ui.graphics.Color
import com.babylon.wallet.android.di.coroutines.ApplicationScope
import com.babylon.wallet.android.utils.Constants
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.toPersistentList
Expand Down
14 changes: 13 additions & 1 deletion app/src/main/java/com/babylon/wallet/android/MainActivity.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.babylon.wallet.android

import android.animation.ObjectAnimator
import android.content.Intent
import android.os.Bundle
import android.view.View
import android.view.animation.AnticipateInterpolator
Expand Down Expand Up @@ -58,9 +59,12 @@ class MainActivity : FragmentActivity() {
setSplashExitAnimation(splashScreen)
WindowCompat.setDecorFitsSystemWindows(window, false)
super.onCreate(savedInstanceState)

cloudBackupSyncExecutor.startPeriodicChecks(lifecycleOwner = this)

intent.data?.let {
intent.replaceExtras(Bundle())
viewModel.handleDeepLink(it)
}
setContent {
RadixWalletTheme {
val isVisible by balanceVisibilityObserver.isBalanceVisible.collectAsState(initial = true)
Expand Down Expand Up @@ -97,6 +101,14 @@ class MainActivity : FragmentActivity() {
}
}

override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
intent.data?.let {
this.intent.replaceExtras(Bundle())
viewModel.handleDeepLink(it)
}
}

private fun setSplashExitAnimation(splashScreen: SplashScreen) {
splashScreen.setOnExitAnimationListener { splashScreenView ->
val fadeIn = ObjectAnimator.ofFloat(
Expand Down
26 changes: 21 additions & 5 deletions app/src/main/java/com/babylon/wallet/android/WalletApp.kt
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.navigation.NavController
import androidx.navigation.NavHostController
import androidx.navigation.compose.rememberNavController
import com.babylon.wallet.android.domain.model.MessageFromDataChannel
import com.babylon.wallet.android.domain.model.IncomingMessage
import com.babylon.wallet.android.domain.userFriendlyMessage
import com.babylon.wallet.android.presentation.accessfactorsources.deriveaccounts.deriveAccounts
import com.babylon.wallet.android.presentation.accessfactorsources.derivepublickey.derivePublicKey
Expand All @@ -30,6 +30,7 @@ import com.babylon.wallet.android.presentation.dapp.unauthorized.login.dAppLogin
import com.babylon.wallet.android.presentation.main.MAIN_ROUTE
import com.babylon.wallet.android.presentation.main.MainEvent
import com.babylon.wallet.android.presentation.main.MainViewModel
import com.babylon.wallet.android.presentation.mobileconnect.mobileConnect
import com.babylon.wallet.android.presentation.navigation.NavigationHost
import com.babylon.wallet.android.presentation.navigation.PriorityRoutes
import com.babylon.wallet.android.presentation.rootdetection.ROUTE_ROOT_DETECTION
Expand Down Expand Up @@ -67,18 +68,22 @@ fun WalletApp(
mainViewModel.oneOffEvent.collect { event ->
when (event) {
is MainEvent.IncomingRequestEvent -> {
if (event.request.needVerification) {
navController.mobileConnect(event.request.interactionId)
return@collect
}
when (val incomingRequest = event.request) {
is MessageFromDataChannel.IncomingRequest.TransactionRequest -> {
is IncomingMessage.IncomingRequest.TransactionRequest -> {
navController.transactionReview(
requestId = incomingRequest.requestId
requestId = incomingRequest.interactionId
)
}

is MessageFromDataChannel.IncomingRequest.AuthorizedRequest -> {
is IncomingMessage.IncomingRequest.AuthorizedRequest -> {
navController.dAppLoginAuthorized(incomingRequest.interactionId)
}

is MessageFromDataChannel.IncomingRequest.UnauthorizedRequest -> {
is IncomingMessage.IncomingRequest.UnauthorizedRequest -> {
navController.dAppLoginUnauthorized(incomingRequest.interactionId)
}
}
Expand Down Expand Up @@ -172,6 +177,17 @@ fun WalletApp(
dismissText = null
)
}
if (state.showMobileConnectWarning) {
BasicPromptAlertDialog(
finish = {
mainViewModel.onMobileConnectWarningShown()
},
titleText = stringResource(id = R.string.mobileConnect_noProfileDialog_title),
messageText = stringResource(id = R.string.mobileConnect_noProfileDialog_subtitle),
confirmText = stringResource(id = R.string.common_ok),
dismissText = null
)
}
}

@Composable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,8 @@

package com.babylon.wallet.android.data.dapp

import com.babylon.wallet.android.data.dapp.model.WalletErrorType
import com.babylon.wallet.android.data.dapp.model.WalletInteractionFailureResponse
import com.babylon.wallet.android.data.dapp.model.WalletInteractionResponse
import com.babylon.wallet.android.data.dapp.model.WalletInteractionSuccessResponse
import com.babylon.wallet.android.data.dapp.model.WalletTransactionResponseItems
import com.babylon.wallet.android.data.dapp.model.WalletTransactionResponseItems.SendTransactionResponseItem
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
import com.radixdlt.sargon.WalletToDappInteractionResponse
import com.radixdlt.sargon.extensions.toJson
import timber.log.Timber
import javax.inject.Inject

Expand All @@ -23,20 +17,17 @@ interface DappMessenger {

suspend fun sendWalletInteractionResponseFailure(
remoteConnectorId: String,
requestId: String,
error: WalletErrorType,
message: String? = null
payload: String
): Result<Unit>

suspend fun sendTransactionWriteResponseSuccess(
remoteConnectorId: String,
requestId: String,
txId: String
payload: String
): Result<Unit>

suspend fun sendWalletInteractionSuccessResponse(
remoteConnectorId: String,
response: WalletInteractionResponse
response: WalletToDappInteractionResponse
): Result<Unit>
}

Expand All @@ -46,39 +37,24 @@ class DappMessengerImpl @Inject constructor(

override suspend fun sendTransactionWriteResponseSuccess(
remoteConnectorId: String,
requestId: String,
txId: String
payload: String
): Result<Unit> {
val response: WalletInteractionResponse = WalletInteractionSuccessResponse(
interactionId = requestId,
items = WalletTransactionResponseItems(SendTransactionResponseItem(txId))
)
val message = Json.encodeToString(response)
return peerdroidClient.sendMessage(remoteConnectorId, message)
return peerdroidClient.sendMessage(remoteConnectorId, payload)
}

override suspend fun sendWalletInteractionResponseFailure(
remoteConnectorId: String,
requestId: String,
error: WalletErrorType,
message: String?
payload: String
): Result<Unit> {
val messageJson = Json.encodeToString(
WalletInteractionFailureResponse(
interactionId = requestId,
error = error,
message = message
)
)
return peerdroidClient.sendMessage(remoteConnectorId, messageJson)
return peerdroidClient.sendMessage(remoteConnectorId, payload)
}

override suspend fun sendWalletInteractionSuccessResponse(
remoteConnectorId: String,
response: WalletInteractionResponse
response: WalletToDappInteractionResponse
): Result<Unit> {
val messageJson = try {
Json.encodeToString(response)
response.toJson()
} catch (e: Exception) {
Timber.d(e)
""
Expand Down
Loading

0 comments on commit bb8d1ec

Please sign in to comment.