kopia lustrzana https://github.com/sh123/codec2_talkie
rodzic
eba020cbfe
commit
74f782feb5
|
@ -133,13 +133,22 @@ public class MapActivity extends AppCompatActivity {
|
|||
boolean showCircles = false;
|
||||
if (item.isChecked()) {
|
||||
item.setChecked(false);
|
||||
_mapView.setMapOrientation(0);
|
||||
} else {
|
||||
item.setChecked(true);
|
||||
showCircles = true;
|
||||
}
|
||||
_mapStations.showRangeCircles(showCircles);
|
||||
return true;
|
||||
} else if (itemId == R.id.map_menu_show_moving) {
|
||||
boolean showMoving = false;
|
||||
if (item.isChecked()) {
|
||||
item.setChecked(false);
|
||||
} else {
|
||||
item.setChecked(true);
|
||||
showMoving = true;
|
||||
}
|
||||
_mapStations.showMovingStations(showMoving);
|
||||
return true;
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
|
|
@ -12,6 +12,7 @@ import android.util.DisplayMetrics;
|
|||
import android.util.Log;
|
||||
|
||||
import androidx.lifecycle.LifecycleOwner;
|
||||
import androidx.lifecycle.LiveData;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
import androidx.lifecycle.ViewModelStoreOwner;
|
||||
|
||||
|
@ -32,6 +33,7 @@ import org.osmdroid.views.overlay.infowindow.MarkerInfoWindow;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
public class MapStations {
|
||||
|
@ -47,10 +49,14 @@ public class MapStations {
|
|||
|
||||
private final MarkerInfoWindow _infoWindow;
|
||||
|
||||
private LiveData<List<StationItem>> _stationItemLiveData;
|
||||
private final StationItemViewModel _stationItemViewModel;
|
||||
|
||||
private final HashMap<String, Marker> _objectOverlayItems = new HashMap<>();
|
||||
private final HashMap<String, Polygon> _objectOverlayRangeCircles = new HashMap<>();
|
||||
|
||||
private boolean _showCircles = false;
|
||||
private boolean _showMoving = false;
|
||||
|
||||
private final MapTrack _activeTrack;
|
||||
|
||||
|
@ -64,9 +70,17 @@ public class MapStations {
|
|||
_infoWindow = new MarkerInfoWindow(R.layout.bonuspack_bubble, _mapView);
|
||||
_activeTrack = new MapTrack(_context, _mapView, _owner);
|
||||
|
||||
StationItemViewModel _stationItemViewModel = new ViewModelProvider(_owner).get(StationItemViewModel.class);
|
||||
_stationItemViewModel = new ViewModelProvider(_owner).get(StationItemViewModel.class);
|
||||
loadStations(_showMoving);
|
||||
}
|
||||
|
||||
private void loadStations(boolean movingOnly) {
|
||||
if (_stationItemLiveData != null)
|
||||
_stationItemLiveData.removeObservers((LifecycleOwner) _owner);
|
||||
removePositionMarkers();
|
||||
_stationItemLiveData = _stationItemViewModel.getAllStationItems(movingOnly);
|
||||
// FIXME, room livedata sends all list if one item changed event with distinctUntilChanged
|
||||
_stationItemViewModel.getAllStationItems().observe((LifecycleOwner) _owner, allStations -> {
|
||||
_stationItemLiveData.observe((LifecycleOwner) _owner, allStations -> {
|
||||
Log.i(TAG, "add stations " + allStations.size());
|
||||
for (StationItem station : allStations) {
|
||||
//Log.i(TAG, "new position " + station.getLatitude() + " " + station.getLongitude());
|
||||
|
@ -79,6 +93,22 @@ public class MapStations {
|
|||
});
|
||||
}
|
||||
|
||||
private void removePositionMarkers() {
|
||||
for (Marker marker : _objectOverlayItems.values()) {
|
||||
marker.remove(_mapView);
|
||||
}
|
||||
_objectOverlayItems.clear();
|
||||
for (Polygon circle : _objectOverlayRangeCircles.values()) {
|
||||
_mapView.getOverlays().remove(circle);
|
||||
}
|
||||
_objectOverlayRangeCircles.clear();
|
||||
}
|
||||
|
||||
public void showMovingStations(boolean isMoving) {
|
||||
_showMoving = isMoving;
|
||||
loadStations(_showMoving);
|
||||
}
|
||||
|
||||
public void showRangeCircles(boolean isVisible) {
|
||||
_showCircles = isVisible;
|
||||
for (Polygon polygon : _objectOverlayRangeCircles.values()) {
|
||||
|
|
|
@ -85,7 +85,7 @@ public class LogItemActivity extends AppCompatActivity {
|
|||
stationsRecyclerView.setLayoutManager(linearLayoutManagerStations);
|
||||
stationsRecyclerView.addItemDecoration(new DividerItemDecoration(stationsRecyclerView.getContext(), DividerItemDecoration.VERTICAL));
|
||||
|
||||
_stationItemViewModel.getAllStationItems().observe(this, stationsAdapter::submitList);
|
||||
_stationItemViewModel.getAllStationItems(false).observe(this, stationsAdapter::submitList);
|
||||
|
||||
// launch with filter if station name is provided
|
||||
if (_stationName == null) {
|
||||
|
|
|
@ -43,6 +43,11 @@ public abstract class StationItemDao {
|
|||
@Query("SELECT * FROM StationItem ORDER BY srcCallsign ASC")
|
||||
public abstract LiveData<List<StationItem>> getAllStationItems();
|
||||
|
||||
@Query("SELECT *, (SELECT count(*) FROM PositionItem pos WHERE st.srcCallsign = pos.srcCallsign) AS positionCount " +
|
||||
"FROM StationItem st " +
|
||||
"WHERE positionCount > :minCount")
|
||||
public abstract LiveData<List<StationItem>> getMovingStationItems(int minCount);
|
||||
|
||||
@Query("DELETE FROM StationItem WHERE srcCallsign = :srcCallsign")
|
||||
public abstract void deleteStationItemsFromCallsign(String srcCallsign);
|
||||
|
||||
|
|
|
@ -15,16 +15,22 @@ import java.util.List;
|
|||
public class StationItemRepository {
|
||||
private static final String TAG = StationItemRepository.class.getSimpleName();
|
||||
|
||||
private static final int MIN_POSITION_COUNT = 2;
|
||||
|
||||
private final StationItemDao _stationItemDao;
|
||||
private final LiveData<List<StationItem>> _stationItems;
|
||||
private final LiveData<List<StationItem>> _stationItemsMoving;
|
||||
|
||||
public StationItemRepository(Application application) {
|
||||
AppDatabase appDatabase = AppDatabase.getDatabase(application);
|
||||
_stationItemDao = appDatabase.stationitemDao();
|
||||
_stationItems = Transformations.distinctUntilChanged(_stationItemDao.getAllStationItems());
|
||||
_stationItemsMoving = Transformations.distinctUntilChanged(_stationItemDao.getMovingStationItems(MIN_POSITION_COUNT));
|
||||
}
|
||||
|
||||
public LiveData<List<StationItem>> getAllStationItems() { return _stationItems; }
|
||||
public LiveData<List<StationItem>> getAllStationItems(boolean movingOnly) {
|
||||
return movingOnly ? _stationItemsMoving : _stationItems;
|
||||
}
|
||||
|
||||
public void upsertStationItem(StationItem stationItem) {
|
||||
AppDatabase.getDatabaseExecutor().execute(() -> {
|
||||
|
|
|
@ -19,7 +19,7 @@ public class StationItemViewModel extends AndroidViewModel {
|
|||
_stationItemRepository = new StationItemRepository(application);
|
||||
}
|
||||
|
||||
public LiveData<List<StationItem>> getAllStationItems() { return _stationItemRepository.getAllStationItems(); }
|
||||
public LiveData<List<StationItem>> getAllStationItems(boolean movingOnly) { return _stationItemRepository.getAllStationItems(movingOnly); }
|
||||
|
||||
public void deleteStationItems(String srcCallsign, int hours) {
|
||||
_stationItemRepository.deleteStationItems(srcCallsign, hours);
|
||||
|
|
|
@ -10,6 +10,11 @@
|
|||
android:title="@string/map_menu_show_range"
|
||||
android:checkable="true"
|
||||
android:checked="false"/>
|
||||
<item
|
||||
android:id="@+id/map_menu_show_moving"
|
||||
android:title="@string/map_menu_show_moving"
|
||||
android:checkable="true"
|
||||
android:checked="false"/>
|
||||
<item
|
||||
android:id="@+id/map_menu_clear_cache"
|
||||
android:title="@string/map_menu_clear_cache_title" />
|
||||
|
|
|
@ -365,4 +365,5 @@
|
|||
<string name="log_item_activity_delete_hours_title">This will remove everything older than %d hours. Are you sure?</string>
|
||||
<string name="map_menu_rotate_map">Rotate map with compass</string>
|
||||
<string name="map_menu_show_range">Show range circles</string>
|
||||
<string name="map_menu_show_moving">Show moving stations</string>
|
||||
</resources>
|
Ładowanie…
Reference in New Issue