Merge "Add support for default impl"
diff --git a/libs/binder/include/binder/IInterface.h b/libs/binder/include/binder/IInterface.h
index 227d0ae..b61278a 100644
--- a/libs/binder/include/binder/IInterface.h
+++ b/libs/binder/include/binder/IInterface.h
@@ -72,12 +72,18 @@
// ----------------------------------------------------------------------
#define DECLARE_META_INTERFACE(INTERFACE) \
+public: \
static const ::android::String16 descriptor; \
static ::android::sp<I##INTERFACE> asInterface( \
const ::android::sp<::android::IBinder>& obj); \
virtual const ::android::String16& getInterfaceDescriptor() const; \
I##INTERFACE(); \
virtual ~I##INTERFACE(); \
+ static bool setDefaultImpl(std::unique_ptr<I##INTERFACE> impl); \
+ static const std::unique_ptr<I##INTERFACE>& getDefaultImpl(); \
+private: \
+ static std::unique_ptr<I##INTERFACE> default_impl; \
+public: \
#define IMPLEMENT_META_INTERFACE(INTERFACE, NAME) \
@@ -100,6 +106,19 @@
} \
return intr; \
} \
+ std::unique_ptr<I##INTERFACE> I##INTERFACE::default_impl; \
+ bool I##INTERFACE::setDefaultImpl(std::unique_ptr<I##INTERFACE> impl)\
+ { \
+ if (!I##INTERFACE::default_impl && impl) { \
+ I##INTERFACE::default_impl = std::move(impl); \
+ return true; \
+ } \
+ return false; \
+ } \
+ const std::unique_ptr<I##INTERFACE>& I##INTERFACE::getDefaultImpl() \
+ { \
+ return I##INTERFACE::default_impl; \
+ } \
I##INTERFACE::I##INTERFACE() { } \
I##INTERFACE::~I##INTERFACE() { } \