├── .github ├── dependabot.yml └── workflows │ ├── build-code-upload-android.yml │ ├── build-fcash-upload-android.yml │ ├── build-fchat-upload-android.yml │ ├── build-upload-android-alpha.yml │ ├── ci.yml │ └── prep-dev.yml ├── .gitignore ├── CODEOWNERS ├── Gemfile ├── Gemfile.lock ├── LICENSE.md ├── README.md ├── SECURITY.md ├── api ├── .gitignore ├── build.gradle.kts ├── schemas │ ├── com.getcode.db.AppDatabase │ │ ├── 1.json │ │ ├── 10.json │ │ ├── 11.json │ │ ├── 12.json │ │ ├── 13.json │ │ ├── 14.json │ │ ├── 15.json │ │ ├── 2.json │ │ ├── 3.json │ │ ├── 4.json │ │ ├── 5.json │ │ ├── 6.json │ │ ├── 7.json │ │ ├── 8.json │ │ └── 9.json │ └── com.kin.code.db.AppDatabase │ │ └── 1.json └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── getcode │ │ ├── codeScanner │ │ ├── KikEncodingTest.kt │ │ └── PayloadEncodingTest.kt │ │ ├── mocks │ │ └── SolanaTransaction.kt │ │ ├── models │ │ ├── CodePayloadTests.kt │ │ ├── KinTests.kt │ │ └── intents │ │ │ ├── IntentDepositTest.kt │ │ │ ├── IntentPrivateTransferTest.kt │ │ │ ├── IntentPublicTransferTest.kt │ │ │ ├── IntentReceiveTest.kt │ │ │ └── actions │ │ │ └── ActionTest.kt │ │ ├── solana │ │ ├── builder │ │ │ └── TransactionBuilder_Test.kt │ │ ├── encoding │ │ │ ├── AgoraMemo_Test.kt │ │ │ ├── MessageEncoding_Test.kt │ │ │ ├── Message_Test.kt │ │ │ ├── ShortVec_Test.kt │ │ │ └── ShortVec_Test2.kt │ │ ├── instructions │ │ │ └── programs │ │ │ │ ├── SwapValidatorTests.kt │ │ │ │ ├── TimelockProgram_BurnDustWithAuthority_Test.kt │ │ │ │ ├── TimelockProgram_CloseAccounts_Test.kt │ │ │ │ ├── TimelockProgram_DeactivateLock_Test.kt │ │ │ │ ├── TimelockProgram_Initialize_Test.kt │ │ │ │ ├── TimelockProgram_RevokeLockWithAuthority_Test.kt │ │ │ │ ├── TimelockProgram_TransferWithAuthority_Test.kt │ │ │ │ └── TimelockProgram_Withdraw_Test.kt │ │ ├── keys │ │ │ ├── MerkleProofTest.kt │ │ │ ├── ProgramDerivedAccountTest.kt │ │ │ └── SodiumTests.kt │ │ └── organizer │ │ │ ├── OrganizerTest.kt │ │ │ ├── SlotTest.kt │ │ │ └── TrayTest.kt │ │ └── util │ │ ├── TestUtils.kt │ │ └── UUIDTests.kt │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── getcode │ │ ├── analytics │ │ ├── AnalyticsManager.kt │ │ └── AnalyticsService.kt │ │ ├── annotations │ │ └── DevManagedChannel.kt │ │ ├── crypt │ │ ├── Derive.kt │ │ ├── DerivePath.kt │ │ ├── DerivedKey.kt │ │ ├── Hmac.java │ │ ├── KeyAccount.kt │ │ ├── MnemonicCache.kt │ │ ├── MnemonicCode.java │ │ ├── MnemonicException.java │ │ ├── MnemonicPhrase.kt │ │ ├── PBKDF2SHA512.java │ │ ├── Sha256Hash.java │ │ └── Utils.java │ │ ├── db │ │ ├── AppDatabase.kt │ │ ├── ConversationDao.kt │ │ ├── ConversationIntentMappingDao.kt │ │ ├── ConversationMessageDao.kt │ │ ├── ConversationPointerDao.kt │ │ ├── Converters.kt │ │ ├── ExchangeDao.kt │ │ ├── GiftCardDao.kt │ │ ├── InMemoryDao.kt │ │ ├── PrefBoolDao.kt │ │ ├── PrefDoubleDao.kt │ │ ├── PrefIntDao.kt │ │ └── PrefStringDao.kt │ │ ├── generator │ │ ├── Generator.kt │ │ ├── GiftCardGenerator.kt │ │ ├── MnemonicGenerator.kt │ │ └── OrganizerGenerator.kt │ │ ├── manager │ │ ├── BottomBarManager.kt │ │ ├── GiftCardManager.kt │ │ ├── MnemonicManager.kt │ │ ├── ModalManager.kt │ │ ├── SessionManager.kt │ │ └── TopBarManager.kt │ │ ├── mapper │ │ ├── ChatMemberMapper.kt │ │ ├── ChatMessageV1Mapper.kt │ │ ├── ChatMessageV2Mapper.kt │ │ ├── ChatMetadataV1Mapper.kt │ │ ├── ChatMetadataV2Mapper.kt │ │ ├── ConversationMapper.kt │ │ ├── ConversationMessageMapper.kt │ │ ├── ConversationMessageWithContentMapper.kt │ │ ├── Mapper.kt │ │ └── PointerMapper.kt │ │ ├── model │ │ ├── AccountInfo.kt │ │ ├── AirdropType.kt │ │ ├── ClientSignature.kt │ │ ├── CodePayload.kt │ │ ├── Conversation.kt │ │ ├── Currency.kt │ │ ├── CurrencyCode.kt │ │ ├── CurrencyRate.kt │ │ ├── Cursor.kt │ │ ├── Domain.kt │ │ ├── EncryptedData.kt │ │ ├── FaqItem.kt │ │ ├── Feature.kt │ │ ├── Fiat.kt │ │ ├── GiftCard.kt │ │ ├── ID.kt │ │ ├── Intent.kt │ │ ├── IntentMetadata.kt │ │ ├── Kin.kt │ │ ├── KinAmount.kt │ │ ├── KinCode.kt │ │ ├── Limits.kt │ │ ├── PaymentRequest.kt │ │ ├── PrefBool.kt │ │ ├── PrefDouble.kt │ │ ├── PrefInt.kt │ │ ├── PrefString.kt │ │ ├── Rate.kt │ │ ├── RegionCode.kt │ │ ├── RelationshipBox.kt │ │ ├── SendDestination.kt │ │ ├── SocialUser.kt │ │ ├── StreamEvent.kt │ │ ├── TwitterUser.kt │ │ ├── UpgradeableIntent.kt │ │ ├── UpgradeablePrivateAction.kt │ │ ├── Username.kt │ │ ├── chat │ │ │ ├── Chat.kt │ │ │ ├── ChatMember.kt │ │ │ ├── ChatMessage.kt │ │ │ ├── ChatStreamEventUpdate.kt │ │ │ ├── ChatType.kt │ │ │ ├── Chats.kt │ │ │ ├── MessageContent.kt │ │ │ ├── OutgoingMessageContent.kt │ │ │ ├── Platform.kt │ │ │ ├── Pointer.kt │ │ │ ├── Reference.kt │ │ │ ├── Title.kt │ │ │ └── Verb.kt │ │ ├── intents │ │ │ ├── IntentCreateAccounts.kt │ │ │ ├── IntentDeposit.kt │ │ │ ├── IntentEstablishRelationship.kt │ │ │ ├── IntentMigratePrivacy.kt │ │ │ ├── IntentPrivateTransfer.kt │ │ │ ├── IntentPublicTransfer.kt │ │ │ ├── IntentReceive.kt │ │ │ ├── IntentRemoteReceive.kt │ │ │ ├── IntentRemoteSend.kt │ │ │ ├── IntentType.kt │ │ │ ├── IntentUpgradePrivacy.kt │ │ │ ├── ServerParameter.kt │ │ │ ├── SwapIntent.kt │ │ │ └── actions │ │ │ │ ├── ActionCloseEmptyAccount.kt │ │ │ │ ├── ActionFeePayment.kt │ │ │ │ ├── ActionOpenAccount.kt │ │ │ │ ├── ActionPrivacyUpgrade.kt │ │ │ │ ├── ActionTransfer.kt │ │ │ │ ├── ActionType.kt │ │ │ │ └── ActionWithdraw.kt │ │ └── notifications │ │ │ ├── CodeNotification.kt │ │ │ └── NotificationParser.kt │ │ ├── network │ │ ├── BalanceController.kt │ │ ├── ChatHistoryController.kt │ │ ├── ConversationController.kt │ │ ├── ConversationListController.kt │ │ ├── NotificationCollectionHistoryController.kt │ │ ├── PrivacyMigration.kt │ │ ├── TipController.kt │ │ ├── TwitterUserController.kt │ │ ├── api │ │ │ ├── AccountApi.kt │ │ │ ├── ChatApiV1.kt │ │ │ ├── ChatApiV2.kt │ │ │ ├── CurrencyApi.kt │ │ │ ├── DeviceApi.kt │ │ │ ├── IdentityApi.kt │ │ │ ├── MessagingApi.kt │ │ │ ├── PhoneApi.kt │ │ │ ├── PushApi.kt │ │ │ └── TransactionApiV2.kt │ │ ├── client │ │ │ ├── AccountService.kt │ │ │ ├── Client.kt │ │ │ ├── Client_Account.kt │ │ │ ├── Client_Chat.kt │ │ │ ├── Client_Device.kt │ │ │ ├── Client_Identity.kt │ │ │ ├── Client_Messaging.kt │ │ │ ├── Client_Transaction.kt │ │ │ └── TransactionReceiver.kt │ │ ├── core │ │ │ ├── GrpcApi.kt │ │ │ ├── NetworkOracle.kt │ │ │ └── StreamObservers.kt │ │ ├── exchange │ │ │ └── Exchange.kt │ │ ├── integrity │ │ │ └── DeviceCheck.kt │ │ ├── repository │ │ │ ├── AccountRepository.kt │ │ │ ├── AppSettingsRepository.kt │ │ │ ├── BalanceRepository.kt │ │ │ ├── BetaFlagsRepository.kt │ │ │ ├── Extensions.kt │ │ │ ├── FeatureRepository.kt │ │ │ ├── IdentityRepository.kt │ │ │ ├── MessagingRepository.kt │ │ │ ├── ObservableVariable.kt │ │ │ ├── PaymentRepository.kt │ │ │ ├── PhoneRepository.kt │ │ │ ├── PrefRepository.kt │ │ │ ├── PushRepository.kt │ │ │ ├── ReceiveTransactionRepository.kt │ │ │ ├── SendTransactionRepository.kt │ │ │ ├── StatusRepository.kt │ │ │ ├── TransactionRepository.kt │ │ │ └── TransactionRepository_Swap.kt │ │ ├── service │ │ │ ├── ChatServiceV1.kt │ │ │ ├── ChatServiceV2.kt │ │ │ ├── CurrencyService.kt │ │ │ └── DeviceService.kt │ │ └── source │ │ │ └── CollectionPagingSource.kt │ │ ├── solana │ │ ├── AccountMeta.kt │ │ ├── AgoraMemo.kt │ │ ├── Instruction.kt │ │ ├── Message.kt │ │ ├── MessageHeader.kt │ │ ├── ShortVec.kt │ │ ├── SolanaTransaction.kt │ │ ├── builder │ │ │ └── TransactionBuilder.kt │ │ ├── instructions │ │ │ ├── InstructionType.kt │ │ │ └── programs │ │ │ │ ├── AssociatedTokenProgram.kt │ │ │ │ ├── AssociatedTokenProgram_CreateAccount.kt │ │ │ │ ├── ComputeBudgetProgram.kt │ │ │ │ ├── ComputeBudgetProgram_RequestUnits.kt │ │ │ │ ├── ComputeBudgetProgram_SetComputeUnitLimit.kt │ │ │ │ ├── ComputeBudgetProgram_SetComputeUnitPrice.kt │ │ │ │ ├── MemoProgram.kt │ │ │ │ ├── MemoProgram_Memo.kt │ │ │ │ ├── SwapValidatorProgram.kt │ │ │ │ ├── SwapValidatorProgram_PostSwap.kt │ │ │ │ ├── SwapValidatorProgram_PreSwap.kt │ │ │ │ ├── SysVar.kt │ │ │ │ ├── SystemProgram.kt │ │ │ │ ├── SystemProgram_AdvanceNonce.kt │ │ │ │ ├── TimelockProgram.kt │ │ │ │ ├── TimelockProgram_BurnDustWithAuthority.kt │ │ │ │ ├── TimelockProgram_CloseAccounts.kt │ │ │ │ ├── TimelockProgram_DeactivateLock.kt │ │ │ │ ├── TimelockProgram_Initialize.kt │ │ │ │ ├── TimelockProgram_RevokeLockWithAuthority.kt │ │ │ │ ├── TimelockProgram_TransferWithAuthority.kt │ │ │ │ ├── TimelockProgram_Withdraw.kt │ │ │ │ └── TokenProgram.kt │ │ ├── keys │ │ │ ├── Key.kt │ │ │ ├── MerkleProof.kt │ │ │ ├── Mint.kt │ │ │ ├── ProgramDerivedAccount.kt │ │ │ ├── PublicKey.kt │ │ │ ├── Sodium.kt │ │ │ └── Types.kt │ │ └── organizer │ │ │ ├── AccountCluster.kt │ │ │ ├── AccountType.kt │ │ │ ├── GiftCardAccount.kt │ │ │ ├── Organizer.kt │ │ │ ├── PartialAccount.kt │ │ │ ├── Relationship.kt │ │ │ ├── Slot.kt │ │ │ └── Tray.kt │ │ ├── utils │ │ ├── CloudMessaging.kt │ │ ├── DataSlice.kt │ │ ├── Differ.kt │ │ ├── Double.kt │ │ ├── ErrorUtils.kt │ │ ├── Flow.kt │ │ ├── FormatUtils.kt │ │ ├── Installations.kt │ │ ├── Instant.kt │ │ ├── KeyPair.kt │ │ ├── LocaleUtils.kt │ │ ├── Logging.kt │ │ ├── Long.kt │ │ ├── Maps.kt │ │ ├── Nonce.kt │ │ ├── SignMessage.kt │ │ ├── String.kt │ │ ├── Timber.kt │ │ ├── UUID.kt │ │ ├── network │ │ │ ├── Api24NetworkObserver.kt │ │ │ ├── Api29NeworkObserver.kt │ │ │ ├── NetworkConnectionListener.kt │ │ │ └── Retry.kt │ │ └── serializer │ │ │ ├── ConversationMessageContentTypeSerializer.kt │ │ │ ├── KinSerializer.kt │ │ │ ├── PublicKeySerializer.kt │ │ │ ├── RateSerializer.kt │ │ │ └── UUIDSerializer.kt │ │ └── vendor │ │ └── Base58.kt │ └── res │ └── raw │ └── english.txt ├── app ├── .gitignore ├── build.gradle.kts ├── libs │ ├── kik-code-encode-0.1.3.jar │ ├── kik-code-encode-native-0.1.3.jar │ ├── kik-code-scan-0.1.3.jar │ └── kik-code-scan-native-0.1.3.jar ├── proguard-rules.pro ├── shuffled-dictionary.txt └── src │ ├── debug │ └── res │ │ ├── drawable │ │ └── ic_launcher_background.xml │ │ ├── values │ │ └── strings.xml │ │ └── xml │ │ └── authenticator.xml │ ├── main │ ├── AndroidManifest.xml │ ├── ic_launcher-playstore.png │ ├── java │ │ └── com │ │ │ ├── getcode │ │ │ ├── App.kt │ │ │ ├── CodeApp.kt │ │ │ ├── CodeAppState.kt │ │ │ ├── Locals.kt │ │ │ ├── SessionController.kt │ │ │ ├── TopLevelViewModel.kt │ │ │ ├── analytics │ │ │ │ ├── AnalyticsScreenWatcher.kt │ │ │ │ └── AnalyticsWatcher.kt │ │ │ ├── api │ │ │ │ └── KadoApi.kt │ │ │ ├── domain │ │ │ │ └── CashLinkManager.kt │ │ │ ├── inject │ │ │ │ ├── ApiModule.kt │ │ │ │ ├── AppModule.kt │ │ │ │ ├── DataModule.kt │ │ │ │ └── TipModule.kt │ │ │ ├── manager │ │ │ │ ├── AccountManager.kt │ │ │ │ └── AuthManager.kt │ │ │ ├── mapper │ │ │ │ └── AppSettingsMapper.kt │ │ │ ├── media │ │ │ │ └── MediaScanner.kt │ │ │ ├── models │ │ │ │ ├── BillState.kt │ │ │ │ ├── PaymentRequest.kt │ │ │ │ └── SettingsItem.kt │ │ │ ├── navigation │ │ │ │ ├── core │ │ │ │ │ ├── BottomSheetNavigator.kt │ │ │ │ │ ├── CodeNavigator.kt │ │ │ │ │ └── CombinedNavigator.kt │ │ │ │ ├── screens │ │ │ │ │ ├── ChatScreens.kt │ │ │ │ │ ├── Graphs.kt │ │ │ │ │ ├── LoginScreens.kt │ │ │ │ │ ├── MainScreens.kt │ │ │ │ │ ├── ModalContainerMessage.kt │ │ │ │ │ ├── ModalScreens.kt │ │ │ │ │ ├── Modals.kt │ │ │ │ │ ├── PhoneCountrySelection.kt │ │ │ │ │ ├── Screens.kt │ │ │ │ │ └── WithdrawalScreens.kt │ │ │ │ └── transitions │ │ │ │ │ ├── CrossfadeTransition.kt │ │ │ │ │ └── SheetSlideTransition.kt │ │ │ ├── notifications │ │ │ │ └── CodePushMessagingService.kt │ │ │ ├── ui │ │ │ │ ├── components │ │ │ │ │ ├── AuthCheck.kt │ │ │ │ │ ├── Badge.kt │ │ │ │ │ ├── Cloudy.kt │ │ │ │ │ ├── FullScreenProgressSpinner.kt │ │ │ │ │ ├── ImageWithBackground.kt │ │ │ │ │ ├── MarkdownText.kt │ │ │ │ │ ├── MiddleEllipsisText.kt │ │ │ │ │ ├── Modal.kt │ │ │ │ │ ├── ModalContainer.kt │ │ │ │ │ ├── OnLifecycleEvent.kt │ │ │ │ │ ├── OtpBox.kt │ │ │ │ │ ├── OtpRow.kt │ │ │ │ │ ├── PermissionCheck.kt │ │ │ │ │ ├── Row.kt │ │ │ │ │ ├── SelectionContainer.kt │ │ │ │ │ ├── SettingsRow.kt │ │ │ │ │ ├── SheetTitle.kt │ │ │ │ │ ├── SlideToConfirm.kt │ │ │ │ │ ├── SnackData.kt │ │ │ │ │ ├── TextInput.kt │ │ │ │ │ ├── TextSection.kt │ │ │ │ │ ├── TitleBar.kt │ │ │ │ │ ├── TwitterUsernameDisplay.kt │ │ │ │ │ ├── VerticalDivider.kt │ │ │ │ │ ├── bars │ │ │ │ │ │ ├── BottomBarContainer.kt │ │ │ │ │ │ └── TopBarContainer.kt │ │ │ │ │ └── chat │ │ │ │ │ │ ├── AnnouncementMessage.kt │ │ │ │ │ │ ├── AnonymousAvatar.kt │ │ │ │ │ │ ├── ChatInput.kt │ │ │ │ │ │ ├── ChatNode.kt │ │ │ │ │ │ ├── DateBubble.kt │ │ │ │ │ │ ├── DateWithStatus.kt │ │ │ │ │ │ ├── EncryptedContent.kt │ │ │ │ │ │ ├── MessageList.kt │ │ │ │ │ │ ├── MessageNode.kt │ │ │ │ │ │ ├── MessagePayment.kt │ │ │ │ │ │ ├── MessageTextContent.kt │ │ │ │ │ │ ├── TypingIndicator.kt │ │ │ │ │ │ ├── UserAvatar.kt │ │ │ │ │ │ └── utils │ │ │ │ │ │ ├── ChatItem.kt │ │ │ │ │ │ ├── ConversationItem.kt │ │ │ │ │ │ ├── HandleMessageChanges.kt │ │ │ │ │ │ └── LocalizedText.kt │ │ │ │ ├── modals │ │ │ │ │ ├── Confirmations.kt │ │ │ │ │ ├── LoginConfirmation.kt │ │ │ │ │ ├── PaymentConfirmation.kt │ │ │ │ │ ├── ReceivedKinConfirmation.kt │ │ │ │ │ └── TipConfirmation.kt │ │ │ │ ├── tips │ │ │ │ │ ├── DefinedTips.kt │ │ │ │ │ └── definitions │ │ │ │ │ │ └── DownloadCodeTip.kt │ │ │ │ └── utils │ │ │ │ │ ├── AnimationUtils.kt │ │ │ │ │ ├── AutoSizeTextMeasurer.kt │ │ │ │ │ ├── Biometrics.kt │ │ │ │ │ ├── ColorTransformations.kt │ │ │ │ │ ├── Geometry.kt │ │ │ │ │ ├── KeepScreenOn.kt │ │ │ │ │ ├── Keyboard.kt │ │ │ │ │ ├── LazyList.kt │ │ │ │ │ ├── MeasureScope.kt │ │ │ │ │ ├── PreviewParameters.kt │ │ │ │ │ ├── RecompositionHighlighter.kt │ │ │ │ │ ├── RepeatOnLifecycle.kt │ │ │ │ │ ├── TextUnit.kt │ │ │ │ │ ├── View.kt │ │ │ │ │ └── Voyager.kt │ │ │ ├── util │ │ │ │ ├── AccountAuthenticator.kt │ │ │ │ ├── AccountUtils.kt │ │ │ │ ├── AndroidLocale.kt │ │ │ │ ├── AndroidPermissions.kt │ │ │ │ ├── AndroidResources.kt │ │ │ │ ├── AndroidVibrator.kt │ │ │ │ ├── AuthenticatorService.kt │ │ │ │ ├── Biometrics.kt │ │ │ │ ├── Bitmap.kt │ │ │ │ ├── Build.kt │ │ │ │ ├── ChromeTabsUtils.kt │ │ │ │ ├── Context.kt │ │ │ │ ├── Currency.kt │ │ │ │ ├── CurrencyUtils.kt │ │ │ │ ├── DateUtils.kt │ │ │ │ ├── DeeplinkHandler.kt │ │ │ │ ├── ErrorUtils.kt │ │ │ │ ├── ImageProxy.kt │ │ │ │ ├── IntentLauncher.kt │ │ │ │ ├── IntentUtils.kt │ │ │ │ ├── KinAmountExt.kt │ │ │ │ ├── Linkify.kt │ │ │ │ ├── NumberInputHelper.kt │ │ │ │ ├── OtpSmsBroadcastReceiver.kt │ │ │ │ ├── Pacman.kt │ │ │ │ ├── Pair.kt │ │ │ │ ├── PhoneUtils.kt │ │ │ │ ├── QRCodeGenerator.kt │ │ │ │ ├── locale │ │ │ │ │ └── LocaleHelper.kt │ │ │ │ ├── permissions │ │ │ │ │ └── PermissionChecker.kt │ │ │ │ └── vibration │ │ │ │ │ └── Vibrator.kt │ │ │ └── view │ │ │ │ ├── BaseViewModel.kt │ │ │ │ ├── MainActivity.kt │ │ │ │ ├── download │ │ │ │ └── ShareDownloadScreen.kt │ │ │ │ ├── login │ │ │ │ ├── AccessKey.kt │ │ │ │ ├── AccessKeyViewModel.kt │ │ │ │ ├── BaseAccessKeyViewModel.kt │ │ │ │ ├── CameraPermission.kt │ │ │ │ ├── CameraPermissionCheck.kt │ │ │ │ ├── LoginHome.kt │ │ │ │ ├── NotificationPermission.kt │ │ │ │ ├── NotificationPermissionCheck.kt │ │ │ │ ├── PhoneConfirm.kt │ │ │ │ ├── PhoneConfirmViewModel.kt │ │ │ │ ├── PhoneVerify.kt │ │ │ │ ├── PhoneVerifyViewModel.kt │ │ │ │ ├── SeedDeepLink.kt │ │ │ │ ├── SeedInput.kt │ │ │ │ └── SeedInputViewModel.kt │ │ │ │ └── main │ │ │ │ ├── account │ │ │ │ ├── AccountAccessKeyViewModel.kt │ │ │ │ ├── AccountDeposit.kt │ │ │ │ ├── AccountDetails.kt │ │ │ │ ├── AccountFaq.kt │ │ │ │ ├── AccountFaqViewModel.kt │ │ │ │ ├── AccountHome.kt │ │ │ │ ├── AccountPhone.kt │ │ │ │ ├── AccountPhoneViewModel.kt │ │ │ │ ├── AccountSheetViewModel.kt │ │ │ │ ├── AppSettingsScreen.kt │ │ │ │ ├── AppSettingsViewModel.kt │ │ │ │ ├── BackupKey.kt │ │ │ │ ├── BetaFlagsScreen.kt │ │ │ │ ├── BetaFlagsViewModel.kt │ │ │ │ ├── BucketDebugger.kt │ │ │ │ ├── ConfirmDeleteAccount.kt │ │ │ │ ├── DeleteAccount.kt │ │ │ │ ├── DeleteAccountViewModel.kt │ │ │ │ └── withdraw │ │ │ │ │ ├── AccountWithdrawAddress.kt │ │ │ │ │ ├── AccountWithdrawAddressViewModel.kt │ │ │ │ │ ├── AccountWithdrawAmount.kt │ │ │ │ │ ├── AccountWithdrawAmountViewModel.kt │ │ │ │ │ ├── AccountWithdrawSummary.kt │ │ │ │ │ └── AccountWithdrawSummaryViewModel.kt │ │ │ │ ├── balance │ │ │ │ ├── BalanceSheet.kt │ │ │ │ └── BalanceSheetViewModel.kt │ │ │ │ ├── bill │ │ │ │ ├── AnimatedBill.kt │ │ │ │ ├── Bill.kt │ │ │ │ ├── BillAmount.kt │ │ │ │ ├── BillManagementOptions.kt │ │ │ │ ├── CashBill.kt │ │ │ │ ├── LoginBill.kt │ │ │ │ ├── PaymentReceiptBill.kt │ │ │ │ ├── ScannableCode.kt │ │ │ │ └── TipCard.kt │ │ │ │ ├── chat │ │ │ │ ├── ChatScreen.kt │ │ │ │ ├── NotificationCollectionViewModel.kt │ │ │ │ ├── conversation │ │ │ │ │ ├── ConversationScreen.kt │ │ │ │ │ └── ConversationViewModel.kt │ │ │ │ ├── create │ │ │ │ │ └── byusername │ │ │ │ │ │ ├── ChatByUsernameScreen.kt │ │ │ │ │ │ └── ChatByUsernameViewModel.kt │ │ │ │ └── list │ │ │ │ │ ├── ChatListScreen.kt │ │ │ │ │ └── ChatListViewModel.kt │ │ │ │ ├── connectivity │ │ │ │ ├── ConnectionStatusComponent.kt │ │ │ │ └── ConnectionStatusProvider.kt │ │ │ │ ├── currency │ │ │ │ ├── CurrencySelectionSheet.kt │ │ │ │ └── CurrencyViewModel.kt │ │ │ │ ├── getKin │ │ │ │ ├── BuyAndSellKin.kt │ │ │ │ ├── BuyAndSellKinViewModel.kt │ │ │ │ ├── BuyKinScreen.kt │ │ │ │ ├── BuyKinViewModel.kt │ │ │ │ ├── GetKinSheet.kt │ │ │ │ ├── GetKinSheetViewModel.kt │ │ │ │ ├── KadoWebScreen.kt │ │ │ │ └── KadoWebViewModel.kt │ │ │ │ ├── giveKin │ │ │ │ ├── AmountArea.kt │ │ │ │ ├── AmountText.kt │ │ │ │ ├── AmountTextAnimated.kt │ │ │ │ ├── BaseAmountCurrencyViewModel.kt │ │ │ │ ├── GiveKinScreen.kt │ │ │ │ └── GiveKinSheetViewModel.kt │ │ │ │ ├── requestKin │ │ │ │ ├── RequestKinScreen.kt │ │ │ │ └── RequestKinViewModel.kt │ │ │ │ ├── scanner │ │ │ │ ├── DecorView.kt │ │ │ │ ├── ScannerScreen.kt │ │ │ │ ├── camera │ │ │ │ │ ├── CameraGestureController.kt │ │ │ │ │ ├── CodeScanner.kt │ │ │ │ │ └── FocusIndicator.kt │ │ │ │ ├── components │ │ │ │ │ ├── BottomBar.kt │ │ │ │ │ └── PriceWithFlag.kt │ │ │ │ └── views │ │ │ │ │ ├── BiometricsBlockingView.kt │ │ │ │ │ ├── CameraDisabledView.kt │ │ │ │ │ ├── CameraPermissionsMissingView.kt │ │ │ │ │ └── RestrictionBlockingView.kt │ │ │ │ └── tip │ │ │ │ ├── ConnectAccountScreen.kt │ │ │ │ ├── EnterTipScreen.kt │ │ │ │ ├── TipConnectViewModel.kt │ │ │ │ └── TipPaymentViewModel.kt │ │ │ └── kik │ │ │ └── kikx │ │ │ ├── kikcodes │ │ │ ├── KikCodeColor.kt │ │ │ ├── KikCodeColorMapper.kt │ │ │ ├── KikCodeEncoder.kt │ │ │ ├── KikCodeScanner.kt │ │ │ └── implementation │ │ │ │ ├── KikCodeAnalyzer.kt │ │ │ │ ├── KikCodeEncoderImpl.kt │ │ │ │ ├── KikCodeScannerImpl.kt │ │ │ │ ├── PlanarYUVLuminanceSource.kt │ │ │ │ └── StaticImageHelper.kt │ │ │ ├── kincodes │ │ │ ├── KikCodeContentRenderer.kt │ │ │ ├── KikCodeContentRendererImpl.kt │ │ │ └── KikCodeContentView.kt │ │ │ └── models │ │ │ ├── GroupInviteCode.kt │ │ │ └── ScannableKikCode.kt │ ├── jniLibs │ │ ├── arm64-v8a │ │ │ ├── libkikcode_encode.so │ │ │ ├── libkikcode_scan.so │ │ │ ├── libkikhash.so │ │ │ └── libopencv_java3.so │ │ ├── armeabi-v7a │ │ │ ├── libgnustl_shared.so │ │ │ ├── libkikcode_encode.so │ │ │ └── libkikcode_scan.so │ │ ├── armeabi │ │ │ ├── libgnustl_shared.so │ │ │ ├── libkikcode_encode.so │ │ │ └── libkikcode_scan.so │ │ ├── mips │ │ │ ├── libgnustl_shared.so │ │ │ ├── libkikcode_encode.so │ │ │ └── libkikcode_scan.so │ │ └── x86 │ │ │ ├── libgnustl_shared.so │ │ │ ├── libkikcode_encode.so │ │ │ └── libkikcode_scan.so │ └── res │ │ ├── drawable-nodpi │ │ ├── ic_access_key_bg.webp │ │ ├── ic_bill_globe.webp │ │ ├── ic_bill_grid.webp │ │ ├── ic_bill_hexagons.webp │ │ ├── ic_bill_security_strip.webp │ │ ├── ic_bill_waves.webp │ │ ├── ic_flag_ad.webp │ │ ├── ic_flag_ae.webp │ │ ├── ic_flag_af.webp │ │ ├── ic_flag_ag.webp │ │ ├── ic_flag_ai.webp │ │ ├── ic_flag_al.webp │ │ ├── ic_flag_am.webp │ │ ├── ic_flag_an.webp │ │ ├── ic_flag_ao.webp │ │ ├── ic_flag_aq.webp │ │ ├── ic_flag_ar.webp │ │ ├── ic_flag_as.webp │ │ ├── ic_flag_at.webp │ │ ├── ic_flag_au.webp │ │ ├── ic_flag_aw.webp │ │ ├── ic_flag_ax.webp │ │ ├── ic_flag_az.webp │ │ ├── ic_flag_ba.webp │ │ ├── ic_flag_bb.webp │ │ ├── ic_flag_bd.webp │ │ ├── ic_flag_be.webp │ │ ├── ic_flag_bf.webp │ │ ├── ic_flag_bg.webp │ │ ├── ic_flag_bh.webp │ │ ├── ic_flag_bi.webp │ │ ├── ic_flag_bj.webp │ │ ├── ic_flag_bl.webp │ │ ├── ic_flag_bm.webp │ │ ├── ic_flag_bn.webp │ │ ├── ic_flag_bo.webp │ │ ├── ic_flag_bq.webp │ │ ├── ic_flag_br.webp │ │ ├── ic_flag_bs.webp │ │ ├── ic_flag_bt.webp │ │ ├── ic_flag_bv.webp │ │ ├── ic_flag_bw.webp │ │ ├── ic_flag_by.webp │ │ ├── ic_flag_bz.webp │ │ ├── ic_flag_ca.webp │ │ ├── ic_flag_cc.webp │ │ ├── ic_flag_cd.webp │ │ ├── ic_flag_cf.webp │ │ ├── ic_flag_cg.webp │ │ ├── ic_flag_ch.webp │ │ ├── ic_flag_ci.webp │ │ ├── ic_flag_ck.webp │ │ ├── ic_flag_cl.webp │ │ ├── ic_flag_cm.webp │ │ ├── ic_flag_cn.webp │ │ ├── ic_flag_co.webp │ │ ├── ic_flag_cr.webp │ │ ├── ic_flag_cu.webp │ │ ├── ic_flag_cv.webp │ │ ├── ic_flag_cw.webp │ │ ├── ic_flag_cx.webp │ │ ├── ic_flag_cy.webp │ │ ├── ic_flag_cz.webp │ │ ├── ic_flag_de.webp │ │ ├── ic_flag_dj.webp │ │ ├── ic_flag_dk.webp │ │ ├── ic_flag_dm.webp │ │ ├── ic_flag_do.webp │ │ ├── ic_flag_dz.webp │ │ ├── ic_flag_ec.webp │ │ ├── ic_flag_ee.webp │ │ ├── ic_flag_eg.webp │ │ ├── ic_flag_eh.webp │ │ ├── ic_flag_eo.webp │ │ ├── ic_flag_er.webp │ │ ├── ic_flag_es.webp │ │ ├── ic_flag_et.webp │ │ ├── ic_flag_eu.webp │ │ ├── ic_flag_fi.webp │ │ ├── ic_flag_fj.webp │ │ ├── ic_flag_fk.webp │ │ ├── ic_flag_fm.webp │ │ ├── ic_flag_fo.webp │ │ ├── ic_flag_fr.webp │ │ ├── ic_flag_ga.webp │ │ ├── ic_flag_gb.webp │ │ ├── ic_flag_gd.webp │ │ ├── ic_flag_ge.webp │ │ ├── ic_flag_gf.webp │ │ ├── ic_flag_gg.webp │ │ ├── ic_flag_gh.webp │ │ ├── ic_flag_gi.webp │ │ ├── ic_flag_gl.webp │ │ ├── ic_flag_gm.webp │ │ ├── ic_flag_gn.webp │ │ ├── ic_flag_gp.webp │ │ ├── ic_flag_gq.webp │ │ ├── ic_flag_gr.webp │ │ ├── ic_flag_gs.webp │ │ ├── ic_flag_gt.webp │ │ ├── ic_flag_gu.webp │ │ ├── ic_flag_gw.webp │ │ ├── ic_flag_gy.webp │ │ ├── ic_flag_hk.webp │ │ ├── ic_flag_hm.webp │ │ ├── ic_flag_hn.webp │ │ ├── ic_flag_hr.webp │ │ ├── ic_flag_ht.webp │ │ ├── ic_flag_hu.webp │ │ ├── ic_flag_id.webp │ │ ├── ic_flag_ie.webp │ │ ├── ic_flag_il.webp │ │ ├── ic_flag_im.webp │ │ ├── ic_flag_in.webp │ │ ├── ic_flag_io.webp │ │ ├── ic_flag_iq.webp │ │ ├── ic_flag_ir.webp │ │ ├── ic_flag_is.webp │ │ ├── ic_flag_it.webp │ │ ├── ic_flag_je.webp │ │ ├── ic_flag_jm.webp │ │ ├── ic_flag_jo.webp │ │ ├── ic_flag_jp.webp │ │ ├── ic_flag_ke.webp │ │ ├── ic_flag_kg.webp │ │ ├── ic_flag_kh.webp │ │ ├── ic_flag_ki.webp │ │ ├── ic_flag_km.webp │ │ ├── ic_flag_kn.webp │ │ ├── ic_flag_kp.webp │ │ ├── ic_flag_kr.webp │ │ ├── ic_flag_kw.webp │ │ ├── ic_flag_ky.webp │ │ ├── ic_flag_kz.webp │ │ ├── ic_flag_la.webp │ │ ├── ic_flag_lb.webp │ │ ├── ic_flag_lc.webp │ │ ├── ic_flag_li.webp │ │ ├── ic_flag_lk.webp │ │ ├── ic_flag_lr.webp │ │ ├── ic_flag_ls.webp │ │ ├── ic_flag_lt.webp │ │ ├── ic_flag_lu.webp │ │ ├── ic_flag_lv.webp │ │ ├── ic_flag_ly.webp │ │ ├── ic_flag_ma.webp │ │ ├── ic_flag_mc.webp │ │ ├── ic_flag_md.webp │ │ ├── ic_flag_me.webp │ │ ├── ic_flag_mf.webp │ │ ├── ic_flag_mg.webp │ │ ├── ic_flag_mh.webp │ │ ├── ic_flag_mk.webp │ │ ├── ic_flag_ml.webp │ │ ├── ic_flag_mm.webp │ │ ├── ic_flag_mn.webp │ │ ├── ic_flag_mo.webp │ │ ├── ic_flag_mp.webp │ │ ├── ic_flag_mq.webp │ │ ├── ic_flag_mr.webp │ │ ├── ic_flag_ms.webp │ │ ├── ic_flag_mt.webp │ │ ├── ic_flag_mu.webp │ │ ├── ic_flag_mv.webp │ │ ├── ic_flag_mw.webp │ │ ├── ic_flag_mx.webp │ │ ├── ic_flag_my.webp │ │ ├── ic_flag_mz.webp │ │ ├── ic_flag_na.webp │ │ ├── ic_flag_nc.webp │ │ ├── ic_flag_ne.webp │ │ ├── ic_flag_nf.webp │ │ ├── ic_flag_ng.webp │ │ ├── ic_flag_ni.webp │ │ ├── ic_flag_nl.webp │ │ ├── ic_flag_no.webp │ │ ├── ic_flag_np.webp │ │ ├── ic_flag_nr.webp │ │ ├── ic_flag_nu.webp │ │ ├── ic_flag_nz.webp │ │ ├── ic_flag_om.webp │ │ ├── ic_flag_pa.webp │ │ ├── ic_flag_pe.webp │ │ ├── ic_flag_pf.webp │ │ ├── ic_flag_pg.webp │ │ ├── ic_flag_ph.webp │ │ ├── ic_flag_pk.webp │ │ ├── ic_flag_pl.webp │ │ ├── ic_flag_pm.webp │ │ ├── ic_flag_pn.webp │ │ ├── ic_flag_pr.webp │ │ ├── ic_flag_ps.webp │ │ ├── ic_flag_pt.webp │ │ ├── ic_flag_pw.webp │ │ ├── ic_flag_py.webp │ │ ├── ic_flag_qa.webp │ │ ├── ic_flag_re.webp │ │ ├── ic_flag_ro.webp │ │ ├── ic_flag_rs.webp │ │ ├── ic_flag_ru.webp │ │ ├── ic_flag_rw.webp │ │ ├── ic_flag_sa.webp │ │ ├── ic_flag_sb.webp │ │ ├── ic_flag_sc.webp │ │ ├── ic_flag_sd.webp │ │ ├── ic_flag_se.webp │ │ ├── ic_flag_sg.webp │ │ ├── ic_flag_sh.webp │ │ ├── ic_flag_si.webp │ │ ├── ic_flag_sj.webp │ │ ├── ic_flag_sk.webp │ │ ├── ic_flag_sl.webp │ │ ├── ic_flag_sm.webp │ │ ├── ic_flag_sn.webp │ │ ├── ic_flag_so.webp │ │ ├── ic_flag_sr.webp │ │ ├── ic_flag_ss.webp │ │ ├── ic_flag_st.webp │ │ ├── ic_flag_sv.webp │ │ ├── ic_flag_sx.webp │ │ ├── ic_flag_sy.webp │ │ ├── ic_flag_sz.webp │ │ ├── ic_flag_tc.webp │ │ ├── ic_flag_td.webp │ │ ├── ic_flag_tf.webp │ │ ├── ic_flag_tg.webp │ │ ├── ic_flag_th.webp │ │ ├── ic_flag_tj.webp │ │ ├── ic_flag_tk.webp │ │ ├── ic_flag_tl.webp │ │ ├── ic_flag_tm.webp │ │ ├── ic_flag_tn.webp │ │ ├── ic_flag_to.webp │ │ ├── ic_flag_tr.webp │ │ ├── ic_flag_tt.webp │ │ ├── ic_flag_tv.webp │ │ ├── ic_flag_tw.webp │ │ ├── ic_flag_tz.webp │ │ ├── ic_flag_ua.webp │ │ ├── ic_flag_ug.webp │ │ ├── ic_flag_um.webp │ │ ├── ic_flag_us.webp │ │ ├── ic_flag_uy.webp │ │ ├── ic_flag_uz.webp │ │ ├── ic_flag_va.webp │ │ ├── ic_flag_vc.webp │ │ ├── ic_flag_ve.webp │ │ ├── ic_flag_vg.webp │ │ ├── ic_flag_vi.webp │ │ ├── ic_flag_vn.webp │ │ ├── ic_flag_vu.webp │ │ ├── ic_flag_wf.webp │ │ ├── ic_flag_ws.webp │ │ ├── ic_flag_ye.webp │ │ ├── ic_flag_yt.webp │ │ ├── ic_flag_za.webp │ │ ├── ic_flag_zm.webp │ │ ├── ic_flag_zw.webp │ │ ├── ic_flag_zz.webp │ │ ├── ic_notification_request.png │ │ ├── ic_placeholder_user.webp │ │ └── video_sell_kin_2x.webp │ │ ├── drawable │ │ ├── ic_account_menu_white.xml │ │ ├── ic_android_icon.xml │ │ ├── ic_apple_icon.xml │ │ ├── ic_arrow_back.xml │ │ ├── ic_arrow_down.xml │ │ ├── ic_arrow_turn_left_down.xml │ │ ├── ic_background_1.xml │ │ ├── ic_balance.xml │ │ ├── ic_bell.xml │ │ ├── ic_bill2.webp │ │ ├── ic_bill_close.xml │ │ ├── ic_biometrics.xml │ │ ├── ic_bug.xml │ │ ├── ic_camera_outline.xml │ │ ├── ic_chat.xml │ │ ├── ic_check_white.xml │ │ ├── ic_checked_blue.xml │ │ ├── ic_checked_green.xml │ │ ├── ic_circle_outline.xml │ │ ├── ic_code_invite.xml │ │ ├── ic_code_logo_near_white.xml │ │ ├── ic_code_logo_offwhite_small.xml │ │ ├── ic_code_logo_outline.xml │ │ ├── ic_code_logo_white.xml │ │ ├── ic_code_menu_white.xml │ │ ├── ic_code_splash_bg.xml │ │ ├── ic_copy.xml │ │ ├── ic_currency_dollar_active.xml │ │ ├── ic_currency_dollar_inactive.xml │ │ ├── ic_currency_kin.xml │ │ ├── ic_currency_xaf.xml │ │ ├── ic_currency_xof.xml │ │ ├── ic_delete.xml │ │ ├── ic_delete_bubble.xml │ │ ├── ic_dropdown.xml │ │ ├── ic_empty_bottom_action.xml │ │ ├── ic_exclamation_octagon_fill.xml │ │ ├── ic_faq.xml │ │ ├── ic_gallery.xml │ │ ├── ic_gift.xml │ │ ├── ic_gift_inactive.xml │ │ ├── ic_give_kin.xml │ │ ├── ic_graphic_wallet.xml │ │ ├── ic_history.xml │ │ ├── ic_home_bill_image.webp │ │ ├── ic_home_options.xml │ │ ├── ic_invites.xml │ │ ├── ic_kado.xml │ │ ├── ic_kin_brand.xml │ │ ├── ic_kin_red.xml │ │ ├── ic_kin_white.xml │ │ ├── ic_kin_white_small.xml │ │ ├── ic_labs.xml │ │ ├── ic_launcher_background.xml │ │ ├── ic_launcher_foreground.xml │ │ ├── ic_logo_round_white.xml │ │ ├── ic_menu_account.xml │ │ ├── ic_menu_buy_kin.xml │ │ ├── ic_menu_debug.xml │ │ ├── ic_menu_deposit.xml │ │ ├── ic_menu_key.xml │ │ ├── ic_menu_logout.xml │ │ ├── ic_menu_phone.xml │ │ ├── ic_menu_snowflake.xml │ │ ├── ic_menu_switchaccounts.xml │ │ ├── ic_menu_tip_card.xml │ │ ├── ic_menu_withdraw.xml │ │ ├── ic_message_status_delivered.xml │ │ ├── ic_message_status_read.xml │ │ ├── ic_message_status_sent.xml │ │ ├── ic_phone_empty.xml │ │ ├── ic_phone_filled.xml │ │ ├── ic_remote_send.xml │ │ ├── ic_send2.xml │ │ ├── ic_send2_inactive.xml │ │ ├── ic_settings_outline.xml │ │ ├── ic_tip_card.xml │ │ ├── ic_twitter_verified_badge.xml │ │ ├── ic_twitter_verified_badge_gold.xml │ │ ├── ic_twitter_verified_badge_gray.xml │ │ ├── ic_twitter_x.xml │ │ ├── ic_unchecked.xml │ │ ├── ic_wallet.xml │ │ ├── ic_wifi_slash.xml │ │ ├── ic_x_octagon_fill.xml │ │ ├── ic_xmark_red.xml │ │ ├── lock_app_dashed.xml │ │ ├── payment_bill_pattern.webp │ │ ├── splash.xml │ │ ├── video_buy_kin_2x.webp │ │ └── youtube.webp │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ │ ├── values-ar │ │ └── strings-localized.xml │ │ ├── values-bg │ │ └── strings-localized.xml │ │ ├── values-cs │ │ └── strings-localized.xml │ │ ├── values-da │ │ └── strings-localized.xml │ │ ├── values-de │ │ └── strings-localized.xml │ │ ├── values-el │ │ └── strings-localized.xml │ │ ├── values-en-rGB │ │ └── strings-localized.xml │ │ ├── values-es │ │ └── strings-localized.xml │ │ ├── values-fi │ │ └── strings-localized.xml │ │ ├── values-fr-rCA │ │ └── strings-localized.xml │ │ ├── values-fr │ │ └── strings-localized.xml │ │ ├── values-he │ │ └── strings-localized.xml │ │ ├── values-hi-rIN │ │ └── strings-localized.xml │ │ ├── values-hu │ │ └── strings-localized.xml │ │ ├── values-id │ │ └── strings-localized.xml │ │ ├── values-it │ │ └── strings-localized.xml │ │ ├── values-ja │ │ └── strings-localized.xml │ │ ├── values-ko │ │ └── strings-localized.xml │ │ ├── values-ms │ │ └── strings-localized.xml │ │ ├── values-nl │ │ └── strings-localized.xml │ │ ├── values-no │ │ └── strings-localized.xml │ │ ├── values-pl │ │ └── strings-localized.xml │ │ ├── values-pt │ │ └── strings-localized.xml │ │ ├── values-ro │ │ └── strings-localized.xml │ │ ├── values-ru │ │ └── strings-localized.xml │ │ ├── values-sk │ │ └── strings-localized.xml │ │ ├── values-sr │ │ └── strings-localized.xml │ │ ├── values-sv │ │ └── strings-localized.xml │ │ ├── values-th │ │ └── strings-localized.xml │ │ ├── values-tr │ │ └── strings-localized.xml │ │ ├── values-uk │ │ └── strings-localized.xml │ │ ├── values-vi │ │ └── strings-localized.xml │ │ ├── values-zh-rCN │ │ └── strings-localized.xml │ │ ├── values-zh-rTW │ │ └── strings-localized.xml │ │ ├── values │ │ ├── colors.xml │ │ ├── strings-localized.xml │ │ ├── strings-universal.xml │ │ ├── strings.xml │ │ └── themes.xml │ │ └── xml │ │ └── authenticator.xml │ └── test │ └── kotlin │ └── com │ └── getcode │ └── DeeplinkTests.kt ├── build.gradle.kts ├── buildSrc ├── .gitignore ├── build.gradle.kts └── src │ └── main │ └── java │ ├── ContributorsSignatory.kt │ ├── Dependencies.kt │ └── LocalPropertyFetcher.kt ├── common ├── components │ ├── .gitignore │ ├── build.gradle.kts │ └── src │ │ └── main │ │ └── kotlin │ │ └── com │ │ └── getcode │ │ └── ui │ │ ├── components │ │ ├── CodeBillSwipeToDismiss.kt │ │ ├── CodeButton.kt │ │ ├── CodeCircularProgressIndicator.kt │ │ ├── CodeKeyPad.kt │ │ ├── CodeScaffold.kt │ │ ├── CodeSeedView.kt │ │ ├── CodeSnackbar.kt │ │ ├── CodeSwitch.kt │ │ ├── Flippable.kt │ │ └── Pill.kt │ │ └── utils │ │ ├── IntSize.kt │ │ ├── Modifier.kt │ │ └── PaddingValues.kt ├── resources │ ├── .gitignore │ ├── build.gradle.kts │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── getcode │ │ │ └── util │ │ │ └── resources │ │ │ ├── ResourceHelper.kt │ │ │ └── icons │ │ │ ├── ImageVector.kt │ │ │ └── MessageCircle.kt │ │ └── res │ │ └── drawable │ │ ├── ic_check.xml │ │ ├── ic_chevron_left.xml │ │ └── ic_chevron_right.xml └── theme │ ├── .gitignore │ ├── build.gradle.kts │ └── src │ └── main │ ├── kotlin │ └── com │ │ └── getcode │ │ ├── theme │ │ ├── Color.kt │ │ ├── Dimens.kt │ │ ├── Shape.kt │ │ ├── Theme.kt │ │ ├── Type.kt │ │ └── WindowSizeClass.kt │ │ └── view │ │ └── shapes │ │ └── TriangleCutShape.kt │ └── res │ └── font │ ├── avenir_next_demi.otf │ ├── avenir_next_medium.otf │ ├── avenir_next_regular.otf │ └── roboto_mono_variable.ttf ├── contributors.keystore ├── contributors.properties ├── crypto ├── ed25519 │ ├── .gitignore │ ├── CMakeLists.txt │ ├── build.gradle.kts │ ├── libs │ │ ├── base64 │ │ │ ├── CMakeLists.txt │ │ │ ├── base64.cpp │ │ │ └── base64.hpp │ │ ├── codeScanner │ │ │ ├── CMakeLists.txt │ │ │ └── src │ │ │ │ ├── Array.h │ │ │ │ ├── Counted.h │ │ │ │ ├── Exception.cpp │ │ │ │ ├── Exception.h │ │ │ │ ├── GenericGF.cpp │ │ │ │ ├── GenericGF.h │ │ │ │ ├── GenericGFPoly.cpp │ │ │ │ ├── GenericGFPoly.h │ │ │ │ ├── IllegalArgumentException.cpp │ │ │ │ ├── IllegalArgumentException.h │ │ │ │ ├── IllegalStateException.h │ │ │ │ ├── ReaderException.h │ │ │ │ ├── ReedSolomonDecoder.cpp │ │ │ │ ├── ReedSolomonDecoder.h │ │ │ │ ├── ReedSolomonEncoder.cpp │ │ │ │ ├── ReedSolomonEncoder.h │ │ │ │ ├── ReedSolomonException.cpp │ │ │ │ ├── ReedSolomonException.h │ │ │ │ ├── ZXing.h │ │ │ │ ├── kikcode_constants.h │ │ │ │ ├── kikcode_encoding.cpp │ │ │ │ ├── kikcode_encoding.h │ │ │ │ ├── kikcode_encoding_jni.cpp │ │ │ │ ├── kikcode_encoding_jni.h │ │ │ │ ├── kikcodes.cpp │ │ │ │ └── kikcodes.h │ │ └── ed25519 │ │ │ ├── CMakeLists.txt │ │ │ ├── license.txt │ │ │ ├── readme.md │ │ │ ├── src │ │ │ ├── add_scalar.c │ │ │ ├── ed25519.h │ │ │ ├── fe.c │ │ │ ├── fe.h │ │ │ ├── fixedint.h │ │ │ ├── ge.c │ │ │ ├── ge.h │ │ │ ├── key_exchange.c │ │ │ ├── keypair.c │ │ │ ├── precomp_data.h │ │ │ ├── sc.c │ │ │ ├── sc.h │ │ │ ├── seed.c │ │ │ ├── sha3.c │ │ │ ├── sha3.h │ │ │ ├── sha512.c │ │ │ ├── sha512.h │ │ │ ├── sign.c │ │ │ └── verify.c │ │ │ └── test.c │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── cpp │ │ ├── kik-codes.cpp │ │ └── native-lib.cpp │ │ └── java │ │ └── com │ │ └── getcode │ │ ├── codeScanner │ │ └── CodeScanner.java │ │ └── ed25519 │ │ └── Ed25519.java └── kin │ ├── .gitignore │ └── build.gradle.kts ├── fastlane ├── Appfile └── Fastfile ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── scripts ├── convert-strings.rb ├── fcm.sh ├── fetch-protos.sh ├── flags.sh ├── grab-asset-from-ios.sh ├── internal-testing-build.sh ├── localize.sh └── strip-proto-validation.sh ├── service ├── models │ ├── .gitignore │ └── build.gradle.kts └── protos │ ├── .gitignore │ ├── build.gradle.kts │ └── src │ └── main │ └── proto │ ├── account │ └── v1 │ │ └── account_service.proto │ ├── badge │ └── v1 │ │ └── badge_service.proto │ ├── chat │ ├── v1 │ │ └── chat_service.proto │ └── v2 │ │ └── chat_service.proto │ ├── common │ └── v1 │ │ └── model.proto │ ├── contact │ └── v1 │ │ └── contact_list_service.proto │ ├── currency │ └── v1 │ │ └── currency_service.proto │ ├── device │ └── v1 │ │ └── device_service.proto │ ├── invite │ └── v2 │ │ └── invite_service.proto │ ├── messaging │ └── v1 │ │ └── messaging_service.proto │ ├── micropayment │ └── v1 │ │ └── micro_payment_service.proto │ ├── phone │ └── v1 │ │ └── phone_verification_service.proto │ ├── push │ └── v1 │ │ └── push_service.proto │ ├── transaction │ └── v2 │ │ └── transaction_service.proto │ └── user │ └── v1 │ └── identity_service.proto ├── settings.gradle └── vendor └── tipkit ├── tipkit-m2 ├── .gitignore ├── build.gradle.kts └── src │ └── main │ └── kotlin │ └── dev │ └── bmcreations │ └── tipkit │ ├── ArrowEdge.kt │ ├── Modifier.kt │ └── TipScaffold.kt └── tipkit ├── .gitignore ├── build.gradle.kts └── src └── main └── kotlin └── dev └── bmcreations └── tipkit ├── InlineTip.kt ├── Tip.kt ├── TipNavigation.kt ├── TipProvider.kt ├── TipScope.kt ├── data └── TipLocation.kt ├── engines ├── EventEngine.kt └── TipsEngine.kt └── utils └── TipPlacement.kt /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: gradle 4 | directory: "/" 5 | schedule: 6 | interval: weekly 7 | open-pull-requests-limit: 10 8 | target-branch: develop 9 | reviewers: 10 | - bmc08gt 11 | assignees: 12 | - bmc08gt 13 | -------------------------------------------------------------------------------- /.github/workflows/build-fcash-upload-android.yml: -------------------------------------------------------------------------------- 1 | name: Flipcash Build and Deploy 2 | 3 | env: 4 | # The name of the main module repository 5 | main_project_module: apps:flipcash:app 6 | 7 | # The name of the Play Store 8 | playstore_name: Flipcash 9 | 10 | on: 11 | # Allows you to run this workflow manually from the Actions tab 12 | workflow_dispatch: 13 | -------------------------------------------------------------------------------- /.github/workflows/build-fchat-upload-android.yml: -------------------------------------------------------------------------------- 1 | name: Flipchat Build and Deploy (Internal) 2 | 3 | env: 4 | # The name of the main module repository 5 | main_project_module: apps:flipchat 6 | 7 | # The name of the Play Store 8 | playstore_name: Flipchat 9 | 10 | on: 11 | # Allows you to run this workflow manually from the Actions tab 12 | workflow_dispatch: 13 | -------------------------------------------------------------------------------- /.github/workflows/prep-dev.yml: -------------------------------------------------------------------------------- 1 | name: Prep next development cycle post release 2 | 3 | on: 4 | push: 5 | tags: 6 | - 'v[0-9]+.[0-9]+.[0-9]' 7 | workflow_dispatch: 8 | 9 | jobs: 10 | sync-branch: 11 | name: Update development branch 12 | runs-on: ubuntu-latest 13 | steps: 14 | - name: Checkout repository 15 | uses: actions/checkout@master 16 | with: 17 | ref: main 18 | - uses: connor-baer/action-sync-branch@main 19 | with: 20 | branch: develop 21 | token: ${{ secrets.GITHUB_TOKEN }} 22 | force: false 23 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | .idea/ 5 | .DS_Store 6 | /build 7 | /captures 8 | .externalNativeBuild 9 | .cxx 10 | local.properties 11 | /keystores/** 12 | /app/release/** 13 | /app/debug/** 14 | -------------------------------------------------------------------------------- /CODEOWNERS: -------------------------------------------------------------------------------- 1 | .github/ @jeffyanta 2 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | 3 | gem "fastlane" 4 | -------------------------------------------------------------------------------- /api/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /api/src/androidTest/java/com/getcode/util/TestUtils.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.util 2 | 3 | import kotlinx.coroutines.CoroutineScope 4 | import kotlinx.coroutines.runBlocking 5 | import kotlin.coroutines.Continuation 6 | import kotlin.coroutines.EmptyCoroutineContext 7 | import kotlin.coroutines.startCoroutine 8 | 9 | fun testBlocking(block : suspend () -> Unit) { 10 | val continuation = Continuation(EmptyCoroutineContext) { 11 | //Do nothing 12 | if (it.isFailure) { 13 | throw it.exceptionOrNull()!! 14 | } 15 | } 16 | block.startCoroutine(continuation) 17 | } 18 | 19 | fun runTest(block: suspend (scope : CoroutineScope) -> Unit) = runBlocking { block(this) } -------------------------------------------------------------------------------- /api/src/androidTest/java/com/getcode/util/UUIDTests.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.util 2 | 3 | import com.getcode.utils.blockchainMemo 4 | import junit.framework.Assert.assertEquals 5 | import org.junit.Test 6 | import java.util.UUID 7 | 8 | class UUIDTests { 9 | @Test 10 | fun testMemo() { 11 | val uuid = UUID.fromString("c24a3bf2-ad4f-4756-944e-81948ff10882") 12 | val memo = uuid.blockchainMemo 13 | 14 | assertEquals( 15 | "Gk2Yb7W6BypLsdRoJqMAqXHDoV2jT", 16 | memo 17 | ) 18 | } 19 | } -------------------------------------------------------------------------------- /api/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/annotations/DevManagedChannel.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.annotations 2 | 3 | import javax.inject.Qualifier 4 | 5 | @Qualifier 6 | @Target( 7 | AnnotationTarget.FUNCTION, 8 | AnnotationTarget.PROPERTY_GETTER, 9 | AnnotationTarget.PROPERTY_SETTER, 10 | AnnotationTarget.VALUE_PARAMETER, 11 | AnnotationTarget.FIELD 12 | ) 13 | annotation class DevManagedChannel -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/crypt/KeyAccount.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.crypt 2 | 3 | import android.content.Context 4 | import com.getcode.solana.organizer.Organizer 5 | import com.getcode.solana.keys.PublicKey 6 | 7 | class KeyAccount( 8 | val mnemonic: MnemonicPhrase, 9 | val derivedKey: DerivedKey, 10 | val tokenAccount: PublicKey 11 | ) { 12 | companion object { 13 | fun newInstance( 14 | mnemonic: MnemonicPhrase, 15 | derivedKey: DerivedKey, 16 | tokenAccount: PublicKey 17 | ): KeyAccount { 18 | return KeyAccount( 19 | mnemonic = mnemonic, 20 | derivedKey = derivedKey, 21 | tokenAccount = tokenAccount 22 | ) 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/crypt/MnemonicCache.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.crypt 2 | 3 | import android.content.Context 4 | 5 | object MnemonicCache { 6 | lateinit var cachedCode: MnemonicCode 7 | private set 8 | 9 | fun init(context: Context) { 10 | cachedCode = MnemonicCode(context.resources) 11 | } 12 | 13 | val cache = mutableMapOf, String>, ByteArray>() 14 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/db/ExchangeDao.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.db 2 | 3 | import androidx.room.Dao 4 | import androidx.room.Insert 5 | import androidx.room.OnConflictStrategy 6 | import androidx.room.Query 7 | import com.getcode.model.Rate 8 | import com.getcode.model.ExchangeRate 9 | import kotlinx.coroutines.flow.Flow 10 | 11 | @Dao 12 | interface ExchangeDao { 13 | @Insert(onConflict = OnConflictStrategy.REPLACE) 14 | suspend fun insert(rates: List, syncedAt: Long) { 15 | insert(*rates.map { ExchangeRate(it.fx, it.currency, syncedAt) }.toTypedArray()) 16 | } 17 | 18 | @Insert(onConflict = OnConflictStrategy.REPLACE) 19 | suspend fun insert(vararg rate: ExchangeRate) 20 | 21 | @Query("SELECT * FROM exchangeData") 22 | fun observeRates(): Flow> 23 | 24 | @Query("SELECT * FROM exchangeData") 25 | suspend fun query(): List 26 | 27 | @Query("DELETE FROM exchangeData") 28 | fun clear() 29 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/db/GiftCardDao.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.db 2 | 3 | import androidx.room.Dao 4 | import androidx.room.Insert 5 | import androidx.room.OnConflictStrategy 6 | import androidx.room.Query 7 | import com.getcode.model.GiftCard 8 | import io.reactivex.rxjava3.core.Flowable 9 | import io.reactivex.rxjava3.core.Maybe 10 | 11 | 12 | @Dao 13 | interface GiftCardDao { 14 | @Query("SELECT * FROM GiftCard WHERE `key` = :key") 15 | fun get(key: String): Flowable 16 | 17 | @Query("SELECT * FROM GiftCard WHERE `key` = :key") 18 | fun getMaybe(key: String): Maybe 19 | 20 | @Insert(onConflict = OnConflictStrategy.REPLACE) 21 | fun insert(item: GiftCard) 22 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/db/InMemoryDao.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.db 2 | 3 | import com.getcode.network.repository.BalanceRepository 4 | import com.getcode.network.repository.TransactionRepository 5 | import javax.inject.Inject 6 | import javax.inject.Singleton 7 | 8 | @Singleton 9 | class InMemoryDao @Inject constructor( 10 | private val balanceRepository: BalanceRepository, 11 | private val transactionRepository: TransactionRepository 12 | ) { 13 | fun clear() { 14 | balanceRepository.clearBalance() 15 | transactionRepository.clear() 16 | } 17 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/db/PrefBoolDao.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.db 2 | 3 | import androidx.room.Dao 4 | import androidx.room.Insert 5 | import androidx.room.OnConflictStrategy 6 | import androidx.room.Query 7 | import com.getcode.model.PrefBool 8 | import io.reactivex.rxjava3.core.Flowable 9 | import io.reactivex.rxjava3.core.Maybe 10 | import kotlinx.coroutines.flow.Flow 11 | 12 | @Dao 13 | interface PrefBoolDao { 14 | @Query("SELECT * FROM PrefBool WHERE key = :key") 15 | fun get(key: String): Flowable 16 | @Query("SELECT * FROM PrefBool WHERE key = :key") 17 | fun observe(key: String): Flow 18 | 19 | @Query("SELECT * FROM PrefBool WHERE key = :key") 20 | fun getMaybe(key: String): Maybe 21 | 22 | @Insert(onConflict = OnConflictStrategy.REPLACE) 23 | suspend fun insert(item: PrefBool) 24 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/db/PrefDoubleDao.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.db 2 | 3 | import androidx.room.Dao 4 | import androidx.room.Insert 5 | import androidx.room.OnConflictStrategy 6 | import androidx.room.Query 7 | import com.getcode.model.PrefBool 8 | import com.getcode.model.PrefDouble 9 | import io.reactivex.rxjava3.core.Flowable 10 | import io.reactivex.rxjava3.core.Maybe 11 | import kotlinx.coroutines.flow.Flow 12 | 13 | @Dao 14 | interface PrefDoubleDao { 15 | @Query("SELECT * FROM PrefDouble WHERE `key` = :key") 16 | fun get(key: String): Flowable 17 | 18 | @Query("SELECT * FROM PrefDouble WHERE key = :key") 19 | fun observe(key: String): Flow 20 | 21 | @Query("SELECT * FROM PrefDouble WHERE `key` = :key") 22 | fun getMaybe(key: String): Maybe 23 | 24 | @Insert(onConflict = OnConflictStrategy.REPLACE) 25 | suspend fun insert(item: PrefDouble) 26 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/db/PrefIntDao.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.db 2 | 3 | import androidx.room.Dao 4 | import androidx.room.Insert 5 | import androidx.room.OnConflictStrategy 6 | import androidx.room.Query 7 | import com.getcode.model.PrefBool 8 | import com.getcode.model.PrefInt 9 | import io.reactivex.rxjava3.core.Flowable 10 | import io.reactivex.rxjava3.core.Maybe 11 | import kotlinx.coroutines.flow.Flow 12 | 13 | @Dao 14 | interface PrefIntDao { 15 | @Query("SELECT * FROM PrefInt WHERE key = :key") 16 | fun get(key: String): Flowable 17 | 18 | @Query("SELECT * FROM PrefInt WHERE key = :key") 19 | fun observe(key: String): Flow 20 | 21 | @Query("SELECT * FROM PrefInt WHERE key = :key") 22 | fun getMaybe(key: String): Maybe 23 | 24 | @Insert(onConflict = OnConflictStrategy.REPLACE) 25 | suspend fun insert(item: PrefInt) 26 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/db/PrefStringDao.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.db 2 | 3 | import androidx.room.Dao 4 | import androidx.room.Insert 5 | import androidx.room.OnConflictStrategy 6 | import androidx.room.Query 7 | import com.getcode.model.PrefBool 8 | import com.getcode.model.PrefString 9 | import io.reactivex.rxjava3.core.Flowable 10 | import io.reactivex.rxjava3.core.Maybe 11 | import kotlinx.coroutines.flow.Flow 12 | 13 | @Dao 14 | interface PrefStringDao { 15 | @Query("SELECT * FROM PrefString WHERE key = :key") 16 | fun get(key: String): Flowable 17 | 18 | @Query("SELECT * FROM PrefString WHERE key = :key") 19 | fun observe(key: String): Flow 20 | 21 | @Query("SELECT * FROM PrefString WHERE key = :key") 22 | fun getMaybe(key: String): Maybe 23 | 24 | @Insert(onConflict = OnConflictStrategy.REPLACE) 25 | suspend fun insert(item: PrefString) 26 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/generator/Generator.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.generator 2 | 3 | interface Generator { 4 | fun generate(predicate: D): R 5 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/generator/GiftCardGenerator.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.generator 2 | 3 | import com.getcode.crypt.MnemonicPhrase 4 | import com.getcode.solana.organizer.GiftCardAccount 5 | import javax.inject.Inject 6 | 7 | class GiftCardGenerator @Inject constructor( 8 | ): Generator { 9 | override fun generate(predicate: MnemonicPhrase?): GiftCardAccount { 10 | return GiftCardAccount.newInstance(predicate) 11 | } 12 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/generator/MnemonicGenerator.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.generator 2 | 3 | import com.getcode.crypt.MnemonicPhrase 4 | import com.getcode.utils.Base58String 5 | import com.getcode.utils.Base64String 6 | import javax.inject.Inject 7 | 8 | class MnemonicGenerator @Inject constructor( 9 | ): Generator { 10 | 11 | override fun generate(predicate: Base64String): MnemonicPhrase { 12 | return MnemonicPhrase.fromEntropyB64(predicate) 13 | } 14 | 15 | fun generateFromBase58(predicate: Base58String): MnemonicPhrase { 16 | return MnemonicPhrase.fromEntropyB58(predicate) 17 | } 18 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/generator/OrganizerGenerator.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.generator 2 | 3 | import com.getcode.crypt.MnemonicPhrase 4 | import com.getcode.solana.organizer.Organizer 5 | import javax.inject.Inject 6 | 7 | class OrganizerGenerator @Inject constructor(): Generator { 8 | 9 | override fun generate(predicate: MnemonicPhrase): Organizer { 10 | return Organizer.newInstance(predicate) 11 | } 12 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/manager/GiftCardManager.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.manager 2 | 3 | import com.getcode.crypt.MnemonicPhrase 4 | import com.getcode.generator.GiftCardGenerator 5 | import com.getcode.solana.organizer.GiftCardAccount 6 | import javax.inject.Inject 7 | 8 | class GiftCardManager @Inject constructor( 9 | private val generator: GiftCardGenerator 10 | ) { 11 | fun createGiftCard(mnemonic: MnemonicPhrase? = null): GiftCardAccount { 12 | return generator.generate(mnemonic) 13 | } 14 | 15 | fun getEntropy(giftCard: GiftCardAccount): String { 16 | return giftCard.mnemonicPhrase.getBase58EncodedEntropy() 17 | } 18 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/mapper/ChatMemberMapper.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.mapper 2 | 3 | import com.codeinc.gen.chat.v2.ChatService 4 | import com.getcode.model.chat.ChatMember 5 | import com.getcode.model.chat.Identity 6 | import com.getcode.model.chat.Pointer 7 | import com.getcode.model.uuid 8 | import javax.inject.Inject 9 | 10 | class ChatMemberMapper @Inject constructor(): Mapper { 11 | override fun map(from: ChatService.ChatMember): ChatMember? { 12 | return ChatMember( 13 | id = from.memberId.value.toByteArray().toList().uuid ?: return null, 14 | identity = runCatching { Identity(from.identity) }.getOrNull(), 15 | isMuted = from.isMuted, 16 | isSelf = from.isSelf, 17 | isSubscribed = from.isSubscribed, 18 | numUnread = from.numUnread, 19 | pointers = from.pointersList.map { Pointer(it) } 20 | ) 21 | } 22 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/mapper/ConversationMessageMapper.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.mapper 2 | 3 | import com.getcode.model.ConversationMessage 4 | import com.getcode.model.ID 5 | import com.getcode.model.chat.ChatMessage 6 | import com.getcode.network.repository.base58 7 | import javax.inject.Inject 8 | 9 | class ConversationMessageMapper @Inject constructor() : 10 | Mapper, ConversationMessage> { 11 | override fun map(from: Pair): ConversationMessage { 12 | val (conversationId, message) = from 13 | 14 | return ConversationMessage( 15 | idBase58 = message.id.base58, 16 | cursorBase58 = message.cursor.base58, 17 | conversationIdBase58 = conversationId.base58, 18 | dateMillis = message.dateMillis, 19 | // status = message.status 20 | ) 21 | } 22 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/mapper/ConversationMessageWithContentMapper.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.mapper 2 | 3 | import com.getcode.model.ConversationMessageContent 4 | import com.getcode.model.ConversationMessageWithContent 5 | import com.getcode.model.ID 6 | import com.getcode.model.chat.ChatMessage 7 | import com.getcode.model.chat.MessageContent 8 | import javax.inject.Inject 9 | 10 | class ConversationMessageWithContentMapper @Inject constructor( 11 | private val messageMapper: ConversationMessageMapper, 12 | ): Mapper, ConversationMessageWithContent> { 13 | override fun map(from: Pair): ConversationMessageWithContent { 14 | val (_, message) = from 15 | val conversationMessage = messageMapper.map(from) 16 | 17 | return ConversationMessageWithContent( 18 | message = conversationMessage, 19 | contents = message.contents 20 | ) 21 | } 22 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/mapper/Mapper.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.mapper 2 | 3 | interface Mapper { 4 | fun map(from: F): T 5 | } 6 | 7 | interface SuspendMapper { 8 | suspend fun map(from: F): T 9 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/model/AirdropType.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.model 2 | 3 | 4 | import com.codeinc.gen.transaction.v2.TransactionService 5 | 6 | enum class AirdropType { 7 | Unknown, 8 | GiveFirstKin, 9 | GetFirstKin; 10 | 11 | companion object { 12 | fun getInstance(airdropType: TransactionService.AirdropType): AirdropType? { 13 | return when (airdropType) { 14 | TransactionService.AirdropType.UNKNOWN -> Unknown 15 | TransactionService.AirdropType.GIVE_FIRST_KIN -> GiveFirstKin 16 | TransactionService.AirdropType.GET_FIRST_KIN -> GetFirstKin 17 | TransactionService.AirdropType.UNRECOGNIZED -> null 18 | } 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/model/ClientSignature.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.model 2 | 3 | import com.getcode.solana.keys.Signature 4 | 5 | data class ClientSignature( 6 | val transaction: Signature, 7 | val signature: Signature 8 | ) 9 | -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/model/Currency.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.model 2 | 3 | data class Currency( 4 | val code: String, 5 | val name: String, 6 | val resId: Int? = null, 7 | val symbol: String = "", 8 | val rate: Double = 0.0 9 | ) { 10 | companion object 11 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/model/CurrencyRate.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.model 2 | 3 | import androidx.room.Entity 4 | import androidx.room.PrimaryKey 5 | 6 | @Entity 7 | data class CurrencyRate( 8 | @PrimaryKey val id: String, 9 | val rate: Double 10 | ) -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/model/Cursor.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.model 2 | 3 | typealias Cursor = List -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/model/EncryptedData.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.model 2 | 3 | import com.getcode.ed25519.Ed25519.KeyPair 4 | import com.getcode.solana.keys.PublicKey 5 | import com.getcode.solana.keys.boxOpen 6 | import com.getcode.solana.keys.encryptionPrivateKey 7 | import kotlinx.serialization.Serializable 8 | 9 | @Serializable 10 | data class EncryptedData( 11 | val peerPublicKey: PublicKey, 12 | val nonce: List, 13 | val encryptedData: List 14 | ) { 15 | fun decryptMessageUsingNaClBox(keyPair: KeyPair): String? { 16 | val encryptionKey = keyPair.encryptionPrivateKey ?: return null 17 | 18 | val data = encryptedData.boxOpen( 19 | privateKey = encryptionKey, 20 | publicKey = peerPublicKey, 21 | nonce = nonce, 22 | ).getOrNull() ?: return null 23 | 24 | return String(data.toByteArray()) 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/model/FaqItem.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.model 2 | 3 | import androidx.room.Entity 4 | import androidx.room.PrimaryKey 5 | 6 | 7 | @Entity 8 | data class FaqItem( 9 | @PrimaryKey(autoGenerate = true) val uid: Int? = null, 10 | val question: String, 11 | val answer: String 12 | ) -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/model/GiftCard.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.model 2 | 3 | import androidx.room.Entity 4 | import androidx.room.PrimaryKey 5 | 6 | @Entity 7 | data class GiftCard( 8 | @PrimaryKey val key: String, //base58 9 | val entropy: String, //base58 10 | val amount: Long, 11 | val date: Long 12 | ) -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/model/ID.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.model 2 | 3 | import com.getcode.network.repository.hexEncodedString 4 | import java.nio.ByteBuffer 5 | import java.util.UUID 6 | 7 | typealias ID = List 8 | 9 | val ID.uuid: UUID? 10 | get() { 11 | if (size != 16) return null 12 | 13 | val byteBuffer = ByteBuffer.wrap(this.toByteArray()) 14 | val high = byteBuffer.getLong() 15 | val low = byteBuffer.getLong() 16 | return UUID(high, low) 17 | } 18 | 19 | val ID.description: String 20 | get() = uuid?.toString() ?: hexEncodedString() 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/model/Intent.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.model 2 | 3 | sealed class Intent { 4 | data class Transfer( 5 | val id: List, 6 | val amount: KinAmount, 7 | val source: List, 8 | val destination: SendDestination 9 | ) : Intent() 10 | 11 | data class CreateTokenAccount( 12 | val id: List, 13 | val owner: List 14 | ) : Intent() 15 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/model/PrefDouble.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.model 2 | 3 | import androidx.room.Entity 4 | import androidx.room.PrimaryKey 5 | 6 | @Entity 7 | data class PrefDouble( 8 | @PrimaryKey val key: String, 9 | val value: Double 10 | ) -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/model/PrefInt.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.model 2 | 3 | import androidx.room.Entity 4 | import androidx.room.PrimaryKey 5 | 6 | @Entity 7 | data class PrefInt( 8 | @PrimaryKey val key: String, 9 | val value: Long 10 | ) 11 | 12 | sealed class PrefsInt(val value: String) { 13 | data object AccountCreated: PrefsInt("account_created") 14 | } 15 | -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/model/PrefString.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.model 2 | 3 | import androidx.room.Entity 4 | import androidx.room.PrimaryKey 5 | 6 | @Entity 7 | data class PrefString( 8 | @PrimaryKey val key: String, 9 | val value: String 10 | ) 11 | 12 | enum class PrefsString(val value: String) { 13 | KEY_USER_ID("user_id"), 14 | KEY_DATA_CONTAINER_ID("data_container_id"), 15 | KEY_ENTRY_CURRENCY("currency_selected"),//keep 16 | KEY_CURRENCIES_RECENT("currencies_recent"),//keep 17 | KEY_TIP_ACCOUNT("tip_account"), 18 | KEY_LOCAL_CURRENCY("balance_currency_selected") 19 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/model/Rate.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.model 2 | 3 | import androidx.room.ColumnInfo 4 | import androidx.room.Entity 5 | import androidx.room.PrimaryKey 6 | import kotlinx.serialization.Serializable 7 | 8 | 9 | @Serializable 10 | data class Rate( 11 | val fx: Double, 12 | val currency: CurrencyCode 13 | ) { 14 | companion object { 15 | val oneToOne = Rate(fx = 1.0, currency = CurrencyCode.KIN) 16 | } 17 | } 18 | 19 | fun Rate?.orOneToOne() = this ?: Rate.oneToOne 20 | 21 | @Serializable 22 | @Entity(tableName = "exchangeData") 23 | data class ExchangeRate( 24 | @ColumnInfo(name = "fiat") 25 | val fx: Double, 26 | @PrimaryKey 27 | val currency: CurrencyCode, 28 | @ColumnInfo(name = "synced_at") 29 | val synced: Long, 30 | ) -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/model/SendDestination.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.model 2 | 3 | sealed class SendDestination { 4 | data class SendDestinationPublicKey( 5 | val publicKey: List, 6 | ) : SendDestination() 7 | 8 | data class SendDestinationPhone( 9 | val phoneNumber: String 10 | ) : SendDestination() 11 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/model/SocialUser.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.model 2 | 3 | import com.getcode.solana.keys.PublicKey 4 | import com.getcode.utils.serializer.PublicKeyAsStringSerializer 5 | import kotlinx.serialization.Serializable 6 | 7 | @Serializable 8 | sealed interface SocialUser { 9 | val platform: String 10 | val username: String 11 | @Serializable(with = PublicKeyAsStringSerializer::class) 12 | val tipAddress: PublicKey 13 | val imageUrl: String? 14 | 15 | val imageUrlSanitized: String? 16 | 17 | val costOfFriendship: Fiat 18 | val isFriend: Boolean 19 | val chatId: ID 20 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/model/StreamEvent.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.model 2 | 3 | sealed class StreamEvent(val id: String) { 4 | class SimulationEvent( 5 | id: String, 6 | val isFailed: Boolean, 7 | val rendezvousKey: ByteArray, 8 | val exchangeCurrency: String?, 9 | val exchangeRate: Double?, 10 | val amountNative: Double?, 11 | val kin: Kin?, 12 | val region: String? 13 | ) : StreamEvent(id) 14 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/model/UpgradeableIntent.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.model 2 | 3 | import com.codeinc.gen.transaction.v2.TransactionService 4 | import com.getcode.solana.keys.PublicKey 5 | 6 | class UpgradeableIntent( 7 | val id: PublicKey, 8 | val actions: List, 9 | ) { 10 | companion object { 11 | fun newInstance(proto: TransactionService.UpgradeableIntent): UpgradeableIntent { 12 | val intentId = PublicKey(proto.id.value.toByteArray().toList()) 13 | 14 | val actions = proto.actionsList.map { 15 | UpgradeablePrivateAction.newInstance(it) 16 | } 17 | 18 | return UpgradeableIntent(intentId, actions) 19 | } 20 | 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/model/Username.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.model 2 | 3 | data class Username(val value: String): Value -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/model/chat/ChatStreamEventUpdate.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.model.chat 2 | 3 | import com.getcode.mapper.PointerStatus 4 | 5 | data class ChatStreamEventUpdate( 6 | val messages: List, 7 | val pointers: List, 8 | val isTyping: Boolean, 9 | ) -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/model/chat/ChatType.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.model.chat 2 | 3 | import com.codeinc.gen.chat.v2.ChatService 4 | 5 | enum class ChatType { 6 | Unknown, 7 | Notification, 8 | TwoWay; 9 | 10 | companion object { 11 | operator fun invoke(proto: ChatService.ChatType): ChatType { 12 | return runCatching { entries[proto.ordinal] }.getOrNull() ?: Unknown 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/model/chat/OutgoingMessageContent.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.model.chat 2 | 3 | import com.getcode.model.ID 4 | 5 | sealed interface OutgoingMessageContent { 6 | data class Text(val text: String): OutgoingMessageContent 7 | data class ThankYou(val tipIntentId: ID): OutgoingMessageContent 8 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/model/chat/Platform.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.model.chat 2 | 3 | import com.codeinc.gen.chat.v2.ChatService 4 | 5 | enum class Platform { 6 | Unknown, 7 | Twitter; 8 | 9 | companion object { 10 | operator fun invoke(proto: ChatService.Platform): Platform { 11 | return runCatching { entries[proto.ordinal] }.getOrNull() ?: Unknown 12 | } 13 | 14 | fun named(name: String): Platform { 15 | val normalizedName = name.lowercase() 16 | return entries.firstOrNull { 17 | it.name.lowercase() == normalizedName || 18 | (normalizedName == "x" && it.name.lowercase() == "twitter") 19 | } ?: Unknown 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/model/chat/Title.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.model.chat 2 | 3 | import com.codeinc.gen.chat.v1.ChatService 4 | 5 | sealed interface Title { 6 | val value: String 7 | 8 | data class Localized(override val value: String) : Title 9 | data class Domain(override val value: String) : Title 10 | 11 | companion object { 12 | operator fun invoke(proto: ChatService.ChatMetadata): Title? { 13 | return when (proto.titleCase) { 14 | ChatService.ChatMetadata.TitleCase.LOCALIZED -> Localized(proto.localized.keyOrText) 15 | ChatService.ChatMetadata.TitleCase.DOMAIN -> Domain(proto.domain.value) 16 | ChatService.ChatMetadata.TitleCase.TITLE_NOT_SET -> null 17 | else -> null 18 | } 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/model/notifications/CodeNotification.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.model.notifications 2 | 3 | import com.getcode.model.chat.MessageContent 4 | 5 | data class CodeNotification( 6 | val type: NotificationType, 7 | val title: String, 8 | val body: MessageContent, 9 | ) 10 | 11 | enum class NotificationType { 12 | ChatMessage, 13 | Twitter, 14 | ExecuteSwap, 15 | Unknown; 16 | 17 | fun isNotifiable() = this != ExecuteSwap 18 | 19 | companion object { 20 | fun tryValueOf(value: String): NotificationType { 21 | return runCatching { valueOf(value) }.getOrNull() ?: Unknown 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/network/api/PushApi.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.network.api 2 | 3 | import com.codeinc.gen.push.v1.PushGrpc 4 | import com.codeinc.gen.push.v1.PushService 5 | import com.getcode.network.core.GrpcApi 6 | import io.grpc.ManagedChannel 7 | import io.reactivex.rxjava3.annotations.NonNull 8 | import io.reactivex.rxjava3.core.Scheduler 9 | import io.reactivex.rxjava3.core.Single 10 | import io.reactivex.rxjava3.schedulers.Schedulers 11 | import javax.inject.Inject 12 | 13 | class PushApi @Inject constructor( 14 | managedChannel: ManagedChannel, 15 | private val scheduler: Scheduler = Schedulers.io(), 16 | ) : GrpcApi(managedChannel) { 17 | private val api = PushGrpc.newStub(managedChannel).withWaitForReady() 18 | 19 | fun addToken(request: PushService.AddTokenRequest): @NonNull Single { 20 | return api::addToken 21 | .callAsSingle(request) 22 | .subscribeOn(scheduler) 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/network/client/Client_Account.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.network.client 2 | 3 | import com.getcode.ed25519.Ed25519.KeyPair 4 | 5 | suspend fun Client.isCodeAccount(owner: KeyPair): Result { 6 | return accountService.isCodeAccount(owner) 7 | } 8 | 9 | suspend fun Client.linkAdditionalAccount(owner: KeyPair, linkedAccount: KeyPair): Result { 10 | return accountService.linkAdditionalAccounts(owner, linkedAccount) 11 | } 12 | -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/network/client/Client_Device.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.network.client 2 | 3 | import com.getcode.ed25519.Ed25519.KeyPair 4 | import com.getcode.solana.keys.PublicKey 5 | import timber.log.Timber 6 | 7 | suspend fun Client.registerInstallation( 8 | owner: KeyPair, 9 | installationId: String, 10 | ): Result { 11 | return deviceService.registerInstallation(owner, installationId) 12 | .onSuccess { 13 | Timber.d("Registered installation: $installationId") 14 | } 15 | } 16 | 17 | suspend fun Client.fetchInstallationAccounts( 18 | installationId: String 19 | ): Result> { 20 | return deviceService.fetchInstallations(installationId) 21 | .onSuccess { 22 | Timber.d("fetched ${it.count()} accounts") 23 | } 24 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/network/repository/BalanceRepository.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.network.repository 2 | 3 | 4 | import kotlinx.coroutines.flow.MutableStateFlow 5 | import timber.log.Timber 6 | import javax.inject.Inject 7 | import javax.inject.Singleton 8 | 9 | @Singleton 10 | class BalanceRepository @Inject constructor() { 11 | 12 | val balanceFlow = MutableStateFlow(-1.0) 13 | 14 | fun setBalance(balance: Double) { 15 | balanceFlow.value = balance 16 | } 17 | 18 | fun clearBalance() { 19 | balanceFlow.value = 0.0 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/network/repository/ObservableVariable.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.network.repository 2 | 3 | import io.reactivex.rxjava3.subjects.BehaviorSubject 4 | 5 | class ObservableVariable(private val defaultValue: T) { 6 | var value: T = defaultValue 7 | set(value) { 8 | field = value 9 | observable.onNext(value) 10 | } 11 | val observable = BehaviorSubject.createDefault(value) 12 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/solana/instructions/programs/AssociatedTokenProgram.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.solana.instructions.programs 2 | 3 | import com.getcode.solana.keys.PublicKey 4 | import com.getcode.vendor.Base58 5 | 6 | class AssociatedTokenProgram { 7 | companion object { 8 | val address = PublicKey(Base58.decode("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL").toList()) 9 | } 10 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/solana/instructions/programs/ComputeBudgetProgram.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.solana.instructions.programs 2 | 3 | import com.getcode.solana.instructions.CommandType 4 | import com.getcode.solana.keys.PublicKey 5 | import com.getcode.vendor.Base58 6 | 7 | class ComputeBudgetProgram { 8 | 9 | enum class Command(val value: Byte) { 10 | requestUnits(0), 11 | requestHeapFrame(1), 12 | setComputeUnitLimit(2), 13 | setComputeUnitPrice(3), 14 | } 15 | 16 | companion object: CommandType() { 17 | override val address = PublicKey(Base58.decode("ComputeBudget111111111111111111111111111111").toList()) 18 | 19 | override val commandByteLength: Int 20 | get() = Byte.SIZE_BYTES 21 | 22 | override fun commandLookup(bytes: ByteArray): Command? { 23 | return Command.entries.firstOrNull { it.value == bytes.first() } 24 | } 25 | } 26 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/solana/instructions/programs/SwapValidatorProgram.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.solana.instructions.programs 2 | 3 | import com.getcode.solana.instructions.CommandType 4 | import com.getcode.solana.keys.PublicKey 5 | import com.getcode.utils.DataSlice.toLong 6 | import com.getcode.vendor.Base58 7 | 8 | class SwapValidatorProgram { 9 | enum class Command(val value: Long) { 10 | preSwap("717F49CF8AC7DDB7".toULong(16).toLong()), 11 | postSwap("A1758AB339B7D59F".toULong(16).toLong()) 12 | } 13 | 14 | companion object: CommandType() { 15 | override val address = PublicKey(Base58.decode("sWvA66HNNvgamibZe88v3NN5nQwE8tp3KitfViFjukA").toList()) 16 | override val commandByteLength: Int get() = Long.SIZE_BYTES 17 | 18 | override fun commandLookup(bytes: ByteArray): Command? { 19 | return Command.entries.firstOrNull { it.value == bytes.toLong() } 20 | } 21 | } 22 | } 23 | 24 | -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/solana/instructions/programs/SystemProgram.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.solana.instructions.programs 2 | 3 | import com.getcode.solana.keys.LENGTH_32 4 | import com.getcode.solana.keys.PublicKey 5 | 6 | class SystemProgram { 7 | 8 | enum class Command { 9 | createAccount, 10 | assign, 11 | transfer, 12 | createAccountWithSeed, 13 | advanceNonceAccount, 14 | withdrawNonceAccount, 15 | initializeNonceAccount, 16 | authorizeNonceAccount, 17 | allocate, 18 | allocateWithSeed, 19 | assignWithSeed, 20 | transferWithSeed, 21 | } 22 | 23 | companion object { 24 | val address = PublicKey(ByteArray(LENGTH_32) { 0 }.toList()) 25 | } 26 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/solana/instructions/programs/TokenProgram.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.solana.instructions.programs 2 | 3 | import com.getcode.solana.keys.PublicKey 4 | import com.getcode.vendor.Base58 5 | 6 | class TokenProgram { 7 | companion object { 8 | val address = PublicKey(Base58.decode("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA").toList()) 9 | } 10 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/solana/keys/MerkleProof.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.solana.keys 2 | 3 | import com.getcode.crypt.Sha256Hash 4 | import com.getcode.solana.AccountMeta 5 | 6 | fun KeyType.verifyContained(merkleRoot: Hash, proof: List): Boolean { 7 | return byteArray.verifyContained(merkleRoot, proof) 8 | } 9 | 10 | fun ByteArray.verifyContained(merkleRoot: Hash, proof: List): Boolean { 11 | var hash = Sha256Hash.hash(this) 12 | 13 | val proofNodes = proof.map { it.bytes } 14 | proofNodes.forEach { n -> 15 | hash = if ( 16 | AccountMeta.compareLexicographically(hash, n.toByteArray()) < 0 || 17 | hash.toList() == n 18 | ) { 19 | Sha256Hash.hash(hash + n.toByteArray()) 20 | } else { 21 | Sha256Hash.hash(n.toByteArray() + hash) 22 | } 23 | } 24 | 25 | return hash.toList() == merkleRoot.bytes 26 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/solana/keys/Mint.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.solana.keys 2 | 3 | import org.kin.sdk.base.tools.Base58 4 | 5 | typealias Mint = PublicKey 6 | 7 | val Mint.kin: Mint 8 | get() = PublicKey(Base58.decode("kinXdEcpDQeHPEuQnqmUgtYykqKGVFq6CeVX5iAHJq6").toList()) 9 | 10 | val Mint.usdc 11 | get() = Mint(Base58.decode("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v").toList()) -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/solana/keys/Types.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.solana.keys 2 | 3 | typealias Seed16 = Key16 4 | 5 | typealias Seed32 = Key32 6 | typealias Hash = Key32 7 | 8 | typealias PrivateKey = Key64 9 | 10 | class Signature(bytes: List): Key64(bytes) { 11 | companion object { 12 | val zero = Signature(ByteArray(LENGTH_64).toList()) 13 | } 14 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/solana/organizer/PartialAccount.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.solana.organizer 2 | 3 | import com.getcode.model.Kin 4 | 5 | data class PartialAccount(val cluster: Lazy, var partialBalance: Kin = Kin.fromKin(0)) { 6 | fun getCluster() = cluster.value 7 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/utils/CloudMessaging.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.utils 2 | 3 | import com.google.firebase.messaging.FirebaseMessaging 4 | import kotlinx.coroutines.suspendCancellableCoroutine 5 | import kotlin.coroutines.resume 6 | 7 | suspend fun FirebaseMessaging.token(): String? = suspendCancellableCoroutine { cont -> 8 | 9 | this.token.addOnCanceledListener { cont.resume(null) } 10 | .addOnFailureListener { 11 | ErrorUtils.handleError(it) 12 | cont.resume(null) 13 | }.addOnSuccessListener { cont.resume(it) } 14 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/utils/Double.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.utils 2 | 3 | 4 | fun Double.toByteArray(): ByteArray { 5 | val longBits = java.lang.Double.doubleToLongBits(this) 6 | val byteArray = ByteArray(8) 7 | 8 | for (i in 0 until 8) { 9 | byteArray[i] = (longBits shr (8 * (7 - i))).toByte() 10 | } 11 | 12 | return byteArray 13 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/utils/Installations.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.utils 2 | 3 | import com.google.firebase.installations.FirebaseInstallations 4 | import kotlinx.coroutines.suspendCancellableCoroutine 5 | import kotlin.coroutines.resume 6 | 7 | suspend fun FirebaseInstallations.installationId(): String? = suspendCancellableCoroutine { cont -> 8 | this.id.addOnCanceledListener { cont.resume(null) } 9 | .addOnFailureListener { 10 | ErrorUtils.handleError(it) 11 | cont.resume(null) 12 | }.addOnSuccessListener { cont.resume(it) } 13 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/utils/KeyPair.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.utils 2 | 3 | import android.util.Base64 4 | import com.getcode.crypt.Sha256Hash 5 | import com.getcode.ed25519.Ed25519 6 | import com.getcode.ed25519.Ed25519.KeyPair 7 | 8 | fun deriveRendezvousKey(from: ByteArray): KeyPair { 9 | return Ed25519.createKeyPair(Base64.encodeToString(Sha256Hash.hash(from), Base64.DEFAULT)) 10 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/utils/Long.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.utils 2 | 3 | import kotlin.math.floor 4 | 5 | val Long.floored: Long 6 | get() { 7 | val seconds = this / 1000.0 8 | val flooredSeconds = floor(seconds) 9 | return (flooredSeconds * 1_000).toLong() 10 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/utils/Maps.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.utils 2 | 3 | inline fun MutableMap.getOrPutIfNonNull(key: K, defaultValue: () -> V?): V? { 4 | val value = get(key) 5 | return if (value == null) { 6 | val answer = defaultValue() 7 | if (answer != null) { 8 | put(key, answer) 9 | } 10 | answer 11 | } else { 12 | value 13 | } 14 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/utils/Nonce.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.utils 2 | 3 | import kotlin.random.Random 4 | 5 | val nonce 6 | get() = Random.nextBytes(11).toList() 7 | -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/utils/SignMessage.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.utils 2 | 3 | import com.codeinc.gen.common.v1.Model 4 | import com.getcode.ed25519.Ed25519 5 | import com.getcode.network.repository.toSignature 6 | import com.google.protobuf.GeneratedMessageLite 7 | import java.io.ByteArrayOutputStream 8 | 9 | fun , B : GeneratedMessageLite.Builder> GeneratedMessageLite.Builder.sign(owner: Ed25519.KeyPair): Model.Signature { 10 | val bos = ByteArrayOutputStream() 11 | this.buildPartial().writeTo(bos) 12 | return Ed25519.sign(bos.toByteArray(), owner).toSignature() 13 | } 14 | -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/utils/serializer/KinSerializer.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.utils.serializer 2 | 3 | import com.getcode.model.Kin 4 | import kotlinx.serialization.KSerializer 5 | import kotlinx.serialization.descriptors.PrimitiveKind 6 | import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor 7 | import kotlinx.serialization.descriptors.SerialDescriptor 8 | import kotlinx.serialization.encoding.Decoder 9 | import kotlinx.serialization.encoding.Encoder 10 | 11 | object KinQuarksSerializer : KSerializer { 12 | override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("Kin", PrimitiveKind.LONG) 13 | 14 | override fun serialize(encoder: Encoder, value: Kin) { 15 | encoder.encodeLong(value.quarks) 16 | } 17 | 18 | override fun deserialize(decoder: Decoder): Kin { 19 | val quarks = decoder.decodeLong() 20 | return Kin.fromQuarks(quarks) 21 | } 22 | } -------------------------------------------------------------------------------- /api/src/main/java/com/getcode/utils/serializer/UUIDSerializer.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.utils.serializer 2 | 3 | import kotlinx.serialization.KSerializer 4 | import kotlinx.serialization.descriptors.PrimitiveKind 5 | import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor 6 | import kotlinx.serialization.descriptors.SerialDescriptor 7 | import kotlinx.serialization.encoding.Decoder 8 | import kotlinx.serialization.encoding.Encoder 9 | import java.util.UUID 10 | 11 | object UUIDSerializer : KSerializer { 12 | override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("UUID", PrimitiveKind.STRING) 13 | 14 | override fun serialize(encoder: Encoder, value: UUID) { 15 | encoder.encodeString(value.toString()) 16 | } 17 | 18 | override fun deserialize(decoder: Decoder): UUID { 19 | return UUID.fromString(decoder.decodeString()) 20 | } 21 | } -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | google-services.json 3 | -------------------------------------------------------------------------------- /app/libs/kik-code-encode-0.1.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/libs/kik-code-encode-0.1.3.jar -------------------------------------------------------------------------------- /app/libs/kik-code-encode-native-0.1.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/libs/kik-code-encode-native-0.1.3.jar -------------------------------------------------------------------------------- /app/libs/kik-code-scan-0.1.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/libs/kik-code-scan-0.1.3.jar -------------------------------------------------------------------------------- /app/libs/kik-code-scan-native-0.1.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/libs/kik-code-scan-native-0.1.3.jar -------------------------------------------------------------------------------- /app/src/debug/res/drawable/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 6 | 8 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/debug/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Code Dev 3 | -------------------------------------------------------------------------------- /app/src/debug/res/xml/authenticator.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /app/src/main/java/com/getcode/analytics/AnalyticsScreenWatcher.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.analytics 2 | 3 | import androidx.compose.runtime.Composable 4 | import androidx.compose.ui.platform.LocalLifecycleOwner 5 | import androidx.lifecycle.LifecycleOwner 6 | import cafe.adriel.voyager.core.screen.Screen 7 | import com.getcode.navigation.core.LocalCodeNavigator 8 | 9 | @Composable 10 | fun Screen.AnalyticsScreenWatcher( 11 | lifecycleOwner: LifecycleOwner = LocalLifecycleOwner.current, 12 | action: Action, 13 | ) { 14 | val navigator = LocalCodeNavigator.current 15 | val lastItem = navigator.lastItem 16 | if (lastItem?.key == key) { 17 | AnalyticsWatcher( 18 | lifecycleOwner = lifecycleOwner, 19 | onEvent = { analytics, _ -> analytics.action(action) } 20 | ) 21 | } 22 | } -------------------------------------------------------------------------------- /app/src/main/java/com/getcode/api/KadoApi.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.api 2 | 3 | import com.google.gson.JsonObject 4 | import okhttp3.ResponseBody 5 | import retrofit2.Response 6 | import retrofit2.http.GET 7 | import retrofit2.http.Path 8 | 9 | interface KadoApi { 10 | @GET("v2/public/orders/{orderId}") 11 | suspend fun getOrderStatus(@Path("orderId") orderId: String): Response 12 | } -------------------------------------------------------------------------------- /app/src/main/java/com/getcode/inject/TipModule.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.inject 2 | 3 | import android.content.Context 4 | import dagger.Module 5 | import dagger.Provides 6 | import dagger.hilt.InstallIn 7 | import dagger.hilt.android.qualifiers.ApplicationContext 8 | import dagger.hilt.components.SingletonComponent 9 | import dev.bmcreations.tipkit.engines.EventEngine 10 | import dev.bmcreations.tipkit.engines.TipsEngine 11 | import javax.inject.Singleton 12 | 13 | @Module 14 | @InstallIn(SingletonComponent::class) 15 | object TipModule { 16 | @Provides 17 | @Singleton 18 | fun providesTipEngine( 19 | eventEngine: EventEngine 20 | ) = TipsEngine(eventEngine) 21 | 22 | @Singleton 23 | @Provides 24 | fun providesEventEngine( 25 | @ApplicationContext context: Context 26 | ) = EventEngine(context) 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/getcode/manager/AccountManager.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.manager 2 | 3 | import android.content.Context 4 | import com.getcode.util.AccountUtils 5 | import dagger.hilt.android.qualifiers.ApplicationContext 6 | import javax.inject.Inject 7 | 8 | class AccountManager @Inject constructor( 9 | @ApplicationContext private val context: Context 10 | ) { 11 | suspend fun getToken(): String? { 12 | return AccountUtils.getToken(context) 13 | } 14 | } -------------------------------------------------------------------------------- /app/src/main/java/com/getcode/media/MediaScanner.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.media 2 | 3 | import android.content.Context 4 | import android.media.MediaScannerConnection 5 | import dagger.hilt.android.qualifiers.ApplicationContext 6 | import java.io.File 7 | import javax.inject.Inject 8 | 9 | class MediaScanner @Inject constructor( 10 | @ApplicationContext private val context: Context 11 | ) { 12 | fun scan(directory: File) { 13 | MediaScannerConnection.scanFile(context, arrayOf(directory.toString()), null, null) 14 | } 15 | } -------------------------------------------------------------------------------- /app/src/main/java/com/getcode/models/SettingsItem.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.models 2 | 3 | import com.getcode.model.AppSetting 4 | 5 | data class SettingItem( 6 | val type: AppSetting, 7 | val name: Int, 8 | val description: Int? = null, 9 | val icon: Int, 10 | val enabled: Boolean, 11 | val visible: Boolean = true, 12 | val available: Boolean = true 13 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/getcode/navigation/screens/Screens.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.navigation.screens 2 | 3 | import androidx.compose.runtime.Composable 4 | import cafe.adriel.voyager.core.screen.Screen 5 | import kotlinx.coroutines.flow.MutableStateFlow 6 | import timber.log.Timber 7 | 8 | sealed interface NamedScreen { 9 | 10 | val name: String? 11 | @Composable get() = null 12 | 13 | val hasName: Boolean 14 | @Composable get() = !name.isNullOrEmpty() 15 | } 16 | 17 | abstract class AppScreen: Screen { 18 | var result = MutableStateFlow(null) 19 | 20 | fun onResult(obj: T) { 21 | Timber.d("onResult=$obj") 22 | result.value = obj 23 | } 24 | } -------------------------------------------------------------------------------- /app/src/main/java/com/getcode/navigation/transitions/CrossfadeTransition.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.navigation.transitions 2 | 3 | import androidx.compose.animation.fadeIn 4 | import androidx.compose.animation.fadeOut 5 | import androidx.compose.animation.togetherWith 6 | import androidx.compose.runtime.Composable 7 | import androidx.compose.ui.Modifier 8 | import cafe.adriel.voyager.navigator.Navigator 9 | import cafe.adriel.voyager.transitions.ScreenTransition 10 | import cafe.adriel.voyager.transitions.ScreenTransitionContent 11 | 12 | @Composable 13 | private fun CrossfadeTransition( 14 | navigator: Navigator, 15 | modifier: Modifier = Modifier, 16 | content: ScreenTransitionContent = { it.Content() } 17 | ) { 18 | ScreenTransition( 19 | navigator = navigator, 20 | modifier = modifier, 21 | content = content, 22 | transition = { fadeIn() togetherWith fadeOut() } 23 | ) 24 | } -------------------------------------------------------------------------------- /app/src/main/java/com/getcode/ui/components/Cloudy.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.ui.components 2 | 3 | import androidx.compose.foundation.layout.Box 4 | import androidx.compose.foundation.layout.BoxScope 5 | import androidx.compose.runtime.Composable 6 | import androidx.compose.ui.Modifier 7 | import com.skydoves.cloudy.CloudyState 8 | 9 | @Composable 10 | fun Cloudy( 11 | modifier: Modifier = Modifier, 12 | enabled: Boolean = true, 13 | @androidx.annotation.IntRange(from = 0, to = 25) radius: Int = 25, 14 | key1: Any? = null, 15 | key2: Any? = null, 16 | allowAccumulate: (CloudyState) -> Boolean = { false }, 17 | onStateChanged: (CloudyState) -> Unit = {}, 18 | content: @Composable BoxScope.() -> Unit 19 | ) { 20 | if (enabled) { 21 | com.skydoves.cloudy.Cloudy(modifier, radius, key1, key2, allowAccumulate, onStateChanged, content) 22 | } else { 23 | Box(modifier) { content() } 24 | } 25 | } -------------------------------------------------------------------------------- /app/src/main/java/com/getcode/ui/components/SnackData.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.ui.components 2 | 3 | import androidx.compose.material.SnackbarDuration 4 | import androidx.compose.material.SnackbarHostState 5 | import androidx.compose.material.SnackbarResult 6 | 7 | data class SnackData( 8 | val message: String, 9 | val actionLabel: String? = null, 10 | val duration: SnackbarDuration = SnackbarDuration.Short 11 | ) 12 | 13 | suspend fun SnackbarHostState.showSnackbar(data: SnackData): SnackbarResult { 14 | return showSnackbar( 15 | message = data.message, 16 | actionLabel = data.actionLabel, 17 | duration = data.duration 18 | ) 19 | } -------------------------------------------------------------------------------- /app/src/main/java/com/getcode/ui/components/TextSection.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.ui.components 2 | 3 | import androidx.compose.foundation.layout.Arrangement 4 | import androidx.compose.foundation.layout.Column 5 | import androidx.compose.material.MaterialTheme 6 | import androidx.compose.material.Text 7 | import androidx.compose.runtime.Composable 8 | import androidx.compose.ui.text.font.FontWeight 9 | import androidx.compose.ui.unit.dp 10 | import com.getcode.theme.CodeTheme 11 | 12 | @Composable 13 | fun TextSection(title: String, description: String) { 14 | Column(verticalArrangement = Arrangement.spacedBy(CodeTheme.dimens.grid.x2)) { 15 | Text( 16 | text = title, 17 | style = CodeTheme.typography.textLarge 18 | ) 19 | Text( 20 | text = description, 21 | style = CodeTheme.typography.textSmall 22 | ) 23 | } 24 | } -------------------------------------------------------------------------------- /app/src/main/java/com/getcode/ui/components/chat/DateBubble.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.ui.components.chat 2 | 3 | import androidx.compose.foundation.layout.Box 4 | import androidx.compose.foundation.layout.fillMaxWidth 5 | import androidx.compose.runtime.Composable 6 | import androidx.compose.ui.Alignment 7 | import androidx.compose.ui.Modifier 8 | import com.getcode.theme.BrandDark 9 | import com.getcode.ui.components.Pill 10 | 11 | @Composable 12 | internal fun DateBubble( 13 | modifier: Modifier = Modifier, 14 | date: String, 15 | ) = Box(modifier = modifier.fillMaxWidth(), contentAlignment = Alignment.Center) { 16 | Pill( 17 | text = date, 18 | backgroundColor = BrandDark 19 | ) 20 | } -------------------------------------------------------------------------------- /app/src/main/java/com/getcode/ui/components/chat/utils/ChatItem.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.ui.components.chat.utils 2 | 3 | import com.getcode.model.ID 4 | import com.getcode.model.MessageStatus 5 | import com.getcode.model.chat.ChatMessage 6 | import com.getcode.model.chat.MessageContent 7 | import kotlinx.datetime.Instant 8 | import java.util.UUID 9 | 10 | data class ChatMessageIndice( 11 | val message: ChatMessage, 12 | val messageContent: MessageContent, 13 | ) 14 | 15 | sealed class ChatItem(open val key: Any) { 16 | data class Message( 17 | val id: String = UUID.randomUUID().toString(), 18 | val chatMessageId: ID, 19 | val message: MessageContent, 20 | val date: Instant, 21 | val status: MessageStatus, 22 | val isFromSelf: Boolean, 23 | override val key: Any = id 24 | ) : ChatItem(key) 25 | 26 | data class Date(val date: String) : ChatItem(date) 27 | } -------------------------------------------------------------------------------- /app/src/main/java/com/getcode/ui/components/chat/utils/ConversationItem.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.ui.components.chat.utils 2 | 3 | import com.getcode.model.ConversationMessage 4 | import com.getcode.model.ConversationMessageContent 5 | import com.getcode.model.chat.MessageContent 6 | 7 | data class ConversationMessageIndice( 8 | val message: ConversationMessage, 9 | val messageContent: MessageContent, 10 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/getcode/ui/tips/DefinedTips.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.ui.tips 2 | 3 | import com.getcode.ui.tips.definitions.DownloadCodeTip 4 | import dev.bmcreations.tipkit.engines.TipInterface 5 | import javax.inject.Inject 6 | 7 | class DefinedTips @Inject constructor( 8 | val downloadCodeTip: DownloadCodeTip 9 | ): TipInterface 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/getcode/ui/utils/Geometry.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.ui.utils 2 | 3 | import androidx.compose.runtime.getValue 4 | import androidx.compose.runtime.mutableStateOf 5 | import androidx.compose.runtime.setValue 6 | import androidx.compose.ui.unit.Dp 7 | import androidx.compose.ui.unit.DpSize 8 | import kotlin.math.hypot 9 | 10 | open class Geometry(width: Dp, height: Dp) { 11 | var size by mutableStateOf(DpSize.Zero) 12 | private set 13 | 14 | open val codeSize: Dp 15 | get() = size.width * 0.65f 16 | 17 | val diagonalDistance: Float 18 | get() = hypot(size.width.value, size.height.value) 19 | 20 | init { 21 | size = DpSize(width, height) 22 | } 23 | } -------------------------------------------------------------------------------- /app/src/main/java/com/getcode/ui/utils/MeasureScope.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.ui.utils 2 | 3 | import androidx.compose.ui.layout.MeasureScope 4 | import androidx.compose.ui.layout.Placeable 5 | 6 | @Suppress("UnusedReceiverParameter") 7 | fun MeasureScope.widthOrZero(placeable: Placeable?): Int { 8 | return placeable?.measuredWidth ?: 0 9 | } 10 | 11 | @Suppress("UnusedReceiverParameter") 12 | fun MeasureScope.heightOrZero(placeable: Placeable?): Int { 13 | return placeable?.measuredHeight ?: 0 14 | } -------------------------------------------------------------------------------- /app/src/main/java/com/getcode/ui/utils/PreviewParameters.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.ui.utils 2 | 3 | import androidx.compose.ui.tooling.preview.PreviewParameterProvider 4 | import java.util.UUID 5 | 6 | class UUIDPreviewParameterProvider(count: Int = 40) : PreviewParameterProvider { 7 | override val values: Sequence = generateSequence { UUID.randomUUID() }.take(count) 8 | } -------------------------------------------------------------------------------- /app/src/main/java/com/getcode/ui/utils/TextUnit.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.ui.utils 2 | 3 | import androidx.compose.ui.unit.TextUnit 4 | 5 | fun TextUnit.coerceAtMost(other: TextUnit): TextUnit { 6 | return if (this > other) other else this 7 | } 8 | 9 | fun TextUnit.coerceAtLeast(other: TextUnit): TextUnit { 10 | return if (this < other) other else this 11 | } 12 | 13 | fun TextUnit.coerceIn(min: TextUnit, max: TextUnit): TextUnit { 14 | return coerceAtLeast(min).coerceAtMost(max) 15 | } -------------------------------------------------------------------------------- /app/src/main/java/com/getcode/util/AndroidLocale.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.util 2 | 3 | import android.content.Context 4 | import com.getcode.App 5 | import com.getcode.model.Currency 6 | import com.getcode.util.locale.LocaleHelper 7 | import com.getcode.utils.LocaleUtils 8 | import dagger.hilt.android.qualifiers.ApplicationContext 9 | import javax.inject.Inject 10 | 11 | class AndroidLocale @Inject constructor( 12 | @ApplicationContext private val context: Context, 13 | private val currencyUtils: CurrencyUtils, 14 | ): LocaleHelper { 15 | override fun getDefaultCurrencyName(): String { 16 | return LocaleUtils.getDefaultCurrency(context) 17 | } 18 | 19 | override fun getDefaultCurrency(): Currency? { 20 | return currencyUtils.getCurrency(getDefaultCurrencyName()) 21 | } 22 | 23 | override fun getDefaultCountry(): String { 24 | return LocaleUtils.getDefaultCountry(context) 25 | } 26 | } -------------------------------------------------------------------------------- /app/src/main/java/com/getcode/util/AuthenticatorService.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.util 2 | 3 | import android.accounts.AccountManager 4 | import android.app.Service 5 | import android.content.Intent 6 | import android.os.IBinder 7 | import dagger.hilt.android.AndroidEntryPoint 8 | import javax.inject.Inject 9 | 10 | 11 | @AndroidEntryPoint 12 | class AuthenticatorService : Service() { 13 | private val accountAuthenticator: AccountAuthenticator by lazy { 14 | AccountAuthenticator(this) 15 | } 16 | 17 | override fun onBind(intent: Intent): IBinder? { 18 | var binder: IBinder? = null 19 | if (intent.action == AccountManager.ACTION_AUTHENTICATOR_INTENT) { 20 | binder = accountAuthenticator.iBinder 21 | } 22 | return binder 23 | } 24 | } -------------------------------------------------------------------------------- /app/src/main/java/com/getcode/util/IntentLauncher.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.util 2 | 3 | import android.content.Context 4 | import dagger.hilt.android.qualifiers.ApplicationContext 5 | import javax.inject.Inject 6 | 7 | class IntentLauncher @Inject constructor( 8 | @ApplicationContext private val context: Context 9 | ) { 10 | fun launchAppSettings() { 11 | context.launchAppSettings() 12 | } 13 | 14 | fun launchSmsIntent(phoneValue: String, message: String) { 15 | context.launchSmsIntent(phoneValue, message) 16 | } 17 | } -------------------------------------------------------------------------------- /app/src/main/java/com/getcode/util/Linkify.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.util 2 | 3 | import com.getcode.network.repository.urlEncode 4 | 5 | object Linkify { 6 | fun cashLink(entropy: String): String = "https://cash.getcode.com/c/#/e=${entropy}" 7 | fun tipCard(username: String, platform: String): String = "https://tipcard.getcode.com/${platform}/${username}" 8 | fun tweet(message: String): String = "https://www.twitter.com/intent/tweet?text=${message.urlEncode()}" 9 | } -------------------------------------------------------------------------------- /app/src/main/java/com/getcode/util/Pair.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.util 2 | 3 | infix fun Pair.to(that: C): Triple = Triple(first, second, that) -------------------------------------------------------------------------------- /app/src/main/java/com/getcode/util/locale/LocaleHelper.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.util.locale 2 | 3 | import com.getcode.model.Currency 4 | 5 | interface LocaleHelper { 6 | fun getDefaultCurrencyName(): String 7 | fun getDefaultCurrency(): Currency? 8 | fun getDefaultCountry(): String 9 | } -------------------------------------------------------------------------------- /app/src/main/java/com/getcode/util/permissions/PermissionChecker.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.util.permissions 2 | 3 | interface PermissionChecker { 4 | fun isGranted(permission: String): Boolean 5 | fun isDenied(permission: String): Boolean 6 | fun check(permission: String): Int 7 | } -------------------------------------------------------------------------------- /app/src/main/java/com/getcode/util/vibration/Vibrator.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.util.vibration 2 | 3 | import androidx.compose.runtime.ProvidableCompositionLocal 4 | import androidx.compose.runtime.staticCompositionLocalOf 5 | 6 | interface Vibrator { 7 | fun vibrate(duration: Long = 100) 8 | fun tick() 9 | } 10 | 11 | private class NoVibration : Vibrator { 12 | override fun vibrate(duration: Long) { 13 | 14 | } 15 | 16 | override fun tick() { 17 | 18 | } 19 | } 20 | 21 | val LocalVibrator: ProvidableCompositionLocal = staticCompositionLocalOf { NoVibration() } -------------------------------------------------------------------------------- /app/src/main/java/com/getcode/view/main/connectivity/ConnectionStatusProvider.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.view.main.connectivity 2 | 3 | import androidx.compose.ui.tooling.preview.PreviewParameterProvider 4 | import com.getcode.utils.network.ConnectionType 5 | import com.getcode.utils.network.NetworkState 6 | import com.getcode.utils.network.SignalStrength 7 | 8 | internal class NetworkStateProvider ( 9 | override val values: Sequence = sequenceOf( 10 | NetworkState(connected = false, type = ConnectionType.Unknown, signalStrength = SignalStrength.Unknown), 11 | NetworkState(connected = false, type = ConnectionType.Wifi, signalStrength = SignalStrength.Great), 12 | NetworkState(connected = true, type = ConnectionType.Wifi, signalStrength = SignalStrength.Great), 13 | ) 14 | ): PreviewParameterProvider -------------------------------------------------------------------------------- /app/src/main/java/com/kik/kikx/kikcodes/KikCodeColorMapper.kt: -------------------------------------------------------------------------------- 1 | package com.kik.kikx.kikcodes 2 | 3 | class KikCodeColorMapper { 4 | 5 | fun indexToKikCodeColor(colorIndex: Int): KikCodeColor { 6 | return KikCodeColor.values()[colorIndex % KikCodeColor.values().size] 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/kik/kikx/kikcodes/KikCodeEncoder.kt: -------------------------------------------------------------------------------- 1 | package com.kik.kikx.kikcodes 2 | 3 | 4 | interface KikCodeEncoder { 5 | fun encodeUsernameCode(username: String, nonce: Int, color: Int): ByteArray 6 | fun encodeGroupInviteKikCode(invitationCode: ByteArray, color: Int): ByteArray 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/java/com/kik/kikx/kikcodes/implementation/KikCodeEncoderImpl.kt: -------------------------------------------------------------------------------- 1 | package com.kik.kikx.kikcodes.implementation 2 | 3 | import com.kik.kikx.kikcodes.KikCodeEncoder 4 | import com.kik.scan.GroupKikCode 5 | import com.kik.scan.KikCode 6 | import com.kik.scan.UsernameKikCode 7 | 8 | class KikCodeEncoderImpl : KikCodeEncoder { 9 | 10 | override fun encodeUsernameCode(username: String, nonce: Int, color: Int): ByteArray { 11 | return encode(UsernameKikCode(username, nonce, color)) 12 | } 13 | 14 | override fun encodeGroupInviteKikCode(invitationCode: ByteArray, color: Int): ByteArray { 15 | return encode(GroupKikCode(invitationCode, color)) 16 | } 17 | 18 | private fun encode(code: KikCode): ByteArray { 19 | return code.encode() 20 | ?: throw Exception("Unable to encode the Kik code. Was the library included and loaded properly?") 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/kik/kikx/kincodes/KikCodeContentRenderer.kt: -------------------------------------------------------------------------------- 1 | package com.kik.kikx.kincodes 2 | 3 | import android.graphics.Canvas 4 | 5 | interface KikCodeContentRenderer { 6 | 7 | /** 8 | * Renders the content of a Kik code, but not the disk containing it, nor the logo at its center. 9 | */ 10 | fun render(encodedKikCode: ByteArray, size: Int, canvas: Canvas) 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/kik/kikx/models/GroupInviteCode.kt: -------------------------------------------------------------------------------- 1 | package com.kik.kikx.models 2 | 3 | import java.io.Serializable 4 | 5 | data class GroupInviteCode( 6 | val code: Id // base64-encoded representation of the invite code (20 random bytes). Should not contain any padding (=) 7 | ){ 8 | data class Id(val value: ByteArray) : Serializable { 9 | companion object { 10 | private const val serialVersionUID: Long = 0L 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/jniLibs/arm64-v8a/libkikcode_encode.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/jniLibs/arm64-v8a/libkikcode_encode.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/arm64-v8a/libkikcode_scan.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/jniLibs/arm64-v8a/libkikcode_scan.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/arm64-v8a/libkikhash.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/jniLibs/arm64-v8a/libkikhash.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/arm64-v8a/libopencv_java3.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/jniLibs/arm64-v8a/libopencv_java3.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi-v7a/libgnustl_shared.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/jniLibs/armeabi-v7a/libgnustl_shared.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi-v7a/libkikcode_encode.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/jniLibs/armeabi-v7a/libkikcode_encode.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi-v7a/libkikcode_scan.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/jniLibs/armeabi-v7a/libkikcode_scan.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi/libgnustl_shared.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/jniLibs/armeabi/libgnustl_shared.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi/libkikcode_encode.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/jniLibs/armeabi/libkikcode_encode.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi/libkikcode_scan.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/jniLibs/armeabi/libkikcode_scan.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/mips/libgnustl_shared.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/jniLibs/mips/libgnustl_shared.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/mips/libkikcode_encode.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/jniLibs/mips/libkikcode_encode.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/mips/libkikcode_scan.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/jniLibs/mips/libkikcode_scan.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/x86/libgnustl_shared.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/jniLibs/x86/libgnustl_shared.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/x86/libkikcode_encode.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/jniLibs/x86/libkikcode_encode.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/x86/libkikcode_scan.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/jniLibs/x86/libkikcode_scan.so -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_access_key_bg.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_access_key_bg.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_bill_globe.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_bill_globe.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_bill_grid.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_bill_grid.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_bill_hexagons.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_bill_hexagons.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_bill_security_strip.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_bill_security_strip.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_bill_waves.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_bill_waves.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ad.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ad.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ae.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ae.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_af.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_af.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ag.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ag.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ai.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ai.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_al.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_al.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_am.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_am.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_an.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_an.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ao.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ao.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_aq.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_aq.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ar.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ar.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_as.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_as.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_at.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_at.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_au.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_au.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_aw.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_aw.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ax.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ax.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_az.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_az.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ba.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ba.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_bb.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_bb.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_bd.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_bd.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_be.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_be.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_bf.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_bf.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_bg.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_bg.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_bh.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_bh.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_bi.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_bi.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_bj.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_bj.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_bl.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_bl.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_bm.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_bm.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_bn.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_bn.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_bo.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_bo.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_bq.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_bq.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_br.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_br.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_bs.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_bs.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_bt.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_bt.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_bv.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_bv.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_bw.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_bw.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_by.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_by.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_bz.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_bz.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ca.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ca.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_cc.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_cc.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_cd.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_cd.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_cf.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_cf.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_cg.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_cg.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ch.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ch.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ci.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ci.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ck.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ck.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_cl.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_cl.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_cm.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_cm.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_cn.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_cn.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_co.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_co.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_cr.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_cr.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_cu.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_cu.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_cv.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_cv.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_cw.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_cw.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_cx.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_cx.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_cy.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_cy.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_cz.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_cz.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_de.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_de.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_dj.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_dj.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_dk.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_dk.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_dm.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_dm.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_do.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_do.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_dz.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_dz.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ec.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ec.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ee.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ee.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_eg.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_eg.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_eh.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_eh.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_eo.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_eo.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_er.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_er.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_es.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_es.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_et.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_et.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_eu.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_eu.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_fi.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_fi.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_fj.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_fj.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_fk.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_fk.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_fm.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_fm.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_fo.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_fo.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_fr.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_fr.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ga.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ga.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_gb.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_gb.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_gd.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_gd.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ge.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ge.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_gf.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_gf.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_gg.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_gg.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_gh.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_gh.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_gi.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_gi.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_gl.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_gl.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_gm.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_gm.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_gn.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_gn.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_gp.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_gp.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_gq.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_gq.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_gr.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_gr.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_gs.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_gs.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_gt.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_gt.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_gu.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_gu.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_gw.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_gw.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_gy.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_gy.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_hk.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_hk.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_hm.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_hm.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_hn.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_hn.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_hr.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_hr.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ht.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ht.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_hu.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_hu.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_id.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_id.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ie.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ie.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_il.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_il.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_im.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_im.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_in.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_in.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_io.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_io.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_iq.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_iq.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ir.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ir.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_is.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_is.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_it.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_it.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_je.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_je.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_jm.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_jm.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_jo.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_jo.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_jp.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_jp.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ke.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ke.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_kg.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_kg.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_kh.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_kh.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ki.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ki.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_km.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_km.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_kn.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_kn.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_kp.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_kp.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_kr.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_kr.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_kw.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_kw.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ky.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ky.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_kz.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_kz.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_la.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_la.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_lb.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_lb.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_lc.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_lc.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_li.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_li.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_lk.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_lk.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_lr.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_lr.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ls.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ls.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_lt.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_lt.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_lu.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_lu.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_lv.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_lv.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ly.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ly.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ma.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ma.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_mc.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_mc.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_md.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_md.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_me.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_me.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_mf.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_mf.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_mg.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_mg.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_mh.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_mh.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_mk.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_mk.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ml.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ml.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_mm.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_mm.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_mn.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_mn.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_mo.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_mo.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_mp.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_mp.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_mq.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_mq.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_mr.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_mr.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ms.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ms.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_mt.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_mt.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_mu.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_mu.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_mv.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_mv.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_mw.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_mw.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_mx.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_mx.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_my.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_my.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_mz.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_mz.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_na.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_na.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_nc.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_nc.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ne.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ne.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_nf.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_nf.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ng.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ng.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ni.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ni.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_nl.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_nl.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_no.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_no.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_np.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_np.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_nr.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_nr.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_nu.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_nu.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_nz.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_nz.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_om.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_om.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_pa.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_pa.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_pe.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_pe.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_pf.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_pf.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_pg.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_pg.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ph.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ph.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_pk.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_pk.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_pl.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_pl.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_pm.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_pm.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_pn.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_pn.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_pr.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_pr.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ps.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ps.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_pt.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_pt.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_pw.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_pw.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_py.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_py.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_qa.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_qa.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_re.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_re.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ro.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ro.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_rs.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_rs.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ru.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ru.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_rw.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_rw.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_sa.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_sa.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_sb.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_sb.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_sc.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_sc.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_sd.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_sd.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_se.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_se.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_sg.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_sg.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_sh.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_sh.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_si.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_si.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_sj.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_sj.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_sk.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_sk.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_sl.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_sl.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_sm.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_sm.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_sn.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_sn.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_so.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_so.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_sr.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_sr.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ss.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ss.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_st.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_st.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_sv.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_sv.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_sx.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_sx.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_sy.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_sy.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_sz.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_sz.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_tc.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_tc.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_td.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_td.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_tf.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_tf.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_tg.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_tg.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_th.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_th.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_tj.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_tj.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_tk.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_tk.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_tl.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_tl.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_tm.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_tm.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_tn.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_tn.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_to.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_to.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_tr.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_tr.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_tt.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_tt.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_tv.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_tv.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_tw.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_tw.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_tz.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_tz.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ua.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ua.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ug.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ug.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_um.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_um.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_us.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_us.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_uy.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_uy.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_uz.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_uz.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_va.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_va.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_vc.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_vc.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ve.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ve.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_vg.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_vg.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_vi.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_vi.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_vn.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_vn.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_vu.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_vu.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_wf.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_wf.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ws.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ws.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_ye.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_ye.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_yt.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_yt.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_za.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_za.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_zm.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_zm.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_zw.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_zw.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_flag_zz.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_flag_zz.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_notification_request.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_notification_request.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/ic_placeholder_user.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/ic_placeholder_user.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/video_sell_kin_2x.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable-nodpi/video_sell_kin_2x.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_arrow_back.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_arrow_down.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_balance.xml: -------------------------------------------------------------------------------- 1 | 6 | 11 | 16 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_bill2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable/ic_bill2.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_bill_close.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_check_white.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_checked_blue.xml: -------------------------------------------------------------------------------- 1 | 6 | 11 | 14 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_checked_green.xml: -------------------------------------------------------------------------------- 1 | 6 | 11 | 14 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_circle_outline.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_code_splash_bg.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 9 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_currency_kin.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_delete.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_dropdown.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_empty_bottom_action.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_exclamation_octagon_fill.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_history.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_home_bill_image.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable/ic_home_bill_image.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_invites.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 9 | 14 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_kin_brand.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_kin_red.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_kin_white.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_kin_white_small.xml: -------------------------------------------------------------------------------- 1 | 6 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_labs.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 6 | 8 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_menu_buy_kin.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_menu_deposit.xml: -------------------------------------------------------------------------------- 1 | 6 | 12 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_menu_withdraw.xml: -------------------------------------------------------------------------------- 1 | 6 | 12 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_message_status_delivered.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_message_status_read.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_message_status_sent.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_phone_filled.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_remote_send.xml: -------------------------------------------------------------------------------- 1 | 6 | 13 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_tip_card.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_twitter_x.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_unchecked.xml: -------------------------------------------------------------------------------- 1 | 6 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_wallet.xml: -------------------------------------------------------------------------------- 1 | 6 | 11 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_x_octagon_fill.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/payment_bill_pattern.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable/payment_bill_pattern.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable/splash.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/video_buy_kin_2x.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable/video_buy_kin_2x.webp -------------------------------------------------------------------------------- /app/src/main/res/drawable/youtube.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/app/src/main/res/drawable/youtube.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/xml/authenticator.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /buildSrc/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /buildSrc/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | `kotlin-dsl` 3 | } 4 | 5 | repositories { 6 | mavenCentral() 7 | } -------------------------------------------------------------------------------- /buildSrc/src/main/java/ContributorsSignatory.kt: -------------------------------------------------------------------------------- 1 | import org.gradle.api.Project 2 | import java.util.Properties 3 | 4 | 5 | class ContributorsSignatory(project: Project) { 6 | private val signingProperties: Properties 7 | 8 | init { 9 | val propertiesFile = project.file("contributors.properties") 10 | signingProperties = Properties().apply { 11 | load(propertiesFile.inputStream()) 12 | } 13 | } 14 | 15 | val keystore = project.file(signingProperties.getProperty("KEYSTORE_FILE")) 16 | val keystorePassword: String = signingProperties.getProperty("KEYSTORE_PASS") 17 | val keyAlias: String = signingProperties.getProperty("KEY_ALIAS") 18 | val keyPassword: String = signingProperties.getProperty("KEY_PASS") 19 | } -------------------------------------------------------------------------------- /common/components/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /common/components/src/main/kotlin/com/getcode/ui/components/CodeCircularProgressIndicator.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.ui.components 2 | 3 | import androidx.compose.material.CircularProgressIndicator 4 | import androidx.compose.material.ProgressIndicatorDefaults 5 | import androidx.compose.runtime.Composable 6 | import androidx.compose.ui.Modifier 7 | import androidx.compose.ui.graphics.Color 8 | import androidx.compose.ui.graphics.StrokeCap 9 | import androidx.compose.ui.unit.Dp 10 | import com.getcode.theme.White 11 | 12 | @Composable 13 | fun CodeCircularProgressIndicator( 14 | modifier: Modifier = Modifier, 15 | color: Color = White, 16 | strokeWidth: Dp = ProgressIndicatorDefaults.StrokeWidth, 17 | backgroundColor: Color = Color.Transparent, 18 | strokeCap: StrokeCap = StrokeCap.Round, 19 | ) = CircularProgressIndicator(modifier, color, strokeWidth, backgroundColor, strokeCap) -------------------------------------------------------------------------------- /common/components/src/main/kotlin/com/getcode/ui/utils/IntSize.kt: -------------------------------------------------------------------------------- 1 | package com.getcode.ui.utils 2 | 3 | import androidx.compose.ui.unit.Density 4 | import androidx.compose.ui.unit.DpSize 5 | import androidx.compose.ui.unit.IntSize 6 | 7 | fun IntSize.toDp(density: Density): DpSize = with(density) { DpSize(width = width.toDp(), height = height.toDp()) } -------------------------------------------------------------------------------- /common/resources/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /common/resources/src/main/res/drawable/ic_check.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /common/resources/src/main/res/drawable/ic_chevron_left.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /common/resources/src/main/res/drawable/ic_chevron_right.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /common/theme/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /common/theme/src/main/res/font/avenir_next_demi.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/common/theme/src/main/res/font/avenir_next_demi.otf -------------------------------------------------------------------------------- /common/theme/src/main/res/font/avenir_next_medium.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/common/theme/src/main/res/font/avenir_next_medium.otf -------------------------------------------------------------------------------- /common/theme/src/main/res/font/avenir_next_regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/common/theme/src/main/res/font/avenir_next_regular.otf -------------------------------------------------------------------------------- /common/theme/src/main/res/font/roboto_mono_variable.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/common/theme/src/main/res/font/roboto_mono_variable.ttf -------------------------------------------------------------------------------- /contributors.keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/contributors.keystore -------------------------------------------------------------------------------- /contributors.properties: -------------------------------------------------------------------------------- 1 | KEYSTORE_FILE=contributors.keystore 2 | KEYSTORE_PASS=Ymfu~]621pFD}z4tp 3 | KEY_ALIAS=kintothemoon 4 | KEY_PASS=!sB)d!el&nGNbt[Oo -------------------------------------------------------------------------------- /crypto/ed25519/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id(Plugins.android_library) 3 | } 4 | 5 | android { 6 | namespace = "${Android.namespace}.ed25519" 7 | compileSdk = Android.compileSdkVersion 8 | defaultConfig { 9 | minSdk = Android.minSdkVersion 10 | targetSdk = Android.targetSdkVersion 11 | buildToolsVersion = Android.buildToolsVersion 12 | ndkVersion = "23.1.7779620" 13 | externalNativeBuild { 14 | cmake { 15 | cppFlags += "-std=c++11" 16 | } 17 | } 18 | } 19 | externalNativeBuild { 20 | cmake { 21 | path = file("CMakeLists.txt") 22 | } 23 | } 24 | } 25 | 26 | dependencies { 27 | implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar")))) 28 | } 29 | -------------------------------------------------------------------------------- /crypto/ed25519/libs/base64/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | ADD_LIBRARY(base64 STATIC 2 | base64.cpp 3 | ) -------------------------------------------------------------------------------- /crypto/ed25519/libs/base64/base64.hpp: -------------------------------------------------------------------------------- 1 | #ifndef CORE_CRYPTO_BASE64_HPP_ 2 | #define CORE_CRYPTO_BASE64_HPP_ 3 | 4 | #include 5 | 6 | #include 7 | #include 8 | #include 9 | 10 | #include 11 | 12 | namespace base64 { 13 | const std::string encode(const std::vector message); 14 | std::vector decode(const std::string enc); 15 | }; 16 | 17 | #endif // CORE_CRYPTO_BASE64_HPP_ -------------------------------------------------------------------------------- /crypto/ed25519/libs/codeScanner/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | 2 | cmake_minimum_required(VERSION 3.4.1) 3 | 4 | file(GLOB files src/*.*) 5 | 6 | add_library( 7 | codeScanner 8 | SHARED 9 | ${files} 10 | ) 11 | 12 | target_link_libraries( 13 | codeScanner 14 | log 15 | android 16 | ) 17 | -------------------------------------------------------------------------------- /crypto/ed25519/libs/codeScanner/src/ReedSolomonEncoder.h: -------------------------------------------------------------------------------- 1 | #ifndef __REED_SOLOMON_ENCODER_H__ 2 | #define __REED_SOLOMON_ENCODER_H__ 3 | 4 | #include 5 | #include 6 | #include "Counted.h" 7 | #include "Array.h" 8 | #include "GenericGFPoly.h" 9 | #include "GenericGF.h" 10 | 11 | namespace zxing { 12 | class ReedSolomonEncoder { 13 | private: 14 | GenericGF &field_; 15 | std::vector > cachedGenerators_; 16 | 17 | Ref buildGenerator(int degree); 18 | 19 | public: 20 | ReedSolomonEncoder(GenericGF &field); 21 | void encode(ArrayRef toEncode, int ecBytes); 22 | }; 23 | } 24 | 25 | #endif // __REED_SOLOMON_ENCODER_H__ 26 | -------------------------------------------------------------------------------- /crypto/ed25519/libs/codeScanner/src/kikcode_constants.h: -------------------------------------------------------------------------------- 1 | #ifndef __KIKCODE_CONSTANTS_H__ 2 | #define __KIKCODE_CONSTANTS_H__ 3 | 4 | #define KIK_CODE_TOTAL_BYTE_COUNT 35 5 | 6 | #endif // __KIKCODE_CONSTANTS_H__ 7 | -------------------------------------------------------------------------------- /crypto/ed25519/libs/codeScanner/src/kikcode_encoding_jni.h: -------------------------------------------------------------------------------- 1 | #ifndef _KIKCODE_ENCODING_JNI_H_ 2 | #define _KIKCODE_ENCODING_JNI_H_ 3 | 4 | #ifdef JNI 5 | #include 6 | 7 | extern "C" { 8 | jint JNI_OnLoad(JavaVM *vm, void *reserved); 9 | 10 | jobject Java_com_kik_scan_KikCode_parseInternal(JNIEnv *env, jobject clzz, jbyteArray data); 11 | 12 | jbyteArray Java_com_kik_scan_UsernameKikCode_encodeInternal(JNIEnv *env, jobject thiz); 13 | 14 | jbyteArray Java_com_kik_scan_GroupKikCode_encodeInternal(JNIEnv *env, jobject thiz); 15 | 16 | jbyteArray Java_com_kik_scan_RemoteKikCode_encodeInternal(JNIEnv *env, jobject thiz); 17 | } 18 | 19 | #endif 20 | 21 | #endif // _KIKCODE_ENCODING_JNI_H_ 22 | -------------------------------------------------------------------------------- /crypto/ed25519/libs/ed25519/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | 2 | cmake_minimum_required(VERSION 3.4.1) 3 | 4 | file(GLOB files src/*.c) 5 | 6 | add_library( 7 | ed25519 8 | SHARED 9 | ${files} 10 | ) 11 | 12 | target_link_libraries( 13 | ed25519 14 | log 15 | android 16 | ) 17 | -------------------------------------------------------------------------------- /crypto/ed25519/libs/ed25519/license.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2015 Orson Peters 2 | 3 | This software is provided 'as-is', without any express or implied warranty. In no event will the 4 | authors be held liable for any damages arising from the use of this software. 5 | 6 | Permission is granted to anyone to use this software for any purpose, including commercial 7 | applications, and to alter it and redistribute it freely, subject to the following restrictions: 8 | 9 | 1. The origin of this software must not be misrepresented; you must not claim that you wrote the 10 | original software. If you use this software in a product, an acknowledgment in the product 11 | documentation would be appreciated but is not required. 12 | 13 | 2. Altered source versions must be plainly marked as such, and must not be misrepresented as 14 | being the original software. 15 | 16 | 3. This notice may not be removed or altered from any source distribution. 17 | -------------------------------------------------------------------------------- /crypto/ed25519/libs/ed25519/src/keypair.c: -------------------------------------------------------------------------------- 1 | #include "ed25519.h" 2 | #include "sha3.h" 3 | #include "ge.h" 4 | 5 | 6 | void ed25519_create_keypair(unsigned char *public_key, unsigned char *private_key, const unsigned char *seed) { 7 | ge_p3 A; 8 | 9 | sha512(seed, 32, private_key); 10 | private_key[0] &= 248; 11 | private_key[31] &= 63; 12 | private_key[31] |= 64; 13 | 14 | ge_scalarmult_base(&A, private_key); 15 | ge_p3_tobytes(public_key, &A); 16 | } 17 | -------------------------------------------------------------------------------- /crypto/ed25519/libs/ed25519/src/sc.h: -------------------------------------------------------------------------------- 1 | #ifndef SC_H 2 | #define SC_H 3 | 4 | /* 5 | The set of scalars is \Z/l 6 | where l = 2^252 + 27742317777372353535851937790883648493. 7 | */ 8 | 9 | void sc_reduce(unsigned char *s); 10 | void sc_muladd(unsigned char *s, const unsigned char *a, const unsigned char *b, const unsigned char *c); 11 | 12 | #endif 13 | -------------------------------------------------------------------------------- /crypto/ed25519/libs/ed25519/src/sha3.h: -------------------------------------------------------------------------------- 1 | #ifndef SHA512_H 2 | #define SHA512_H 3 | 4 | #include 5 | 6 | #include "fixedint.h" 7 | 8 | /* state */ 9 | typedef struct sha512_context_ { 10 | uint64_t length, state[8]; 11 | size_t curlen; 12 | unsigned char buf[128]; 13 | } sha512_context; 14 | 15 | 16 | int sha512_init(sha512_context * md); 17 | int sha512_final(sha512_context * md, unsigned char *out); 18 | int sha512_update(sha512_context * md, const unsigned char *in, size_t inlen); 19 | int sha512(const unsigned char *message, size_t message_len, unsigned char *out); 20 | 21 | #endif 22 | -------------------------------------------------------------------------------- /crypto/ed25519/libs/ed25519/src/sha512.c: -------------------------------------------------------------------------------- 1 | /* LibTomCrypt, modular cryptographic library -- Tom St Denis 2 | * 3 | * LibTomCrypt is a library that provides various cryptographic 4 | * algorithms in a highly modular and flexible manner. 5 | * 6 | * The library is free for all purposes without any express 7 | * guarantee it works. 8 | * 9 | * Tom St Denis, tomstdenis@gmail.com, http://libtom.org 10 | */ 11 | 12 | -------------------------------------------------------------------------------- /crypto/ed25519/libs/ed25519/src/sha512.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/crypto/ed25519/libs/ed25519/src/sha512.h -------------------------------------------------------------------------------- /crypto/ed25519/libs/ed25519/test.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | 6 | /* #define ED25519_DLL */ 7 | #include "src/ed25519.h" 8 | 9 | #include "src/ge.h" 10 | #include "src/sc.h" 11 | 12 | 13 | int main() { 14 | return 0; 15 | } 16 | -------------------------------------------------------------------------------- /crypto/ed25519/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /Users/koba/sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /crypto/ed25519/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /crypto/ed25519/src/main/java/com/getcode/codeScanner/CodeScanner.java: -------------------------------------------------------------------------------- 1 | package com.getcode.codeScanner; 2 | 3 | public class CodeScanner { 4 | public native static byte[] Encode(byte[] data); 5 | 6 | static { 7 | System.loadLibrary("kikCodes"); 8 | System.loadLibrary("codeScanner"); 9 | } 10 | 11 | public static byte[] encode(byte[] data) { 12 | return Encode(data); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /crypto/kin/.gitignore: -------------------------------------------------------------------------------- 1 | build/ 2 | .gradle/ 3 | -------------------------------------------------------------------------------- /fastlane/Appfile: -------------------------------------------------------------------------------- 1 | json_key_file(ENV["SERVICE_ACCOUNT_KEY_JSON"]) # Path to the json secret file - Follow https://docs.fastlane.tools/actions/supply/#setup to get one 2 | package_name("com.getcode") # e.g. com.krausefx.app 3 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/code-payments/code-android-app/16257c4a00d1d329120613b6db3fd5adcca26ecc/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Wed May 08 12:51:12 EDT 2024 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip 5 | zipStoreBase=GRADLE_USER_HOME 6 | zipStorePath=wrapper/dists 7 | -------------------------------------------------------------------------------- /scripts/fcm.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | key="$1" 4 | token="$2" 5 | 6 | # Access the JSON object passed as the first argument 7 | contents="$3" 8 | 9 | data=$(cat <<-END 10 | { 11 | "registration_ids":["${token}"], 12 | "data": $contents 13 | } 14 | END 15 | ) 16 | 17 | echo $data 18 | 19 | curl -i -H 'Content-type: application/json' \ 20 | -H "Authorization: key=$key" \ 21 | -XPOST https://fcm.googleapis.com/fcm/send \ 22 | -d "$data" -------------------------------------------------------------------------------- /scripts/flags.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | pwd=$(pwd) 3 | iosRepoDir=$1 4 | 5 | 6 | cd $iosRepoDir 7 | cd CodeUI/Sources/CodeUI/Assets/UI.xcassets/flags\ \(region\)/ 8 | 9 | echo " " 10 | echo "Converting asset pdf's to webp" 11 | echo " " 12 | 13 | for d in */; do 14 | cd $d 15 | dirname=$(echo "${PWD##*/}") 16 | flag=$(echo "${dirname%%.*}") 17 | convert \ 18 | -verbose \ 19 | -density 1000 \ 20 | ${flag}.pdf \ 21 | ic_flag_$flag.webp 22 | cd - 23 | done 24 | 25 | # update in source 26 | mv **/*.webp ${pwd}/app/src/main/res/drawable-nodpi/ 27 | 28 | cd $pwd 29 | -------------------------------------------------------------------------------- /scripts/grab-asset-from-ios.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | pwd=$(pwd) 3 | iosRepoDir=$1 4 | relativeAssetDir=$2 5 | assetPrefix=$3 6 | 7 | cd $iosRepoDir 8 | cd CodeUI/Sources/CodeUI/Assets/UI.xcassets/${relativeAssetDir}/ 9 | 10 | echo " " 11 | echo "Converting asset pdf's to webp" 12 | echo " " 13 | 14 | for d in */; do 15 | cd $d 16 | dirname=$(echo "${PWD##*/}") 17 | asset=$(echo "${dirname%%.*}") 18 | convert \ 19 | -verbose \ 20 | -density 1000 \ 21 | ${asset}.pdf \ 22 | ${assetPrefix}${asset}.webp 23 | cd - 24 | done 25 | 26 | # update in source 27 | find . -name "*.webp" -exec mv {} ${pwd}/app/src/main/res/drawable-nodpi/ \; 28 | 29 | cd $pwd 30 | -------------------------------------------------------------------------------- /scripts/internal-testing-build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | date="$(date '+%m.%d.%y')" 4 | 5 | export NOTIFY_ERRORS=true 6 | export DEBUG_MINIFY=true 7 | export DEBUG_CRASHLYTICS_UPLOAD=true 8 | 9 | ./gradlew assembleDebug 10 | 11 | outputDir="$(pwd)/app/build/outputs/apk/debug" 12 | mv "${outputDir}/app-debug.apk" "${outputDir}/app-${date}-debug.apk" 13 | 14 | unset NOTIFY_ERRORS 15 | unset DEBUG_MINIFY 16 | unset DEBUG_CRASHLYTICS_UPLOAD -------------------------------------------------------------------------------- /service/models/.gitignore: -------------------------------------------------------------------------------- 1 | build/ 2 | .gradle/ 3 | -------------------------------------------------------------------------------- /service/protos/.gitignore: -------------------------------------------------------------------------------- 1 | build/ 2 | .gradle/ 3 | -------------------------------------------------------------------------------- /service/protos/build.gradle.kts: -------------------------------------------------------------------------------- 1 | // todo: maybe use variants / configurations to do both stub & stub-lite here 2 | 3 | // Note: We use the java-library plugin to get the protos into the artifact for this subproject 4 | // because there doesn't seem to be an better way. 5 | plugins { 6 | `java-library` 7 | } 8 | 9 | java { 10 | sourceSets.getByName("main").resources.srcDir("src/main/proto") 11 | } -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':api' 2 | include ':app' 3 | include ':crypto:kin' 4 | include ':crypto:ed25519' 5 | include ':common:resources' 6 | include ':service:models' 7 | include ':service:protos' 8 | include ':common:components' 9 | include ':common:theme' 10 | include ':vendor:tipkit:tipkit' 11 | include ':vendor:tipkit:tipkit-m2' 12 | rootProject.name = "Code" 13 | -------------------------------------------------------------------------------- /vendor/tipkit/tipkit-m2/.gitignore: -------------------------------------------------------------------------------- 1 | build/ 2 | .gradle/ 3 | -------------------------------------------------------------------------------- /vendor/tipkit/tipkit-m2/src/main/kotlin/dev/bmcreations/tipkit/ArrowEdge.kt: -------------------------------------------------------------------------------- 1 | package dev.bmcreations.tipkit 2 | 3 | import androidx.compose.ui.geometry.Size 4 | import androidx.compose.ui.graphics.Outline 5 | import androidx.compose.ui.graphics.Path 6 | import androidx.compose.ui.graphics.Shape 7 | import androidx.compose.ui.unit.Density 8 | import androidx.compose.ui.unit.LayoutDirection 9 | 10 | class TriangleEdge( 11 | // val position: ArrowPosition 12 | ) : Shape { 13 | 14 | override fun createOutline( 15 | size: Size, 16 | layoutDirection: LayoutDirection, 17 | density: Density 18 | ): Outline { 19 | 20 | val trianglePath = Path() 21 | trianglePath.apply { 22 | moveTo(x = size.width / 2, y = 0f) 23 | lineTo(x = size.width, y = size.height) 24 | lineTo(x = 0f, y = size.height) 25 | } 26 | 27 | return Outline.Generic(path = trianglePath) 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /vendor/tipkit/tipkit/.gitignore: -------------------------------------------------------------------------------- 1 | build/ 2 | .gradle/ 3 | -------------------------------------------------------------------------------- /vendor/tipkit/tipkit/src/main/kotlin/dev/bmcreations/tipkit/TipNavigation.kt: -------------------------------------------------------------------------------- 1 | package dev.bmcreations.tipkit 2 | 3 | interface TipActionNavigation { 4 | fun onActionClicked(action: TipAction) 5 | } 6 | 7 | class NoOpTipNavigator : TipActionNavigation { 8 | override fun onActionClicked(action: TipAction) = Unit 9 | 10 | } --------------------------------------------------------------------------------