diff --git a/android/app/src/main/java/com/avapp/MainApplication.java b/android/app/src/main/java/com/avapp/MainApplication.java index 1fccb715..caa9e9b5 100644 --- a/android/app/src/main/java/com/avapp/MainApplication.java +++ b/android/app/src/main/java/com/avapp/MainApplication.java @@ -10,6 +10,7 @@ import android.app.Application; import android.content.Context; import com.avapp.deviceDataSync.DeviceDataSyncPackage; +import com.avapp.phoneStateBroadcastReceiver.PhoneStateModulePackage; import com.avapp.utils.FirebaseRemoteConfigHelper; import com.facebook.react.PackageList; import com.facebook.react.ReactApplication; @@ -56,6 +57,7 @@ public class MainApplication extends Application implements ReactApplication { packages.add(new DeviceUtilsModulePackage()); packages.add(new ScreenshotBlockerModulePackage()); packages.add(new DeviceDataSyncPackage()); + packages.add(new PhoneStateModulePackage()); return packages; } diff --git a/android/app/src/main/java/com/avapp/phoneStateBroadcastReceiver/PhoneStateModule.java b/android/app/src/main/java/com/avapp/phoneStateBroadcastReceiver/PhoneStateModule.java new file mode 100644 index 00000000..3ef44209 --- /dev/null +++ b/android/app/src/main/java/com/avapp/phoneStateBroadcastReceiver/PhoneStateModule.java @@ -0,0 +1,57 @@ +package com.avapp.phoneStateBroadcastReceiver; + +import android.content.BroadcastReceiver; +import android.content.IntentFilter; + +import com.facebook.react.bridge.Promise; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactContextBaseJavaModule; +import com.facebook.react.bridge.ReactMethod; +import com.facebook.react.modules.core.DeviceEventManagerModule; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.telephony.PhoneStateListener; +import android.telephony.TelephonyManager; +import android.util.Log; + +public class PhoneStateModule extends ReactContextBaseJavaModule { + private final ReactApplicationContext reactContext; + private TelephonyManager telephonyManager; + private String currentCallState = "UNKNOWN"; + + public PhoneStateModule(ReactApplicationContext reactContext) { + super(reactContext); + this.reactContext = reactContext; + telephonyManager = (TelephonyManager) reactContext.getSystemService(Context.TELEPHONY_SERVICE); + } + + @Override + public String getName() { + return "PhoneStateModule"; + } + + @ReactMethod + public void getCurrentCallState(Promise promise) { + int state = telephonyManager.getCallState(); + String currentCallState; + + switch (state) { + case TelephonyManager.CALL_STATE_IDLE: + currentCallState = "IDLE"; + break; + case TelephonyManager.CALL_STATE_RINGING: + currentCallState = "RINGING"; + break; + case TelephonyManager.CALL_STATE_OFFHOOK: + currentCallState = "OFFHOOK"; + break; + default: + currentCallState = "UNKNOWN"; + break; + } + + promise.resolve(currentCallState); + } +} \ No newline at end of file diff --git a/android/app/src/main/java/com/avapp/phoneStateBroadcastReceiver/PhoneStateModulePackage.java b/android/app/src/main/java/com/avapp/phoneStateBroadcastReceiver/PhoneStateModulePackage.java new file mode 100644 index 00000000..93a55da4 --- /dev/null +++ b/android/app/src/main/java/com/avapp/phoneStateBroadcastReceiver/PhoneStateModulePackage.java @@ -0,0 +1,28 @@ +package com.avapp.phoneStateBroadcastReceiver; + + +import com.facebook.react.ReactPackage; +import com.facebook.react.bridge.NativeModule; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.uimanager.ViewManager; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class PhoneStateModulePackage implements ReactPackage { + @Override + public List createViewManagers(ReactApplicationContext reactContext) { + return Collections.emptyList(); + } + + @Override + public List createNativeModules( + ReactApplicationContext reactContext) { + List modules = new ArrayList<>(); + + modules.add(new PhoneStateModule(reactContext)); + + return modules; + } +} \ No newline at end of file diff --git a/src/action/callRecordingActions.ts b/src/action/callRecordingActions.ts new file mode 100644 index 00000000..45b77ec7 --- /dev/null +++ b/src/action/callRecordingActions.ts @@ -0,0 +1,16 @@ +import axiosInstance, { ApiKeys, getApiUrl } from '@components/utlis/apiHelper'; +import { logError } from '@components/utlis/errorUtils'; +import { setConnectingToCustomerBottomSheet } from '@reducers/activeCallSlice'; +import { AppDispatch } from '@store'; + +export const makeACallToCustomer = (payload: any) => (dispatch: AppDispatch) => { + const url = getApiUrl(ApiKeys.CALL_CUSTOMER); + dispatch(setConnectingToCustomerBottomSheet(true)); + axiosInstance + .post(url, payload) + .then((res) => {}) + .catch((err: Error) => { + logError(err); + }) + .finally(() => {}); +}; diff --git a/src/action/fetchTelephoneNumber.ts b/src/action/fetchTelephoneNumber.ts index 6727edc3..fcf79830 100644 --- a/src/action/fetchTelephoneNumber.ts +++ b/src/action/fetchTelephoneNumber.ts @@ -4,7 +4,7 @@ import { logError } from '../components/utlis/errorUtils'; import { ITelephoneNumbers, setCallHistory, - setTelephoneNumbers, + setTelephoneDetails, } from '@reducers/telephoneNumbersSlice'; import { isFunction } from '@components/utlis/commonFunctions'; @@ -84,9 +84,12 @@ export const fetchTelephoneNumber = new: false, }, ], - agentCallActivity: null, + agentCallActivity: { + genuineCallCount: 3, + enableFeature: false, + }, }; - dispatch(setTelephoneNumbers({ caseId: caseId, telephoneNumbers: response.telephones })); + dispatch(setTelephoneDetails({ caseId: caseId, data: response })); }) .catch((err: Error) => { logError(err); diff --git a/src/components/utlis/PhoneState.ts b/src/components/utlis/PhoneState.ts new file mode 100644 index 00000000..b2faba80 --- /dev/null +++ b/src/components/utlis/PhoneState.ts @@ -0,0 +1,5 @@ +import { NativeModules } from 'react-native'; + +const { PhoneStateModule } = NativeModules; + +export default PhoneStateModule; diff --git a/src/components/utlis/apiHelper.ts b/src/components/utlis/apiHelper.ts index 02405943..4da3a62b 100644 --- a/src/components/utlis/apiHelper.ts +++ b/src/components/utlis/apiHelper.ts @@ -85,6 +85,7 @@ export enum ApiKeys { DUE_AMOUNT_SUMMARY = 'DUE_AMOUNT_SUMMARY', FEE_WAIVER_HISTORY = 'FEE_WAIVER_HISTORY', FEE_WAIVER_V2 = 'FEE_WAIVER_V2', + CALL_CUSTOMER = 'CALL_CUSTOMER', } export const API_URLS: Record = {} as Record; @@ -161,6 +162,7 @@ API_URLS[ApiKeys.GET_UPDATE_COUNT] = '/support-requests/summary'; API_URLS[ApiKeys.DUE_AMOUNT_SUMMARY] = '/collection-cases/{loanAccountNumber}/amount-summary'; API_URLS[ApiKeys.FEE_WAIVER_HISTORY] = '/collection-cases/{loanAccountNumber}/waiver-history'; API_URLS[ApiKeys.FEE_WAIVER_V2] = '/loan/request/{loanAccountNumber}/adjust-component/v2'; +API_URLS[ApiKeys.CALL_CUSTOMER] = '/call'; export const API_STATUS_CODE = { OK: 200, diff --git a/src/reducer/activeCallSlice.ts b/src/reducer/activeCallSlice.ts index a9e3ea52..e9a355c0 100644 --- a/src/reducer/activeCallSlice.ts +++ b/src/reducer/activeCallSlice.ts @@ -2,10 +2,11 @@ import { createSlice } from '@reduxjs/toolkit'; const initialState = { phoneNumber: '98989898998', + referenceId: 'fdc99092-6155-438f-895e-81dc75d3efe0', customerName: 'Test User', caseId: '2875116', showConnectingToCustomerBottomSheet: false, - showCallCannotInitiateBottomSheet: true, + showCallCannotInitiateBottomSheet: false, }; export const activeCallSlice = createSlice({ diff --git a/src/reducer/telephoneNumbersSlice.ts b/src/reducer/telephoneNumbersSlice.ts index 48d7f758..17d78dfa 100644 --- a/src/reducer/telephoneNumbersSlice.ts +++ b/src/reducer/telephoneNumbersSlice.ts @@ -24,6 +24,10 @@ interface ITelephoneNumbersSlice { callHistory: { [key: string]: any[]; }; + callActivity: { + [key: string]: any; + }; + callAttemptedOn: string; } interface SetTelephoneNumbersActionType { @@ -36,6 +40,8 @@ interface SetTelephoneNumbersActionType { const initialState: ITelephoneNumbersSlice = { telephoneNumbers: {}, callHistory: {}, + callActivity: {}, + callAttemptedOn: '', }; export const telephoneNumbersSlice = createSlice({ @@ -48,9 +54,20 @@ export const telephoneNumbersSlice = createSlice({ setCallHistory: (state, action) => { state.callHistory[action?.payload?.caseId] = action?.payload?.callHistory; }, + setCallActivity: (state, action) => { + state.callActivity[action?.payload?.caseId] = action.payload.agentCallActivity; + }, + setTelephoneDetails: (state, action) => { + state.telephoneNumbers[action?.payload?.caseId] = action?.payload?.data?.telephones; + state.callActivity[action?.payload?.caseId] = action?.payload?.data?.agentCallActivity; + }, + setCallAttemptedOn: (state, action) => { + state.callAttemptedOn = action.payload; + }, }, }); -export const { setTelephoneNumbers, setCallHistory } = telephoneNumbersSlice.actions; +export const { setTelephoneNumbers, setCallHistory, setTelephoneDetails, setCallAttemptedOn } = + telephoneNumbersSlice.actions; export default telephoneNumbersSlice.reducer; diff --git a/src/screens/addNewNumber/index.tsx b/src/screens/addNewNumber/index.tsx index e0d6aadf..3c7f1ddf 100644 --- a/src/screens/addNewNumber/index.tsx +++ b/src/screens/addNewNumber/index.tsx @@ -6,8 +6,7 @@ import NavigationHeader, { Icon } from '../../../RN-UI-LIB/src/components/Naviga import TextInput from '../../../RN-UI-LIB/src/components/TextInput'; import Button from '../../../RN-UI-LIB/src/components/Button'; import { popToScreen } from '../../components/utlis/navigationUtlis'; -import { GenericStyles, getShadowStyle } from '../../../RN-UI-LIB/src/styles'; -import Dropdown from '../../../RN-UI-LIB/src/components/dropdown/Dropdown'; +import { GenericStyles } from '../../../RN-UI-LIB/src/styles'; import { Controller, useForm } from 'react-hook-form'; import { Source, Tag } from './const'; import DropdownItem from '../registerPayements/DropdownItem'; @@ -84,117 +83,99 @@ const AddNewNumber: React.FC = (props) => { return ( - + - - - - - Add new number - - ( - { - onChange(number); - trigger(); - }} - keyboardType="numeric" - placeholder="Enter here" - maxLength={10} - /> - )} - name="number" - rules={{ - required: true, - minLength: 10, - min: 10, - }} - /> - - - - Source of the number - - ( - { - onChange(number); - trigger(); - }} - bottomSheetHeight={getBottomSheetHeight(Object.values(Source).length)} - header="Source of the number" - value={value ?? ''} - > - {SourceChildComponents} - - )} - name="source" - rules={{ required: true }} - /> - - - - Tag number - - ( - { - onChange(number); - trigger(); - }} - bottomSheetHeight={getBottomSheetHeight(Object.values(Tag).length)} - header="Tag number" - value={value ?? ''} - > - {TagChildComponents} - - )} - name="tag" - rules={{ required: true }} - /> + + + + + + Add new number + + ( + { + onChange(number); + trigger(); + }} + keyboardType="numeric" + placeholder="Enter here" + maxLength={10} + /> + )} + name="number" + rules={{ + required: true, + minLength: 10, + min: 10, + }} + /> + + + + Source of the number + + ( + { + onChange(number); + trigger(); + }} + containerStyle={GenericStyles.whiteBackground} + bottomSheetHeight={getBottomSheetHeight(Object.values(Source).length)} + header="Source of the number" + value={value ?? ''} + > + {SourceChildComponents} + + )} + name="source" + rules={{ required: true }} + /> + + + + Tag number + + ( + { + onChange(number); + trigger(); + }} + containerStyle={GenericStyles.whiteBackground} + bottomSheetHeight={getBottomSheetHeight(Object.values(Tag).length)} + header="Tag number" + value={value ?? ''} + > + {TagChildComponents} + + )} + name="tag" + rules={{ required: true }} + /> + - - -