Skip to content

firebase/soracard #861

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 23 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
a8e88ec
soracard
PankraSerg Mar 3, 2023
2c24d61
soracard PR fix
PankraSerg Mar 9, 2023
cf71a37
soracard fix
PankraSerg Mar 9, 2023
ba2868b
soracard's related readme updates
PankraSerg Mar 14, 2023
613b85e
FLW-2866 Sora card. Create info + KYC start point screen: logic updates
PankraSerg Mar 14, 2023
cddf2f0
soracard wip. update card status
PankraSerg Mar 17, 2023
c6ed226
fix rebase
PankraSerg Mar 17, 2023
0d80d0b
fix webview update bug
Mar 20, 2023
eb7c4ce
FLW-3151 Sora Card. We need to put the text line on the centre
PankraSerg Mar 20, 2023
12a24a4
versions update, fixes
PankraSerg Mar 20, 2023
83de016
FLW-3165 Sora Card. We need to delete ISSUE CARD FOR 12 $ button
PankraSerg Mar 20, 2023
dd4e687
FLW-3166 Sora Card. There is a mistake on the text
PankraSerg Mar 20, 2023
14fca3d
FLW-3158 Error appears after tapping on SORA asset: allow asset null …
PankraSerg Mar 20, 2023
34e3237
FLW-3157 SORA Card. Eternal loader freezes after closing pop-up succe…
PankraSerg Mar 20, 2023
010280d
FLW-3152 Sora Card. Sometimes we can see error status: Add cache to g…
PankraSerg Mar 21, 2023
3f7e656
FLW-3155 Sora Card. Sora card button doesn’t work on the settings screen
PankraSerg Mar 21, 2023
bbd5771
FLW-3168 Sora Card. X1. The e-mail field covered by keyboard
PankraSerg Mar 21, 2023
b429da1
FLW-3153 Sora Card. The cross should be red
PankraSerg Mar 21, 2023
9ae93c3
FLW-3153 Sora Card. UI updates
PankraSerg Mar 21, 2023
7cffd65
FLW-3173 Sora Card. There is wrong background colour: force dark them…
PankraSerg Mar 23, 2023
db8aa72
code clean
PankraSerg Mar 23, 2023
00b247b
update versions sora related; x1 black background
PankraSerg Mar 24, 2023
a975f7a
firebase + test crash
PankraSerg Mar 24, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 34 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,44 @@ Track features development: [board link](https://soramitsucoltd.aha.io/shared/34

To build Fearless Wallet Android project, you need to provide several keys either in enviroment variables or in `local.properties` file:

``` properties
### Moonpay properties
```
MOONPAY_TEST_SECRET=stub
MOONPAY_PRODUCTION_SECRET=stub
```

Note, that with stub keys buy via moonpay will not work correctly. However, other parts of application will not be affected.

### Sora CARD SDK

For starting Sora CARD SDK initial data have to be provided via gradle properties due to security purpose.

````
// PayWings repo credentials properties for getting artifacts
PAY_WINGS_REPOSITORY_URL
PAY_WINGS_USERNAME
PAY_WINGS_PASSWORD

// Sora CARD API key
SORA_CARD_API_KEY
SORA_CARD_DOMAIN

// Sora CARD KYC credentials
SORA_CARD_KYC_ENDPOINT_URL
SORA_CARD_KYC_USERNAME
SORA_CARD_KYC_PASSWORD
````

### X1 plugin

X1 is a plugin which is embedded into webView. It requires url and id for launching.

````
X1_ENDPOINT_URL_RELEASE
X1_WIDGET_ID_RELEASE

X1_ENDPOINT_URL_DEBUG
X1_WIDGET_ID_DEBUG
````

## License
Fearless Wallet Android is available under the Apache 2.0 license. See the LICENSE file for more info.
13 changes: 13 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ apply plugin: 'kotlin-parcelize'
apply plugin: 'com.google.firebase.appdistribution'
apply plugin: "com.github.triplet.play"
apply from: "../scripts/versions.gradle"
// Add the Crashlytics Gradle plugin
apply plugin: 'com.google.firebase.crashlytics'

android {
compileSdkVersion rootProject.compileSdkVersion
Expand Down Expand Up @@ -118,6 +120,14 @@ play {
}

dependencies {
// Import the BoM for the Firebase platform
implementation platform('com.google.firebase:firebase-bom:31.2.3')

// Add the dependencies for the Crashlytics and Analytics libraries
// When using the BoM, you don't specify versions in Firebase library dependencies
implementation 'com.google.firebase:firebase-crashlytics-ktx'
implementation 'com.google.firebase:firebase-analytics-ktx'

implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation project(':core-db')
implementation project(':common')
Expand Down Expand Up @@ -146,6 +156,9 @@ dependencies {
implementation project(':feature-success-api')
implementation project(':feature-success-impl')

implementation project(':feature-soracard-api')
implementation project(':feature-soracard-impl')

implementation kotlinDep

implementation androidDep
Expand Down
8 changes: 5 additions & 3 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,14 @@
<uses-permission android:name="android.permission.INTERNET" />

<application
tools:replace="android:allowBackup"
android:name="jp.co.soramitsu.app.App"
android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:networkSecurityConfig="@xml/network_security_config"
android:supportsRtl="true">
android:supportsRtl="true"
android:theme="@style/Theme.AppCompat.Light"
tools:replace="android:allowBackup">

<activity android:name="jp.co.soramitsu.common.qrScanner.QrScannerActivity" />

Expand Down Expand Up @@ -62,7 +63,8 @@
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths" />
android:resource="@xml/provider_paths"
tools:replace="android:resource" />
</provider>

</application>
Expand Down
13 changes: 9 additions & 4 deletions app/src/main/java/jp/co/soramitsu/app/di/app/NavigationModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,17 @@ import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import jp.co.soramitsu.app.root.navigation.Navigator
import javax.inject.Singleton
import jp.co.soramitsu.account.impl.presentation.AccountRouter
import jp.co.soramitsu.app.root.navigation.Navigator
import jp.co.soramitsu.crowdloan.impl.presentation.CrowdloanRouter
import jp.co.soramitsu.onboarding.impl.OnboardingRouter
import jp.co.soramitsu.polkaswap.api.presentation.PolkaswapRouter
import jp.co.soramitsu.staking.impl.presentation.StakingRouter
import jp.co.soramitsu.wallet.impl.presentation.WalletRouter
import jp.co.soramitsu.soracard.api.presentation.SoraCardRouter
import jp.co.soramitsu.splash.SplashRouter
import jp.co.soramitsu.staking.impl.presentation.StakingRouter
import jp.co.soramitsu.success.presentation.SuccessRouter
import javax.inject.Singleton
import jp.co.soramitsu.wallet.impl.presentation.WalletRouter

@InstallIn(SingletonComponent::class)
@Module
Expand Down Expand Up @@ -54,4 +55,8 @@ class NavigationModule {
@Singleton
@Provides
fun provideCrowdloanRouter(navigator: Navigator): CrowdloanRouter = navigator

@Singleton
@Provides
fun provideSoraCardRouter(navigator: Navigator): SoraCardRouter = navigator
}
24 changes: 19 additions & 5 deletions app/src/main/java/jp/co/soramitsu/app/root/navigation/Navigator.kt
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ import jp.co.soramitsu.polkaswap.impl.presentation.swap_tokens.SwapTokensFragmen
import jp.co.soramitsu.polkaswap.impl.presentation.transaction_settings.TransactionSettingsFragment
import jp.co.soramitsu.runtime.multiNetwork.chain.model.Chain
import jp.co.soramitsu.runtime.multiNetwork.chain.model.ChainId
import jp.co.soramitsu.soracard.api.presentation.SoraCardRouter
import jp.co.soramitsu.splash.SplashRouter
import jp.co.soramitsu.staking.api.domain.model.PoolInfo
import jp.co.soramitsu.staking.impl.presentation.StakingRouter
Expand Down Expand Up @@ -153,7 +154,8 @@ class Navigator :
StakingRouter,
CrowdloanRouter,
PolkaswapRouter,
SuccessRouter {
SuccessRouter,
SoraCardRouter {

private var navController: NavController? = null
private var activity: AppCompatActivity? = null
Expand Down Expand Up @@ -575,8 +577,8 @@ class Navigator :
navController?.navigate(R.id.back_to_main)
}

override fun returnToAssetDetails() {
navController?.navigate(R.id.back_to_asset_details)
override fun closeSwap() {
navController?.navigate(R.id.close_swap)
}

override fun openValidatorDetails(validatorDetails: ValidatorDetailsParcelModel) {
Expand All @@ -597,12 +599,16 @@ class Navigator :
navController?.navigate(R.id.sendSetupFragment, bundle)
}

override fun openSwapTokensScreen(assetPayload: AssetPayload) {
val bundle = SwapTokensFragment.getBundle(assetPayload.chainAssetId, assetPayload.chainId)
override fun openSwapTokensScreen(assetId: String, chainId: String) {
val bundle = SwapTokensFragment.getBundle(assetId, chainId)

navController?.navigate(R.id.swapTokensFragment, bundle)
}

override fun showBuyCrypto() {
navController?.navigate(R.id.buyCryptoFragment)
}

override fun openSelectChain(assetId: String, chainId: ChainId?, chooserMode: Boolean) {
val bundle = ChainSelectFragment.getBundle(assetId = assetId, chainId = chainId, chooserMode = chooserMode)
navController?.navigate(R.id.chainSelectFragment, bundle)
Expand Down Expand Up @@ -989,6 +995,10 @@ class Navigator :
navController?.navigate(R.id.editPoolConfirmFragment)
}

override fun openGetSoraCard() {
navController?.navigate(R.id.getSoraCardFragment)
}

override val walletSelectorPayloadFlow: Flow<WalletSelectorPayload?>
get() = navController?.currentBackStackEntry?.savedStateHandle
?.getLiveData<WalletSelectorPayload?>(WalletSelectorPayload::class.java.name)
Expand Down Expand Up @@ -1053,4 +1063,8 @@ class Navigator :
val bundle = PoolFullUnstakeDepositorAlertFragment.getBundle(amount)
navController?.navigate(R.id.poolFullUnstakeDepositorAlertFragment, bundle)
}

override fun openGetMoreXor() {
navController?.navigate(R.id.getMoreXorFragment)
}
}
20 changes: 18 additions & 2 deletions app/src/main/res/navigation/main_nav_graph.xml
Original file line number Diff line number Diff line change
Expand Up @@ -388,6 +388,11 @@
android:name="jp.co.soramitsu.wallet.impl.presentation.transaction.filter.TransactionHistoryFilterFragment"
android:label="TransactionHistoryFilterFragment" />

<fragment
android:id="@+id/getSoraCardFragment"
android:name="jp.co.soramitsu.soracard.impl.presentation.get.GetSoraCardFragment"
android:label="GetSoraCardFragment" />

<fragment
android:id="@+id/exportMnemonicFragment"
android:name="jp.co.soramitsu.account.impl.presentation.exporting.mnemonic.ExportMnemonicFragment"
Expand Down Expand Up @@ -454,6 +459,11 @@
android:name="jp.co.soramitsu.wallet.impl.presentation.balance.searchAssets.SearchAssetsFragment"
android:label="searchAssetsFragment" />

<fragment
android:id="@+id/buyCryptoFragment"
android:name="jp.co.soramitsu.soracard.impl.presentation.buycrypto.BuyCryptoFragment"
android:label="buyCryptoFragment" />

<dialog
android:id="@+id/confirmSendFragment"
android:name="jp.co.soramitsu.wallet.impl.presentation.send.confirm.ConfirmSendFragment"
Expand All @@ -472,6 +482,11 @@
android:name="jp.co.soramitsu.success.presentation.SuccessFragment"
android:label="successSheetFragment" />

<dialog
android:id="@+id/getMoreXorFragment"
android:name="jp.co.soramitsu.soracard.impl.presentation.getmorexor.GetMoreXorFragment"
android:label="getMoreXorFragment" />

<dialog
android:id="@+id/startStakingPoolFragment"
android:name="jp.co.soramitsu.staking.impl.presentation.setup.pool.StartStakingPoolFragment"
Expand Down Expand Up @@ -861,12 +876,13 @@
app:popUpTo="@id/mainFragment" />

<action
android:id="@+id/back_to_asset_details"
android:id="@+id/close_swap"
app:enterAnim="?android:attr/fragmentCloseEnterAnimation"
app:exitAnim="?android:attr/fragmentCloseExitAnimation"
app:popEnterAnim="?android:attr/fragmentOpenEnterAnimation"
app:popExitAnim="?android:attr/fragmentOpenExitAnimation"
app:popUpTo="@id/balanceDetailFragment" />
app:popUpTo="@id/swapTokensFragment"
app:popUpToInclusive="true" />

<fragment
android:id="@+id/confirmStakingFragment"
Expand Down
21 changes: 18 additions & 3 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
apply from: './scripts/secrets.gradle'

buildscript {
ext {
// App version
Expand All @@ -22,9 +24,10 @@ buildscript {
biometricVersion = '1.1.0'

progressButtonsVersion = '2.1.0'
xNetworkingVersion = '0.0.46'
xNetworkingVersion = '0.0.55'
soraCardVersion = '0.0.30'

daggerVersion = '2.43'
daggerVersion = '2.45'
javaxInjectVersion = '1'

architectureComponentVersion = '2.5.1'
Expand Down Expand Up @@ -170,6 +173,8 @@ buildscript {

gifDep = "pl.droidsonroids.gif:android-gif-drawable:$gifVersion"

withoutBouncycastle = { exclude group: 'org.bouncycastle' }
soraCardDep = "jp.co.soramitsu:android-sora-card:$soraCardVersion"
wsDep = "com.neovisionaries:nv-websocket-client:$wsVersion"
xNetworkingDep = "jp.co.soramitsu:XNetworking-android:$xNetworkingVersion"

Expand Down Expand Up @@ -209,10 +214,13 @@ buildscript {
dependencies {
classpath 'com.android.tools.build:gradle:7.3.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlinVersion"
classpath 'com.google.gms:google-services:4.3.15'
classpath "com.google.firebase:firebase-appdistribution-gradle:$firebaseAppDistrVersion"
classpath "com.github.triplet.gradle:play-publisher:$playPublisherVersion"
classpath "com.google.dagger:hilt-android-gradle-plugin:$daggerVersion"
// Add the dependency for the Crashlytics Gradle plugin
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.4'
}
}

Expand All @@ -224,6 +232,14 @@ allprojects {
maven { url "https://nexus.iroha.tech/repository/maven-soramitsu/" }
mavenCentral()
mavenLocal()

maven {
url = readSecret("PAY_WINGS_REPOSITORY_URL")
credentials {
username = readSecret("PAY_WINGS_USERNAME")
password = readSecret("PAY_WINGS_PASSWORD")
}
}
}
}

Expand All @@ -238,7 +254,6 @@ task clean(type: Delete) {
dependencies {

ktlint("com.pinterest:ktlint:$ktlintPinterestVersion") {
// ktlint("com.pinterest:ktlint:0.46.1") {
attributes {
attribute(Bundling.BUNDLING_ATTRIBUTE, getObjects().named(Bundling, Bundling.EXTERNAL))
}
Expand Down
14 changes: 12 additions & 2 deletions common/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ apply plugin: 'dagger.hilt.android.plugin'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-parcelize'
apply plugin: 'kotlinx-serialization'
apply from: '../scripts/secrets.gradle'

android {
compileSdkVersion rootProject.compileSdkVersion
Expand Down Expand Up @@ -42,14 +44,22 @@ android {
buildConfigField "String", "MOONBEAM_STAKING_LEARN_MORE", "\"https://docs.moonbeam.network/learn/features/staking/#reward-distribution(\""
buildConfigField "String", "STAKING_POOL_WIKI", "\"https://wiki.polkadot.network/docs/learn-nomination-pools\""
buildConfigField "String", "POLKADOT_JS_PLUS_EXTENSION", "\"http://polkadotjs.plus/\""

buildConfigField "String", "SORA_CARD_API_KEY", readSecretInQuotes("SORA_CARD_API_KEY")
buildConfigField "String", "SORA_CARD_DOMAIN", readSecretInQuotes("SORA_CARD_DOMAIN")
buildConfigField "String", "SORA_CARD_KYC_ENDPOINT_URL", readSecretInQuotes("SORA_CARD_KYC_ENDPOINT_URL")
buildConfigField "String", "SORA_CARD_KYC_USERNAME", readSecretInQuotes("SORA_CARD_KYC_USERNAME")
buildConfigField "String", "SORA_CARD_KYC_PASSWORD", readSecretInQuotes("SORA_CARD_KYC_PASSWORD")
}

buildTypes {
debug {

buildConfigField "String", "X1_ENDPOINT_URL", readSecretInQuotes("X1_ENDPOINT_URL_DEBUG")
buildConfigField "String", "X1_WIDGET_ID", readSecretInQuotes("X1_WIDGET_ID_DEBUG")
}
release {

buildConfigField "String", "X1_ENDPOINT_URL", readSecretInQuotes("X1_ENDPOINT_URL_RELEASE")
buildConfigField "String", "X1_WIDGET_ID", readSecretInQuotes("X1_WIDGET_ID_RELEASE")
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import android.content.Context
import android.os.Bundle
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.app.AppCompatDelegate
import jp.co.soramitsu.common.resources.ContextManager
import jp.co.soramitsu.common.resources.LanguagesHolder

Expand All @@ -26,6 +27,7 @@ abstract class BaseActivity<T : BaseViewModel> : AppCompatActivity() {
or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
)

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
setContentView(layoutResource())

initViews()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import jp.co.soramitsu.common.compose.theme.FearlessTheme
import jp.co.soramitsu.common.compose.theme.alertYellow
import jp.co.soramitsu.common.compose.theme.black2
import jp.co.soramitsu.common.compose.theme.fontSize
import jp.co.soramitsu.common.compose.theme.soraTextStyle
import jp.co.soramitsu.common.compose.theme.weight
import jp.co.soramitsu.common.compose.theme.white

Expand Down
Loading