forked from upstream-mirrors/OpenTracks
Refactoring.
This commit is contained in:
@@ -54,6 +54,7 @@ import de.dennisguse.opentracks.settings.SettingsActivity;
|
|||||||
import de.dennisguse.opentracks.util.FileUtils;
|
import de.dennisguse.opentracks.util.FileUtils;
|
||||||
import de.dennisguse.opentracks.util.IntentUtils;
|
import de.dennisguse.opentracks.util.IntentUtils;
|
||||||
import de.dennisguse.opentracks.util.PreferencesUtils;
|
import de.dennisguse.opentracks.util.PreferencesUtils;
|
||||||
|
import de.dennisguse.opentracks.util.StatsUtils;
|
||||||
import de.dennisguse.opentracks.util.TrackIconUtils;
|
import de.dennisguse.opentracks.util.TrackIconUtils;
|
||||||
import de.dennisguse.opentracks.util.TrackUtils;
|
import de.dennisguse.opentracks.util.TrackUtils;
|
||||||
|
|
||||||
@@ -120,8 +121,7 @@ public class TrackDetailActivity extends AbstractListActivity implements ChooseA
|
|||||||
* Note that sharedPreferenceChangeListener cannot be an anonymous inner
|
* Note that sharedPreferenceChangeListener cannot be an anonymous inner
|
||||||
* class. Anonymous inner class will get garbage collected.
|
* class. Anonymous inner class will get garbage collected.
|
||||||
*/
|
*/
|
||||||
private final OnSharedPreferenceChangeListener
|
private final OnSharedPreferenceChangeListener sharedPreferenceChangeListener = new OnSharedPreferenceChangeListener() {
|
||||||
sharedPreferenceChangeListener = new OnSharedPreferenceChangeListener() {
|
|
||||||
@Override
|
@Override
|
||||||
public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
|
public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
|
||||||
if (PreferencesUtils.isKey(TrackDetailActivity.this, R.string.recording_track_id_key, key)) {
|
if (PreferencesUtils.isKey(TrackDetailActivity.this, R.string.recording_track_id_key, key)) {
|
||||||
@@ -412,10 +412,16 @@ public class TrackDetailActivity extends AbstractListActivity implements ChooseA
|
|||||||
/**
|
/**
|
||||||
* Gets the track id.
|
* Gets the track id.
|
||||||
*/
|
*/
|
||||||
|
// TODO Seems to be no used.
|
||||||
|
@Deprecated
|
||||||
public long getTrackId() {
|
public long getTrackId() {
|
||||||
return trackId;
|
return trackId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setBluetoothHeartRateSensorName(String sensorName) {
|
||||||
|
StatsUtils.setBluetoothHeartRateSensorName(this, sensorName, isRecording());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handles the data in the intent.
|
* Handles the data in the intent.
|
||||||
*/
|
*/
|
||||||
|
|||||||
+12
-4
@@ -21,6 +21,7 @@ import android.bluetooth.BluetoothGatt;
|
|||||||
import android.bluetooth.BluetoothGattCallback;
|
import android.bluetooth.BluetoothGattCallback;
|
||||||
import android.bluetooth.BluetoothGattCharacteristic;
|
import android.bluetooth.BluetoothGattCharacteristic;
|
||||||
import android.bluetooth.BluetoothGattDescriptor;
|
import android.bluetooth.BluetoothGattDescriptor;
|
||||||
|
import android.bluetooth.BluetoothGattService;
|
||||||
import android.bluetooth.BluetoothProfile;
|
import android.bluetooth.BluetoothProfile;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
@@ -45,7 +46,6 @@ public class BluetoothConnectionManager {
|
|||||||
static final int MESSAGE_READ = 3;
|
static final int MESSAGE_READ = 3;
|
||||||
static final int MESSAGE_DISCONNECTED = 4;
|
static final int MESSAGE_DISCONNECTED = 4;
|
||||||
|
|
||||||
public static final UUID HEART_RATE_SERVICE_UUID = new UUID(0x180D00001000L, 0x800000805f9b34fbL);
|
|
||||||
private static final UUID HEART_RATE_MEASUREMENT_CHAR_UUID = new UUID(0x2A3700001000L, 0x800000805f9b34fbL);
|
private static final UUID HEART_RATE_MEASUREMENT_CHAR_UUID = new UUID(0x2A3700001000L, 0x800000805f9b34fbL);
|
||||||
private static final UUID CLIENT_CHARACTERISTIC_CONFIG_UUID = new UUID(0x290200001000L, 0x800000805f9b34fbL);
|
private static final UUID CLIENT_CHARACTERISTIC_CONFIG_UUID = new UUID(0x290200001000L, 0x800000805f9b34fbL);
|
||||||
|
|
||||||
@@ -90,10 +90,18 @@ public class BluetoothConnectionManager {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onServicesDiscovered(@NonNull BluetoothGatt gatt, int status) {
|
public void onServicesDiscovered(@NonNull BluetoothGatt gatt, int status) {
|
||||||
BluetoothGattCharacteristic characteristic = gatt
|
BluetoothGattService service = gatt.getService(BluetoothUtils.HEART_RATE_SERVICE_UUID);
|
||||||
.getService(HEART_RATE_SERVICE_UUID)
|
if (service == null) {
|
||||||
.getCharacteristic(HEART_RATE_MEASUREMENT_CHAR_UUID);
|
Log.e(TAG, "Could not get heart rate service for " + gatt.getDevice().getAddress());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BluetoothGattCharacteristic characteristic = service.getCharacteristic(HEART_RATE_MEASUREMENT_CHAR_UUID);
|
||||||
|
if (characteristic == null) {
|
||||||
|
Log.e(TAG, "Could not get BluetoothCharacteristic for " + gatt.getDevice().getAddress());
|
||||||
|
return;
|
||||||
|
}
|
||||||
gatt.setCharacteristicNotification(characteristic, true);
|
gatt.setCharacteristicNotification(characteristic, true);
|
||||||
|
|
||||||
BluetoothGattDescriptor descriptor = characteristic.getDescriptor(CLIENT_CHARACTERISTIC_CONFIG_UUID);
|
BluetoothGattDescriptor descriptor = characteristic.getDescriptor(CLIENT_CHARACTERISTIC_CONFIG_UUID);
|
||||||
|
|||||||
+3
-2
@@ -86,7 +86,7 @@ public class BluetoothRemoteSensorManager {
|
|||||||
@Override
|
@Override
|
||||||
public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
|
public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
|
||||||
if (bluetoothConnectionManager != null && PreferencesUtils.isKey(context, R.string.settings_sensor_bluetooth_heart_rate_key, key)) {
|
if (bluetoothConnectionManager != null && PreferencesUtils.isKey(context, R.string.settings_sensor_bluetooth_heart_rate_key, key)) {
|
||||||
String address = PreferencesUtils.getString(context, R.string.settings_sensor_bluetooth_heart_rate_key, PreferencesUtils.BLUETOOTH_SENSOR_DEFAULT);
|
String address = PreferencesUtils.getBluetoothHeartRateSensorAddress(context);
|
||||||
if (address.equals(PreferencesUtils.BLUETOOTH_SENSOR_DEFAULT)) {
|
if (address.equals(PreferencesUtils.BLUETOOTH_SENSOR_DEFAULT)) {
|
||||||
stop();
|
stop();
|
||||||
return;
|
return;
|
||||||
@@ -145,7 +145,8 @@ public class BluetoothRemoteSensorManager {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
String address = PreferencesUtils.getString(context, R.string.settings_sensor_bluetooth_heart_rate_key, PreferencesUtils.BLUETOOTH_SENSOR_DEFAULT);
|
// String address = PreferencesUtils.getString(context, R.string.settings_sensor_bluetooth_heart_rate_key, PreferencesUtils.BLUETOOTH_SENSOR_DEFAULT);
|
||||||
|
String address = PreferencesUtils.getBluetoothHeartRateSensorAddress(context);
|
||||||
if (PreferencesUtils.BLUETOOTH_SENSOR_DEFAULT.equals(address)) {
|
if (PreferencesUtils.BLUETOOTH_SENSOR_DEFAULT.equals(address)) {
|
||||||
Log.w(TAG, "No bluetooth address.");
|
Log.w(TAG, "No bluetooth address.");
|
||||||
return;
|
return;
|
||||||
|
|||||||
+13
-14
@@ -23,30 +23,29 @@ import java.util.ArrayList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import de.dennisguse.opentracks.R;
|
import de.dennisguse.opentracks.R;
|
||||||
import de.dennisguse.opentracks.services.sensors.BluetoothConnectionManager;
|
|
||||||
import de.dennisguse.opentracks.util.BluetoothUtils;
|
import de.dennisguse.opentracks.util.BluetoothUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Preference to select a discoverable Bluetooth LE device.
|
* Preference to select a discoverable Bluetooth LE device.
|
||||||
* Based upon ListPreference.
|
* Based upon ListPreference.
|
||||||
*/
|
*/
|
||||||
public class BluetoothLeListPreference extends DialogPreference {
|
public class BluetoothLePreference extends DialogPreference {
|
||||||
|
|
||||||
private final static String TAG = BluetoothLeListPreference.class.getSimpleName();
|
private final static String TAG = BluetoothLePreference.class.getSimpleName();
|
||||||
|
|
||||||
public BluetoothLeListPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
public BluetoothLePreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
||||||
super(context, attrs, defStyleAttr, defStyleRes);
|
super(context, attrs, defStyleAttr, defStyleRes);
|
||||||
}
|
}
|
||||||
|
|
||||||
public BluetoothLeListPreference(Context context, AttributeSet attrs, int defStyleAttr) {
|
public BluetoothLePreference(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||||
super(context, attrs, defStyleAttr);
|
super(context, attrs, defStyleAttr);
|
||||||
}
|
}
|
||||||
|
|
||||||
public BluetoothLeListPreference(Context context, AttributeSet attrs) {
|
public BluetoothLePreference(Context context, AttributeSet attrs) {
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
public BluetoothLeListPreference(Context context) {
|
public BluetoothLePreference(Context context) {
|
||||||
super(context);
|
super(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -79,7 +78,7 @@ public class BluetoothLeListPreference extends DialogPreference {
|
|||||||
return getValue();
|
return getValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class BluetoothLeListPreferenceDialog extends PreferenceDialogFragmentCompat {
|
public static class BluetoothLePreferenceDialog extends PreferenceDialogFragmentCompat {
|
||||||
|
|
||||||
private int selectedEntryIndex;
|
private int selectedEntryIndex;
|
||||||
private BluetoothLeAdapter listAdapter = new BluetoothLeAdapter();
|
private BluetoothLeAdapter listAdapter = new BluetoothLeAdapter();
|
||||||
@@ -110,8 +109,8 @@ public class BluetoothLeListPreference extends DialogPreference {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static BluetoothLeListPreferenceDialog newInstance(String key) {
|
static BluetoothLePreferenceDialog newInstance(String key) {
|
||||||
final BluetoothLeListPreferenceDialog fragment = new BluetoothLeListPreferenceDialog();
|
final BluetoothLePreferenceDialog fragment = new BluetoothLePreferenceDialog();
|
||||||
final Bundle b = new Bundle(1);
|
final Bundle b = new Bundle(1);
|
||||||
b.putString(ARG_KEY, key);
|
b.putString(ARG_KEY, key);
|
||||||
fragment.setArguments(b);
|
fragment.setArguments(b);
|
||||||
@@ -146,14 +145,14 @@ public class BluetoothLeListPreference extends DialogPreference {
|
|||||||
listAdapter.add(getContext().getString(R.string.value_none), deviceNone);
|
listAdapter.add(getContext().getString(R.string.value_none), deviceNone);
|
||||||
selectedEntryIndex = 0;
|
selectedEntryIndex = 0;
|
||||||
|
|
||||||
BluetoothLeListPreference preference = (BluetoothLeListPreference) getPreference();
|
BluetoothLePreference preference = (BluetoothLePreference) getPreference();
|
||||||
String deviceSelected = preference.getValue();
|
String deviceSelected = preference.getValue();
|
||||||
if (!deviceNone.equals(deviceSelected)) {
|
if (!deviceNone.equals(deviceSelected)) {
|
||||||
listAdapter.add(preference.getValue(), preference.getValue());
|
listAdapter.add(preference.getValue(), preference.getValue());
|
||||||
selectedEntryIndex = 1;
|
selectedEntryIndex = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ScanFilter.Builder scanFilterBuilder = new ScanFilter.Builder().setServiceUuid(new ParcelUuid(BluetoothConnectionManager.HEART_RATE_SERVICE_UUID));
|
ScanFilter.Builder scanFilterBuilder = new ScanFilter.Builder().setServiceUuid(new ParcelUuid(BluetoothUtils.HEART_RATE_SERVICE_UUID));
|
||||||
List<ScanFilter> scanFilter = new ArrayList<>();
|
List<ScanFilter> scanFilter = new ArrayList<>();
|
||||||
scanFilter.add(scanFilterBuilder.build());
|
scanFilter.add(scanFilterBuilder.build());
|
||||||
|
|
||||||
@@ -174,7 +173,7 @@ public class BluetoothLeListPreference extends DialogPreference {
|
|||||||
public void onClick(DialogInterface dialog, int which) {
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
selectedEntryIndex = which;
|
selectedEntryIndex = which;
|
||||||
|
|
||||||
BluetoothLeListPreferenceDialog.this.onClick(dialog, DialogInterface.BUTTON_POSITIVE);
|
BluetoothLePreferenceDialog.this.onClick(dialog, DialogInterface.BUTTON_POSITIVE);
|
||||||
dialog.dismiss();
|
dialog.dismiss();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -190,7 +189,7 @@ public class BluetoothLeListPreference extends DialogPreference {
|
|||||||
|
|
||||||
if (positiveResult && selectedEntryIndex >= 0) {
|
if (positiveResult && selectedEntryIndex >= 0) {
|
||||||
String value = listAdapter.get(selectedEntryIndex).getAddress();
|
String value = listAdapter.get(selectedEntryIndex).getAddress();
|
||||||
BluetoothLeListPreference preference = (BluetoothLeListPreference) getPreference();
|
BluetoothLePreference preference = (BluetoothLePreference) getPreference();
|
||||||
if (preference.callChangeListener(value)) {
|
if (preference.callChangeListener(value)) {
|
||||||
preference.setValue(value);
|
preference.setValue(value);
|
||||||
}
|
}
|
||||||
@@ -124,8 +124,8 @@ public class SettingsActivity extends AppCompatActivity implements ChooseActivit
|
|||||||
} else if (preference instanceof ActivityTypePreference) {
|
} else if (preference instanceof ActivityTypePreference) {
|
||||||
activityPreferenceDialog = ActivityTypePreference.ActivityPreferenceDialog.newInstance(preference.getKey());
|
activityPreferenceDialog = ActivityTypePreference.ActivityPreferenceDialog.newInstance(preference.getKey());
|
||||||
dialogFragment = activityPreferenceDialog;
|
dialogFragment = activityPreferenceDialog;
|
||||||
} else if (preference instanceof BluetoothLeListPreference) {
|
} else if (preference instanceof BluetoothLePreference) {
|
||||||
dialogFragment = BluetoothLeListPreference.BluetoothLeListPreferenceDialog.newInstance(preference.getKey());
|
dialogFragment = BluetoothLePreference.BluetoothLePreferenceDialog.newInstance(preference.getKey());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dialogFragment != null) {
|
if (dialogFragment != null) {
|
||||||
@@ -157,7 +157,7 @@ public class SettingsActivity extends AppCompatActivity implements ChooseActivit
|
|||||||
|
|
||||||
private void updateBluetooth() {
|
private void updateBluetooth() {
|
||||||
// Disable Bluetooth preference if device does not have Bluetooth
|
// Disable Bluetooth preference if device does not have Bluetooth
|
||||||
BluetoothLeListPreference bluetoothPreference = findPreference(getString(R.string.settings_sensor_bluetooth_heart_rate_key));
|
BluetoothLePreference bluetoothPreference = findPreference(getString(R.string.settings_sensor_bluetooth_heart_rate_key));
|
||||||
bluetoothPreference.setVisible(BluetoothUtils.hasBluetooth(TAG));
|
bluetoothPreference.setVisible(BluetoothUtils.hasBluetooth(TAG));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import android.os.Looper;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Utilities for dealing with bluetooth devices.
|
* Utilities for dealing with bluetooth devices.
|
||||||
@@ -30,6 +31,8 @@ import java.util.ArrayList;
|
|||||||
*/
|
*/
|
||||||
public class BluetoothUtils {
|
public class BluetoothUtils {
|
||||||
|
|
||||||
|
public static final UUID HEART_RATE_SERVICE_UUID = new UUID(0x180D00001000L, 0x800000805f9b34fbL);
|
||||||
|
|
||||||
private BluetoothUtils() {
|
private BluetoothUtils() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -251,6 +251,13 @@ public class PreferencesUtils {
|
|||||||
PreferencesUtils.setBoolean(context, R.string.recording_track_paused_key, RECORDING_TRACK_PAUSED);
|
PreferencesUtils.setBoolean(context, R.string.recording_track_paused_key, RECORDING_TRACK_PAUSED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isBluetoothHeartRateSensorAddressDefault(Context context) {
|
||||||
|
return PreferencesUtils.BLUETOOTH_SENSOR_DEFAULT.equals(getBluetoothHeartRateSensorAddress(context));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getBluetoothHeartRateSensorAddress(Context context) {
|
||||||
|
return PreferencesUtils.getString(context, R.string.settings_sensor_bluetooth_heart_rate_key, PreferencesUtils.BLUETOOTH_SENSOR_DEFAULT);
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean isChartByDistance(Context context) {
|
public static boolean isChartByDistance(Context context) {
|
||||||
final String CHART_X_AXIS_DEFAULT = context.getString(R.string.chart_x_axis_default);
|
final String CHART_X_AXIS_DEFAULT = context.getString(R.string.chart_x_axis_default);
|
||||||
|
|||||||
@@ -108,7 +108,7 @@ public class StatsUtils {
|
|||||||
public static void setSensorData(Activity activity, SensorDataSet sensorDataSet, boolean isRecording) {
|
public static void setSensorData(Activity activity, SensorDataSet sensorDataSet, boolean isRecording) {
|
||||||
// heart rate
|
// heart rate
|
||||||
int isVisible = View.VISIBLE;
|
int isVisible = View.VISIBLE;
|
||||||
if (!isRecording || PreferencesUtils.BLUETOOTH_SENSOR_DEFAULT.equals(PreferencesUtils.getString(activity, R.string.settings_sensor_bluetooth_heart_rate_key, PreferencesUtils.BLUETOOTH_SENSOR_DEFAULT))) {
|
if (!isRecording || PreferencesUtils.isBluetoothHeartRateSensorAddressDefault(activity)) {
|
||||||
isVisible = View.INVISIBLE;
|
isVisible = View.INVISIBLE;
|
||||||
}
|
}
|
||||||
activity.findViewById(R.id.stats_sensor_container).setVisibility(isVisible);
|
activity.findViewById(R.id.stats_sensor_container).setVisibility(isVisible);
|
||||||
@@ -125,11 +125,18 @@ public class StatsUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
heartRateValue.setText(heartRate);
|
setBluetoothHeartRateSensorName(activity, sensor, isRecording);
|
||||||
heartRateSensor.setText(sensor);
|
heartRateSensor.setText(sensor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void setBluetoothHeartRateSensorName(Activity activity, String sensorName, boolean isRecording) {
|
||||||
|
if (isRecording) {
|
||||||
|
TextView heartRateSensor = activity.findViewById(R.id.stats_sensor_heart_rate_sensor_value);
|
||||||
|
heartRateSensor.setText(sensorName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the total time value.
|
* Sets the total time value.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ limitations under the License.
|
|||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
<PreferenceCategory android:title="@string/settings_sensor_bluetooth">
|
<PreferenceCategory android:title="@string/settings_sensor_bluetooth">
|
||||||
<de.dennisguse.opentracks.settings.BluetoothLeListPreference
|
<de.dennisguse.opentracks.settings.BluetoothLePreference
|
||||||
android:defaultValue="@string/sensor_type_value_none"
|
android:defaultValue="@string/sensor_type_value_none"
|
||||||
android:key="@string/settings_sensor_bluetooth_heart_rate_key"
|
android:key="@string/settings_sensor_bluetooth_heart_rate_key"
|
||||||
android:title="@string/sensor_state_heart_rate" />
|
android:title="@string/sensor_state_heart_rate" />
|
||||||
|
|||||||
Reference in New Issue
Block a user