mirror of
https://codeberg.org/OpenTracksApp/OpenTracks.git
synced 2026-10-03 09:53:06 +02:00
Track recording service handles the status of recording: track's id, pause and GPS status.
Created an interface for all components that want to know about recording status through the service. All interface's methods are optional so every component can implement what they need. Fixes #388.
This commit is contained in:
@@ -20,8 +20,12 @@ import java.util.Locale;
|
||||
|
||||
import de.dennisguse.opentracks.AbstractActivity;
|
||||
import de.dennisguse.opentracks.R;
|
||||
import de.dennisguse.opentracks.content.data.Track;
|
||||
import de.dennisguse.opentracks.fragments.ChooseActivityTypeDialogFragment;
|
||||
import de.dennisguse.opentracks.io.file.TrackFileFormat;
|
||||
import de.dennisguse.opentracks.services.TrackRecordingServiceStatus;
|
||||
import de.dennisguse.opentracks.services.TrackRecordingServiceConnection;
|
||||
import de.dennisguse.opentracks.services.TrackRecordingServiceInterface;
|
||||
import de.dennisguse.opentracks.settings.bluetooth.BluetoothLeCyclingCadenceAndSpeedPreference;
|
||||
import de.dennisguse.opentracks.settings.bluetooth.BluetoothLeCyclingPowerPreference;
|
||||
import de.dennisguse.opentracks.settings.bluetooth.BluetoothLeHeartRatePreference;
|
||||
@@ -89,14 +93,11 @@ public class SettingsActivity extends AbstractActivity implements ChooseActivity
|
||||
getSupportFragmentManager().beginTransaction().replace(R.id.settings_fragment, prefsFragment).commit();
|
||||
}
|
||||
|
||||
public static class PrefsFragment extends PreferenceFragmentCompat {
|
||||
public static class PrefsFragment extends PreferenceFragmentCompat implements TrackRecordingServiceStatus.Listener {
|
||||
|
||||
private SharedPreferences sharedPreferences;
|
||||
|
||||
private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = (sharedPreferences, key) -> {
|
||||
if (PreferencesUtils.isKey(getActivity(), R.string.recording_track_id_key, key)) {
|
||||
getActivity().runOnUiThread(this::updateReset);
|
||||
}
|
||||
if (PreferencesUtils.isKey(getActivity(), R.string.stats_units_key, key)) {
|
||||
getActivity().runOnUiThread(this::updateUnits);
|
||||
}
|
||||
@@ -105,6 +106,19 @@ public class SettingsActivity extends AbstractActivity implements ChooseActivity
|
||||
}
|
||||
};
|
||||
|
||||
private TrackRecordingServiceConnection trackRecordingServiceConnection;
|
||||
private boolean isRecording;
|
||||
|
||||
private final Runnable bindServiceCallback = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
TrackRecordingServiceInterface service = trackRecordingServiceConnection.getServiceIfBound();
|
||||
if (service != null) {
|
||||
service.addListener(PrefsFragment.this);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Used to forward update from ChooseActivityTypeDialogFragment; TODO Could be replaced with LiveData.
|
||||
private ActivityTypePreference.ActivityPreferenceDialog activityPreferenceDialog;
|
||||
|
||||
@@ -112,6 +126,8 @@ public class SettingsActivity extends AbstractActivity implements ChooseActivity
|
||||
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
||||
sharedPreferences = PreferencesUtils.getSharedPreferences(getContext());
|
||||
|
||||
trackRecordingServiceConnection = new TrackRecordingServiceConnection(bindServiceCallback);
|
||||
|
||||
try {
|
||||
setPreferencesFromResource(R.xml.settings, rootKey);
|
||||
} catch (ClassCastException e) {
|
||||
@@ -137,13 +153,14 @@ public class SettingsActivity extends AbstractActivity implements ChooseActivity
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
|
||||
trackRecordingServiceConnection.bind(getContext());
|
||||
|
||||
sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
|
||||
sharedPreferenceChangeListener.onSharedPreferenceChanged(sharedPreferences, null);
|
||||
|
||||
updateUnits();
|
||||
updateReset();
|
||||
updatePrefsDependOnRecording();
|
||||
updateBluetooth();
|
||||
|
||||
updatePostWorkoutExport();
|
||||
}
|
||||
|
||||
@@ -186,6 +203,7 @@ public class SettingsActivity extends AbstractActivity implements ChooseActivity
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
super.onDestroy();
|
||||
trackRecordingServiceConnection.unbind(getContext());
|
||||
sharedPreferences = null;
|
||||
}
|
||||
|
||||
@@ -195,11 +213,18 @@ public class SettingsActivity extends AbstractActivity implements ChooseActivity
|
||||
}
|
||||
}
|
||||
|
||||
private void updateReset() {
|
||||
final boolean isRecording = PreferencesUtils.isRecording(sharedPreferences, getActivity());
|
||||
private void updatePrefsDependOnRecording() {
|
||||
Preference resetPreference = findPreference(getString(R.string.settings_reset_key));
|
||||
Preference importPreference = findPreference(getString(R.string.settings_import));
|
||||
Preference exportPreference = findPreference(getString(R.string.settings_export));
|
||||
|
||||
resetPreference.setSummary(isRecording ? getString(R.string.settings_not_while_recording) : "");
|
||||
importPreference.setSummary(isRecording ? getString(R.string.settings_not_while_recording) : "");
|
||||
exportPreference.setSummary(isRecording ? getString(R.string.settings_not_while_recording) : "");
|
||||
|
||||
resetPreference.setEnabled(!isRecording);
|
||||
importPreference.setEnabled(!isRecording);
|
||||
exportPreference.setEnabled(!isRecording);
|
||||
}
|
||||
|
||||
private void updateBluetooth() {
|
||||
@@ -266,6 +291,14 @@ public class SettingsActivity extends AbstractActivity implements ChooseActivity
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTrackRecordingId(Track.Id trackId) {
|
||||
if (trackId != null && !isRecording && isAdded()) {
|
||||
isRecording = true;
|
||||
updatePrefsDependOnRecording();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user