libbinder_ndk: convenience method for isRemote
Avoids object allocation that would occur in local case if someone
called 'AIBinder_isRemote(iface->asBinder())'.
Bug: 112664205
Test: atest android.binder.cts
Change-Id: I45cb02bf626a94e633d8e26a14714f60622d7bd6
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 f5c8bce..a133d49 100644
--- a/libs/binder/ndk/include_ndk/android/binder_interface_utils.h
+++ b/libs/binder/ndk/include_ndk/android/binder_interface_utils.h
@@ -69,6 +69,12 @@
// This either returns the single existing implementation or creates a new implementation.
virtual SpAIBinder asBinder() = 0;
+
+ /**
+ * Returns whether this interface is in a remote process. If it cannot be determined locally,
+ * this will be checked using AIBinder_isRemote.
+ */
+ virtual bool isRemote() = 0;
};
// wrapper analog to BnInterface
@@ -80,6 +86,8 @@
SpAIBinder asBinder() override;
+ bool isRemote() override { return true; }
+
protected:
// This function should only be called by asBinder. Otherwise, there is a possibility of
// multiple AIBinder* objects being created for the same instance of an object.
@@ -99,6 +107,8 @@
SpAIBinder asBinder() override;
+ bool isRemote() override { return AIBinder_isRemote(mBinder.get()); }
+
private:
SpAIBinder mBinder;
};