kopia lustrzana https://github.com/sh123/codec2_talkie
Tracks
rodzic
90ddf20a7e
commit
ec2ac02d84
|
@ -5,6 +5,7 @@ import android.content.SharedPreferences;
|
|||
import android.graphics.Bitmap;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.DashPathEffect;
|
||||
import android.graphics.Matrix;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.Rect;
|
||||
|
@ -15,9 +16,12 @@ import android.util.DisplayMetrics;
|
|||
import android.util.Log;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.MotionEvent;
|
||||
|
||||
import androidx.appcompat.app.ActionBar;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.constraintlayout.widget.ConstraintSet;
|
||||
import androidx.lifecycle.LiveData;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
import androidx.preference.PreferenceManager;
|
||||
|
||||
|
@ -37,6 +41,7 @@ import org.osmdroid.util.GeoPoint;
|
|||
import org.osmdroid.views.MapView;
|
||||
import org.osmdroid.views.overlay.Marker;
|
||||
import org.osmdroid.views.overlay.Polygon;
|
||||
import org.osmdroid.views.overlay.Polyline;
|
||||
import org.osmdroid.views.overlay.compass.CompassOverlay;
|
||||
import org.osmdroid.views.overlay.compass.InternalCompassOrientationProvider;
|
||||
import org.osmdroid.views.overlay.mylocation.GpsMyLocationProvider;
|
||||
|
@ -44,6 +49,7 @@ import org.osmdroid.views.overlay.mylocation.MyLocationNewOverlay;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
public class MapActivity extends AppCompatActivity {
|
||||
|
@ -63,6 +69,10 @@ public class MapActivity extends AppCompatActivity {
|
|||
private boolean _rotateMap = false;
|
||||
private boolean _showCircles = false;
|
||||
|
||||
private LiveData<List<LogItemGroup>> _stationTrack;
|
||||
List<GeoPoint> _stationTrackPoints = new ArrayList<>();
|
||||
Polyline _stationTrackLine = new Polyline(); //see note below!
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
@ -120,6 +130,7 @@ public class MapActivity extends AppCompatActivity {
|
|||
_logItemViewModel = new ViewModelProvider(this).get(LogItemViewModel.class);
|
||||
_logItemViewModel.getLastPositions().observe(this, lastPositions -> {
|
||||
for (LogItemGroup lastPosition : lastPositions) {
|
||||
Log.i(TAG, "new position " + lastPosition.getLatitude() + " " + lastPosition.getLongitude());
|
||||
// do not add items without coordinate
|
||||
if (lastPosition.getMaidenHead() == null) continue;
|
||||
if (addStationPositionIcon(lastPosition)) {
|
||||
|
@ -129,6 +140,14 @@ public class MapActivity extends AppCompatActivity {
|
|||
}
|
||||
}
|
||||
});
|
||||
|
||||
// add track
|
||||
Paint p = _stationTrackLine.getOutlinePaint();
|
||||
p.setStrokeWidth(8);
|
||||
p.setColor(Color.RED);
|
||||
p.setStyle(Paint.Style.STROKE);
|
||||
p.setPathEffect(new DashPathEffect(new float[] {10f, 10f}, 0f));
|
||||
_map.getOverlayManager().add(_stationTrackLine);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -170,6 +189,14 @@ public class MapActivity extends AppCompatActivity {
|
|||
polygon.setPoints(circlePoints);
|
||||
}
|
||||
|
||||
private void addTrack(List<LogItemGroup> positions) {
|
||||
for (LogItemGroup trackPoint : positions) {
|
||||
Log.i(TAG, "addPoint " + trackPoint.getLatitude() + " " + trackPoint.getLongitude());
|
||||
_stationTrackPoints.add(new GeoPoint(trackPoint.getLatitude(), trackPoint.getLongitude()));
|
||||
}
|
||||
_stationTrackLine.setPoints(_stationTrackPoints);
|
||||
}
|
||||
|
||||
private boolean addStationPositionIcon(LogItemGroup group) {
|
||||
String callsign = group.getSrcCallsign();
|
||||
Marker marker = null;
|
||||
|
@ -240,9 +267,20 @@ public class MapActivity extends AppCompatActivity {
|
|||
BitmapDrawable drawableText = new BitmapDrawable(getResources(), bitmap);
|
||||
BitmapDrawable drawableInfoIcon = new BitmapDrawable(getResources(), bitmapInfoIcon);
|
||||
marker = new Marker(_map);
|
||||
marker.setId(callsign);
|
||||
marker.setIcon(drawableText);
|
||||
marker.setImage(drawableInfoIcon);
|
||||
|
||||
marker.setOnMarkerClickListener((monitoredMarker, mapView) -> {
|
||||
if (_stationTrack != null)
|
||||
_stationTrack.removeObservers(this);
|
||||
_map.getOverlays().remove(_stationTrackLine);
|
||||
_stationTrackPoints.clear();
|
||||
_stationTrackLine.setPoints(_stationTrackPoints);
|
||||
_map.getOverlays().add(_stationTrackLine);
|
||||
_stationTrack = _logItemViewModel.getLastPositions(monitoredMarker.getId());
|
||||
_stationTrack.observe(this, this::addTrack);
|
||||
return false;
|
||||
});
|
||||
_map.getOverlays().add(marker);
|
||||
_objectOverlayItems.put(callsign, marker);
|
||||
}
|
||||
|
|
|
@ -60,6 +60,25 @@ public interface LogItemDao {
|
|||
"ORDER BY srcCallsign ASC")
|
||||
LiveData<List<LogItemGroup>> getLastPositions();
|
||||
|
||||
@Query("SELECT pos.timestampEpoch AS timestampEpoch, " +
|
||||
"pos.srcCallsign AS srcCallsign, " +
|
||||
"pos.dstCallsign AS dstCallsign, " +
|
||||
"pos.latitude AS latitude, " +
|
||||
"pos.longitude AS longitude, " +
|
||||
"pos.maidenHead AS maidenHead, " +
|
||||
"pos.altitudeMeters AS altitudeMeters, " +
|
||||
"pos.bearingDegrees AS bearingDegrees, " +
|
||||
"pos.speedMetersPerSecond AS speedMetersPerSecond, " +
|
||||
"pos.status AS status, " +
|
||||
"pos.comment AS comment, " +
|
||||
"pos.symbolCode AS symbolCode, " +
|
||||
"pos.privacyLevel AS privacyLevel, " +
|
||||
"pos.rangeMiles AS rangeMiles, " +
|
||||
"pos.directivityDeg AS directivityDeg " +
|
||||
"FROM PositionItem AS pos WHERE pos.srcCallsign = :srcCallsign " +
|
||||
"ORDER BY pos.timestampEpoch DESC")
|
||||
LiveData<List<LogItemGroup>> getStationPositions(String srcCallsign);
|
||||
|
||||
@Query("SELECT * FROM LogItem ORDER by timestampEpoch ASC")
|
||||
LiveData<List<LogItem>> getAllLogItems();
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@ package com.radio.codec2talkie.storage.log;
|
|||
import android.app.Application;
|
||||
|
||||
import androidx.lifecycle.LiveData;
|
||||
import androidx.lifecycle.Transformations;
|
||||
|
||||
import com.radio.codec2talkie.storage.AppDatabase;
|
||||
import com.radio.codec2talkie.storage.log.group.LogItemGroup;
|
||||
|
@ -30,6 +31,10 @@ public class LogItemRepository {
|
|||
|
||||
public LiveData<List<LogItemGroup>> getLastPositions() { return _lastPositions; }
|
||||
|
||||
public LiveData<List<LogItemGroup>> getStationPositions(String srcCallsign) {
|
||||
return _logItemDao.getStationPositions(srcCallsign);
|
||||
}
|
||||
|
||||
public LiveData<List<LogItem>> getLogItems(String groupName) {
|
||||
return _logItemDao.getLogItems(groupName);
|
||||
}
|
||||
|
|
|
@ -34,6 +34,8 @@ public class LogItemViewModel extends AndroidViewModel {
|
|||
|
||||
public LiveData<List<LogItemGroup>> getLastPositions() { return _lastPositions; }
|
||||
|
||||
public LiveData<List<LogItemGroup>> getLastPositions(String callsign) { return _logItemRepository.getStationPositions(callsign); }
|
||||
|
||||
public void deleteAllLogItems() { _logItemRepository.deleteAllLogItems(); }
|
||||
|
||||
public void deleteLogItems(String groupName) {
|
||||
|
|
Ładowanie…
Reference in New Issue