| |
| // Copyright 2016 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_AGENTS_CLIPBOARD_CLIPBOARD_STORAGE_H_ |
| #define PERIDOT_BIN_AGENTS_CLIPBOARD_CLIPBOARD_STORAGE_H_ |
| |
| #include <fuchsia/modular/cpp/fidl.h> |
| #include <lib/async/cpp/operation.h> |
| |
| #include "peridot/lib/ledger_client/ledger_client.h" |
| #include "peridot/lib/ledger_client/page_client.h" |
| |
| namespace modular { |
| |
| // |ClipboardStorage| manages serialization of clipboard data to and from the |
| // Ledger. |
| // |
| // A Ledger is scoped to a single user, so each user has their own clipboard. |
| // Using the Ledger for the clipboard means that the same clipboard is shared |
| // across all of a user's devices. The clipboard will also persist across |
| // reboots. |
| class ClipboardStorage : public PageClient { |
| public: |
| ClipboardStorage(LedgerClient* ledger_client, LedgerPageId page_id); |
| ~ClipboardStorage() override; |
| |
| // Stores the provided text. |
| void Push(const fidl::StringPtr& text); |
| |
| // Returns the most recent value that was passed to |Push()|, or "" if nothing |
| // has been pushed yet. |
| void Peek(const std::function<void(fidl::StringPtr)>& callback); |
| |
| private: |
| OperationQueue operation_queue_; |
| |
| class PushCall; |
| class PeekCall; |
| |
| FXL_DISALLOW_COPY_AND_ASSIGN(ClipboardStorage); |
| }; |
| |
| } // namespace modular |
| |
| #endif // PERIDOT_BIN_AGENTS_CLIPBOARD_CLIPBOARD_STORAGE_H_ |