package org.commcare.tasks;
import org.commcare.CommCareApp;
import org.commcare.CommCareApplication;
import org.commcare.engine.resource.AndroidResourceManager;
import org.commcare.engine.resource.AppInstallStatus;
import org.commcare.engine.resource.ResourceInstallUtils;
import org.commcare.resources.model.UnresolvedResourceException;
import org.commcare.tasks.templates.CommCareTask;
import org.commcare.utils.AndroidCommCarePlatform;
/**
* Blocks user while performing installation of staged update table.
*
* @author Phillip Mates (pmates@dimagi.com)
*/
public abstract class InstallStagedUpdateTask<R>
extends CommCareTask<Void, int[], AppInstallStatus, R> {
public InstallStagedUpdateTask(int taskId) {
this.taskId = taskId;
TAG = InstallStagedUpdateTask.class.getSimpleName();
}
@Override
protected AppInstallStatus doTaskBackground(Void... params) {
return installStagedUpdate();
}
public static AppInstallStatus installStagedUpdate() {
CommCareApp app = CommCareApplication.instance().getCurrentApp();
app.setupSandbox();
AndroidCommCarePlatform platform = app.getCommCarePlatform();
AndroidResourceManager resourceManager =
new AndroidResourceManager(platform);
if (!resourceManager.isUpgradeTableStaged()) {
resourceManager.recordUpdateInstallFailure(AppInstallStatus.UnknownFailure);
return AppInstallStatus.UnknownFailure;
}
try {
resourceManager.upgrade();
} catch (UnresolvedResourceException e) {
resourceManager.recordUpdateInstallFailure(e);
return AppInstallStatus.MissingResources;
}
ResourceInstallUtils.initAndCommitApp(app);
return AppInstallStatus.Installed;
}
}