Skip to content

Commit 729d2f9

Browse files
authored
Merge pull request #4707 from EdgeApp/paul/fiatPluginCamera
Get camera permission for paybis and banxa
2 parents adfe6bd + 9e3b8a0 commit 729d2f9

File tree

9 files changed

+35
-3
lines changed

9 files changed

+35
-3
lines changed

src/actions/DeepLinkingActions.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ export function retryPendingDeepLink(navigation: NavigationBase): ThunkAction<vo
6161
* Launches a link if it app is able to do so.
6262
*/
6363
export async function handleLink(navigation: NavigationBase, dispatch: Dispatch, state: RootState, link: DeepLink): Promise<boolean> {
64-
const { account } = state.core
64+
const { account, disklet } = state.core
6565
const { accountReferral } = state.account
6666
const { activeWalletIds, currencyWallets } = account
6767
const deviceId = base58ToUuid(state.core.context.clientId)
@@ -123,6 +123,7 @@ export async function handleLink(navigation: NavigationBase, dispatch: Dispatch,
123123
accountReferral,
124124
deviceId,
125125
disablePlugins: disableProviders,
126+
disklet,
126127
guiPlugin: plugin,
127128
direction,
128129
regionCode: { countryCode: state.ui.settings.countryCode },

src/actions/PluginActions.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { base58ToUuid } from '../util/utils'
77
export function executePluginAction(navigation: NavigationBase, pluginId: string, direction: 'buy' | 'sell'): ThunkAction<Promise<void>> {
88
return async (dispatch, getState) => {
99
const state = getState()
10-
const { account, context } = state.core
10+
const { account, context, disklet } = state.core
1111
const { accountReferral } = state.account
1212
const deviceId = base58ToUuid(context.clientId)
1313

@@ -16,6 +16,7 @@ export function executePluginAction(navigation: NavigationBase, pluginId: string
1616
accountReferral,
1717
deviceId,
1818
direction: 'sell',
19+
disklet,
1920
guiPlugin: guiPlugins[pluginId],
2021
navigation,
2122
regionCode: { countryCode: 'US' }

src/components/scenes/GuiPluginListScene.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ class GuiPluginList extends React.PureComponent<Props, State> {
231231
* Launch the provided plugin, including pre-flight checks.
232232
*/
233233
async openPlugin(listRow: GuiPluginRow, longPress: boolean = false) {
234-
const { accountReferral, countryCode, deviceId, disablePlugins, navigation, account } = this.props
234+
const { accountReferral, coreDisklet, countryCode, deviceId, disablePlugins, navigation, account } = this.props
235235
const { pluginId, paymentType, deepQuery = {} } = listRow
236236
const plugin = guiPlugins[pluginId]
237237

@@ -274,6 +274,7 @@ class GuiPluginList extends React.PureComponent<Props, State> {
274274
deviceId,
275275
direction,
276276
disablePlugins: disableProviders,
277+
disklet: coreDisklet,
277278
guiPlugin: plugin,
278279
longPress,
279280
navigation,

src/locales/en_US.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1370,6 +1370,7 @@ const strings = {
13701370
fiat_plugin_sell_cancelled: 'Sell order cancelled',
13711371
fiat_plugin_sell_failed_try_again: 'Sell order failed. Please try again.',
13721372
fiat_plugin_sell_failed_to_send_try_again: 'Failed to send funds for sell transaction. Please try again.',
1373+
fiat_plugin_cannot_continue_camera_permission: 'Cannot continue. Camera permission needed for ID verifications',
13731374

13741375
// Wallet List Modal
13751376
select_recv_wallet: 'Select Receiving Wallet',

src/locales/strings/enUS.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1205,6 +1205,7 @@
12051205
"fiat_plugin_sell_cancelled": "Sell order cancelled",
12061206
"fiat_plugin_sell_failed_try_again": "Sell order failed. Please try again.",
12071207
"fiat_plugin_sell_failed_to_send_try_again": "Failed to send funds for sell transaction. Please try again.",
1208+
"fiat_plugin_cannot_continue_camera_permission": "Cannot continue. Camera permission needed for ID verifications",
12081209
"select_recv_wallet": "Select Receiving Wallet",
12091210
"select_src_wallet": "Select Source Wallet",
12101211
"deposit_to_bank": "Deposit to Bank",

src/plugins/gui/fiatPlugin.tsx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import Clipboard from '@react-native-clipboard/clipboard'
2+
import { Disklet } from 'disklet'
23
import { EdgeAccount, EdgeTransaction } from 'edge-core-js'
34
import * as React from 'react'
45
import { Platform } from 'react-native'
@@ -14,6 +15,7 @@ import { RadioListModal } from '../../components/modals/RadioListModal'
1415
import { WalletListModal, WalletListResult } from '../../components/modals/WalletListModal'
1516
import { SendScene2Params } from '../../components/scenes/SendScene2'
1617
import { Airship, showError, showToast, showToastSpinner } from '../../components/services/AirshipInstance'
18+
import { requestPermissionOnSettings } from '../../components/services/PermissionsManager'
1719
import { HomeAddress, SepaInfo } from '../../types/FormTypes'
1820
import { GuiPlugin } from '../../types/GuiPluginTypes'
1921
import { AccountReferral } from '../../types/ReferralTypes'
@@ -24,6 +26,7 @@ import {
2426
FiatPaymentType,
2527
FiatPluginAddressFormParams,
2628
FiatPluginListModalParams,
29+
FiatPluginPermissions,
2730
FiatPluginRegionCode,
2831
FiatPluginSepaFormParams,
2932
FiatPluginSepaTransferParams,
@@ -40,6 +43,7 @@ export const SendErrorBackPressed = 'SendErrorBackPressed'
4043
export const executePlugin = async (params: {
4144
account: EdgeAccount
4245
accountReferral: AccountReferral
46+
disklet: Disklet
4347
deviceId: string
4448
direction: 'buy' | 'sell'
4549
disablePlugins?: NestedDisableMap
@@ -56,6 +60,7 @@ export const executePlugin = async (params: {
5660
accountReferral,
5761
deviceId,
5862
direction,
63+
disklet,
5964
guiPlugin,
6065
longPress = false,
6166
navigation,
@@ -124,6 +129,15 @@ export const executePlugin = async (params: {
124129
})
125130
})
126131
},
132+
requestPermission: async (permissions: FiatPluginPermissions, displayName: string, mandatory: boolean = true) => {
133+
for (const permission of permissions) {
134+
const deniedPermission = await requestPermissionOnSettings(disklet, permission, displayName, mandatory)
135+
if (deniedPermission) {
136+
return false
137+
}
138+
}
139+
return true
140+
},
127141
async rewardsCardDashboard(params) {
128142
maybeNavigateToCorrectTabScene()
129143
navigation.navigate('rewardsCardDashboard', params)

src/plugins/gui/fiatPluginTypes.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { DisablePluginMap } from '../../actions/ExchangeInfoActions'
66
import { LaunchPaymentProtoParams } from '../../actions/PaymentProtoActions'
77
import { ButtonInfo, ButtonModalProps } from '../../components/modals/ButtonsModal'
88
import { SendScene2Params } from '../../components/scenes/SendScene2'
9+
import { Permission } from '../../reducers/PermissionsReducer'
910
import { HomeAddress, SepaInfo } from '../../types/FormTypes'
1011
import { GuiPlugin } from '../../types/GuiPluginTypes'
1112
import { AppParamList } from '../../types/routerTypes'
@@ -116,6 +117,9 @@ export interface SaveTxActionParams {
116117
savedAction: EdgeTxAction
117118
assetAction: EdgeAssetAction
118119
}
120+
121+
export type FiatPluginPermissions = Permission[]
122+
119123
export interface FiatPluginUi {
120124
addressWarnings: (parsedUri: any, currencyCode: string) => Promise<boolean>
121125
buttonModal: <Buttons extends { [key: string]: ButtonInfo }>(params: Omit<ButtonModalProps<Buttons>, 'bridge'>) => Promise<keyof Buttons | undefined>
@@ -127,6 +131,7 @@ export interface FiatPluginUi {
127131
listModal: (params: FiatPluginListModalParams) => Promise<string | undefined>
128132
enterAmount: (params: AppParamList['guiPluginEnterAmount']) => void
129133
addressForm: (params: FiatPluginAddressFormParams) => Promise<HomeAddress>
134+
requestPermission: (permissions: FiatPluginPermissions, displayName: string, mandatory: boolean) => Promise<boolean>
130135
rewardsCardDashboard: (params: RewardsCardDashboardParams) => Promise<void>
131136
rewardsCardWelcome: (params: RewardsCardWelcomeParams) => Promise<void>
132137
saveTxAction: (params: SaveTxActionParams) => Promise<void>

src/plugins/gui/providers/banxaProvider.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,10 @@ export const banxaProvider: FiatProviderFactory = {
468468
expirationDate: new Date(Date.now() + 50000),
469469
approveQuote: async (approveParams: FiatProviderApproveQuoteParams): Promise<void> => {
470470
const { showUi, coreWallet } = approveParams
471+
const success = await showUi.requestPermission(['camera'], pluginDisplayName, true)
472+
if (!success) {
473+
await showUi.showError(new Error(lstrings.fiat_plugin_cannot_continue_camera_permission))
474+
}
471475
const receiveAddress = await coreWallet.getReceiveAddress({ tokenId: null })
472476

473477
const bodyParams: any = {

src/plugins/gui/providers/paybisProvider.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -458,6 +458,10 @@ export const paybisProvider: FiatProviderFactory = {
458458
paymentTypes,
459459
approveQuote: async (approveParams: FiatProviderApproveQuoteParams): Promise<void> => {
460460
const { coreWallet, showUi } = approveParams
461+
const success = await showUi.requestPermission(['camera'], pluginDisplayName, true)
462+
if (!success) {
463+
await showUi.showError(new Error(lstrings.fiat_plugin_cannot_continue_camera_permission))
464+
}
461465
const receiveAddress = await coreWallet.getReceiveAddress({ tokenId: null })
462466

463467
let bodyParams

0 commit comments

Comments
 (0)