Directly stream APK into install session

This commit is contained in:
vvb2060 2022-02-14 23:10:45 +08:00 committed by John Wu
parent 6dabd3bb2d
commit 945de8d9a0
2 changed files with 18 additions and 18 deletions

View File

@ -116,28 +116,24 @@ public class DownloadActivity extends Activity {
private void dlAPK() {
dialog = ProgressDialog.show(themed, getString(dling), getString(dling) + " " + APP_NAME, true);
Runnable onSuccess = () -> {
dialog.dismiss();
StubApk.restartProcess(this);
finish();
};
// Download and upgrade the app
File apk = dynLoad ? StubApk.current(this) : new File(getCacheDir(), "manager.apk");
request(apkLink).setExecutor(AsyncTask.THREAD_POOL_EXECUTOR).getAsFile(apk, file -> {
if (dynLoad) {
runOnUiThread(onSuccess);
} else {
var request = request(apkLink).setExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
if (dynLoad) {
request.getAsFile(StubApk.current(this), file -> StubApk.restartProcess(this));
} else {
request.getAsInputStream(input -> {
var session = APKInstall.startSession(this);
try {
session.install(this, file);
Intent intent = session.waitIntent();
if (intent != null)
startActivity(intent);
try (input; var out = session.openStream(this)) {
if (out != null)
APKInstall.transfer(input, out);
} catch (IOException e) {
e.printStackTrace();
error(e);
}
}
});
Intent intent = session.waitIntent();
if (intent != null)
startActivity(intent);
});
}
}
private void loadResources() {

View File

@ -94,6 +94,10 @@ public class Request implements Closeable {
return exec(this::getInputStream);
}
public void getAsInputStream(ResponseListener<InputStream> rs) {
submit(this::getInputStream, rs);
}
public void getAsFile(File out, ResponseListener<File> rs) {
submit(() -> dlFile(out), rs);
}