2 // Copyright (C) 2015 Google, Inc.
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at:
8 // http://www.apache.org/licenses/LICENSE-2.0
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
19 #include <base/macros.h>
20 #include <base/message_loop/message_loop.h>
31 // The Daemon class is a singleton that represents the root of the ownership
32 // hierarchy. The single instance sets up and owns the main event loop, the IPC
33 // handlers, global Settings, and the core Bluetooth stack.
36 // Initializes the daemon. This must be called to at the start of the
37 // application to set up the global daemon instance and everything it manages.
38 // Returns false in case of a failure.
39 static bool Initialize();
41 // Cleans up all the resources associated with the global Daemon object.
42 static void ShutDown();
44 // Assigns the global Daemon instance for testing. Should only be called from
46 static void InitializeForTesting(Daemon* test_daemon);
48 // Returns the singleton Daemon instance. All classes can interact with the
49 // Daemon, obtain its resources etc using this getter.
52 // The global Settings object. All classes have direct access to this through
54 virtual Settings* GetSettings() const = 0;
56 // The main event loop. This should be used for any events and delayed tasks
57 // that should be executed on the daemon's main thread.
58 virtual base::MessageLoop* GetMessageLoop() const = 0;
60 // Starts the daemon's main loop.
61 virtual void StartMainLoop() = 0;
65 virtual ~Daemon() = default;
68 // Internal instance helper called by Initialize().
69 virtual bool Init() = 0;
71 DISALLOW_COPY_AND_ASSIGN(Daemon);
74 } // namespace bluetooth