Changeset View
Changeset View
Standalone View
Standalone View
app/src/main/java/it/reyboz/bustorino/fragments/MapFragment.java
| Show All 20 Lines | |||||
| import android.Manifest; | import android.Manifest; | ||||
| import android.animation.ObjectAnimator; | import android.animation.ObjectAnimator; | ||||
| import android.annotation.SuppressLint; | import android.annotation.SuppressLint; | ||||
| import android.content.Context; | import android.content.Context; | ||||
| import android.graphics.drawable.Drawable; | import android.graphics.drawable.Drawable; | ||||
| import android.location.Location; | import android.location.Location; | ||||
| import android.location.LocationManager; | import android.location.LocationManager; | ||||
| import android.os.AsyncTask; | |||||
| import android.os.Bundle; | import android.os.Bundle; | ||||
| import android.util.Log; | import android.util.Log; | ||||
| import android.view.LayoutInflater; | import android.view.LayoutInflater; | ||||
| import android.view.View; | import android.view.View; | ||||
| import android.view.ViewGroup; | import android.view.ViewGroup; | ||||
| import android.widget.ImageButton; | import android.widget.ImageButton; | ||||
| import android.widget.Toast; | import android.widget.Toast; | ||||
| import androidx.activity.result.ActivityResultLauncher; | import androidx.activity.result.ActivityResultLauncher; | ||||
| import androidx.activity.result.contract.ActivityResultContracts; | import androidx.activity.result.contract.ActivityResultContracts; | ||||
| import androidx.annotation.NonNull; | import androidx.annotation.NonNull; | ||||
| import androidx.annotation.Nullable; | import androidx.annotation.Nullable; | ||||
| import androidx.coordinatorlayout.widget.CoordinatorLayout; | |||||
| import androidx.core.content.res.ResourcesCompat; | import androidx.core.content.res.ResourcesCompat; | ||||
| import androidx.lifecycle.ViewModelProvider; | import androidx.lifecycle.ViewModelProvider; | ||||
| import androidx.preference.PreferenceManager; | import androidx.preference.PreferenceManager; | ||||
| import it.reyboz.bustorino.backend.gtfs.LivePositionUpdate; | import it.reyboz.bustorino.backend.gtfs.LivePositionUpdate; | ||||
| import it.reyboz.bustorino.backend.mato.MQTTMatoClient; | import it.reyboz.bustorino.backend.mato.MQTTMatoClient; | ||||
| import it.reyboz.bustorino.backend.utils; | import it.reyboz.bustorino.backend.utils; | ||||
| import it.reyboz.bustorino.data.MatoTripsDownloadWorker; | import it.reyboz.bustorino.data.MatoTripsDownloadWorker; | ||||
| Show All 13 Lines | |||||
| import org.osmdroid.util.BoundingBox; | import org.osmdroid.util.BoundingBox; | ||||
| import org.osmdroid.util.GeoPoint; | import org.osmdroid.util.GeoPoint; | ||||
| import org.osmdroid.views.MapView; | import org.osmdroid.views.MapView; | ||||
| import org.osmdroid.views.overlay.FolderOverlay; | import org.osmdroid.views.overlay.FolderOverlay; | ||||
| import org.osmdroid.views.overlay.Marker; | import org.osmdroid.views.overlay.Marker; | ||||
| import org.osmdroid.views.overlay.infowindow.InfoWindow; | import org.osmdroid.views.overlay.infowindow.InfoWindow; | ||||
| import org.osmdroid.views.overlay.mylocation.GpsMyLocationProvider; | import org.osmdroid.views.overlay.mylocation.GpsMyLocationProvider; | ||||
| import java.lang.ref.WeakReference; | |||||
| import java.util.*; | import java.util.*; | ||||
| import kotlin.Pair; | import kotlin.Pair; | ||||
| import it.reyboz.bustorino.R; | import it.reyboz.bustorino.R; | ||||
| import it.reyboz.bustorino.backend.Stop; | import it.reyboz.bustorino.backend.Stop; | ||||
| import it.reyboz.bustorino.data.NextGenDB; | |||||
| import it.reyboz.bustorino.middleware.GeneralActivity; | import it.reyboz.bustorino.middleware.GeneralActivity; | ||||
| import it.reyboz.bustorino.util.Permissions; | import it.reyboz.bustorino.util.Permissions; | ||||
| public class MapFragment extends ScreenBaseFragment { | public class MapFragment extends ScreenBaseFragment { | ||||
| //private static final String TAG = "Busto-MapActivity"; | //private static final String TAG = "Busto-MapActivity"; | ||||
| private static final String MAP_CURRENT_ZOOM_KEY = "map-current-zoom"; | private static final String MAP_CURRENT_ZOOM_KEY = "map-current-zoom"; | ||||
| private static final String MAP_CENTER_LAT_KEY = "map-center-lat"; | private static final String MAP_CENTER_LAT_KEY = "map-center-lat"; | ||||
| Show All 23 Lines | public class MapFragment extends ScreenBaseFragment { | ||||
| private MapView map = null; | private MapView map = null; | ||||
| public Context ctx; | public Context ctx; | ||||
| private LocationOverlay mLocationOverlay = null; | private LocationOverlay mLocationOverlay = null; | ||||
| private FolderOverlay stopsFolderOverlay = null; | private FolderOverlay stopsFolderOverlay = null; | ||||
| private Bundle savedMapState = null; | private Bundle savedMapState = null; | ||||
| protected ImageButton btCenterMap; | protected ImageButton btCenterMap; | ||||
| protected ImageButton btFollowMe; | protected ImageButton btFollowMe; | ||||
| protected CoordinatorLayout coordLayout; | |||||
| private boolean hasMapStartFinished = false; | private boolean hasMapStartFinished = false; | ||||
| private boolean followingLocation = false; | private boolean followingLocation = false; | ||||
| //the ViewModel from which we get the stop to display in the map | //the ViewModel from which we get the stop to display in the map | ||||
| private StopsMapViewModel stopsViewModel; | private StopsMapViewModel stopsViewModel; | ||||
| //private GTFSPositionsViewModel gtfsPosViewModel; //= new ViewModelProvider(this).get(MapViewModel.class); | //private GTFSPositionsViewModel gtfsPosViewModel; //= new ViewModelProvider(this).get(MapViewModel.class); | ||||
| private MQTTPositionsViewModel positionsViewModel; | private MQTTPositionsViewModel positionsViewModel; | ||||
| ▲ Show 20 Lines • Show All 72 Lines • ▼ Show 20 Lines | public class MapFragment extends ScreenBaseFragment { | ||||
| // return getInstance(stop.getLatitude(), stop.getLongitude(), stop.getStopDisplayName(), stop.ID); | // return getInstance(stop.getLatitude(), stop.getLongitude(), stop.getStopDisplayName(), stop.ID); | ||||
| //} | //} | ||||
| @Nullable | @Nullable | ||||
| @Override | @Override | ||||
| public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { | public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { | ||||
| //use the same layout as the activity | //use the same layout as the activity | ||||
| View root = inflater.inflate(R.layout.activity_map, container, false); | View root = inflater.inflate(R.layout.fragment_map, container, false); | ||||
| if (getContext() == null){ | if (getContext() == null){ | ||||
| throw new IllegalStateException(); | throw new IllegalStateException(); | ||||
| } | } | ||||
| ctx = getContext().getApplicationContext(); | ctx = getContext().getApplicationContext(); | ||||
| Configuration.getInstance().load(ctx, PreferenceManager.getDefaultSharedPreferences(ctx)); | Configuration.getInstance().load(ctx, PreferenceManager.getDefaultSharedPreferences(ctx)); | ||||
| map = root.findViewById(R.id.map); | map = root.findViewById(R.id.map); | ||||
| map.setTileSource(TileSourceFactory.MAPNIK); | map.setTileSource(TileSourceFactory.MAPNIK); | ||||
| //map.setTilesScaledToDpi(true); | //map.setTilesScaledToDpi(true); | ||||
| map.setFlingEnabled(true); | map.setFlingEnabled(true); | ||||
| // add ability to zoom with 2 fingers | // add ability to zoom with 2 fingers | ||||
| map.setMultiTouchControls(true); | map.setMultiTouchControls(true); | ||||
| btCenterMap = root.findViewById(R.id.icon_center_map); | btCenterMap = root.findViewById(R.id.icon_center_map); | ||||
| btFollowMe = root.findViewById(R.id.icon_follow); | btFollowMe = root.findViewById(R.id.icon_follow); | ||||
| coordLayout = root.findViewById(R.id.coord_layout); | |||||
| //setup FolderOverlay | //setup FolderOverlay | ||||
| stopsFolderOverlay = new FolderOverlay(); | stopsFolderOverlay = new FolderOverlay(); | ||||
| //setup Bus Markers Overlay | //setup Bus Markers Overlay | ||||
| busPositionsOverlay = new FolderOverlay(); | busPositionsOverlay = new FolderOverlay(); | ||||
| //reset shown bus updates | //reset shown bus updates | ||||
| busPositionMarkersByTrip.clear(); | busPositionMarkersByTrip.clear(); | ||||
| tripMarkersAnimators.clear(); | tripMarkersAnimators.clear(); | ||||
| ▲ Show 20 Lines • Show All 552 Lines • ▼ Show 20 Lines | public Marker makeMarker(GeoPoint geoPoint, String stopID, String stopName, | ||||
| marker.showInfoWindow(); | marker.showInfoWindow(); | ||||
| //map.getController().animateTo(marker.getPosition()); | //map.getController().animateTo(marker.getPosition()); | ||||
| } | } | ||||
| return marker; | return marker; | ||||
| } | } | ||||
| @Nullable | @Nullable | ||||
| @org.jetbrains.annotations.Nullable | |||||
| @Override | @Override | ||||
| public View getBaseViewForSnackBar() { | public View getBaseViewForSnackBar() { | ||||
| return null; | return coordLayout; | ||||
| } | } | ||||
| } | } | ||||
Public contents are in Creative Commons Attribution-ShareAlike 4.0 (CC-BY-SA) or GNU Free Documentation License (at your option) unless otherwise noted. · Contact / Register