From 838133e9e31fd55b52764b687704454dc6849af7 Mon Sep 17 00:00:00 2001
From: Ghazi Triki <ghazi.triki@riadvice.tn>
Date: Wed, 13 Jun 2018 22:51:50 +0100
Subject: [PATCH] Factorise common video code for mobile.

---
 .../air/common/views/IOSVideoView.as          | 118 +++++-------------
 .../air/common/views/VideoBaseView.as         |  65 ++++++++++
 .../air/common/views/VideoView.as             | 100 ++++-----------
 3 files changed, 119 insertions(+), 164 deletions(-)
 create mode 100644 clients/flash/air-client/src/org/bigbluebutton/air/common/views/VideoBaseView.as

diff --git a/clients/flash/air-client/src/org/bigbluebutton/air/common/views/IOSVideoView.as b/clients/flash/air-client/src/org/bigbluebutton/air/common/views/IOSVideoView.as
index d712fbc248..2aab61308a 100755
--- a/clients/flash/air-client/src/org/bigbluebutton/air/common/views/IOSVideoView.as
+++ b/clients/flash/air-client/src/org/bigbluebutton/air/common/views/IOSVideoView.as
@@ -1,31 +1,26 @@
-package org.bigbluebutton.air.common.views
-{
-	import mx.core.UIComponent;
-	
+package org.bigbluebutton.air.common.views {
 	import spark.components.Image;
 	
 	import org.bigbluebutton.BBBRtmpPlayer;
 	import org.bigbluebutton.BBBRtmpPlayerEvent;
-
-	public class IOSVideoView extends UIComponent {
-		
-		protected var _image:Image;
+	
+	public class IOSVideoView extends VideoBaseView {
 		
 		protected var player:BBBRtmpPlayer;
 		
-		protected var originalVideoWidth:Number;
-		
-		protected var originalVideoHeight:Number;
+		private function get image():Image {
+			return videoComp as Image;
+		}
 		
 		public function startStream(uri:String, streamName:String, imgWidth:Number, imgHeight:Number, meetingId:String, authToken:String, externalUserId:String):void {
 			
-			if(player) {
+			if (player) {
 				close();
 			}
-
-			_image = new Image();
-			if (numChildren == 0 ) {
-				addChild(_image);	
+			
+			videoComp = new Image();
+			if (numChildren == 0) {
+				addChild(videoComp);
 			}
 			
 			this.originalVideoWidth = imgWidth;
@@ -48,7 +43,7 @@ package org.bigbluebutton.air.common.views
 		}
 		
 		private function onNewImage(e:BBBRtmpPlayerEvent):void {
-			_image.source = player.getLastImage();
+			image.source = player.getLastImage();
 		}
 		
 		private function onConnectionFailed(e:BBBRtmpPlayerEvent):void {
@@ -56,17 +51,17 @@ package org.bigbluebutton.air.common.views
 		}
 		
 		private function onDisconnected(e:BBBRtmpPlayerEvent):void {
-			close();	
+			close();
 		}
 		
 		public function close():void {
 			player.removeEventListener(BBBRtmpPlayerEvent.NEW_IMAGE, onNewImage);
 			player.removeEventListener(BBBRtmpPlayerEvent.CONNECTION_FAILED, onConnectionFailed);
 			player.removeEventListener(BBBRtmpPlayerEvent.DISCONNECTED, onDisconnected);
-			if (getChildAt(0) == _image) {
-				removeChild(_image);
+			if (getChildAt(0) == image) {
+				removeChild(image);
 			}
-			_image = null;
+			videoComp = null;
 			player = null;
 		}
 		
@@ -78,88 +73,37 @@ package org.bigbluebutton.air.common.views
 			}
 		}
 		
-		public function resizeForPortrait():void {
-			// if we have device where screen width less than screen height e.g. phone
-			if (width < height) {
-				// make the video width full width of the screen 
-				_image.width = width;
-				// calculate height based on a video width, it order to keep the same aspect ratio
-				_image.height = (_image.width / originalVideoWidth) * originalVideoHeight;
-				// if calculated height appeared to be bigger than screen height, recalculuate the video size based on width
-				if (height < _image.height) {
-					// make the video height full height of the screen
-					_image.height = height;
-					// calculate width based on a video height, it order to keep the same aspect ratio
-					_image.width = ((originalVideoWidth * _image.height) / originalVideoHeight);
-				}
-			} // if we have device where screen height less than screen width e.g. tablet
-			else {
-				// make the video height full height of the screen
-				_image.height = height;
-				// calculate width based on a video height, it order to keep the same aspect ratio
-				_image.width = ((originalVideoWidth * _image.height) / originalVideoHeight);
-				// if calculated width appeared to be bigger than screen width, recalculuate the video size based on height
-				if (width < _image.width) {
-					// make the video width full width of the screen 
-					_image.width = width;
-					// calculate height based on a video width, it order to keep the same aspect ratio
-					_image.height = (_image.width / originalVideoWidth) * originalVideoHeight;
-				}
-			}
-			
-			_image.x = width - _image.width;
-			_image.y = height - _image.height;
-		}
-		
-		public function resizeForLandscape():void {
-			if (height < width) {
-				_image.height = width;
-				_image.width = ((originalVideoWidth * _image.height) / originalVideoHeight);
-				if (width < _image.width) {
-					_image.width = height;
-					_image.height = (_image.width / originalVideoWidth) * originalVideoHeight;
-				}
-			} else {
-				_image.width = height;
-				_image.height = (_image.width / originalVideoWidth) * originalVideoHeight;
-				if (height < _image.height) {
-					_image.height = width;
-					_image.width = ((originalVideoWidth * _image.height) / originalVideoHeight);
-				}
-			}
-		}
-		
 		public function rotateVideo(rotation:Number):void {
-			if (_image && stage.contains(_image)) {
-				removeChild(_image);
+			if (image && stage.contains(image)) {
+				removeChild(image);
 			}
-			_image = new Image();
+			videoComp = new Image();
 			switch (rotation) {
 				case 0:
 					resizeForPortrait();
-					_image.x = width / 2 - _image.width / 2;
-					_image.y = height / 2 - _image.height / 2; // + topMenuBarHeight;
+					image.x = width / 2 - image.width / 2;
+					image.y = height / 2 - image.height / 2; // + topMenuBarHeight;
 					break;
 				case -90:
 					resizeForLandscape();
-					_image.x = (width / 2) - (_image.height / 2);
-					_image.y = (height / 2) + (_image.width / 2); // + topMenuBarHeight;
+					image.x = (width / 2) - (image.height / 2);
+					image.y = (height / 2) + (image.width / 2); // + topMenuBarHeight;
 					break;
 				case 90:
 					resizeForLandscape();
-					_image.x = (width / 2) + (_image.height / 2);
-					_image.y = (height / 2) - (_image.width / 2); // + topMenuBarHeight;
+					image.x = (width / 2) + (image.height / 2);
+					image.y = (height / 2) - (image.width / 2); // + topMenuBarHeight;
 					break;
 				case 180:
 					resizeForPortrait();
-					_image.x = width / 2 + _image.width / 2;
-					_image.y = (height / 2) + (_image.height / 2); // + topMenuBarHeight
+					image.x = width / 2 + image.width / 2;
+					image.y = (height / 2) + (image.height / 2); // + topMenuBarHeight
 					break;
 				default:
 					break;
 			}
-			_image.rotation = rotation;
-			addChild(_image);
-		}	
+			image.rotation = rotation;
+			addChild(image);
+		}
 	}
-}
\ No newline at end of file
+}
diff --git a/clients/flash/air-client/src/org/bigbluebutton/air/common/views/VideoBaseView.as b/clients/flash/air-client/src/org/bigbluebutton/air/common/views/VideoBaseView.as
new file mode 100644
index 0000000000..7ecd55b8d9
--- /dev/null
+++ b/clients/flash/air-client/src/org/bigbluebutton/air/common/views/VideoBaseView.as
@@ -0,0 +1,65 @@
+package org.bigbluebutton.air.common.views {
+	import flash.display.DisplayObject;
+	
+	import mx.core.UIComponent;
+	
+	public class VideoBaseView extends UIComponent {
+		protected var videoComp:DisplayObject;
+		
+		protected var originalVideoWidth:Number;
+		
+		protected var originalVideoHeight:Number;
+		
+		public function resizeForLandscape():void {
+			if (height < width) {
+				videoComp.height = width;
+				videoComp.width = ((originalVideoWidth * videoComp.height) / originalVideoHeight);
+				if (width < videoComp.width) {
+					videoComp.width = height;
+					videoComp.height = (videoComp.width / originalVideoWidth) * originalVideoHeight;
+				}
+			} else {
+				videoComp.width = height;
+				videoComp.height = (videoComp.width / originalVideoWidth) * originalVideoHeight;
+				if (height < videoComp.height) {
+					videoComp.height = width;
+					videoComp.width = ((originalVideoWidth * videoComp.height) / originalVideoHeight);
+				}
+			}
+		}
+		
+		public function resizeForPortrait():void {
+			// if we have device where screen width less than screen height e.g. phone
+			if (width < height) {
+				// make the video width full width of the screen 
+				videoComp.width = width;
+				// calculate height based on a video width, it order to keep the same aspect ratio
+				videoComp.height = (videoComp.width / originalVideoWidth) * originalVideoHeight;
+				// if calculated height appeared to be bigger than screen height, recalculuate the video size based on width
+				if (height < videoComp.height) {
+					// make the video height full height of the screen
+					videoComp.height = height;
+					// calculate width based on a video height, it order to keep the same aspect ratio
+					videoComp.width = ((originalVideoWidth * videoComp.height) / originalVideoHeight);
+				}
+			} // if we have device where screen height less than screen width e.g. tablet
+			else {
+				// make the video height full height of the screen
+				videoComp.height = height;
+				// calculate width based on a video height, it order to keep the same aspect ratio
+				videoComp.width = ((originalVideoWidth * videoComp.height) / originalVideoHeight);
+				// if calculated width appeared to be bigger than screen width, recalculuate the video size based on height
+				if (width < videoComp.width) {
+					// make the video width full width of the screen 
+					videoComp.width = width;
+					// calculate height based on a video width, it order to keep the same aspect ratio
+					videoComp.height = (videoComp.width / originalVideoWidth) * originalVideoHeight;
+				}
+			}
+			
+			videoComp.x = width - videoComp.width;
+			videoComp.y = height - videoComp.height;
+		}
+	
+	}
+}
diff --git a/clients/flash/air-client/src/org/bigbluebutton/air/common/views/VideoView.as b/clients/flash/air-client/src/org/bigbluebutton/air/common/views/VideoView.as
index 50d3b096c3..aefdc6b30f 100755
--- a/clients/flash/air-client/src/org/bigbluebutton/air/common/views/VideoView.as
+++ b/clients/flash/air-client/src/org/bigbluebutton/air/common/views/VideoView.as
@@ -6,13 +6,10 @@ package org.bigbluebutton.air.common.views {
 	import flash.net.NetConnection;
 	import flash.net.NetStream;
 	import flash.system.Capabilities;
-	import mx.core.UIComponent;
 	
-	public class VideoView extends UIComponent {
+	public class VideoView extends VideoBaseView {
 		protected var ns:NetStream;
 		
-		protected var _video:Video;
-		
 		protected var connection:NetConnection;
 		
 		public var userId:String;
@@ -21,13 +18,13 @@ package org.bigbluebutton.air.common.views {
 		
 		public var streamName:String;
 		
-		protected var originalVideoWidth:Number;
-		
-		protected var originalVideoHeight:Number;
+		private function get video():Video {
+			return videoComp as Video;
+		}
 		
 		public function VideoView():void {
-			_video = new Video();
-			addChild(_video);
+			videoComp = new Video();
+			addChild(videoComp);
 		}
 		
 		public function startStream(connection:NetConnection, name:String, streamName:String, userId:String, oWidth:Number, oHeight:Number):void {
@@ -51,8 +48,8 @@ package org.bigbluebutton.air.common.views {
 			ns.bufferTime = 0;
 			ns.receiveVideo(true);
 			ns.receiveAudio(false);
-			_video.smoothing = true;
-			_video.attachNetStream(ns);
+			video.smoothing = true;
+			video.attachNetStream(ns);
 			ns.play(streamName);
 		}
 		
@@ -87,7 +84,7 @@ package org.bigbluebutton.air.common.views {
 		
 		public function close():void {
 			if (ns) {
-				_video.attachCamera(null);
+				video.attachCamera(null);
 				ns.removeEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
 				ns.removeEventListener(AsyncErrorEvent.ASYNC_ERROR, onAsyncError);
 				ns.close();
@@ -103,89 +100,38 @@ package org.bigbluebutton.air.common.views {
 			}
 		}
 		
-		public function resizeForPortrait():void {
-			// if we have device where screen width less than screen height e.g. phone
-			if (width < height) {
-				// make the video width full width of the screen 
-				_video.width = width;
-				// calculate height based on a video width, it order to keep the same aspect ratio
-				_video.height = (_video.width / originalVideoWidth) * originalVideoHeight;
-				// if calculated height appeared to be bigger than screen height, recalculuate the video size based on width
-				if (height < _video.height) {
-					// make the video height full height of the screen
-					_video.height = height;
-					// calculate width based on a video height, it order to keep the same aspect ratio
-					_video.width = ((originalVideoWidth * _video.height) / originalVideoHeight);
-				}
-			} // if we have device where screen height less than screen width e.g. tablet
-			else {
-				// make the video height full height of the screen
-				_video.height = height;
-				// calculate width based on a video height, it order to keep the same aspect ratio
-				_video.width = ((originalVideoWidth * _video.height) / originalVideoHeight);
-				// if calculated width appeared to be bigger than screen width, recalculuate the video size based on height
-				if (width < _video.width) {
-					// make the video width full width of the screen 
-					_video.width = width;
-					// calculate height based on a video width, it order to keep the same aspect ratio
-					_video.height = (_video.width / originalVideoWidth) * originalVideoHeight;
-				}
-			}
-			
-			_video.x = width - _video.width;
-			_video.y = height - _video.height;
-		}
-		
-		public function resizeForLandscape():void {
-			if (height < width) {
-				_video.height = width;
-				_video.width = ((originalVideoWidth * _video.height) / originalVideoHeight);
-				if (width < _video.width) {
-					_video.width = height;
-					_video.height = (_video.width / originalVideoWidth) * originalVideoHeight;
-				}
-			} else {
-				_video.width = height;
-				_video.height = (_video.width / originalVideoWidth) * originalVideoHeight;
-				if (height < _video.height) {
-					_video.height = width;
-					_video.width = ((originalVideoWidth * _video.height) / originalVideoHeight);
-				}
-			}
-		}
-		
 		public function rotateVideo(rotation:Number):void {
-			if (_video && stage.contains(_video)) {
-				stage.removeChild(_video);
+			if (video && stage.contains(video)) {
+				stage.removeChild(video);
 			}
-			_video = new Video();
-			_video.attachNetStream(ns);
+			videoComp = new Video();
+			video.attachNetStream(ns);
 			switch (rotation) {
 				case 0:
 					resizeForPortrait();
-					_video.x = width / 2 - _video.width / 2;
-					_video.y = height / 2 - _video.height / 2; // + topMenuBarHeight;
+					video.x = width / 2 - video.width / 2;
+					video.y = height / 2 - video.height / 2; // + topMenuBarHeight;
 					break;
 				case -90:
 					resizeForLandscape();
-					_video.x = (width / 2) - (_video.height / 2);
-					_video.y = (height / 2) + (_video.width / 2); // + topMenuBarHeight;
+					video.x = (width / 2) - (video.height / 2);
+					video.y = (height / 2) + (video.width / 2); // + topMenuBarHeight;
 					break;
 				case 90:
 					resizeForLandscape();
-					_video.x = (width / 2) + (_video.height / 2);
-					_video.y = (height / 2) - (_video.width / 2); // + topMenuBarHeight;
+					video.x = (width / 2) + (video.height / 2);
+					video.y = (height / 2) - (video.width / 2); // + topMenuBarHeight;
 					break;
 				case 180:
 					resizeForPortrait();
-					_video.x = width / 2 + _video.width / 2;
-					_video.y = (height / 2) + (_video.height / 2); // + topMenuBarHeight
+					video.x = width / 2 + video.width / 2;
+					video.y = (height / 2) + (video.height / 2); // + topMenuBarHeight
 					break;
 				default:
 					break;
 			}
-			_video.rotation = rotation;
-			this.stage.addChild(_video);
+			video.rotation = rotation;
+			this.stage.addChild(video);
 		}
 	}
 }
-- 
GitLab