dotnet / dotnet/android-libraries

Xamarin.AndroidX.CameraExtensions: ProcessCameraProvider must implement ICameraProvider

Open
#1,188 9 comments 1 reaction 0 assignees View on GitHub
Dominant language
C#
Stars
317
Forks
73
Avg merge
1d 8h
Merged PRs (30d)
17

Description

### Android framework version

net9.0-android

### Affected platform version

.NET 9

### Description

ProcessCameraProvider must implement ICameraProvider: https://developer.android.com/reference/androidx/camera/lifecycle/ProcessCameraProvider

### Steps to Reproduce

```csharp
async Task EnableModes(CameraInfo selectedCamera)
{
var cameraFutureCts = new TaskCompletionSource();
var cameraSelector = selectedCamera.CameraSelector ?? throw new CameraException($"Unable to retrieve {nameof(CameraSelector)}");
var cameraProviderFuture = ProcessCameraProvider.GetInstance(context) ?? throw new CameraException($"Unable to retrieve {nameof(ProcessCameraProvider)}");
cameraProviderFuture.AddListener(new Runnable(() =>
{
var cameraProviderInstance = cameraProviderFuture.Get();
if (cameraProviderInstance is not AndroidX.Camera.Core.ICameraProvider androidCameraProvider) // this is true, but must be false
{
cameraFutureCts.SetResult();
return;
}

var extensionsManagerFuture = ExtensionsManager.GetInstanceAsync(context, androidCameraProvider);
extensionsManagerFuture.AddListener(new Runnable(() =>
{
var extensionsManager = (ExtensionsManager)extensionsManagerFuture.Get()!;
if (extensionsManager.IsExtensionAvailable(cameraSelector, extensionMode))
{
cameraSelector = extensionsManager.GetExtensionEnabledCameraSelector(cameraSelector, extensionMode);
}

cameraFutureCts.SetResult();
}), ContextCompat.GetMainExecutor(context));
}), ContextCompat.GetMainExecutor(context));

await cameraFutureCts.Task;
return cameraSelector;
}
```

### Did you find any workaround?

_No response_

### Relevant log output

```shell

```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.