chore: init CustomCallActivity
This commit is contained in:
parent
79c6e6b014
commit
b3a07570ab
|
@ -81,5 +81,13 @@
|
||||||
<data android:mimeType="*/*" />
|
<data android:mimeType="*/*" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
|
<activity
|
||||||
|
android:name="chat.rocket.reactnative.CustomCallActivity"
|
||||||
|
android:showWhenLocked="true"
|
||||||
|
android:turnScreenOn="true"
|
||||||
|
android:launchMode="singleTop"
|
||||||
|
android:showOnLockScreen="true"
|
||||||
|
android:theme="@style/AppTheme"
|
||||||
|
/>
|
||||||
</application>
|
</application>
|
||||||
</manifest>
|
</manifest>
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
package chat.rocket.reactnative;
|
||||||
|
|
||||||
|
import com.facebook.react.ReactActivity;
|
||||||
|
|
||||||
|
public class CustomCallActivity extends ReactActivity {
|
||||||
|
@Override
|
||||||
|
protected String getMainComponentName() {
|
||||||
|
return "CallRocketChatRN";
|
||||||
|
}
|
||||||
|
}
|
3
app.json
3
app.json
|
@ -1,5 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "RocketChatRN",
|
"name": "RocketChatRN",
|
||||||
"share": "ShareRocketChatRN",
|
"share": "ShareRocketChatRN",
|
||||||
"displayName": "RocketChatRN"
|
"displayName": "RocketChatRN",
|
||||||
|
"call": "CallRocketChatRN"
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
import { View, Text } from 'react-native';
|
||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
const call = () => {
|
||||||
|
console.log('call');
|
||||||
|
return (
|
||||||
|
<View style={{ flex: 1 }}>
|
||||||
|
<Text>call</Text>
|
||||||
|
</View>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default call;
|
|
@ -0,0 +1,120 @@
|
||||||
|
import notifee, { AndroidCategory, AndroidImportance, AndroidVisibility } from '@notifee/react-native';
|
||||||
|
import messaging from '@react-native-firebase/messaging';
|
||||||
|
import { Alert } from 'react-native';
|
||||||
|
|
||||||
|
import { INotification } from '../../definitions';
|
||||||
|
|
||||||
|
export const backgroundNotificationHandler = async (): Promise<void> => {
|
||||||
|
// 1. get info on the device and the Power Manager settings
|
||||||
|
const powerManagerInfo = await notifee.getPowerManagerInfo();
|
||||||
|
if (powerManagerInfo.activity) {
|
||||||
|
// 2. ask your users to adjust their settings
|
||||||
|
Alert.alert(
|
||||||
|
'Restrictions Detected',
|
||||||
|
'To ensure notifications are delivered, please adjust your settings to prevent the app from being killed',
|
||||||
|
[
|
||||||
|
// 3. launch intent to navigate the user to the appropriate screen
|
||||||
|
{
|
||||||
|
text: 'OK, open settings',
|
||||||
|
onPress: notifee.openPowerManagerSettings
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: 'Cancel',
|
||||||
|
onPress: () => {
|
||||||
|
// TODO: handle cancel
|
||||||
|
},
|
||||||
|
style: 'cancel'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
{ cancelable: false }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const batteryOptimizationEnabled = await notifee.isBatteryOptimizationEnabled();
|
||||||
|
if (batteryOptimizationEnabled) {
|
||||||
|
// 2. ask your users to disable the feature
|
||||||
|
Alert.alert(
|
||||||
|
'Restrictions Detected',
|
||||||
|
'To ensure notifications are delivered, please disable battery optimization for the app.',
|
||||||
|
[
|
||||||
|
// 3. launch intent to navigate the user to the appropriate screen
|
||||||
|
{
|
||||||
|
text: 'OK, open settings',
|
||||||
|
onPress: notifee.openBatteryOptimizationSettings
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: 'Cancel',
|
||||||
|
onPress: () => {
|
||||||
|
// TODO: handle cancel
|
||||||
|
},
|
||||||
|
style: 'cancel'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
{ cancelable: false }
|
||||||
|
);
|
||||||
|
|
||||||
|
await notifee.createChannel({
|
||||||
|
id: 'call',
|
||||||
|
name: 'Video Call',
|
||||||
|
lights: true,
|
||||||
|
vibration: true,
|
||||||
|
importance: AndroidImportance.HIGH,
|
||||||
|
vibrationPattern: [300, 500]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
notifee.registerForegroundService(
|
||||||
|
notification =>
|
||||||
|
new Promise(() => {
|
||||||
|
console.log('registerForegroundService', notification);
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
notifee.onBackgroundEvent(async event => {
|
||||||
|
console.log('onBackgroundEvent', event);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const setBackgroundNotificationHandler = async (): Promise<void> => {
|
||||||
|
messaging().setBackgroundMessageHandler(async (notification: INotification) => {
|
||||||
|
console.log('backgroundMessageHandler', notification);
|
||||||
|
await notifee.displayNotification({
|
||||||
|
title: '(21) 1234-1234',
|
||||||
|
body: 'Incoming call',
|
||||||
|
android: {
|
||||||
|
channelId: 'call',
|
||||||
|
category: AndroidCategory.CALL,
|
||||||
|
visibility: AndroidVisibility.PUBLIC,
|
||||||
|
importance: AndroidImportance.HIGH,
|
||||||
|
smallIcon: 'ic_launcher',
|
||||||
|
timestamp: Date.now(),
|
||||||
|
showTimestamp: true,
|
||||||
|
pressAction: {
|
||||||
|
id: 'default',
|
||||||
|
launchActivity: 'chat.rocket.reactnative.CustomCallActivity'
|
||||||
|
},
|
||||||
|
actions: [
|
||||||
|
{
|
||||||
|
title: 'Accept',
|
||||||
|
pressAction: {
|
||||||
|
id: 'accept',
|
||||||
|
launchActivity: 'default'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Decline',
|
||||||
|
pressAction: {
|
||||||
|
id: 'reject'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
fullScreenAction: {
|
||||||
|
id: 'default',
|
||||||
|
launchActivity: 'chat.rocket.reactnative.CustomCallActivity'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
setBackgroundNotificationHandler();
|
8
index.js
8
index.js
|
@ -2,7 +2,8 @@ import 'react-native-gesture-handler';
|
||||||
import 'react-native-console-time-polyfill';
|
import 'react-native-console-time-polyfill';
|
||||||
import { AppRegistry } from 'react-native';
|
import { AppRegistry } from 'react-native';
|
||||||
|
|
||||||
import { name as appName, share as shareName } from './app.json';
|
import { name as appName, share as shareName, call as callName } from './app.json';
|
||||||
|
import { isFDroidBuild } from './app/lib/constants/environment';
|
||||||
|
|
||||||
if (__DEV__) {
|
if (__DEV__) {
|
||||||
require('./app/ReactotronConfig');
|
require('./app/ReactotronConfig');
|
||||||
|
@ -18,8 +19,13 @@ if (__DEV__) {
|
||||||
console.info = () => {};
|
console.info = () => {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!isFDroidBuild) {
|
||||||
|
require('./app/lib/notifications/backgroundNotificationHandler');
|
||||||
|
}
|
||||||
|
|
||||||
AppRegistry.registerComponent(appName, () => require('./app/index').default);
|
AppRegistry.registerComponent(appName, () => require('./app/index').default);
|
||||||
AppRegistry.registerComponent(shareName, () => require('./app/share').default);
|
AppRegistry.registerComponent(shareName, () => require('./app/share').default);
|
||||||
|
AppRegistry.registerComponent(callName, () => require('./app/call').default);
|
||||||
|
|
||||||
// For storybook, comment everything above and uncomment below
|
// For storybook, comment everything above and uncomment below
|
||||||
// import 'react-native-gesture-handler';
|
// import 'react-native-gesture-handler';
|
||||||
|
|
Loading…
Reference in New Issue