Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 08c9891c authored by Alex Vakulenko's avatar Alex Vakulenko
Browse files

libbinderwrapper: Add BinderWrapper::GetOrCreateInstance()

In libraries relying on binder it is useful to be able to obtain an
existing copy of BinderWrapper or create one if it doesn't exist.

This allows to abstract the actual RPC (binder) from clients who have
no other dependencies on this RPC.

BUG: 23782171
Change-Id: Ie775d3d8ab83d75e38abc7e1385eb39a363555ef
parent 5b7563a0
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ class BBinder;
class IBinder;

// Wraps libbinder to make it testable.
// NOTE: Static methods of this class are not thread-safe.
class BinderWrapper {
 public:
  virtual ~BinderWrapper() {}
@@ -50,6 +51,10 @@ class BinderWrapper {
  // InitForTesting().
  static BinderWrapper* Get();

  // Returns the singleton instance if it was previously created by Create() or
  // set by InitForTesting(), or creates a new one by calling Create().
  static BinderWrapper* GetOrCreateInstance();

  // Gets the binder for communicating with the service identified by
  // |service_name|, returning null immediately if it doesn't exist.
  virtual sp<IBinder> GetService(const std::string& service_name) = 0;
+7 −0
Original line number Diff line number Diff line
@@ -50,4 +50,11 @@ BinderWrapper* BinderWrapper::Get() {
  return instance_;
}

// static
BinderWrapper* BinderWrapper::GetOrCreateInstance() {
  if (!instance_)
    instance_ = new RealBinderWrapper();
  return instance_;
}

}  // namespace android