Merge changes from topic 'bphwfoo'

* changes:
  Clean up hard-coded Bp/Bn/Bs/IHw prefixes.
  Renamed Interface::getProxyName to getProxyFqName
diff --git a/generateJava.cpp b/generateJava.cpp
index e944431..a4b53b4 100644
--- a/generateJava.cpp
+++ b/generateJava.cpp
@@ -273,7 +273,7 @@
     out << "private android.os.IHwBinder mRemote;\n\n";
     out << "public Proxy(android.os.IHwBinder remote) {\n";
     out.indent();
-    out << "mRemote = remote;\n";
+    out << "mRemote = java.util.Objects.requireNonNull(remote);\n";
     out.unindent();
     out << "}\n\n";
 
diff --git a/test/Android.bp b/test/Android.bp
index 6c99082..0f783b8 100644
--- a/test/Android.bp
+++ b/test/Android.bp
@@ -5,7 +5,7 @@
 cc_test {
     name: "hidl_test",
     gtest: false,
-    srcs: ["main.cpp"],
+    srcs: ["main.cpp", "FooCallback.cpp"],
 
     shared_libs: [
         "libbase",
diff --git a/test/FooCallback.cpp b/test/FooCallback.cpp
new file mode 100644
index 0000000..39d540f
--- /dev/null
+++ b/test/FooCallback.cpp
@@ -0,0 +1,134 @@
+
+#define LOG_TAG "hidl_test"
+
+#include "FooCallback.h"
+#include <android/log.h>
+#include <hidl-test/FooHelper.h>
+#include <inttypes.h>
+#include <utils/Timers.h>
+
+namespace android {
+namespace hardware {
+namespace tests {
+namespace foo {
+namespace V1_0 {
+namespace implementation {
+
+enum {
+    NOT_REPORTED = -1LL
+};
+
+FooCallback::FooCallback()
+        : mLock{}, mCond{} {
+    for (size_t i = 0; i < invokeInfo.size(); i++) {
+        invokeInfo[i].invoked = false;
+        invokeInfo[i].timeNs = NOT_REPORTED;
+        invokeInfo[i].callerBlockedNs = NOT_REPORTED;
+    }
+}
+
+Return<void> FooCallback::heyItsYou(
+        const sp<IFooCallback> &_cb) {
+    nsecs_t start = systemTime();
+    ALOGI("SERVER(FooCallback) 1: heyItsYou cb = %p", _cb.get());
+    nsecs_t end = systemTime();
+    {
+        Mutex::Autolock lock(mLock);
+        invokeInfo[0].invoked = true;
+        invokeInfo[0].timeNs = end - start;
+        mCond.signal();
+    }
+    ALOGI("SERVER(FooCallback) 2: heyItsYou returned");
+    return Void();
+}
+
+Return<bool> FooCallback::heyItsYouIsntIt(const sp<IFooCallback> &_cb) {
+    nsecs_t start = systemTime();
+    ALOGI("SERVER(FooCallback) 3: heyItsYouIsntIt cb = %p sleeping for %" PRId64 " seconds", _cb.get(), DELAY_S);
+    sleep(DELAY_S);
+    ALOGI("SERVER(FooCallback) 4: heyItsYouIsntIt cb = %p responding", _cb.get());
+    nsecs_t end = systemTime();
+    {
+        Mutex::Autolock lock(mLock);
+        invokeInfo[1].invoked = true;
+        invokeInfo[1].timeNs = end - start;
+        mCond.signal();
+    }
+    ALOGI("SERVER(FooCallback) 5: heyItsYouIsntIt cb = %p responding", _cb.get());
+    return true;
+}
+
+Return<void> FooCallback::heyItsTheMeaningOfLife(uint8_t tmol) {
+    nsecs_t start = systemTime();
+    ALOGI("SERVER(FooCallback) 6.1: heyItsTheMeaningOfLife = %d sleeping for %" PRId64 " seconds", tmol, DELAY_S);
+    sleep(DELAY_S);
+    ALOGI("SERVER(FooCallback) 6.2: heyItsTheMeaningOfLife = %d done sleeping", tmol);
+    nsecs_t end = systemTime();
+    {
+        Mutex::Autolock lock(mLock);
+        invokeInfo[2].invoked = true;
+        invokeInfo[2].timeNs = end - start;
+        mCond.signal();
+    }
+    ALOGI("SERVER(FooCallback) 6.3: heyItsTheMeaningOfLife returned");
+    return Void();
+}
+
+Return<void> FooCallback::reportResults(int64_t ns, reportResults_cb cb) {
+    ALOGI("SERVER(FooCallback) 8.1: reportResults(%" PRId64 " seconds)", nanoseconds_to_seconds(ns));
+    nsecs_t leftToWaitNs = ns;
+    bool cond;
+    {
+        Mutex::Autolock lock(mLock);
+        while ((cond = ((!invokeInfo[0].invoked ||
+                !invokeInfo[1].invoked ||
+                !invokeInfo[2].invoked ||
+                invokeInfo[0].callerBlockedNs == NOT_REPORTED ||
+                invokeInfo[1].callerBlockedNs == NOT_REPORTED ||
+                invokeInfo[2].callerBlockedNs == NOT_REPORTED)   &&
+               leftToWaitNs > 0))) {
+            nsecs_t start = systemTime();
+            ::android::status_t rc = mCond.waitRelative(mLock, leftToWaitNs);
+            if (rc != ::android::OK) {
+                ALOGW("SERVER(FooCallback)::reportResults(%" PRId64 " ns) Condition::waitRelative(%" PRId64 ") returned error (%d)", ns, leftToWaitNs, rc);
+                if (rc == -ETIMEDOUT) {
+                    // time's up
+                    leftToWaitNs = -INT32_MAX;
+                }
+                break;
+            }
+            ALOGI("SERVER(FooCallback)::reportResults(%" PRId64 " ns) Condition::waitRelative was signalled", ns);
+            leftToWaitNs -= systemTime() - start;
+        }
+    }
+    ALOGI("SERVER(FooCallback) 8.2: reportResults returned;"
+            "invoked? %d, %d, %d; leftToWaitNs = %" PRId64 "; cond = %d",
+            invokeInfo[0].invoked, invokeInfo[1].invoked, invokeInfo[2].invoked,
+            leftToWaitNs, cond);
+    cb(leftToWaitNs, invokeInfo);
+    return Void();
+}
+
+Return<void> FooCallback::youBlockedMeFor(const hidl_array<int64_t, 3> &ns) {
+    ALOGI("SERVER(FooCallback) 7.1: youBlockedMeFor");
+    {
+        Mutex::Autolock lock(mLock);
+        for (size_t i = 0; i < 3; i++) {
+            invokeInfo[i].callerBlockedNs = ns[i];
+        }
+        mCond.signal();
+    }
+    ALOGI("SERVER(FooCallback) 7.2: returned");
+    return Void();
+}
+
+IFooCallback* HIDL_FETCH_IFooCallback(const char* /* name */) {
+    return new FooCallback();
+}
+
+} // namespace implementation
+}  // namespace V1_0
+}  // namespace foo
+}  // namespace tests
+}  // namespace hardware
+}  // namespace android
diff --git a/test/FooCallback.h b/test/FooCallback.h
new file mode 100644
index 0000000..3164a9d
--- /dev/null
+++ b/test/FooCallback.h
@@ -0,0 +1,46 @@
+#ifndef ANDROID_HARDWARE_TESTS_FOO_V1_0_FOOCALLBACK_H
+#define ANDROID_HARDWARE_TESTS_FOO_V1_0_FOOCALLBACK_H
+
+#include <android/hardware/tests/foo/1.0/IFooCallback.h>
+#include <hidl/Status.h>
+#include <hidl/MQDescriptor.h>
+
+#include <utils/Condition.h>
+namespace android {
+namespace hardware {
+namespace tests {
+namespace foo {
+namespace V1_0 {
+namespace implementation {
+
+using ::android::hardware::tests::foo::V1_0::IFooCallback;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::hidl_string;
+using ::android::sp;
+
+struct FooCallback : public IFooCallback {
+    FooCallback();
+    // Methods from ::android::hardware::tests::foo::V1_0::IFooCallback follow.
+    Return<void> heyItsYou(const sp<IFooCallback>& cb)  override;
+    Return<bool> heyItsYouIsntIt(const sp<IFooCallback>& cb)  override;
+    Return<void> heyItsTheMeaningOfLife(uint8_t tmol)  override;
+    Return<void> reportResults(int64_t ns, reportResults_cb _hidl_cb)  override;
+    Return<void> youBlockedMeFor(const hidl_array<int64_t, 3 /* 3 */>& callerBlockedInfo)  override;
+
+    hidl_array<InvokeInfo, 3> invokeInfo;
+    Mutex mLock;
+    Condition mCond;
+};
+
+extern "C" IFooCallback* HIDL_FETCH_IFooCallback(const char* name);
+
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace foo
+}  // namespace tests
+}  // namespace hardware
+}  // namespace android
+
+#endif  // ANDROID_HARDWARE_TESTS_FOO_V1_0_FOOCALLBACK_H
diff --git a/test/main.cpp b/test/main.cpp
index a96bd5e..e437212 100644
--- a/test/main.cpp
+++ b/test/main.cpp
@@ -1,4 +1,7 @@
 #define LOG_TAG "hidl_test"
+
+#include "FooCallback.h"
+
 #include <android-base/logging.h>
 
 #include <android/hidl/manager/1.0/IServiceManager.h>
@@ -10,13 +13,11 @@
 #include <android/hidl/token/1.0/ITokenManager.h>
 
 #include <android/hardware/tests/foo/1.0/IFoo.h>
-#include <android/hardware/tests/foo/1.0/IFooCallback.h>
 #include <android/hardware/tests/foo/1.0/BnSimple.h>
 // TODO(b/33669138): remove
 #include <cutils/trace.h>
 #include <android/hardware/tests/foo/1.0/BsSimple.h>
 #include <android/hardware/tests/foo/1.0/BpSimple.h>
-
 #include <android/hardware/tests/bar/1.0/IBar.h>
 #include <android/hardware/tests/bar/1.0/IComplicated.h>
 #include <android/hardware/tests/inheritance/1.0/IFetcher.h>
@@ -85,6 +86,7 @@
 using ::android::hardware::tests::foo::V1_0::IFoo;
 using ::android::hardware::tests::foo::V1_0::IFooCallback;
 using ::android::hardware::tests::foo::V1_0::ISimple;
+using ::android::hardware::tests::foo::V1_0::implementation::FooCallback;
 using ::android::hardware::tests::bar::V1_0::IBar;
 using ::android::hardware::tests::bar::V1_0::IComplicated;
 using ::android::hardware::tests::inheritance::V1_0::IFetcher;
@@ -327,7 +329,6 @@
     sp<IFoo> foo;
     sp<IFoo> dyingFoo;
     sp<IBar> bar;
-    sp<IFooCallback> fooCb;
     sp<IGraph> graphInterface;
     sp<IPointer> pointerInterface;
     sp<IPointer> validationPointerInterface;
@@ -377,10 +378,6 @@
         ASSERT_NE(bar, nullptr);
         ASSERT_EQ(bar->isRemote(), gMode == BINDERIZED);
 
-        fooCb = IFooCallback::getService("foo callback", gMode == PASSTHROUGH /* getStub */);
-        ASSERT_NE(fooCb, nullptr);
-        ASSERT_EQ(fooCb->isRemote(), gMode == BINDERIZED);
-
         graphInterface = IGraph::getService("graph", gMode == PASSTHROUGH /* getStub */);
         ASSERT_NE(graphInterface, nullptr);
         ASSERT_EQ(graphInterface->isRemote(), gMode == BINDERIZED);
@@ -440,7 +437,6 @@
         addServer<IFetcher>("fetcher");
         addServer<IBar>("foo");
         addServer<IFoo>("dyingFoo");
-        addServer<IFooCallback>("foo callback");
         addServer<IGraph>("graph");
         addServer<IPointer>("pointer");
 
@@ -460,7 +456,6 @@
     sp<IFoo> foo;
     sp<IFoo> dyingFoo;
     sp<IBar> bar;
-    sp<IFooCallback> fooCb;
     sp<IGraph> graphInterface;
     sp<IPointer> pointerInterface;
     sp<IPointer> validationPointerInterface;
@@ -491,7 +486,6 @@
         foo = env->foo;
         dyingFoo = env->dyingFoo;
         bar = env->bar;
-        fooCb = env->fooCb;
         graphInterface = env->graphInterface;
         pointerInterface = env->pointerInterface;
         validationPointerInterface = env->validationPointerInterface;
@@ -504,7 +498,6 @@
         "android.hardware.tests.pointer@1.0::IPointer/pointer",
         "android.hardware.tests.bar@1.0::IBar/foo",
         "android.hardware.tests.inheritance@1.0::IFetcher/fetcher",
-        "android.hardware.tests.foo@1.0::IFooCallback/foo callback",
         "android.hardware.tests.inheritance@1.0::IParent/parent",
         "android.hardware.tests.inheritance@1.0::IParent/child",
         "android.hardware.tests.inheritance@1.0::IChild/child",
@@ -807,8 +800,10 @@
     EXPECT_LT(systemTime() - now,    1000) << "    for nothing";
 }
 
-// TODO: b/31819198
 TEST_F(HidlTest, FooCallMeTest) {
+
+    sp<IFooCallback> fooCb = new FooCallback();
+
     ALOGI("CLIENT call callMe.");
     // callMe is oneway, should return instantly.
     nsecs_t now;
@@ -816,10 +811,6 @@
     EXPECT_OK(foo->callMe(fooCb));
     EXPECT_LT(systemTime() - now, ONEWAY_TOLERANCE_NS);
     ALOGI("CLIENT callMe returned.");
-}
-
-// TODO: b/31819198
-TEST_F(HidlTest, ForReportResultsTest) {
 
     // Bar::callMe will invoke three methods on FooCallback; one will return
     // right away (even though it is a two-way method); the second one will
@@ -837,21 +828,27 @@
     // verify that eachof them executed, as expected, and took the length of
     // time to execute that we also expect.
 
+    const nsecs_t waitNs =
+        3 * DELAY_NS + TOLERANCE_NS;
     const nsecs_t reportResultsNs =
         2 * DELAY_NS + TOLERANCE_NS;
 
     ALOGI("CLIENT: Waiting for up to %" PRId64 " seconds.",
-          nanoseconds_to_seconds(reportResultsNs));
+          nanoseconds_to_seconds(waitNs));
 
-    fooCb->reportResults(reportResultsNs,
+    fooCb->reportResults(waitNs,
                 [&](int64_t timeLeftNs,
                     const hidl_array<IFooCallback::InvokeInfo, 3> &invokeResults) {
         ALOGI("CLIENT: FooCallback::reportResults() is returning data.");
         ALOGI("CLIENT: Waited for %" PRId64 " milliseconds.",
-              nanoseconds_to_milliseconds(reportResultsNs - timeLeftNs));
+              nanoseconds_to_milliseconds(waitNs - timeLeftNs));
 
-        EXPECT_LE(0, timeLeftNs);
-        EXPECT_LE(timeLeftNs, reportResultsNs);
+        EXPECT_LE(waitNs - timeLeftNs, reportResultsNs)
+                << "waited for "
+                << (timeLeftNs >= 0 ? "" : "more than ")
+                << (timeLeftNs >= 0 ? (waitNs - timeLeftNs) : waitNs)
+                << "ns, expect to finish in "
+                << reportResultsNs << " ns";
 
         // two-way method, was supposed to return right away
         EXPECT_TRUE(invokeResults[0].invoked);