libbinder_ndk: cleaner API for making SpAIBinder

Both to make it easier to change the underlying API in the future and
to make it look nicer.

Bug: 112664205
Test: android.binder.cts
Change-Id: I61ae78949055a4dde655dd54f5dad86ea354e6b4
diff --git a/libs/binder/ndk/include_ndk/android/binder_interface_utils.h b/libs/binder/ndk/include_ndk/android/binder_interface_utils.h
index a133d49..6782ce0 100644
--- a/libs/binder/ndk/include_ndk/android/binder_interface_utils.h
+++ b/libs/binder/ndk/include_ndk/android/binder_interface_utils.h
@@ -56,6 +56,15 @@
         return std::static_pointer_cast<CHILD>(ref());
     }
 
+    /**
+     * Convenience method for making an object directly with a reference.
+     */
+    template<class T, class... Args>
+    static std::shared_ptr<T> make(Args&&... args) {
+        T* t = new T(std::forward<Args>(args)...);
+        return t->template ref<T>();
+    }
+
 private:
     std::once_flag mFlagThis;
     std::weak_ptr<SharedRefBase> mThis;