From 93f8ba54bc95ff784322b585c9860c9412719841 Mon Sep 17 00:00:00 2001 From: Hampus Rosenquist <github@hamros.se> Date: Wed, 26 Oct 2022 00:38:26 +0200 Subject: [PATCH] Code clean up --- .../Android/app/src/main/AndroidManifest.xml | 19 +- .../android/app/AircraftMapView.java | 238 ++++++------------ 2 files changed, 77 insertions(+), 180 deletions(-) diff --git a/drip-android-observer-master/Android/app/src/main/AndroidManifest.xml b/drip-android-observer-master/Android/app/src/main/AndroidManifest.xml index a5a06dd..7106509 100644 --- a/drip-android-observer-master/Android/app/src/main/AndroidManifest.xml +++ b/drip-android-observer-master/Android/app/src/main/AndroidManifest.xml @@ -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 diff --git a/drip-android-observer-master/Android/app/src/main/java/org/dripdronescanner/android/app/AircraftMapView.java b/drip-android-observer-master/Android/app/src/main/java/org/dripdronescanner/android/app/AircraftMapView.java index b2cf3e4..1ab2223 100644 --- a/drip-android-observer-master/Android/app/src/main/java/org/dripdronescanner/android/app/AircraftMapView.java +++ b/drip-android-observer-master/Android/app/src/main/java/org/dripdronescanner/android/app/AircraftMapView.java @@ -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())); } } } -- GitLab