diff --git a/androbd/src/main/java/com/fr3ts0n/ecu/gui/androbd/UsbDeviceListActivity.java b/androbd/src/main/java/com/fr3ts0n/ecu/gui/androbd/UsbDeviceListActivity.java index ab695e84..9ddcb9d7 100644 --- a/androbd/src/main/java/com/fr3ts0n/ecu/gui/androbd/UsbDeviceListActivity.java +++ b/androbd/src/main/java/com/fr3ts0n/ecu/gui/androbd/UsbDeviceListActivity.java @@ -25,9 +25,9 @@ import android.content.Context; import android.content.Intent; import android.hardware.usb.UsbDevice; import android.hardware.usb.UsbManager; -import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; +import android.os.Looper; import android.os.Message; import android.view.LayoutInflater; import android.view.View; @@ -44,6 +44,8 @@ import com.hoho.android.usbserial.driver.UsbSerialProber; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import java.util.logging.Logger; /** @@ -62,9 +64,9 @@ public final class UsbDeviceListActivity extends Activity private UsbManager mUsbManager; private static final int MESSAGE_REFRESH = 101; private static final long REFRESH_TIMEOUT_MILLIS = 5000; + private final ExecutorService mExecutor = Executors.newSingleThreadExecutor(); - @SuppressLint("HandlerLeak") - private final Handler mHandler = new Handler() + private final Handler mHandler = new Handler(Looper.getMainLooper()) { @Override public void handleMessage(Message msg) @@ -174,43 +176,30 @@ public final class UsbDeviceListActivity extends Activity mHandler.removeMessages(MESSAGE_REFRESH); } - @SuppressLint("StaticFieldLeak") + @SuppressLint("StringFormatInvalid") private void refreshDeviceList() { - new AsyncTask>() - { - @Override - protected List doInBackground(Void... params) + mExecutor.submit(() -> { + log.fine("Refreshing device list ..."); + final List drivers = + UsbSerialProber.getDefaultProber().findAllDrivers(mUsbManager); + final List result = new ArrayList<>(); + for (final UsbSerialDriver driver : drivers) { - log.fine("Refreshing device list ..."); - final List drivers = - UsbSerialProber.getDefaultProber().findAllDrivers(mUsbManager); - final List result = new ArrayList<>(); - - for (final UsbSerialDriver driver : drivers) - { - final List ports = driver.getPorts(); - log.fine(String.format("+ %s: %s selectedPort%s", - driver, ports.size(), - ports.size() == 1 ? "" : "s")); - result.addAll(ports); - } - - return result; + final List ports = driver.getPorts(); + log.fine(String.format("+ %s: %s selectedPort%s", + driver, ports.size(), + ports.size() == 1 ? "" : "s")); + result.addAll(ports); } - - @SuppressLint("StringFormatInvalid") - @Override - protected void onPostExecute(List result) - { + mHandler.post(() -> { mEntries.clear(); mEntries.addAll(result); TextView numFound = findViewById(R.id.num_found); numFound.setText(getString(R.string.devices_found, result.size())); mAdapter.notifyDataSetChanged(); log.fine("Done refreshing, " + mEntries.size() + " entries found."); - } - - }.execute(); + }); + }); } }