Skip to content

Commit ea0f293

Browse files
authored
Merge pull request #135 from kfrancis/main
Fixes FrameReady for CameraView
2 parents 20fe0f8 + 143128e commit ea0f293

File tree

2 files changed

+77
-78
lines changed

2 files changed

+77
-78
lines changed
Lines changed: 75 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -1,104 +1,105 @@
1-
using System;
2-
using System.Linq;
3-
using Microsoft.Extensions.DependencyInjection;
1+
using Microsoft.Extensions.DependencyInjection;
42
using Microsoft.Maui;
53
using Microsoft.Maui.Graphics;
64
using Microsoft.Maui.Handlers;
5+
using System;
6+
using System.Linq;
77

88
namespace ZXing.Net.Maui
99
{
10-
public partial class CameraBarcodeReaderViewHandler : ViewHandler<ICameraBarcodeReaderView, NativePlatformCameraPreviewView>
11-
{
12-
public static PropertyMapper<ICameraBarcodeReaderView, CameraBarcodeReaderViewHandler> CameraBarcodeReaderViewMapper = new()
13-
{
14-
[nameof(ICameraBarcodeReaderView.Options)] = MapOptions,
15-
[nameof(ICameraBarcodeReaderView.IsDetecting)] = MapIsDetecting,
16-
[nameof(ICameraBarcodeReaderView.IsTorchOn)] = (handler, virtualView) => handler.cameraManager.UpdateTorch(virtualView.IsTorchOn),
17-
[nameof(ICameraBarcodeReaderView.CameraLocation)] = (handler, virtualView) => handler.cameraManager.UpdateCameraLocation(virtualView.CameraLocation)
18-
};
10+
public partial class CameraBarcodeReaderViewHandler : ViewHandler<ICameraBarcodeReaderView, NativePlatformCameraPreviewView>
11+
{
12+
public static PropertyMapper<ICameraBarcodeReaderView, CameraBarcodeReaderViewHandler> CameraBarcodeReaderViewMapper = new()
13+
{
14+
[nameof(ICameraBarcodeReaderView.Options)] = MapOptions,
15+
[nameof(ICameraBarcodeReaderView.IsDetecting)] = MapIsDetecting,
16+
[nameof(ICameraBarcodeReaderView.IsTorchOn)] = (handler, virtualView) => handler.cameraManager.UpdateTorch(virtualView.IsTorchOn),
17+
[nameof(ICameraBarcodeReaderView.CameraLocation)] = (handler, virtualView) => handler.cameraManager.UpdateCameraLocation(virtualView.CameraLocation)
18+
};
1919

20-
public static CommandMapper<ICameraBarcodeReaderView, CameraBarcodeReaderViewHandler> CameraBarcodeReaderCommandMapper = new()
21-
{
22-
[nameof(ICameraBarcodeReaderView.Focus)] = MapFocus,
23-
[nameof(ICameraBarcodeReaderView.AutoFocus)] = MapAutoFocus,
24-
};
20+
public static CommandMapper<ICameraBarcodeReaderView, CameraBarcodeReaderViewHandler> CameraBarcodeReaderCommandMapper = new()
21+
{
22+
[nameof(ICameraBarcodeReaderView.Focus)] = MapFocus,
23+
[nameof(ICameraBarcodeReaderView.AutoFocus)] = MapAutoFocus,
24+
};
2525

26-
public CameraBarcodeReaderViewHandler() : base(CameraBarcodeReaderViewMapper)
27-
{
28-
}
26+
public CameraBarcodeReaderViewHandler() : base(CameraBarcodeReaderViewMapper, CameraBarcodeReaderCommandMapper)
27+
{
28+
}
2929

30-
public CameraBarcodeReaderViewHandler(PropertyMapper mapper = null) : base(mapper ?? CameraBarcodeReaderViewMapper)
31-
{
32-
}
30+
public CameraBarcodeReaderViewHandler(PropertyMapper propertyMapper = null, CommandMapper commandMapper = null)
31+
: base(propertyMapper ?? CameraBarcodeReaderViewMapper, commandMapper ?? CameraBarcodeReaderCommandMapper)
32+
{
33+
}
3334

34-
CameraManager cameraManager;
35+
CameraManager cameraManager;
3536

36-
Readers.IBarcodeReader barcodeReader;
37+
Readers.IBarcodeReader barcodeReader;
3738

38-
protected Readers.IBarcodeReader BarcodeReader
39-
=> barcodeReader ??= Services.GetService<Readers.IBarcodeReader>();
39+
protected Readers.IBarcodeReader BarcodeReader
40+
=> barcodeReader ??= Services.GetService<Readers.IBarcodeReader>();
4041

41-
protected override NativePlatformCameraPreviewView CreatePlatformView()
42-
{
43-
if (cameraManager == null)
44-
cameraManager = new(MauiContext, VirtualView?.CameraLocation ?? CameraLocation.Rear);
45-
var v = cameraManager.CreateNativeView();
46-
return v;
47-
}
42+
protected override NativePlatformCameraPreviewView CreatePlatformView()
43+
{
44+
if (cameraManager == null)
45+
cameraManager = new(MauiContext, VirtualView?.CameraLocation ?? CameraLocation.Rear);
46+
var v = cameraManager.CreateNativeView();
47+
return v;
48+
}
4849

49-
protected override async void ConnectHandler(NativePlatformCameraPreviewView nativeView)
50-
{
51-
base.ConnectHandler(nativeView);
50+
protected override async void ConnectHandler(NativePlatformCameraPreviewView nativeView)
51+
{
52+
base.ConnectHandler(nativeView);
5253

53-
if (await cameraManager.CheckPermissions())
54-
cameraManager.Connect();
54+
if (await cameraManager.CheckPermissions())
55+
cameraManager.Connect();
5556

56-
cameraManager.FrameReady += CameraManager_FrameReady;
57-
}
57+
cameraManager.FrameReady += CameraManager_FrameReady;
58+
}
5859

59-
protected override void DisconnectHandler(NativePlatformCameraPreviewView nativeView)
60-
{
61-
cameraManager.FrameReady -= CameraManager_FrameReady;
60+
protected override void DisconnectHandler(NativePlatformCameraPreviewView nativeView)
61+
{
62+
cameraManager.FrameReady -= CameraManager_FrameReady;
6263

63-
cameraManager.Disconnect();
64+
cameraManager.Disconnect();
6465

65-
base.DisconnectHandler(nativeView);
66-
}
66+
base.DisconnectHandler(nativeView);
67+
}
6768

68-
private void CameraManager_FrameReady(object sender, CameraFrameBufferEventArgs e)
69-
{
70-
VirtualView?.FrameReady(e);
69+
private void CameraManager_FrameReady(object sender, CameraFrameBufferEventArgs e)
70+
{
71+
VirtualView?.FrameReady(e);
7172

72-
if (VirtualView.IsDetecting)
73-
{
74-
var barcodes = BarcodeReader.Decode(e.Data);
73+
if (VirtualView.IsDetecting)
74+
{
75+
var barcodes = BarcodeReader.Decode(e.Data);
7576

76-
if (barcodes?.Any() ?? false)
77-
VirtualView?.BarcodesDetected(new BarcodeDetectionEventArgs(barcodes));
78-
}
79-
}
77+
if (barcodes?.Any() ?? false)
78+
VirtualView?.BarcodesDetected(new BarcodeDetectionEventArgs(barcodes));
79+
}
80+
}
8081

81-
public static void MapOptions(CameraBarcodeReaderViewHandler handler, ICameraBarcodeReaderView cameraBarcodeReaderView)
82-
=> handler.BarcodeReader.Options = cameraBarcodeReaderView.Options;
82+
public static void MapOptions(CameraBarcodeReaderViewHandler handler, ICameraBarcodeReaderView cameraBarcodeReaderView)
83+
=> handler.BarcodeReader.Options = cameraBarcodeReaderView.Options;
8384

84-
public static void MapIsDetecting(CameraBarcodeReaderViewHandler handler, ICameraBarcodeReaderView cameraBarcodeReaderView)
85-
{ }
85+
public static void MapIsDetecting(CameraBarcodeReaderViewHandler handler, ICameraBarcodeReaderView cameraBarcodeReaderView)
86+
{ }
8687

87-
public void Focus(Point point)
88-
=> cameraManager?.Focus(point);
88+
public void Focus(Point point)
89+
=> cameraManager?.Focus(point);
8990

90-
public void AutoFocus()
91-
=> cameraManager?.AutoFocus();
91+
public void AutoFocus()
92+
=> cameraManager?.AutoFocus();
9293

93-
public static void MapFocus(CameraBarcodeReaderViewHandler handler, ICameraBarcodeReaderView cameraBarcodeReaderView, object? parameter)
94-
{
95-
if (parameter is not Point point)
96-
throw new ArgumentException("Invalid parameter", "point");
94+
public static void MapFocus(CameraBarcodeReaderViewHandler handler, ICameraBarcodeReaderView cameraBarcodeReaderView, object? parameter)
95+
{
96+
if (parameter is not Point point)
97+
throw new ArgumentException("Invalid parameter", "point");
9798

98-
handler.Focus(point);
99-
}
99+
handler.Focus(point);
100+
}
100101

101-
public static void MapAutoFocus(CameraBarcodeReaderViewHandler handler, ICameraBarcodeReaderView cameraBarcodeReaderView, object? parameters)
102-
=> handler.AutoFocus();
103-
}
102+
public static void MapAutoFocus(CameraBarcodeReaderViewHandler handler, ICameraBarcodeReaderView cameraBarcodeReaderView, object? parameters)
103+
=> handler.AutoFocus();
104+
}
104105
}

ZXing.Net.MAUI/CameraViewHandler.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@ public partial class CameraViewHandler : ViewHandler<ICameraView, NativePlatform
2525

2626
CameraManager cameraManager;
2727

28-
public event EventHandler<CameraFrameBufferEventArgs> FrameReady;
29-
3028
public CameraViewHandler() : base(CameraViewMapper)
3129
{
3230
}
@@ -54,9 +52,9 @@ protected override async void ConnectHandler(NativePlatformCameraPreviewView nat
5452
}
5553

5654
void CameraManager_FrameReady(object sender, CameraFrameBufferEventArgs e)
57-
=> FrameReady?.Invoke(this, e);
55+
=> VirtualView?.FrameReady(e);
5856

59-
protected override void DisconnectHandler(NativePlatformCameraPreviewView nativeView)
57+
protected override void DisconnectHandler(NativePlatformCameraPreviewView nativeView)
6058
{
6159
cameraManager.FrameReady -= CameraManager_FrameReady;
6260

0 commit comments

Comments
 (0)