Keep only service binding in DataLoaderManager.
This simplifies:
- resource management - no extra copies of controls,
- state management - all states in one place, no more hidden (bound but
not created) state.
Bug: b/153874006
Test: atest PackageManagerShellCommandTest PackageManagerShellCommandIncrementalTest IncrementalServiceTest
Change-Id: I3d16a099c7f42fcf14637c5a8e96bd6f99e073d1
diff --git a/services/incremental/IncrementalService.cpp b/services/incremental/IncrementalService.cpp
index a6c45cc..a1b4f24 100644
--- a/services/incremental/IncrementalService.cpp
+++ b/services/incremental/IncrementalService.cpp
@@ -1709,12 +1709,30 @@
[this, status] { return mCurrentStatus == status; });
}
+bool IncrementalService::DataLoaderStub::bind() {
+ bool result = false;
+ auto status = mService.mDataLoaderManager->bindToDataLoader(mId, mParams, this, &result);
+ if (!status.isOk() || !result) {
+ LOG(ERROR) << "Failed to bind a data loader for mount " << mId;
+ return false;
+ }
+ return true;
+}
+
bool IncrementalService::DataLoaderStub::create() {
- bool created = false;
- auto status = mService.mDataLoaderManager->initializeDataLoader(mId, mParams, mControl, this,
- &created);
- if (!status.isOk() || !created) {
- LOG(ERROR) << "Failed to create a data loader for mount " << mId;
+ sp<IDataLoader> dataloader;
+ auto status = mService.mDataLoaderManager->getDataLoader(mId, &dataloader);
+ if (!status.isOk()) {
+ LOG(ERROR) << "Failed to get dataloader: " << status.toString8();
+ return false;
+ }
+ if (!dataloader) {
+ LOG(ERROR) << "DataLoader is null: " << status.toString8();
+ return false;
+ }
+ status = dataloader->create(mId, mParams, mControl, this);
+ if (!status.isOk()) {
+ LOG(ERROR) << "Failed to start DataLoader: " << status.toString8();
return false;
}
return true;
@@ -1740,7 +1758,7 @@
}
bool IncrementalService::DataLoaderStub::destroy() {
- mService.mDataLoaderManager->destroyDataLoader(mId);
+ mService.mDataLoaderManager->unbindFromDataLoader(mId);
return true;
}
@@ -1776,6 +1794,8 @@
case IDataLoaderStatusListener::DATA_LOADER_CREATED:
switch (currentStatus) {
case IDataLoaderStatusListener::DATA_LOADER_DESTROYED:
+ return bind();
+ case IDataLoaderStatusListener::DATA_LOADER_BOUND:
return create();
}
break;