Compare commits
	
		
			3 Commits
		
	
	
		
			456bac67f2
			...
			85e5e5f144
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 85e5e5f144 | |||
| bece579f9d | |||
| 8271852867 | 
@@ -1,7 +1,17 @@
 | 
				
			|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
 | 
					<manifest xmlns:android="http://schemas.android.com/apk/res/android">
 | 
				
			||||||
 | 
					    <uses-feature android:name="android.hardware.camera" />
 | 
				
			||||||
 | 
					    <uses-feature android:name="android.hardware.camera.autofocus" />
 | 
				
			||||||
    <uses-permission android:name="android.permission.WAKE_LOCK" />
 | 
					    <uses-permission android:name="android.permission.WAKE_LOCK" />
 | 
				
			||||||
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
 | 
					    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
 | 
				
			||||||
    <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
 | 
					    <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
 | 
				
			||||||
 | 
					    <uses-permission android:name="android.permission.CAMERA" />
 | 
				
			||||||
 | 
					    <uses-permission android:name="android.permission.RECORD_AUDIO" />
 | 
				
			||||||
 | 
					    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 | 
				
			||||||
 | 
					    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
 | 
				
			||||||
 | 
					    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
 | 
				
			||||||
 | 
					    <uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
 | 
				
			||||||
 | 
					    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
 | 
				
			||||||
 | 
					    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <application
 | 
					    <application
 | 
				
			||||||
        android:label="Solian"
 | 
					        android:label="Solian"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -510,6 +510,7 @@
 | 
				
			|||||||
				BUNDLE_LOADER = "$(TEST_HOST)";
 | 
									BUNDLE_LOADER = "$(TEST_HOST)";
 | 
				
			||||||
				CODE_SIGN_STYLE = Automatic;
 | 
									CODE_SIGN_STYLE = Automatic;
 | 
				
			||||||
				CURRENT_PROJECT_VERSION = 1;
 | 
									CURRENT_PROJECT_VERSION = 1;
 | 
				
			||||||
 | 
									DEVELOPMENT_TEAM = W7HPZ53V6B;
 | 
				
			||||||
				GENERATE_INFOPLIST_FILE = YES;
 | 
									GENERATE_INFOPLIST_FILE = YES;
 | 
				
			||||||
				MARKETING_VERSION = 1.0;
 | 
									MARKETING_VERSION = 1.0;
 | 
				
			||||||
				PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian.RunnerTests;
 | 
									PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian.RunnerTests;
 | 
				
			||||||
@@ -528,6 +529,7 @@
 | 
				
			|||||||
				BUNDLE_LOADER = "$(TEST_HOST)";
 | 
									BUNDLE_LOADER = "$(TEST_HOST)";
 | 
				
			||||||
				CODE_SIGN_STYLE = Automatic;
 | 
									CODE_SIGN_STYLE = Automatic;
 | 
				
			||||||
				CURRENT_PROJECT_VERSION = 1;
 | 
									CURRENT_PROJECT_VERSION = 1;
 | 
				
			||||||
 | 
									DEVELOPMENT_TEAM = W7HPZ53V6B;
 | 
				
			||||||
				GENERATE_INFOPLIST_FILE = YES;
 | 
									GENERATE_INFOPLIST_FILE = YES;
 | 
				
			||||||
				MARKETING_VERSION = 1.0;
 | 
									MARKETING_VERSION = 1.0;
 | 
				
			||||||
				PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian.RunnerTests;
 | 
									PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian.RunnerTests;
 | 
				
			||||||
@@ -544,6 +546,7 @@
 | 
				
			|||||||
				BUNDLE_LOADER = "$(TEST_HOST)";
 | 
									BUNDLE_LOADER = "$(TEST_HOST)";
 | 
				
			||||||
				CODE_SIGN_STYLE = Automatic;
 | 
									CODE_SIGN_STYLE = Automatic;
 | 
				
			||||||
				CURRENT_PROJECT_VERSION = 1;
 | 
									CURRENT_PROJECT_VERSION = 1;
 | 
				
			||||||
 | 
									DEVELOPMENT_TEAM = W7HPZ53V6B;
 | 
				
			||||||
				GENERATE_INFOPLIST_FILE = YES;
 | 
									GENERATE_INFOPLIST_FILE = YES;
 | 
				
			||||||
				MARKETING_VERSION = 1.0;
 | 
									MARKETING_VERSION = 1.0;
 | 
				
			||||||
				PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian.RunnerTests;
 | 
									PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian.RunnerTests;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,10 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
 | 
					<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
 | 
				
			||||||
 | 
					    <device id="retina6_12" orientation="portrait" appearance="light"/>
 | 
				
			||||||
    <dependencies>
 | 
					    <dependencies>
 | 
				
			||||||
        <deployment identifier="iOS"/>
 | 
					        <deployment identifier="iOS"/>
 | 
				
			||||||
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
 | 
					        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/>
 | 
				
			||||||
 | 
					        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
 | 
				
			||||||
    </dependencies>
 | 
					    </dependencies>
 | 
				
			||||||
    <scenes>
 | 
					    <scenes>
 | 
				
			||||||
        <!--Flutter View Controller-->
 | 
					        <!--Flutter View Controller-->
 | 
				
			||||||
@@ -14,13 +16,14 @@
 | 
				
			|||||||
                        <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
 | 
					                        <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
 | 
				
			||||||
                    </layoutGuides>
 | 
					                    </layoutGuides>
 | 
				
			||||||
                    <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
 | 
					                    <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
 | 
				
			||||||
                        <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
 | 
					                        <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
 | 
				
			||||||
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
 | 
					                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
 | 
				
			||||||
                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
 | 
					                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
 | 
				
			||||||
                    </view>
 | 
					                    </view>
 | 
				
			||||||
                </viewController>
 | 
					                </viewController>
 | 
				
			||||||
                <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
 | 
					                <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
 | 
				
			||||||
            </objects>
 | 
					            </objects>
 | 
				
			||||||
 | 
					            <point key="canvasLocation" x="-16" y="-40"/>
 | 
				
			||||||
        </scene>
 | 
					        </scene>
 | 
				
			||||||
    </scenes>
 | 
					    </scenes>
 | 
				
			||||||
</document>
 | 
					</document>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,8 +2,6 @@
 | 
				
			|||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 | 
					<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 | 
				
			||||||
<plist version="1.0">
 | 
					<plist version="1.0">
 | 
				
			||||||
<dict>
 | 
					<dict>
 | 
				
			||||||
	<key>ITSAppUsesNonExemptEncryption</key>
 | 
					 | 
				
			||||||
	<false/>
 | 
					 | 
				
			||||||
	<key>CADisableMinimumFrameDurationOnPhone</key>
 | 
						<key>CADisableMinimumFrameDurationOnPhone</key>
 | 
				
			||||||
	<true/>
 | 
						<true/>
 | 
				
			||||||
	<key>CFBundleDevelopmentRegion</key>
 | 
						<key>CFBundleDevelopmentRegion</key>
 | 
				
			||||||
@@ -26,6 +24,8 @@
 | 
				
			|||||||
	<string>????</string>
 | 
						<string>????</string>
 | 
				
			||||||
	<key>CFBundleVersion</key>
 | 
						<key>CFBundleVersion</key>
 | 
				
			||||||
	<string>$(FLUTTER_BUILD_NUMBER)</string>
 | 
						<string>$(FLUTTER_BUILD_NUMBER)</string>
 | 
				
			||||||
 | 
						<key>ITSAppUsesNonExemptEncryption</key>
 | 
				
			||||||
 | 
						<false/>
 | 
				
			||||||
	<key>LSRequiresIPhoneOS</key>
 | 
						<key>LSRequiresIPhoneOS</key>
 | 
				
			||||||
	<true/>
 | 
						<true/>
 | 
				
			||||||
	<key>NSCameraUsageDescription</key>
 | 
						<key>NSCameraUsageDescription</key>
 | 
				
			||||||
@@ -36,6 +36,13 @@
 | 
				
			|||||||
	<string>Allow you add photo to your message or post</string>
 | 
						<string>Allow you add photo to your message or post</string>
 | 
				
			||||||
	<key>UIApplicationSupportsIndirectInputEvents</key>
 | 
						<key>UIApplicationSupportsIndirectInputEvents</key>
 | 
				
			||||||
	<true/>
 | 
						<true/>
 | 
				
			||||||
 | 
						<key>UIBackgroundModes</key>
 | 
				
			||||||
 | 
						<array>
 | 
				
			||||||
 | 
							<string>audio</string>
 | 
				
			||||||
 | 
							<string>fetch</string>
 | 
				
			||||||
 | 
							<string>remote-notification</string>
 | 
				
			||||||
 | 
							<string>voip</string>
 | 
				
			||||||
 | 
						</array>
 | 
				
			||||||
	<key>UILaunchStoryboardName</key>
 | 
						<key>UILaunchStoryboardName</key>
 | 
				
			||||||
	<string>LaunchScreen</string>
 | 
						<string>LaunchScreen</string>
 | 
				
			||||||
	<key>UIMainStoryboardFile</key>
 | 
						<key>UIMainStoryboardFile</key>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,3 +1,4 @@
 | 
				
			|||||||
 | 
					import 'dart:async';
 | 
				
			||||||
import 'dart:math' as math;
 | 
					import 'dart:math' as math;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import 'package:flutter/material.dart';
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
@@ -5,6 +6,7 @@ import 'package:get/get.dart';
 | 
				
			|||||||
import 'package:solian/providers/content/call.dart';
 | 
					import 'package:solian/providers/content/call.dart';
 | 
				
			||||||
import 'package:solian/widgets/chat/call/call_controls.dart';
 | 
					import 'package:solian/widgets/chat/call/call_controls.dart';
 | 
				
			||||||
import 'package:solian/widgets/chat/call/call_participant.dart';
 | 
					import 'package:solian/widgets/chat/call/call_participant.dart';
 | 
				
			||||||
 | 
					import 'package:solian/widgets/prev_page.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class CallScreen extends StatefulWidget {
 | 
					class CallScreen extends StatefulWidget {
 | 
				
			||||||
  const CallScreen({super.key});
 | 
					  const CallScreen({super.key});
 | 
				
			||||||
@@ -14,6 +16,24 @@ class CallScreen extends StatefulWidget {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class _CallScreenState extends State<CallScreen> {
 | 
					class _CallScreenState extends State<CallScreen> {
 | 
				
			||||||
 | 
					  String parseDuration() {
 | 
				
			||||||
 | 
					    final ChatCallProvider provider = Get.find();
 | 
				
			||||||
 | 
					    if (provider.current.value == null) return '00:00:00';
 | 
				
			||||||
 | 
					    Duration duration =
 | 
				
			||||||
 | 
					        DateTime.now().difference(provider.current.value!.createdAt);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    String twoDigits(int n) => n.toString().padLeft(2, '0');
 | 
				
			||||||
 | 
					    String formattedTime = "${twoDigits(duration.inHours)}:"
 | 
				
			||||||
 | 
					        "${twoDigits(duration.inMinutes.remainder(60))}:"
 | 
				
			||||||
 | 
					        "${twoDigits(duration.inSeconds.remainder(60))}";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Timer.periodic(const Duration(seconds: 1), (_) {
 | 
				
			||||||
 | 
					      setState(() {});
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return formattedTime;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @override
 | 
					  @override
 | 
				
			||||||
  void initState() {
 | 
					  void initState() {
 | 
				
			||||||
    Get.find<ChatCallProvider>().setupRoom();
 | 
					    Get.find<ChatCallProvider>().setupRoom();
 | 
				
			||||||
@@ -26,8 +46,25 @@ class _CallScreenState extends State<CallScreen> {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return Material(
 | 
					    return Material(
 | 
				
			||||||
      color: Theme.of(context).colorScheme.surface,
 | 
					      color: Theme.of(context).colorScheme.surface,
 | 
				
			||||||
      child: SafeArea(
 | 
					      child: Scaffold(
 | 
				
			||||||
        top: false,
 | 
					        appBar: AppBar(
 | 
				
			||||||
 | 
					          title: RichText(
 | 
				
			||||||
 | 
					            textAlign: TextAlign.center,
 | 
				
			||||||
 | 
					            text: TextSpan(children: [
 | 
				
			||||||
 | 
					              TextSpan(
 | 
				
			||||||
 | 
					                text: 'call'.tr,
 | 
				
			||||||
 | 
					                style: Theme.of(context).textTheme.titleLarge,
 | 
				
			||||||
 | 
					              ),
 | 
				
			||||||
 | 
					              const TextSpan(text: "\n"),
 | 
				
			||||||
 | 
					              TextSpan(
 | 
				
			||||||
 | 
					                text: parseDuration(),
 | 
				
			||||||
 | 
					                style: Theme.of(context).textTheme.bodySmall,
 | 
				
			||||||
 | 
					              ),
 | 
				
			||||||
 | 
					            ]),
 | 
				
			||||||
 | 
					          ),
 | 
				
			||||||
 | 
					          leading: const PrevPageButton(),
 | 
				
			||||||
 | 
					        ),
 | 
				
			||||||
 | 
					        body: SafeArea(
 | 
				
			||||||
          child: Obx(
 | 
					          child: Obx(
 | 
				
			||||||
            () => Stack(
 | 
					            () => Stack(
 | 
				
			||||||
              children: [
 | 
					              children: [
 | 
				
			||||||
@@ -81,7 +118,8 @@ class _CallScreenState extends State<CallScreen> {
 | 
				
			|||||||
                              participant: track,
 | 
					                              participant: track,
 | 
				
			||||||
                              onTap: () {
 | 
					                              onTap: () {
 | 
				
			||||||
                                if (track.participant.sid !=
 | 
					                                if (track.participant.sid !=
 | 
				
			||||||
                                  provider.focusTrack.value?.participant.sid) {
 | 
					                                    provider
 | 
				
			||||||
 | 
					                                        .focusTrack.value?.participant.sid) {
 | 
				
			||||||
                                  provider.changeFocusTrack(track);
 | 
					                                  provider.changeFocusTrack(track);
 | 
				
			||||||
                                }
 | 
					                                }
 | 
				
			||||||
                              },
 | 
					                              },
 | 
				
			||||||
@@ -96,6 +134,7 @@ class _CallScreenState extends State<CallScreen> {
 | 
				
			|||||||
            ),
 | 
					            ),
 | 
				
			||||||
          ),
 | 
					          ),
 | 
				
			||||||
        ),
 | 
					        ),
 | 
				
			||||||
 | 
					      ),
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -153,6 +153,7 @@ class SolianMessages extends Translations {
 | 
				
			|||||||
          'messageDeletionConfirm': 'Confirm message deletion',
 | 
					          'messageDeletionConfirm': 'Confirm message deletion',
 | 
				
			||||||
          'messageDeletionConfirmCaption':
 | 
					          'messageDeletionConfirmCaption':
 | 
				
			||||||
              'Are your sure to delete message @id? This action cannot be undone!',
 | 
					              'Are your sure to delete message @id? This action cannot be undone!',
 | 
				
			||||||
 | 
					          'call': 'Call',
 | 
				
			||||||
          'callOngoing': 'A call is ongoing...',
 | 
					          'callOngoing': 'A call is ongoing...',
 | 
				
			||||||
          'callJoin': 'Join',
 | 
					          'callJoin': 'Join',
 | 
				
			||||||
          'callResume': 'Resume',
 | 
					          'callResume': 'Resume',
 | 
				
			||||||
@@ -322,6 +323,7 @@ class SolianMessages extends Translations {
 | 
				
			|||||||
          'messageActionList': '消息的操作',
 | 
					          'messageActionList': '消息的操作',
 | 
				
			||||||
          'messageDeletionConfirm': '确认删除消息',
 | 
					          'messageDeletionConfirm': '确认删除消息',
 | 
				
			||||||
          'messageDeletionConfirmCaption': '你确定要删除消息 @id 吗?该操作不可撤销。',
 | 
					          'messageDeletionConfirmCaption': '你确定要删除消息 @id 吗?该操作不可撤销。',
 | 
				
			||||||
 | 
					          'call': '通话',
 | 
				
			||||||
          'callOngoing': '一则通话正在进行中…',
 | 
					          'callOngoing': '一则通话正在进行中…',
 | 
				
			||||||
          'callJoin': '加入',
 | 
					          'callJoin': '加入',
 | 
				
			||||||
          'callResume': '恢复',
 | 
					          'callResume': '恢复',
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -91,6 +91,7 @@ class _AttachmentListState extends State<AttachmentList> {
 | 
				
			|||||||
  @override
 | 
					  @override
 | 
				
			||||||
  void initState() {
 | 
					  void initState() {
 | 
				
			||||||
    super.initState();
 | 
					    super.initState();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    getMetadataList();
 | 
					    getMetadataList();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user