Skip to content

Commit 3da3648

Browse files
author
Lev Serebryakov
committed
Add setting to enable track splitting on power status change.
This change doesn't have translations for two new strings.
1 parent 2c22199 commit 3da3648

File tree

5 files changed

+62
-1
lines changed

5 files changed

+62
-1
lines changed

OsmAnd/res/values/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1866,6 +1866,8 @@
18661866
</string -->
18671867
<string name="auto_split_recording_title">Auto-split recordings after gap</string>
18681868
<string name="auto_split_recording_descr">Start new segment after gap of 6 min, new track after gap of 2 h, or new file after a longer gap if the date has changed.</string>
1869+
<string name="powerchange_split_recording_title">Auto-split recordings on power status change.</string>
1870+
<string name="powerchange_split_recording_descr">Start new segment when power status changes between AC and battery and back.</string>
18691871
<string name="rendering_attr_contourDensity_description">Contour line density</string>
18701872
<string name="rendering_attr_contourDensity_name">Contour line density</string>
18711873
<string name="rendering_value_high_name">High</string>

OsmAnd/res/xml/monitoring_settings.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,13 @@
7474
android:summaryOn="@string/shared_string_enabled"
7575
android:title="@string/auto_split_recording_title" />
7676

77+
<net.osmand.plus.settings.preferences.SwitchPreferenceEx
78+
android:key="powerchange_split_recording"
79+
android:layout="@layout/preference_with_descr_dialog_and_switch"
80+
android:summaryOff="@string/shared_string_disabled"
81+
android:summaryOn="@string/shared_string_enabled"
82+
android:title="@string/powerchange_split_recording_title" />
83+
7784
<net.osmand.plus.settings.preferences.SwitchPreferenceEx
7885
android:key="disable_recording_once_app_killed"
7986
android:layout="@layout/preference_with_descr_dialog_and_switch"

OsmAnd/src/net/osmand/plus/monitoring/MonitoringSettingsFragment.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ protected void setupPreferences() {
9393
setupSaveTrackPrecisionPref();
9494
setupSaveTrackMinSpeedPref();
9595
setupAutoSplitRecordingPref();
96+
setupPowerchangeSplitRecordingPref();
9697
setupDisableRecordingOnceAppKilledPref();
9798
setupSaveHeadingToGpxPref();
9899

@@ -224,6 +225,11 @@ private void setupAutoSplitRecordingPref() {
224225
autoSplitRecording.setDescription(getString(R.string.auto_split_recording_descr));
225226
}
226227

228+
private void setupPowerchangeSplitRecordingPref() {
229+
SwitchPreferenceEx powerchangeSplitRecording = (SwitchPreferenceEx) findPreference(settings.POWERCHANGE_SPLIT_RECORDING.getId());
230+
powerchangeSplitRecording.setDescription(getString(R.string.powerchange_split_recording_descr));
231+
}
232+
227233
private void setupDisableRecordingOnceAppKilledPref() {
228234
SwitchPreferenceEx disableRecordingOnceAppKilled = (SwitchPreferenceEx) findPreference(settings.DISABLE_RECORDING_ONCE_APP_KILLED.getId());
229235
disableRecordingOnceAppKilled.setDescription(getString(R.string.disable_recording_once_app_killed_descrp));

OsmAnd/src/net/osmand/plus/monitoring/OsmandMonitoringPlugin.java

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package net.osmand.plus.monitoring;
22

33
import android.app.Activity;
4+
import android.content.BroadcastReceiver;
45
import android.content.Context;
56
import android.content.DialogInterface.OnClickListener;
7+
import android.content.Intent;
8+
import android.content.IntentFilter;
69
import android.content.pm.PackageManager;
710
import android.graphics.drawable.Drawable;
811
import android.view.View;
@@ -27,6 +30,7 @@
2730
import net.osmand.GPXUtilities.GPXFile;
2831
import net.osmand.Location;
2932
import net.osmand.PlatformUtil;
33+
import net.osmand.StateChangedListener;
3034
import net.osmand.ValueHolder;
3135
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
3236
import net.osmand.plus.NavigationService;
@@ -57,6 +61,7 @@
5761
import java.util.Collections;
5862
import java.util.List;
5963
import java.util.Map;
64+
import java.util.concurrent.atomic.AtomicBoolean;
6065

6166
import static net.osmand.plus.UiUtilities.CompoundButtonType.PROFILE_DEPENDENT;
6267

@@ -73,6 +78,10 @@ public class OsmandMonitoringPlugin extends OsmandPlugin {
7378
private LiveMonitoringHelper liveMonitoringHelper;
7479
private boolean isSaving;
7580
private boolean showDialogWhenActivityResumed;
81+
private BroadcastReceiver powerChangeReceiver;
82+
private AtomicBoolean powerChangeReceiverRegistered;
83+
private StateChangedListener<Boolean> powerChangeOptionListener;
84+
private IntentFilter powerChangeActions;
7685

7786
public OsmandMonitoringPlugin(OsmandApplication app) {
7887
super(app);
@@ -85,6 +94,7 @@ public OsmandMonitoringPlugin(OsmandApplication app) {
8594
pluginPreferences.add(settings.SAVE_TRACK_MIN_DISTANCE);
8695
pluginPreferences.add(settings.SAVE_TRACK_PRECISION);
8796
pluginPreferences.add(settings.AUTO_SPLIT_RECORDING);
97+
pluginPreferences.add(settings.POWERCHANGE_SPLIT_RECORDING);
8898
pluginPreferences.add(settings.DISABLE_RECORDING_ONCE_APP_KILLED);
8999
pluginPreferences.add(settings.SAVE_HEADING_TO_GPX);
90100
pluginPreferences.add(settings.SHOW_TRIP_REC_NOTIFICATION);
@@ -94,12 +104,47 @@ public OsmandMonitoringPlugin(OsmandApplication app) {
94104
pluginPreferences.add(settings.LIVE_MONITORING_URL);
95105
pluginPreferences.add(settings.LIVE_MONITORING_INTERVAL);
96106
pluginPreferences.add(settings.LIVE_MONITORING_MAX_INTERVAL_TO_SEND);
107+
108+
powerChangeReceiver = new BroadcastReceiver() {
109+
@Override
110+
public void onReceive(Context context, Intent intent) {
111+
if (settings.SAVE_GLOBAL_TRACK_TO_GPX.get() && settings.POWERCHANGE_SPLIT_RECORDING.get()) {
112+
app.getSavingTrackHelper().startNewSegment();
113+
}
114+
}
115+
};
116+
powerChangeReceiverRegistered = new AtomicBoolean(false);
117+
118+
powerChangeActions = new IntentFilter();
119+
powerChangeActions.addAction(Intent.ACTION_POWER_CONNECTED);
120+
powerChangeActions.addAction(Intent.ACTION_POWER_DISCONNECTED);
121+
122+
powerChangeOptionListener = new StateChangedListener<Boolean>() {
123+
@Override
124+
public void stateChanged(Boolean change) {
125+
if (settings.SAVE_GLOBAL_TRACK_TO_GPX.get() && settings.POWERCHANGE_SPLIT_RECORDING.get()) {
126+
app.registerReceiver(powerChangeReceiver, powerChangeActions);
127+
powerChangeReceiverRegistered.set(true);
128+
} else if (powerChangeReceiverRegistered.get()) {
129+
app.unregisterReceiver(powerChangeReceiver);
130+
powerChangeReceiverRegistered.set(false);
131+
}
132+
}
133+
};
134+
135+
settings.SAVE_GLOBAL_TRACK_TO_GPX.addListener(powerChangeOptionListener);
136+
settings.POWERCHANGE_SPLIT_RECORDING.addListener(powerChangeOptionListener);
137+
powerChangeOptionListener.stateChanged(settings.SAVE_GLOBAL_TRACK_TO_GPX.get());
97138
}
98139

99140
@Override
100141
public void disable(OsmandApplication app) {
101142
super.disable(app);
102143
app.getNotificationHelper().refreshNotifications();
144+
if (powerChangeReceiverRegistered.get()) {
145+
app.unregisterReceiver(powerChangeReceiver);
146+
powerChangeReceiverRegistered.set(false);
147+
}
103148
}
104149

105150
@Override
@@ -713,5 +758,4 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
713758
public DashFragmentData getCardFragment() {
714759
return DashTrackFragment.FRAGMENT_DATA;
715760
}
716-
717761
}

OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1530,6 +1530,8 @@ protected boolean setValue(Object prefs, Boolean val) {
15301530
//}
15311531
public final CommonPreference<Boolean> AUTO_SPLIT_RECORDING = new BooleanPreference(this, "auto_split_recording", true).makeProfile();
15321532

1533+
public final CommonPreference<Boolean> POWERCHANGE_SPLIT_RECORDING = new BooleanPreference(this, "powerchange_split_recording", false).makeProfile();
1534+
15331535
public final CommonPreference<Boolean> SHOW_TRIP_REC_NOTIFICATION = new BooleanPreference(this, "show_trip_recording_notification", true).makeProfile();
15341536

15351537
// this value string is synchronized with settings_pref.xml preference name

0 commit comments

Comments
 (0)