import React, {Component} from 'react'; import { StyleSheet, Text, FlatList } from 'react-native'; import { Container, Header, Content, List, ListItem, Left, Body, Right, Title, Button, Icon, View } from 'native-base'; import { api_url, faq, font_title, font_description, get_access_token_for_voice } from '../config/Constants'; import * as colors from '../assets/css/Colors'; import Accordian from '../config/Accordian'; import axios from 'axios'; import TwilioVoice from 'react-native-twilio-programmable-voice'; import {request, check, PERMISSIONS, RESULTS} from 'react-native-permissions'; export default class Call extends Component { constructor(props) { super(props) this.handleBackButtonClick = this.handleBackButtonClick.bind(this); this.state={ accessToken:'', isLoding:false } this.permission_check(); this.initTelephony(); TwilioVoice.connect({To: 'kiruthika'}) } permission_check(){ /*check(PERMISSIONS.ANDROID.RECORD_AUDIO) .then((result) => { switch (result) { case RESULTS.UNAVAILABLE: alert( 'This feature is not available (on this device / in this context)', ); break; case RESULTS.DENIED: alert( 'The permission has not been requested / is denied but requestable', ); break; case RESULTS.GRANTED: alert('The permission is granted'); break; case RESULTS.BLOCKED: alert('The permission is denied and not requestable anymore'); break; } }) .catch((error) => { // … });*/ request(PERMISSIONS.ANDROID.RECORD_AUDIO).then((result) => { // … }); } handleBackButtonClick= () => { this.props.navigation.goBack(null); } async initTelephony() { try { await this.getAccessTokenFromServer(); const success = await TwilioVoice.initWithToken(this.state.accessToken); } catch (err) { console.log(err) } } getAccessTokenFromServer = async () => { this.setState({ isLoding : true }); await axios({ method: "get", url: api_url + get_access_token_for_voice+'/sarath' }) .then(async (response) => { this.setState({ isLoding : false }); this.setState({ accessToken : response.data.result}); }) .catch((error) => { this.setState({ isLoding : false }); }); }; initTelephonyWithToken(token) { TwilioVoice.initWithAccessToken(token) // iOS only, configure CallKit try { TwilioVoice.configureCallKit({ appName: 'TwilioVoiceExample', // Required param imageName: 'my_image_name_in_bundle', // OPTIONAL ringtoneSound: 'my_ringtone_sound_filename_in_bundle' // OPTIONAL }) } catch (err) { console.err(err) } } componentDidMount(){ TwilioVoice.addEventListener('deviceReady', function() { }); TwilioVoice.addEventListener('deviceNotReady', function(data) { }) TwilioVoice.addEventListener('connectionDidConnect', function(data) { // { // call_sid: string, // Twilio call sid // call_state: 'CONNECTED' | 'ACCEPTED' | 'CONNECTING' | 'RINGING' | 'DISCONNECTED' | 'CANCELLED', // call_from: string, // "+441234567890" // call_to: string, // "client:bob" // } }) TwilioVoice.addEventListener('connectionIsReconnecting', function(data) { // { // call_sid: string, // Twilio call sid // call_from: string, // "+441234567890" // call_to: string, // "client:bob" // } }) TwilioVoice.addEventListener('connectionDidReconnect', function(data) { // { // call_sid: string, // Twilio call sid // call_from: string, // "+441234567890" // call_to: string, // "client:bob" // } }) TwilioVoice.addEventListener('connectionDidDisconnect', function(data: mixed) { // | null // | { // err: string // } // | { // call_sid: string, // Twilio call sid // call_state: 'CONNECTED' | 'ACCEPTED' | 'CONNECTING' | 'RINGING' | 'DISCONNECTED' | 'CANCELLED', // call_from: string, // "+441234567890" // call_to: string, // "client:bob" // err?: string, // } }); } render() { return ( ); } } const styles = StyleSheet.create({ container: { alignItems: 'center' }, header:{ backgroundColor:colors.theme_bg_three }, icon:{ color:colors.theme_fg_two }, header_body: { flex: 3, justifyContent: 'center' }, title:{ alignSelf:'center', color:colors.theme_fg_two, alignSelf:'center', fontSize:16, fontFamily:font_title }, faq_title: { color: colors.theme_fg_two, fontSize: 15, fontFamily:font_description }, });