Merge "Restore app uninstall on cable disconnect during ADB streaming." into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
306e47692f
@@ -883,6 +883,14 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
|
|||||||
return isDataLoaderInstallation() && params.dataLoaderParams.getType() == INCREMENTAL;
|
return isDataLoaderInstallation() && params.dataLoaderParams.getType() == INCREMENTAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isSystemDataLoaderInstallation() {
|
||||||
|
if (!isDataLoaderInstallation()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return SYSTEM_DATA_LOADER_PACKAGE.equals(
|
||||||
|
this.params.dataLoaderParams.getComponentName().getPackageName());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return {@code true} iff the installing is app an device owner or affiliated profile owner.
|
* @return {@code true} iff the installing is app an device owner or affiliated profile owner.
|
||||||
*/
|
*/
|
||||||
@@ -1058,9 +1066,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
|
|||||||
"DataLoader installation of APEX modules is not allowed.");
|
"DataLoader installation of APEX modules is not allowed.");
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean systemDataLoader = SYSTEM_DATA_LOADER_PACKAGE.equals(
|
if (isSystemDataLoaderInstallation() && mContext.checkCallingOrSelfPermission(
|
||||||
this.params.dataLoaderParams.getComponentName().getPackageName());
|
|
||||||
if (systemDataLoader && mContext.checkCallingOrSelfPermission(
|
|
||||||
Manifest.permission.USE_SYSTEM_DATA_LOADERS)
|
Manifest.permission.USE_SYSTEM_DATA_LOADERS)
|
||||||
!= PackageManager.PERMISSION_GRANTED) {
|
!= PackageManager.PERMISSION_GRANTED) {
|
||||||
throw new SecurityException("You need the "
|
throw new SecurityException("You need the "
|
||||||
@@ -2107,6 +2113,23 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
|
|||||||
dispatchSessionFinished(error, detailedMessage, null);
|
dispatchSessionFinished(error, detailedMessage, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void onSystemDataLoaderUnrecoverable() {
|
||||||
|
final PackageManagerService packageManagerService = mPm;
|
||||||
|
final String packageName = mPackageName;
|
||||||
|
if (TextUtils.isEmpty(packageName)) {
|
||||||
|
// The package has not been installed.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
mHandler.post(() -> {
|
||||||
|
if (packageManagerService.deletePackageX(packageName,
|
||||||
|
PackageManager.VERSION_CODE_HIGHEST, UserHandle.USER_SYSTEM,
|
||||||
|
PackageManager.DELETE_ALL_USERS, true /*removedBySystem*/)
|
||||||
|
!= PackageManager.DELETE_SUCCEEDED) {
|
||||||
|
Slog.e(TAG, "Failed to uninstall package with failed dataloader: " + packageName);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If session should be sealed, then it's sealed to prevent further modification.
|
* If session should be sealed, then it's sealed to prevent further modification.
|
||||||
* If the session can't be sealed then it's destroyed.
|
* If the session can't be sealed then it's destroyed.
|
||||||
@@ -3740,6 +3763,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
|
|||||||
|
|
||||||
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 IDataLoaderStatusListener statusListener = new IDataLoaderStatusListener.Stub() {
|
final IDataLoaderStatusListener statusListener = new IDataLoaderStatusListener.Stub() {
|
||||||
@Override
|
@Override
|
||||||
public void onStatusChanged(int dataLoaderId, int status) {
|
public void onStatusChanged(int dataLoaderId, int status) {
|
||||||
@@ -3751,10 +3775,15 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (mDestroyed || mDataLoaderFinished) {
|
if (mDestroyed || mDataLoaderFinished) {
|
||||||
// No need to worry about post installation
|
switch (status) {
|
||||||
|
case IDataLoaderStatusListener.DATA_LOADER_UNRECOVERABLE:
|
||||||
|
if (systemDataLoader) {
|
||||||
|
onSystemDataLoaderUnrecoverable();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
IDataLoader dataLoader = dataLoaderManager.getDataLoader(dataLoaderId);
|
IDataLoader dataLoader = dataLoaderManager.getDataLoader(dataLoaderId);
|
||||||
if (dataLoader == null) {
|
if (dataLoader == null) {
|
||||||
@@ -3848,14 +3877,18 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
|
|||||||
healthCheckParams.unhealthyTimeoutMs = INCREMENTAL_STORAGE_UNHEALTHY_TIMEOUT_MS;
|
healthCheckParams.unhealthyTimeoutMs = INCREMENTAL_STORAGE_UNHEALTHY_TIMEOUT_MS;
|
||||||
healthCheckParams.unhealthyMonitoringMs = INCREMENTAL_STORAGE_UNHEALTHY_MONITORING_MS;
|
healthCheckParams.unhealthyMonitoringMs = INCREMENTAL_STORAGE_UNHEALTHY_MONITORING_MS;
|
||||||
|
|
||||||
final boolean systemDataLoader = SYSTEM_DATA_LOADER_PACKAGE.equals(
|
|
||||||
params.getComponentName().getPackageName());
|
|
||||||
|
|
||||||
final IStorageHealthListener healthListener = new IStorageHealthListener.Stub() {
|
final IStorageHealthListener healthListener = new IStorageHealthListener.Stub() {
|
||||||
@Override
|
@Override
|
||||||
public void onHealthStatus(int storageId, int status) {
|
public void onHealthStatus(int storageId, int status) {
|
||||||
if (mDestroyed || mDataLoaderFinished) {
|
if (mDestroyed || mDataLoaderFinished) {
|
||||||
// No need to worry about post installation
|
// App's installed.
|
||||||
|
switch (status) {
|
||||||
|
case IStorageHealthListener.HEALTH_STATUS_UNHEALTHY:
|
||||||
|
if (systemDataLoader) {
|
||||||
|
onSystemDataLoaderUnrecoverable();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user