@exodus/react-native-wallet 0.1.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +20 -0
- package/README.md +268 -0
- package/android/build.gradle +103 -0
- package/android/gradle.properties +5 -0
- package/android/src/main/AndroidManifestNew.xml +2 -0
- package/android/src/main/java/com/expensify/wallet/Utils.kt +148 -0
- package/android/src/main/java/com/expensify/wallet/WalletModule.kt +380 -0
- package/android/src/main/java/com/expensify/wallet/WalletPackage.kt +48 -0
- package/android/src/main/java/com/expensify/wallet/components/RNAddToWalletButtonManager.kt +19 -0
- package/android/src/main/java/com/expensify/wallet/components/RNAddToWalletButtonView.kt +42 -0
- package/android/src/main/java/com/expensify/wallet/error/InvalidNetworkError.kt +6 -0
- package/android/src/main/java/com/expensify/wallet/event/OnCardActivatedEvent.kt +18 -0
- package/android/src/main/java/com/expensify/wallet/model/CardData.kt +12 -0
- package/android/src/main/java/com/expensify/wallet/model/CardStatus.kt +15 -0
- package/android/src/main/java/com/expensify/wallet/model/TokenizationStatus.kt +7 -0
- package/android/src/main/java/com/expensify/wallet/model/WalletData.kt +7 -0
- package/android/src/main/res/drawable/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable/googlewallet_button_background.xml +5 -0
- package/android/src/main/res/drawable/googlewallet_button_overlay.xml +11 -0
- package/android/src/main/res/drawable-af/add_to_googlewallet_button_content.xml +31 -0
- package/android/src/main/res/drawable-af/badge_add_to_googlewallet_button_content.xml +31 -0
- package/android/src/main/res/drawable-am/add_to_googlewallet_button_content.xml +34 -0
- package/android/src/main/res/drawable-am/badge_add_to_googlewallet_button_content.xml +34 -0
- package/android/src/main/res/drawable-ar/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-ar/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-az/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-az/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-bg/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-bg/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-bn/add_to_googlewallet_button_content.xml +31 -0
- package/android/src/main/res/drawable-bn/badge_add_to_googlewallet_button_content.xml +31 -0
- package/android/src/main/res/drawable-br/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-br/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-bs/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-bs/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-by/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-by/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-ca/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-ca/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-cz/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-cz/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-de/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-de/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-dk/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-dk/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-en-rau/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-en-rau/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-en-rca/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-en-rca/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-en-rgb/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-en-rgb/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-en-rin/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-en-rin/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-en-rsg/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-en-rsg/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-en-rus/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-en-rus/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-en-rza/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-en-rza/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-es-res/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-es-res/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-es-rus/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-es-rus/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-et/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-et/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-fa/add_to_googlewallet_button_content.xml +31 -0
- package/android/src/main/res/drawable-fa/badge_add_to_googlewallet_button_content.xml +34 -0
- package/android/src/main/res/drawable-fl/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-fl/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-fp/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-fp/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-fr-rca/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-fr-rca/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-fr-rfr/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-fr-rfr/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-gr/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-gr/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-hdpi/googlepay_button_background_image.9.png +0 -0
- package/android/src/main/res/drawable-he/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-he/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-hr/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-hr/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-hu/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-hu/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-hy/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-hy/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-id/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-id/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-is/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-is/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-it/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-it/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-jp/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-jp/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-ka/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-ka/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-kh/add_to_googlewallet_button_content.xml +33 -0
- package/android/src/main/res/drawable-kh/badge_add_to_googlewallet_button_content.xml +33 -0
- package/android/src/main/res/drawable-kk/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-kk/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-ky/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-ky/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-lo/add_to_googlewallet_button_content.xml +31 -0
- package/android/src/main/res/drawable-lo/badge_add_to_googlewallet_button_content.xml +31 -0
- package/android/src/main/res/drawable-lt/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-lt/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-lv/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-lv/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-mdpi/googlepay_button_background_image.9.png +0 -0
- package/android/src/main/res/drawable-mk/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-mk/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-mn/add_to_googlewallet_button_content.xml +31 -0
- package/android/src/main/res/drawable-mn/badge_add_to_googlewallet_button_content.xml +31 -0
- package/android/src/main/res/drawable-my/add_to_googlewallet_button_content.xml +31 -0
- package/android/src/main/res/drawable-my/badge_add_to_googlewallet_button_content.xml +31 -0
- package/android/src/main/res/drawable-ne/add_to_googlewallet_button_content.xml +28 -0
- package/android/src/main/res/drawable-ne/badge_add_to_googlewallet_button_content.xml +31 -0
- package/android/src/main/res/drawable-nl/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-nl/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-no/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-no/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-pl/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-pl/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-pt/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-pt/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-ro/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-ro/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-ru/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-ru/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-se/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-se/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-si/add_to_googlewallet_button_content.xml +31 -0
- package/android/src/main/res/drawable-si/badge_add_to_googlewallet_button_content.xml +31 -0
- package/android/src/main/res/drawable-sk/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-sk/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-sl/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-sl/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-sq/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-sq/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-sr/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-sr/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-sw/add_to_googlewallet_button_content.xml +31 -0
- package/android/src/main/res/drawable-sw/badge_add_to_googlewallet_button_content.xml +31 -0
- package/android/src/main/res/drawable-th/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-th/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-tr/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-tr/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-uk/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-uk/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-ur/add_to_googlewallet_button_content.xml +34 -0
- package/android/src/main/res/drawable-ur/badge_add_to_googlewallet_button_content.xml +34 -0
- package/android/src/main/res/drawable-uz/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-uz/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-vi/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-vi/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-xhdpi/googlepay_button_background_image.9.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/googlepay_button_background_image.9.png +0 -0
- package/android/src/main/res/drawable-xxxhdpi/googlepay_button_background_image.9.png +0 -0
- package/android/src/main/res/drawable-zh-rhk/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-zh-rhk/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-zh-rtw/add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/drawable-zh-rtw/badge_add_to_googlewallet_button_content.xml +7 -0
- package/android/src/main/res/layout/add_to_googlewallet_badge.xml +35 -0
- package/android/src/main/res/layout/add_to_googlewallet_button.xml +34 -0
- package/android/src/main/res/values/googlewallet_strings.xml +7 -0
- package/android/src/paper/java/com/expensify/wallet/NativeWalletSpec.java +83 -0
- package/assets/buttons/android_button.svg +16 -0
- package/assets/buttons/ios_button.svg +259 -0
- package/assets/hero-image.png +0 -0
- package/assets/signature-dark.png +0 -0
- package/assets/signature-light.png +0 -0
- package/ios/RNAddToWalletButtonBridge.m +8 -0
- package/ios/RNWallet.h +13 -0
- package/ios/RNWallet.mm +153 -0
- package/ios/WalletManager.swift +297 -0
- package/ios/components/RNAddToWalletButtonManager.swift +13 -0
- package/ios/components/RNAddToWalletButtonView.swift +67 -0
- package/ios/stucts/AddPassResponse.swift +36 -0
- package/ios/stucts/CardInfo.swift +37 -0
- package/ios/stucts/WalletEncryptedPayload.swift +27 -0
- package/lib/commonjs/AddToWalletButton.js +83 -0
- package/lib/commonjs/AddToWalletButton.js.map +1 -0
- package/lib/commonjs/NativeWallet.js +22 -0
- package/lib/commonjs/NativeWallet.js.map +1 -0
- package/lib/commonjs/index.js +156 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/utils.js +38 -0
- package/lib/commonjs/utils.js.map +1 -0
- package/lib/module/AddToWalletButton.js +76 -0
- package/lib/module/AddToWalletButton.js.map +1 -0
- package/lib/module/NativeWallet.js +17 -0
- package/lib/module/NativeWallet.js.map +1 -0
- package/lib/module/index.js +132 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/utils.js +32 -0
- package/lib/module/utils.js.map +1 -0
- package/lib/typescript/src/AddToWalletButton.d.ts +16 -0
- package/lib/typescript/src/AddToWalletButton.d.ts.map +1 -0
- package/lib/typescript/src/NativeWallet.d.ts +77 -0
- package/lib/typescript/src/NativeWallet.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +22 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/utils.d.ts +5 -0
- package/lib/typescript/src/utils.d.ts.map +1 -0
- package/package.json +157 -0
- package/react-native-wallet.podspec +36 -0
- package/src/AddToWalletButton.tsx +78 -0
- package/src/NativeWallet.ts +115 -0
- package/src/index.tsx +184 -0
- package/src/utils.ts +35 -0
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
package com.expensify.wallet
|
|
2
|
+
|
|
3
|
+
import android.app.Activity
|
|
4
|
+
import android.app.Activity.RESULT_CANCELED
|
|
5
|
+
import android.app.Activity.RESULT_OK
|
|
6
|
+
import android.content.ActivityNotFoundException
|
|
7
|
+
import android.content.Intent
|
|
8
|
+
import com.facebook.react.bridge.ActivityEventListener
|
|
9
|
+
import com.facebook.react.bridge.Arguments
|
|
10
|
+
import com.facebook.react.bridge.Promise
|
|
11
|
+
import com.facebook.react.bridge.PromiseImpl
|
|
12
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
13
|
+
import com.facebook.react.bridge.ReactContext
|
|
14
|
+
import com.facebook.react.bridge.ReactMethod
|
|
15
|
+
import com.facebook.react.bridge.ReadableMap
|
|
16
|
+
import com.facebook.react.bridge.WritableMap
|
|
17
|
+
import com.facebook.react.modules.core.DeviceEventManagerModule
|
|
18
|
+
import com.google.android.gms.tapandpay.TapAndPay
|
|
19
|
+
import com.google.android.gms.tapandpay.TapAndPayClient
|
|
20
|
+
import com.google.android.gms.tapandpay.issuer.PushTokenizeRequest
|
|
21
|
+
import kotlinx.coroutines.CoroutineScope
|
|
22
|
+
import kotlinx.coroutines.Dispatchers
|
|
23
|
+
import kotlinx.coroutines.launch
|
|
24
|
+
import kotlinx.coroutines.SupervisorJob
|
|
25
|
+
import kotlinx.coroutines.cancel
|
|
26
|
+
import com.expensify.wallet.Utils.getAsyncResult
|
|
27
|
+
import com.expensify.wallet.Utils.toCardData
|
|
28
|
+
import com.expensify.wallet.error.InvalidNetworkError
|
|
29
|
+
import com.expensify.wallet.event.OnCardActivatedEvent
|
|
30
|
+
import com.expensify.wallet.model.CardStatus
|
|
31
|
+
import com.expensify.wallet.model.TokenizationStatus
|
|
32
|
+
import com.expensify.wallet.model.WalletData
|
|
33
|
+
import com.google.android.gms.common.api.ApiException
|
|
34
|
+
import kotlinx.coroutines.Deferred
|
|
35
|
+
import java.nio.charset.Charset
|
|
36
|
+
import java.util.Locale
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class WalletModule internal constructor(context: ReactApplicationContext) :
|
|
40
|
+
NativeWalletSpec(context) {
|
|
41
|
+
companion object {
|
|
42
|
+
const val NAME = "RNWallet"
|
|
43
|
+
const val REQUEST_CODE_PUSH_TOKENIZE: Int = 0xA001
|
|
44
|
+
const val REQUEST_CREATE_WALLET: Int = 0xA002
|
|
45
|
+
|
|
46
|
+
const val E_SDK_API = "SDK API Error"
|
|
47
|
+
const val E_OPERATION_FAILED = "E_OPERATION_FAILED"
|
|
48
|
+
const val E_INVALID_DATA = "E_INVALID_DATA"
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
private val activity: Activity
|
|
52
|
+
get() = reactApplicationContext.currentActivity ?: throw ActivityNotFoundException()
|
|
53
|
+
|
|
54
|
+
private val tapAndPayClient: TapAndPayClient
|
|
55
|
+
get() = TapAndPay.getClient(activity)
|
|
56
|
+
private var pendingCreateWalletPromise: Promise? = null
|
|
57
|
+
private var pendingPushTokenizePromise: Promise? = null
|
|
58
|
+
private val moduleScope = CoroutineScope(SupervisorJob() + Dispatchers.Main)
|
|
59
|
+
|
|
60
|
+
override fun initialize() {
|
|
61
|
+
super.initialize()
|
|
62
|
+
reactApplicationContext.addActivityEventListener(cardListener)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
override fun invalidate() {
|
|
66
|
+
super.invalidate()
|
|
67
|
+
moduleScope.cancel()
|
|
68
|
+
reactApplicationContext.removeActivityEventListener(cardListener)
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
private val cardListener = object : ActivityEventListener {
|
|
72
|
+
override fun onActivityResult(
|
|
73
|
+
activity: Activity, requestCode: Int, resultCode: Int, data: Intent?
|
|
74
|
+
) {
|
|
75
|
+
if (requestCode == REQUEST_CREATE_WALLET) {
|
|
76
|
+
pendingCreateWalletPromise?.resolve(resultCode == RESULT_OK)
|
|
77
|
+
pendingCreateWalletPromise = null
|
|
78
|
+
} else if (requestCode == REQUEST_CODE_PUSH_TOKENIZE) {
|
|
79
|
+
val localPromise = pendingPushTokenizePromise
|
|
80
|
+
pendingPushTokenizePromise = null
|
|
81
|
+
if (resultCode == RESULT_OK) {
|
|
82
|
+
if (data == null) {
|
|
83
|
+
localPromise?.reject(E_OPERATION_FAILED, "Tokenization returned RESULT_OK but intent data was null")
|
|
84
|
+
return
|
|
85
|
+
}
|
|
86
|
+
val tokenId = data.getStringExtra(TapAndPay.EXTRA_ISSUER_TOKEN_ID).toString()
|
|
87
|
+
sendEvent(
|
|
88
|
+
context,
|
|
89
|
+
OnCardActivatedEvent.NAME,
|
|
90
|
+
OnCardActivatedEvent("active", tokenId).toMap()
|
|
91
|
+
)
|
|
92
|
+
localPromise?.resolve(TokenizationStatus.SUCCESS.code)
|
|
93
|
+
} else if (resultCode == RESULT_CANCELED) {
|
|
94
|
+
sendEvent(
|
|
95
|
+
context,
|
|
96
|
+
OnCardActivatedEvent.NAME,
|
|
97
|
+
OnCardActivatedEvent("canceled", null).toMap()
|
|
98
|
+
)
|
|
99
|
+
localPromise?.resolve(TokenizationStatus.CANCELED.code)
|
|
100
|
+
} else {
|
|
101
|
+
localPromise?.reject(E_OPERATION_FAILED, "Tokenization failed with resultCode=$resultCode")
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
override fun onNewIntent(intent: Intent) {}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
@ReactMethod
|
|
110
|
+
override fun ensureGoogleWalletInitialized(promise: Promise) {
|
|
111
|
+
val localPromise = PromiseImpl({ _ ->
|
|
112
|
+
promise.resolve(true)
|
|
113
|
+
}, { _ ->
|
|
114
|
+
pendingCreateWalletPromise = promise
|
|
115
|
+
tapAndPayClient.createWallet(activity, REQUEST_CREATE_WALLET)
|
|
116
|
+
})
|
|
117
|
+
getWalletId(localPromise)
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
@ReactMethod
|
|
121
|
+
override fun checkWalletAvailability(promise: Promise) {
|
|
122
|
+
tapAndPayClient.environment.addOnCompleteListener { task ->
|
|
123
|
+
promise.resolve(task.isSuccessful)
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
@ReactMethod
|
|
127
|
+
override fun getSecureWalletInfo(promise: Promise) {
|
|
128
|
+
moduleScope.launch {
|
|
129
|
+
try {
|
|
130
|
+
val walletId = getWalletIdAsync()
|
|
131
|
+
val hardwareId = getHardwareIdAsync()
|
|
132
|
+
val walletData = WalletData(
|
|
133
|
+
platform = "android", deviceID = hardwareId.await(), walletAccountID = walletId.await()
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
val walletDataMap: WritableMap = Arguments.createMap().apply {
|
|
137
|
+
putString("platform", walletData.platform)
|
|
138
|
+
putString("deviceID", walletData.deviceID)
|
|
139
|
+
putString("walletAccountID", walletData.walletAccountID)
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
promise.resolve(walletDataMap)
|
|
143
|
+
} catch (e: ApiException) {
|
|
144
|
+
promise.reject(E_SDK_API, e.localizedMessage)
|
|
145
|
+
} catch (e: Exception) {
|
|
146
|
+
promise.reject(E_OPERATION_FAILED, "Failed to retrieve IDs: ${e.localizedMessage}")
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
@ReactMethod
|
|
152
|
+
override fun getCardStatusBySuffix(last4Digits: String, promise: Promise) {
|
|
153
|
+
tapAndPayClient.listTokens()
|
|
154
|
+
.addOnCompleteListener { task ->
|
|
155
|
+
if (!task.isSuccessful || task.result == null) {
|
|
156
|
+
promise.resolve(CardStatus.NOT_FOUND_IN_WALLET.code)
|
|
157
|
+
return@addOnCompleteListener
|
|
158
|
+
}
|
|
159
|
+
task.result.find { it.fpanLastFour == last4Digits }?.let {
|
|
160
|
+
promise.resolve(
|
|
161
|
+
getCardStatusCode(it.tokenState)
|
|
162
|
+
)
|
|
163
|
+
} ?: promise.resolve(CardStatus.NOT_FOUND_IN_WALLET.code)
|
|
164
|
+
}
|
|
165
|
+
.addOnFailureListener { e ->
|
|
166
|
+
promise.reject(E_OPERATION_FAILED, "getCardStatusBySuffix: ${e.localizedMessage}")
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
@ReactMethod
|
|
171
|
+
override fun getCardStatusByIdentifier(identifier: String, tsp: String, promise: Promise) {
|
|
172
|
+
tapAndPayClient.getTokenStatus(getTokenServiceProvider(tsp), identifier)
|
|
173
|
+
.addOnCompleteListener { task ->
|
|
174
|
+
if (!task.isSuccessful || task.result == null) {
|
|
175
|
+
promise.resolve(CardStatus.NOT_FOUND_IN_WALLET.code)
|
|
176
|
+
return@addOnCompleteListener
|
|
177
|
+
}
|
|
178
|
+
task.result?.let {
|
|
179
|
+
promise.resolve(
|
|
180
|
+
getCardStatusCode(it.tokenState)
|
|
181
|
+
)
|
|
182
|
+
} ?: promise.resolve(CardStatus.NOT_FOUND_IN_WALLET.code)
|
|
183
|
+
}
|
|
184
|
+
.addOnFailureListener { e ->
|
|
185
|
+
promise.reject(E_OPERATION_FAILED, "getCardStatusByIdentifier: ${e.localizedMessage}")
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
@ReactMethod
|
|
190
|
+
override fun addCardToGoogleWallet(
|
|
191
|
+
data: ReadableMap, promise: Promise
|
|
192
|
+
) {
|
|
193
|
+
if (pendingPushTokenizePromise != null) {
|
|
194
|
+
return promise.reject(E_OPERATION_FAILED, "A tokenization request is already in progress")
|
|
195
|
+
}
|
|
196
|
+
try {
|
|
197
|
+
val cardData = data.toCardData() ?: return promise.reject(E_INVALID_DATA, "Insufficient data")
|
|
198
|
+
val cardNetwork = getCardNetwork(cardData.network)
|
|
199
|
+
val tokenServiceProvider = getTokenServiceProvider(cardData.network)
|
|
200
|
+
val displayName = getDisplayName(data, cardData.network)
|
|
201
|
+
pendingPushTokenizePromise = promise
|
|
202
|
+
|
|
203
|
+
val pushTokenizeRequest = PushTokenizeRequest.Builder()
|
|
204
|
+
.setOpaquePaymentCard(cardData.opaquePaymentCard.toByteArray(Charset.forName("UTF-8")))
|
|
205
|
+
.setNetwork(cardNetwork)
|
|
206
|
+
.setTokenServiceProvider(tokenServiceProvider)
|
|
207
|
+
.setDisplayName(displayName)
|
|
208
|
+
.setLastDigits(cardData.lastDigits)
|
|
209
|
+
.setUserAddress(cardData.userAddress)
|
|
210
|
+
.build()
|
|
211
|
+
|
|
212
|
+
tapAndPayClient.pushTokenize(
|
|
213
|
+
activity, pushTokenizeRequest, REQUEST_CODE_PUSH_TOKENIZE
|
|
214
|
+
)
|
|
215
|
+
} catch (e: java.lang.Exception) {
|
|
216
|
+
promise.reject(e)
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
@ReactMethod
|
|
221
|
+
override fun resumeAddCardToGoogleWallet(data: ReadableMap, promise: Promise) {
|
|
222
|
+
if (pendingPushTokenizePromise != null) {
|
|
223
|
+
return promise.reject(E_OPERATION_FAILED, "A tokenization request is already in progress")
|
|
224
|
+
}
|
|
225
|
+
try {
|
|
226
|
+
val tokenReferenceID = data.getString("tokenReferenceID")
|
|
227
|
+
?: return promise.reject(E_INVALID_DATA, "Missing tokenReferenceID")
|
|
228
|
+
|
|
229
|
+
val network = data.getString("network")
|
|
230
|
+
?: return promise.reject(E_INVALID_DATA, "Missing network")
|
|
231
|
+
|
|
232
|
+
val cardNetwork = getCardNetwork(network)
|
|
233
|
+
val tokenServiceProvider = getTokenServiceProvider(network)
|
|
234
|
+
val displayName = getDisplayName(data, network)
|
|
235
|
+
pendingPushTokenizePromise = promise
|
|
236
|
+
|
|
237
|
+
tapAndPayClient.tokenize(
|
|
238
|
+
activity,
|
|
239
|
+
tokenReferenceID,
|
|
240
|
+
tokenServiceProvider,
|
|
241
|
+
displayName,
|
|
242
|
+
cardNetwork,
|
|
243
|
+
REQUEST_CODE_PUSH_TOKENIZE
|
|
244
|
+
)
|
|
245
|
+
} catch (e: java.lang.Exception) {
|
|
246
|
+
promise.reject(e)
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
@ReactMethod
|
|
251
|
+
override fun listTokens(promise: Promise) {
|
|
252
|
+
tapAndPayClient.listTokens()
|
|
253
|
+
.addOnCompleteListener { task ->
|
|
254
|
+
if (!task.isSuccessful || task.result == null) {
|
|
255
|
+
promise.resolve(Arguments.createArray())
|
|
256
|
+
return@addOnCompleteListener
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
val tokensArray = Arguments.createArray()
|
|
260
|
+
task.result.forEach { tokenInfo ->
|
|
261
|
+
val tokenData = Arguments.createMap().apply {
|
|
262
|
+
putString("identifier", tokenInfo.issuerTokenId)
|
|
263
|
+
putString("lastDigits", tokenInfo.fpanLastFour)
|
|
264
|
+
putInt("tokenState", tokenInfo.tokenState)
|
|
265
|
+
}
|
|
266
|
+
tokensArray.pushMap(tokenData)
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
promise.resolve(tokensArray)
|
|
270
|
+
}
|
|
271
|
+
.addOnFailureListener { e ->
|
|
272
|
+
promise.reject(E_OPERATION_FAILED, "listTokens: ${e.localizedMessage}")
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
private fun getWalletId(promise: Promise) {
|
|
277
|
+
tapAndPayClient.activeWalletId.addOnCompleteListener { task ->
|
|
278
|
+
if (task.isSuccessful) {
|
|
279
|
+
val walletId = task.result
|
|
280
|
+
if (walletId != null) {
|
|
281
|
+
promise.resolve(walletId)
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}.addOnFailureListener { e ->
|
|
285
|
+
promise.reject(E_OPERATION_FAILED, "Wallet id retrieval failed: ${e.localizedMessage}")
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
private fun getHardwareId(promise: Promise) {
|
|
290
|
+
tapAndPayClient.stableHardwareId.addOnCompleteListener { task ->
|
|
291
|
+
if (task.isSuccessful) {
|
|
292
|
+
val hardwareId = task.result
|
|
293
|
+
promise.resolve(hardwareId)
|
|
294
|
+
}
|
|
295
|
+
}.addOnFailureListener { e ->
|
|
296
|
+
promise.reject(E_OPERATION_FAILED, "Stable hardware id retrieval failed: ${e.localizedMessage}")
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
private fun getCardStatusCode(code: Int): Int {
|
|
301
|
+
return when (code) {
|
|
302
|
+
TapAndPay.TOKEN_STATE_ACTIVE -> CardStatus.ACTIVE.code
|
|
303
|
+
TapAndPay.TOKEN_STATE_PENDING -> CardStatus.PENDING.code
|
|
304
|
+
TapAndPay.TOKEN_STATE_SUSPENDED -> CardStatus.SUSPENDED.code
|
|
305
|
+
TapAndPay.TOKEN_STATE_NEEDS_IDENTITY_VERIFICATION -> CardStatus.REQUIRE_AUTHORIZATION.code
|
|
306
|
+
TapAndPay.TOKEN_STATE_FELICA_PENDING_PROVISIONING -> CardStatus.PENDING.code
|
|
307
|
+
else -> CardStatus.NOT_FOUND_IN_WALLET.code
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
private fun getCardNetwork(network: String): Int {
|
|
312
|
+
return when (network.uppercase(Locale.getDefault())) {
|
|
313
|
+
"VISA" -> TapAndPay.CARD_NETWORK_VISA
|
|
314
|
+
"MASTERCARD" -> TapAndPay.CARD_NETWORK_MASTERCARD
|
|
315
|
+
"AMEX" -> TapAndPay.CARD_NETWORK_AMEX
|
|
316
|
+
"DISCOVER" -> TapAndPay.CARD_NETWORK_DISCOVER
|
|
317
|
+
else -> throw InvalidNetworkError()
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
private fun getTokenServiceProvider(network: String): Int {
|
|
322
|
+
return when (network.uppercase(Locale.getDefault())) {
|
|
323
|
+
"VISA" -> TapAndPay.TOKEN_PROVIDER_VISA
|
|
324
|
+
"MASTERCARD" -> TapAndPay.TOKEN_PROVIDER_MASTERCARD
|
|
325
|
+
"AMEX" -> TapAndPay.TOKEN_PROVIDER_AMEX
|
|
326
|
+
"DISCOVER" -> TapAndPay.TOKEN_PROVIDER_DISCOVER
|
|
327
|
+
else -> throw InvalidNetworkError()
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
private suspend fun getWalletIdAsync(): Deferred<String> =
|
|
332
|
+
getAsyncResult(String::class.java) { promise ->
|
|
333
|
+
getWalletId(promise)
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
private suspend fun getHardwareIdAsync(): Deferred<String> =
|
|
337
|
+
getAsyncResult(String::class.java) { promise ->
|
|
338
|
+
getHardwareId(promise)
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
private fun getDisplayName(data: ReadableMap, network: String): String {
|
|
342
|
+
data.getString("cardHolderName")?.let { name ->
|
|
343
|
+
if (name.isNotEmpty()) return name
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
data.getString("lastDigits")?.let { digits ->
|
|
347
|
+
if (digits.isNotEmpty()) {
|
|
348
|
+
return "${network.uppercase(Locale.getDefault())} Card *$digits"
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
return "${network.uppercase(Locale.getDefault())} Card"
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
private fun sendEvent(reactContext: ReactContext, eventName: String, params: WritableMap?) {
|
|
356
|
+
reactContext
|
|
357
|
+
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
|
|
358
|
+
.emit(eventName, params)
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
override fun IOSPresentAddPaymentPassView(cardData: ReadableMap?, promise: Promise?) {
|
|
362
|
+
// no-op
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
override fun IOSHandleAddPaymentPassResponse(payload: ReadableMap?, promise: Promise?) {
|
|
366
|
+
// no-op
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
override fun addListener(eventType: String?) {
|
|
370
|
+
// no-op
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
override fun removeListeners(count: Double) {
|
|
374
|
+
// no-op
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
override fun getName(): String {
|
|
378
|
+
return NAME
|
|
379
|
+
}
|
|
380
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
package com.expensify.wallet
|
|
2
|
+
|
|
3
|
+
import com.expensify.wallet.components.RNAddToWalletButtonManager
|
|
4
|
+
import com.facebook.react.BaseReactPackage
|
|
5
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
6
|
+
import com.facebook.react.bridge.NativeModule
|
|
7
|
+
import com.facebook.react.module.annotations.ReactModuleList
|
|
8
|
+
import com.facebook.react.module.model.ReactModuleInfoProvider
|
|
9
|
+
import com.facebook.react.module.model.ReactModuleInfo
|
|
10
|
+
import java.util.HashMap
|
|
11
|
+
import com.facebook.react.uimanager.ViewManager
|
|
12
|
+
|
|
13
|
+
// Fool auto linking for older versions that do not support BaseReactPackage.
|
|
14
|
+
// public class WalletPackage implements TurboReactPackage {
|
|
15
|
+
@ReactModuleList(
|
|
16
|
+
nativeModules = [
|
|
17
|
+
WalletModule::class,
|
|
18
|
+
],
|
|
19
|
+
)
|
|
20
|
+
class WalletPackage : BaseReactPackage() {
|
|
21
|
+
override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? {
|
|
22
|
+
return if (name == WalletModule.NAME) {
|
|
23
|
+
WalletModule(reactContext)
|
|
24
|
+
} else {
|
|
25
|
+
null
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
override fun getReactModuleInfoProvider(): ReactModuleInfoProvider {
|
|
30
|
+
return ReactModuleInfoProvider {
|
|
31
|
+
val moduleInfos: MutableMap<String, ReactModuleInfo> = HashMap()
|
|
32
|
+
val isTurboModule: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
|
|
33
|
+
moduleInfos[WalletModule.NAME] = ReactModuleInfo(
|
|
34
|
+
WalletModule.NAME,
|
|
35
|
+
WalletModule.NAME,
|
|
36
|
+
canOverrideExistingModule = false,
|
|
37
|
+
needsEagerInit = false,
|
|
38
|
+
hasConstants = true,
|
|
39
|
+
isCxxModule = false,
|
|
40
|
+
isTurboModule
|
|
41
|
+
)
|
|
42
|
+
moduleInfos
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
override fun createViewManagers(reactContext: com.facebook.react.bridge.ReactApplicationContext)
|
|
47
|
+
: List<ViewManager<*, *>> = listOf(RNAddToWalletButtonManager())
|
|
48
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
package com.expensify.wallet.components
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.uimanager.SimpleViewManager
|
|
4
|
+
import com.facebook.react.uimanager.ThemedReactContext
|
|
5
|
+
import com.facebook.react.uimanager.annotations.ReactProp
|
|
6
|
+
|
|
7
|
+
class RNAddToWalletButtonManager : SimpleViewManager<RNAddToWalletButtonView>() {
|
|
8
|
+
|
|
9
|
+
override fun getName(): String = "RNAddToWalletButton"
|
|
10
|
+
|
|
11
|
+
override fun createViewInstance(reactContext: ThemedReactContext): RNAddToWalletButtonView {
|
|
12
|
+
return RNAddToWalletButtonView(reactContext)
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@ReactProp(name = "buttonType")
|
|
16
|
+
fun setButtonType(view: RNAddToWalletButtonView, type: String) {
|
|
17
|
+
view.setButtonType(type)
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
package com.expensify.wallet.components
|
|
2
|
+
|
|
3
|
+
import android.content.Context
|
|
4
|
+
import android.widget.FrameLayout
|
|
5
|
+
import com.expensify.wallet.R
|
|
6
|
+
import android.view.LayoutInflater
|
|
7
|
+
import android.view.View
|
|
8
|
+
|
|
9
|
+
class RNAddToWalletButtonView(context: Context) : FrameLayout(context) {
|
|
10
|
+
|
|
11
|
+
private var buttonView: View? = null
|
|
12
|
+
private var buttonType: String = "basic"
|
|
13
|
+
|
|
14
|
+
init {
|
|
15
|
+
setupButton()
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
fun setButtonType(type: String) {
|
|
19
|
+
if (buttonType != type) {
|
|
20
|
+
buttonType = type
|
|
21
|
+
setupButton()
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
private fun setupButton() {
|
|
26
|
+
removeAllViews()
|
|
27
|
+
|
|
28
|
+
val inflater = LayoutInflater.from(context)
|
|
29
|
+
val layoutId = when (buttonType.lowercase()) {
|
|
30
|
+
"badge" -> R.layout.add_to_googlewallet_badge
|
|
31
|
+
else -> R.layout.add_to_googlewallet_button
|
|
32
|
+
}
|
|
33
|
+
buttonView = inflater.inflate(layoutId, this, false).apply {
|
|
34
|
+
layoutParams = LayoutParams(
|
|
35
|
+
LayoutParams.MATCH_PARENT,
|
|
36
|
+
LayoutParams.MATCH_PARENT
|
|
37
|
+
)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
addView(buttonView)
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
package com.expensify.wallet.event
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.Arguments
|
|
4
|
+
import com.facebook.react.bridge.WritableMap
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class OnCardActivatedEvent(private val status: String, private val tokenId: String?) {
|
|
8
|
+
companion object {
|
|
9
|
+
const val NAME = "onCardActivated"
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
fun toMap(): WritableMap? {
|
|
13
|
+
val params = Arguments.createMap()
|
|
14
|
+
params.putString("status", status)
|
|
15
|
+
params.putString("tokenId", tokenId)
|
|
16
|
+
return params
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
package com.expensify.wallet.model
|
|
2
|
+
|
|
3
|
+
import com.google.android.gms.tapandpay.issuer.UserAddress
|
|
4
|
+
|
|
5
|
+
data class CardData(
|
|
6
|
+
val platform: String = "android",
|
|
7
|
+
val network: String,
|
|
8
|
+
val opaquePaymentCard: String,
|
|
9
|
+
val cardHolderName: String,
|
|
10
|
+
val lastDigits: String,
|
|
11
|
+
val userAddress: UserAddress,
|
|
12
|
+
)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
package com.expensify.wallet.model
|
|
2
|
+
|
|
3
|
+
enum class CardStatus(val code: Int, val message: String) {
|
|
4
|
+
NOT_FOUND_IN_WALLET(-1, "The card can't be found in your active wallet"),
|
|
5
|
+
ACTIVE(0, "The card is ready to use."),
|
|
6
|
+
REQUIRE_AUTHORIZATION(1, "The card requires identity verification."),
|
|
7
|
+
PENDING(2, "The card is pending."),
|
|
8
|
+
SUSPENDED(3, "The card has been suspended."),
|
|
9
|
+
DEACTIVATED(4, "The card is deactivated.");
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
override fun toString(): String {
|
|
13
|
+
return "$message (Code: $code)"
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<vector android:width="241dp" android:height="28dp" android:viewportWidth="241" android:viewportHeight="28" xmlns:android="http://schemas.android.com/apk/res/android">
|
|
2
|
+
<path android:pathData="M30 11H0V6c0-2.71429 2.20184-5 4.81651-5H25.1835C27.7982 1 30 3.28571 30 6v5z" android:fillColor="#34a853"/>
|
|
3
|
+
<path android:pathData="M30 15.0537H0v-5c0-2.71427 2.20184-4.99999 4.81651-4.99999H25.1835C27.7982 5.05371 30 7.33943 30 10.0537v5z" android:fillColor="#fbbc04"/>
|
|
4
|
+
<path android:pathData="M30 19.2468H0v-5c0-2.7143 2.20184-5.00003 4.81651-5.00003H25.1835C27.7982 9.24677 30 11.5325 30 14.2468v5z" android:fillColor="#ea4335"/>
|
|
5
|
+
<path android:pathData="M0 12.2752l19.0411 4.4037c2.1918 0.5505 4.6575 0 6.4384-1.3761L30 12v10.3211C30 24.9358 27.8082 27 25.2055 27H4.79452C2.19178 27 0 24.9358 0 22.3211V12.2752z" android:fillColor="#4285f4"/>
|
|
6
|
+
<path android:pathData="M42.3 21l5.4-14.32h2.5L55.62 21H53.2l-1.32-3.68h-5.84L44.72 21H42.3zm6.06-10.1l-1.58 4.38h4.36l-1.58-4.38-0.54-1.64H48.9l-0.54 1.64zm12.8928 10.42c-0.92 0-1.7533-0.2267-2.5-0.68-0.7333-0.4667-1.32-1.1067-1.76-1.92-0.4267-0.8267-0.64-1.7667-0.64-2.82s0.2133-1.9867 0.64-2.8c0.44-0.8133 1.0267-1.4533 1.76-1.92 0.7467-0.4667 1.58-0.7 2.5-0.7 0.7867 0 1.46 0.1733 2.02 0.52 0.5733 0.3467 0.9933 0.74 1.26 1.18h0.12l-0.12-1.42V6.68h2.14V21h-2.02v-1.36h-0.12c-0.2667 0.44-0.6867 0.8333-1.26 1.18-0.56 0.3333-1.2333 0.5-2.02 0.5zm0.32-1.98c0.5333 0 1.0333-0.14 1.5-0.42 0.48-0.28 0.86-0.6733 1.14-1.18 0.2933-0.52 0.44-1.1333 0.44-1.84 0-0.7067-0.1467-1.3133-0.44-1.82-0.28-0.52-0.66-0.92-1.14-1.2-0.4667-0.28-0.9667-0.42-1.5-0.42s-1.0333 0.14-1.5 0.42c-0.4667 0.28-0.8467 0.68-1.14 1.2-0.2933 0.5067-0.44 1.1133-0.44 1.82 0 0.7067 0.1467 1.32 0.44 1.84 0.2933 0.5067 0.6733 0.9 1.14 1.18 0.4667 0.28 0.9667 0.42 1.5 0.42zm11.9066 1.98c-0.92 0-1.7534-0.2267-2.5-0.68-0.7334-0.4667-1.32-1.1067-1.76-1.92-0.4267-0.8267-0.64-1.7667-0.64-2.82s0.2133-1.9867 0.64-2.8c0.44-0.8133 1.0266-1.4533 1.76-1.92 0.7466-0.4667 1.58-0.7 2.5-0.7 0.7866 0 1.46 0.1733 2.02 0.52 0.5733 0.3467 0.9933 0.74 1.26 1.18h0.12l-0.12-1.42V6.68h2.14V21h-2.02v-1.36h-0.12c-0.2667 0.44-0.6867 0.8333-1.26 1.18-0.56 0.3333-1.2334 0.5-2.02 0.5zm0.32-1.98c0.5333 0 1.0333-0.14 1.5-0.42 0.48-0.28 0.86-0.6733 1.14-1.18 0.2933-0.52 0.44-1.1333 0.44-1.84 0-0.7067-0.1467-1.3133-0.44-1.82-0.28-0.52-0.66-0.92-1.14-1.2-0.4667-0.28-0.9667-0.42-1.5-0.42-0.5334 0-1.0334 0.14-1.5 0.42-0.4667 0.28-0.8467 0.68-1.14 1.2-0.2934 0.5067-0.44 1.1133-0.44 1.82 0 0.7067 0.1466 1.32 0.44 1.84 0.2933 0.5067 0.6733 0.9 1.14 1.18 0.4666 0.28 0.9666 0.42 1.5 0.42zm13.3922-1.3v-5.36h-1.78V10.8h1.78V7.92h2.16v2.88h2.5v1.88h-2.5v4.9c0 0.5067 0.1 0.8933 0.3 1.16 0.2133 0.2667 0.5666 0.4 1.06 0.4 0.2533 0 0.4666-0.0333 0.64-0.1 0.1866-0.0667 0.3733-0.16 0.56-0.28v2.1c-0.2267 0.0933-0.4667 0.1667-0.72 0.22-0.2534 0.0533-0.5534 0.08-0.9 0.08-0.9467 0-1.7-0.2733-2.26-0.82-0.56-0.56-0.84-1.3267-0.84-2.3zm11.1418 3.28c-1.0533 0-1.98-0.24-2.78-0.72-0.8-0.48-1.4266-1.1267-1.88-1.94-0.4533-0.8133-0.68-1.7333-0.68-2.76 0-1.0133 0.2267-1.9267 0.68-2.74 0.4534-0.8267 1.08-1.48 1.88-1.96 0.8-0.48 1.7267-0.72 2.78-0.72 1.04 0 1.9596 0.24 2.7596 0.72 0.8 0.48 1.427 1.1333 1.88 1.96 0.454 0.8133 0.68 1.7267 0.68 2.74 0 1.0267-0.226 1.9467-0.68 2.76-0.453 0.8133-1.08 1.46-1.88 1.94-0.8 0.48-1.7196 0.72-2.7596 0.72zm0-1.98c0.56 0 1.08-0.1333 1.56-0.4 0.4796-0.28 0.8666-0.6733 1.1596-1.18 0.307-0.52 0.46-1.14 0.46-1.86 0-0.72-0.153-1.3333-0.46-1.84-0.293-0.52-0.68-0.9133-1.1596-1.18-0.48-0.28-1-0.42-1.56-0.42s-1.0866 0.14-1.58 0.42c-0.48 0.2667-0.8733 0.66-1.18 1.18-0.2933 0.5067-0.44 1.12-0.44 1.84s0.1467 1.34 0.44 1.86c0.3067 0.5067 0.7 0.9 1.18 1.18 0.4934 0.2667 1.02 0.4 1.58 0.4zM118.4 21.32c-1.027 0-1.993-0.1867-2.9-0.56-0.893-0.3733-1.687-0.8933-2.38-1.56-0.693-0.68-1.24-1.4733-1.64-2.38-0.387-0.92-0.58-1.9133-0.58-2.98s0.193-2.0533 0.58-2.96c0.4-0.92 0.94-1.71333 1.62-2.38 0.693-0.68 1.493-1.20667 2.4-1.58 0.907-0.37333 1.873-0.56 2.9-0.56 1.093 0 2.1 0.19333 3.02 0.58 0.933 0.38667 1.713 0.92667 2.34 1.62l-1.52 1.5c-0.467-0.52-1.027-0.92-1.68-1.2-0.64-0.28-1.36-0.42-2.16-0.42-0.947 0-1.82 0.22667-2.62 0.68-0.8 0.44-1.447 1.0667-1.94 1.88-0.48 0.8-0.72 1.7467-0.72 2.84s0.247 2.0467 0.74 2.86c0.493 0.8 1.14 1.4267 1.94 1.88 0.8 0.44 1.673 0.66 2.62 0.66 0.867 0 1.653-0.16 2.36-0.48 0.707-0.3333 1.273-0.8 1.7-1.4 0.44-0.6 0.707-1.32 0.8-2.16h-4.9v-1.94h6.96c0.08 0.36 0.12 0.74 0.12 1.14v0.02c0 1.3867-0.307 2.6-0.92 3.64-0.6 1.0267-1.433 1.8267-2.5 2.4-1.067 0.5733-2.28 0.86-3.64 0.86zm13.5 0c-1.053 0-1.98-0.24-2.78-0.72-0.8-0.48-1.427-1.1267-1.88-1.94-0.453-0.8133-0.68-1.7333-0.68-2.76 0-1.0133 0.227-1.9267 0.68-2.74 0.453-0.8267 1.08-1.48 1.88-1.96 0.8-0.48 1.727-0.72 2.78-0.72 1.04 0 1.96 0.24 2.76 0.72 0.8 0.48 1.427 1.1333 1.88 1.96 0.453 0.8133 0.68 1.7267 0.68 2.74 0 1.0267-0.227 1.9467-0.68 2.76-0.453 0.8133-1.08 1.46-1.88 1.94-0.8 0.48-1.72 0.72-2.76 0.72zm0-1.98c0.56 0 1.08-0.1333 1.56-0.4 0.48-0.28 0.867-0.6733 1.16-1.18 0.307-0.52 0.46-1.14 0.46-1.86 0-0.72-0.153-1.3333-0.46-1.84-0.293-0.52-0.68-0.9133-1.16-1.18-0.48-0.28-1-0.42-1.56-0.42s-1.087 0.14-1.58 0.42c-0.48 0.2667-0.873 0.66-1.18 1.18-0.293 0.5067-0.44 1.12-0.44 1.84s0.147 1.34 0.44 1.86c0.307 0.5067 0.7 0.9 1.18 1.18 0.493 0.2667 1.02 0.4 1.58 0.4zm12.109 1.98c-1.053 0-1.98-0.24-2.78-0.72-0.8-0.48-1.426-1.1267-1.88-1.94-0.453-0.8133-0.68-1.7333-0.68-2.76 0-1.0133 0.227-1.9267 0.68-2.74 0.454-0.8267 1.08-1.48 1.88-1.96 0.8-0.48 1.727-0.72 2.78-0.72 1.04 0 1.96 0.24 2.76 0.72 0.8 0.48 1.427 1.1333 1.88 1.96 0.454 0.8133 0.68 1.7267 0.68 2.74 0 1.0267-0.226 1.9467-0.68 2.76-0.453 0.8133-1.08 1.46-1.88 1.94-0.8 0.48-1.72 0.72-2.76 0.72zm0-1.98c0.56 0 1.08-0.1333 1.56-0.4 0.48-0.28 0.867-0.6733 1.16-1.18 0.307-0.52 0.46-1.14 0.46-1.86 0-0.72-0.153-1.3333-0.46-1.84-0.293-0.52-0.68-0.9133-1.16-1.18-0.48-0.28-1-0.42-1.56-0.42s-1.086 0.14-1.58 0.42c-0.48 0.2667-0.873 0.66-1.18 1.18-0.293 0.5067-0.44 1.12-0.44 1.84s0.147 1.34 0.44 1.86c0.307 0.5067 0.7 0.9 1.18 1.18 0.494 0.2667 1.02 0.4 1.58 0.4zm11.91 6.3c-0.894 0-1.667-0.1467-2.32-0.44-0.64-0.28-1.16-0.6467-1.56-1.1-0.4-0.44-0.687-0.8933-0.86-1.36l2-0.84c0.213 0.5333 0.553 0.9667 1.02 1.3 0.48 0.3467 1.053 0.52 1.72 0.52 0.933 0 1.666-0.28 2.2-0.84 0.546-0.56 0.82-1.3533 0.82-2.38v-0.98h-0.12c-0.32 0.48-0.767 0.8667-1.34 1.16-0.56 0.28-1.2 0.42-1.92 0.42-0.867 0-1.66-0.22-2.38-0.66-0.72-0.44-1.3-1.0533-1.74-1.84-0.44-0.8-0.66-1.7333-0.66-2.8 0-1.08 0.22-2.0133 0.66-2.8 0.44-0.8 1.02-1.42 1.74-1.86 0.72-0.44 1.513-0.66 2.38-0.66 0.72 0 1.36 0.1467 1.92 0.44 0.573 0.2933 1.02 0.68 1.34 1.16h0.12V10.8h2.06v9.66c0 1.1067-0.22 2.0467-0.66 2.82-0.427 0.7733-1.02 1.36-1.78 1.76-0.76 0.4-1.64 0.6-2.64 0.6zm0.02-6.5c0.533 0 1.026-0.1267 1.48-0.38 0.453-0.2667 0.82-0.6467 1.1-1.14 0.28-0.5067 0.42-1.1133 0.42-1.82 0-0.7333-0.14-1.3467-0.42-1.84-0.28-0.5067-0.647-0.8867-1.1-1.14-0.454-0.2533-0.947-0.38-1.48-0.38-0.534 0-1.034 0.1333-1.5 0.4-0.454 0.2533-0.82 0.6267-1.1 1.12-0.28 0.4933-0.42 1.1067-0.42 1.84 0 0.72 0.14 1.3333 0.42 1.84 0.28 0.4933 0.646 0.8667 1.1 1.12 0.466 0.2533 0.966 0.38 1.5 0.38zm7.607 1.86V6.68h2.16V21h-2.16zm9.269 0.32c-1 0-1.894-0.2333-2.68-0.7-0.787-0.4667-1.407-1.1067-1.86-1.92-0.44-0.8133-0.66-1.74-0.66-2.78 0-0.9733 0.213-1.8733 0.64-2.7 0.426-0.8267 1.02-1.4867 1.78-1.98 0.773-0.5067 1.66-0.76 2.66-0.76 1.053 0 1.946 0.2267 2.68 0.68 0.746 0.4533 1.313 1.0733 1.7 1.86 0.386 0.7867 0.58 1.6733 0.58 2.66 0 0.1467-0.007 0.28-0.02 0.4 0 0.12-0.007 0.2133-0.02 0.28h-7.88c0.106 1.0133 0.46 1.7733 1.06 2.28 0.613 0.5067 1.306 0.76 2.08 0.76 0.693 0 1.266-0.1533 1.72-0.46 0.453-0.32 0.813-0.7133 1.08-1.18l1.78 0.86c-0.44 0.8-1.04 1.4533-1.8 1.96-0.76 0.4933-1.707 0.74-2.84 0.74zm-0.1-9c-0.72 0-1.334 0.22-1.84 0.66-0.507 0.44-0.847 1.0267-1.02 1.76h5.66c-0.027-0.3467-0.14-0.7067-0.34-1.08-0.2-0.3733-0.507-0.6867-0.92-0.94-0.4-0.2667-0.914-0.4-1.54-0.4zM186.446 21l-3.84-14.32h2.44l2.28 9.3 0.24 1.24h0.12l0.3-1.24 2.88-9.3h2.2l2.76 9.3 0.3 1.22h0.12l0.24-1.22 2.28-9.3h2.42L197.406 21h-2.32l-2.74-9.5-0.32-1.34h-0.12l-0.34 1.34-2.86 9.5h-2.26zm18.756 0.32c-0.733 0-1.386-0.14-1.96-0.42-0.573-0.2933-1.02-0.7-1.34-1.22-0.32-0.52-0.48-1.1133-0.48-1.78 0-0.72 0.187-1.3333 0.56-1.84 0.387-0.52 0.9-0.9133 1.54-1.18 0.64-0.2667 1.347-0.4 2.12-0.4 0.64 0 1.2 0.06 1.68 0.18 0.494 0.12 0.867 0.2467 1.12 0.38V14.5c0-0.6667-0.24-1.2-0.72-1.6-0.48-0.4-1.1-0.6-1.86-0.6-0.52 0-1.013 0.12-1.48 0.36-0.466 0.2267-0.84 0.54-1.12 0.94l-1.48-1.14c0.44-0.6133 1.02-1.0933 1.74-1.44 0.734-0.36 1.534-0.54 2.4-0.54 1.48 0 2.62 0.3667 3.42 1.1 0.8 0.72 1.2 1.7333 1.2 3.04V21h-2.1v-1.26h-0.12c-0.266 0.4133-0.666 0.78-1.2 1.1-0.533 0.32-1.173 0.48-1.92 0.48zm0.38-1.76c0.56 0 1.054-0.1333 1.48-0.4 0.427-0.2667 0.76-0.6133 1-1.04 0.254-0.44 0.38-0.9133 0.38-1.42-0.306-0.1733-0.666-0.3133-1.08-0.42-0.413-0.12-0.853-0.18-1.32-0.18-0.88 0-1.506 0.18-1.88 0.54-0.373 0.3467-0.56 0.7733-0.56 1.28 0 0.48 0.18 0.8733 0.54 1.18 0.36 0.3067 0.84 0.46 1.44 0.46zM212.94 21V6.68h2.16V21h-2.16zm4.727 0V6.68h2.16V21h-2.16zm9.269 0.32c-1 0-1.894-0.2333-2.68-0.7-0.787-0.4667-1.407-1.1067-1.86-1.92-0.44-0.8133-0.66-1.74-0.66-2.78 0-0.9733 0.213-1.8733 0.64-2.7 0.426-0.8267 1.02-1.4867 1.78-1.98 0.773-0.5067 1.66-0.76 2.66-0.76 1.053 0 1.946 0.2267 2.68 0.68 0.746 0.4533 1.313 1.0733 1.7 1.86 0.386 0.7867 0.58 1.6733 0.58 2.66 0 0.1467-0.007 0.28-0.02 0.4 0 0.12-0.007 0.2133-0.02 0.28h-7.88c0.106 1.0133 0.46 1.7733 1.06 2.28 0.613 0.5067 1.306 0.76 2.08 0.76 0.693 0 1.266-0.1533 1.72-0.46 0.453-0.32 0.813-0.7133 1.08-1.18l1.78 0.86c-0.44 0.8-1.04 1.4533-1.8 1.96-0.76 0.4933-1.707 0.74-2.84 0.74zm-0.1-9c-0.72 0-1.334 0.22-1.84 0.66-0.507 0.44-0.847 1.0267-1.02 1.76h5.66c-0.027-0.3467-0.14-0.7067-0.34-1.08-0.2-0.3733-0.507-0.6867-0.92-0.94-0.4-0.2667-0.914-0.4-1.54-0.4zm7.731 5.72v-5.36h-1.78V10.8h1.78V7.92h2.16v2.88h2.5v1.88h-2.5v4.9c0 0.5067 0.1 0.8933 0.3 1.16 0.213 0.2667 0.566 0.4 1.06 0.4 0.253 0 0.466-0.0333 0.64-0.1 0.186-0.0667 0.373-0.16 0.56-0.28v2.1c-0.227 0.0933-0.467 0.1667-0.72 0.22-0.254 0.0533-0.554 0.08-0.9 0.08-0.947 0-1.7-0.2733-2.26-0.82-0.56-0.56-0.84-1.3267-0.84-2.3z" android:fillColor="#ffffff"/>
|
|
7
|
+
</vector>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<vector android:width="159dp" android:height="36dp" android:viewportWidth="159" android:viewportHeight="36" xmlns:android="http://schemas.android.com/apk/res/android">
|
|
2
|
+
<path android:pathData="M36 14.291H0V8.64555c0-3.06469 2.6422-5.64548 5.77982-5.64548H30.2202C33.3578 3.00007 36 5.58086 36 8.64555V14.291z" android:fillColor="#34a853"/>
|
|
3
|
+
<path android:pathData="M36 19.5H0v-6c0-3.2571 2.6422-6 5.77982-6H30.2202C33.3578 7.5 36 10.2429 36 13.5v6z" android:fillColor="#fbbc04"/>
|
|
4
|
+
<path android:pathData="M36 24.5H0v-6c0-3.2571 2.6422-6 5.77982-6H30.2202c3.1376 0 5.7798 2.7429 5.7798 6v6z" android:fillColor="#ea4335"/>
|
|
5
|
+
<path android:pathData="M0 15.7409l22.8493 5.1616c2.6302 0.6452 5.5891 0 7.726-1.613L36 15.4183v12.0974c0 3.0647-2.6301 5.4842-5.7534 5.4842H5.75343C2.63014 32.9999 0 30.5804 0 27.5157V15.7409z" android:fillColor="#4285f4"/>
|
|
6
|
+
<path android:pathData="M48.195 12l3.51-9.308h1.625L56.853 12H55.28l-0.858-2.392h-3.796L49.768 12h-1.573zm3.939-6.565l-1.027 2.847h2.834l-1.027-2.847-0.351-1.066h-0.078l-0.351 1.066zm8.3803 6.773c-0.598 0-1.1396-0.1473-1.625-0.442-0.4766-0.3033-0.858-0.7193-1.144-1.248-0.2773-0.53733-0.416-1.14833-0.416-1.833 0-0.68467 0.1387-1.29133 0.416-1.82 0.286-0.52867 0.6674-0.94467 1.144-1.248 0.4854-0.30333 1.027-0.455 1.625-0.455 0.5114 0 0.949 0.11267 1.313 0.338 0.3727 0.22533 0.6457 0.481 0.819 0.767h0.078l-0.078-0.923V2.692h1.391V12h-1.313v-0.884h-0.078c-0.1733 0.286-0.4463 0.5417-0.819 0.767-0.364 0.2167-0.8016 0.325-1.313 0.325zm0.208-1.287c0.3467 0 0.6717-0.091 0.975-0.273 0.312-0.182 0.559-0.4377 0.741-0.767 0.1907-0.338 0.286-0.73667 0.286-1.196 0-0.45933-0.0953-0.85367-0.286-1.183-0.182-0.338-0.429-0.598-0.741-0.78-0.3033-0.182-0.6283-0.273-0.975-0.273-0.3466 0-0.6716 0.091-0.975 0.273-0.3033 0.182-0.5503 0.442-0.741 0.78-0.1906 0.32933-0.286 0.72367-0.286 1.183s0.0954 0.858 0.286 1.196c0.1907 0.3293 0.4377 0.585 0.741 0.767 0.3034 0.182 0.6284 0.273 0.975 0.273zm7.7393 1.287c-0.598 0-1.1397-0.1473-1.625-0.442-0.4767-0.3033-0.858-0.7193-1.144-1.248-0.2773-0.53733-0.416-1.14833-0.416-1.833 0-0.68467 0.1387-1.29133 0.416-1.82 0.286-0.52867 0.6673-0.94467 1.144-1.248 0.4853-0.30333 1.027-0.455 1.625-0.455 0.5113 0 0.949 0.11267 1.313 0.338 0.3727 0.22533 0.6457 0.481 0.819 0.767h0.078l-0.078-0.923V2.692h1.391V12h-1.313v-0.884h-0.078c-0.1733 0.286-0.4463 0.5417-0.819 0.767-0.364 0.2167-0.8017 0.325-1.313 0.325zm0.208-1.287c0.3467 0 0.6717-0.091 0.975-0.273 0.312-0.182 0.559-0.4377 0.741-0.767 0.1907-0.338 0.286-0.73667 0.286-1.196 0-0.45933-0.0953-0.85367-0.286-1.183-0.182-0.338-0.429-0.598-0.741-0.78-0.3033-0.182-0.6283-0.273-0.975-0.273s-0.6717 0.091-0.975 0.273c-0.3033 0.182-0.5503 0.442-0.741 0.78-0.1907 0.32933-0.286 0.72367-0.286 1.183s0.0953 0.858 0.286 1.196c0.1907 0.3293 0.4377 0.585 0.741 0.767 0.3033 0.182 0.6283 0.273 0.975 0.273zm8.7049-0.845V6.592h-1.157V5.37h1.157V3.498h1.404V5.37h1.625v1.222h-1.625v3.185c0 0.3293 0.065 0.5807 0.195 0.754 0.1387 0.1733 0.3683 0.26 0.689 0.26 0.1647 0 0.3033-0.0217 0.416-0.065 0.1213-0.0433 0.2427-0.104 0.364-0.182v1.365c-0.1473 0.0607-0.3033 0.1083-0.468 0.143-0.1647 0.0347-0.3597 0.052-0.585 0.052-0.6153 0-1.105-0.1777-1.469-0.533-0.364-0.364-0.546-0.8623-0.546-1.495zm7.2422 2.132c-0.6846 0-1.287-0.156-1.807-0.468-0.52-0.312-0.9273-0.7323-1.222-1.261-0.2946-0.52867-0.442-1.12667-0.442-1.794 0-0.65867 0.1474-1.25233 0.442-1.781 0.2947-0.53733 0.702-0.962 1.222-1.274 0.52-0.312 1.1224-0.468 1.807-0.468 0.676 0 1.274 0.156 1.794 0.468 0.52 0.312 0.9274 0.73667 1.222 1.274 0.2947 0.52867 0.442 1.12233 0.442 1.781 0 0.66733-0.1473 1.26533-0.442 1.794-0.2946 0.5287-0.702 0.949-1.222 1.261-0.52 0.312-1.118 0.468-1.794 0.468zm0-1.287c0.364 0 0.702-0.0867 1.014-0.26 0.312-0.182 0.5634-0.4377 0.754-0.767 0.1994-0.338 0.299-0.741 0.299-1.209 0-0.468-0.0996-0.86667-0.299-1.196-0.1906-0.338-0.442-0.59367-0.754-0.767-0.312-0.182-0.65-0.273-1.014-0.273s-0.7063 0.091-1.027 0.273c-0.312 0.17333-0.5676 0.429-0.767 0.767-0.1906 0.32933-0.286 0.728-0.286 1.196 0 0.468 0.0954 0.871 0.286 1.209 0.1994 0.3293 0.455 0.585 0.767 0.767 0.3207 0.1733 0.663 0.26 1.027 0.26zM55.14 32.272c-0.8727 0-1.6943-0.1587-2.465-0.476-0.7593-0.3173-1.4337-0.7593-2.023-1.326-0.5893-0.578-1.054-1.2523-1.394-2.023-0.3287-0.782-0.493-1.6263-0.493-2.533 0-0.9067 0.1643-1.7453 0.493-2.516 0.34-0.782 0.799-1.4563 1.377-2.023 0.5893-0.578 1.2693-1.0257 2.04-1.343 0.7707-0.3173 1.5923-0.476 2.465-0.476 0.9293 0 1.785 0.1643 2.567 0.493 0.7933 0.3287 1.4563 0.7877 1.989 1.377l-1.292 1.275c-0.3967-0.442-0.8727-0.782-1.428-1.02-0.544-0.238-1.156-0.357-1.836-0.357-0.8047 0-1.547 0.1927-2.227 0.578-0.68 0.374-1.2297 0.9067-1.649 1.598-0.408 0.68-0.612 1.4847-0.612 2.414 0 0.9293 0.2097 1.7397 0.629 2.431 0.4193 0.68 0.969 1.2127 1.649 1.598 0.68 0.374 1.4223 0.561 2.227 0.561 0.7367 0 1.4053-0.136 2.006-0.408 0.6007-0.2833 1.0823-0.68 1.445-1.19 0.374-0.51 0.6007-1.122 0.68-1.836h-4.165v-1.649h5.916c0.068 0.306 0.102 0.629 0.102 0.969v0.017c0 1.1787-0.2607 2.21-0.782 3.094-0.51 0.8727-1.2183 1.5527-2.125 2.04-0.9067 0.4873-1.938 0.731-3.094 0.731zm11.4749 0c-0.8954 0-1.683-0.204-2.363-0.612-0.68-0.408-1.2127-0.9577-1.598-1.649-0.3854-0.6913-0.578-1.4733-0.578-2.346 0-0.8613 0.1926-1.6377 0.578-2.329 0.3853-0.7027 0.918-1.258 1.598-1.666 0.68-0.408 1.4676-0.612 2.363-0.612 0.884 0 1.666 0.204 2.346 0.612 0.68 0.408 1.2126 0.9633 1.598 1.666 0.3853 0.6913 0.578 1.4677 0.578 2.329 0 0.8727-0.1927 1.6547-0.578 2.346-0.3854 0.6913-0.918 1.241-1.598 1.649-0.68 0.408-1.462 0.612-2.346 0.612zm0-1.683c0.476 0 0.918-0.1133 1.326-0.34 0.408-0.238 0.7366-0.5723 0.986-1.003 0.2606-0.442 0.391-0.969 0.391-1.581s-0.1304-1.1333-0.391-1.564c-0.2494-0.442-0.578-0.7763-0.986-1.003-0.408-0.238-0.85-0.357-1.326-0.357-0.476 0-0.9237 0.119-1.343 0.357-0.408 0.2267-0.7424 0.561-1.003 1.003-0.2494 0.4307-0.374 0.952-0.374 1.564 0 0.612 0.1246 1.139 0.374 1.581 0.2606 0.4307 0.595 0.765 1.003 1.003 0.4193 0.2267 0.867 0.34 1.343 0.34zm10.2929 1.683c-0.8953 0-1.683-0.204-2.363-0.612-0.68-0.408-1.2126-0.9577-1.598-1.649-0.3853-0.6913-0.578-1.4733-0.578-2.346 0-0.8613 0.1927-1.6377 0.578-2.329 0.3854-0.7027 0.918-1.258 1.598-1.666 0.68-0.408 1.4677-0.612 2.363-0.612 0.884 0 1.666 0.204 2.346 0.612 0.68 0.408 1.2127 0.9633 1.598 1.666 0.3854 0.6913 0.578 1.4677 0.578 2.329 0 0.8727-0.1926 1.6547-0.578 2.346-0.3853 0.6913-0.918 1.241-1.598 1.649-0.68 0.408-1.462 0.612-2.346 0.612zm0-1.683c0.476 0 0.918-0.1133 1.326-0.34 0.408-0.238 0.7367-0.5723 0.986-1.003 0.2607-0.442 0.391-0.969 0.391-1.581s-0.1303-1.1333-0.391-1.564c-0.2493-0.442-0.578-0.7763-0.986-1.003-0.408-0.238-0.85-0.357-1.326-0.357-0.476 0-0.9236 0.119-1.343 0.357-0.408 0.2267-0.7423 0.561-1.003 1.003-0.2493 0.4307-0.374 0.952-0.374 1.564 0 0.612 0.1247 1.139 0.374 1.581 0.2607 0.4307 0.595 0.765 1.003 1.003 0.4194 0.2267 0.867 0.34 1.343 0.34zm10.123 5.355c-0.7593 0-1.4167-0.1247-1.972-0.374-0.544-0.238-0.986-0.5497-1.326-0.935-0.34-0.374-0.5837-0.7593-0.731-1.156l1.7-0.714c0.1813 0.4533 0.4703 0.8217 0.867 1.105 0.408 0.2947 0.8953 0.442 1.462 0.442 0.7933 0 1.4167-0.238 1.87-0.714 0.4647-0.476 0.697-1.1503 0.697-2.023v-0.833h-0.102c-0.272 0.408-0.6517 0.7367-1.139 0.986-0.476 0.238-1.02 0.357-1.632 0.357-0.7367 0-1.411-0.187-2.023-0.561-0.612-0.374-1.105-0.8953-1.479-1.564-0.374-0.68-0.561-1.4733-0.561-2.38 0-0.918 0.187-1.7113 0.561-2.38 0.374-0.68 0.867-1.207 1.479-1.581 0.612-0.374 1.2863-0.561 2.023-0.561 0.612 0 1.156 0.1247 1.632 0.374 0.4873 0.2493 0.867 0.578 1.139 0.986h0.102V23.33h1.751v8.211c0 0.9407-0.187 1.7397-0.561 2.397-0.3627 0.6573-0.867 1.156-1.513 1.496-0.646 0.34-1.394 0.51-2.244 0.51zm0.017-5.525c0.4533 0 0.8727-0.1077 1.258-0.323 0.3853-0.2267 0.697-0.5497 0.935-0.969 0.238-0.4307 0.357-0.9463 0.357-1.547 0-0.6233-0.119-1.1447-0.357-1.564-0.238-0.4307-0.5497-0.7537-0.935-0.969-0.3853-0.2153-0.8047-0.323-1.258-0.323-0.4533 0-0.8783 0.1133-1.275 0.34-0.3853 0.2153-0.697 0.5327-0.935 0.952-0.238 0.4193-0.357 0.9407-0.357 1.564 0 0.612 0.119 1.1333 0.357 1.564 0.238 0.4193 0.5497 0.7367 0.935 0.952 0.3967 0.2153 0.8217 0.323 1.275 0.323zM93.5138 32V19.828h1.836V32h-1.836zm7.8782 0.272c-0.85 0-1.609-0.1983-2.2776-0.595-0.6687-0.3967-1.1957-0.9407-1.581-1.632-0.374-0.6913-0.561-1.479-0.561-2.363 0-0.8273 0.1813-1.5923 0.544-2.295 0.3626-0.7027 0.867-1.2637 1.513-1.683 0.6573-0.4307 1.4106-0.646 2.2606-0.646 0.896 0 1.655 0.1927 2.278 0.578 0.635 0.3853 1.117 0.9123 1.445 1.581 0.329 0.6687 0.493 1.4223 0.493 2.261 0 0.1247-0.005 0.238-0.017 0.34 0 0.102-0.005 0.1813-0.017 0.238h-6.6976c0.0906 0.8613 0.391 1.5073 0.901 1.938 0.5216 0.4307 1.1106 0.646 1.7676 0.646 0.59 0 1.077-0.1303 1.462-0.391 0.386-0.272 0.692-0.6063 0.918-1.003l1.513 0.731c-0.374 0.68-0.884 1.2353-1.53 1.666-0.646 0.4193-1.45 0.629-2.414 0.629zm-0.085-7.65c-0.612 0-1.133 0.187-1.5636 0.561-0.4307 0.374-0.7197 0.8727-0.867 1.496h4.8106c-0.022-0.2947-0.119-0.6007-0.289-0.918-0.17-0.3173-0.43-0.5837-0.782-0.799-0.34-0.2267-0.776-0.34-1.309-0.34zM112.979 32l-3.264-12.172h2.074l1.938 7.905 0.204 1.054h0.102l0.255-1.054 2.448-7.905h1.87l2.346 7.905 0.255 1.037h0.102l0.204-1.037 1.938-7.905h2.057L122.295 32h-1.972l-2.329-8.075-0.272-1.139h-0.102l-0.289 1.139L114.9 32h-1.921zm15.943 0.272c-0.623 0-1.179-0.119-1.666-0.357-0.487-0.2493-0.867-0.595-1.139-1.037-0.272-0.442-0.408-0.9463-0.408-1.513 0-0.612 0.159-1.1333 0.476-1.564 0.329-0.442 0.765-0.7763 1.309-1.003 0.544-0.2267 1.145-0.34 1.802-0.34 0.544 0 1.02 0.051 1.428 0.153 0.419 0.102 0.737 0.2097 0.952 0.323v-0.459c0-0.5667-0.204-1.02-0.612-1.36-0.408-0.34-0.935-0.51-1.581-0.51-0.442 0-0.861 0.102-1.258 0.306-0.397 0.1927-0.714 0.459-0.952 0.799l-1.258-0.969c0.374-0.5213 0.867-0.9293 1.479-1.224 0.623-0.306 1.303-0.459 2.04-0.459 1.258 0 2.227 0.3117 2.907 0.935 0.68 0.612 1.02 1.4733 1.02 2.584V32h-1.785v-1.071h-0.102c-0.227 0.3513-0.567 0.663-1.02 0.935-0.453 0.272-0.997 0.408-1.632 0.408zm0.323-1.496c0.476 0 0.895-0.1133 1.258-0.34s0.646-0.5213 0.85-0.884c0.215-0.374 0.323-0.7763 0.323-1.207-0.261-0.1473-0.567-0.2663-0.918-0.357-0.351-0.102-0.725-0.153-1.122-0.153-0.748 0-1.281 0.153-1.598 0.459-0.317 0.2947-0.476 0.6573-0.476 1.088 0 0.408 0.153 0.7423 0.459 1.003 0.306 0.2607 0.714 0.391 1.224 0.391zM135.499 32V19.828h1.836V32h-1.836zm4.018 0V19.828h1.836V32h-1.836zm7.878 0.272c-0.85 0-1.609-0.1983-2.278-0.595-0.668-0.3967-1.195-0.9407-1.581-1.632-0.374-0.6913-0.561-1.479-0.561-2.363 0-0.8273 0.182-1.5923 0.544-2.295 0.363-0.7027 0.867-1.2637 1.513-1.683 0.658-0.4307 1.411-0.646 2.261-0.646 0.896 0 1.655 0.1927 2.278 0.578 0.635 0.3853 1.117 0.9123 1.445 1.581 0.329 0.6687 0.493 1.4223 0.493 2.261 0 0.1247-0.005 0.238-0.017 0.34 0 0.102-0.005 0.1813-0.017 0.238h-6.698c0.091 0.8613 0.391 1.5073 0.901 1.938 0.522 0.4307 1.111 0.646 1.768 0.646 0.59 0 1.077-0.1303 1.462-0.391 0.386-0.272 0.692-0.6063 0.918-1.003l1.513 0.731c-0.374 0.68-0.884 1.2353-1.53 1.666-0.646 0.4193-1.45 0.629-2.414 0.629zm-0.085-7.65c-0.612 0-1.133 0.187-1.564 0.561-0.43 0.374-0.719 0.8727-0.867 1.496h4.811c-0.022-0.2947-0.119-0.6007-0.289-0.918-0.17-0.3173-0.43-0.5837-0.782-0.799-0.34-0.2267-0.776-0.34-1.309-0.34zm6.572 4.862v-4.556h-1.513V23.33h1.513v-2.448h1.836v2.448h2.125v1.598h-2.125v4.165c0 0.4307 0.085 0.7593 0.255 0.986 0.181 0.2267 0.481 0.34 0.901 0.34 0.215 0 0.396-0.0283 0.544-0.085 0.158-0.0567 0.317-0.136 0.476-0.238v1.785c-0.193 0.0793-0.397 0.1417-0.612 0.187-0.216 0.0453-0.471 0.068-0.765 0.068-0.805 0-1.445-0.2323-1.921-0.697-0.476-0.476-0.714-1.1277-0.714-1.955z" android:fillColor="#ffffff"/>
|
|
7
|
+
</vector>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
|
|
3
|
+
<item android:state_enabled="false">
|
|
4
|
+
<shape
|
|
5
|
+
android:shape="rectangle" >
|
|
6
|
+
<corners android:radius="4dp"/>
|
|
7
|
+
<solid android:color="#7FFFFFFF"/>
|
|
8
|
+
</shape>
|
|
9
|
+
</item>
|
|
10
|
+
<item android:drawable="@android:color/transparent" />
|
|
11
|
+
</selector>
|