implementation of functionality;
many fixes;
This commit is contained in:
parent
fcd16ca99f
commit
7315679c8f
10 changed files with 221 additions and 131 deletions
|
@ -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">
|
||||
|
||||
<LinearLayout
|
||||
|
@ -29,7 +30,7 @@
|
|||
android:orientation="vertical">
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/title"
|
||||
android:id="@+id/button_text"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:duplicateParentState="true"
|
||||
|
@ -37,7 +38,7 @@
|
|||
android:textSize="@dimen/default_desc_text_size"
|
||||
osmand:typeface="@string/font_roboto_medium"
|
||||
tools:text="Title"
|
||||
tools:textColor="@color/text_color_secondary_light" />
|
||||
tools:textColor="@color/active_color_primary_dark" />
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/desc"
|
||||
|
@ -45,11 +46,11 @@
|
|||
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"
|
||||
osmand:typeface="@string/font_roboto_medium"
|
||||
tools:text="Description"
|
||||
tools:textColor="@color/text_color_secondary_dark"
|
||||
tools:visibility="visible" />
|
||||
|
||||
</LinearLayout>
|
||||
|
@ -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" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
xmlns:osmand="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
|
@ -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" />
|
||||
|
||||
|
|
|
@ -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<ContextMenuItem> 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<String, ProfileDataObject> profilesObjects, String defaultDescription) {
|
||||
Map<String, ProfileDataObject> profilesObjects, String defaultDescription) {
|
||||
String description = defaultDescription;
|
||||
|
||||
String routingProfileKey = mode.getRoutingProfile();
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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<MapActivity> 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<MapActivity> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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<StatBlock> statBlocks) {
|
||||
this.statBlocks.clear();
|
||||
this.statBlocks.addAll(statBlocks);
|
||||
notifyItemRangeChanged(0, getItemCount());
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue