From 87808544a4237b78de28c05543556bd815d6fd6b Mon Sep 17 00:00:00 2001 From: Rens Bekkers Date: Thu, 26 Feb 2026 16:39:28 +0100 Subject: [PATCH 01/11] Show all discovered Bluetooth devices and label likely Sunmi printers --- .../printerconfig/BluetoothDeviceAdapter.java | 11 +++++++++-- .../com/sunmi/printerconfig/MainActivity.java | 12 +++--------- .../PrinterDeviceClassifier.java | 19 +++++++++++++++++++ app/src/main/res/values/strings.xml | 3 +++ 4 files changed, 34 insertions(+), 11 deletions(-) create mode 100644 app/src/main/java/com/sunmi/printerconfig/PrinterDeviceClassifier.java diff --git a/app/src/main/java/com/sunmi/printerconfig/BluetoothDeviceAdapter.java b/app/src/main/java/com/sunmi/printerconfig/BluetoothDeviceAdapter.java index a11dd47..d3bc5cd 100644 --- a/app/src/main/java/com/sunmi/printerconfig/BluetoothDeviceAdapter.java +++ b/app/src/main/java/com/sunmi/printerconfig/BluetoothDeviceAdapter.java @@ -47,12 +47,19 @@ public void onBindViewHolder(@NonNull ViewHolder holder, int position) { } if (hasPermission) { + String baseName = holder.itemView.getContext().getString(R.string.unknown_device); String name = device.getName(); + if (name != null && !name.trim().isEmpty()) { + baseName = name; + } + if (PrinterDeviceClassifier.isLikelySunmi(name)) { + baseName = baseName + " \u2022 " + holder.itemView.getContext().getString(R.string.likely_sunmi); + } String address = device.getAddress(); - holder.deviceName.setText(name != null ? name : "Unknown Device"); + holder.deviceName.setText(baseName); holder.deviceAddress.setText(address); } else { - holder.deviceName.setText("Permission Required"); + holder.deviceName.setText(R.string.permission_required_short); holder.deviceAddress.setText(""); } diff --git a/app/src/main/java/com/sunmi/printerconfig/MainActivity.java b/app/src/main/java/com/sunmi/printerconfig/MainActivity.java index 556ee58..9f36c61 100644 --- a/app/src/main/java/com/sunmi/printerconfig/MainActivity.java +++ b/app/src/main/java/com/sunmi/printerconfig/MainActivity.java @@ -44,15 +44,9 @@ public void onReceive(Context context, Intent intent) { if (BluetoothDevice.ACTION_FOUND.equals(action)) { BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); if (device != null && checkBluetoothPermission()) { - String deviceName = device.getName(); - // Filter for Sunmi printers - if (deviceName != null && (deviceName.startsWith("NT311") || - deviceName.contains("CloudPrinter") || - deviceName.contains("SUNMI"))) { - if (!deviceList.contains(device)) { - deviceList.add(device); - deviceAdapter.notifyDataSetChanged(); - } + if (!deviceList.contains(device)) { + deviceList.add(device); + deviceAdapter.notifyDataSetChanged(); } } } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) { diff --git a/app/src/main/java/com/sunmi/printerconfig/PrinterDeviceClassifier.java b/app/src/main/java/com/sunmi/printerconfig/PrinterDeviceClassifier.java new file mode 100644 index 0000000..708ceba --- /dev/null +++ b/app/src/main/java/com/sunmi/printerconfig/PrinterDeviceClassifier.java @@ -0,0 +1,19 @@ +package com.sunmi.printerconfig; + +import java.util.Locale; + +public final class PrinterDeviceClassifier { + private PrinterDeviceClassifier() { + } + + public static boolean isLikelySunmi(String deviceName) { + if (deviceName == null || deviceName.trim().isEmpty()) { + return false; + } + + String normalizedName = deviceName.toUpperCase(Locale.ROOT); + return normalizedName.startsWith("NT311") + || normalizedName.contains("CLOUDPRINTER") + || normalizedName.contains("SUNMI"); + } +} diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 62779fd..55a9470 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -15,4 +15,7 @@ Success! Printer configured. Error: %s Connected to: %s + Unknown Device + Likely Sunmi + Permission Required From e5dfeef8c2985a43f1b7433b573154d282e18d69 Mon Sep 17 00:00:00 2001 From: Rens Bekkers Date: Thu, 26 Feb 2026 16:40:54 +0100 Subject: [PATCH 02/11] Recognize 'Cloud Print' naming variant for likely Sunmi label --- .../java/com/sunmi/printerconfig/PrinterDeviceClassifier.java | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/com/sunmi/printerconfig/PrinterDeviceClassifier.java b/app/src/main/java/com/sunmi/printerconfig/PrinterDeviceClassifier.java index 708ceba..efd8a7f 100644 --- a/app/src/main/java/com/sunmi/printerconfig/PrinterDeviceClassifier.java +++ b/app/src/main/java/com/sunmi/printerconfig/PrinterDeviceClassifier.java @@ -14,6 +14,7 @@ public static boolean isLikelySunmi(String deviceName) { String normalizedName = deviceName.toUpperCase(Locale.ROOT); return normalizedName.startsWith("NT311") || normalizedName.contains("CLOUDPRINTER") + || normalizedName.contains("CLOUD PRINT") || normalizedName.contains("SUNMI"); } } From 4afa705d5f3d5edfe12cd7cc1bb1453fbe67c641 Mon Sep 17 00:00:00 2001 From: Rens Bekkers Date: Thu, 26 Feb 2026 16:47:23 +0100 Subject: [PATCH 03/11] Bump app version to 1.0.3 (code 4) for internal release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 2893805..518f21a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ android { applicationId "com.sunmi.printerconfig" minSdk 21 targetSdk 35 - versionCode 2 - versionName "1.0.1" + versionCode 4 + versionName "1.0.3" } signingConfigs { From fdff0560e5d4572d4842fdffd6f4813bdedaf65b Mon Sep 17 00:00:00 2001 From: Rens Bekkers Date: Thu, 26 Feb 2026 17:15:30 +0100 Subject: [PATCH 04/11] Fix Wi-Fi scanner on modern Android and add manual SSID fallback --- app/src/main/AndroidManifest.xml | 5 +- .../printerconfig/WifiConfigActivity.java | 281 +++++++++++++++--- .../main/res/layout/activity_wifi_config.xml | 28 +- app/src/main/res/values/strings.xml | 10 + 4 files changed, 273 insertions(+), 51 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 87b4a00..2094e9d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,11 +13,14 @@ - + + diff --git a/app/src/main/java/com/sunmi/printerconfig/WifiConfigActivity.java b/app/src/main/java/com/sunmi/printerconfig/WifiConfigActivity.java index 31770ae..efc818a 100644 --- a/app/src/main/java/com/sunmi/printerconfig/WifiConfigActivity.java +++ b/app/src/main/java/com/sunmi/printerconfig/WifiConfigActivity.java @@ -2,16 +2,22 @@ import android.Manifest; import android.bluetooth.BluetoothDevice; +import android.content.BroadcastReceiver; import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; import android.content.pm.PackageManager; -import android.net.wifi.WifiConfiguration; +import android.location.LocationManager; +import android.net.wifi.ScanResult; import android.net.wifi.WifiManager; import android.os.Build; import android.os.Bundle; import android.view.View; +import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; +import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.Spinner; import android.widget.TextView; @@ -23,6 +29,8 @@ import java.util.ArrayList; import java.util.List; +import java.util.Set; +import java.util.TreeSet; public class WifiConfigActivity extends AppCompatActivity { private static final int PERMISSION_REQUEST_CODE = 3; @@ -31,12 +39,27 @@ public class WifiConfigActivity extends AppCompatActivity { private TextView printerNameText; private Spinner wifiSpinner; private EditText passwordInput; + private EditText manualSsidInput; + private LinearLayout manualSsidContainer; private Button configureButton; private ProgressBar progressBar; private TextView statusText; private WifiManager wifiManager; private PrinterConfigHelper printerHelper; + private ArrayAdapter wifiAdapter; + private final List availableSsids = new ArrayList<>(); + private boolean wifiReceiverRegistered = false; + + private final BroadcastReceiver wifiScanReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + if (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(intent.getAction())) { + updateNetworksFromScanResults(); + } + } + }; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -52,6 +75,8 @@ protected void onCreate(Bundle savedInstanceState) { printerNameText = findViewById(R.id.printerNameText); wifiSpinner = findViewById(R.id.wifiSpinner); passwordInput = findViewById(R.id.passwordInput); + manualSsidInput = findViewById(R.id.manualSsidInput); + manualSsidContainer = findViewById(R.id.manualSsidContainer); configureButton = findViewById(R.id.configureButton); progressBar = findViewById(R.id.progressBar); statusText = findViewById(R.id.statusText); @@ -59,25 +84,25 @@ protected void onCreate(Bundle savedInstanceState) { wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); printerHelper = new PrinterConfigHelper(this); - boolean hasPermission = true; + boolean hasBluetoothPermission = true; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { - hasPermission = ContextCompat.checkSelfPermission(this, + hasBluetoothPermission = ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_CONNECT) == PackageManager.PERMISSION_GRANTED; } - if (hasPermission) { + if (hasBluetoothPermission) { String deviceName = device.getName(); printerNameText.setText(getString(R.string.connected_to, deviceName != null ? deviceName : "Unknown")); } - loadWifiNetworks(); + setupWifiSpinner(); configureButton.setOnClickListener(v -> { - String selectedSsid = (String) wifiSpinner.getSelectedItem(); + String selectedSsid = resolveSelectedSsid(); String password = passwordInput.getText().toString(); - if (selectedSsid == null || selectedSsid.isEmpty()) { - Toast.makeText(this, "Please select a Wi-Fi network", Toast.LENGTH_SHORT).show(); + if (selectedSsid.isEmpty()) { + Toast.makeText(this, "Please select or enter a Wi-Fi network", Toast.LENGTH_SHORT).show(); return; } @@ -90,71 +115,229 @@ protected void onCreate(Bundle savedInstanceState) { }); } - private void loadWifiNetworks() { + @Override + protected void onStart() { + super.onStart(); + registerWifiScanReceiver(); + refreshWifiNetworks(); + } + + @Override + protected void onStop() { + super.onStop(); + unregisterWifiScanReceiver(); + } + + private void setupWifiSpinner() { + wifiAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, new ArrayList<>()); + wifiAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + wifiSpinner.setAdapter(wifiAdapter); + + wifiSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + boolean manualSelected = isManualEntrySelected(position); + manualSsidContainer.setVisibility(manualSelected ? View.VISIBLE : View.GONE); + if (!manualSelected) { + manualSsidInput.setText(""); + } + } + + @Override + public void onNothingSelected(AdapterView parent) { + manualSsidContainer.setVisibility(View.GONE); + } + }); + + updateWifiSpinner(); + } + + private String resolveSelectedSsid() { + int selectedPosition = wifiSpinner.getSelectedItemPosition(); + if (selectedPosition < 0) { + return ""; + } + + if (isManualEntrySelected(selectedPosition)) { + return manualSsidInput.getText().toString().trim(); + } + + if (selectedPosition >= availableSsids.size()) { + return ""; + } + + return availableSsids.get(selectedPosition); + } + + private boolean isManualEntrySelected(int position) { + return wifiAdapter != null && position == wifiAdapter.getCount() - 1; + } + + private void refreshWifiNetworks() { + if (!wifiManager.isWifiEnabled()) { + showManualEntryOnly(getString(R.string.wifi_enable_required)); + return; + } + if (!checkWifiPermissions()) { requestWifiPermissions(); return; } - List networkList = new ArrayList<>(); + if (!isLocationEnabled()) { + showManualEntryOnly(getString(R.string.wifi_enable_location_required)); + return; + } + + progressBar.setVisibility(View.VISIBLE); + statusText.setText(R.string.wifi_scanning); - // Get configured networks (the tablet's saved networks) - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { - boolean hasLocationPermission = ContextCompat.checkSelfPermission(this, - Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED; - boolean hasWifiStatePermission = ContextCompat.checkSelfPermission(this, - Manifest.permission.ACCESS_WIFI_STATE) == PackageManager.PERMISSION_GRANTED; + boolean scanStarted; + try { + scanStarted = wifiManager.startScan(); + } catch (SecurityException e) { + scanStarted = false; + } - if (!hasLocationPermission) { - requestWifiPermissions(); - return; + if (!scanStarted) { + updateNetworksFromScanResults(); + if (availableSsids.isEmpty()) { + statusText.setText(R.string.wifi_scan_failed); } + } + } - if (hasWifiStatePermission) { - try { - List configs = wifiManager.getConfiguredNetworks(); - if (configs != null) { - for (WifiConfiguration config : configs) { - String ssid = config.SSID.replace("\"", ""); - if (!networkList.contains(ssid)) { - networkList.add(ssid); - } - } + private void updateNetworksFromScanResults() { + Set uniqueSsids = new TreeSet<>(String.CASE_INSENSITIVE_ORDER); + + try { + List scanResults = wifiManager.getScanResults(); + for (ScanResult result : scanResults) { + if (result.SSID != null) { + String ssid = result.SSID.trim(); + if (!ssid.isEmpty()) { + uniqueSsids.add(ssid); } - } catch (SecurityException ignored) { - // Fall back to manual network entry below. } } + } catch (SecurityException e) { + showManualEntryOnly(getString(R.string.wifi_scan_permissions_required)); + return; } - // Add some common network detection - // Note: On Android 10+, scanning requires location and is limited - if (networkList.isEmpty()) { - // Add placeholder for manual entry if scanning fails - networkList.add("Enter manually below"); + availableSsids.clear(); + availableSsids.addAll(uniqueSsids); + updateWifiSpinner(); + + progressBar.setVisibility(View.GONE); + if (availableSsids.isEmpty()) { + statusText.setText(R.string.wifi_no_networks_found); + manualSsidContainer.setVisibility(View.VISIBLE); + wifiSpinner.setSelection(wifiAdapter.getCount() - 1); + } else { + statusText.setText(getString(R.string.wifi_networks_found, availableSsids.size())); } + } + + private void updateWifiSpinner() { + List spinnerOptions = new ArrayList<>(availableSsids); + spinnerOptions.add(getString(R.string.manual_entry_option)); - ArrayAdapter adapter = new ArrayAdapter<>(this, - android.R.layout.simple_spinner_item, networkList); - adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - wifiSpinner.setAdapter(adapter); + wifiAdapter.clear(); + wifiAdapter.addAll(spinnerOptions); + wifiAdapter.notifyDataSetChanged(); } - private boolean checkWifiPermissions() { - if (Build.VERSION.SDK_INT > Build.VERSION_CODES.R) { - return true; + private void showManualEntryOnly(String message) { + progressBar.setVisibility(View.GONE); + availableSsids.clear(); + updateWifiSpinner(); + + statusText.setText(message); + manualSsidContainer.setVisibility(View.VISIBLE); + + if (wifiAdapter.getCount() > 0) { + wifiSpinner.setSelection(wifiAdapter.getCount() - 1); } - return ContextCompat.checkSelfPermission(this, + } + + private boolean checkWifiPermissions() { + boolean hasLocationPermission = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED; + + if (!hasLocationPermission) { + return false; + } + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + return ContextCompat.checkSelfPermission(this, + Manifest.permission.NEARBY_WIFI_DEVICES) == PackageManager.PERMISSION_GRANTED; + } + + return true; } private void requestWifiPermissions() { - if (Build.VERSION.SDK_INT > Build.VERSION_CODES.R) { - loadWifiNetworks(); + List permissions = new ArrayList<>(); + + if (ContextCompat.checkSelfPermission(this, + Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { + permissions.add(Manifest.permission.ACCESS_FINE_LOCATION); + } + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && + ContextCompat.checkSelfPermission(this, + Manifest.permission.NEARBY_WIFI_DEVICES) != PackageManager.PERMISSION_GRANTED) { + permissions.add(Manifest.permission.NEARBY_WIFI_DEVICES); + } + + if (permissions.isEmpty()) { + refreshWifiNetworks(); return; } + ActivityCompat.requestPermissions(this, - new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, PERMISSION_REQUEST_CODE); + permissions.toArray(new String[0]), PERMISSION_REQUEST_CODE); + } + + private boolean isLocationEnabled() { + LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); + if (locationManager == null) { + return false; + } + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + return locationManager.isLocationEnabled(); + } + + return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) + || locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); + } + + private void registerWifiScanReceiver() { + if (wifiReceiverRegistered) { + return; + } + + IntentFilter filter = new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + registerReceiver(wifiScanReceiver, filter, Context.RECEIVER_NOT_EXPORTED); + } else { + registerReceiver(wifiScanReceiver, filter); + } + wifiReceiverRegistered = true; + } + + private void unregisterWifiScanReceiver() { + if (!wifiReceiverRegistered) { + return; + } + + try { + unregisterReceiver(wifiScanReceiver); + } catch (IllegalArgumentException ignored) { + } + wifiReceiverRegistered = false; } private void configurePrinter(String ssid, String password) { @@ -205,9 +388,9 @@ public void onRequestPermissionsResult(int requestCode, String[] permissions, in } } if (allGranted) { - loadWifiNetworks(); + refreshWifiNetworks(); } else { - Toast.makeText(this, "Permissions required to scan Wi-Fi networks", + Toast.makeText(this, R.string.wifi_scan_permissions_required, Toast.LENGTH_SHORT).show(); } } diff --git a/app/src/main/res/layout/activity_wifi_config.xml b/app/src/main/res/layout/activity_wifi_config.xml index 08f313c..b339b5d 100644 --- a/app/src/main/res/layout/activity_wifi_config.xml +++ b/app/src/main/res/layout/activity_wifi_config.xml @@ -46,13 +46,39 @@ android:layout_marginTop="8dp" android:minHeight="48dp"/> + + + + + + + Unknown Device Likely Sunmi Permission Required + Enter SSID manually + Wi-Fi SSID + Enter Wi-Fi network name + Scanning Wi-Fi networks... + Permissions are required to scan Wi-Fi networks + Turn on Wi-Fi to scan networks + Turn on Location to scan Wi-Fi networks + No Wi-Fi networks found. Enter SSID manually. + %1$d Wi-Fi networks found + Unable to refresh Wi-Fi scan results From dc073617adef673a0dc5241e9cea04d7219c8672 Mon Sep 17 00:00:00 2001 From: Rens Bekkers Date: Thu, 26 Feb 2026 17:18:28 +0100 Subject: [PATCH 05/11] Bump app version to 1.0.4 (code 5) for Wi-Fi scanner fix release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 518f21a..41f5456 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ android { applicationId "com.sunmi.printerconfig" minSdk 21 targetSdk 35 - versionCode 4 - versionName "1.0.3" + versionCode 5 + versionName "1.0.4" } signingConfigs { From e0180d1f1381d5fa8a362eb1a945451e513380bc Mon Sep 17 00:00:00 2001 From: Rens Bekkers Date: Thu, 26 Feb 2026 17:38:47 +0100 Subject: [PATCH 06/11] Use official Sunmi SDK for printer Wi-Fi configuration --- .gitignore | 1 + app/build.gradle | 5 +- app/libs/BluetoothBinding.aar | Bin 0 -> 202350 bytes app/proguard-rules.pro | 4 + .../printerconfig/PrinterConfigHelper.java | 165 --------------- .../printerconfig/WifiConfigActivity.java | 199 +++++++++++++++--- app/src/main/res/values/strings.xml | 9 + 7 files changed, 181 insertions(+), 202 deletions(-) create mode 100644 app/libs/BluetoothBinding.aar delete mode 100644 app/src/main/java/com/sunmi/printerconfig/PrinterConfigHelper.java diff --git a/.gitignore b/.gitignore index 4587336..bf136d7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ # Built application files *.apk *.aar +!app/libs/BluetoothBinding.aar *.ap_ *.aab diff --git a/app/build.gradle b/app/build.gradle index 41f5456..f506816 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ android { applicationId "com.sunmi.printerconfig" minSdk 21 targetSdk 35 - versionCode 5 - versionName "1.0.4" + versionCode 6 + versionName "1.0.5" } signingConfigs { @@ -56,6 +56,7 @@ android { } dependencies { + implementation files('libs/BluetoothBinding.aar') implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'com.google.android.material:material:1.11.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' diff --git a/app/libs/BluetoothBinding.aar b/app/libs/BluetoothBinding.aar new file mode 100644 index 0000000000000000000000000000000000000000..75464c7893293bdf39e00303ea0c486983b8b3f6 GIT binary patch literal 202350 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 t{4_|jcwihNmBXUx4T2= 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

ez51u5X8bouEo-OfWdE;= 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 Build.VERSION_CODES.S) { - return ContextCompat.checkSelfPermission(context, - Manifest.permission.BLUETOOTH_CONNECT) == PackageManager.PERMISSION_GRANTED; - } - return true; - } - - // Helper method to convert string to hex for debugging - private String bytesToHex(byte[] bytes) { - StringBuilder sb = new StringBuilder(); - for (byte b : bytes) { - sb.append(String.format("%02X ", b)); - } - return sb.toString(); - } -} diff --git a/app/src/main/java/com/sunmi/printerconfig/WifiConfigActivity.java b/app/src/main/java/com/sunmi/printerconfig/WifiConfigActivity.java index efc818a..160f68b 100644 --- a/app/src/main/java/com/sunmi/printerconfig/WifiConfigActivity.java +++ b/app/src/main/java/com/sunmi/printerconfig/WifiConfigActivity.java @@ -12,6 +12,8 @@ import android.net.wifi.WifiManager; import android.os.Build; import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; @@ -27,15 +29,23 @@ import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; +import com.sunmi.cloudprinter.bean.PrinterDevice; +import com.sunmi.cloudprinter.bean.Router; +import com.sunmi.cloudprinter.presenter.SunmiPrinterClient; + +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.TreeSet; -public class WifiConfigActivity extends AppCompatActivity { +public class WifiConfigActivity extends AppCompatActivity implements SunmiPrinterClient.IPrinterClient { private static final int PERMISSION_REQUEST_CODE = 3; + private static final int PRINTER_CONNECTION_TIMEOUT_MS = 10_000; private BluetoothDevice device; + private String printerAddress; + private TextView printerNameText; private Spinner wifiSpinner; private EditText passwordInput; @@ -44,13 +54,25 @@ public class WifiConfigActivity extends AppCompatActivity { private Button configureButton; private ProgressBar progressBar; private TextView statusText; + private WifiManager wifiManager; - private PrinterConfigHelper printerHelper; + private SunmiPrinterClient sunmiPrinterClient; private ArrayAdapter wifiAdapter; private final List availableSsids = new ArrayList<>(); private boolean wifiReceiverRegistered = false; + private final Handler connectionTimeoutHandler = new Handler(Looper.getMainLooper()); + private boolean waitingForPrinterConnection = false; + private String pendingSsid; + private String pendingPassword; + + private final Runnable connectionTimeoutRunnable = () -> { + if (waitingForPrinterConnection) { + handleConfigurationFailure(getString(R.string.printer_connection_timeout)); + } + }; + private final BroadcastReceiver wifiScanReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { @@ -72,6 +94,13 @@ protected void onCreate(Bundle savedInstanceState) { return; } + printerAddress = resolveDeviceAddress(device); + if (printerAddress == null || printerAddress.isEmpty()) { + Toast.makeText(this, R.string.printer_address_unavailable, Toast.LENGTH_LONG).show(); + finish(); + return; + } + printerNameText = findViewById(R.id.printerNameText); wifiSpinner = findViewById(R.id.wifiSpinner); passwordInput = findViewById(R.id.passwordInput); @@ -82,7 +111,7 @@ protected void onCreate(Bundle savedInstanceState) { statusText = findViewById(R.id.statusText); wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); - printerHelper = new PrinterConfigHelper(this); + sunmiPrinterClient = new SunmiPrinterClient(this, this); boolean hasBluetoothPermission = true; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { @@ -93,6 +122,8 @@ protected void onCreate(Bundle savedInstanceState) { if (hasBluetoothPermission) { String deviceName = device.getName(); printerNameText.setText(getString(R.string.connected_to, deviceName != null ? deviceName : "Unknown")); + } else { + printerNameText.setText(getString(R.string.connected_to, getString(R.string.unknown_device))); } setupWifiSpinner(); @@ -102,12 +133,12 @@ protected void onCreate(Bundle savedInstanceState) { String password = passwordInput.getText().toString(); if (selectedSsid.isEmpty()) { - Toast.makeText(this, "Please select or enter a Wi-Fi network", Toast.LENGTH_SHORT).show(); + Toast.makeText(this, R.string.select_or_enter_wifi_network, Toast.LENGTH_SHORT).show(); return; } if (password.isEmpty()) { - Toast.makeText(this, "Please enter Wi-Fi password", Toast.LENGTH_SHORT).show(); + Toast.makeText(this, R.string.enter_wifi_password, Toast.LENGTH_SHORT).show(); return; } @@ -128,6 +159,23 @@ protected void onStop() { unregisterWifiScanReceiver(); } + @Override + protected void onDestroy() { + super.onDestroy(); + connectionTimeoutHandler.removeCallbacks(connectionTimeoutRunnable); + if (sunmiPrinterClient != null && printerAddress != null && !printerAddress.isEmpty()) { + sunmiPrinterClient.disconnect(printerAddress); + } + } + + private String resolveDeviceAddress(BluetoothDevice bluetoothDevice) { + try { + return bluetoothDevice.getAddress(); + } catch (SecurityException e) { + return ""; + } + } + private void setupWifiSpinner() { wifiAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, new ArrayList<>()); wifiAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); @@ -174,7 +222,7 @@ private boolean isManualEntrySelected(int position) { } private void refreshWifiNetworks() { - if (!wifiManager.isWifiEnabled()) { + if (wifiManager == null || !wifiManager.isWifiEnabled()) { showManualEntryOnly(getString(R.string.wifi_enable_required)); return; } @@ -341,39 +389,120 @@ private void unregisterWifiScanReceiver() { } private void configurePrinter(String ssid, String password) { + pendingSsid = ssid; + pendingPassword = password; + configureButton.setEnabled(false); progressBar.setVisibility(View.VISIBLE); + statusText.setText(R.string.connecting_to_printer); + + waitingForPrinterConnection = true; + connectionTimeoutHandler.removeCallbacks(connectionTimeoutRunnable); + connectionTimeoutHandler.postDelayed(connectionTimeoutRunnable, PRINTER_CONNECTION_TIMEOUT_MS); + + try { + sunmiPrinterClient.getPrinterSn(printerAddress); + } catch (Exception e) { + handleConfigurationFailure(getString(R.string.printer_connection_failed)); + } + } + + private void sendWifiConfiguration() { + if (pendingSsid == null || pendingSsid.isEmpty()) { + handleConfigurationFailure(getString(R.string.select_or_enter_wifi_network)); + return; + } + statusText.setText(R.string.configuring); - // Run configuration in background thread - new Thread(() -> { - try { - boolean success = printerHelper.configurePrinterWifi(device, ssid, password); - - runOnUiThread(() -> { - progressBar.setVisibility(View.GONE); - configureButton.setEnabled(true); - - if (success) { - statusText.setText(R.string.success); - Toast.makeText(this, R.string.success, Toast.LENGTH_LONG).show(); - // Return to main activity after success - finish(); - } else { - statusText.setText(getString(R.string.error, "Configuration failed")); - Toast.makeText(this, "Configuration failed. Please try again.", - Toast.LENGTH_LONG).show(); - } - }); - } catch (Exception e) { - runOnUiThread(() -> { - progressBar.setVisibility(View.GONE); - configureButton.setEnabled(true); - statusText.setText(getString(R.string.error, e.getMessage())); - Toast.makeText(this, "Error: " + e.getMessage(), Toast.LENGTH_LONG).show(); - }); - } - }).start(); + try { + byte[] ssidBytes = pendingSsid.getBytes(StandardCharsets.UTF_8); + sunmiPrinterClient.setPrinterWifi(printerAddress, ssidBytes, pendingPassword == null ? "" : pendingPassword); + } catch (Exception e) { + handleConfigurationFailure(getString(R.string.wifi_push_failed_try_24g)); + } + } + + private void handleConfigurationSuccess() { + pendingSsid = null; + pendingPassword = null; + waitingForPrinterConnection = false; + connectionTimeoutHandler.removeCallbacks(connectionTimeoutRunnable); + + runOnUiThread(() -> { + progressBar.setVisibility(View.GONE); + configureButton.setEnabled(true); + statusText.setText(R.string.success); + Toast.makeText(this, R.string.success, Toast.LENGTH_LONG).show(); + finish(); + }); + } + + private void handleConfigurationFailure(String message) { + pendingSsid = null; + pendingPassword = null; + waitingForPrinterConnection = false; + connectionTimeoutHandler.removeCallbacks(connectionTimeoutRunnable); + + runOnUiThread(() -> { + progressBar.setVisibility(View.GONE); + configureButton.setEnabled(true); + statusText.setText(getString(R.string.error, message)); + Toast.makeText(this, message, Toast.LENGTH_LONG).show(); + }); + } + + @Override + public void onPrinterFount(PrinterDevice printerDevice) { + // Not used in this activity. + } + + @Override + public void routerFound(Router router) { + // Not used in this activity. + } + + @Override + public void onGetWifiListFinish() { + // Not used in this activity. + } + + @Override + public void onGetWifiListFail() { + // Not used in this activity. + } + + @Override + public void onSetWifiSuccess() { + runOnUiThread(() -> statusText.setText(R.string.sending_wifi_to_printer)); + } + + @Override + public void wifiConfigSuccess() { + handleConfigurationSuccess(); + } + + @Override + public void onWifiConfigFail() { + handleConfigurationFailure(getString(R.string.wifi_push_failed_try_24g)); + } + + @Override + public void sendDataFail(int code, String msg) { + String failureMessage = getString(R.string.wifi_push_error_with_code, code, msg); + handleConfigurationFailure(failureMessage); + } + + @Override + public void getSnRequestSuccess() { + // Request accepted; wait for onSnReceived callback. + } + + @Override + public void onSnReceived(String sn) { + waitingForPrinterConnection = false; + connectionTimeoutHandler.removeCallbacks(connectionTimeoutRunnable); + runOnUiThread(this::sendWifiConfiguration); } @Override diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8637e47..af8de45 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -28,4 +28,13 @@ No Wi-Fi networks found. Enter SSID manually. %1$d Wi-Fi networks found Unable to refresh Wi-Fi scan results + Please select or enter a Wi-Fi network + Please enter Wi-Fi password + Connecting to printer... + Sending Wi-Fi credentials to printer... + Printer connection timed out. Keep the printer close and retry. + Unable to connect to printer over Bluetooth. + Failed to configure Wi-Fi. Confirm 2.4GHz WPA/WPA2 network and retry. + Printer communication error (%1$d): %2$s + Printer Bluetooth address is unavailable. From 0c1dedacec5418dd02dc6528fac25ca1df0a4b45 Mon Sep 17 00:00:00 2001 From: Rens Bekkers Date: Thu, 26 Feb 2026 18:16:42 +0100 Subject: [PATCH 07/11] Stabilize Sunmi Wi-Fi config flow and fix SSID selection UX --- app/build.gradle | 4 +- app/proguard-rules.pro | 5 + .../com/sunmi/printerconfig/MainActivity.java | 223 +++++++++++++++--- .../printerconfig/WifiConfigActivity.java | 146 +++++------- 4 files changed, 254 insertions(+), 124 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index f506816..40d6379 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ android { applicationId "com.sunmi.printerconfig" minSdk 21 targetSdk 35 - versionCode 6 - versionName "1.0.5" + versionCode 7 + versionName "1.0.6" } signingConfigs { diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 765e5d4..ee900f7 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -14,3 +14,8 @@ # Keep Sunmi SDK callback interfaces/classes used during Wi-Fi configuration. -keep class com.sunmi.cloudprinter.** { *; } -keep interface com.sunmi.cloudprinter.** { *; } + +# Keep callback implementers and SDK internals that may be invoked reflectively. +-keep class * implements com.sunmi.cloudprinter.presenter.SunmiPrinterClient$IPrinterClient { *; } +-keep class library.** { *; } +-keep class com.inuker.bluetooth.library.** { *; } diff --git a/app/src/main/java/com/sunmi/printerconfig/MainActivity.java b/app/src/main/java/com/sunmi/printerconfig/MainActivity.java index 9f36c61..599350f 100644 --- a/app/src/main/java/com/sunmi/printerconfig/MainActivity.java +++ b/app/src/main/java/com/sunmi/printerconfig/MainActivity.java @@ -10,6 +10,8 @@ import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; import android.view.View; import android.widget.Button; import android.widget.ProgressBar; @@ -22,12 +24,17 @@ import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; +import com.sunmi.cloudprinter.bean.PrinterDevice; +import com.sunmi.cloudprinter.bean.Router; +import com.sunmi.cloudprinter.presenter.SunmiPrinterClient; + import java.util.ArrayList; import java.util.List; -public class MainActivity extends AppCompatActivity { +public class MainActivity extends AppCompatActivity implements SunmiPrinterClient.IPrinterClient { private static final int PERMISSION_REQUEST_CODE = 1; private static final int REQUEST_ENABLE_BT = 2; + private static final int PRINTER_CONNECTION_TIMEOUT_MS = 10_000; private BluetoothAdapter bluetoothAdapter; private Button scanButton; @@ -35,7 +42,20 @@ public class MainActivity extends AppCompatActivity { private TextView statusText; private RecyclerView devicesRecyclerView; private BluetoothDeviceAdapter deviceAdapter; - private List deviceList; + private final List deviceList = new ArrayList<>(); + + private SunmiPrinterClient sunmiPrinterClient; + private final Handler connectionTimeoutHandler = new Handler(Looper.getMainLooper()); + + private String pendingPrinterAddress; + private String pendingPrinterName; + private boolean waitingForPrinterConnection = false; + + private final Runnable connectionTimeoutRunnable = () -> { + if (waitingForPrinterConnection) { + handlePrinterConnectionFailure(getString(R.string.printer_connection_timeout)); + } + }; private final BroadcastReceiver bluetoothReceiver = new BroadcastReceiver() { @Override @@ -43,20 +63,20 @@ public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (BluetoothDevice.ACTION_FOUND.equals(action)) { BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); - if (device != null && checkBluetoothPermission()) { - if (!deviceList.contains(device)) { - deviceList.add(device); - deviceAdapter.notifyDataSetChanged(); - } + if (device != null && checkBluetoothPermission() && !deviceList.contains(device)) { + deviceList.add(device); + deviceAdapter.notifyDataSetChanged(); } } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) { - progressBar.setVisibility(View.GONE); - scanButton.setEnabled(true); - scanButton.setText(R.string.scan_bluetooth); - if (deviceList.isEmpty()) { - statusText.setText(R.string.no_devices_found); - } else { - statusText.setText(""); + if (!waitingForPrinterConnection) { + progressBar.setVisibility(View.GONE); + scanButton.setEnabled(true); + scanButton.setText(R.string.scan_bluetooth); + if (deviceList.isEmpty()) { + statusText.setText(R.string.no_devices_found); + } else { + statusText.setText(""); + } } } } @@ -72,9 +92,7 @@ protected void onCreate(Bundle savedInstanceState) { statusText = findViewById(R.id.statusText); devicesRecyclerView = findViewById(R.id.devicesRecyclerView); - deviceList = new ArrayList<>(); deviceAdapter = new BluetoothDeviceAdapter(deviceList, this::onDeviceClick); - devicesRecyclerView.setLayoutManager(new LinearLayoutManager(this)); devicesRecyclerView.setAdapter(deviceAdapter); @@ -85,6 +103,8 @@ protected void onCreate(Bundle savedInstanceState) { return; } + sunmiPrinterClient = new SunmiPrinterClient(this, this); + scanButton.setOnClickListener(v -> { if (checkPermissions()) { startBluetoothScan(); @@ -101,13 +121,12 @@ protected void onCreate(Bundle savedInstanceState) { private boolean checkPermissions() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { - return ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_SCAN) == PackageManager.PERMISSION_GRANTED && - ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_CONNECT) == PackageManager.PERMISSION_GRANTED; - } else { - return ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH) == PackageManager.PERMISSION_GRANTED && - ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_ADMIN) == PackageManager.PERMISSION_GRANTED && - ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED; + return ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_SCAN) == PackageManager.PERMISSION_GRANTED + && ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_CONNECT) == PackageManager.PERMISSION_GRANTED; } + return ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH) == PackageManager.PERMISSION_GRANTED + && ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_ADMIN) == PackageManager.PERMISSION_GRANTED + && ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED; } private void requestPermissions() { @@ -116,15 +135,18 @@ private void requestPermissions() { new String[]{ Manifest.permission.BLUETOOTH_SCAN, Manifest.permission.BLUETOOTH_CONNECT - }, PERMISSION_REQUEST_CODE); - } else { - ActivityCompat.requestPermissions(this, - new String[]{ - Manifest.permission.BLUETOOTH, - Manifest.permission.BLUETOOTH_ADMIN, - Manifest.permission.ACCESS_FINE_LOCATION - }, PERMISSION_REQUEST_CODE); + }, + PERMISSION_REQUEST_CODE); + return; } + + ActivityCompat.requestPermissions(this, + new String[]{ + Manifest.permission.BLUETOOTH, + Manifest.permission.BLUETOOTH_ADMIN, + Manifest.permission.ACCESS_FINE_LOCATION + }, + PERMISSION_REQUEST_CODE); } private boolean checkBluetoothPermission() { @@ -143,6 +165,9 @@ private void startBluetoothScan() { return; } + waitingForPrinterConnection = false; + connectionTimeoutHandler.removeCallbacks(connectionTimeoutRunnable); + deviceList.clear(); deviceAdapter.notifyDataSetChanged(); statusText.setText(R.string.scanning); @@ -161,15 +186,136 @@ private void startBluetoothScan() { } private void onDeviceClick(BluetoothDevice device) { - if (checkBluetoothPermission() && bluetoothAdapter.isDiscovering()) { + if (!checkBluetoothPermission()) { + Toast.makeText(this, R.string.permissions_required, Toast.LENGTH_SHORT).show(); + return; + } + + if (bluetoothAdapter.isDiscovering()) { bluetoothAdapter.cancelDiscovery(); } + pendingPrinterAddress = safeGetDeviceAddress(device); + pendingPrinterName = safeGetDeviceName(device); + + if (pendingPrinterAddress.isEmpty()) { + Toast.makeText(this, R.string.printer_address_unavailable, Toast.LENGTH_LONG).show(); + return; + } + + waitingForPrinterConnection = true; + progressBar.setVisibility(View.VISIBLE); + scanButton.setEnabled(false); + statusText.setText(R.string.connecting_to_printer); + + connectionTimeoutHandler.removeCallbacks(connectionTimeoutRunnable); + connectionTimeoutHandler.postDelayed(connectionTimeoutRunnable, PRINTER_CONNECTION_TIMEOUT_MS); + + try { + // Match the known stable flow: establish BLE session before Wi-Fi config screen. + sunmiPrinterClient.getPrinterSn(pendingPrinterAddress); + } catch (Throwable t) { + handlePrinterConnectionFailure(getString(R.string.printer_connection_failed)); + } + } + + private String safeGetDeviceAddress(BluetoothDevice device) { + try { + return device.getAddress() != null ? device.getAddress() : ""; + } catch (SecurityException e) { + return ""; + } + } + + private String safeGetDeviceName(BluetoothDevice device) { + try { + String name = device.getName(); + return name != null && !name.isEmpty() ? name : getString(R.string.unknown_device); + } catch (SecurityException e) { + return getString(R.string.unknown_device); + } + } + + private void openWifiConfigScreen() { Intent intent = new Intent(this, WifiConfigActivity.class); - intent.putExtra("device", device); + intent.putExtra("device_address", pendingPrinterAddress); + intent.putExtra("device_name", pendingPrinterName); startActivity(intent); } + private void handlePrinterConnectionFailure(String message) { + waitingForPrinterConnection = false; + connectionTimeoutHandler.removeCallbacks(connectionTimeoutRunnable); + + runOnUiThread(() -> { + progressBar.setVisibility(View.GONE); + scanButton.setEnabled(true); + scanButton.setText(R.string.scan_bluetooth); + statusText.setText(getString(R.string.error, message)); + Toast.makeText(this, message, Toast.LENGTH_LONG).show(); + }); + } + + @Override + public void onPrinterFount(PrinterDevice printerDevice) { + // Not used with classic Bluetooth discovery flow. + } + + @Override + public void routerFound(Router router) { + // Not used in this activity. + } + + @Override + public void onGetWifiListFinish() { + // Not used in this activity. + } + + @Override + public void onGetWifiListFail() { + // Not used in this activity. + } + + @Override + public void onSetWifiSuccess() { + // Not used in this activity. + } + + @Override + public void wifiConfigSuccess() { + // Not used in this activity. + } + + @Override + public void onWifiConfigFail() { + // Not used in this activity. + } + + @Override + public void sendDataFail(int code, String msg) { + String failure = getString(R.string.wifi_push_error_with_code, code, msg == null ? "Unknown" : msg); + handlePrinterConnectionFailure(failure); + } + + @Override + public void getSnRequestSuccess() { + // Wait for onSnReceived callback. + } + + @Override + public void onSnReceived(String sn) { + waitingForPrinterConnection = false; + connectionTimeoutHandler.removeCallbacks(connectionTimeoutRunnable); + + runOnUiThread(() -> { + progressBar.setVisibility(View.GONE); + scanButton.setEnabled(true); + scanButton.setText(R.string.scan_bluetooth); + statusText.setText(""); + openWifiConfigScreen(); + }); + } + @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); @@ -192,13 +338,22 @@ public void onRequestPermissionsResult(int requestCode, String[] permissions, in @Override protected void onDestroy() { super.onDestroy(); + connectionTimeoutHandler.removeCallbacks(connectionTimeoutRunnable); + try { unregisterReceiver(bluetoothReceiver); - } catch (Exception e) { - e.printStackTrace(); + } catch (Exception ignored) { } + if (bluetoothAdapter != null && checkBluetoothPermission() && bluetoothAdapter.isDiscovering()) { bluetoothAdapter.cancelDiscovery(); } + + if (sunmiPrinterClient != null && pendingPrinterAddress != null && !pendingPrinterAddress.isEmpty()) { + try { + sunmiPrinterClient.disconnect(pendingPrinterAddress); + } catch (Throwable ignored) { + } + } } } diff --git a/app/src/main/java/com/sunmi/printerconfig/WifiConfigActivity.java b/app/src/main/java/com/sunmi/printerconfig/WifiConfigActivity.java index 160f68b..33a56b9 100644 --- a/app/src/main/java/com/sunmi/printerconfig/WifiConfigActivity.java +++ b/app/src/main/java/com/sunmi/printerconfig/WifiConfigActivity.java @@ -12,8 +12,6 @@ import android.net.wifi.WifiManager; import android.os.Build; import android.os.Bundle; -import android.os.Handler; -import android.os.Looper; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; @@ -41,10 +39,9 @@ public class WifiConfigActivity extends AppCompatActivity implements SunmiPrinterClient.IPrinterClient { private static final int PERMISSION_REQUEST_CODE = 3; - private static final int PRINTER_CONNECTION_TIMEOUT_MS = 10_000; - private BluetoothDevice device; private String printerAddress; + private String printerName; private TextView printerNameText; private Spinner wifiSpinner; @@ -62,17 +59,6 @@ public class WifiConfigActivity extends AppCompatActivity implements SunmiPrinte private final List availableSsids = new ArrayList<>(); private boolean wifiReceiverRegistered = false; - private final Handler connectionTimeoutHandler = new Handler(Looper.getMainLooper()); - private boolean waitingForPrinterConnection = false; - private String pendingSsid; - private String pendingPassword; - - private final Runnable connectionTimeoutRunnable = () -> { - if (waitingForPrinterConnection) { - handleConfigurationFailure(getString(R.string.printer_connection_timeout)); - } - }; - private final BroadcastReceiver wifiScanReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { @@ -87,20 +73,30 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_wifi_config); - device = getIntent().getParcelableExtra("device"); - if (device == null) { - Toast.makeText(this, "Error: No device selected", Toast.LENGTH_SHORT).show(); - finish(); - return; + printerAddress = getIntent().getStringExtra("device_address"); + printerName = getIntent().getStringExtra("device_name"); + + // Backward-compatibility fallback for old intents. + if ((printerAddress == null || printerAddress.isEmpty()) || printerName == null) { + BluetoothDevice device = getIntent().getParcelableExtra("device"); + if (device != null) { + printerAddress = safeGetDeviceAddress(device); + if (printerName == null || printerName.isEmpty()) { + printerName = safeGetDeviceName(device); + } + } } - printerAddress = resolveDeviceAddress(device); if (printerAddress == null || printerAddress.isEmpty()) { Toast.makeText(this, R.string.printer_address_unavailable, Toast.LENGTH_LONG).show(); finish(); return; } + if (printerName == null || printerName.isEmpty()) { + printerName = getString(R.string.unknown_device); + } + printerNameText = findViewById(R.id.printerNameText); wifiSpinner = findViewById(R.id.wifiSpinner); passwordInput = findViewById(R.id.passwordInput); @@ -113,18 +109,7 @@ protected void onCreate(Bundle savedInstanceState) { wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); sunmiPrinterClient = new SunmiPrinterClient(this, this); - boolean hasBluetoothPermission = true; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { - hasBluetoothPermission = ContextCompat.checkSelfPermission(this, - Manifest.permission.BLUETOOTH_CONNECT) == PackageManager.PERMISSION_GRANTED; - } - - if (hasBluetoothPermission) { - String deviceName = device.getName(); - printerNameText.setText(getString(R.string.connected_to, deviceName != null ? deviceName : "Unknown")); - } else { - printerNameText.setText(getString(R.string.connected_to, getString(R.string.unknown_device))); - } + printerNameText.setText(getString(R.string.connected_to, printerName)); setupWifiSpinner(); @@ -162,20 +147,31 @@ protected void onStop() { @Override protected void onDestroy() { super.onDestroy(); - connectionTimeoutHandler.removeCallbacks(connectionTimeoutRunnable); + if (sunmiPrinterClient != null && printerAddress != null && !printerAddress.isEmpty()) { - sunmiPrinterClient.disconnect(printerAddress); + try { + sunmiPrinterClient.disconnect(printerAddress); + } catch (Throwable ignored) { + } } } - private String resolveDeviceAddress(BluetoothDevice bluetoothDevice) { + private String safeGetDeviceAddress(BluetoothDevice device) { try { - return bluetoothDevice.getAddress(); + return device.getAddress() == null ? "" : device.getAddress(); } catch (SecurityException e) { return ""; } } + private String safeGetDeviceName(BluetoothDevice device) { + try { + return device.getName() == null ? getString(R.string.unknown_device) : device.getName(); + } catch (SecurityException e) { + return getString(R.string.unknown_device); + } + } + private void setupWifiSpinner() { wifiAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, new ArrayList<>()); wifiAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); @@ -202,7 +198,11 @@ public void onNothingSelected(AdapterView parent) { private String resolveSelectedSsid() { int selectedPosition = wifiSpinner.getSelectedItemPosition(); + if (selectedPosition < 0) { + if (!availableSsids.isEmpty()) { + return availableSsids.get(0); + } return ""; } @@ -280,8 +280,6 @@ private void updateNetworksFromScanResults() { progressBar.setVisibility(View.GONE); if (availableSsids.isEmpty()) { statusText.setText(R.string.wifi_no_networks_found); - manualSsidContainer.setVisibility(View.VISIBLE); - wifiSpinner.setSelection(wifiAdapter.getCount() - 1); } else { statusText.setText(getString(R.string.wifi_networks_found, availableSsids.size())); } @@ -294,6 +292,18 @@ private void updateWifiSpinner() { wifiAdapter.clear(); wifiAdapter.addAll(spinnerOptions); wifiAdapter.notifyDataSetChanged(); + + if (wifiAdapter.getCount() == 0) { + return; + } + + if (availableSsids.isEmpty()) { + wifiSpinner.setSelection(wifiAdapter.getCount() - 1); + manualSsidContainer.setVisibility(View.VISIBLE); + } else { + wifiSpinner.setSelection(0); + manualSsidContainer.setVisibility(View.GONE); + } } private void showManualEntryOnly(String message) { @@ -302,11 +312,6 @@ private void showManualEntryOnly(String message) { updateWifiSpinner(); statusText.setText(message); - manualSsidContainer.setVisibility(View.VISIBLE); - - if (wifiAdapter.getCount() > 0) { - wifiSpinner.setSelection(wifiAdapter.getCount() - 1); - } } private boolean checkWifiPermissions() { @@ -389,46 +394,19 @@ private void unregisterWifiScanReceiver() { } private void configurePrinter(String ssid, String password) { - pendingSsid = ssid; - pendingPassword = password; - configureButton.setEnabled(false); progressBar.setVisibility(View.VISIBLE); - statusText.setText(R.string.connecting_to_printer); - - waitingForPrinterConnection = true; - connectionTimeoutHandler.removeCallbacks(connectionTimeoutRunnable); - connectionTimeoutHandler.postDelayed(connectionTimeoutRunnable, PRINTER_CONNECTION_TIMEOUT_MS); + statusText.setText(R.string.sending_wifi_to_printer); try { - sunmiPrinterClient.getPrinterSn(printerAddress); - } catch (Exception e) { - handleConfigurationFailure(getString(R.string.printer_connection_failed)); - } - } - - private void sendWifiConfiguration() { - if (pendingSsid == null || pendingSsid.isEmpty()) { - handleConfigurationFailure(getString(R.string.select_or_enter_wifi_network)); - return; - } - - statusText.setText(R.string.configuring); - - try { - byte[] ssidBytes = pendingSsid.getBytes(StandardCharsets.UTF_8); - sunmiPrinterClient.setPrinterWifi(printerAddress, ssidBytes, pendingPassword == null ? "" : pendingPassword); - } catch (Exception e) { + byte[] ssidBytes = ssid.getBytes(StandardCharsets.UTF_8); + sunmiPrinterClient.setPrinterWifi(printerAddress, ssidBytes, password); + } catch (Throwable t) { handleConfigurationFailure(getString(R.string.wifi_push_failed_try_24g)); } } private void handleConfigurationSuccess() { - pendingSsid = null; - pendingPassword = null; - waitingForPrinterConnection = false; - connectionTimeoutHandler.removeCallbacks(connectionTimeoutRunnable); - runOnUiThread(() -> { progressBar.setVisibility(View.GONE); configureButton.setEnabled(true); @@ -439,11 +417,6 @@ private void handleConfigurationSuccess() { } private void handleConfigurationFailure(String message) { - pendingSsid = null; - pendingPassword = null; - waitingForPrinterConnection = false; - connectionTimeoutHandler.removeCallbacks(connectionTimeoutRunnable); - runOnUiThread(() -> { progressBar.setVisibility(View.GONE); configureButton.setEnabled(true); @@ -474,7 +447,7 @@ public void onGetWifiListFail() { @Override public void onSetWifiSuccess() { - runOnUiThread(() -> statusText.setText(R.string.sending_wifi_to_printer)); + runOnUiThread(() -> statusText.setText(R.string.configuring)); } @Override @@ -489,20 +462,18 @@ public void onWifiConfigFail() { @Override public void sendDataFail(int code, String msg) { - String failureMessage = getString(R.string.wifi_push_error_with_code, code, msg); + String failureMessage = getString(R.string.wifi_push_error_with_code, code, msg == null ? "Unknown" : msg); handleConfigurationFailure(failureMessage); } @Override public void getSnRequestSuccess() { - // Request accepted; wait for onSnReceived callback. + // Not used in this activity. } @Override public void onSnReceived(String sn) { - waitingForPrinterConnection = false; - connectionTimeoutHandler.removeCallbacks(connectionTimeoutRunnable); - runOnUiThread(this::sendWifiConfiguration); + // Not used in this activity. } @Override @@ -519,8 +490,7 @@ public void onRequestPermissionsResult(int requestCode, String[] permissions, in if (allGranted) { refreshWifiNetworks(); } else { - Toast.makeText(this, R.string.wifi_scan_permissions_required, - Toast.LENGTH_SHORT).show(); + Toast.makeText(this, R.string.wifi_scan_permissions_required, Toast.LENGTH_SHORT).show(); } } } From e55103533cb1a8540b0abbdcdc5a516a1e61d7a1 Mon Sep 17 00:00:00 2001 From: Rens Bekkers Date: Thu, 26 Feb 2026 18:48:08 +0100 Subject: [PATCH 08/11] Use printer-reported Wi-Fi list and router ESSID flow for config --- app/build.gradle | 4 +- .../printerconfig/WifiConfigActivity.java | 323 ++++++------------ app/src/main/res/values/strings.xml | 4 + 3 files changed, 104 insertions(+), 227 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 40d6379..0cf04f8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ android { applicationId "com.sunmi.printerconfig" minSdk 21 targetSdk 35 - versionCode 7 - versionName "1.0.6" + versionCode 8 + versionName "1.0.7" } signingConfigs { diff --git a/app/src/main/java/com/sunmi/printerconfig/WifiConfigActivity.java b/app/src/main/java/com/sunmi/printerconfig/WifiConfigActivity.java index 33a56b9..568eed7 100644 --- a/app/src/main/java/com/sunmi/printerconfig/WifiConfigActivity.java +++ b/app/src/main/java/com/sunmi/printerconfig/WifiConfigActivity.java @@ -1,17 +1,9 @@ package com.sunmi.printerconfig; -import android.Manifest; import android.bluetooth.BluetoothDevice; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.content.pm.PackageManager; -import android.location.LocationManager; -import android.net.wifi.ScanResult; -import android.net.wifi.WifiManager; -import android.os.Build; import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; @@ -24,8 +16,6 @@ import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; -import androidx.core.app.ActivityCompat; -import androidx.core.content.ContextCompat; import com.sunmi.cloudprinter.bean.PrinterDevice; import com.sunmi.cloudprinter.bean.Router; @@ -34,11 +24,9 @@ import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; -import java.util.Set; -import java.util.TreeSet; public class WifiConfigActivity extends AppCompatActivity implements SunmiPrinterClient.IPrinterClient { - private static final int PERMISSION_REQUEST_CODE = 3; + private static final int WIFI_CONFIG_TIMEOUT_MS = 25_000; private String printerAddress; private String printerName; @@ -52,19 +40,16 @@ public class WifiConfigActivity extends AppCompatActivity implements SunmiPrinte private ProgressBar progressBar; private TextView statusText; - private WifiManager wifiManager; private SunmiPrinterClient sunmiPrinterClient; private ArrayAdapter wifiAdapter; - private final List availableSsids = new ArrayList<>(); - private boolean wifiReceiverRegistered = false; - - private final BroadcastReceiver wifiScanReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - if (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(intent.getAction())) { - updateNetworksFromScanResults(); - } + private final List availableRouters = new ArrayList<>(); + private boolean waitingForWifiConfigResult = false; + + private final Handler wifiConfigTimeoutHandler = new Handler(Looper.getMainLooper()); + private final Runnable wifiConfigTimeoutRunnable = () -> { + if (waitingForWifiConfigResult) { + handleConfigurationFailure(getString(R.string.printer_wifi_config_timeout)); } }; @@ -76,7 +61,6 @@ protected void onCreate(Bundle savedInstanceState) { printerAddress = getIntent().getStringExtra("device_address"); printerName = getIntent().getStringExtra("device_name"); - // Backward-compatibility fallback for old intents. if ((printerAddress == null || printerAddress.isEmpty()) || printerName == null) { BluetoothDevice device = getIntent().getParcelableExtra("device"); if (device != null) { @@ -106,7 +90,6 @@ protected void onCreate(Bundle savedInstanceState) { progressBar = findViewById(R.id.progressBar); statusText = findViewById(R.id.statusText); - wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); sunmiPrinterClient = new SunmiPrinterClient(this, this); printerNameText.setText(getString(R.string.connected_to, printerName)); @@ -114,39 +97,39 @@ protected void onCreate(Bundle savedInstanceState) { setupWifiSpinner(); configureButton.setOnClickListener(v -> { - String selectedSsid = resolveSelectedSsid(); + Router selectedRouter = resolveSelectedRouter(); + String manualSsid = manualSsidInput.getText().toString().trim(); String password = passwordInput.getText().toString(); - if (selectedSsid.isEmpty()) { - Toast.makeText(this, R.string.select_or_enter_wifi_network, Toast.LENGTH_SHORT).show(); + if (selectedRouter == null) { + if (manualSsid.isEmpty()) { + Toast.makeText(this, R.string.select_or_enter_wifi_network, Toast.LENGTH_SHORT).show(); + return; + } + configurePrinter(buildManualRouter(manualSsid), password); return; } - if (password.isEmpty()) { + if (selectedRouter.isHasPwd() && password.isEmpty()) { Toast.makeText(this, R.string.enter_wifi_password, Toast.LENGTH_SHORT).show(); return; } - configurePrinter(selectedSsid, password); + configurePrinter(selectedRouter, password); }); } @Override protected void onStart() { super.onStart(); - registerWifiScanReceiver(); - refreshWifiNetworks(); - } - - @Override - protected void onStop() { - super.onStop(); - unregisterWifiScanReceiver(); + loadNetworksFromPrinter(); } @Override protected void onDestroy() { super.onDestroy(); + waitingForWifiConfigResult = false; + wifiConfigTimeoutHandler.removeCallbacks(wifiConfigTimeoutRunnable); if (sunmiPrinterClient != null && printerAddress != null && !printerAddress.isEmpty()) { try { @@ -196,217 +179,105 @@ public void onNothingSelected(AdapterView parent) { updateWifiSpinner(); } - private String resolveSelectedSsid() { + private Router resolveSelectedRouter() { int selectedPosition = wifiSpinner.getSelectedItemPosition(); - if (selectedPosition < 0) { - if (!availableSsids.isEmpty()) { - return availableSsids.get(0); - } - return ""; + if (selectedPosition < 0 || selectedPosition >= availableRouters.size()) { + return null; } if (isManualEntrySelected(selectedPosition)) { - return manualSsidInput.getText().toString().trim(); + return null; } - if (selectedPosition >= availableSsids.size()) { - return ""; - } - - return availableSsids.get(selectedPosition); + return availableRouters.get(selectedPosition); } private boolean isManualEntrySelected(int position) { return wifiAdapter != null && position == wifiAdapter.getCount() - 1; } - private void refreshWifiNetworks() { - if (wifiManager == null || !wifiManager.isWifiEnabled()) { - showManualEntryOnly(getString(R.string.wifi_enable_required)); - return; - } - - if (!checkWifiPermissions()) { - requestWifiPermissions(); - return; - } - - if (!isLocationEnabled()) { - showManualEntryOnly(getString(R.string.wifi_enable_location_required)); - return; - } - - progressBar.setVisibility(View.VISIBLE); - statusText.setText(R.string.wifi_scanning); - - boolean scanStarted; - try { - scanStarted = wifiManager.startScan(); - } catch (SecurityException e) { - scanStarted = false; - } - - if (!scanStarted) { - updateNetworksFromScanResults(); - if (availableSsids.isEmpty()) { - statusText.setText(R.string.wifi_scan_failed); - } - } - } - - private void updateNetworksFromScanResults() { - Set uniqueSsids = new TreeSet<>(String.CASE_INSENSITIVE_ORDER); - - try { - List scanResults = wifiManager.getScanResults(); - for (ScanResult result : scanResults) { - if (result.SSID != null) { - String ssid = result.SSID.trim(); - if (!ssid.isEmpty()) { - uniqueSsids.add(ssid); - } - } - } - } catch (SecurityException e) { - showManualEntryOnly(getString(R.string.wifi_scan_permissions_required)); - return; - } - - availableSsids.clear(); - availableSsids.addAll(uniqueSsids); - updateWifiSpinner(); - - progressBar.setVisibility(View.GONE); - if (availableSsids.isEmpty()) { - statusText.setText(R.string.wifi_no_networks_found); - } else { - statusText.setText(getString(R.string.wifi_networks_found, availableSsids.size())); - } - } - private void updateWifiSpinner() { - List spinnerOptions = new ArrayList<>(availableSsids); - spinnerOptions.add(getString(R.string.manual_entry_option)); + List options = new ArrayList<>(); + for (Router router : availableRouters) { + options.add(getRouterDisplayName(router)); + } + options.add(getString(R.string.manual_entry_option)); wifiAdapter.clear(); - wifiAdapter.addAll(spinnerOptions); + wifiAdapter.addAll(options); wifiAdapter.notifyDataSetChanged(); - if (wifiAdapter.getCount() == 0) { - return; - } - - if (availableSsids.isEmpty()) { - wifiSpinner.setSelection(wifiAdapter.getCount() - 1); - manualSsidContainer.setVisibility(View.VISIBLE); - } else { + if (!availableRouters.isEmpty()) { wifiSpinner.setSelection(0); manualSsidContainer.setVisibility(View.GONE); + configureButton.setEnabled(true); + } else { + wifiSpinner.setSelection(wifiAdapter.getCount() - 1); + manualSsidContainer.setVisibility(View.VISIBLE); + configureButton.setEnabled(true); } } - private void showManualEntryOnly(String message) { - progressBar.setVisibility(View.GONE); - availableSsids.clear(); - updateWifiSpinner(); - - statusText.setText(message); - } - - private boolean checkWifiPermissions() { - boolean hasLocationPermission = ContextCompat.checkSelfPermission(this, - Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED; - - if (!hasLocationPermission) { - return false; - } - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { - return ContextCompat.checkSelfPermission(this, - Manifest.permission.NEARBY_WIFI_DEVICES) == PackageManager.PERMISSION_GRANTED; - } - - return true; - } - - private void requestWifiPermissions() { - List permissions = new ArrayList<>(); - - if (ContextCompat.checkSelfPermission(this, - Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { - permissions.add(Manifest.permission.ACCESS_FINE_LOCATION); - } - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && - ContextCompat.checkSelfPermission(this, - Manifest.permission.NEARBY_WIFI_DEVICES) != PackageManager.PERMISSION_GRANTED) { - permissions.add(Manifest.permission.NEARBY_WIFI_DEVICES); + private String getRouterDisplayName(Router router) { + String name = router.getName(); + if (name != null && !name.trim().isEmpty()) { + return name.trim(); } - if (permissions.isEmpty()) { - refreshWifiNetworks(); - return; + byte[] essid = router.getEssid(); + if (essid == null || essid.length == 0) { + return getString(R.string.unknown_device); } - ActivityCompat.requestPermissions(this, - permissions.toArray(new String[0]), PERMISSION_REQUEST_CODE); + return new String(essid, StandardCharsets.UTF_8).trim(); } - private boolean isLocationEnabled() { - LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); - if (locationManager == null) { - return false; - } - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { - return locationManager.isLocationEnabled(); - } - - return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) - || locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); + private Router buildManualRouter(String ssid) { + Router router = new Router(); + router.setName(ssid); + router.setEssid(ssid.getBytes(StandardCharsets.UTF_8)); + router.setHasPwd(true); + return router; } - private void registerWifiScanReceiver() { - if (wifiReceiverRegistered) { - return; - } - - IntentFilter filter = new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { - registerReceiver(wifiScanReceiver, filter, Context.RECEIVER_NOT_EXPORTED); - } else { - registerReceiver(wifiScanReceiver, filter); - } - wifiReceiverRegistered = true; - } + private void loadNetworksFromPrinter() { + configureButton.setEnabled(false); + progressBar.setVisibility(View.VISIBLE); + statusText.setText(R.string.printer_wifi_scanning); - private void unregisterWifiScanReceiver() { - if (!wifiReceiverRegistered) { - return; - } + availableRouters.clear(); + updateWifiSpinner(); try { - unregisterReceiver(wifiScanReceiver); - } catch (IllegalArgumentException ignored) { + sunmiPrinterClient.getPrinterWifiList(printerAddress); + } catch (Throwable t) { + progressBar.setVisibility(View.GONE); + statusText.setText(R.string.printer_wifi_scan_failed); + configureButton.setEnabled(true); } - wifiReceiverRegistered = false; } - private void configurePrinter(String ssid, String password) { + private void configurePrinter(Router router, String password) { + waitingForWifiConfigResult = true; + wifiConfigTimeoutHandler.removeCallbacks(wifiConfigTimeoutRunnable); + wifiConfigTimeoutHandler.postDelayed(wifiConfigTimeoutRunnable, WIFI_CONFIG_TIMEOUT_MS); + configureButton.setEnabled(false); progressBar.setVisibility(View.VISIBLE); statusText.setText(R.string.sending_wifi_to_printer); try { - byte[] ssidBytes = ssid.getBytes(StandardCharsets.UTF_8); - sunmiPrinterClient.setPrinterWifi(printerAddress, ssidBytes, password); + sunmiPrinterClient.setPrinterWifi(printerAddress, router.getEssid(), password == null ? "" : password); } catch (Throwable t) { handleConfigurationFailure(getString(R.string.wifi_push_failed_try_24g)); } } private void handleConfigurationSuccess() { + waitingForWifiConfigResult = false; + wifiConfigTimeoutHandler.removeCallbacks(wifiConfigTimeoutRunnable); + runOnUiThread(() -> { progressBar.setVisibility(View.GONE); configureButton.setEnabled(true); @@ -417,6 +288,9 @@ private void handleConfigurationSuccess() { } private void handleConfigurationFailure(String message) { + waitingForWifiConfigResult = false; + wifiConfigTimeoutHandler.removeCallbacks(wifiConfigTimeoutRunnable); + runOnUiThread(() -> { progressBar.setVisibility(View.GONE); configureButton.setEnabled(true); @@ -432,17 +306,35 @@ public void onPrinterFount(PrinterDevice printerDevice) { @Override public void routerFound(Router router) { - // Not used in this activity. + runOnUiThread(() -> { + availableRouters.add(router); + updateWifiSpinner(); + }); } @Override public void onGetWifiListFinish() { - // Not used in this activity. + runOnUiThread(() -> { + progressBar.setVisibility(View.GONE); + configureButton.setEnabled(true); + + if (availableRouters.isEmpty()) { + statusText.setText(R.string.printer_wifi_no_networks_found); + manualSsidContainer.setVisibility(View.VISIBLE); + } else { + statusText.setText(getString(R.string.wifi_networks_found, availableRouters.size())); + } + }); } @Override public void onGetWifiListFail() { - // Not used in this activity. + runOnUiThread(() -> { + progressBar.setVisibility(View.GONE); + configureButton.setEnabled(true); + statusText.setText(R.string.printer_wifi_scan_failed); + manualSsidContainer.setVisibility(View.VISIBLE); + }); } @Override @@ -475,23 +367,4 @@ public void getSnRequestSuccess() { public void onSnReceived(String sn) { // Not used in this activity. } - - @Override - public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults); - if (requestCode == PERMISSION_REQUEST_CODE) { - boolean allGranted = true; - for (int result : grantResults) { - if (result != PackageManager.PERMISSION_GRANTED) { - allGranted = false; - break; - } - } - if (allGranted) { - refreshWifiNetworks(); - } else { - Toast.makeText(this, R.string.wifi_scan_permissions_required, Toast.LENGTH_SHORT).show(); - } - } - } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index af8de45..74ff95a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -28,11 +28,15 @@ No Wi-Fi networks found. Enter SSID manually. %1$d Wi-Fi networks found Unable to refresh Wi-Fi scan results + Getting Wi-Fi networks from printer... + Failed to get Wi-Fi networks from printer. Use manual SSID. + No networks reported by printer. Use manual SSID. Please select or enter a Wi-Fi network Please enter Wi-Fi password Connecting to printer... Sending Wi-Fi credentials to printer... Printer connection timed out. Keep the printer close and retry. + Printer did not confirm Wi-Fi configuration in time. Check Wi-Fi (2.4GHz/WPA2) and retry. Unable to connect to printer over Bluetooth. Failed to configure Wi-Fi. Confirm 2.4GHz WPA/WPA2 network and retry. Printer communication error (%1$d): %2$s From 310a15224e937253044268f61c1d98a2d818b83e Mon Sep 17 00:00:00 2001 From: Rens Bekkers Date: Thu, 26 Feb 2026 19:18:46 +0100 Subject: [PATCH 09/11] Fix Android 13+ startup crash from legacy receiver registration --- app/build.gradle | 4 +- .../com/sunmi/printerconfig/MainActivity.java | 5 +- .../printerconfig/ReceiverSafeContext.java | 50 +++++++++++++++++++ .../printerconfig/WifiConfigActivity.java | 5 +- 4 files changed, 60 insertions(+), 4 deletions(-) create mode 100644 app/src/main/java/com/sunmi/printerconfig/ReceiverSafeContext.java diff --git a/app/build.gradle b/app/build.gradle index 0cf04f8..1dd306e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ android { applicationId "com.sunmi.printerconfig" minSdk 21 targetSdk 35 - versionCode 8 - versionName "1.0.7" + versionCode 9 + versionName "1.0.8" } signingConfigs { diff --git a/app/src/main/java/com/sunmi/printerconfig/MainActivity.java b/app/src/main/java/com/sunmi/printerconfig/MainActivity.java index 599350f..2968e95 100644 --- a/app/src/main/java/com/sunmi/printerconfig/MainActivity.java +++ b/app/src/main/java/com/sunmi/printerconfig/MainActivity.java @@ -103,7 +103,10 @@ protected void onCreate(Bundle savedInstanceState) { return; } - sunmiPrinterClient = new SunmiPrinterClient(this, this); + sunmiPrinterClient = new SunmiPrinterClient( + new ReceiverSafeContext(getApplicationContext()), + this + ); scanButton.setOnClickListener(v -> { if (checkPermissions()) { diff --git a/app/src/main/java/com/sunmi/printerconfig/ReceiverSafeContext.java b/app/src/main/java/com/sunmi/printerconfig/ReceiverSafeContext.java new file mode 100644 index 0000000..0c24a91 --- /dev/null +++ b/app/src/main/java/com/sunmi/printerconfig/ReceiverSafeContext.java @@ -0,0 +1,50 @@ +package com.sunmi.printerconfig; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.ContextWrapper; +import android.content.Intent; +import android.content.IntentFilter; +import android.os.Build; +import android.os.Handler; + +/** + * Wraps context receiver registration so legacy SDK code works on Android 13+. + */ +public class ReceiverSafeContext extends ContextWrapper { + public ReceiverSafeContext(Context base) { + super(base); + } + + @Override + public Context getApplicationContext() { + return this; + } + + @Override + public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + return super.registerReceiver(receiver, filter, Context.RECEIVER_NOT_EXPORTED); + } + return super.registerReceiver(receiver, filter); + } + + @Override + public Intent registerReceiver( + BroadcastReceiver receiver, + IntentFilter filter, + String broadcastPermission, + Handler scheduler + ) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + return super.registerReceiver( + receiver, + filter, + broadcastPermission, + scheduler, + Context.RECEIVER_NOT_EXPORTED + ); + } + return super.registerReceiver(receiver, filter, broadcastPermission, scheduler); + } +} diff --git a/app/src/main/java/com/sunmi/printerconfig/WifiConfigActivity.java b/app/src/main/java/com/sunmi/printerconfig/WifiConfigActivity.java index 568eed7..b70ec02 100644 --- a/app/src/main/java/com/sunmi/printerconfig/WifiConfigActivity.java +++ b/app/src/main/java/com/sunmi/printerconfig/WifiConfigActivity.java @@ -90,7 +90,10 @@ protected void onCreate(Bundle savedInstanceState) { progressBar = findViewById(R.id.progressBar); statusText = findViewById(R.id.statusText); - sunmiPrinterClient = new SunmiPrinterClient(this, this); + sunmiPrinterClient = new SunmiPrinterClient( + new ReceiverSafeContext(getApplicationContext()), + this + ); printerNameText.setText(getString(R.string.connected_to, printerName)); From b492a564f383fd8306e5db9e41f088a73898bda7 Mon Sep 17 00:00:00 2001 From: Rens Bekkers Date: Thu, 26 Feb 2026 19:23:56 +0100 Subject: [PATCH 10/11] Bump Play internal release to 1.0.9 (code 10) --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 1dd306e..aa62e4f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ android { applicationId "com.sunmi.printerconfig" minSdk 21 targetSdk 35 - versionCode 9 - versionName "1.0.8" + versionCode 10 + versionName "1.0.9" } signingConfigs { From a2f1b23d77717c12161713241a4f8d6a36dc4c12 Mon Sep 17 00:00:00 2001 From: Rens Bekkers Date: Thu, 26 Feb 2026 19:36:37 +0100 Subject: [PATCH 11/11] Fix BLE printer connection reliability on Android 12+ --- app/build.gradle | 4 +- .../printerconfig/BluetoothDeviceAdapter.java | 84 --------- .../printerconfig/DiscoveredPrinter.java | 38 ++++ .../DiscoveredPrinterAdapter.java | 66 +++++++ .../com/sunmi/printerconfig/MainActivity.java | 166 ++++++++---------- app/src/main/res/values/strings.xml | 3 + 6 files changed, 186 insertions(+), 175 deletions(-) delete mode 100644 app/src/main/java/com/sunmi/printerconfig/BluetoothDeviceAdapter.java create mode 100644 app/src/main/java/com/sunmi/printerconfig/DiscoveredPrinter.java create mode 100644 app/src/main/java/com/sunmi/printerconfig/DiscoveredPrinterAdapter.java diff --git a/app/build.gradle b/app/build.gradle index aa62e4f..023b81b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,8 +18,8 @@ android { applicationId "com.sunmi.printerconfig" minSdk 21 targetSdk 35 - versionCode 10 - versionName "1.0.9" + versionCode 11 + versionName "1.0.10" } signingConfigs { diff --git a/app/src/main/java/com/sunmi/printerconfig/BluetoothDeviceAdapter.java b/app/src/main/java/com/sunmi/printerconfig/BluetoothDeviceAdapter.java deleted file mode 100644 index d3bc5cd..0000000 --- a/app/src/main/java/com/sunmi/printerconfig/BluetoothDeviceAdapter.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.sunmi.printerconfig; - -import android.Manifest; -import android.bluetooth.BluetoothDevice; -import android.content.pm.PackageManager; -import android.os.Build; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; -import androidx.recyclerview.widget.RecyclerView; - -import java.util.List; - -public class BluetoothDeviceAdapter extends RecyclerView.Adapter { - private final List devices; - private final OnDeviceClickListener listener; - - public interface OnDeviceClickListener { - void onDeviceClick(BluetoothDevice device); - } - - public BluetoothDeviceAdapter(List devices, OnDeviceClickListener listener) { - this.devices = devices; - this.listener = listener; - } - - @NonNull - @Override - public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - View view = LayoutInflater.from(parent.getContext()) - .inflate(R.layout.item_bluetooth_device, parent, false); - return new ViewHolder(view); - } - - @Override - public void onBindViewHolder(@NonNull ViewHolder holder, int position) { - BluetoothDevice device = devices.get(position); - boolean hasPermission = true; - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { - hasPermission = ContextCompat.checkSelfPermission(holder.itemView.getContext(), - Manifest.permission.BLUETOOTH_CONNECT) == PackageManager.PERMISSION_GRANTED; - } - - if (hasPermission) { - String baseName = holder.itemView.getContext().getString(R.string.unknown_device); - String name = device.getName(); - if (name != null && !name.trim().isEmpty()) { - baseName = name; - } - if (PrinterDeviceClassifier.isLikelySunmi(name)) { - baseName = baseName + " \u2022 " + holder.itemView.getContext().getString(R.string.likely_sunmi); - } - String address = device.getAddress(); - holder.deviceName.setText(baseName); - holder.deviceAddress.setText(address); - } else { - holder.deviceName.setText(R.string.permission_required_short); - holder.deviceAddress.setText(""); - } - - holder.itemView.setOnClickListener(v -> listener.onDeviceClick(device)); - } - - @Override - public int getItemCount() { - return devices.size(); - } - - static class ViewHolder extends RecyclerView.ViewHolder { - TextView deviceName; - TextView deviceAddress; - - ViewHolder(View itemView) { - super(itemView); - deviceName = itemView.findViewById(R.id.deviceName); - deviceAddress = itemView.findViewById(R.id.deviceAddress); - } - } -} diff --git a/app/src/main/java/com/sunmi/printerconfig/DiscoveredPrinter.java b/app/src/main/java/com/sunmi/printerconfig/DiscoveredPrinter.java new file mode 100644 index 0000000..84cf6e8 --- /dev/null +++ b/app/src/main/java/com/sunmi/printerconfig/DiscoveredPrinter.java @@ -0,0 +1,38 @@ +package com.sunmi.printerconfig; + +import java.util.Objects; + +public final class DiscoveredPrinter { + private final String address; + private final String name; + + public DiscoveredPrinter(String address, String name) { + this.address = address == null ? "" : address.trim(); + this.name = name == null ? "" : name.trim(); + } + + public String getAddress() { + return address; + } + + public String getName() { + return name; + } + + @Override + public boolean equals(Object other) { + if (this == other) { + return true; + } + if (!(other instanceof DiscoveredPrinter)) { + return false; + } + DiscoveredPrinter that = (DiscoveredPrinter) other; + return Objects.equals(address, that.address); + } + + @Override + public int hashCode() { + return Objects.hash(address); + } +} diff --git a/app/src/main/java/com/sunmi/printerconfig/DiscoveredPrinterAdapter.java b/app/src/main/java/com/sunmi/printerconfig/DiscoveredPrinterAdapter.java new file mode 100644 index 0000000..11b7bbe --- /dev/null +++ b/app/src/main/java/com/sunmi/printerconfig/DiscoveredPrinterAdapter.java @@ -0,0 +1,66 @@ +package com.sunmi.printerconfig; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import java.util.List; + +public class DiscoveredPrinterAdapter extends RecyclerView.Adapter { + private final List devices; + private final OnDeviceClickListener listener; + + public interface OnDeviceClickListener { + void onDeviceClick(DiscoveredPrinter device); + } + + public DiscoveredPrinterAdapter(List devices, OnDeviceClickListener listener) { + this.devices = devices; + this.listener = listener; + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.item_bluetooth_device, parent, false); + return new ViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { + DiscoveredPrinter device = devices.get(position); + + String baseName = device.getName().isEmpty() + ? holder.itemView.getContext().getString(R.string.unknown_device) + : device.getName(); + + if (PrinterDeviceClassifier.isLikelySunmi(device.getName())) { + baseName = baseName + " \u2022 " + holder.itemView.getContext().getString(R.string.likely_sunmi); + } + + holder.deviceName.setText(baseName); + holder.deviceAddress.setText(device.getAddress()); + holder.itemView.setOnClickListener(v -> listener.onDeviceClick(device)); + } + + @Override + public int getItemCount() { + return devices.size(); + } + + static class ViewHolder extends RecyclerView.ViewHolder { + private final TextView deviceName; + private final TextView deviceAddress; + + ViewHolder(View itemView) { + super(itemView); + deviceName = itemView.findViewById(R.id.deviceName); + deviceAddress = itemView.findViewById(R.id.deviceAddress); + } + } +} diff --git a/app/src/main/java/com/sunmi/printerconfig/MainActivity.java b/app/src/main/java/com/sunmi/printerconfig/MainActivity.java index 2968e95..ef18ead 100644 --- a/app/src/main/java/com/sunmi/printerconfig/MainActivity.java +++ b/app/src/main/java/com/sunmi/printerconfig/MainActivity.java @@ -2,11 +2,7 @@ import android.Manifest; import android.bluetooth.BluetoothAdapter; -import android.bluetooth.BluetoothDevice; -import android.content.BroadcastReceiver; -import android.content.Context; import android.content.Intent; -import android.content.IntentFilter; import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; @@ -29,11 +25,14 @@ import com.sunmi.cloudprinter.presenter.SunmiPrinterClient; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; public class MainActivity extends AppCompatActivity implements SunmiPrinterClient.IPrinterClient { private static final int PERMISSION_REQUEST_CODE = 1; private static final int REQUEST_ENABLE_BT = 2; + private static final int PRINTER_SCAN_TIMEOUT_MS = 12_000; private static final int PRINTER_CONNECTION_TIMEOUT_MS = 10_000; private BluetoothAdapter bluetoothAdapter; @@ -41,44 +40,33 @@ public class MainActivity extends AppCompatActivity implements SunmiPrinterClien private ProgressBar progressBar; private TextView statusText; private RecyclerView devicesRecyclerView; - private BluetoothDeviceAdapter deviceAdapter; - private final List deviceList = new ArrayList<>(); + private DiscoveredPrinterAdapter deviceAdapter; + private final List deviceList = new ArrayList<>(); + private final Set discoveredAddresses = new HashSet<>(); private SunmiPrinterClient sunmiPrinterClient; + private final Handler scanTimeoutHandler = new Handler(Looper.getMainLooper()); private final Handler connectionTimeoutHandler = new Handler(Looper.getMainLooper()); private String pendingPrinterAddress; private String pendingPrinterName; + private boolean scanInProgress = false; private boolean waitingForPrinterConnection = false; - private final Runnable connectionTimeoutRunnable = () -> { - if (waitingForPrinterConnection) { - handlePrinterConnectionFailure(getString(R.string.printer_connection_timeout)); + private final Runnable scanTimeoutRunnable = () -> { + if (!scanInProgress || waitingForPrinterConnection) { + return; + } + + stopPrinterScan(true); + if (deviceList.isEmpty()) { + statusText.setText(R.string.no_compatible_printers_found); } }; - private final BroadcastReceiver bluetoothReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (BluetoothDevice.ACTION_FOUND.equals(action)) { - BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); - if (device != null && checkBluetoothPermission() && !deviceList.contains(device)) { - deviceList.add(device); - deviceAdapter.notifyDataSetChanged(); - } - } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) { - if (!waitingForPrinterConnection) { - progressBar.setVisibility(View.GONE); - scanButton.setEnabled(true); - scanButton.setText(R.string.scan_bluetooth); - if (deviceList.isEmpty()) { - statusText.setText(R.string.no_devices_found); - } else { - statusText.setText(""); - } - } - } + private final Runnable connectionTimeoutRunnable = () -> { + if (waitingForPrinterConnection) { + handlePrinterConnectionFailure(getString(R.string.printer_connection_timeout)); } }; @@ -92,7 +80,7 @@ protected void onCreate(Bundle savedInstanceState) { statusText = findViewById(R.id.statusText); devicesRecyclerView = findViewById(R.id.devicesRecyclerView); - deviceAdapter = new BluetoothDeviceAdapter(deviceList, this::onDeviceClick); + deviceAdapter = new DiscoveredPrinterAdapter(deviceList, this::onDeviceClick); devicesRecyclerView.setLayoutManager(new LinearLayoutManager(this)); devicesRecyclerView.setAdapter(deviceAdapter); @@ -115,11 +103,6 @@ protected void onCreate(Bundle savedInstanceState) { requestPermissions(); } }); - - IntentFilter filter = new IntentFilter(); - filter.addAction(BluetoothDevice.ACTION_FOUND); - filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); - registerReceiver(bluetoothReceiver, filter); } private boolean checkPermissions() { @@ -152,57 +135,67 @@ private void requestPermissions() { PERMISSION_REQUEST_CODE); } - private boolean checkBluetoothPermission() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { - return ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_CONNECT) == PackageManager.PERMISSION_GRANTED; - } - return true; - } - private void startBluetoothScan() { if (!bluetoothAdapter.isEnabled()) { Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); - if (checkBluetoothPermission()) { - startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); - } + startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); return; } waitingForPrinterConnection = false; + stopPrinterScan(false); + + scanInProgress = true; + scanTimeoutHandler.removeCallbacks(scanTimeoutRunnable); connectionTimeoutHandler.removeCallbacks(connectionTimeoutRunnable); + discoveredAddresses.clear(); deviceList.clear(); deviceAdapter.notifyDataSetChanged(); statusText.setText(R.string.scanning); - if (checkBluetoothPermission() && bluetoothAdapter.isDiscovering()) { - bluetoothAdapter.cancelDiscovery(); - } - scanButton.setEnabled(false); scanButton.setText(R.string.scanning); progressBar.setVisibility(View.VISIBLE); - if (checkBluetoothPermission()) { - bluetoothAdapter.startDiscovery(); + try { + sunmiPrinterClient.startScan(); + scanTimeoutHandler.postDelayed(scanTimeoutRunnable, PRINTER_SCAN_TIMEOUT_MS); + } catch (Throwable t) { + stopPrinterScan(true); + statusText.setText(getString(R.string.error, getString(R.string.printer_scan_failed))); } } - private void onDeviceClick(BluetoothDevice device) { - if (!checkBluetoothPermission()) { - Toast.makeText(this, R.string.permissions_required, Toast.LENGTH_SHORT).show(); - return; + private void stopPrinterScan(boolean resetUi) { + scanTimeoutHandler.removeCallbacks(scanTimeoutRunnable); + if (scanInProgress) { + scanInProgress = false; + try { + sunmiPrinterClient.stopScan(); + } catch (Throwable ignored) { + } } - - if (bluetoothAdapter.isDiscovering()) { - bluetoothAdapter.cancelDiscovery(); + if (resetUi && !waitingForPrinterConnection) { + progressBar.setVisibility(View.GONE); + scanButton.setEnabled(true); + scanButton.setText(R.string.scan_bluetooth); } + } - pendingPrinterAddress = safeGetDeviceAddress(device); - pendingPrinterName = safeGetDeviceName(device); + private void onDeviceClick(DiscoveredPrinter device) { + stopPrinterScan(false); + + pendingPrinterAddress = device.getAddress(); + pendingPrinterName = device.getName().isEmpty() + ? getString(R.string.unknown_device) + : device.getName(); if (pendingPrinterAddress.isEmpty()) { Toast.makeText(this, R.string.printer_address_unavailable, Toast.LENGTH_LONG).show(); + progressBar.setVisibility(View.GONE); + scanButton.setEnabled(true); + scanButton.setText(R.string.scan_bluetooth); return; } @@ -222,23 +215,6 @@ private void onDeviceClick(BluetoothDevice device) { } } - private String safeGetDeviceAddress(BluetoothDevice device) { - try { - return device.getAddress() != null ? device.getAddress() : ""; - } catch (SecurityException e) { - return ""; - } - } - - private String safeGetDeviceName(BluetoothDevice device) { - try { - String name = device.getName(); - return name != null && !name.isEmpty() ? name : getString(R.string.unknown_device); - } catch (SecurityException e) { - return getString(R.string.unknown_device); - } - } - private void openWifiConfigScreen() { Intent intent = new Intent(this, WifiConfigActivity.class); intent.putExtra("device_address", pendingPrinterAddress); @@ -261,7 +237,25 @@ private void handlePrinterConnectionFailure(String message) { @Override public void onPrinterFount(PrinterDevice printerDevice) { - // Not used with classic Bluetooth discovery flow. + if (printerDevice == null) { + return; + } + + String address = printerDevice.getAddress(); + if (address == null || address.trim().isEmpty()) { + return; + } + + String name = printerDevice.getName(); + runOnUiThread(() -> { + if (!scanInProgress || !discoveredAddresses.add(address)) { + return; + } + + deviceList.add(new DiscoveredPrinter(address, name)); + deviceAdapter.notifyDataSetChanged(); + statusText.setText(getString(R.string.printers_found, deviceList.size())); + }); } @Override @@ -307,6 +301,7 @@ public void getSnRequestSuccess() { @Override public void onSnReceived(String sn) { + stopPrinterScan(false); waitingForPrinterConnection = false; connectionTimeoutHandler.removeCallbacks(connectionTimeoutRunnable); @@ -341,17 +336,10 @@ public void onRequestPermissionsResult(int requestCode, String[] permissions, in @Override protected void onDestroy() { super.onDestroy(); + stopPrinterScan(false); + scanTimeoutHandler.removeCallbacks(scanTimeoutRunnable); connectionTimeoutHandler.removeCallbacks(connectionTimeoutRunnable); - try { - unregisterReceiver(bluetoothReceiver); - } catch (Exception ignored) { - } - - if (bluetoothAdapter != null && checkBluetoothPermission() && bluetoothAdapter.isDiscovering()) { - bluetoothAdapter.cancelDiscovery(); - } - if (sunmiPrinterClient != null && pendingPrinterAddress != null && !pendingPrinterAddress.isEmpty()) { try { sunmiPrinterClient.disconnect(pendingPrinterAddress); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 74ff95a..e13f38b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -36,6 +36,9 @@ Connecting to printer... Sending Wi-Fi credentials to printer... Printer connection timed out. Keep the printer close and retry. + Failed to scan for compatible printers. + No compatible printers found. Make sure the printer is in pairing/config mode and retry. + %1$d compatible printer(s) found Printer did not confirm Wi-Fi configuration in time. Check Wi-Fi (2.4GHz/WPA2) and retry. Unable to connect to printer over Bluetooth. Failed to configure Wi-Fi. Confirm 2.4GHz WPA/WPA2 network and retry.