From 6d52a1e14218e643d58ed8944dccfa9bb892fad2 Mon Sep 17 00:00:00 2001 From: Philipp0002 Date: Sat, 14 Oct 2023 20:40:23 +0200 Subject: [PATCH] Make it possible to locate specific device on map --- .../xadgps_client/DeviceInfoSheet.java | 12 ++++++ .../xadgps_client/MainActivity.java | 16 +++++++- .../xadgps_client/TrackingFragment.java | 41 ++++++------------- app/src/main/res/layout/device_info_sheet.xml | 16 +++++++- app/src/main/res/values-de/strings.xml | 2 + app/src/main/res/values/strings.xml | 2 + 6 files changed, 58 insertions(+), 31 deletions(-) diff --git a/app/src/main/java/de/raffaelhahn/xadgps_client/DeviceInfoSheet.java b/app/src/main/java/de/raffaelhahn/xadgps_client/DeviceInfoSheet.java index 58f329a..c6e2956 100644 --- a/app/src/main/java/de/raffaelhahn/xadgps_client/DeviceInfoSheet.java +++ b/app/src/main/java/de/raffaelhahn/xadgps_client/DeviceInfoSheet.java @@ -4,6 +4,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Button; import android.widget.TextView; import androidx.annotation.NonNull; @@ -43,6 +44,7 @@ public class DeviceInfoSheet extends BottomSheetDialogFragment implements Device private TextView deviceIsStopped; private TextView deviceSpeed; private TextView deviceDistance; + private Button deviceShowOnMapButton; public DeviceInfoSheet() { } @@ -95,6 +97,10 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat deviceIsStopped = view.findViewById(R.id.deviceStopped); deviceSpeed = view.findViewById(R.id.deviceSpeed); deviceDistance = view.findViewById(R.id.deviceDistance); + deviceShowOnMapButton = view.findViewById(R.id.deviceShowOnMap); + + deviceShowOnMapButton.setVisibility(View.GONE); + deviceShowOnMapButton.setOnClickListener(v -> showDeviceOnMap()); } private void updateView(Device device) { @@ -120,6 +126,7 @@ private void updateView(Device device) { deviceIsStopped.setText("1".equals(device.isStop) ? R.string.yes : R.string.no); deviceSpeed.setText(device.speed + " km/h"); deviceDistance.setText(device.distance); + deviceShowOnMapButton.setVisibility(View.VISIBLE); } @Override @@ -149,4 +156,9 @@ public void onDeviceListUpdate(ArrayList deviceList) { } } } + + public void showDeviceOnMap() { + ((MainActivity)getActivity()).showDeviceOnMap(id); + this.dismiss(); + } } diff --git a/app/src/main/java/de/raffaelhahn/xadgps_client/MainActivity.java b/app/src/main/java/de/raffaelhahn/xadgps_client/MainActivity.java index 40dbdc8..bdb64a9 100644 --- a/app/src/main/java/de/raffaelhahn/xadgps_client/MainActivity.java +++ b/app/src/main/java/de/raffaelhahn/xadgps_client/MainActivity.java @@ -78,9 +78,13 @@ private boolean openFragmentById(int itemId) { } private void openFragment(Class clazz) { + openFragment(clazz, null); + } + + private void openFragment(Class clazz, Bundle args) { getSupportFragmentManager().beginTransaction() .setReorderingAllowed(true) - .replace(R.id.fragment_container_view, clazz, null) + .replace(R.id.fragment_container_view, clazz, args) .commit(); } @@ -108,5 +112,15 @@ protected void onDestroy() { } } + public void showDeviceOnMap(String deviceId) { + Bundle args = new Bundle(); + args.putString(TrackingFragment.ARG_PARAM_SHOW_DEVICE_ID, deviceId); + + openFragment(TrackingFragment.class, args); + //bottomNavigationView.setSelectedItemId(R.id.item_tracking); + //bottomNavigationView.getMenu().getItem(0).setChecked(true); + bottomNavigationView.getMenu().findItem(R.id.item_tracking).setChecked(true); + } + } \ No newline at end of file diff --git a/app/src/main/java/de/raffaelhahn/xadgps_client/TrackingFragment.java b/app/src/main/java/de/raffaelhahn/xadgps_client/TrackingFragment.java index 6f2350a..b3b0c67 100644 --- a/app/src/main/java/de/raffaelhahn/xadgps_client/TrackingFragment.java +++ b/app/src/main/java/de/raffaelhahn/xadgps_client/TrackingFragment.java @@ -44,12 +44,10 @@ public class TrackingFragment extends Fragment implements DeviceListService.DeviceListUpdateListener { // TODO: Rename parameter arguments, choose names that match // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER - private static final String ARG_PARAM1 = "param1"; - private static final String ARG_PARAM2 = "param2"; + public static final String ARG_PARAM_SHOW_DEVICE_ID = "paramShowDeviceId"; // TODO: Rename and change types of parameters - private String mParam1; - private String mParam2; + private String paramShowDeviceId; private MapView map = null; private MaterialCardView trackingLoadingView = null; @@ -62,30 +60,11 @@ public TrackingFragment() { // Required empty public constructor } - /** - * Use this factory method to create a new instance of - * this fragment using the provided parameters. - * - * @param param1 Parameter 1. - * @param param2 Parameter 2. - * @return A new instance of fragment TrackingFragment. - */ - // TODO: Rename and change types and number of parameters - public static TrackingFragment newInstance(String param1, String param2) { - TrackingFragment fragment = new TrackingFragment(); - Bundle args = new Bundle(); - args.putString(ARG_PARAM1, param1); - args.putString(ARG_PARAM2, param2); - fragment.setArguments(args); - return fragment; - } - @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { - mParam1 = getArguments().getString(ARG_PARAM1); - mParam2 = getArguments().getString(ARG_PARAM2); + paramShowDeviceId = getArguments().getString(ARG_PARAM_SHOW_DEVICE_ID); } } @@ -126,8 +105,7 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat map.setFlingEnabled(true); map.setVerticalMapRepetitionEnabled(false); map.setScrollableAreaLimitLatitude(MapView.getTileSystem().getMaxLatitude(), MapView.getTileSystem().getMinLatitude(), 0); - - if(preferences.contains("myLatestLat") && preferences.contains("myLatestLon")){ + if(preferences.contains("myLatestLat") && preferences.contains("myLatestLon") && paramShowDeviceId == null){ mapController.setZoom(20.0); mapController.setCenter(new GeoPoint(preferences.getFloat("myLatestLat", 0), preferences.getFloat("myLatestLon", 0))); } @@ -138,8 +116,10 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat mLocationOverlay.runOnFirstFix(() -> { if(getActivity() != null) { getActivity().runOnUiThread(() -> { - mapController.setZoom(20.0); - mapController.setCenter(mLocationOverlay.getMyLocation()); + if(paramShowDeviceId == null) { + mapController.setZoom(20.0); + mapController.setCenter(mLocationOverlay.getMyLocation()); + } editor.putFloat("myLatestLat", (float) mLocationOverlay.getMyLocation().getLatitude()); editor.putFloat("myLatestLon", (float) mLocationOverlay.getMyLocation().getLongitude()); editor.apply(); @@ -225,6 +205,11 @@ public void onDeviceListUpdate(ArrayList deviceList) { //marker.setIcon(getResources().getDrawable(R.drawable.router)); map.getOverlays().add(marker); map.invalidate(); + if(paramShowDeviceId != null && paramShowDeviceId.equals(device.id)) { + IMapController mapController = map.getController(); + mapController.setZoom(20.0); + mapController.setCenter(new GeoPoint(lat, lon)); + } } }); } diff --git a/app/src/main/res/layout/device_info_sheet.xml b/app/src/main/res/layout/device_info_sheet.xml index 560c57b..331a32b 100644 --- a/app/src/main/res/layout/device_info_sheet.xml +++ b/app/src/main/res/layout/device_info_sheet.xml @@ -28,7 +28,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="16dp" - android:text="TextView" + android:text="DeviceName" android:textAppearance="?attr/textAppearanceHeadlineLarge" android:textColor="?attr/colorOnSurface" /> @@ -38,7 +38,7 @@ android:layout_height="wrap_content" android:layout_marginStart="16dp" android:layout_marginTop="8dp" - android:text="TextView" + android:text="DeviceGroup" android:textAppearance="?attr/textAppearanceHeadlineSmall" android:textColor="?attr/colorOnSurface" /> @@ -272,6 +272,18 @@ + + diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index cda9cf3..ba850f9 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -34,6 +34,8 @@ Geparkt Fährt + Auf Karte anzeigen + Tracking lädt... Die Position deiner Tracker wird ermittelt. \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 30772de..df2ace2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -34,6 +34,8 @@ Parked Moving + Show on map + Loading tracking... The location of your trackers is being determined. \ No newline at end of file