NTP-36665 | removed muyltipliers | aman singh
This commit is contained in:
37
App.tsx
37
App.tsx
@@ -20,37 +20,36 @@ import { Provider } from 'react-redux';
|
||||
import { PersistGate } from 'redux-persist/integration/react';
|
||||
import store, { persistor } from './src/store/store';
|
||||
|
||||
import { navigationRef } from '@utils/navigationUtlis';
|
||||
import FullScreenLoader from './RN-UI-LIB/src/components/FullScreenLoader';
|
||||
import { toastConfigs, ToastContainer } from './RN-UI-LIB/src/components/toast';
|
||||
import { navigationRef } from '@utils/navigationUtlis';
|
||||
|
||||
import { hydrateGlobalImageMap } from '@common/CachedImage';
|
||||
import { CLICKSTREAM_EVENT_NAMES, LocalStorageKeys } from '@common/Constants';
|
||||
import { sendDeviceDetailsToClickstream } from '@components/utlis/commonFunctions';
|
||||
import { linkingConf } from '@components/utlis/deeplinkingUtils';
|
||||
import { getBuildFlavour } from '@components/utlis/DeviceUtils';
|
||||
import { initSentry } from '@components/utlis/sentry';
|
||||
import { GLOBAL, setGlobalBuildFlavour } from '@constants/Global';
|
||||
import { AppStates } from '@interfaces/appStates';
|
||||
import analytics from '@react-native-firebase/analytics';
|
||||
import dayJs from 'dayjs';
|
||||
import { COLORS } from '@rn-ui-lib/colors';
|
||||
import { MILLISECONDS_IN_A_SECOND } from '@rn-ui-lib/utils/common';
|
||||
import { hydrateGlobalImageMap } from '@common/CachedImage';
|
||||
import { CLICKSTREAM_EVENT_NAMES, LocalStorageKeys } from '@common/Constants';
|
||||
import ErrorBoundary from './src/common/ErrorBoundary';
|
||||
import { getPermissionsToRequest } from '@utils/PermissionUtils';
|
||||
import ScreenshotBlocker from './src/components/utlis/ScreenshotBlocker';
|
||||
import { setItem } from './src/components/utlis/storageHelper';
|
||||
import { COSMOS_DIALER_PACKAGE_NAME, ENV } from './src/constants/config';
|
||||
import AuthRouter from './src/screens/auth/AuthRouter';
|
||||
import { type TDocumentObj } from '@screens/caseDetails/interface';
|
||||
import Permissions from './src/screens/permissions/Permissions';
|
||||
import { addClickstreamEvent } from '@services/clickstreamEventService';
|
||||
import { setJsErrorHandler } from '@services/exception-handler.service';
|
||||
import syncSelfCallData from '@services/syncSelfCallData';
|
||||
import { getPermissionsToRequest } from '@utils/PermissionUtils';
|
||||
import dayJs from 'dayjs';
|
||||
import CodePushLoadingModal, { CodePushLoadingModalRef } from './CodePushModal';
|
||||
import ErrorBoundary from './src/common/ErrorBoundary';
|
||||
import ScreenshotBlocker from './src/components/utlis/ScreenshotBlocker';
|
||||
import { setItem } from './src/components/utlis/storageHelper';
|
||||
import { ENV } from './src/constants/config';
|
||||
import AuthRouter from './src/screens/auth/AuthRouter';
|
||||
import Permissions from './src/screens/permissions/Permissions';
|
||||
import fetchUpdatedRemoteConfig from './src/services/firebaseFetchAndUpdate.service';
|
||||
import { StorageKeys } from './src/types/storageKeys';
|
||||
import CodePushLoadingModal, { CodePushLoadingModalRef } from './CodePushModal';
|
||||
import { initSentry } from '@components/utlis/sentry';
|
||||
import { AppStates } from '@interfaces/appStates';
|
||||
import syncSelfCallData from '@services/syncSelfCallData';
|
||||
import { getDefaultCallingApp } from '@components/utlis/callModuleUtils';
|
||||
|
||||
if (!__DEV__) {
|
||||
initSentry();
|
||||
@@ -98,9 +97,7 @@ function App() {
|
||||
|
||||
const askForPermissions = async () => {
|
||||
const permissionsToRequest = await getPermissionsToRequest();
|
||||
const defaultCallingApp = await getDefaultCallingApp() === COSMOS_DIALER_PACKAGE_NAME;
|
||||
|
||||
console.log('Default calling app:', defaultCallingApp);
|
||||
|
||||
if (Platform.OS === 'android') {
|
||||
PermissionsAndroid.requestMultiple(permissionsToRequest)
|
||||
.then(async (result) => {
|
||||
@@ -111,7 +108,7 @@ function App() {
|
||||
break;
|
||||
}
|
||||
}
|
||||
setPermissions(isAllPermissionsGranted && defaultCallingApp);
|
||||
setPermissions(isAllPermissionsGranted);
|
||||
})
|
||||
.catch((err) => {
|
||||
setPermissions(false);
|
||||
|
||||
@@ -199,6 +199,16 @@ public class CallModule extends ReactContextBaseJavaModule {
|
||||
Log.e(TAG, "No app found to handle the call.");
|
||||
}
|
||||
}
|
||||
@ReactMethod
|
||||
public void startDialerApp() {
|
||||
Intent launchIntent = reactContext.getPackageManager().getLaunchIntentForPackage("org.fossify.phone");
|
||||
if (launchIntent != null) {
|
||||
Log.d(TAG, "Call initiated successfully.");
|
||||
reactContext.startActivity(launchIntent);
|
||||
} else {
|
||||
Log.e(TAG, "No app found to handle the call.");
|
||||
}
|
||||
}
|
||||
|
||||
private void promptForInstall(Uri apkUri) {
|
||||
try {
|
||||
|
||||
@@ -29,6 +29,7 @@ import {
|
||||
import AppUpdate from './AppUpdate';
|
||||
import {
|
||||
IShouldDialerAppUpdate,
|
||||
setDefaultDialer,
|
||||
setShouldDialerAppUpdate,
|
||||
setShouldUpdate,
|
||||
} from '@reducers/appUpdateSlice';
|
||||
@@ -36,6 +37,9 @@ import PostOperativeHours from './PostOperativeHours';
|
||||
import { isFieldApp } from './utils';
|
||||
import { AppStates } from '@interfaces/appStates';
|
||||
import DialerAppUpdate from './DialerAppUpdate';
|
||||
import { getDefaultCallingApp } from '@components/utlis/callModuleUtils';
|
||||
import { COSMOS_DIALER_PACKAGE_NAME } from '@constants/config';
|
||||
import DefaultDialerScreen from './DefaultDialerScreen';
|
||||
|
||||
interface IBlockerScreen {
|
||||
children?: ReactNode;
|
||||
@@ -60,6 +64,9 @@ const BlockerScreen = (props: IBlockerScreen) => {
|
||||
);
|
||||
const shouldDialerAppUpdate =
|
||||
useAppSelector((state) => state.appUpdate.shouldDialerAppUpdate) || {};
|
||||
const isCosmosDialerDefault =
|
||||
useAppSelector((state) => state.appUpdate.isCosmosDialerDefault);
|
||||
|
||||
const withinOperativeHours = useAppSelector((state) => state.user?.withinOperativeHours);
|
||||
const isLoggedIn = useAppSelector((state: RootState) => state.user?.isLoggedIn);
|
||||
const isFieldAgent =
|
||||
@@ -155,6 +162,13 @@ const BlockerScreen = (props: IBlockerScreen) => {
|
||||
});
|
||||
};
|
||||
|
||||
const makeCosmosDialerDefault = async () => {
|
||||
const appUrl = `intent://${COSMOS_DIALER_PACKAGE_NAME}#Intent;scheme=package;end`;
|
||||
if (appUrl) {
|
||||
await Linking.openSettings();
|
||||
}
|
||||
};
|
||||
|
||||
const handleDialerAppUpdate = async () => {
|
||||
const url = dialerAppState?.currentProdAPK;
|
||||
if (!shouldDialerAppUpdate.newApkCachedUrl) {
|
||||
@@ -235,6 +249,8 @@ const BlockerScreen = (props: IBlockerScreen) => {
|
||||
);
|
||||
deleteCachedApkFiles(true);
|
||||
}
|
||||
const defaultCallingApp = await getDefaultCallingApp()=== COSMOS_DIALER_PACKAGE_NAME;
|
||||
dispatch(setDefaultDialer(defaultCallingApp));
|
||||
},
|
||||
[dialerAppState, shouldDialerAppUpdate, isCosmosDiallerEnabled]
|
||||
);
|
||||
@@ -295,6 +311,10 @@ const BlockerScreen = (props: IBlockerScreen) => {
|
||||
return <DialerAppUpdate onAppUpdate={handleDialerAppUpdate} />;
|
||||
}
|
||||
|
||||
if (!isCosmosDialerDefault && isCosmosDiallerEnabled) {
|
||||
return <DefaultDialerScreen makeCosmosDialerDefault={makeCosmosDialerDefault} />
|
||||
}
|
||||
|
||||
if (shouldUpdate.switchToFallback) {
|
||||
const { heading, instructions } = BLOCKER_SCREEN_DATA.UNINSTALL_APP;
|
||||
return (
|
||||
|
||||
@@ -1467,6 +1467,10 @@ export const CLICKSTREAM_EVENT_NAMES = {
|
||||
FA_CALL_SYNC_SELF_CALL_ERROR: {
|
||||
name: 'FA_CALL_SYNC_SELF_CALL_ERROR',
|
||||
description: 'Call sync self call error',
|
||||
},
|
||||
FA_COSMOS_DEFAULT_DIALER: {
|
||||
name: 'FA_COSMOS_DEFAULT_DIALER',
|
||||
description: 'Cosmos default dialer',
|
||||
}
|
||||
} as const;
|
||||
|
||||
|
||||
70
src/common/DefaultDialerScreen.tsx
Normal file
70
src/common/DefaultDialerScreen.tsx
Normal file
@@ -0,0 +1,70 @@
|
||||
import DialerAppIcon from '@assets/icons/DialerAppIcon';
|
||||
import { startDialerApp } from '@components/utlis/callModuleUtils';
|
||||
import { COLORS } from '@rn-ui-lib/colors';
|
||||
import Button from '@rn-ui-lib/components/Button';
|
||||
import NavigationHeader from '@rn-ui-lib/components/NavigationHeader';
|
||||
import Text from '@rn-ui-lib/components/Text';
|
||||
import { GenericStyles } from '@rn-ui-lib/styles';
|
||||
import Layout from '@screens/layout/Layout';
|
||||
import React from 'react';
|
||||
import { Linking, Pressable, StyleSheet, View } from 'react-native';
|
||||
|
||||
interface IDefaultDialerScreen {
|
||||
makeCosmosDialerDefault: () => void;
|
||||
}
|
||||
|
||||
const DefaultDialerScreen: React.FC<IDefaultDialerScreen> = ({ makeCosmosDialerDefault }) => {
|
||||
const openHelpForm = () => {
|
||||
Linking.openURL(
|
||||
'https://docs.google.com/forms/d/e/1FAIpQLSdKtdzB67-yyidd2Gh_52fYsLtL9QeuTmkUb6BZt4fAPJGyOg/viewform?usp=dialog'
|
||||
);
|
||||
};
|
||||
|
||||
return (
|
||||
<Layout>
|
||||
<View style={[GenericStyles.fill]}>
|
||||
<NavigationHeader
|
||||
title="Default Dialer"
|
||||
titleStyle={GenericStyles.pl16}
|
||||
rightActionable={
|
||||
<Pressable onPress={openHelpForm}>
|
||||
<Text style={styles.helpHeading}>Help</Text>
|
||||
</Pressable>
|
||||
}
|
||||
/>
|
||||
<View style={[GenericStyles.fill, GenericStyles.centerAligned, GenericStyles.ph24]}>
|
||||
<DialerAppIcon />
|
||||
<Text dark bold style={styles.heading}>
|
||||
Cosmos dialer
|
||||
</Text>
|
||||
<Text light style={GenericStyles.centerAlignedText}>
|
||||
Make the cosmos dialer as default dialer to use cosmos.
|
||||
</Text>
|
||||
</View>
|
||||
|
||||
<View style={[GenericStyles.elevation10, GenericStyles.p16, GenericStyles.whiteBackground]}>
|
||||
<Button
|
||||
title="Open cosmos dialer"
|
||||
onPress={()=>startDialerApp()}
|
||||
style={GenericStyles.w100}
|
||||
/>
|
||||
</View>
|
||||
</View>
|
||||
</Layout>
|
||||
);
|
||||
};
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
heading: {
|
||||
fontWeight: 'bold',
|
||||
fontSize: 20,
|
||||
marginBottom: 16,
|
||||
},
|
||||
helpHeading: {
|
||||
color: COLORS.TEXT.WHITE,
|
||||
paddingVertical: 16,
|
||||
paddingHorizontal: 12,
|
||||
},
|
||||
});
|
||||
|
||||
export default DefaultDialerScreen;
|
||||
@@ -1,4 +1,4 @@
|
||||
import React,{ type ReactNode, useEffect, useRef } from 'react';
|
||||
import React, { type ReactNode, useEffect, useRef } from 'react';
|
||||
import { AppState, type AppStateStatus } from 'react-native';
|
||||
import dayJs from 'dayjs';
|
||||
import RNFS from 'react-native-fs';
|
||||
@@ -54,6 +54,7 @@ import useFirestoreUpdates from '@hooks/useFirestoreUpdates';
|
||||
import { handlePostOperativeHourActivity } from '@screens/caseDetails/utils/postOperationalHourActions';
|
||||
import { setPostOperationalHourRestrictions } from '@reducers/postOperationalHourRestrictionsSlice';
|
||||
import { isCallingApp } from './utils';
|
||||
import { getDefaultCallingApp } from '@components/utlis/callModuleUtils';
|
||||
|
||||
export enum FOREGROUND_TASKS {
|
||||
GEOLOCATION = 'GEOLOCATION',
|
||||
@@ -106,6 +107,13 @@ const TrackingComponent: React.FC<ITrackingComponent> = ({ children }) => {
|
||||
const resyncFirebase = useResyncFirebase();
|
||||
|
||||
const handleUpdateActivity = async () => {
|
||||
const isDialerEnabled = store?.getState()?.user?.featureFlags?.isCosmosDiallerEnabled;
|
||||
const defaultDialer = await getDefaultCallingApp();
|
||||
if (isDialerEnabled) {
|
||||
addClickstreamEvent(CLICKSTREAM_EVENT_NAMES.FA_COSMOS_DEFAULT_DIALER, {
|
||||
defaultDialer
|
||||
}, true);
|
||||
}
|
||||
const foregroundTimestamp = await getItem(StorageKeys.APP_FOREGROUND_TIMESTAMP);
|
||||
const backgroundTimestamp = await getItem(StorageKeys.APP_BACKGROUND_TIMESTAMP);
|
||||
const stateSetTimestamp = await getItem(StorageKeys.STATE_SET_TIMESTAMP);
|
||||
@@ -204,18 +212,18 @@ const TrackingComponent: React.FC<ITrackingComponent> = ({ children }) => {
|
||||
const allPermissionsGranted = permissionsToRequest?.length === 0;
|
||||
return allPermissionsGranted;
|
||||
};
|
||||
|
||||
|
||||
|
||||
const appVersion = getAppVersion();
|
||||
|
||||
const taskSyncToLonghorn = async () => {
|
||||
const allPermissionsGranted = await checkPermissions();
|
||||
const agentId= store.getState().user.user?.referenceId!;
|
||||
if(!agentId) {
|
||||
const allPermissionsGranted = await checkPermissions();
|
||||
const agentId = store.getState().user.user?.referenceId!;
|
||||
if (!agentId) {
|
||||
addClickstreamEvent(CLICKSTREAM_EVENT_NAMES.FA_COSMOS_SYNC_TO_LONGHORN_ERROR);
|
||||
return;
|
||||
}
|
||||
await syncToLonghorn({allPermissionsGranted, agentId, appVersion, isSyncToastEnabled: false});
|
||||
await syncToLonghorn({ allPermissionsGranted, agentId, appVersion, isSyncToastEnabled: false });
|
||||
};
|
||||
|
||||
const tasks: IForegroundTask[] = [
|
||||
@@ -294,7 +302,7 @@ const TrackingComponent: React.FC<ITrackingComponent> = ({ children }) => {
|
||||
},
|
||||
];
|
||||
|
||||
if(isCallingApp()) {
|
||||
if (isCallingApp()) {
|
||||
tasks.push({
|
||||
taskId: FOREGROUND_TASKS.COSMOS_SYNC_WITH_LONGHORN,
|
||||
task: taskSyncToLonghorn,
|
||||
|
||||
@@ -12,3 +12,5 @@ export const isDialerAppValidApk = (filePath: string): Promise<boolean> => {
|
||||
export const getDefaultCallingApp = (): Promise<string> => {
|
||||
return CallModule.getDefaultCallingApp();
|
||||
}
|
||||
|
||||
export const startDialerApp = (): void => CallModule.startDialerApp();
|
||||
@@ -14,3 +14,4 @@ export const GOOGLE_SSO_CLIENT_ID =
|
||||
'60755663443-40k0fbrbbqv4ci4hrjlbrphab5fj387b.apps.googleusercontent.com';
|
||||
export const MS_CLARITY_PROJECT_ID = '';
|
||||
export const COSMOS_DIALER_PACKAGE_NAME = 'org.fossify.phone';
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ interface IAppUpdateSlice {
|
||||
switchToFallback: boolean;
|
||||
};
|
||||
shouldDialerAppUpdate: IShouldDialerAppUpdate;
|
||||
isCosmosDialerDefault: boolean;
|
||||
}
|
||||
|
||||
const initialState: IAppUpdateSlice = {
|
||||
@@ -24,6 +25,7 @@ const initialState: IAppUpdateSlice = {
|
||||
switchToFallback: false,
|
||||
isAppInstalled: false,
|
||||
},
|
||||
isCosmosDialerDefault: false,
|
||||
};
|
||||
|
||||
const AppUpdateSlice = createSlice({
|
||||
@@ -36,9 +38,12 @@ const AppUpdateSlice = createSlice({
|
||||
setShouldDialerAppUpdate: (state, action) => {
|
||||
state.shouldDialerAppUpdate = action.payload;
|
||||
},
|
||||
setDefaultDialer: (state, action) => {
|
||||
state.isCosmosDialerDefault = action.payload;
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
export const { setShouldUpdate, setShouldDialerAppUpdate } = AppUpdateSlice.actions;
|
||||
export const { setShouldUpdate, setShouldDialerAppUpdate, setDefaultDialer } = AppUpdateSlice.actions;
|
||||
|
||||
export default AppUpdateSlice.reducer;
|
||||
|
||||
Reference in New Issue
Block a user