blob: 9ebc951cabc65495ce26c88d77847a96a82afada [file] [log] [blame]
// Copyright 2017 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef PERIDOT_BIN_SUGGESTION_ENGINE_DEBUG_H_
#define PERIDOT_BIN_SUGGESTION_ENGINE_DEBUG_H_
#include <list>
#include <vector>
#include <fuchsia/modular/cpp/fidl.h>
#include <lib/fidl/cpp/interface_ptr_set.h>
#include <lib/fxl/memory/weak_ptr.h>
#include "peridot/bin/suggestion_engine/ranked_suggestions_list.h"
#include "peridot/bin/suggestion_engine/suggestion_prototype.h"
#include "peridot/lib/util/idle_waiter.h"
namespace modular {
// Provides a debug interface that is accessible through the MI dashboard.
class SuggestionDebugImpl : public fuchsia::modular::SuggestionDebug {
public:
SuggestionDebugImpl();
~SuggestionDebugImpl() override;
fxl::WeakPtr<SuggestionDebugImpl> GetWeakPtr();
void OnAskStart(std::string query, const RankedSuggestionsList* suggestions);
void OnSuggestionSelected(const SuggestionPrototype* selected_suggestion);
void OnInterrupt(const SuggestionPrototype* interrupt_suggestion);
void OnNextUpdate(const RankedSuggestionsList* suggestions);
util::IdleWaiter* GetIdleWaiter();
private:
// |fuchsia::modular::SuggestionDebug|
void WatchAskProposals(
fidl::InterfaceHandle<fuchsia::modular::AskProposalListener> listener)
override;
// |fuchsia::modular::SuggestionDebug|
void WatchInterruptionProposals(
fidl::InterfaceHandle<fuchsia::modular::InterruptionProposalListener>
listener) override;
// |fuchsia::modular::SuggestionDebug|
void WatchNextProposals(
fidl::InterfaceHandle<fuchsia::modular::NextProposalListener> listener)
override;
// |fuchsia::modular::SuggestionDebug|
void WaitUntilIdle(WaitUntilIdleCallback callback) override;
// |fuchsia::modular::SuggestionDebug|
void RunUntilIdle(RunUntilIdleCallback callback) override;
fidl::InterfacePtrSet<fuchsia::modular::AskProposalListener>
ask_proposal_listeners_;
fidl::InterfacePtrSet<fuchsia::modular::InterruptionProposalListener>
interruption_proposal_listeners_;
fidl::InterfacePtrSet<fuchsia::modular::NextProposalListener>
next_proposal_listeners_;
// The cached set of next proposals.
fidl::VectorPtr<fuchsia::modular::ProposalSummary> cached_next_proposals_;
util::IdleWaiter idle_waiter_;
fxl::WeakPtrFactory<SuggestionDebugImpl> weak_ptr_factory_;
};
} // namespace modular
#endif // PERIDOT_BIN_SUGGESTION_ENGINE_DEBUG_H_