blob: 2f687cd45304e07c39831c9cdf2503b3d96080f6 [file] [log] [blame]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef IOS_CHROME_BROWSER_SHARED_PUBLIC_COMMANDS_LENS_OVERLAY_COMMANDS_H_
#define IOS_CHROME_BROWSER_SHARED_PUBLIC_COMMANDS_LENS_OVERLAY_COMMANDS_H_
#import <UIKit/UIKit.h>
#import "components/lens/lens_overlay_dismissal_source.h"
#import "ios/chrome/browser/lens_overlay/model/lens_overlay_entrypoint.h"
@protocol LensImageMetadata;
@protocol LensOverlayResultsPagePresenting;
@class LensResultPageViewController;
@class LensOverlayContainerViewController;
// Factory block for creating an object that conforms to the
// LensOverlayResultsPagePresenting protocol.
typedef id<LensOverlayResultsPagePresenting> (^LensResultsPresenterFactory)(
LensOverlayContainerViewController* baseViewController,
LensResultPageViewController* resultsViewController);
/// Commands related to Lens Overlay.
@protocol LensOverlayCommands
/// Creates a new Lens UI. Automatically destroys any existing Lens UI as only
/// one instance of it per BVC is supported.
- (void)createAndShowLensUI:(BOOL)animated
entrypoint:(LensOverlayEntrypoint)entrypoint
completion:(void (^)(BOOL))completion;
/// Responds to a search image with Lens request by creating a new Lens UI with
/// the given image. The overlay will be shown over the specified
/// initial presentation base.
/// The `presenterFactory` allows the caller to provide a custom presenter for
/// the results page. If nil, a default presenter will be used.
/// The completion is called once the UI is presented.
- (void)searchImageWithLens:(UIImage*)image
entrypoint:(LensOverlayEntrypoint)entrypoint
initialPresentationBase:(UIViewController*)initialPresentationBase
resultsPresenterFactory:(LensResultsPresenterFactory)presenterFactory
completion:(void (^)(BOOL))completion;
/// Responds to a search image with Lens request by creating a new Lens UI with
/// the given image. The overlay will be shown over the specified
/// initial presentation base.
/// The completion is called once the UI is presented.
- (void)searchWithLensImageMetadata:(id<LensImageMetadata>)metadata
entrypoint:(LensOverlayEntrypoint)entrypoint
initialPresentationBase:(UIViewController*)initialPresentationBase
completion:(void (^)(BOOL))completion;
/// Display the lens overlay, if it exists.
- (void)showLensUI:(BOOL)animated;
/// Hide lens overlay if it exists.
- (void)hideLensUI:(BOOL)animated completion:(void (^)())completion;
/// Destroy lens overlay (called e.g. in response to memory pressure).
- (void)destroyLensUI:(BOOL)animated
reason:(lens::LensOverlayDismissalSource)dismissalSource;
/// Destroy lens overlay (called e.g. in response to memory pressure).
/// Completion is called when the Lens Overlay is destroyed.
- (void)destroyLensUI:(BOOL)animated
reason:(lens::LensOverlayDismissalSource)dismissalSource
completion:(void (^)())completion;
/// Prepares for a tab change that is about to happen in the background.
- (void)prepareLensUIForBackgroundTabChange;
@end
#endif // IOS_CHROME_BROWSER_SHARED_PUBLIC_COMMANDS_LENS_OVERLAY_COMMANDS_H_