Skip to content
Snippets Groups Projects
Commit 93f8ba54 authored by Hampus Rosenquist's avatar Hampus Rosenquist
Browse files

Code clean up

parent e86cc3ef
No related branches found
No related tags found
No related merge requests found
......@@ -29,31 +29,14 @@
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
<!--
The API key for Google Maps-based APIs is defined as a string resource.
(See the file "res/values/google_maps_api.xml").
Note that the API key is linked to the encryption key used to sign the APK.
You need a different API key for each encryption key, including the release key that is used to
sign the APK for publishing.
You can define the keys for the debug and release targets in src/debug/ and src/release/.
-->
<activity
android:name=".app.DebugActivity"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".app.SettingsActivity"></activity><!-- <activity android:name=".MainActivity"> -->
<!-- <intent-filter> -->
<!-- <action android:name="android.intent.action.MAIN" /> -->
<!-- <category android:name="android.intent.category.LAUNCHER" /> -->
<!-- </intent-filter> -->
<!-- </activity> -->
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="AIzaSyAghFlMdudCBWm76XPMZ2eE4Stl7CkD9CE" />
<activity android:name=".app.SettingsActivity"></activity>
</application>
</manifest>
\ No newline at end of file
......@@ -3,72 +3,48 @@ package org.dripdronescanner.android.app;
import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.util.Log;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.core.content.res.ResourcesCompat;
import androidx.fragment.app.Fragment;
import org.dripdronescanner.android.R;
import org.dripdronescanner.android.data.AircraftObject;
import org.osmdroid.config.Configuration;
import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapView;
import java.util.ArrayList;
import java.util.HashMap;
import android.Manifest;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.util.Pair;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import com.google.android.gms.internal.maps.zzt;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
//import com.google.android.gms.maps.model.Polyline;
import com.google.android.gms.maps.model.PolylineOptions;
import androidx.lifecycle.ViewModelProvider;
import org.dripdronescanner.android.R;
import org.dripdronescanner.android.data.AircraftObject;
import org.dripdronescanner.android.data.LocationData;
import org.dripdronescanner.android.data.SystemData;
import org.dripdronescanner.android.data.Util;
import org.osmdroid.config.Configuration;
import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapView;
import org.osmdroid.views.overlay.Polyline;
import org.osmdroid.views.overlay.mylocation.GpsMyLocationProvider;
import org.osmdroid.views.overlay.mylocation.MyLocationNewOverlay;
import org.osmdroid.views.overlay.Marker;
import java.util.Collection;
import java.util.HashMap;
public class AircraftMapView extends Fragment {
private MapView map = null;
private static final String TAG = "AircraftMapView";
private MapView map;
private AircraftViewModel model;
private MyLocationNewOverlay overlay;
private static final double DESIRED_ZOOM = 17;
private static final int ALLOWED_ZOOM_MARGIN = 2;
private final HashMap<AircraftObject, MapObserver> aircraftObservers = new HashMap<>();
private MyLocationNewOverlay locationOverlay;
private final Util.DiffObserver<AircraftObject> allAircraftObserver = new Util.DiffObserver<AircraftObject>() {
@Override
......@@ -98,8 +74,7 @@ public class AircraftMapView extends Fragment {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Context ctx = getContext();
Configuration.getInstance().load(ctx, PreferenceManager.getDefaultSharedPreferences(ctx));
......@@ -107,34 +82,29 @@ public class AircraftMapView extends Fragment {
map = v.findViewById(R.id.map_view);
map.setTileSource(TileSourceFactory.MAPNIK);
map.addOnFirstLayoutListener(new MapView.OnFirstLayoutListener() {
@Override
public void onFirstLayout(View v, int left, int top, int right, int bottom) {
if (getActivity() == null)
return;
if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling ActivityCompat#requestPermissions
// to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
Log.e("XX", "##################### can't make the right permissions");
return;
}
map.addOnFirstLayoutListener((v1, left, top, right, bottom) -> {
if (getActivity() == null)
return;
locationOverlay = new MyLocationNewOverlay(new GpsMyLocationProvider(getContext()), map);
locationOverlay.enableMyLocation();
locationOverlay.enableFollowLocation();
map.getOverlays().add(locationOverlay);
if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling ActivityCompat#requestPermissions
// to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
Log.e("XX", "##################### can't make the right permissions");
return;
}
map.setMultiTouchControls(true);
overlay = new MyLocationNewOverlay(new GpsMyLocationProvider(getContext()), map);
overlay.enableMyLocation();
overlay.enableFollowLocation();
map.getOverlays().add(overlay);
//map.getController().setCenter(new GeoPoint(58.410809, 15.621373));
map.getController().setZoom(DESIRED_ZOOM);
}
map.setMultiTouchControls(true);
map.getController().setZoom(DESIRED_ZOOM);
});
return v;
}
......@@ -142,21 +112,13 @@ public class AircraftMapView extends Fragment {
@Override
public void onResume() {
super.onResume();
//this will refresh the osmdroid configuration on resuming.
//if you make changes to the configuration, use
//SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
//Configuration.getInstance().load(this, PreferenceManager.getDefaultSharedPreferences(this));
map.onResume(); //needed for compass, my location overlays, v6.0.0 and up
map.onResume();
}
@Override
public void onPause() {
super.onPause();
//this will refresh the osmdroid configuration on resuming.
//if you make changes to the configuration, use
//SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
//Configuration.getInstance().save(this, prefs);
map.onPause(); //needed for comif (marker != null) {
map.onPause();
}
@Override
......@@ -165,15 +127,11 @@ public class AircraftMapView extends Fragment {
setupModel();
}
private static final double DESIRED_ZOOM = 17;
private static final int ALLOWED_ZOOM_MARGIN = 2;
private void setupModel() {
if (getActivity() == null)
return;
model = ViewModelProviders.of(getActivity()).get(AircraftViewModel.class);
model = new ViewModelProvider(this).get(AircraftViewModel.class);
model.getAllAircraft().observe(getViewLifecycleOwner(), allAircraftObserver);
model.getActiveAircraft().observe(getViewLifecycleOwner(), new Observer<AircraftObject>() {
MapObserver last = null;
......@@ -186,11 +144,11 @@ public class AircraftMapView extends Fragment {
if (observer == null)
return;
if (object.getLocation().getLatitude() == 0.0 && object.getLocation().getLongitude() == 0.0)
LocationData loc = object.getLocation();
if (loc.getLatitude() == 0.0 && loc.getLongitude() == 0.0)
return;
LatLng ll = new LatLng(object.getLocation().getLatitude(), object.getLocation().getLongitude());
Log.i(TAG, "centering on " + object + " at " + ll);
Log.i(TAG, "centering on " + object + " at " + loc.getLatitude() + " " + loc.getLongitude());
if (last != null && last.marker != null) {
last.marker.setAlpha(0.5f);
......@@ -204,37 +162,33 @@ public class AircraftMapView extends Fragment {
last = observer;
//CameraPosition position = googleMap.getCameraPosition();
map.getController().animateTo(new GeoPoint(loc.getLatitude(), loc.getLongitude()));
double currentZoom = map.getZoomLevelDouble();
if (currentZoom < DESIRED_ZOOM - ALLOWED_ZOOM_MARGIN || currentZoom > DESIRED_ZOOM + ALLOWED_ZOOM_MARGIN) {
// googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(ll, DESIRED_ZOOM));
//map.getController().animateTo(new GeoPoint(ll.latitude, ll.longitude));
} else {
//map.getController().animateTo(new GeoPoint(ll.latitude, ll.longitude));
//googleMap.moveCamera(CameraUpdateFactory.newLatLng(ll));
}
if (currentZoom < DESIRED_ZOOM - ALLOWED_ZOOM_MARGIN || currentZoom > DESIRED_ZOOM + ALLOWED_ZOOM_MARGIN)
map.getController().setZoom(DESIRED_ZOOM);
}
});
}
/*@Override
public boolean onMarkerClick(Marker marker) {
if (marker != null) {
Object tag = marker.getRelatedObject();
if (tag instanceof AircraftObject) {
model.setActiveAircraft((AircraftObject) tag);
return true;
private final Marker.OnMarkerClickListener onMarkerClick = new Marker.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker, MapView mapView) {
if (marker != null) {
Object tag = marker.getRelatedObject();
if (tag instanceof AircraftObject) {
model.setActiveAircraft((AircraftObject) tag);
return true;
}
}
return false;
}
return false;
}*/
};
class MapObserver implements Observer<LocationData> {
private Marker marker;
private Marker markerPilot;
private Polyline polyline;
private PolylineOptions polylineOptions;
private final AircraftObject aircraft;
......@@ -242,9 +196,6 @@ public class AircraftMapView extends Fragment {
aircraft = active;
aircraft.location.observe(AircraftMapView.this, this);
aircraft.system.observe(AircraftMapView.this, systemObserver);
polylineOptions = new PolylineOptions()
.color(Color.RED)
.clickable(true);
}
void stop() {
......@@ -259,10 +210,9 @@ public class AircraftMapView extends Fragment {
markerPilot = null;
}
if (polyline != null) {
//polyline.remove();
map.getOverlays().remove(polyline);
polyline = null;
}
polylineOptions = null;
}
private final Observer<SystemData> systemObserver = new Observer<SystemData>() {
......@@ -276,34 +226,19 @@ public class AircraftMapView extends Fragment {
if (sys.getOperatorLatitude() == 0.0 && sys.getOperatorLongitude() == 0.0)
return;
LatLng latLng = new LatLng(sys.getOperatorLatitude(), sys.getOperatorLongitude());
if (markerPilot == null) {
String id = "ID missing";
if (aircraft.getIdentification() != null)
id = aircraft.getIdentification().getUasIdAsString();
Marker pilotMarker = new Marker(map);
pilotMarker.setPosition(new GeoPoint(latLng.latitude, latLng.longitude));
pilotMarker.setIcon(ResourcesCompat.getDrawable(getResources(), R.drawable.ic_airplan, null));
pilotMarker.setTitle("pilot " + id);
pilotMarker.setAlpha(0.5f);
markerPilot = pilotMarker;
markerPilot = new Marker(map);
markerPilot.setPosition(new GeoPoint(sys.getOperatorLatitude(), sys.getOperatorLongitude()));
markerPilot.setIcon(ResourcesCompat.getDrawable(getResources(), R.drawable.ic_airplan, null));
markerPilot.setTitle("pilot " + id);
markerPilot.setAlpha(0.5f);
markerPilot.setRelatedObject(aircraft);
markerPilot.setOnMarkerClickListener(new Marker.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker, MapView mapView) {
if (marker != null) {
Object tag = marker.getRelatedObject();
if (tag instanceof AircraftObject) {
model.setActiveAircraft((AircraftObject) tag);
return true;
}
}
return false;
}
});
markerPilot.setOnMarkerClickListener(onMarkerClick);
}
markerPilot.setPosition(new GeoPoint(latLng.latitude, latLng.longitude)); // duplicate?
map.getOverlays().add(markerPilot);
}
};
......@@ -312,61 +247,40 @@ public class AircraftMapView extends Fragment {
public void onChanged(@Nullable LocationData ignore) {
boolean zoom = false;
LocationData loc = aircraft.getLocation();
if (loc == null || map == null || polylineOptions == null)
if (loc == null || map == null)
return;
// filter out zero data
if (loc.getLatitude() == 0.0 && loc.getLongitude() == 0.0)
return;
LatLng latLng = new LatLng(loc.getLatitude(), loc.getLongitude());
if (marker == null) {
String id = "ID missing";
if (aircraft.getIdentification() != null)
id = aircraft.getIdentification().getUasIdAsString();
Marker aircraftMarker = new Marker(map);
aircraftMarker.setPosition(new GeoPoint(latLng.latitude, latLng.longitude));
aircraftMarker.setIcon(ResourcesCompat.getDrawable(getResources(), R.drawable.ic_airplan, null));
aircraftMarker.setTitle("aircraft " + id);
aircraftMarker.setAlpha(0.5f);
marker = aircraftMarker;
marker = new Marker(map);
marker.setPosition(new GeoPoint(loc.getLatitude(), loc.getLongitude()));
marker.setIcon(ResourcesCompat.getDrawable(getResources(), R.drawable.ic_airplan, null));
marker.setTitle("aircraft " + id);
marker.setAlpha(0.5f);
marker.setRelatedObject(aircraft);
marker.setOnMarkerClickListener(new Marker.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker, MapView mapView) {
if (marker != null) {
Object tag = marker.getRelatedObject();
if (tag instanceof AircraftObject) {
model.setActiveAircraft((AircraftObject) tag);
return true;
}
}
return false;
}
});
marker.setOnMarkerClickListener(onMarkerClick);
zoom = true;
}
map.getOverlays().add(marker);
polylineOptions.add(latLng);
if (polyline != null) {
//polyline.remove(); found no equivalent method
map.getOverlays().remove(polyline);
polyline = null;
}
//polyline = googleMap.addPolyline(polylineOptions);
polyline = new Polyline();
polyline.addPoint(new GeoPoint(latLng.latitude, latLng.longitude));
// make polyline clickable
// polyline.setPoints(); deprecated method
map.getOverlayManager().add(polyline);
polyline = new Polyline();
polyline.addPoint(new GeoPoint(loc.getLatitude(), loc.getLongitude()));
map.getOverlays().add(polyline);
marker.setPosition(new GeoPoint(latLng.latitude, latLng.longitude));
if (zoom) {
//googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
map.getController().animateTo(new GeoPoint(latLng.latitude, latLng.longitude));
map.getController().animateTo(new GeoPoint(loc.getLatitude(), loc.getLongitude()));
}
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment