blob: 7075608674a1f7029c7176a2794de89b30d8dc52 [file] [log] [blame]
package com.android.server.backup.restore;
import android.os.ParcelFileDescriptor;
import libcore.io.IoUtils;
import java.io.FileInputStream;
import java.io.InputStream;
class FullRestoreEngineThread implements Runnable {
FullRestoreEngine mEngine;
InputStream mEngineStream;
private final boolean mMustKillAgent;
FullRestoreEngineThread(FullRestoreEngine engine, ParcelFileDescriptor engineSocket) {
mEngine = engine;
engine.setRunning(true);
// We *do* want this FileInputStream to own the underlying fd, so that
// when we are finished with it, it closes this end of the pipe in a way
// that signals its other end.
mEngineStream = new FileInputStream(engineSocket.getFileDescriptor(), true);
// Tell it to be sure to leave the agent instance up after finishing
mMustKillAgent = false;
}
//for adb restore
FullRestoreEngineThread(FullRestoreEngine engine, InputStream inputStream) {
mEngine = engine;
engine.setRunning(true);
mEngineStream = inputStream;
// philippov: in adb agent is killed after restore.
mMustKillAgent = true;
}
public boolean isRunning() {
return mEngine.isRunning();
}
public int waitForResult() {
return mEngine.waitForResult();
}
@Override
public void run() {
try {
while (mEngine.isRunning()) {
mEngine.restoreOneFile(mEngineStream, mMustKillAgent, mEngine.mBuffer,
mEngine.mOnlyPackage, mEngine.mAllowApks, mEngine.mEphemeralOpToken,
mEngine.mMonitor);
}
} finally {
// Because mEngineStream adopted its underlying FD, this also
// closes this end of the pipe.
IoUtils.closeQuietly(mEngineStream);
}
}
public void handleTimeout() {
IoUtils.closeQuietly(mEngineStream);
mEngine.handleTimeout();
}
}