Merge "Only lookup dataLoader when necessary." into sc-dev

This commit is contained in:
Alex Buynytskyy
2021-05-17 22:30:23 +00:00
committed by Android (Google) Code Review

View File

@@ -3762,13 +3762,6 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
} }
} }
final DataLoaderManager dataLoaderManager = mContext.getSystemService(
DataLoaderManager.class);
if (dataLoaderManager == null) {
throw new PackageManagerException(INSTALL_FAILED_MEDIA_UNAVAILABLE,
"Failed to find data loader manager service");
}
final DataLoaderParams params = this.params.dataLoaderParams; final DataLoaderParams params = this.params.dataLoaderParams;
final boolean manualStartAndDestroy = !isIncrementalInstallation(); final boolean manualStartAndDestroy = !isIncrementalInstallation();
final boolean systemDataLoader = isSystemDataLoaderInstallation(); final boolean systemDataLoader = isSystemDataLoaderInstallation();
@@ -3793,20 +3786,13 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
return; return;
} }
try { try {
IDataLoader dataLoader = dataLoaderManager.getDataLoader(dataLoaderId);
if (dataLoader == null) {
mDataLoaderFinished = true;
dispatchSessionValidationFailure(INSTALL_FAILED_MEDIA_UNAVAILABLE,
"Failure to obtain data loader");
return;
}
switch (status) { switch (status) {
case IDataLoaderStatusListener.DATA_LOADER_BOUND: { case IDataLoaderStatusListener.DATA_LOADER_BOUND: {
if (manualStartAndDestroy) { if (manualStartAndDestroy) {
FileSystemControlParcel control = new FileSystemControlParcel(); FileSystemControlParcel control = new FileSystemControlParcel();
control.callback = new FileSystemConnector(addedFiles); control.callback = new FileSystemConnector(addedFiles);
dataLoader.create(dataLoaderId, params.getData(), control, this); getDataLoader(dataLoaderId).create(dataLoaderId, params.getData(),
control, this);
} }
break; break;
@@ -3815,12 +3801,12 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
if (manualStartAndDestroy) { if (manualStartAndDestroy) {
// IncrementalFileStorages will call start after all files are // IncrementalFileStorages will call start after all files are
// created in IncFS. // created in IncFS.
dataLoader.start(dataLoaderId); getDataLoader(dataLoaderId).start(dataLoaderId);
} }
break; break;
} }
case IDataLoaderStatusListener.DATA_LOADER_STARTED: { case IDataLoaderStatusListener.DATA_LOADER_STARTED: {
dataLoader.prepareImage( getDataLoader(dataLoaderId).prepareImage(
dataLoaderId, dataLoaderId,
addedFiles.toArray( addedFiles.toArray(
new InstallationFileParcel[addedFiles.size()]), new InstallationFileParcel[addedFiles.size()]),
@@ -3836,7 +3822,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
dispatchSessionSealed(); dispatchSessionSealed();
} }
if (manualStartAndDestroy) { if (manualStartAndDestroy) {
dataLoader.destroy(dataLoaderId); getDataLoader(dataLoaderId).destroy(dataLoaderId);
} }
break; break;
} }
@@ -3845,7 +3831,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
dispatchSessionValidationFailure(INSTALL_FAILED_MEDIA_UNAVAILABLE, dispatchSessionValidationFailure(INSTALL_FAILED_MEDIA_UNAVAILABLE,
"Failed to prepare image."); "Failed to prepare image.");
if (manualStartAndDestroy) { if (manualStartAndDestroy) {
dataLoader.destroy(dataLoaderId); getDataLoader(dataLoaderId).destroy(dataLoaderId);
} }
break; break;
} }
@@ -3860,11 +3846,12 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
break; break;
} }
case IDataLoaderStatusListener.DATA_LOADER_UNRECOVERABLE: case IDataLoaderStatusListener.DATA_LOADER_UNRECOVERABLE:
mDataLoaderFinished = true; throw new PackageManagerException(INSTALL_FAILED_MEDIA_UNAVAILABLE,
dispatchSessionValidationFailure(INSTALL_FAILED_MEDIA_UNAVAILABLE,
"DataLoader reported unrecoverable failure."); "DataLoader reported unrecoverable failure.");
break;
} }
} catch (PackageManagerException e) {
mDataLoaderFinished = true;
dispatchSessionValidationFailure(e.error, ExceptionUtils.getCompleteMessage(e));
} catch (RemoteException e) { } catch (RemoteException e) {
// In case of streaming failure we don't want to fail or commit the session. // In case of streaming failure we don't want to fail or commit the session.
// Just return from this method and allow caller to commit again. // Just return from this method and allow caller to commit again.
@@ -3939,7 +3926,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
} }
final long bindDelayMs = 0; final long bindDelayMs = 0;
if (!dataLoaderManager.bindToDataLoader(sessionId, params.getData(), bindDelayMs, if (!getDataLoaderManager().bindToDataLoader(sessionId, params.getData(), bindDelayMs,
statusListener)) { statusListener)) {
throw new PackageManagerException(INSTALL_FAILED_MEDIA_UNAVAILABLE, throw new PackageManagerException(INSTALL_FAILED_MEDIA_UNAVAILABLE,
"Failed to initialize data loader"); "Failed to initialize data loader");
@@ -3948,6 +3935,24 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
return false; return false;
} }
private DataLoaderManager getDataLoaderManager() throws PackageManagerException {
DataLoaderManager dataLoaderManager = mContext.getSystemService(DataLoaderManager.class);
if (dataLoaderManager == null) {
throw new PackageManagerException(INSTALL_FAILED_MEDIA_UNAVAILABLE,
"Failed to find data loader manager service");
}
return dataLoaderManager;
}
private IDataLoader getDataLoader(int dataLoaderId) throws PackageManagerException {
IDataLoader dataLoader = getDataLoaderManager().getDataLoader(dataLoaderId);
if (dataLoader == null) {
throw new PackageManagerException(INSTALL_FAILED_MEDIA_UNAVAILABLE,
"Failure to obtain data loader");
}
return dataLoader;
}
private void dispatchSessionValidationFailure(int error, String detailMessage) { private void dispatchSessionValidationFailure(int error, String detailMessage) {
mHandler.obtainMessage(MSG_SESSION_VALIDATION_FAILURE, error, -1, mHandler.obtainMessage(MSG_SESSION_VALIDATION_FAILURE, error, -1,
detailMessage).sendToTarget(); detailMessage).sendToTarget();