blob: 00e297968b7e4cbe23a983dec76a91dfd7ff597b [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package io.flutter.plugins.camerax;
import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
import androidx.camera.core.CameraInfo;
import androidx.camera.core.CameraSelector;
import io.flutter.plugin.common.BinaryMessenger;
import io.flutter.plugins.camerax.GeneratedCameraXLibrary.CameraSelectorHostApi;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
public class CameraSelectorHostApiImpl implements CameraSelectorHostApi {
private final BinaryMessenger binaryMessenger;
private final InstanceManager instanceManager;
@VisibleForTesting public CameraXProxy cameraXProxy = new CameraXProxy();
public CameraSelectorHostApiImpl(
BinaryMessenger binaryMessenger, InstanceManager instanceManager) {
this.binaryMessenger = binaryMessenger;
this.instanceManager = instanceManager;
}
@Override
public void create(@NonNull Long identifier, Long lensFacing) {
CameraSelector.Builder cameraSelectorBuilder = cameraXProxy.createCameraSelectorBuilder();
CameraSelector cameraSelector;
if (lensFacing != null) {
cameraSelector = cameraSelectorBuilder.requireLensFacing(lensFacing.intValue()).build();
} else {
cameraSelector = cameraSelectorBuilder.build();
}
instanceManager.addDartCreatedInstance(cameraSelector, identifier);
}
@Override
public List<Long> filter(@NonNull Long identifier, @NonNull List<Long> cameraInfoIds) {
CameraSelector cameraSelector =
(CameraSelector) Objects.requireNonNull(instanceManager.getInstance(identifier));
List<CameraInfo> cameraInfosForFilter = new ArrayList<CameraInfo>();
for (Number cameraInfoAsNumber : cameraInfoIds) {
Long cameraInfoId = cameraInfoAsNumber.longValue();
CameraInfo cameraInfo =
(CameraInfo) Objects.requireNonNull(instanceManager.getInstance(cameraInfoId));
cameraInfosForFilter.add(cameraInfo);
}
List<CameraInfo> filteredCameraInfos = cameraSelector.filter(cameraInfosForFilter);
List<Long> filteredCameraInfosIds = new ArrayList<Long>();
for (CameraInfo cameraInfo : filteredCameraInfos) {
Long filteredCameraInfoId = instanceManager.getIdentifierForStrongReference(cameraInfo);
filteredCameraInfosIds.add(filteredCameraInfoId);
}
return filteredCameraInfosIds;
}
}