summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/binderwrapper/binder_wrapper.h5
-rw-r--r--libbinderwrapper/binder_wrapper.cc7
2 files changed, 12 insertions, 0 deletions
diff --git a/include/binderwrapper/binder_wrapper.h b/include/binderwrapper/binder_wrapper.h
index 921c4ed19..ccda825b3 100644
--- a/include/binderwrapper/binder_wrapper.h
+++ b/include/binderwrapper/binder_wrapper.h
@@ -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;
diff --git a/libbinderwrapper/binder_wrapper.cc b/libbinderwrapper/binder_wrapper.cc
index 0b5ff9612..ca9c1dfd9 100644
--- a/libbinderwrapper/binder_wrapper.cc
+++ b/libbinderwrapper/binder_wrapper.cc
@@ -50,4 +50,11 @@ BinderWrapper* BinderWrapper::Get() {
return instance_;
}
+// static
+BinderWrapper* BinderWrapper::GetOrCreateInstance() {
+ if (!instance_)
+ instance_ = new RealBinderWrapper();
+ return instance_;
+}
+
} // namespace android