diff --git a/OsmAnd/res/layout/bottom_sheet_button_with_icon.xml b/OsmAnd/res/layout/bottom_sheet_button_with_icon.xml
index 79b89d1213..b184a3bea7 100644
--- a/OsmAnd/res/layout/bottom_sheet_button_with_icon.xml
+++ b/OsmAnd/res/layout/bottom_sheet_button_with_icon.xml
@@ -19,6 +19,7 @@
android:paddingEnd="@dimen/content_padding_small"
android:paddingRight="@dimen/content_padding_small"
android:paddingBottom="@dimen/text_margin_small"
+ tools:background="@drawable/btn_background_inactive_dark"
tools:ignore="UselessParent">
+ tools:textColor="@color/active_color_primary_dark" />
@@ -62,7 +63,7 @@
android:layout_marginLeft="@dimen/context_menu_padding_margin_large"
android:duplicateParentState="true"
tools:srcCompat="@drawable/ic_action_appearance"
- tools:tint="@color/icon_color_secondary_light" />
+ tools:tint="@color/icon_color_active_dark" />
diff --git a/OsmAnd/res/layout/bottom_sheet_item_button_with_icon.xml b/OsmAnd/res/layout/bottom_sheet_item_button_with_icon.xml
index 3d2d1bbab1..2e1c2cd881 100644
--- a/OsmAnd/res/layout/bottom_sheet_item_button_with_icon.xml
+++ b/OsmAnd/res/layout/bottom_sheet_item_button_with_icon.xml
@@ -1,7 +1,7 @@
@@ -9,9 +9,9 @@
android:id="@+id/button_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:duplicateParentState="true"
android:gravity="center_vertical"
android:orientation="horizontal"
- android:duplicateParentState="true"
android:paddingStart="@dimen/content_padding_small"
android:paddingLeft="@dimen/content_padding_small"
android:paddingTop="@dimen/text_margin_small"
@@ -33,6 +33,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:duplicateParentState="true"
+ android:letterSpacing="@dimen/description_letter_spacing"
android:textSize="@dimen/default_desc_text_size"
osmand:typeface="@string/font_roboto_medium"
tools:text="Title"
@@ -43,10 +44,10 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:duplicateParentState="true"
+ android:letterSpacing="@dimen/description_letter_spacing"
android:textColor="@color/text_color_secondary_light"
android:textSize="@dimen/default_desc_text_size"
android:visibility="gone"
- android:letterSpacing="@dimen/description_letter_spacing"
osmand:typeface="@string/font_roboto_medium"
tools:text="Description"
tools:visibility="visible" />
@@ -57,9 +58,9 @@
android:id="@+id/icon"
android:layout_width="@dimen/map_widget_icon"
android:layout_height="@dimen/map_widget_icon"
- android:duplicateParentState="true"
android:layout_marginStart="@dimen/context_menu_padding_margin_large"
android:layout_marginLeft="@dimen/context_menu_padding_margin_large"
+ android:duplicateParentState="true"
tools:srcCompat="@drawable/ic_action_appearance"
tools:tint="@color/icon_color_secondary_light" />
diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java
index 625396e5e3..b216913466 100644
--- a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java
+++ b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java
@@ -360,10 +360,10 @@ public class MapActivityActions implements DialogProvider {
}
public void addActionsToAdapter(final double latitude,
- final double longitude,
- final ContextMenuAdapter adapter,
- Object selectedObj,
- boolean configureMenu) {
+ final double longitude,
+ final ContextMenuAdapter adapter,
+ Object selectedObj,
+ boolean configureMenu) {
ItemBuilder itemBuilder = new ItemBuilder();
adapter.addItem(itemBuilder
@@ -543,17 +543,17 @@ public class MapActivityActions implements DialogProvider {
}
public void enterRoutePlanningModeGivenGpx(GPXFile gpxFile, LatLon from, PointDescription fromName,
- boolean useIntermediatePointsByDefault, boolean showMenu) {
+ boolean useIntermediatePointsByDefault, boolean showMenu) {
enterRoutePlanningModeGivenGpx(gpxFile, from, fromName, useIntermediatePointsByDefault, showMenu, MapRouteInfoMenu.DEFAULT_MENU_STATE);
}
public void enterRoutePlanningModeGivenGpx(GPXFile gpxFile, LatLon from, PointDescription fromName,
- boolean useIntermediatePointsByDefault, boolean showMenu, int menuState) {
+ boolean useIntermediatePointsByDefault, boolean showMenu, int menuState) {
enterRoutePlanningModeGivenGpx(gpxFile, null, from, fromName, useIntermediatePointsByDefault, showMenu, menuState);
}
public void enterRoutePlanningModeGivenGpx(GPXFile gpxFile, ApplicationMode appMode, LatLon from, PointDescription fromName,
- boolean useIntermediatePointsByDefault, boolean showMenu, int menuState) {
+ boolean useIntermediatePointsByDefault, boolean showMenu, int menuState) {
settings.USE_INTERMEDIATE_POINTS_NAVIGATION.set(useIntermediatePointsByDefault);
OsmandApplication app = mapActivity.getMyApplication();
TargetPointsHelper targets = app.getTargetPointsHelper();
@@ -843,7 +843,8 @@ public class MapActivityActions implements DialogProvider {
}
}).createItem());
- boolean isTripRecordingPluginOn = OsmandPlugin.getEnabledPlugin(OsmandMonitoringPlugin.class) != null;
+ final OsmandMonitoringPlugin monitoringPlugin = OsmandPlugin.getEnabledPlugin(OsmandMonitoringPlugin.class);
+ boolean isTripRecordingPluginOn = monitoringPlugin != null;
if (isTripRecordingPluginOn) {
optionsMenuHelper.addItem(new ItemBuilder().setTitleId(R.string.map_widget_monitoring, mapActivity)
.setId(DRAWER_TRIP_RECORDING_ID)
@@ -853,7 +854,13 @@ public class MapActivityActions implements DialogProvider {
public boolean onContextMenuClick(ArrayAdapter adapter, int itemId, int pos, boolean isChecked, int[] viewCoordinates) {
app.logEvent("trip_recording_open");
MapActivity.clearPrevActivityIntent();
- TripRecordingBottomSheet.showInstance(mapActivity.getSupportFragmentManager());
+ if (monitoringPlugin.isHasDataToSave() || monitoringPlugin.isWasTrackMonitored()) {
+ TripRecordingActiveBottomSheet.showInstance(mapActivity.getSupportFragmentManager(),
+ monitoringPlugin.getCurrentTrack(), monitoringPlugin.isWasTrackMonitored(),
+ monitoringPlugin.isHasDataToSave(), monitoringPlugin.isSearchingGPS());
+ } else {
+ TripRecordingBottomSheet.showInstance(mapActivity.getSupportFragmentManager());
+ }
return true;
}
}).createItem());
@@ -1107,7 +1114,7 @@ public class MapActivityActions implements DialogProvider {
}
private String getProfileDescription(OsmandApplication app, ApplicationMode mode,
- Map profilesObjects, String defaultDescription) {
+ Map profilesObjects, String defaultDescription) {
String description = defaultDescription;
String routingProfileKey = mode.getRoutingProfile();
diff --git a/OsmAnd/src/net/osmand/plus/monitoring/ClearRecordedDataBottomSheetFragment.java b/OsmAnd/src/net/osmand/plus/monitoring/ClearRecordedDataBottomSheetFragment.java
index 971bfd01e0..0bdced7bc5 100644
--- a/OsmAnd/src/net/osmand/plus/monitoring/ClearRecordedDataBottomSheetFragment.java
+++ b/OsmAnd/src/net/osmand/plus/monitoring/ClearRecordedDataBottomSheetFragment.java
@@ -102,26 +102,18 @@ public class ClearRecordedDataBottomSheetFragment extends MenuBottomSheetDialogF
@Override
public void onResume() {
super.onResume();
- // Replace later with tTripRecordingActiveBottomSheet.hide()
Fragment target = getTargetFragment();
if (target instanceof TripRecordingActiveBottomSheet) {
- Dialog dialog = ((TripRecordingActiveBottomSheet) target).getDialog();
- if (dialog != null) {
- dialog.hide();
- }
+ ((TripRecordingActiveBottomSheet) target).hide();
}
}
@Override
public void onPause() {
super.onPause();
- // Replace later with tTripRecordingActiveBottomSheet.show()
Fragment target = getTargetFragment();
if (target instanceof TripRecordingActiveBottomSheet) {
- Dialog dialog = ((TripRecordingActiveBottomSheet) target).getDialog();
- if (dialog != null) {
- dialog.show();
- }
+ ((TripRecordingActiveBottomSheet) target).show();
}
}
diff --git a/OsmAnd/src/net/osmand/plus/monitoring/OsmandMonitoringPlugin.java b/OsmAnd/src/net/osmand/plus/monitoring/OsmandMonitoringPlugin.java
index 65538733b0..eaa54a948a 100644
--- a/OsmAnd/src/net/osmand/plus/monitoring/OsmandMonitoringPlugin.java
+++ b/OsmAnd/src/net/osmand/plus/monitoring/OsmandMonitoringPlugin.java
@@ -28,6 +28,8 @@ import com.google.android.material.slider.Slider;
import net.osmand.AndroidUtils;
import net.osmand.Location;
import net.osmand.ValueHolder;
+import net.osmand.plus.GpxSelectionHelper;
+import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
import net.osmand.plus.NavigationService;
import net.osmand.plus.OsmAndFormatter;
import net.osmand.plus.OsmAndLocationProvider;
@@ -318,8 +320,34 @@ public class OsmandMonitoringPlugin extends OsmandPlugin {
}
}
+ public SelectedGpxFile getCurrentTrack() {
+ return app.getSavingTrackHelper().getCurrentTrack();
+ }
+
+ public boolean isWasTrackMonitored() {
+ return settings.SAVE_GLOBAL_TRACK_TO_GPX.get();
+ }
+
+ public boolean isHasDataToSave() {
+ return app.getSavingTrackHelper().hasDataToSave();
+ }
+
+ public boolean isSearchingGPS() {
+ OsmAndLocationProvider locationProvider = app.getLocationProvider();
+ Location lastKnownLocation = locationProvider.getLastKnownLocation();
+ return lastKnownLocation == null;
+ }
+
public void controlDialog(final Activity activity, final boolean showTrackSelection) {
- final boolean wasTrackMonitored = settings.SAVE_GLOBAL_TRACK_TO_GPX.get();
+ if (isHasDataToSave() || isWasTrackMonitored()) {
+ FragmentActivity fragmentActivity = (FragmentActivity) activity;
+ TripRecordingActiveBottomSheet.showInstance(fragmentActivity.getSupportFragmentManager(),
+ getCurrentTrack(), isWasTrackMonitored(), isHasDataToSave(), isSearchingGPS());
+ } else {
+ FragmentActivity fragmentActivity = (FragmentActivity) activity;
+ TripRecordingBottomSheet.showInstance(fragmentActivity.getSupportFragmentManager());
+ }
+ /*final boolean wasTrackMonitored = settings.SAVE_GLOBAL_TRACK_TO_GPX.get();
final boolean nightMode;
if (activity instanceof MapActivity) {
nightMode = app.getDaynightHelper().isNightModeForMapControls();
@@ -328,8 +356,6 @@ public class OsmandMonitoringPlugin extends OsmandPlugin {
}
AlertDialog.Builder bld = new AlertDialog.Builder(UiUtilities.getThemedContext(activity, nightMode));
final TIntArrayList items = new TIntArrayList();
- FragmentActivity fragmentActivity = (FragmentActivity) activity;
- TripRecordingActiveBottomSheet.showInstance(fragmentActivity.getSupportFragmentManager());
if (wasTrackMonitored) {
items.add(R.string.gpx_monitoring_stop);
items.add(R.string.gpx_start_new_segment);
@@ -419,7 +445,7 @@ public class OsmandMonitoringPlugin extends OsmandPlugin {
}
});
// bld.show();
- }
+ }*/
}
public void saveCurrentTrack() {
diff --git a/OsmAnd/src/net/osmand/plus/monitoring/StopTrackRecordingBottomFragment.java b/OsmAnd/src/net/osmand/plus/monitoring/StopTrackRecordingBottomFragment.java
index b7bf829457..5172bfc1bf 100644
--- a/OsmAnd/src/net/osmand/plus/monitoring/StopTrackRecordingBottomFragment.java
+++ b/OsmAnd/src/net/osmand/plus/monitoring/StopTrackRecordingBottomFragment.java
@@ -128,26 +128,18 @@ public class StopTrackRecordingBottomFragment extends MenuBottomSheetDialogFragm
@Override
public void onResume() {
super.onResume();
- // Replace later with tTripRecordingActiveBottomSheet.hide()
Fragment target = getTargetFragment();
if (target instanceof TripRecordingActiveBottomSheet) {
- Dialog dialog = ((TripRecordingActiveBottomSheet) target).getDialog();
- if (dialog != null) {
- dialog.hide();
- }
+ ((TripRecordingActiveBottomSheet) target).hide();
}
}
@Override
public void onPause() {
super.onPause();
- // Replace later with tTripRecordingActiveBottomSheet.show()
Fragment target = getTargetFragment();
if (target instanceof TripRecordingActiveBottomSheet) {
- Dialog dialog = ((TripRecordingActiveBottomSheet) target).getDialog();
- if (dialog != null) {
- dialog.show();
- }
+ ((TripRecordingActiveBottomSheet) target).show();
}
}
diff --git a/OsmAnd/src/net/osmand/plus/monitoring/TripRecordingActiveBottomSheet.java b/OsmAnd/src/net/osmand/plus/monitoring/TripRecordingActiveBottomSheet.java
index 23bf24e287..775bbac87c 100644
--- a/OsmAnd/src/net/osmand/plus/monitoring/TripRecordingActiveBottomSheet.java
+++ b/OsmAnd/src/net/osmand/plus/monitoring/TripRecordingActiveBottomSheet.java
@@ -29,7 +29,6 @@ import androidx.appcompat.content.res.AppCompatResources;
import androidx.appcompat.widget.AppCompatImageView;
import androidx.appcompat.widget.SwitchCompat;
import androidx.core.content.ContextCompat;
-import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -37,8 +36,9 @@ import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.snackbar.Snackbar;
import net.osmand.AndroidUtils;
-import net.osmand.GPXUtilities;
+import net.osmand.GPXUtilities.GPXFile;
import net.osmand.Location;
+import net.osmand.PlatformUtil;
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
import net.osmand.plus.OsmAndLocationProvider;
import net.osmand.plus.OsmandApplication;
@@ -46,6 +46,7 @@ import net.osmand.plus.R;
import net.osmand.plus.UiUtilities;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.activities.SavingTrackHelper;
+import net.osmand.plus.activities.SavingTrackHelper.SaveGpxResult;
import net.osmand.plus.base.MenuBottomSheetDialogFragment;
import net.osmand.plus.base.bottomsheetmenu.BottomSheetItemWithDescription;
import net.osmand.plus.helpers.AndroidUiHelper;
@@ -53,15 +54,18 @@ import net.osmand.plus.helpers.FontCache;
import net.osmand.plus.myplaces.SaveCurrentTrackTask;
import net.osmand.plus.settings.backend.OsmandSettings;
import net.osmand.plus.track.GpxBlockStatisticsBuilder;
-import net.osmand.plus.track.SaveGpxAsyncTask;
+import net.osmand.plus.track.SaveGpxAsyncTask.SaveGpxListener;
import net.osmand.plus.track.TrackAppearanceFragment;
import net.osmand.plus.widgets.TextViewEx;
import net.osmand.util.Algorithms;
+import org.apache.commons.logging.Log;
+
import java.lang.ref.WeakReference;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
+import java.util.Locale;
import java.util.TimeZone;
import static net.osmand.plus.UiUtilities.CompoundButtonType.PROFILE_DEPENDENT;
@@ -69,57 +73,28 @@ import static net.osmand.plus.UiUtilities.CompoundButtonType.PROFILE_DEPENDENT;
public class TripRecordingActiveBottomSheet extends MenuBottomSheetDialogFragment {
public static final String TAG = TripRecordingActiveBottomSheet.class.getSimpleName();
+ private static final Log log = PlatformUtil.getLog(TripRecordingActiveBottomSheet.class);
private OsmandApplication app;
private OsmandSettings settings;
+ private SavingTrackHelper helper;
private SelectedGpxFile selectedGpxFile;
- private GpxBlockStatisticsBuilder blockStatisticsBuilder;
private boolean wasTrackMonitored = false;
private boolean hasDataToSave = false;
private boolean searchingGPS = false;
private View statusContainer;
+ private View buttonSave;
+ private GpxBlockStatisticsBuilder blockStatisticsBuilder;
private final Handler handler = new Handler();
private Runnable updatingGPS;
+ private Runnable updatingTimeTrackSaved;
+ private SaveGpxListener saveGpxListener;
- SaveGpxAsyncTask.SaveGpxListener saveGpxListener = new SaveGpxAsyncTask.SaveGpxListener() {
-
- @Override
- public void gpxSavingStarted() {
-
- }
-
- @Override
- public void gpxSavingFinished(Exception errorMessage) {
- String gpxFileName = Algorithms.getFileWithoutDirs(app.getSavingTrackHelper().getCurrentTrack().getGpxFile().path);
- final MapActivity mapActivity = getMapActivity();
- final Context context = getContext();
- SavingTrackHelper helper = app.getSavingTrackHelper();
- final SavingTrackHelper.SaveGpxResult result = helper.saveDataToGpx(app.getAppCustomization().getTracksDir());
- if (mapActivity != null && context != null) {
- Snackbar snackbar = Snackbar.make(mapActivity.getLayout(),
- getString(R.string.shared_string_file_is_saved, gpxFileName),
- Snackbar.LENGTH_LONG)
- .setAction(R.string.shared_string_undo, new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- final WeakReference mapActivityRef = new WeakReference<>(mapActivity);
- final FragmentActivity fragmentActivity = mapActivityRef.get();
- SaveGPXBottomSheetFragment.showInstance(fragmentActivity.getSupportFragmentManager(), result.getFilenames());
- }
- });
- View view = snackbar.getView();
- FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) view.getLayoutParams();
- params.gravity = Gravity.TOP;
- AndroidUtils.setMargins(params, 0, AndroidUtils.getStatusBarHeight(context), 0, 0);
- view.setLayoutParams(params);
- UiUtilities.setupSnackbar(snackbar, nightMode);
- snackbar.show();
- }
- }
-
- };
+ private GPXFile getGPXFile() {
+ return selectedGpxFile.getGpxFile();
+ }
public void setSelectedGpxFile(SelectedGpxFile selectedGpxFile) {
this.selectedGpxFile = selectedGpxFile;
@@ -153,57 +128,30 @@ public class TripRecordingActiveBottomSheet extends MenuBottomSheetDialogFragmen
public void createMenuItems(Bundle savedInstanceState) {
app = requiredMyApplication();
settings = app.getSettings();
+ helper = app.getSavingTrackHelper();
LayoutInflater inflater = UiUtilities.getInflater(getContext(), nightMode);
final FragmentManager fragmentManager = getFragmentManager();
- final Fragment targetFragment = getTargetFragment();
View itemView = inflater.inflate(R.layout.trip_recording_active_fragment, null, false);
items.add(new BottomSheetItemWithDescription.Builder()
.setCustomView(itemView)
.create());
- long timeTrackSaved = app.getSavingTrackHelper().getLastTimeUpdated();
- SimpleDateFormat sdf = new SimpleDateFormat("dd MMM yyyy HH:mm:ss:SSS Z");
- sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
- Date resultDate = new Date(timeTrackSaved);
- String sdfFormatted = sdf.format(resultDate);
- CharSequence formattedTimeTrackSaved = null;
- try {
- long time = sdf.parse(sdfFormatted).getTime();
- long now = System.currentTimeMillis();
- formattedTimeTrackSaved =
- DateUtils.getRelativeTimeSpanString(time, now, DateUtils.MINUTE_IN_MILLIS);
- } catch (ParseException e) {
- e.printStackTrace();
- }
-
View buttonClear = itemView.findViewById(R.id.button_clear);
View buttonStart = itemView.findViewById(R.id.button_start);
- View buttonSave = itemView.findViewById(R.id.button_save);
+ buttonSave = itemView.findViewById(R.id.button_save);
final View buttonPause = itemView.findViewById(R.id.button_pause);
View buttonStop = itemView.findViewById(R.id.button_stop);
createItem(buttonClear, ItemType.CLEAR_DATA, hasDataToSave, null);
createItem(buttonStart, ItemType.START_SEGMENT, wasTrackMonitored, null);
- createItem(buttonSave, ItemType.SAVE, hasDataToSave, (String) formattedTimeTrackSaved);
+// createItem(buttonSave, ItemType.SAVE, hasDataToSave, getTimeTrackSaved());
createItem(buttonPause, wasTrackMonitored ? ItemType.PAUSE : ItemType.RESUME, true, null);
createItem(buttonStop, ItemType.STOP, true, null);
statusContainer = itemView.findViewById(R.id.status_container);
updateStatus();
- // todo example, need to check
- buttonPause.findViewById(R.id.button_container).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- boolean wasTrackMonitored = !settings.SAVE_GLOBAL_TRACK_TO_GPX.get();
- createItem(buttonPause, wasTrackMonitored ? ItemType.PAUSE : ItemType.RESUME, true, null);
- TripRecordingActiveBottomSheet.this.wasTrackMonitored = wasTrackMonitored;
- settings.SAVE_GLOBAL_TRACK_TO_GPX.set(wasTrackMonitored);
- updateStatus();
- }
- });
-
RecyclerView statBlocks = itemView.findViewById(R.id.block_statistics);
blockStatisticsBuilder = new GpxBlockStatisticsBuilder(app, selectedGpxFile, null);
blockStatisticsBuilder.setBlocksView(statBlocks);
@@ -265,11 +213,49 @@ public class TripRecordingActiveBottomSheet extends MenuBottomSheetDialogFragmen
}
});
+ buttonClear.findViewById(R.id.button_container).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (fragmentManager != null && hasDataToSave) {
+ ClearRecordedDataBottomSheetFragment.showInstance(fragmentManager, TripRecordingActiveBottomSheet.this);
+ }
+ }
+ });
+
+ buttonStart.findViewById(R.id.button_container).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (wasTrackMonitored) {
+
+ }
+ }
+ });
+
+ setSaveListener();
buttonSave.findViewById(R.id.button_container).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- final GPXUtilities.GPXFile gpxFile = app.getSavingTrackHelper().getCurrentTrack().getGpxFile();
- new SaveCurrentTrackTask(app, gpxFile, saveGpxListener).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+ if (hasDataToSave) {
+ final GPXFile gpxFile = getGPXFile();
+ new SaveCurrentTrackTask(app, gpxFile, saveGpxListener).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+ }
+ }
+ });
+
+ // todo example, need to check
+ buttonPause.findViewById(R.id.button_container).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ boolean wasTrackMonitored = !settings.SAVE_GLOBAL_TRACK_TO_GPX.get();
+ createItem(buttonPause, wasTrackMonitored ? ItemType.PAUSE : ItemType.RESUME, true, null);
+ if (!wasTrackMonitored) {
+ blockStatisticsBuilder.stopUpdatingStatBlocks();
+ } else {
+ blockStatisticsBuilder.runUpdatingStatBlocks();
+ }
+ TripRecordingActiveBottomSheet.this.wasTrackMonitored = wasTrackMonitored;
+ settings.SAVE_GLOBAL_TRACK_TO_GPX.set(wasTrackMonitored);
+ updateStatus();
}
});
@@ -277,16 +263,7 @@ public class TripRecordingActiveBottomSheet extends MenuBottomSheetDialogFragmen
@Override
public void onClick(View v) {
if (fragmentManager != null) {
- StopTrackRecordingBottomFragment.showInstance(fragmentManager, targetFragment);
- }
- }
- });
-
- buttonClear.findViewById(R.id.button_container).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (fragmentManager != null) {
- ClearRecordedDataBottomSheetFragment.showInstance(fragmentManager, targetFragment);
+ StopTrackRecordingBottomFragment.showInstance(fragmentManager, TripRecordingActiveBottomSheet.this);
}
}
});
@@ -314,7 +291,7 @@ public class TripRecordingActiveBottomSheet extends MenuBottomSheetDialogFragmen
type.setTintedIcon(icon, app, enabled, false, nightMode);
}
- TextView title = view.findViewById(R.id.title);
+ TextView title = view.findViewById(R.id.button_text);
if (title != null) {
title.setText(type.getTitleId());
type.setTextColor(title, app, enabled, false, nightMode);
@@ -333,11 +310,29 @@ public class TripRecordingActiveBottomSheet extends MenuBottomSheetDialogFragmen
}
}
+ private String getTimeTrackSaved() {
+ long timeTrackSaved = helper.getLastTimeUpdated();
+ SimpleDateFormat sdf = new SimpleDateFormat("dd MMM yyyy HH:mm:ss:SSS Z", Locale.getDefault());
+ sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
+ Date resultDate = new Date(timeTrackSaved);
+ String sdfFormatted = sdf.format(resultDate);
+ CharSequence formattedTimeTrackSaved = null;
+ try {
+ long time = sdf.parse(sdfFormatted).getTime();
+ long now = System.currentTimeMillis();
+ formattedTimeTrackSaved = DateUtils.getRelativeTimeSpanString(time, now, DateUtils.MINUTE_IN_MILLIS);
+ } catch (ParseException e) {
+ log.error(e);
+ }
+ return String.valueOf(formattedTimeTrackSaved);
+ }
+
@Override
public void onResume() {
super.onResume();
blockStatisticsBuilder.runUpdatingStatBlocks();
runUpdatingGPS();
+ runUpdatingTimeTrackSaved();
}
@Override
@@ -345,6 +340,7 @@ public class TripRecordingActiveBottomSheet extends MenuBottomSheetDialogFragmen
super.onPause();
blockStatisticsBuilder.stopUpdatingStatBlocks();
stopUpdatingGPS();
+ stopUpdatingTimeTrackSaved();
}
public void stopUpdatingGPS() {
@@ -366,6 +362,61 @@ public class TripRecordingActiveBottomSheet extends MenuBottomSheetDialogFragmen
handler.post(updatingGPS);
}
+ public void stopUpdatingTimeTrackSaved() {
+ handler.removeCallbacks(updatingTimeTrackSaved);
+ }
+
+ public void runUpdatingTimeTrackSaved() {
+ updatingTimeTrackSaved = new Runnable() {
+ @Override
+ public void run() {
+ String time = getTimeTrackSaved();
+ createItem(buttonSave, ItemType.SAVE, hasDataToSave, !Algorithms.isEmpty(time) ? time : null);
+ handler.postDelayed(this, 60000);
+ }
+ };
+ handler.post(updatingTimeTrackSaved);
+ }
+
+ private void setSaveListener() {
+ if (saveGpxListener == null) {
+ saveGpxListener = new SaveGpxListener() {
+
+ @Override
+ public void gpxSavingStarted() {
+ }
+
+ @Override
+ public void gpxSavingFinished(Exception errorMessage) {
+ String gpxFileName = Algorithms.getFileWithoutDirs(getGPXFile().path);
+ final MapActivity mapActivity = getMapActivity();
+ final Context context = getContext();
+ final SaveGpxResult result = helper.saveDataToGpx(app.getAppCustomization().getTracksDir());
+ if (mapActivity != null && context != null) {
+ Snackbar snackbar = Snackbar.make(mapActivity.getLayout(),
+ getString(R.string.shared_string_file_is_saved, gpxFileName),
+ Snackbar.LENGTH_LONG)
+ .setAction(R.string.shared_string_undo, new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ final WeakReference mapActivityRef = new WeakReference<>(mapActivity);
+ final FragmentActivity fragmentActivity = mapActivityRef.get();
+ SaveGPXBottomSheetFragment.showInstance(fragmentActivity.getSupportFragmentManager(), result.getFilenames());
+ }
+ });
+ View view = snackbar.getView();
+ FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) view.getLayoutParams();
+ params.gravity = Gravity.TOP;
+ AndroidUtils.setMargins(params, 0, AndroidUtils.getStatusBarHeight(context), 0, 0);
+ view.setLayoutParams(params);
+ UiUtilities.setupSnackbar(snackbar, nightMode);
+ snackbar.show();
+ }
+ }
+ };
+ }
+ }
+
@Nullable
public MapActivity getMapActivity() {
Activity activity = getActivity();
@@ -375,6 +426,13 @@ public class TripRecordingActiveBottomSheet extends MenuBottomSheetDialogFragmen
return null;
}
+ public void show() {
+ Dialog dialog = getDialog();
+ if (dialog != null) {
+ dialog.show();
+ }
+ }
+
public void hide() {
Dialog dialog = getDialog();
if (dialog != null) {
@@ -443,7 +501,7 @@ public class TripRecordingActiveBottomSheet extends MenuBottomSheetDialogFragmen
if (tv != null) {
tv.setTextColor(ContextCompat.getColor(context,
enabled ? pressed ? getPressedColorId(nightMode)
- : equals(ItemType.CLEAR_DATA) ? R.color.color_osm_edit_delete
+ : this == ItemType.CLEAR_DATA ? R.color.color_osm_edit_delete
: getActiveTextColorId(nightMode) : getSecondaryTextColorId(nightMode)));
}
}
@@ -452,10 +510,15 @@ public class TripRecordingActiveBottomSheet extends MenuBottomSheetDialogFragmen
if (iv != null) {
int iconColor = ContextCompat.getColor(context,
enabled ? pressed ? getPressedColorId(nightMode)
- : equals(ItemType.CLEAR_DATA) ? R.color.color_osm_edit_delete
+ : this == ItemType.CLEAR_DATA ? R.color.color_osm_edit_delete
: getActiveIconColorId(nightMode) : getSecondaryIconColorId(nightMode));
Drawable icon = UiUtilities.createTintedDrawable(context, iconId, iconColor);
iv.setImageDrawable(icon);
+ if (this == ItemType.STOP) {
+ int stopSize = iv.getResources().getDimensionPixelSize(R.dimen.bottom_sheet_icon_margin_large);
+ LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(stopSize, stopSize);
+ iv.setLayoutParams(params);
+ }
}
}
diff --git a/OsmAnd/src/net/osmand/plus/monitoring/TripRecordingBottomSheet.java b/OsmAnd/src/net/osmand/plus/monitoring/TripRecordingBottomSheet.java
index 178e662176..6653b6f5c3 100644
--- a/OsmAnd/src/net/osmand/plus/monitoring/TripRecordingBottomSheet.java
+++ b/OsmAnd/src/net/osmand/plus/monitoring/TripRecordingBottomSheet.java
@@ -28,6 +28,7 @@ import net.osmand.AndroidUtils;
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
import net.osmand.plus.NavigationService;
import net.osmand.plus.OsmandApplication;
+import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.R;
import net.osmand.plus.UiUtilities;
import net.osmand.plus.UiUtilities.DialogButtonType;
@@ -246,12 +247,12 @@ public class TripRecordingBottomSheet extends MenuBottomSheetDialogFragment {
}
@Override
- protected int getRightButtonHeight(){
+ protected int getRightButtonHeight() {
return getResources().getDimensionPixelSize(R.dimen.bottom_sheet_cancel_button_height);
}
@Override
- protected int getDismissButtonHeight(){
+ protected int getDismissButtonHeight() {
return getResources().getDimensionPixelSize(R.dimen.bottom_sheet_cancel_button_height);
}
@@ -280,6 +281,9 @@ public class TripRecordingBottomSheet extends MenuBottomSheetDialogFragment {
app.getSavingTrackHelper().startNewSegment();
settings.SAVE_GLOBAL_TRACK_TO_GPX.set(true);
app.startNavigationService(NavigationService.USED_BY_GPX);
+ OsmandMonitoringPlugin plugin = OsmandPlugin.getEnabledPlugin(OsmandMonitoringPlugin.class);
+ TripRecordingActiveBottomSheet.showInstance(getMapActivity().getSupportFragmentManager(),
+ plugin.getCurrentTrack(), plugin.isWasTrackMonitored(), plugin.isHasDataToSave(), plugin.isSearchingGPS());
dismiss();
}
diff --git a/OsmAnd/src/net/osmand/plus/track/GpxBlockStatisticsBuilder.java b/OsmAnd/src/net/osmand/plus/track/GpxBlockStatisticsBuilder.java
index a7b23e18ec..3421a46a10 100644
--- a/OsmAnd/src/net/osmand/plus/track/GpxBlockStatisticsBuilder.java
+++ b/OsmAnd/src/net/osmand/plus/track/GpxBlockStatisticsBuilder.java
@@ -89,6 +89,7 @@ public class GpxBlockStatisticsBuilder {
if (bsAdapter != null) {
initItems();
bsAdapter.setItems(items);
+ AndroidUiHelper.updateVisibility(blocksView, !Algorithms.isEmpty(items));
}
int interval = app.getSettings().SAVE_GLOBAL_TRACK_INTERVAL.get();
handler.postDelayed(this, Math.max(1000, interval));
@@ -272,7 +273,7 @@ public class GpxBlockStatisticsBuilder {
public void setItems(List statBlocks) {
this.statBlocks.clear();
this.statBlocks.addAll(statBlocks);
- notifyItemRangeChanged(0, getItemCount());
+ notifyDataSetChanged();
}
}
diff --git a/OsmAnd/src/net/osmand/plus/track/TrackAppearanceFragment.java b/OsmAnd/src/net/osmand/plus/track/TrackAppearanceFragment.java
index 522103ac02..0ad5475337 100644
--- a/OsmAnd/src/net/osmand/plus/track/TrackAppearanceFragment.java
+++ b/OsmAnd/src/net/osmand/plus/track/TrackAppearanceFragment.java
@@ -44,6 +44,7 @@ import net.osmand.plus.dialogs.GpxAppearanceAdapter;
import net.osmand.plus.dialogs.GpxAppearanceAdapter.AppearanceListItem;
import net.osmand.plus.dialogs.GpxAppearanceAdapter.GpxAppearanceAdapterType;
import net.osmand.plus.helpers.AndroidUiHelper;
+import net.osmand.plus.monitoring.TripRecordingActiveBottomSheet;
import net.osmand.plus.monitoring.TripRecordingBottomSheet;
import net.osmand.plus.routepreparationmenu.cards.BaseCard;
import net.osmand.plus.routepreparationmenu.cards.BaseCard.CardListener;
@@ -383,6 +384,8 @@ public class TrackAppearanceFragment extends ContextMenuScrollFragment implement
Fragment target = getTargetFragment();
if (target instanceof TripRecordingBottomSheet) {
((TripRecordingBottomSheet) target).show();
+ } else if (target instanceof TripRecordingActiveBottomSheet) {
+ ((TripRecordingActiveBottomSheet) target).show();
}
}