Cast AsyncTask.THREAD_POOL_EXECUTOR to ThreadPoolExecutor

This commit is contained in:
topjohnwu 2019-02-02 02:50:49 -05:00
parent 70eba568af
commit 699debdaca
11 changed files with 38 additions and 47 deletions

View File

@ -3,6 +3,7 @@ package com.topjohnwu.magisk;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.os.AsyncTask;
import android.preference.PreferenceManager;
import com.topjohnwu.magisk.core.BuildConfig;
@ -14,10 +15,13 @@ import com.topjohnwu.net.Networking;
import com.topjohnwu.superuser.ContainerApp;
import com.topjohnwu.superuser.Shell;
import java.util.concurrent.ThreadPoolExecutor;
public class App extends ContainerApp {
public static App self;
public boolean init = false;
public static ThreadPoolExecutor THREAD_POOL;
// Global resources
public SharedPreferences prefs;
@ -29,6 +33,7 @@ public class App extends ContainerApp {
Shell.Config.verboseLogging(BuildConfig.DEBUG);
Shell.Config.addInitializers(RootUtils.class);
Shell.Config.setTimeout(2);
THREAD_POOL = (ThreadPoolExecutor) AsyncTask.THREAD_POOL_EXECUTOR;
}
@Override

View File

@ -1,7 +1,6 @@
package com.topjohnwu.magisk.tasks;
import android.net.Uri;
import android.os.AsyncTask;
import com.topjohnwu.magisk.App;
import com.topjohnwu.magisk.Const;
@ -70,7 +69,7 @@ public abstract class FlashZip {
}
public void exec() {
AsyncTask.THREAD_POOL_EXECUTOR.execute(() -> {
App.THREAD_POOL.execute(() -> {
boolean success = false;
try {
success = flash();

View File

@ -1,7 +1,6 @@
package com.topjohnwu.magisk.tasks;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.text.TextUtils;
@ -308,7 +307,7 @@ public abstract class MagiskInstaller {
protected abstract void onResult(boolean success);
public void exec() {
AsyncTask.THREAD_POOL_EXECUTOR.execute(() -> {
App.THREAD_POOL.execute(() -> {
boolean b = operations();
UiThreadHandler.run(() -> onResult(b));
});

View File

@ -1,7 +1,6 @@
package com.topjohnwu.magisk.tasks;
import android.database.Cursor;
import android.os.AsyncTask;
import com.topjohnwu.magisk.App;
import com.topjohnwu.magisk.Config;
@ -142,7 +141,7 @@ public class UpdateRepos {
public void exec(boolean force) {
Topic.reset(Topic.REPO_LOAD_DONE);
AsyncTask.THREAD_POOL_EXECUTOR.execute(() -> {
App.THREAD_POOL.execute(() -> {
cached = Collections.synchronizedSet(app.repoDB.getRepoIDSet());
threadPool = Executors.newFixedThreadPool(CORE_POOL_SIZE);

View File

@ -8,7 +8,6 @@ import android.content.res.Configuration;
import android.content.res.Resources;
import android.database.Cursor;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.provider.OpenableColumns;
import android.widget.Toast;
@ -97,7 +96,7 @@ public class Utils {
public static void loadModules() {
Topic.reset(Topic.MODULE_LOAD_DONE);
AsyncTask.THREAD_POOL_EXECUTOR.execute(() -> {
App.THREAD_POOL.execute(() -> {
Map<String, Module> moduleMap = new ValueSortedMap<>();
SuFile path = new SuFile(Const.MAGISK_PATH);
SuFile[] modules = path.listFiles(

View File

@ -6,7 +6,6 @@ import android.os.Bundle;
import android.text.TextUtils;
import com.topjohnwu.magisk.components.BaseActivity;
import com.topjohnwu.magisk.tasks.CheckUpdates;
import com.topjohnwu.magisk.tasks.UpdateRepos;
import com.topjohnwu.magisk.uicomponents.Notifications;
import com.topjohnwu.magisk.uicomponents.Shortcuts;

View File

@ -151,7 +151,7 @@ public class ApplicationAdapter extends RecyclerView.Adapter<ApplicationAdapter.
}
public void refresh() {
AsyncTask.THREAD_POOL_EXECUTOR.execute(this::loadApps);
AsyncTask.SERIAL_EXECUTOR.execute(this::loadApps);
}
static class ViewHolder extends RecyclerView.ViewHolder {

View File

@ -3,7 +3,6 @@ package com.topjohnwu.magisk.components;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import com.topjohnwu.magisk.App;
import com.topjohnwu.magisk.ClassMap;
@ -17,7 +16,6 @@ import com.topjohnwu.magisk.uicomponents.Shortcuts;
import com.topjohnwu.magisk.utils.DownloadApp;
import com.topjohnwu.magisk.utils.SuLogger;
import com.topjohnwu.superuser.Shell;
import com.topjohnwu.superuser.ShellUtils;
public class GeneralReceiver extends BroadcastReceiver {
@ -61,15 +59,15 @@ public class GeneralReceiver extends BroadcastReceiver {
break;
case "boot":
default:
AsyncTask.THREAD_POOL_EXECUTOR.execute(() -> {
/* Devices with DTBO might want to patch dtbo.img.
* However, that is not possible if Magisk is installed by
* patching boot image with Magisk Manager and flashed via
* fastboot, since at that time we do not have root.
* Check for dtbo status every boot time, and prompt user
* to reboot if dtbo wasn't patched and patched by Magisk Manager.
* */
if (Shell.rootAccess() && ShellUtils.fastCmdResult("mm_patch_dtbo"))
/* Devices with DTBO might want to patch dtbo.img.
* However, that is not possible if Magisk is installed by
* patching boot image with Magisk Manager and flashed via
* fastboot, since at that time we do not have root.
* Check for dtbo status every boot time, and prompt user
* to reboot if dtbo wasn't patched and patched by Magisk Manager.
* */
Shell.su("mm_patch_dtbo").submit(result -> {
if (result.isSuccess())
Notifications.dtboPatched();
});
break;

View File

@ -5,12 +5,10 @@ import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.view.LayoutInflater;
import android.view.View;
import com.caverock.androidsvg.SVG;
import com.caverock.androidsvg.SVGParseException;
import com.topjohnwu.magisk.App;
import com.topjohnwu.magisk.R;
import com.topjohnwu.magisk.utils.Utils;
@ -22,6 +20,7 @@ import com.topjohnwu.superuser.ShellUtils;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.concurrent.Callable;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
@ -72,32 +71,29 @@ public class MarkDownWindow {
@Override
public void load(@NonNull String url, @NonNull AsyncDrawable asyncDrawable) {
AsyncTask.THREAD_POOL_EXECUTOR.execute(() -> {
App.THREAD_POOL.submit((Callable<?>) () -> {
InputStream is = Networking.get(url).execForInputStream().getResult();
if (is == null)
return;
return null;
ByteArrayStream buf = new ByteArrayStream();
buf.readFrom(is);
// First try default drawables
Drawable drawable = Drawable.createFromStream(buf.getInputStream(), "");
if (drawable == null) {
// SVG
try {
SVG svg = SVG.getFromInputStream(buf.getInputStream());
int width = Utils.dpInPx((int) svg.getDocumentWidth());
int height = Utils.dpInPx((int) svg.getDocumentHeight());
final Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_4444);
final Canvas canvas = new Canvas(bitmap);
float density = App.self.getResources().getDisplayMetrics().density;
canvas.scale(density, density);
svg.renderToCanvas(canvas);
drawable = new BitmapDrawable(App.self.getResources(), bitmap);
} catch (SVGParseException ignored) {}
}
if (drawable != null) {
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
asyncDrawable.setResult(drawable);
SVG svg = SVG.getFromInputStream(buf.getInputStream());
int width = Utils.dpInPx((int) svg.getDocumentWidth());
int height = Utils.dpInPx((int) svg.getDocumentHeight());
final Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_4444);
final Canvas canvas = new Canvas(bitmap);
float density = App.self.getResources().getDisplayMetrics().density;
canvas.scale(density, density);
svg.renderToCanvas(canvas);
drawable = new BitmapDrawable(App.self.getResources(), bitmap);
}
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
asyncDrawable.setResult(drawable);
return null;
});
}

View File

@ -1,7 +1,5 @@
package com.topjohnwu.magisk.utils;
import android.os.AsyncTask;
import com.topjohnwu.magisk.App;
import com.topjohnwu.magisk.BuildConfig;
import com.topjohnwu.magisk.Config;
@ -32,7 +30,7 @@ public class DownloadApp {
ProgressNotification progress = new ProgressNotification(name);
listener.progress = progress;
Networking.get(Config.managerLink)
.setExecutor(AsyncTask.THREAD_POOL_EXECUTOR)
.setExecutor(App.THREAD_POOL)
.setDownloadProgressListener(progress)
.setErrorHandler((conn, e) -> progress.dlFail())
.getAsFile(apk, listener);

View File

@ -1,6 +1,5 @@
package com.topjohnwu.magisk.utils;
import android.os.AsyncTask;
import android.widget.Toast;
import com.topjohnwu.magisk.App;
@ -136,14 +135,14 @@ public class PatchAPK {
}
public static void hideManager() {
AsyncTask.THREAD_POOL_EXECUTOR.execute(() -> {
App.THREAD_POOL.execute(() -> {
App app = App.self;
NotificationCompat.Builder progress =
Notifications.progress(app.getString(R.string.hide_manager_title));
Notifications.mgr.notify(Const.ID.HIDE_MANAGER_NOTIFICATION_ID, progress.build());
boolean b = patchAndHide();
if(!patchAndHide())
Utils.toast(R.string.hide_manager_fail_toast, Toast.LENGTH_LONG);
Notifications.mgr.cancel(Const.ID.HIDE_MANAGER_NOTIFICATION_ID);
if (!b) Utils.toast(R.string.hide_manager_fail_toast, Toast.LENGTH_LONG);
});
}
}