Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -136,37 +136,49 @@ public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {
public void onAttachedToActivity(@NonNull ActivityPluginBinding activityPluginBinding) {
Activity activity = activityPluginBinding.getActivity();

// Set up Host API implementations based on the context that `activity` provides.
setUp(pluginBinding.getBinaryMessenger(), activity, pluginBinding.getTextureRegistry());

if (activity instanceof LifecycleOwner) {
processCameraProviderHostApiImpl.setLifecycleOwner((LifecycleOwner) activity);
liveDataHostApiImpl.setLifecycleOwner((LifecycleOwner) activity);
} else {
ProxyLifecycleProvider proxyLifecycleProvider = new ProxyLifecycleProvider(activity);
processCameraProviderHostApiImpl.setLifecycleOwner(proxyLifecycleProvider);
liveDataHostApiImpl.setLifecycleOwner(proxyLifecycleProvider);
}
// Set any needed references to `activity` itself.
updateLifecycleOwner(activity);
updateActivity(activity);

systemServicesHostApiImpl.setActivity(activity);
// Set permissions registry reference.
systemServicesHostApiImpl.setPermissionsRegistry(
activityPluginBinding::addRequestPermissionsResultListener);
deviceOrientationManagerHostApiImpl.setActivity(activity);
}

@Override
public void onDetachedFromActivityForConfigChanges() {
// Clear any references to previously attached `ActivityPluginBinding`/`Activity`.
updateContext(pluginBinding.getApplicationContext());
updateLifecycleOwner(null);
updateActivity(null);
systemServicesHostApiImpl.setPermissionsRegistry(null);
}

@Override
public void onReattachedToActivityForConfigChanges(
@NonNull ActivityPluginBinding activityPluginBinding) {
updateContext(activityPluginBinding.getActivity());
Activity activity = activityPluginBinding.getActivity();

// Set any needed references to `activity` itself or its context.
updateContext(activity);
updateLifecycleOwner(activity);
updateActivity(activity);

// Set permissions registry reference.
systemServicesHostApiImpl.setPermissionsRegistry(
activityPluginBinding::addRequestPermissionsResultListener);
}

@Override
public void onDetachedFromActivity() {
// Clear any references to previously attached `ActivityPluginBinding`/`Activity`.
updateContext(pluginBinding.getApplicationContext());
updateLifecycleOwner(null);
updateActivity(null);
systemServicesHostApiImpl.setPermissionsRegistry(null);
}

/**
Expand Down Expand Up @@ -196,4 +208,32 @@ public void updateContext(@NonNull Context context) {
cameraControlHostApiImpl.setContext(context);
}
}

/**
* Sets {@code LifecycleOwner} that is used to control the lifecycle
* of the camera by CameraX.
*/
public void updateLifecycleOwner(@NonNull Activity activity) {
if (activity instanceof LifecycleOwner) {
processCameraProviderHostApiImpl.setLifecycleOwner((LifecycleOwner) activity);
liveDataHostApiImpl.setLifecycleOwner((LifecycleOwner) activity);
} else {
ProxyLifecycleProvider proxyLifecycleProvider = new ProxyLifecycleProvider(activity);
processCameraProviderHostApiImpl.setLifecycleOwner(proxyLifecycleProvider);
liveDataHostApiImpl.setLifecycleOwner(proxyLifecycleProvider);
}
}

/**
* Updates {@code Activity} that is used for requesting camera permissions
* and tracking the orientation of the device.
*/
public void updateActivity(@Nullable Activity activity) {
if (systemServicesHostApiImpl != null) {
systemServicesHostApiImpl.setActivity(activity);
}
if (deviceOrientationManagerHostApiImpl != null) {
deviceOrientationManagerHostApiImpl.setActivity(activity);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public LiveDataHostApiImpl(
}

/** Sets {@link LifecycleOwner} used to observe the camera state if so requested. */
public void setLifecycleOwner(@NonNull LifecycleOwner lifecycleOwner) {
public void setLifecycleOwner(@Nullable LifecycleOwner lifecycleOwner) {
this.lifecycleOwner = lifecycleOwner;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public ProcessCameraProviderHostApiImpl(
this.context = context;
}

public void setLifecycleOwner(@NonNull LifecycleOwner lifecycleOwner) {
public void setLifecycleOwner(@Nullable LifecycleOwner lifecycleOwner) {
this.lifecycleOwner = lifecycleOwner;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public void setActivity(@NonNull Activity activity) {
this.activity = activity;
}

public void setPermissionsRegistry(@NonNull PermissionsRegistry permissionsRegistry) {
public void setPermissionsRegistry(@Nullable PermissionsRegistry permissionsRegistry) {
this.permissionsRegistry = permissionsRegistry;
}

Expand Down