Merge pull request #338 from chrisdebian/fix/usb-list-async-task-migration

refactor: replace deprecated AsyncTask in UsbDeviceListActivity
This commit is contained in:
Erwin Scheuch-Heilig
2026-07-06 17:59:08 +02:00
committed by GitHub

View File

@@ -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<Void, Void, List<UsbSerialPort>>()
{
@Override
protected List<UsbSerialPort> doInBackground(Void... params)
mExecutor.submit(() -> {
log.fine("Refreshing device list ...");
final List<UsbSerialDriver> drivers =
UsbSerialProber.getDefaultProber().findAllDrivers(mUsbManager);
final List<UsbSerialPort> result = new ArrayList<>();
for (final UsbSerialDriver driver : drivers)
{
log.fine("Refreshing device list ...");
final List<UsbSerialDriver> drivers =
UsbSerialProber.getDefaultProber().findAllDrivers(mUsbManager);
final List<UsbSerialPort> result = new ArrayList<>();
for (final UsbSerialDriver driver : drivers)
{
final List<UsbSerialPort> 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<UsbSerialPort> 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<UsbSerialPort> 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();
});
});
}
}