import {
|
invoke
|
} from '../../bridge'
|
|
import {
|
showPage
|
} from '../../../helpers/page.js'
|
|
import {
|
t
|
} from 'uni-core/helpers/i18n'
|
|
function getStatusBarStyle () {
|
let style = plus.navigator.getStatusBarStyle()
|
if (style === 'UIStatusBarStyleBlackTranslucent' || style === 'UIStatusBarStyleBlackOpaque' || style === 'null') {
|
style = 'light'
|
} else if (style === 'UIStatusBarStyleDefault') {
|
style = 'dark'
|
}
|
return style
|
}
|
|
export function scanCode (options, callbackId) {
|
const statusBarStyle = getStatusBarStyle()
|
const isDark = statusBarStyle !== 'light'
|
|
let result
|
const page = showPage({
|
url: '__uniappscan',
|
data: Object.assign({}, options, {
|
messages: {
|
fail: t('uni.scanCode.fail'),
|
'flash.on': t('uni.scanCode.flash.on'),
|
'flash.off': t('uni.scanCode.flash.off')
|
}
|
}),
|
style: {
|
animationType: options.animationType || 'pop-in',
|
titleNView: {
|
autoBackButton: true,
|
type: 'float',
|
titleText: options.titleText || t('uni.scanCode.title'),
|
titleColor: '#ffffff',
|
backgroundColor: 'rgba(0,0,0,0)',
|
buttons: !options.onlyFromCamera ? [{
|
text: options.albumText || t('uni.scanCode.album'),
|
fontSize: '17px',
|
width: '60px',
|
onclick: () => {
|
page.sendMessage({
|
type: 'gallery'
|
})
|
}
|
}] : []
|
},
|
popGesture: 'close',
|
background: '#000000',
|
backButtonAutoControl: 'close'
|
},
|
onMessage ({
|
event,
|
detail
|
}) {
|
result = detail
|
if (event === 'marked') {
|
result.errMsg = 'scanCode:ok'
|
} else {
|
result.errMsg = 'scanCode:fail ' + detail.message
|
}
|
},
|
onClose () {
|
if (isDark) {
|
plus.navigator.setStatusBarStyle('dark')
|
}
|
invoke(callbackId, result || {
|
errMsg: 'scanCode:fail cancel'
|
})
|
}
|
})
|
|
if (isDark) {
|
plus.navigator.setStatusBarStyle('light')
|
page.webview.addEventListener('popGesture', ({
|
type,
|
result
|
}) => {
|
if (type === 'start') {
|
plus.navigator.setStatusBarStyle('dark')
|
} else if (type === 'end' && !result) {
|
plus.navigator.setStatusBarStyle('light')
|
}
|
})
|
}
|
}
|