alqindiirsyam 2 år sedan
förälder
incheckning
7c9eaa058e

+ 3 - 6
appbuilder-ios/AppBuilder/AppBuilder/Base.lproj/LaunchScreen.storyboard

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
     <device id="retina6_1" orientation="portrait" appearance="light"/>
     <dependencies>
         <deployment identifier="iOS"/>
@@ -9,10 +9,10 @@
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <scenes>
-        <!--Launch Screen View Controller-->
+        <!--View Controller-->
         <scene sceneID="EHf-IW-A2E">
             <objects>
-                <viewController id="01J-lp-oVM" customClass="LaunchScreenViewController" customModule="DigiNetS" customModuleProvider="target" sceneMemberID="viewController">
+                <viewController id="01J-lp-oVM" sceneMemberID="viewController">
                     <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
                         <rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
                         <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
@@ -33,9 +33,6 @@
                             <constraint firstItem="Dki-8X-fvw" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="ZXk-uU-Old"/>
                         </constraints>
                     </view>
-                    <connections>
-                        <outlet property="imageSS" destination="Dki-8X-fvw" id="Jzm-I3-1cF"/>
-                    </connections>
                 </viewController>
                 <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
             </objects>

+ 1 - 1
appbuilder-ios/AppBuilder/AppBuilder/ViewController.swift

@@ -154,7 +154,7 @@ class ViewController: UITabBarController, UITabBarControllerDelegate {
         }
         let numberOfItems = CGFloat(tabBar.items!.count)
         let tabBarItemSize = CGSize(width: tabBar.frame.width / numberOfItems, height: 65)
-        tabBar.selectionIndicatorImage = UIImage.imageWithColor(color: UIColor.grayColor, size: tabBarItemSize).resizableImage(withCapInsets: .zero)
+        tabBar.selectionIndicatorImage = UIImage.imageWithColor(color: UIColor.black.withAlphaComponent(0.2), size: tabBarItemSize).resizableImage(withCapInsets: .zero)
         if Bundle.main.displayName == "DigiNetS" {
             tabBar.selectionIndicatorImage = UIImage.imageWithColor(color: UIColor.gray, size: tabBarItemSize).resizableImage(withCapInsets: .zero)
         }

+ 16 - 40
appbuilder-ios/NexilisLite/NexilisLite/Resource/Palio.storyboard

@@ -2422,18 +2422,8 @@
                                     <stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="UMZ-Cg-DEH">
                                         <rect key="frame" x="0.0" y="0.0" width="414" height="60"/>
                                         <subviews>
-                                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="sb2-IY-k5H">
-                                                <rect key="frame" x="0.0" y="0.0" width="83" height="60"/>
-                                                <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-                                                <color key="tintColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-                                                <inset key="contentEdgeInsets" minX="10" minY="0.0" maxX="0.0" maxY="0.0"/>
-                                                <state key="normal" image="Voice-Record"/>
-                                                <connections>
-                                                    <action selector="voiceTapped:" destination="SpT-ab-6yu" eventType="touchUpInside" id="8Wi-ZU-CoM"/>
-                                                </connections>
-                                            </button>
                                             <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="A4V-Nn-duA">
-                                                <rect key="frame" x="83" y="0.0" width="82.5" height="60"/>
+                                                <rect key="frame" x="0.0" y="0.0" width="103.5" height="60"/>
                                                 <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                                 <color key="tintColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                                 <inset key="contentEdgeInsets" minX="10" minY="0.0" maxX="0.0" maxY="0.0"/>
@@ -2443,7 +2433,7 @@
                                                 </connections>
                                             </button>
                                             <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="3ef-CD-2Pj">
-                                                <rect key="frame" x="165.5" y="0.0" width="83" height="60"/>
+                                                <rect key="frame" x="103.5" y="0.0" width="103.5" height="60"/>
                                                 <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                                 <color key="tintColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                                 <inset key="contentEdgeInsets" minX="10" minY="0.0" maxX="0.0" maxY="0.0"/>
@@ -2453,7 +2443,7 @@
                                                 </connections>
                                             </button>
                                             <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Y6s-g6-F6l">
-                                                <rect key="frame" x="248.5" y="0.0" width="82.5" height="60"/>
+                                                <rect key="frame" x="207" y="0.0" width="103.5" height="60"/>
                                                 <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                                 <color key="tintColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                                 <inset key="contentEdgeInsets" minX="10" minY="0.0" maxX="0.0" maxY="0.0"/>
@@ -2463,7 +2453,7 @@
                                                 </connections>
                                             </button>
                                             <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="2e8-Dd-Gfc">
-                                                <rect key="frame" x="331" y="0.0" width="83" height="60"/>
+                                                <rect key="frame" x="310.5" y="0.0" width="103.5" height="60"/>
                                                 <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                                 <color key="tintColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                                 <inset key="contentEdgeInsets" minX="10" minY="0.0" maxX="0.0" maxY="0.0"/>
@@ -2475,14 +2465,13 @@
                                         </subviews>
                                         <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
                                         <constraints>
-                                            <constraint firstItem="Y6s-g6-F6l" firstAttribute="width" secondItem="UMZ-Cg-DEH" secondAttribute="width" multiplier="0.2" id="7m9-oZ-EYC"/>
+                                            <constraint firstItem="Y6s-g6-F6l" firstAttribute="width" secondItem="UMZ-Cg-DEH" secondAttribute="width" multiplier="0.25" id="7m9-oZ-EYC"/>
                                             <constraint firstItem="A4V-Nn-duA" firstAttribute="height" secondItem="UMZ-Cg-DEH" secondAttribute="height" id="7uj-aT-7Z0"/>
-                                            <constraint firstItem="sb2-IY-k5H" firstAttribute="height" secondItem="UMZ-Cg-DEH" secondAttribute="height" id="OlU-cX-NO7"/>
-                                            <constraint firstItem="2e8-Dd-Gfc" firstAttribute="width" secondItem="UMZ-Cg-DEH" secondAttribute="width" multiplier="0.2" id="Peh-tl-gae"/>
+                                            <constraint firstItem="2e8-Dd-Gfc" firstAttribute="width" secondItem="UMZ-Cg-DEH" secondAttribute="width" multiplier="0.25" id="Peh-tl-gae"/>
                                             <constraint firstItem="Y6s-g6-F6l" firstAttribute="height" secondItem="UMZ-Cg-DEH" secondAttribute="height" id="a7H-DL-o5y"/>
                                             <constraint firstItem="2e8-Dd-Gfc" firstAttribute="height" secondItem="UMZ-Cg-DEH" secondAttribute="height" id="grl-bn-TV7"/>
-                                            <constraint firstItem="3ef-CD-2Pj" firstAttribute="width" secondItem="UMZ-Cg-DEH" secondAttribute="width" multiplier="0.2" id="mfH-cV-ZZb"/>
-                                            <constraint firstItem="A4V-Nn-duA" firstAttribute="width" secondItem="UMZ-Cg-DEH" secondAttribute="width" multiplier="0.2" id="pkY-Fb-m9A"/>
+                                            <constraint firstItem="3ef-CD-2Pj" firstAttribute="width" secondItem="UMZ-Cg-DEH" secondAttribute="width" multiplier="0.25" id="mfH-cV-ZZb"/>
+                                            <constraint firstItem="A4V-Nn-duA" firstAttribute="width" secondItem="UMZ-Cg-DEH" secondAttribute="width" multiplier="0.25" id="pkY-Fb-m9A"/>
                                             <constraint firstItem="3ef-CD-2Pj" firstAttribute="height" secondItem="UMZ-Cg-DEH" secondAttribute="height" id="zWv-GU-SnR"/>
                                         </constraints>
                                     </stackView>
@@ -2572,7 +2561,6 @@
                         <outlet property="buttonSendImage" destination="A4V-Nn-duA" id="aFJ-JY-0Wp"/>
                         <outlet property="buttonSendPhoto" destination="3ef-CD-2Pj" id="fzG-Y0-H3l"/>
                         <outlet property="buttonSendSticker" destination="Y6s-g6-F6l" id="3Ar-0n-M14"/>
-                        <outlet property="buttonVoice" destination="sb2-IY-k5H" id="ImE-Qy-q3l"/>
                         <outlet property="constraintBottomAttachment" destination="tbE-PI-oI9" id="zwJ-JT-Tbq"/>
                         <outlet property="constraintLeftTextField" destination="jx0-o5-Ja0" id="1hP-FQ-qYY"/>
                         <outlet property="constraintTopTextField" destination="43A-hi-qkj" id="UCq-4N-QAW"/>
@@ -2602,17 +2590,8 @@
                                     <stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ZXb-nM-tPm">
                                         <rect key="frame" x="0.0" y="0.0" width="414" height="60"/>
                                         <subviews>
-                                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="jVF-uB-GzC">
-                                                <rect key="frame" x="0.0" y="0.0" width="83" height="60"/>
-                                                <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-                                                <color key="tintColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-                                                <state key="normal" image="Voice-Record"/>
-                                                <connections>
-                                                    <action selector="voiceTapped:" destination="POO-bE-px4" eventType="touchUpInside" id="ULF-WN-VOI"/>
-                                                </connections>
-                                            </button>
                                             <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="f7n-Wy-Asx">
-                                                <rect key="frame" x="83" y="0.0" width="82.5" height="60"/>
+                                                <rect key="frame" x="0.0" y="0.0" width="103.5" height="60"/>
                                                 <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                                 <color key="tintColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                                 <state key="normal" image="Send-Image"/>
@@ -2621,7 +2600,7 @@
                                                 </connections>
                                             </button>
                                             <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="acF-7N-m3T">
-                                                <rect key="frame" x="165.5" y="0.0" width="83" height="60"/>
+                                                <rect key="frame" x="103.5" y="0.0" width="103.5" height="60"/>
                                                 <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                                 <color key="tintColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                                 <state key="normal" image="Camera"/>
@@ -2630,7 +2609,7 @@
                                                 </connections>
                                             </button>
                                             <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="w8i-CY-6go">
-                                                <rect key="frame" x="248.5" y="0.0" width="82.5" height="60"/>
+                                                <rect key="frame" x="207" y="0.0" width="103.5" height="60"/>
                                                 <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                                 <color key="tintColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                                 <state key="normal" image="Sticker---Emoji"/>
@@ -2639,7 +2618,7 @@
                                                 </connections>
                                             </button>
                                             <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="4tF-ju-a54">
-                                                <rect key="frame" x="331" y="0.0" width="83" height="60"/>
+                                                <rect key="frame" x="310.5" y="0.0" width="103.5" height="60"/>
                                                 <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                                 <color key="tintColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                                 <state key="normal" image="File---Documents"/>
@@ -2652,13 +2631,12 @@
                                         <constraints>
                                             <constraint firstItem="4tF-ju-a54" firstAttribute="height" secondItem="ZXb-nM-tPm" secondAttribute="height" id="0Y6-mG-7p5"/>
                                             <constraint firstItem="acF-7N-m3T" firstAttribute="height" secondItem="ZXb-nM-tPm" secondAttribute="height" id="2tl-at-cqF"/>
-                                            <constraint firstItem="acF-7N-m3T" firstAttribute="width" secondItem="ZXb-nM-tPm" secondAttribute="width" multiplier="0.2" id="AvA-03-WUS"/>
-                                            <constraint firstItem="4tF-ju-a54" firstAttribute="width" secondItem="ZXb-nM-tPm" secondAttribute="width" multiplier="0.2" id="Ey9-5z-5it"/>
+                                            <constraint firstItem="acF-7N-m3T" firstAttribute="width" secondItem="ZXb-nM-tPm" secondAttribute="width" multiplier="0.25" id="AvA-03-WUS"/>
+                                            <constraint firstItem="4tF-ju-a54" firstAttribute="width" secondItem="ZXb-nM-tPm" secondAttribute="width" multiplier="0.25" id="Ey9-5z-5it"/>
                                             <constraint firstItem="f7n-Wy-Asx" firstAttribute="height" secondItem="ZXb-nM-tPm" secondAttribute="height" id="F5P-54-ojg"/>
-                                            <constraint firstItem="f7n-Wy-Asx" firstAttribute="width" secondItem="ZXb-nM-tPm" secondAttribute="width" multiplier="0.2" id="Oo2-Pg-VnN"/>
-                                            <constraint firstItem="jVF-uB-GzC" firstAttribute="height" secondItem="ZXb-nM-tPm" secondAttribute="height" id="s3U-c3-eKd"/>
+                                            <constraint firstItem="f7n-Wy-Asx" firstAttribute="width" secondItem="ZXb-nM-tPm" secondAttribute="width" multiplier="0.25" id="Oo2-Pg-VnN"/>
                                             <constraint firstItem="w8i-CY-6go" firstAttribute="height" secondItem="ZXb-nM-tPm" secondAttribute="height" id="sPz-0y-T92"/>
-                                            <constraint firstItem="w8i-CY-6go" firstAttribute="width" secondItem="ZXb-nM-tPm" secondAttribute="width" multiplier="0.2" id="w2F-nO-B8s"/>
+                                            <constraint firstItem="w8i-CY-6go" firstAttribute="width" secondItem="ZXb-nM-tPm" secondAttribute="width" multiplier="0.25" id="w2F-nO-B8s"/>
                                         </constraints>
                                     </stackView>
                                 </subviews>
@@ -2746,7 +2724,6 @@
                         <outlet property="buttonSendImage" destination="f7n-Wy-Asx" id="DzS-5q-v5l"/>
                         <outlet property="buttonSendPhoto" destination="acF-7N-m3T" id="amJ-hi-fyj"/>
                         <outlet property="buttonSendSticker" destination="w8i-CY-6go" id="oZz-WV-6bq"/>
-                        <outlet property="buttonVoice" destination="jVF-uB-GzC" id="I8K-8V-vxH"/>
                         <outlet property="constraintBottomAttachment" destination="7cj-we-UtI" id="z0B-86-TwT"/>
                         <outlet property="constraintTopTextField" destination="rwD-sI-rSc" id="d82-qJ-lee"/>
                         <outlet property="constraintViewTextField" destination="bT4-KC-g5c" id="KVz-UY-FuX"/>
@@ -2924,7 +2901,6 @@
         <image name="Send-Image" width="500" height="500"/>
         <image name="Sofa" width="2048" height="1677"/>
         <image name="Sticker---Emoji" width="500" height="500"/>
-        <image name="Voice-Record" width="500" height="500"/>
         <image name="arrow.triangle.2.circlepath.camera.fill" catalog="system" width="128" height="94"/>
         <image name="eye.fill" catalog="system" width="128" height="78"/>
         <image name="gearshape.fill" catalog="system" width="128" height="121"/>

+ 3 - 0
appbuilder-ios/NexilisLite/NexilisLite/Resource/id.lproj/Localizable.strings

@@ -173,3 +173,6 @@
 "Call Center History" = "Riwayat Pusat Panggilan";
 "User" = "Pengguna";
 "Friends" = "Teman";
+"Video call is over" = "Panngilan video telah berakhir";
+"End Video Call" = "Akhiri Panggilan Video";
+"Are you sure you want to end video call?" = "Apakah anda yakin ingin mengakhiri panggilan video?";

+ 37 - 7
appbuilder-ios/NexilisLite/NexilisLite/Source/View/Call/QmeraVideoViewController.swift

@@ -71,6 +71,9 @@ class QmeraVideoViewController: UIViewController {
         stackView.spacing = 5
         return stackView
     }()
+    private var vcTimer = Timer()
+    private var containerTimerVC = UIView()
+    private var labelTimerVC = UILabel()
     
     let poweredByLabel: UILabel = {
         let label = UILabel()
@@ -105,7 +108,6 @@ class QmeraVideoViewController: UIViewController {
     }()
     
     deinit {
-        self.wbTimer.invalidate()
         navigationController?.navigationBar.setBackgroundImage(nil, for: .default)
         navigationController?.navigationBar.shadowImage = nil
         navigationController?.navigationBar.isTranslucent = false
@@ -151,6 +153,7 @@ class QmeraVideoViewController: UIViewController {
         addProfileNameCalling()
         Calling()
         addToolbar()
+        addTimerVC()
         NotificationCenter.default.addObserver(self, selector: #selector(self.onStatusCall(_:)), name: NSNotification.Name(rawValue: "onStatusCall"), object: nil)
         NotificationCenter.default.addObserver(self, selector: #selector(onReceiveMessage(notification:)), name: NSNotification.Name(rawValue: "onReceiveChat"), object: nil)
         if isAutoAccept {
@@ -219,6 +222,17 @@ class QmeraVideoViewController: UIViewController {
         })
     }
     
+    func addTimerVC() {
+        view.addSubview(containerTimerVC)
+        containerTimerVC.anchor(top: view.topAnchor, paddingTop: 20, centerX: view.centerXAnchor, height: 30, minWidth: 40)
+        containerTimerVC.makeRoundedView(radius: 8)
+        containerTimerVC.backgroundColor = .black.withAlphaComponent(0.3)
+        containerTimerVC.addSubview(labelTimerVC)
+        labelTimerVC.anchor(left: containerTimerVC.leftAnchor, right: containerTimerVC.rightAnchor, paddingLeft: 8, paddingRight: 8, centerX: containerTimerVC.centerXAnchor, centerY: containerTimerVC.centerYAnchor)
+        labelTimerVC.textColor = .white
+        containerTimerVC.isHidden = true
+    }
+    
     func addZoomView() {
         view.addSubview(zoomView)
         zoomView.translatesAutoresizingMaskIntoConstraints = false
@@ -458,12 +472,19 @@ class QmeraVideoViewController: UIViewController {
             }))
             self.present(alert, animated: true, completion: nil)
         } else {
-            endAllCall()
-            if isInisiator {
-                self.navigationController?.popViewController(animated: true)
-            } else {
-                self.dismiss(animated: true, completion: nil)
-            }
+            let alert = UIAlertController(title: "End Video Call".localized(), message: "Are you sure you want to end video call?".localized(), preferredStyle: .alert)
+            alert.addAction(UIAlertAction(title: "No".localized(), style: UIAlertAction.Style.default, handler: nil))
+            alert.addAction(UIAlertAction(title: "Yes".localized(), style: UIAlertAction.Style.default, handler: {(_) in
+                self.wbTimer.invalidate()
+                self.vcTimer.invalidate()
+                self.endAllCall()
+                if self.isInisiator {
+                    self.navigationController?.popViewController(animated: true)
+                } else {
+                    self.dismiss(animated: true, completion: nil)
+                }
+            }))
+            self.present(alert, animated: true, completion: nil)
         }
     }
     
@@ -500,11 +521,18 @@ class QmeraVideoViewController: UIViewController {
                 self.view.layoutIfNeeded()
             })
             DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
+                self.containerTimerVC.isHidden = false
                 self.buttonRotate.isHidden = false
                 self.buttonAddParticipant.isHidden = false
                 self.buttonSpeaker.isHidden = false
                 self.buttonWB.isHidden = false
                 self.poweredByView.isHidden = false
+                let connectDate = Date()
+                self.vcTimer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { _ in
+                    let format = Utils.callDurationFormatter.string(from: Date().timeIntervalSince(connectDate))
+                    self.labelTimerVC.text = format
+                }
+                self.vcTimer.fire()
             }
         }
     }
@@ -1023,6 +1051,8 @@ class QmeraVideoViewController: UIViewController {
                         self.wbVC!.close?()
                     }
                     self.wbTimer.invalidate()
+                    self.vcTimer.invalidate()
+                    self.labelTimerVC.text = "Video call is over".localized()
                     _ = Nexilis.getWhiteboardDelegate()?.terminate()
                     DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
                         self.endAllCall()

+ 5 - 5
appbuilder-ios/NexilisLite/NexilisLite/Source/View/Chat/EditorGroup.swift

@@ -91,11 +91,11 @@ public class EditorGroup: UIViewController {
         viewButton.layer.shadowOffset = .zero
         viewButton.layer.shadowRadius = 3
         
-        buttonVoice.setImage(resizeImage(image: UIImage(named: "Voice-Record", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, targetSize: CGSize(width: 30, height: 30)), for: .normal)
-        buttonSendImage.setImage(resizeImage(image: UIImage(named: "Send-Image", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, targetSize: CGSize(width: 30, height: 30)), for: .normal)
-        buttonSendPhoto.setImage(resizeImage(image: UIImage(named: "Camera", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, targetSize: CGSize(width: 30, height: 30)), for: .normal)
-        buttonSendSticker.setImage(resizeImage(image: UIImage(named: "Sticker---Emoji", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, targetSize: CGSize(width: 30, height: 30)), for: .normal)
-        buttonSendFile.setImage(resizeImage(image: UIImage(named: "File---Documents", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, targetSize: CGSize(width: 30, height: 30)), for: .normal)
+//        buttonVoice.setImage(resizeImage(image: UIImage(named: "Voice-Record", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, targetSize: CGSize(width: 30, height: 30)), for: .normal)
+        buttonSendImage.setImage(resizeImage(image: UIImage(named: "Send-Image", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, targetSize: CGSize(width: 30, height: 30)).withTintColor(.red), for: .normal)
+        buttonSendPhoto.setImage(resizeImage(image: UIImage(named: "Camera", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, targetSize: CGSize(width: 30, height: 30)).withTintColor(.red), for: .normal)
+        buttonSendSticker.setImage(resizeImage(image: UIImage(named: "Sticker---Emoji", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, targetSize: CGSize(width: 30, height: 30)).withTintColor(.red), for: .normal)
+        buttonSendFile.setImage(resizeImage(image: UIImage(named: "File---Documents", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, targetSize: CGSize(width: 30, height: 30)).withTintColor(.red), for: .normal)
         
         buttonSendChat.setImage(resizeImage(image: UIImage(named: "Send-(White)", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, targetSize: CGSize(width: 30, height: 30)).withRenderingMode(.alwaysOriginal), for: .normal)
         

+ 5 - 5
appbuilder-ios/NexilisLite/NexilisLite/Source/View/Chat/EditorPersonal.swift

@@ -109,11 +109,11 @@ public class EditorPersonal: UIViewController, ImageVideoPickerDelegate, UIGestu
         viewButton.layer.shadowOffset = .zero
         viewButton.layer.shadowRadius = 3
         
-        buttonVoice.setImage(resizeImage(image: UIImage(named: "Voice-Record", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, targetSize: CGSize(width: 30, height: 30)), for: .normal)
-        buttonSendImage.setImage(resizeImage(image: UIImage(named: "Send-Image", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, targetSize: CGSize(width: 30, height: 30)), for: .normal)
-        buttonSendPhoto.setImage(resizeImage(image: UIImage(named: "Camera", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, targetSize: CGSize(width: 30, height: 30)), for: .normal)
-        buttonSendSticker.setImage(resizeImage(image: UIImage(named: "Sticker---Emoji", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, targetSize: CGSize(width: 30, height: 30)), for: .normal)
-        buttonSendFile.setImage(resizeImage(image: UIImage(named: "File---Documents", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, targetSize: CGSize(width: 30, height: 30)), for: .normal)
+//        buttonVoice.setImage(resizeImage(image: UIImage(named: "Voice-Record", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, targetSize: CGSize(width: 30, height: 30)), for: .normal)
+        buttonSendImage.setImage(resizeImage(image: UIImage(named: "Send-Image", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, targetSize: CGSize(width: 30, height: 30)).withTintColor(.red), for: .normal)
+        buttonSendPhoto.setImage(resizeImage(image: UIImage(named: "Camera", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, targetSize: CGSize(width: 30, height: 30)).withTintColor(.red), for: .normal)
+        buttonSendSticker.setImage(resizeImage(image: UIImage(named: "Sticker---Emoji", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, targetSize: CGSize(width: 30, height: 30)).withTintColor(.red), for: .normal)
+        buttonSendFile.setImage(resizeImage(image: UIImage(named: "File---Documents", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, targetSize: CGSize(width: 30, height: 30)).withTintColor(.red), for: .normal)
         
         buttonSendChat.setImage(resizeImage(image: UIImage(named: "Send-(White)", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, targetSize: CGSize(width: 30, height: 30)).withRenderingMode(.alwaysOriginal), for: .normal)
         

+ 6 - 6
src/mainIOS.py

@@ -11,15 +11,15 @@ from zipfile import ZipFile
 ImageFile.SAFEBLOCK = 2048 * 2048
 
 app = Flask(__name__)
-app.base_project = "/Users/easysoft/Documents/AppBuilder/appbuilder-ios/AppBuilder"
-app.nexilis_lite = "/Users/easysoft/Documents/AppBuilder/appbuilder-ios/NexilisLite"
-app.temp_folder = "/Users/easysoft/Documents/BuildIos"
-app.app_folder = "/Users/easysoft/Documents"
-app.asset_folder = "/Users/easysoft/Documents/BuildIosAssets"
+app.base_project = "/Users/qindi/Documents/AppBuilder/appbuilder-ios/AppBuilder"
+app.nexilis_lite = "/Users/qindi/Documents/AppBuilder/appbuilder-ios/NexilisLite"
+app.temp_folder = "/Users/qindi/Documents/BuildIos"
+app.app_folder = "/Users/qindi/Documents"
+app.asset_folder = "/Users/qindi/Documents/BuildIosAssets"
 app.verbose = True
 app.ssl = None
 app.keytool = '/usr/bin/keytool'
-app.username = "easysoft"
+app.username = "qindi"
 # app.ios_platform_ids = ["bb8f256703e8fbe84da414cee20cb4d0eca3388d"]
 app.ios_platform_ids = []
 app.app_name = "AppBuilder"