diff --git a/LibVLCSharp.Android.Sample/MainActivity.cs b/LibVLCSharp.Android.Sample/MainActivity.cs index 8a95a70957ddcb04f8d0cf7e5fdcfb51088b8c76..30cb6a2e06934140ad88e1a642c6683a02e4722b 100644 --- a/LibVLCSharp.Android.Sample/MainActivity.cs +++ b/LibVLCSharp.Android.Sample/MainActivity.cs @@ -1,32 +1,42 @@ using Android.App; using Android.OS; using Android.Views; -using LibVLCSharp.Platforms.Android; +using Android.Widget; using LibVLCSharp.Shared; +using VideoView = LibVLCSharp.Platforms.Android.VideoView; namespace LibVLCSharp.Android.Sample { [Activity(Label = "LibVLCSharp.Android.Sample", MainLauncher = true)] - public class MainActivity : VideoView + public class MainActivity : Activity { - SurfaceView _surfaceView; + VideoView _videoView; protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); // Set our view from the "main" layout resource - SetContentView(Resource.Layout.Main); - - _surfaceView = FindViewById(Resource.Id.surfaceView); - AttachSurfaceView(_surfaceView); + SetContentView(Resource.Layout.Main); } protected override void OnResume() { base.OnResume(); - MediaPlayer.Play(new Media(Instance, "http://www.quirksmode.org/html5/videos/big_buck_bunny.mp4", Media.FromType.FromLocation)); + _videoView = new VideoView(this); + AddContentView(_videoView, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent)); + _videoView.Attach(); + _videoView.MediaPlayer.Play(new Media(_videoView.Instance, "http://www.quirksmode.org/html5/videos/big_buck_bunny.mp4", Media.FromType.FromLocation)); + } + + protected override void OnPause() + { + base.OnPause(); + + _videoView.MediaPlayer.Stop(); + _videoView.Detach(); + _videoView.Dispose(); } } } \ No newline at end of file diff --git a/LibVLCSharp.Android.Sample/Resources/Resource.Designer.cs b/LibVLCSharp.Android.Sample/Resources/Resource.Designer.cs index bc51567fa5d6e03aeb7e923d27893eefaa3fc87b..6746118ce195cdeaa8a167da02367ae0c2c35a8a 100644 --- a/LibVLCSharp.Android.Sample/Resources/Resource.Designer.cs +++ b/LibVLCSharp.Android.Sample/Resources/Resource.Designer.cs @@ -41,22 +41,6 @@ namespace LibVLCSharp.Android.Sample } } - public partial class Id - { - - // aapt resource value: 0x7f040000 - public const int surfaceView = 2130968576; - - static Id() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Id() - { - } - } - public partial class Layout { diff --git a/LibVLCSharp.Android.Sample/Resources/layout/Main.axml b/LibVLCSharp.Android.Sample/Resources/layout/Main.axml index c49fccd1400b3a7a8d32739c46b9977d4753c0e8..9ea500f625c695464a55ebba120c27ef609f76bd 100644 --- a/LibVLCSharp.Android.Sample/Resources/layout/Main.axml +++ b/LibVLCSharp.Android.Sample/Resources/layout/Main.axml @@ -3,11 +3,4 @@ android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> - - - - \ No newline at end of file diff --git a/LibVLCSharp/Platforms/Android/VideoView.cs b/LibVLCSharp/Platforms/Android/VideoView.cs index 13554e54fe01e58cbdafd0b7344760d6a9dc53a6..613af1bf7bf8ec2a32412d17740bcdc359c2de16 100644 --- a/LibVLCSharp/Platforms/Android/VideoView.cs +++ b/LibVLCSharp/Platforms/Android/VideoView.cs @@ -1,48 +1,83 @@ -using Android.App; -using Android.OS; +using System; + +using Android.Content; +using Android.Runtime; +using Android.Util; using Android.Views; + using LibVLCSharp.Shared; + using Org.Videolan.Libvlc; namespace LibVLCSharp.Platforms.Android { - [Activity(Label = "VideoView")] - public abstract class VideoView : Activity, IVLCVoutCallback + public class VideoView : SurfaceView, IVLCVoutCallback, IVideoView { MediaPlayer _mediaPlayer; Instance _instance; AWindow _awindow; + LayoutChangeListener _layoutListener; - protected override void OnCreate(Bundle savedInstanceState) - { - base.OnCreate(savedInstanceState); + #region ctors - Core.Initialize(); + public VideoView(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer) => Init(); - _instance = new Instance(); - _mediaPlayer = new MediaPlayer(_instance); + public VideoView(Context context) : base(context) => Init(); + + public VideoView(Context context, IAttributeSet attrs) : base(context, attrs) => Init(); + public VideoView(Context context, IAttributeSet attrs, int defStyleAttr) : base(context, attrs, defStyleAttr) => Init(); + + public VideoView(Context context, IAttributeSet attrs, int defStyleAttr, int defStyleRes) : base(context, attrs, defStyleAttr, defStyleRes) => Init(); + + #endregion + + public MediaPlayer MediaPlayer => _mediaPlayer; + public Instance Instance => _instance; + + public void Attach() + { _awindow = new AWindow(new SurfaceCallback(_mediaPlayer)); _awindow.AddCallback(this); + _awindow.SetVideoView(this); + _awindow.AttachViews(); + _mediaPlayer.SetAndroidContext(_awindow.Handle); + + _layoutListener = new LayoutChangeListener(_awindow); + AddOnLayoutChangeListener(_layoutListener); } - public void AttachSurfaceView(SurfaceView surfaceView) + public void Detach() { - _awindow.SetVideoView(surfaceView); - _awindow.AttachViews(); - surfaceView.AddOnLayoutChangeListener(new LayoutChangeListener(_awindow)); + _awindow.RemoveCallback(this); + _awindow.DetachViews(); + + _mediaPlayer.SetAndroidContext(IntPtr.Zero); + + RemoveOnLayoutChangeListener(_layoutListener); + _layoutListener.Dispose(); + _layoutListener = null; + + _awindow.Dispose(); + _awindow = null; + } - public virtual void OnSurfacesCreated(IVLCVout p0) + public virtual void OnSurfacesCreated(IVLCVout vout) { } - public virtual void OnSurfacesDestroyed(IVLCVout p0) + public virtual void OnSurfacesDestroyed(IVLCVout vout) { } - public MediaPlayer MediaPlayer => _mediaPlayer; - public Instance Instance => _instance; + void Init() + { + Core.Initialize(); + + _instance = new Instance(); + _mediaPlayer = new MediaPlayer(_instance); + } } } \ No newline at end of file diff --git a/LibVLCSharp/Shared/IVideoView.cs b/LibVLCSharp/Shared/IVideoView.cs index 4a82f5025846d4e84db4f72fb114f7b3b8e6ea65..b708c77a301ed4cae54b6ac87c2d825ec8a7fcba 100644 --- a/LibVLCSharp/Shared/IVideoView.cs +++ b/LibVLCSharp/Shared/IVideoView.cs @@ -3,10 +3,9 @@ public interface IVideoView { MediaPlayer MediaPlayer { get; } - Instance Instance { get; } - void AttachView(object surface); - void DetachView(); + void Attach(); + void Detach(); } -} +} \ No newline at end of file