Skip to content

Commit

Permalink
Merge pull request #1032 from gponsinet/fix-1027
Browse files Browse the repository at this point in the history
fix(android): add permission to install updates
  • Loading branch information
Godefroy Ponsinet committed Feb 6, 2019
2 parents 0542c4c + 2b03e16 commit 9e0b4af
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 34 deletions.
1 change: 1 addition & 0 deletions client/react-native/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,7 @@ package-lock.json
# Environment
.env.debug
.env.release
.environment

# Fix code factor __generated__ exclude patterns
__generated__/
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY"/>

Expand Down
78 changes: 44 additions & 34 deletions client/react-native/common/helpers/update.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,9 @@ export const getAvailableUpdate = async context => {
const installedVersion = await getInstalledVersion(context)
const latestVersion = await getLatestVersion()

return shouldUpdate(installedVersion, latestVersion) ? latestVersion.installUrl : null
return shouldUpdate(installedVersion, latestVersion)
? latestVersion.installUrl
: null
}

export const getInstalledVersion = async context => {
Expand All @@ -58,14 +60,12 @@ export const getInstalledVersion = async context => {

const { channel } = updateApiSources[bundleId]
const deviceData = await DeviceInfos(context).fetch()
const [rawVersionInfo] = deviceData.infos.filter(d => d.key === 'versions').map(d => d.value)
const [rawVersionInfo] = deviceData.infos
.filter(d => d.key === 'versions')
.map(d => d.value)

const {
Core: {
GitSha: hash,
GitBranch: branch,
CommitDate: rawCommitDate,
},
Core: { GitSha: hash, GitBranch: branch, CommitDate: rawCommitDate },
} = JSON.parse(rawVersionInfo)

return {
Expand All @@ -91,10 +91,12 @@ export const getLatestVersion = async () => {
reject(new Error('timeouted'))
}, 5000)

fetch(url).then(res => res.json()).then((r) => {
clearTimeout(timeoutId)
resolve(r)
})
fetch(url)
.then(res => res.json())
.then(r => {
clearTimeout(timeoutId)
resolve(r)
})
})

try {
Expand Down Expand Up @@ -125,24 +127,21 @@ export const installUpdate = async installUrl => {
position: 'top',
})

Linking.openURL(installUrl).catch(e =>
console.error(e),
)
Linking.openURL(installUrl).catch(e => console.error(e))
} else if (Platform.OS === 'android') {
const allowed = await requestAndroidPermission({
const writeExternalStorageAllowed = await requestAndroidPermission({
permission: PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,
title: I18n.t('settings.update-write-perm'),
message: I18n.t('settings.update-write-perm-desc'),
})

if (!allowed) {
if (!writeExternalStorageAllowed) {
showMessage({
message: I18n.t('settings.update-write-fail'),
type: 'danger',
icon: 'danger',
position: 'top',
})

return
}

Expand All @@ -153,21 +152,25 @@ export const installUpdate = async installUrl => {
position: 'top',
})

RNFetchBlob
.config({
addAndroidDownloads: {
title: 'berty-update.apk',
useDownloadManager: true,
mediaScannable: true,
notification: true,
description: 'File downloaded by download manager.',
path: `${RNFetchBlob.fs.dirs.DownloadDir}/berty-update.apk`,
},
})
RNFetchBlob.config({
addAndroidDownloads: {
title: 'berty-update.apk',
useDownloadManager: true,
mediaScannable: true,
notification: true,
mime: 'application/vnd.android.package-archive',
description: 'File downloaded by download manager.',
path: `${RNFetchBlob.fs.dirs.DownloadDir}/berty-update.apk`,
},
})
.fetch('GET', installUrl)
.then((res) => {
RNFetchBlob.android.actionViewIntent(res.path(), 'application/vnd.android.package-archive')
}).catch(e => {
.then(res => {
RNFetchBlob.android.actionViewIntent(
res.path(),
'application/vnd.android.package-archive'
)
})
.catch(e => {
showMessage({
message: String(e),
type: 'danger',
Expand All @@ -179,10 +182,17 @@ export const installUpdate = async installUrl => {
}

export const shouldUpdate = (installedVersion, latestVersion) => {
if (!installedVersion || !latestVersion || installedVersion.hash === latestVersion.hash) {
if (
!installedVersion ||
!latestVersion ||
installedVersion.hash === latestVersion.hash
) {
return false
}

return (installedVersion.branch === 'master') ||
(installedVersion.branch !== 'master' && installedVersion.buildDate.diff(latestVersion.buildDate) < 0)
return (
installedVersion.branch === 'master' ||
(installedVersion.branch !== 'master' &&
installedVersion.buildDate.diff(latestVersion.buildDate) < 0)
)
}

0 comments on commit 9e0b4af

Please sign in to comment.