diff --git a/samples/DO.Samples.Forms/DO.Samples.Forms/DO.Samples.Forms.Android/MainActivity.cs b/samples/DO.Samples.Forms/DO.Samples.Forms/DO.Samples.Forms.Android/MainActivity.cs
index 3672dc5..37990a4 100644
--- a/samples/DO.Samples.Forms/DO.Samples.Forms/DO.Samples.Forms.Android/MainActivity.cs
+++ b/samples/DO.Samples.Forms/DO.Samples.Forms/DO.Samples.Forms.Android/MainActivity.cs
@@ -20,21 +20,18 @@ protected override void OnCreate(Bundle bundle)
// Step 1:
CrossCurrentActivity.Current.Activity = this;
- // Step 2:
- DeviceOrientationImplementation.Init();
-
// ...
global::Xamarin.Forms.Forms.Init(this, bundle);
LoadApplication(new App());
}
- // Step 3:
+ // Step 2:
public override void OnConfigurationChanged(Configuration newConfig)
{
base.OnConfigurationChanged(newConfig);
- DeviceOrientationImplementation.NotifyOrientationChange(newConfig);
+ DeviceOrientationImplementation.NotifyOrientationChange(newConfig.Orientation);
}
}
}
diff --git a/samples/DO.Samples.Forms/DO.Samples.Forms/DO.Samples.Forms/MainPage.xaml b/samples/DO.Samples.Forms/DO.Samples.Forms/DO.Samples.Forms/MainPage.xaml
index 1c8c871..233b39c 100644
--- a/samples/DO.Samples.Forms/DO.Samples.Forms/DO.Samples.Forms/MainPage.xaml
+++ b/samples/DO.Samples.Forms/DO.Samples.Forms/DO.Samples.Forms/MainPage.xaml
@@ -4,8 +4,10 @@
xmlns:local="clr-namespace:DO.Samples.Forms"
x:Class="DO.Samples.Forms.MainPage">
-
+
diff --git a/samples/DO.Samples.Forms/DO.Samples.Forms/DO.Samples.Forms/MainPage.xaml.cs b/samples/DO.Samples.Forms/DO.Samples.Forms/DO.Samples.Forms/MainPage.xaml.cs
index a867f76..60d5c27 100644
--- a/samples/DO.Samples.Forms/DO.Samples.Forms/DO.Samples.Forms/MainPage.xaml.cs
+++ b/samples/DO.Samples.Forms/DO.Samples.Forms/DO.Samples.Forms/MainPage.xaml.cs
@@ -3,17 +3,38 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using Plugin.DeviceOrientation;
+using Plugin.DeviceOrientation.Abstractions;
using Xamarin.Forms;
namespace DO.Samples.Forms
{
- public partial class MainPage : ContentPage
- {
- public MainPage()
- {
- InitializeComponent();
+ public partial class MainPage : ContentPage
+ {
+ private bool _isLocked = false;
+
+ public MainPage()
+ {
+ InitializeComponent();
var a = new DSImage(1, 2, 3, 4);
- }
- }
+
+ CrossDeviceOrientation.Current.OrientationChanged += CurrentOnOrientationChanged;
+ }
+
+ private void CurrentOnOrientationChanged(object sender, OrientationChangedEventArgs orientationChangedEventArgs)
+ {
+ btn.Text = orientationChangedEventArgs.Orientation.ToString();
+ }
+
+ public void Button_Click(object sender, EventArgs args)
+ {
+ if (_isLocked)
+ CrossDeviceOrientation.Current.LockOrientation(CrossDeviceOrientation.Current.CurrentOrientation);
+ else
+ CrossDeviceOrientation.Current.UnlockOrientation();
+
+ _isLocked = !_isLocked;
+ }
+ }
}
diff --git a/src/DeviceOrientation/Plugin.DeviceOrientation.Android/DeviceOrientationImplementation.cs b/src/DeviceOrientation/Plugin.DeviceOrientation.Android/DeviceOrientationImplementation.cs
index a1795ae..5bbd7a4 100644
--- a/src/DeviceOrientation/Plugin.DeviceOrientation.Android/DeviceOrientationImplementation.cs
+++ b/src/DeviceOrientation/Plugin.DeviceOrientation.Android/DeviceOrientationImplementation.cs
@@ -2,6 +2,7 @@
using Android.App;
using Android.Content;
using Android.Content.PM;
+using Android.Content.Res;
using Android.Hardware;
using Android.Runtime;
using Android.Views;
@@ -14,12 +15,37 @@ public class DeviceOrientationImplementation : BaseDeviceOrientationImplementati
{
private readonly OrientationListener _listener;
private bool _disposed;
+ private bool _isListenerEnabled = true;
+
+ protected bool IsListenerEnabled
+ {
+ set
+ {
+ if (_listener == null) return;
+
+ if (value == _isListenerEnabled) return;
+
+ if (value)
+ {
+ _listener.Enable();
+ }
+ else
+ {
+ _listener.Disable();
+ }
+
+ _isListenerEnabled = value;
+ }
+ }
public DeviceOrientationImplementation()
{
_listener = new OrientationListener(OnOrientationChanged);
+
if (_listener.CanDetectOrientation())
+ {
_listener.Enable();
+ }
}
public override DeviceOrientations CurrentOrientation
@@ -63,6 +89,21 @@ public override void Dispose(bool disposing)
base.Dispose(disposing);
}
+ public static void NotifyOrientationChange(Orientation newOrientation, bool isForms = true)
+ {
+ var instance = (DeviceOrientationImplementation)CrossDeviceOrientation.Current;
+
+ if (instance == null)
+ throw new InvalidCastException("Cast from IDeviceOrientation to Android.DeviceOrientationImplementation");
+
+ instance.IsListenerEnabled = !isForms;
+
+ instance.OnOrientationChanged(new OrientationChangedEventArgs
+ {
+ Orientation = CrossDeviceOrientation.Current.CurrentOrientation
+ });
+ }
+
private ScreenOrientation Convert(DeviceOrientations orientation)
{
switch (orientation)