Switching to FSM-based DL lifecycle.

This is a pure refactoring.

Bug: b/153874006
Test: atest PackageManagerShellCommandTest PackageManagerShellCommandIncrementalTest IncrementalServiceTest
Change-Id: Ieda2be08d7359fa69b2d328c85b3606de6d02b3d
diff --git a/services/incremental/IncrementalService.h b/services/incremental/IncrementalService.h
index 8c79d77..8b28bac 100644
--- a/services/incremental/IncrementalService.h
+++ b/services/incremental/IncrementalService.h
@@ -171,29 +171,31 @@
     public:
         DataLoaderStub(IncrementalService& service, MountId id, DataLoaderParamsParcel&& params,
                        FileSystemControlParcel&& control,
-                       const DataLoaderStatusListener* externalListener)
-              : mService(service),
-                mId(id),
-                mParams(std::move(params)),
-                mControl(std::move(control)),
-                mListener(externalListener ? *externalListener : DataLoaderStatusListener()) {}
+                       const DataLoaderStatusListener* externalListener);
         ~DataLoaderStub();
 
-        bool create();
+        bool requestCreate();
         bool requestStart();
-        void destroy();
+        bool requestDestroy();
 
-        // accessors
+        bool waitForDestroy(Clock::duration duration = std::chrono::seconds(60));
+
+        void onDump(int fd);
+
         MountId id() const { return mId; }
         const DataLoaderParamsParcel& params() const { return mParams; }
-        int status() const { return mStatus; }
-        bool startRequested() const { return mStartRequested; }
 
     private:
         binder::Status onStatusChanged(MountId mount, int newStatus) final;
 
+        bool create();
         bool start();
-        bool waitForDestroy();
+        bool destroy();
+
+        bool setTargetStatus(int status);
+        bool waitForStatus(int status, Clock::duration duration);
+
+        bool fsmStep();
 
         IncrementalService& mService;
         MountId const mId;
@@ -203,9 +205,9 @@
 
         std::mutex mStatusMutex;
         std::condition_variable mStatusCondition;
-        int mStatus = IDataLoaderStatusListener::DATA_LOADER_DESTROYED;
-        bool mStartRequested = false;
-        bool mDestroyRequested = true;
+        int mCurrentStatus = IDataLoaderStatusListener::DATA_LOADER_DESTROYED;
+        int mTargetStatus = IDataLoaderStatusListener::DATA_LOADER_DESTROYED;
+        TimePoint mTargetStatusTs = {};
     };
     using DataLoaderStubPtr = sp<DataLoaderStub>;