From 05920fb17492f9aaebf476fb16e91b2a3bd0f4c8 Mon Sep 17 00:00:00 2001 From: Sergey Eremin Date: Thu, 7 Jun 2018 17:37:11 +0530 Subject: [PATCH] Move installation to background thread --- .../com/dragons/aurora/InstallerRoot.java | 38 ++++++++++--------- .../fragment/details/ButtonInstall.java | 4 +- .../com/dragons/aurora/task/InstallTask.java | 33 ++++++++-------- 3 files changed, 41 insertions(+), 34 deletions(-) diff --git a/app/src/main/java/com/dragons/aurora/InstallerRoot.java b/app/src/main/java/com/dragons/aurora/InstallerRoot.java index d1f4262b5..5ec0f146a 100644 --- a/app/src/main/java/com/dragons/aurora/InstallerRoot.java +++ b/app/src/main/java/com/dragons/aurora/InstallerRoot.java @@ -1,9 +1,13 @@ package com.dragons.aurora; import android.content.Context; +import android.util.Log; import com.dragons.aurora.model.App; -import com.dragons.aurora.task.InstallTask; + +import java.util.List; + +import eu.chainfire.libsuperuser.Shell; public class InstallerRoot extends InstallerBackground { @@ -14,23 +18,23 @@ public class InstallerRoot extends InstallerBackground { @Override protected void install(App app) { InstallationState.setInstalling(app.getPackageName()); - getTask(app).execute(Paths.getApkPath(context, app.getPackageName(), app.getVersionCode()).toString()); + boolean success = shellInstall(Paths.getApkPath(context, app.getPackageName(), app.getVersionCode()).toString()); + if (success) { + InstallationState.setSuccess(app.getPackageName()); + } else { + InstallationState.setFailure(app.getPackageName()); + } + sendBroadcast(app.getPackageName(), true); + postInstallationResult(app, success); } - private InstallTask getTask(final App app) { - return new InstallTask() { - - @Override - protected void onPostExecute(Boolean success) { - super.onPostExecute(success); - if (success) { - InstallationState.setSuccess(app.getPackageName()); - } else { - InstallationState.setFailure(app.getPackageName()); - } - sendBroadcast(app.getPackageName(), true); - postInstallationResult(app, success); + private boolean shellInstall(String file) { + List lines = Shell.SU.run("pm install -i \"" + BuildConfig.APPLICATION_ID + "\" -r " + file); + if (null != lines) { + for (String line : lines) { + Log.i(getClass().getSimpleName(), line); } - }; + } + return null != lines && lines.size() == 1 && lines.get(0).equals("Success"); } -} +} \ No newline at end of file diff --git a/app/src/main/java/com/dragons/aurora/fragment/details/ButtonInstall.java b/app/src/main/java/com/dragons/aurora/fragment/details/ButtonInstall.java index 968481d11..0d82e9190 100644 --- a/app/src/main/java/com/dragons/aurora/fragment/details/ButtonInstall.java +++ b/app/src/main/java/com/dragons/aurora/fragment/details/ButtonInstall.java @@ -5,12 +5,12 @@ import android.content.Context; import android.view.View; import com.dragons.aurora.InstallationState; -import com.dragons.aurora.InstallerFactory; import com.dragons.aurora.Paths; import com.dragons.aurora.R; import com.dragons.aurora.activities.AuroraActivity; import com.dragons.aurora.downloader.DownloadState; import com.dragons.aurora.model.App; +import com.dragons.aurora.task.InstallTask; public class ButtonInstall extends Button { @@ -43,6 +43,6 @@ public class ButtonInstall extends Button { protected void onButtonClick(View v) { disable(R.string.details_installing); ((NotificationManager) activity.getSystemService(Context.NOTIFICATION_SERVICE)).cancel(app.getDisplayName().hashCode()); - InstallerFactory.get(activity).verifyAndInstall(app); + new InstallTask(activity, app).execute(); } } diff --git a/app/src/main/java/com/dragons/aurora/task/InstallTask.java b/app/src/main/java/com/dragons/aurora/task/InstallTask.java index 5da014f7a..ad173cea2 100644 --- a/app/src/main/java/com/dragons/aurora/task/InstallTask.java +++ b/app/src/main/java/com/dragons/aurora/task/InstallTask.java @@ -1,26 +1,29 @@ package com.dragons.aurora.task; +import android.content.Context; import android.os.AsyncTask; -import android.util.Log; -import com.dragons.aurora.BuildConfig; +import com.dragons.aurora.InstallerAbstract; +import com.dragons.aurora.InstallerFactory; +import com.dragons.aurora.model.App; -import java.util.List; +public class InstallTask extends AsyncTask { -import eu.chainfire.libsuperuser.Shell; + private App app; + private InstallerAbstract installer; -public class InstallTask extends AsyncTask { + public InstallTask(Context context, App app) { + this(InstallerFactory.get(context), app); + } + + public InstallTask(InstallerAbstract installer, App app) { + this.installer = installer; + this.app = app; + } @Override - protected Boolean doInBackground(String... params) { - String file = params[0]; - Log.i(getClass().getSimpleName(), "Installing update " + file); - List lines = Shell.SU.run("pm install -i \"" + BuildConfig.APPLICATION_ID + "\" -r " + file); - if (null != lines) { - for (String line : lines) { - Log.i(getClass().getSimpleName(), line); - } - } - return null != lines && lines.size() == 1 && lines.get(0).equals("Success"); + protected Void doInBackground(Void... voids) { + installer.verifyAndInstall(app); + return null; } }