mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge.git
synced 2026-07-31 07:44:24 +02:00
Maps: Make track color configurable
This commit is contained in:
+29
-1
@@ -16,7 +16,10 @@
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>. */
|
||||
package nodomain.freeyourgadget.gadgetbridge.activities;
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.os.Bundle;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.view.LayoutInflater;
|
||||
@@ -26,6 +29,7 @@ import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
||||
|
||||
import org.mapsforge.core.graphics.Paint;
|
||||
import org.mapsforge.core.graphics.Style;
|
||||
@@ -50,7 +54,9 @@ import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.Objects;
|
||||
|
||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
||||
import nodomain.freeyourgadget.gadgetbridge.R;
|
||||
import nodomain.freeyourgadget.gadgetbridge.activities.maps.MapsSettingsFragment;
|
||||
import nodomain.freeyourgadget.gadgetbridge.activities.maps.MapsTrackActivity;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.ActivityPoint;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.GPSCoordinate;
|
||||
@@ -71,6 +77,17 @@ public class ActivitySummariesGpsFragment extends AbstractGBFragment {
|
||||
private File inputFile;
|
||||
private MapsManager mapsManager;
|
||||
|
||||
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(final Context context, final Intent intent) {
|
||||
if (MapsSettingsFragment.ACTION_SETTING_CHANGE.equals(intent.getAction())) {
|
||||
// FIXME: Map reloading is not working properly
|
||||
//LOG.debug("Reloading map view");
|
||||
//mapsManager.loadMaps(mapView);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
@@ -82,6 +99,10 @@ public class ActivitySummariesGpsFragment extends AbstractGBFragment {
|
||||
mapsManager = new MapsManager(requireContext());
|
||||
mapsManager.loadMaps(mapView);
|
||||
|
||||
final IntentFilter intentFilter = new IntentFilter();
|
||||
intentFilter.addAction(MapsSettingsFragment.ACTION_SETTING_CHANGE);
|
||||
LocalBroadcastManager.getInstance(requireActivity()).registerReceiver(mReceiver, intentFilter);
|
||||
|
||||
if (mapsManager.isMapLoaded()) {
|
||||
gpsWarning.setVisibility(View.GONE);
|
||||
}
|
||||
@@ -92,6 +113,12 @@ public class ActivitySummariesGpsFragment extends AbstractGBFragment {
|
||||
return rootView;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroyView() {
|
||||
LocalBroadcastManager.getInstance(requireActivity()).unregisterReceiver(mReceiver);
|
||||
super.onDestroyView();
|
||||
}
|
||||
|
||||
public void set_data(File inputFile) {
|
||||
this.inputFile = inputFile;
|
||||
if (mapView != null) { //first fragment inflate is AFTER this is called
|
||||
@@ -156,7 +183,8 @@ public class ActivitySummariesGpsFragment extends AbstractGBFragment {
|
||||
.collect(Collectors.toList());
|
||||
|
||||
Paint paint = AndroidGraphicFactory.INSTANCE.createPaint();
|
||||
paint.setColor(getResources().getColor(R.color.hrv_status_low));
|
||||
final int trackColor = GBApplication.getPrefs().getInt(MapsManager.PREF_TRACK_COLOR, getResources().getColor(R.color.hrv_status_low));
|
||||
paint.setColor(trackColor);
|
||||
paint.setStrokeWidth(8);
|
||||
paint.setStyle(Style.STROKE);
|
||||
Polyline polyline = new Polyline(paint, AndroidGraphicFactory.INSTANCE);
|
||||
|
||||
+18
@@ -23,11 +23,14 @@ import android.os.Bundle;
|
||||
|
||||
import androidx.activity.result.ActivityResultLauncher;
|
||||
import androidx.activity.result.contract.ActivityResultContracts;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
||||
import androidx.preference.Preference;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
||||
import nodomain.freeyourgadget.gadgetbridge.R;
|
||||
import nodomain.freeyourgadget.gadgetbridge.activities.AbstractPreferenceFragment;
|
||||
import nodomain.freeyourgadget.gadgetbridge.util.maps.MapsManager;
|
||||
@@ -35,6 +38,8 @@ import nodomain.freeyourgadget.gadgetbridge.util.maps.MapsManager;
|
||||
public class MapsSettingsFragment extends AbstractPreferenceFragment {
|
||||
static final String FRAGMENT_TAG = "MAP_SETTINGS_FRAGMENT";
|
||||
|
||||
public static final String ACTION_SETTING_CHANGE = "nodomain.freeyourgadget.gadgetbridge.maps.setting_change";
|
||||
|
||||
@Override
|
||||
public void onCreatePreferences(@Nullable final Bundle savedInstanceState, @Nullable final String rootKey) {
|
||||
setPreferencesFromResource(R.xml.map_settings, rootKey);
|
||||
@@ -65,6 +70,7 @@ public class MapsSettingsFragment extends AbstractPreferenceFragment {
|
||||
.putString(MapsManager.PREF_MAPS_FOLDER, localUri.toString())
|
||||
.apply();
|
||||
prefFolder.setSummary(localUri.toString());
|
||||
broadcastPreferenceChange();
|
||||
}
|
||||
}
|
||||
);
|
||||
@@ -74,5 +80,17 @@ public class MapsSettingsFragment extends AbstractPreferenceFragment {
|
||||
mapsFolderChooser.launch(null);
|
||||
return true;
|
||||
});
|
||||
|
||||
final Preference prefTrackColor = Objects.requireNonNull(findPreference(MapsManager.PREF_TRACK_COLOR));
|
||||
prefTrackColor.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||
broadcastPreferenceChange();
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
private void broadcastPreferenceChange() {
|
||||
final Intent intent = new Intent();
|
||||
intent.setAction(ACTION_SETTING_CHANGE);
|
||||
LocalBroadcastManager.getInstance(requireContext()).sendBroadcast(intent);
|
||||
}
|
||||
}
|
||||
|
||||
+54
-3
@@ -16,10 +16,18 @@
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>. */
|
||||
package nodomain.freeyourgadget.gadgetbridge.activities.maps;
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.os.Bundle;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.core.view.MenuProvider;
|
||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
||||
|
||||
import org.mapsforge.core.graphics.Paint;
|
||||
import org.mapsforge.core.graphics.Style;
|
||||
@@ -30,6 +38,8 @@ import org.mapsforge.core.util.LatLongUtils;
|
||||
import org.mapsforge.map.android.graphics.AndroidGraphicFactory;
|
||||
import org.mapsforge.map.android.view.MapView;
|
||||
import org.mapsforge.map.layer.overlay.Polyline;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Collections;
|
||||
@@ -37,6 +47,7 @@ import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
||||
import nodomain.freeyourgadget.gadgetbridge.R;
|
||||
import nodomain.freeyourgadget.gadgetbridge.activities.AbstractGBActivity;
|
||||
import nodomain.freeyourgadget.gadgetbridge.activities.ActivitySummariesGpsFragment;
|
||||
@@ -44,11 +55,26 @@ import nodomain.freeyourgadget.gadgetbridge.model.ActivityPoint;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.GPSCoordinate;
|
||||
import nodomain.freeyourgadget.gadgetbridge.util.maps.MapsManager;
|
||||
|
||||
public class MapsTrackActivity extends AbstractGBActivity {
|
||||
public class MapsTrackActivity extends AbstractGBActivity implements MenuProvider {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(MapsTrackActivity.class);
|
||||
|
||||
private MapView mapView;
|
||||
private File file;
|
||||
public static boolean isActivityOpen = false;
|
||||
|
||||
private MapsManager mapsManager;
|
||||
|
||||
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(final Context context, final Intent intent) {
|
||||
if (MapsSettingsFragment.ACTION_SETTING_CHANGE.equals(intent.getAction())) {
|
||||
// FIXME: Map reloading is not working properly
|
||||
//LOG.debug("Reloading map view");
|
||||
//mapsManager.loadMaps(mapView);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
@@ -60,10 +86,17 @@ public class MapsTrackActivity extends AbstractGBActivity {
|
||||
}
|
||||
isActivityOpen = true;
|
||||
|
||||
// FIXME: This is disabled since map reloading is not working properly
|
||||
//addMenuProvider(this);
|
||||
|
||||
mapView = findViewById(R.id.activitygpsview);
|
||||
MapsManager mapsManager = new MapsManager(this);
|
||||
mapsManager = new MapsManager(this);
|
||||
mapsManager.loadMaps(mapView);
|
||||
|
||||
final IntentFilter intentFilter = new IntentFilter();
|
||||
intentFilter.addAction(MapsSettingsFragment.ACTION_SETTING_CHANGE);
|
||||
LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, intentFilter);
|
||||
|
||||
file = (File) getIntent().getExtras().get("file");
|
||||
final List<GPSCoordinate> trackPoints = ActivitySummariesGpsFragment.getActivityPoints(file)
|
||||
.stream()
|
||||
@@ -83,7 +116,8 @@ public class MapsTrackActivity extends AbstractGBActivity {
|
||||
.collect(Collectors.toList());
|
||||
|
||||
Paint paint = AndroidGraphicFactory.INSTANCE.createPaint();
|
||||
paint.setColor(getResources().getColor(R.color.hrv_status_low));
|
||||
final int trackColor = GBApplication.getPrefs().getInt(MapsManager.PREF_TRACK_COLOR, getResources().getColor(R.color.hrv_status_low));
|
||||
paint.setColor(trackColor);
|
||||
paint.setStrokeWidth(8);
|
||||
paint.setStyle(Style.STROKE);
|
||||
Polyline polyline = new Polyline(paint, AndroidGraphicFactory.INSTANCE);
|
||||
@@ -123,6 +157,23 @@ public class MapsTrackActivity extends AbstractGBActivity {
|
||||
synchronized (MapsTrackActivity.class) {
|
||||
isActivityOpen = false;
|
||||
}
|
||||
|
||||
LocalBroadcastManager.getInstance(this).unregisterReceiver(mReceiver);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreateMenu(@NonNull final Menu menu, @NonNull final MenuInflater menuInflater) {
|
||||
menuInflater.inflate(R.menu.maps_track_menu, menu);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onMenuItemSelected(@NonNull final MenuItem menuItem) {
|
||||
final int itemId = menuItem.getItemId();
|
||||
if (itemId == R.id.maps_settings) {
|
||||
final Intent enableIntent = new Intent(this, MapsSettingsActivity.class);
|
||||
startActivity(enableIntent);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,6 +45,7 @@ public final class MapsManager {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(MapsManager.class);
|
||||
|
||||
public static final String PREF_MAPS_FOLDER = "maps_folder";
|
||||
public static final String PREF_TRACK_COLOR = "maps_track_color";
|
||||
|
||||
private final Context mContext;
|
||||
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
tools:context="nodomain.freeyourgadget.gadgetbridge.activities.maps.MapsTrackActivity">
|
||||
<item
|
||||
android:id="@+id/maps_settings"
|
||||
android:icon="@drawable/ic_settings"
|
||||
android:title="@string/maps_settings"
|
||||
app:iconTint="?attr/actionmenu_icon_color"
|
||||
app:showAsAction="ifRoom" />
|
||||
</menu>
|
||||
@@ -86,6 +86,8 @@
|
||||
<color name="alternate_row_background_light">#FFEDEDED</color>
|
||||
<color name="alternate_row_background_dark">#545254</color>
|
||||
|
||||
<color name="map_track_default" type="color">#fc5203</color>
|
||||
|
||||
<color name="transparent">#00000000</color>
|
||||
|
||||
<drawable name="selected">@color/accent</drawable>
|
||||
|
||||
@@ -3809,4 +3809,5 @@
|
||||
<string name="maps_settings">Maps settings</string>
|
||||
<string name="maps_download_title">Download Maps</string>
|
||||
<string name="maps_download_summary">Click here to download map files. They should be saved to the folder selected in the preference below.</string>
|
||||
<string name="maps_track_color_title">Track color</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<Preference
|
||||
android:icon="@drawable/ic_download"
|
||||
android:key="maps_download"
|
||||
@@ -11,4 +12,18 @@
|
||||
android:icon="@drawable/ic_folder"
|
||||
android:key="maps_folder"
|
||||
android:title="@string/folder" />
|
||||
|
||||
<PreferenceCategory
|
||||
android:key="pref_header_theme"
|
||||
android:title="@string/pref_title_theme"
|
||||
app:iconSpaceReserved="false">
|
||||
|
||||
<com.jaredrummler.android.colorpicker.ColorPreferenceCompat
|
||||
android:defaultValue="@color/map_track_default"
|
||||
android:icon="@drawable/ic_paint"
|
||||
android:key="maps_track_color"
|
||||
android:title="@string/maps_track_color_title"
|
||||
app:cpv_dialogTitle="@string/maps_track_color_title" />
|
||||
</PreferenceCategory>
|
||||
|
||||
</PreferenceScreen>
|
||||
|
||||
Reference in New Issue
Block a user