...
 
Commits (3)
......@@ -187,7 +187,6 @@ dependencies {
}
implementation project(':react-native-sqlite-storage')
implementation project(':react-native-background-timer')
implementation project(':react-native-android-sms-listener')
implementation project(':react-native-fs')
implementation project(':react-native-media-meta')
implementation project(':react-native-share-menu')
......
......@@ -20,8 +20,6 @@
<uses-permission android:name="android.permission.RECORD_VIDEO"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-sdk
android:minSdkVersion="16"
......
......@@ -34,7 +34,7 @@ import cl.json.ShareApplication;
import com.meedan.ShareMenuPackage;
import com.mybigday.rnmediameta.RNMediaMetaPackage;
import com.rnfs.RNFSPackage;
import com.centaurwarchief.smslistener.SmsListenerPackage;
import com.reactnativejitsimeet.JitsiMeetPackage;
import com.ocetnik.timer.BackgroundTimerPackage;
import org.pgsqlite.SQLitePluginPackage;
import java.util.Arrays;
......@@ -82,7 +82,7 @@ public class MainApplication extends Application implements ShareApplication, Re
new ShareMenuPackage(),
new RNMediaMetaPackage(),
new RNFSPackage(),
new SmsListenerPackage(),
new JitsiMeetPackage(),
new SQLitePluginPackage(),
new BackgroundTimerPackage()
);
......
......@@ -26,8 +26,6 @@ include ':react-native-exit-app'
project(':react-native-exit-app').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-exit-app/android')
include ':react-native-background-timer'
project(':react-native-background-timer').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-background-timer/android')
include ':react-native-android-sms-listener'
project(':react-native-android-sms-listener').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-android-sms-listener/android')
include ':react-native-fs'
project(':react-native-fs').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-fs/android')
include ':react-native-media-meta'
......
import SmsListener from 'react-native-android-sms-listener'
import permissions from './android-permissions.service';
import KeepAwake from 'react-native-keep-awake';
import { Platform } from 'react-native';
import { GOOGLE_PLAY_STORE } from '../../config/Config';
/**
* Sms listener service
*/
class SmsListenerService {
/**
* listen for sms
* @param {regex} regex
* @param {integer} timeout
*/
async listen(regex, timeout=5000) {
// sms listener doesn't support ios and should be disabled for play store
if (Platform.OS === 'ios' || GOOGLE_PLAY_STORE) {
return -1;
}
let allowed = await permissions.checkReadSms();
if (!allowed) allowed = await permissions.readSms();
if (allowed) {
KeepAwake.activate();
return await new Promise(resolve => {
let subscription = SmsListener.addListener(message => {
if (regex.test(message.body)) {
let verificationCode = message.body.match(regex)[1]
resolve(verificationCode);
subscription.remove();
KeepAwake.deactivate();
}
});
setTimeout(() => {
subscription.remove();
resolve(false);
KeepAwake.deactivate();
}, timeout);
});
} else {
return -1; //not allowed
}
}
}
export default new SmsListenerService();
\ No newline at end of file
......@@ -62,29 +62,8 @@ export default class RewardsStep extends Component {
secret,
confirming: true,
inProgress: false,
wait: 60
});
this.waiting = setInterval(() => {
this.setState({wait: this.state.wait - 1});
}, 1000);
// listen for the sms for 20 seconds
const code = await this.props.wallet.listenForSms();
clearInterval(this.waiting);
switch(code) {
case false: // sms not recived
this.setState({confirmFailed: true});
break;
case -1: // sms read permission not allowed
this.setState({smsAllowed: false})
break;
default:
this.setState({code}, () => this.confirm());
}
} catch (e) {
const error = (e && e.message) || 'Unknown server error';
this.setState({ error, inProgress: false });
......@@ -174,19 +153,11 @@ export default class RewardsStep extends Component {
confirmButtonContent = <ActivityIndicator size="small" color={Colors.primary} />;
}
const body = this.state.confirmFailed ?
<Text style={[CS.fontXL, CS.textCenter]}>{i18n.t('onboarding.smsNotReceived')} <Text style={CS.colorPrimary} onPress={this.rejoinAction}>{i18n.t('tryAgain')}</Text></Text>:
this.state.smsAllowed ?
<Text style={[CS.colorPrimary, CS.fontXL, CS.textCenter]}> {i18n.t('onboarding.waitSms')}: {this.state.wait}</Text>:
null;
return (
<View>
<Text style={style.p}>
{i18n.t('onboarding.weJustSentCode', {phone: this.state.phone})}
</Text>
{body}
<View style={[style.cols, style.form]}>
<TextInput
style={[style.col, style.colFirst, style.textInput, style.textInputCentered]}
......
......@@ -11,7 +11,6 @@ import token from "../common/helpers/token";
import number from "../common/helpers/number";
import TokensStore from './tokens/TokensStore';
import storageService from '../common/services/storage.service';
import smslistener from '../common/services/sms-listener.service';
import web3Service from '../blockchain/services/Web3Service';
......@@ -81,17 +80,6 @@ class WalletStore {
return walletService.join(number, retry)
}
/**
* Listen for the confirmation sms
*/
async listenForSms() {
try {
return await smslistener.listen(/([\d]{6})/, 60000);
} catch (e) {
console.error(e);
}
}
/**
* Confirm join
* @param {string} number
......
......@@ -62,29 +62,8 @@ export default class WalletOnboardingJoinRewardsScreen extends Component {
secret,
confirming: true,
inProgress: false,
wait: 60
});
this.waiting = setInterval(() => {
this.setState({wait: this.state.wait - 1});
}, 1000);
// listen for the sms for 20 seconds
const code = await this.props.wallet.listenForSms();
clearInterval(this.waiting);
switch(code) {
case false: // sms not recived
this.setState({confirmFailed: true});
break;
case -1: // sms read permission not allowed
this.setState({smsAllowed: false})
break;
default:
this.setState({code}, () => this.confirm());
}
} catch (e) {
const error = (e && e.message) || 'Unknown server error';
this.setState({ error, inProgress: false });
......@@ -178,19 +157,11 @@ export default class WalletOnboardingJoinRewardsScreen extends Component {
confirmButtonContent = <ActivityIndicator size="small" color={Colors.primary} />;
}
const body = this.state.confirmFailed ?
<Text style={[CommonStyle.fontXL, CommonStyle.textCenter]}>{i18n.t('onboarding.smsNotReceived')} <Text style={CommonStyle.colorPrimary} onPress={this.rejoinAction}>{i18n.t('tryAgain')}</Text></Text>:
this.state.smsAllowed ?
<Text style={[CommonStyle.colorPrimary, CommonStyle.fontXL, CommonStyle.textCenter]}> {i18n.t('onboarding.waitSms')}: {this.state.wait}</Text>:
null;
return (
<View>
<Text style={style.p}>
{i18n.t('onboarding.weJustSentCode', {phone: this.state.phone})}
</Text>
{body}
<View style={[style.cols, style.form]}>
<TextInput
style={[style.col, style.colFirst, style.textInput, style.textInputCentered]}
......
......@@ -7269,11 +7269,6 @@ react-native-actionsheet@^2.3.0:
version "2.4.2"
resolved "https://registry.yarnpkg.com/react-native-actionsheet/-/react-native-actionsheet-2.4.2.tgz#6a00dd51a75ef2c8974312130e405af73191500f"
react-native-android-sms-listener@^0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/react-native-android-sms-listener/-/react-native-android-sms-listener-0.7.0.tgz#f5ffab7a825f07ee0928dad40a9ef3dbbebc8724"
integrity sha512-XRQzTW08UJe0rGTXF4JGJefLqPqlg4+zUMErYJhA+1cSkUBS3NHLzzl1MTDn9/3GVdFV2aPmAceZ9mSmtSozwg==
react-native-animatable@^1.2.4, react-native-animatable@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/react-native-animatable/-/react-native-animatable-1.3.0.tgz#b5c3940fc758cfd9b2fe54613a457c4b6962b46e"
......