From 5fe6f9aeb8ab6e073c05352e66b2a6fe99ef71ac Mon Sep 17 00:00:00 2001
From: Ghazi Triki <ghazi.triki@riadvice.tn>
Date: Tue, 26 Jun 2018 19:16:02 +0100
Subject: [PATCH] Fix issues and add a progress bar for loading screensharing
 on iOS.

---
 .../screenshare/views/IOSScreenshareView.as   | 64 +++++++++++++++----
 1 file changed, 52 insertions(+), 12 deletions(-)

diff --git a/clients/flash/air-client/src/org/bigbluebutton/air/screenshare/views/IOSScreenshareView.as b/clients/flash/air-client/src/org/bigbluebutton/air/screenshare/views/IOSScreenshareView.as
index 85f7f9c7bc..a7775d65ff 100644
--- a/clients/flash/air-client/src/org/bigbluebutton/air/screenshare/views/IOSScreenshareView.as
+++ b/clients/flash/air-client/src/org/bigbluebutton/air/screenshare/views/IOSScreenshareView.as
@@ -1,9 +1,12 @@
 package org.bigbluebutton.air.screenshare.views {
 	import flash.display.DisplayObject;
+	import flash.events.TimerEvent;
+	import flash.utils.Timer;
 	
 	import mx.core.UIComponent;
 	
 	import spark.components.Image;
+	import spark.components.ProgressBar;
 	
 	import org.bigbluebutton.BBBRtmpPlayer;
 	import org.bigbluebutton.BBBRtmpPlayerEvent;
@@ -18,6 +21,16 @@ package org.bigbluebutton.air.screenshare.views {
 		
 		protected var originalVideoHeight:Number;
 		
+		private var _waitingBar : ProgressBar;
+		
+		private var _waitingTimer : Timer;
+		
+		private const WAITING_SECONDS : int = 15;
+		
+		private function waitingTimerProgressHandler(e:TimerEvent):void {
+			_waitingBar.totalProgress = (_waitingTimer.currentCount / WAITING_SECONDS) * 100;
+		}
+		
 		public function resizeForPortrait():void {
 			// if we have device where screen width less than screen height e.g. phone
 			if (width < height) {
@@ -57,14 +70,14 @@ package org.bigbluebutton.air.screenshare.views {
 		
 		public function startStream(uri:String, streamName:String, imgWidth:Number, imgHeight:Number, meetingId:String, authToken:String, externalUserId:String):void {
 			
+			showProgressBar();
+			
 			if (player) {
 				close();
 			}
 			
 			videoComp = new Image();
-			if (numChildren == 0) {
-				addChild(videoComp);
-			}
+			addChild(videoComp);
 			
 			this.originalVideoWidth = imgWidth;
 			this.originalVideoHeight = imgHeight;
@@ -81,8 +94,31 @@ package org.bigbluebutton.air.screenshare.views {
 			player.play();
 		}
 		
+		private function showProgressBar() : void {
+			_waitingBar = new ProgressBar();
+			_waitingBar.totalProgress = 0;
+			_waitingBar.percentWidth = 80;
+			_waitingBar.height = 40;
+			_waitingBar.bottom = 20;
+			_waitingBar.horizontalCenter = 0;
+			_waitingBar.verticalCenter = 0;
+			_waitingBar.styleName = "micLevelProgressBar";
+			
+			addChild(_waitingBar);
+			
+			_waitingTimer = new Timer(1000, WAITING_SECONDS);
+			_waitingTimer.addEventListener(TimerEvent.TIMER, waitingTimerProgressHandler);
+			_waitingTimer.start();
+		}
+		
 		private function onConnected(e:BBBRtmpPlayerEvent):void {
-			image.source = player.getBmpData();
+			trace("EVENT: " + e.type + " MESSAGE: " + e.getMessage());
+			if (_waitingBar && _waitingBar.parent == this) {
+				removeChild(_waitingBar);
+			}
+			if (image) {
+				image.source = player.getBmpData();
+			}
 		}
 		
 		private function onConnecting(e:BBBRtmpPlayerEvent):void {
@@ -90,23 +126,27 @@ package org.bigbluebutton.air.screenshare.views {
 		}
 		
 		private function onConnectionFailed(e:BBBRtmpPlayerEvent):void {
+			trace("EVENT: " + e.type + " MESSAGE: " + e.getMessage());
 			close();
 		}
 		
 		private function onDisconnected(e:BBBRtmpPlayerEvent):void {
+			trace("EVENT: " + e.type + " MESSAGE: " + e.getMessage());
 			close();
 		}
 		
 		public function close():void {
-			player.addEventListener(BBBRtmpPlayerEvent.CONNECTED, onConnected);
-			player.addEventListener(BBBRtmpPlayerEvent.CONNECTING, onConnecting);
-			player.removeEventListener(BBBRtmpPlayerEvent.CONNECTION_FAILED, onConnectionFailed);
-			player.removeEventListener(BBBRtmpPlayerEvent.DISCONNECTED, onDisconnected);
-			if (getChildAt(0) == image) {
-				removeChild(image);
+			if (player) {
+				player.addEventListener(BBBRtmpPlayerEvent.CONNECTED, onConnected);
+				player.addEventListener(BBBRtmpPlayerEvent.CONNECTING, onConnecting);
+				player.removeEventListener(BBBRtmpPlayerEvent.CONNECTION_FAILED, onConnectionFailed);
+				player.removeEventListener(BBBRtmpPlayerEvent.DISCONNECTED, onDisconnected);
+				if (image && image.parent == this) {
+					removeChild(image);
+				}
+				videoComp = null;
+				player = null;	
 			}
-			videoComp = null;
-			player = null;
 		}
 		
 		override protected function updateDisplayList(w:Number, h:Number):void {
-- 
GitLab