Merge "Only lookup dataLoader when necessary." into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
c9d7a7d7b7
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user