From cf45a8079cd101ddd3ee2e7880a3f8adce902a74 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Tue, 4 Aug 2020 16:54:30 +0200 Subject: [PATCH] Simplified getting the BluetoothAdapter. --- build.gradle | 2 +- .../sensors/BluetoothRemoteSensorManager.java | 8 +-- .../opentracks/settings/SettingsActivity.java | 2 +- .../BluetoothLeSensorPreference.java | 2 +- .../opentracks/util/BluetoothUtils.java | 53 +++++-------------- 5 files changed, 18 insertions(+), 49 deletions(-) diff --git a/build.gradle b/build.gradle index a0277cf77..bf8e701fe 100644 --- a/build.gradle +++ b/build.gradle @@ -99,5 +99,5 @@ dependencies { androidTestImplementation 'androidx.test.ext:junit:1.1.1' androidTestImplementation 'androidx.test:rules:1.2.0' androidTestImplementation 'androidx.test:runner:1.2.0' - androidTestImplementation 'org.mockito:mockito-android:3.4.4' + androidTestImplementation 'org.mockito:mockito-android:3.4.6' } diff --git a/src/main/java/de/dennisguse/opentracks/services/sensors/BluetoothRemoteSensorManager.java b/src/main/java/de/dennisguse/opentracks/services/sensors/BluetoothRemoteSensorManager.java index 153e37674..401d772a5 100644 --- a/src/main/java/de/dennisguse/opentracks/services/sensors/BluetoothRemoteSensorManager.java +++ b/src/main/java/de/dennisguse/opentracks/services/sensors/BluetoothRemoteSensorManager.java @@ -50,8 +50,7 @@ public class BluetoothRemoteSensorManager implements BluetoothConnectionManager. public static final long MAX_SENSOR_DATE_SET_AGE_MS = 5 * UnitConversions.S_TO_MS; - private static final BluetoothAdapter bluetoothAdapter = BluetoothUtils.getDefaultBluetoothAdapter(TAG); - + private final BluetoothAdapter bluetoothAdapter; private final Context context; private final SharedPreferences sharedPreferences; @@ -86,12 +85,10 @@ public class BluetoothRemoteSensorManager implements BluetoothConnectionManager. } }; - /** - * @param context the context - */ public BluetoothRemoteSensorManager(Context context) { this.context = context; sharedPreferences = PreferencesUtils.getSharedPreferences(context); + bluetoothAdapter = BluetoothUtils.getAdapter(context); } public void start() { @@ -103,7 +100,6 @@ public class BluetoothRemoteSensorManager implements BluetoothConnectionManager. } public synchronized void stop() { - // Disconnecting heartRate.disconnect(); cyclingCadence.disconnect(); diff --git a/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java b/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java index 17b9786f1..713432ca3 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java +++ b/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java @@ -137,7 +137,7 @@ public class SettingsActivity extends AppCompatActivity implements ChooseActivit private void updateBluetooth() { // Disable Bluetooth preference if device does not have Bluetooth BluetoothLeSensorPreference bluetoothPreference = findPreference(getString(R.string.settings_sensor_bluetooth_heart_rate_key)); - bluetoothPreference.setVisible(BluetoothUtils.hasBluetooth(TAG)); + bluetoothPreference.setVisible(BluetoothUtils.hasBluetooth(getContext())); } private void updateUnits() { diff --git a/src/main/java/de/dennisguse/opentracks/settings/bluetooth/BluetoothLeSensorPreference.java b/src/main/java/de/dennisguse/opentracks/settings/bluetooth/BluetoothLeSensorPreference.java index 3a34d8eaa..d89246301 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/bluetooth/BluetoothLeSensorPreference.java +++ b/src/main/java/de/dennisguse/opentracks/settings/bluetooth/BluetoothLeSensorPreference.java @@ -136,7 +136,7 @@ public abstract class BluetoothLeSensorPreference extends DialogPreference { UUID sensorUUID = (UUID) getArguments().getSerializable(ARG_BLUETOOTH_UUID); Log.i(TAG, "UUID: " + sensorUUID); - BluetoothAdapter bluetoothAdapter = BluetoothUtils.getDefaultBluetoothAdapter(TAG); + BluetoothAdapter bluetoothAdapter = BluetoothUtils.getAdapter(getContext()); if (bluetoothAdapter == null || !bluetoothAdapter.isEnabled()) { Log.w(TAG, "Bluetooth adapter is present or not enabled."); Toast.makeText(getContext(), R.string.bluetooth_disabled, Toast.LENGTH_SHORT).show(); diff --git a/src/main/java/de/dennisguse/opentracks/util/BluetoothUtils.java b/src/main/java/de/dennisguse/opentracks/util/BluetoothUtils.java index 26928de70..9c2dd5c22 100644 --- a/src/main/java/de/dennisguse/opentracks/util/BluetoothUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/BluetoothUtils.java @@ -17,13 +17,12 @@ package de.dennisguse.opentracks.util; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothGattCharacteristic; -import android.os.Handler; -import android.os.Looper; +import android.bluetooth.BluetoothManager; +import android.content.Context; import android.util.Log; import androidx.annotation.NonNull; -import java.util.ArrayList; import java.util.UUID; import de.dennisguse.opentracks.content.sensor.SensorDataCycling; @@ -43,49 +42,23 @@ public class BluetoothUtils { public static final UUID CYCLING_SPEED_CADENCE_SERVICE_UUID = new UUID(0x181600001000L, 0x800000805f9b34fbL); public static final UUID CYCLING_SPPED_CADENCE_MEASUREMENT_CHAR_UUID = new UUID(0x2A5B00001000L, 0x800000805f9b34fbL); + private static final String TAG = BluetoothUtils.class.getSimpleName(); + private BluetoothUtils() { } - /** - * If called from UI: use a background thread to get the default Bluetooth adapter. - * TODO Check if this is necessary. - */ - public static BluetoothAdapter getDefaultBluetoothAdapter(final String TAG) { - // If from the main application thread, return directly - if (Thread.currentThread().equals(Looper.getMainLooper().getThread())) { - return BluetoothAdapter.getDefaultAdapter(); + public static BluetoothAdapter getAdapter(Context context) { + BluetoothManager bluetoothManager = (BluetoothManager) context.getSystemService(Context.BLUETOOTH_SERVICE); + if (bluetoothManager == null) { + Log.i(TAG, "BluetoothManager not available."); + return null; + } else { + return bluetoothManager.getAdapter(); } - - // Get the default adapter from the main application thread - final ArrayList adapters = new ArrayList<>(1); - final Object mutex = new Object(); - - Handler handler = new Handler(Looper.getMainLooper()); - handler.post(() -> { - adapters.add(BluetoothAdapter.getDefaultAdapter()); - synchronized (mutex) { - mutex.notify(); - } - }); - - while (adapters.isEmpty()) { - synchronized (mutex) { - try { - mutex.wait(UnitConversions.ONE_SECOND_MS); - } catch (InterruptedException e) { - Log.e(TAG, "Interrupted while waiting for default bluetooth adapter", e); - } - } - } - - if (adapters.get(0) == null) { - Log.w(TAG, "No bluetooth adapter found."); - } - return adapters.get(0); } - public static boolean hasBluetooth(final String TAG) { - return BluetoothUtils.getDefaultBluetoothAdapter(TAG) != null; + public static boolean hasBluetooth(Context context) { + return BluetoothUtils.getAdapter(context) != null; } public static Integer parseHeartRate(BluetoothGattCharacteristic characteristic) {