Lifecycle: detecting pending reads.

Once pending read detected, try to start the dataloader.

Bug: 153874006
Test: test PackageManagerShellCommandTest PackageManagerShellCommandIncrementalTest IncrementalServiceTest

Change-Id: Ia8169ccbb0f710317715e6fddb9bc6a718543766
diff --git a/services/incremental/ServiceWrappers.cpp b/services/incremental/ServiceWrappers.cpp
index 85f7441..08fb486 100644
--- a/services/incremental/ServiceWrappers.cpp
+++ b/services/incremental/ServiceWrappers.cpp
@@ -113,6 +113,23 @@
     JavaVM* const mJvm;
 };
 
+class RealLooperWrapper final : public LooperWrapper {
+public:
+    int addFd(int fd, int ident, int events, android::Looper_callbackFunc callback,
+              void* data) final {
+        return mLooper.addFd(fd, ident, events, callback, data);
+    }
+    int removeFd(int fd) final { return mLooper.removeFd(fd); }
+    void wake() final { return mLooper.wake(); }
+    int pollAll(int timeoutMillis) final { return mLooper.pollAll(timeoutMillis); }
+
+private:
+    struct Looper : public android::Looper {
+        Looper() : android::Looper(/*allowNonCallbacks=*/false) {}
+        ~Looper() {}
+    } mLooper;
+};
+
 class RealIncFs : public IncFsWrapper {
 public:
     RealIncFs() = default;
@@ -203,6 +220,10 @@
     return std::make_unique<RealJniWrapper>(mJvm);
 }
 
+std::unique_ptr<LooperWrapper> RealServiceManager::getLooper() {
+    return std::make_unique<RealLooperWrapper>();
+}
+
 static JavaVM* getJavaVm(JNIEnv* env) {
     CHECK(env);
     JavaVM* jvm = nullptr;