chromium/ash/public/cpp/assistant/controller/assistant_controller.h

// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef ASH_PUBLIC_CPP_ASSISTANT_CONTROLLER_ASSISTANT_CONTROLLER_H_
#define ASH_PUBLIC_CPP_ASSISTANT_CONTROLLER_ASSISTANT_CONTROLLER_H_

#include <string>

#include "ash/public/cpp/ash_public_export.h"
#include "base/memory/weak_ptr.h"
#include "chromeos/ash/services/assistant/public/cpp/assistant_service.h"

class GURL;

namespace ash {

class AssistantControllerObserver;

// The interface for the Assistant controller.
class ASH_PUBLIC_EXPORT AssistantController {
 public:
  // Returns the singleton instance owned by Shell.
  static AssistantController* Get();

  // Adds/removes the specified |observer|.
  virtual void AddObserver(AssistantControllerObserver* observer) = 0;
  virtual void RemoveObserver(AssistantControllerObserver* observer) = 0;

  // Opens Google Assistant settings.
  virtual void OpenAssistantSettings() = 0;

  // Opens the specified |url| in a new browser tab. Special handling is applied
  // to deep links which may cause deviation from this behavior.
  virtual void OpenUrl(const GURL& url,
                       bool in_background = false,
                       bool from_server = false) = 0;

  // Returns a weak pointer to this instance.
  virtual base::WeakPtr<AssistantController> GetWeakPtr() = 0;

  // Provides a reference to the underlying |assistant| service.
  virtual void SetAssistant(assistant::Assistant* assistant) = 0;

  // Methods below may only be called after |SetAssistant| is called.
  // Show speaker id enrollment flow.
  virtual void StartSpeakerIdEnrollmentFlow() = 0;

  // Send Assistant feedback to Assistant server. If |pii_allowed| is
  // true then the user gives permission to attach Assistant debug info.
  // |feedback_description| is user's feedback input.
  virtual void SendAssistantFeedback(bool pii_allowed,
                                     const std::string& feedback_description,
                                     const std::string& screenshot_png) = 0;

 protected:
  AssistantController();
  virtual ~AssistantController();
};

}  // namespace ash

#endif  // ASH_PUBLIC_CPP_ASSISTANT_CONTROLLER_ASSISTANT_CONTROLLER_H_