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

View File

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