diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml
index 72ba9d4..cf5be69 100644
--- a/.idea/deploymentTargetSelector.xml
+++ b/.idea/deploymentTargetSelector.xml
@@ -7,6 +7,14 @@
+
+
+
+
+
+
+
+
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 0b80081..81ada05 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -50,6 +50,8 @@ dependencies {
implementation(libs.credentials)
implementation(libs.credentials.play.services.auth)
implementation(libs.googleid)
+ implementation("com.google.android.gms:play-services-maps:18.2.0")
+ implementation("com.google.android.gms:play-services-location:21.0.1")
testImplementation(libs.junit)
androidTestImplementation(libs.ext.junit)
androidTestImplementation(libs.espresso.core)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 6e1b167..d750f77 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,6 +2,10 @@
+
+
+
+
+
+
+
@@ -26,6 +37,9 @@
+
{
+ mMap = googleMap;
+ // Check permissions and enable My Location
+ if (androidx.core.content.ContextCompat.checkSelfPermission(requireContext(),
+ android.Manifest.permission.ACCESS_FINE_LOCATION) == android.content.pm.PackageManager.PERMISSION_GRANTED) {
+ mMap.setMyLocationEnabled(true);
+
+ // Move camera to finding User or Default
+ com.google.android.gms.location.LocationServices.getFusedLocationProviderClient(requireActivity())
+ .getLastLocation()
+ .addOnSuccessListener(location -> {
+ if (location != null) {
+ com.google.android.gms.maps.model.LatLng current = new com.google.android.gms.maps.model.LatLng(
+ location.getLatitude(), location.getLongitude());
+ mMap.moveCamera(com.google.android.gms.maps.CameraUpdateFactory
+ .newLatLngZoom(current, 15f));
+ } else {
+ // Default to Escola Profissional de Vila do Conde
+ com.google.android.gms.maps.model.LatLng school = new com.google.android.gms.maps.model.LatLng(
+ 41.3536, -8.7424);
+ mMap.moveCamera(
+ com.google.android.gms.maps.CameraUpdateFactory.newLatLngZoom(school, 15f));
+ }
+ });
+ } else {
+ // Request permissions (Simplified for brevity, usually should use
+ // RequestPermissionLauncher)
+ requestPermissions(new String[] { android.Manifest.permission.ACCESS_FINE_LOCATION }, 100);
+ }
+
+ mMap.setOnMapLongClickListener(latLng -> {
+ android.content.Intent intent = new android.content.Intent(getContext(),
+ com.example.pap_findu.AddZoneActivity.class);
+ intent.putExtra("lat", latLng.latitude);
+ intent.putExtra("lng", latLng.longitude);
+ startActivity(intent);
+ });
+ });
+ }
+
// Implement SOS Button logic
binding.sosButton.setOnClickListener(v -> {
android.content.Intent intent = new android.content.Intent(android.content.Intent.ACTION_DIAL);
@@ -43,7 +89,9 @@ public class MapFragment extends Fragment {
});
binding.messagesFab.setOnClickListener(v -> {
- android.widget.Toast.makeText(getContext(), "Abrir Chat", android.widget.Toast.LENGTH_SHORT).show();
+ android.content.Intent intent = new android.content.Intent(getContext(),
+ com.example.pap_findu.ChatActivity.class);
+ startActivity(intent);
});
return root;
diff --git a/app/src/main/java/com/example/pap_findu/ui/profile/ProfileFragment.java b/app/src/main/java/com/example/pap_findu/ui/profile/ProfileFragment.java
index d35f051..dd49df7 100644
--- a/app/src/main/java/com/example/pap_findu/ui/profile/ProfileFragment.java
+++ b/app/src/main/java/com/example/pap_findu/ui/profile/ProfileFragment.java
@@ -20,6 +20,19 @@ public class ProfileFragment extends Fragment {
ViewGroup container, Bundle savedInstanceState) {
binding = FragmentProfileBinding.inflate(inflater, container, false);
View root = binding.getRoot();
+
+ binding.btnLogout.setOnClickListener(v -> {
+ // Sign out of Firebase
+ com.google.firebase.auth.FirebaseAuth.getInstance().signOut();
+
+ // Navigate back to Login Activity
+ android.content.Intent intent = new android.content.Intent(getActivity(),
+ com.example.pap_findu.login_activity.class);
+ intent.setFlags(
+ android.content.Intent.FLAG_ACTIVITY_NEW_TASK | android.content.Intent.FLAG_ACTIVITY_CLEAR_TASK);
+ startActivity(intent);
+ });
+
return root;
}
diff --git a/app/src/main/java/com/example/pap_findu/ui/zones/ZonesFragment.java b/app/src/main/java/com/example/pap_findu/ui/zones/ZonesFragment.java
index 419e1cc..d370a01 100644
--- a/app/src/main/java/com/example/pap_findu/ui/zones/ZonesFragment.java
+++ b/app/src/main/java/com/example/pap_findu/ui/zones/ZonesFragment.java
@@ -16,9 +16,17 @@ public class ZonesFragment extends Fragment {
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
+ Bundle savedInstanceState) {
binding = FragmentZonesBinding.inflate(inflater, container, false);
- return binding.getRoot();
+ View root = binding.getRoot();
+
+ binding.addZoneButton.setOnClickListener(v -> {
+ android.content.Intent intent = new android.content.Intent(getContext(),
+ com.example.pap_findu.AddZoneActivity.class);
+ startActivity(intent);
+ });
+
+ return root;
}
@Override
diff --git a/app/src/main/res/color/bottom_nav_selector.xml b/app/src/main/res/color/bottom_nav_selector.xml
index e878464..1130154 100644
--- a/app/src/main/res/color/bottom_nav_selector.xml
+++ b/app/src/main/res/color/bottom_nav_selector.xml
@@ -10,3 +10,5 @@
+
+
diff --git a/app/src/main/res/drawable/bg_alert_icon_info.xml b/app/src/main/res/drawable/bg_alert_icon_info.xml
index 8802694..8becc8c 100644
--- a/app/src/main/res/drawable/bg_alert_icon_info.xml
+++ b/app/src/main/res/drawable/bg_alert_icon_info.xml
@@ -11,3 +11,5 @@
+
+
diff --git a/app/src/main/res/drawable/bg_alert_icon_warning.xml b/app/src/main/res/drawable/bg_alert_icon_warning.xml
index 220177a..f27fdc8 100644
--- a/app/src/main/res/drawable/bg_alert_icon_warning.xml
+++ b/app/src/main/res/drawable/bg_alert_icon_warning.xml
@@ -11,3 +11,5 @@
+
+
diff --git a/app/src/main/res/drawable/bg_avatar_placeholder.xml b/app/src/main/res/drawable/bg_avatar_placeholder.xml
index 8d1343b..5b67d39 100644
--- a/app/src/main/res/drawable/bg_avatar_placeholder.xml
+++ b/app/src/main/res/drawable/bg_avatar_placeholder.xml
@@ -10,3 +10,5 @@
+
+
diff --git a/app/src/main/res/drawable/bg_badge.xml b/app/src/main/res/drawable/bg_badge.xml
index e11c62f..afa0fb3 100644
--- a/app/src/main/res/drawable/bg_badge.xml
+++ b/app/src/main/res/drawable/bg_badge.xml
@@ -10,3 +10,5 @@
+
+
diff --git a/app/src/main/res/drawable/bg_bottom_nav.xml b/app/src/main/res/drawable/bg_bottom_nav.xml
index 6d08638..0e19a78 100644
--- a/app/src/main/res/drawable/bg_bottom_nav.xml
+++ b/app/src/main/res/drawable/bg_bottom_nav.xml
@@ -20,3 +20,5 @@
+
+
diff --git a/app/src/main/res/drawable/bg_chip_muted.xml b/app/src/main/res/drawable/bg_chip_muted.xml
index 35fa013..7e1c843 100644
--- a/app/src/main/res/drawable/bg_chip_muted.xml
+++ b/app/src/main/res/drawable/bg_chip_muted.xml
@@ -16,3 +16,5 @@
+
+
diff --git a/app/src/main/res/drawable/bg_chip_success.xml b/app/src/main/res/drawable/bg_chip_success.xml
index bc0046d..16be6bc 100644
--- a/app/src/main/res/drawable/bg_chip_success.xml
+++ b/app/src/main/res/drawable/bg_chip_success.xml
@@ -16,3 +16,5 @@
+
+
diff --git a/app/src/main/res/drawable/bg_chip_warning.xml b/app/src/main/res/drawable/bg_chip_warning.xml
index 7e84c61..9a7129b 100644
--- a/app/src/main/res/drawable/bg_chip_warning.xml
+++ b/app/src/main/res/drawable/bg_chip_warning.xml
@@ -16,3 +16,5 @@
+
+
diff --git a/app/src/main/res/drawable/bg_filter_chip_active.xml b/app/src/main/res/drawable/bg_filter_chip_active.xml
index a68e464..e7b3962 100644
--- a/app/src/main/res/drawable/bg_filter_chip_active.xml
+++ b/app/src/main/res/drawable/bg_filter_chip_active.xml
@@ -16,3 +16,5 @@
+
+
diff --git a/app/src/main/res/drawable/bg_filter_chip_neutral.xml b/app/src/main/res/drawable/bg_filter_chip_neutral.xml
index bf3c86a..2a1f281 100644
--- a/app/src/main/res/drawable/bg_filter_chip_neutral.xml
+++ b/app/src/main/res/drawable/bg_filter_chip_neutral.xml
@@ -19,3 +19,5 @@
+
+
diff --git a/app/src/main/res/drawable/bg_header_top.xml b/app/src/main/res/drawable/bg_header_top.xml
index decc955..e262d01 100644
--- a/app/src/main/res/drawable/bg_header_top.xml
+++ b/app/src/main/res/drawable/bg_header_top.xml
@@ -16,3 +16,5 @@
+
+
diff --git a/app/src/main/res/drawable/bg_map_card.xml b/app/src/main/res/drawable/bg_map_card.xml
index 2aa5b73..2994ca0 100644
--- a/app/src/main/res/drawable/bg_map_card.xml
+++ b/app/src/main/res/drawable/bg_map_card.xml
@@ -23,3 +23,5 @@
+
+
diff --git a/app/src/main/res/drawable/bg_map_surface.xml b/app/src/main/res/drawable/bg_map_surface.xml
index 5be1d7b..f7e6a97 100644
--- a/app/src/main/res/drawable/bg_map_surface.xml
+++ b/app/src/main/res/drawable/bg_map_surface.xml
@@ -11,3 +11,5 @@
+
+
diff --git a/app/src/main/res/drawable/bg_marker_avatar.xml b/app/src/main/res/drawable/bg_marker_avatar.xml
index 26b6e6a..1e5c251 100644
--- a/app/src/main/res/drawable/bg_marker_avatar.xml
+++ b/app/src/main/res/drawable/bg_marker_avatar.xml
@@ -15,3 +15,5 @@
+
+
diff --git a/app/src/main/res/drawable/bg_marker_label.xml b/app/src/main/res/drawable/bg_marker_label.xml
index bd292d2..d21ca7b 100644
--- a/app/src/main/res/drawable/bg_marker_label.xml
+++ b/app/src/main/res/drawable/bg_marker_label.xml
@@ -19,3 +19,5 @@
+
+
diff --git a/app/src/main/res/drawable/bg_marker_user.xml b/app/src/main/res/drawable/bg_marker_user.xml
index 94b1ebc..dbb69a7 100644
--- a/app/src/main/res/drawable/bg_marker_user.xml
+++ b/app/src/main/res/drawable/bg_marker_user.xml
@@ -14,3 +14,5 @@
+
+
diff --git a/app/src/main/res/drawable/bg_safe_banner_icon.xml b/app/src/main/res/drawable/bg_safe_banner_icon.xml
index 6fe6fba..9895cea 100644
--- a/app/src/main/res/drawable/bg_safe_banner_icon.xml
+++ b/app/src/main/res/drawable/bg_safe_banner_icon.xml
@@ -11,3 +11,5 @@
+
+
diff --git a/app/src/main/res/drawable/bg_safe_zone_circle.xml b/app/src/main/res/drawable/bg_safe_zone_circle.xml
index df5c4b8..a6c9c7e 100644
--- a/app/src/main/res/drawable/bg_safe_zone_circle.xml
+++ b/app/src/main/res/drawable/bg_safe_zone_circle.xml
@@ -13,3 +13,5 @@
+
+
diff --git a/app/src/main/res/drawable/bg_status_online.xml b/app/src/main/res/drawable/bg_status_online.xml
index 55fb4ce..4ed4c3f 100644
--- a/app/src/main/res/drawable/bg_status_online.xml
+++ b/app/src/main/res/drawable/bg_status_online.xml
@@ -11,3 +11,5 @@
+
+
diff --git a/app/src/main/res/drawable/bg_zone_icon_primary.xml b/app/src/main/res/drawable/bg_zone_icon_primary.xml
index cb5def5..d2aaf93 100644
--- a/app/src/main/res/drawable/bg_zone_icon_primary.xml
+++ b/app/src/main/res/drawable/bg_zone_icon_primary.xml
@@ -11,3 +11,5 @@
+
+
diff --git a/app/src/main/res/drawable/bg_zone_icon_secondary.xml b/app/src/main/res/drawable/bg_zone_icon_secondary.xml
index 3ae184b..8dd6c2c 100644
--- a/app/src/main/res/drawable/bg_zone_icon_secondary.xml
+++ b/app/src/main/res/drawable/bg_zone_icon_secondary.xml
@@ -11,3 +11,5 @@
+
+
diff --git a/app/src/main/res/drawable/bg_zoom_button.xml b/app/src/main/res/drawable/bg_zoom_button.xml
index 1708b73..3d6b399 100644
--- a/app/src/main/res/drawable/bg_zoom_button.xml
+++ b/app/src/main/res/drawable/bg_zoom_button.xml
@@ -23,3 +23,5 @@
+
+
diff --git a/app/src/main/res/drawable/ic_alert_warning.xml b/app/src/main/res/drawable/ic_alert_warning.xml
index 5e9b322..44cb552 100644
--- a/app/src/main/res/drawable/ic_alert_warning.xml
+++ b/app/src/main/res/drawable/ic_alert_warning.xml
@@ -15,3 +15,5 @@
+
+
diff --git a/app/src/main/res/drawable/ic_battery.xml b/app/src/main/res/drawable/ic_battery.xml
index 31e931b..707195a 100644
--- a/app/src/main/res/drawable/ic_battery.xml
+++ b/app/src/main/res/drawable/ic_battery.xml
@@ -18,3 +18,5 @@
+
+
diff --git a/app/src/main/res/drawable/ic_chat_bubble.xml b/app/src/main/res/drawable/ic_chat_bubble.xml
index ee34d5b..052f483 100644
--- a/app/src/main/res/drawable/ic_chat_bubble.xml
+++ b/app/src/main/res/drawable/ic_chat_bubble.xml
@@ -15,3 +15,5 @@
+
+
diff --git a/app/src/main/res/drawable/ic_history.xml b/app/src/main/res/drawable/ic_history.xml
index a521585..8cd493c 100644
--- a/app/src/main/res/drawable/ic_history.xml
+++ b/app/src/main/res/drawable/ic_history.xml
@@ -16,3 +16,5 @@
+
+
diff --git a/app/src/main/res/drawable/ic_location_pin.xml b/app/src/main/res/drawable/ic_location_pin.xml
index 8c2f2df..eb2d302 100644
--- a/app/src/main/res/drawable/ic_location_pin.xml
+++ b/app/src/main/res/drawable/ic_location_pin.xml
@@ -16,3 +16,5 @@
+
+
diff --git a/app/src/main/res/drawable/ic_nav_alerts.xml b/app/src/main/res/drawable/ic_nav_alerts.xml
index 83a170f..8860a55 100644
--- a/app/src/main/res/drawable/ic_nav_alerts.xml
+++ b/app/src/main/res/drawable/ic_nav_alerts.xml
@@ -15,3 +15,5 @@
+
+
diff --git a/app/src/main/res/drawable/ic_nav_home.xml b/app/src/main/res/drawable/ic_nav_home.xml
index 6268111..1d74f48 100644
--- a/app/src/main/res/drawable/ic_nav_home.xml
+++ b/app/src/main/res/drawable/ic_nav_home.xml
@@ -16,3 +16,5 @@
+
+
diff --git a/app/src/main/res/drawable/ic_nav_zones.xml b/app/src/main/res/drawable/ic_nav_zones.xml
index 5dbc103..ba31300 100644
--- a/app/src/main/res/drawable/ic_nav_zones.xml
+++ b/app/src/main/res/drawable/ic_nav_zones.xml
@@ -16,3 +16,5 @@
+
+
diff --git a/app/src/main/res/drawable/ic_navigation_plane.xml b/app/src/main/res/drawable/ic_navigation_plane.xml
index 21c2cd9..6976b58 100644
--- a/app/src/main/res/drawable/ic_navigation_plane.xml
+++ b/app/src/main/res/drawable/ic_navigation_plane.xml
@@ -15,3 +15,5 @@
+
+
diff --git a/app/src/main/res/drawable/ic_profile.xml b/app/src/main/res/drawable/ic_profile.xml
index fb71116..95a3a45 100644
--- a/app/src/main/res/drawable/ic_profile.xml
+++ b/app/src/main/res/drawable/ic_profile.xml
@@ -16,3 +16,5 @@
+
+
diff --git a/app/src/main/res/drawable/ic_signal_gps.xml b/app/src/main/res/drawable/ic_signal_gps.xml
index 8774a84..c85271b 100644
--- a/app/src/main/res/drawable/ic_signal_gps.xml
+++ b/app/src/main/res/drawable/ic_signal_gps.xml
@@ -18,3 +18,5 @@
+
+
diff --git a/app/src/main/res/drawable/ic_zoom_minus.xml b/app/src/main/res/drawable/ic_zoom_minus.xml
index 89a5ade..e81a546 100644
--- a/app/src/main/res/drawable/ic_zoom_minus.xml
+++ b/app/src/main/res/drawable/ic_zoom_minus.xml
@@ -15,3 +15,5 @@
+
+
diff --git a/app/src/main/res/drawable/ic_zoom_plus.xml b/app/src/main/res/drawable/ic_zoom_plus.xml
index 51698d5..786e484 100644
--- a/app/src/main/res/drawable/ic_zoom_plus.xml
+++ b/app/src/main/res/drawable/ic_zoom_plus.xml
@@ -15,3 +15,5 @@
+
+
diff --git a/app/src/main/res/layout/fragment_history.xml b/app/src/main/res/layout/fragment_history.xml
index 397a8b5..3bf1fe5 100644
--- a/app/src/main/res/layout/fragment_history.xml
+++ b/app/src/main/res/layout/fragment_history.xml
@@ -1,19 +1,334 @@
-
-
-
+ android:orientation="vertical"
+ android:paddingBottom="24dp">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/fragment_map.xml b/app/src/main/res/layout/fragment_map.xml
index 5db3370..269fa45 100644
--- a/app/src/main/res/layout/fragment_map.xml
+++ b/app/src/main/res/layout/fragment_map.xml
@@ -245,14 +245,11 @@
android:clipToPadding="false"
android:padding="24dp">
-
-
-
-
+ android:orientation="vertical"
+ android:paddingBottom="24dp">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/fragment_zones.xml b/app/src/main/res/layout/fragment_zones.xml
index 4d0e193..9d9c464 100644
--- a/app/src/main/res/layout/fragment_zones.xml
+++ b/app/src/main/res/layout/fragment_zones.xml
@@ -82,7 +82,7 @@
android:layout_marginEnd="24dp"
android:backgroundTint="#1F6AEF"
app:cornerRadius="16dp"
- app:icon="@android:drawable/ic_input_add"
+ app:icon="@drawable/ic_add"
app:iconTint="#FFFFFF"
android:text="@string/zones_add_button"
android:textAllCaps="false"
@@ -114,8 +114,8 @@
android:padding="20dp">
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index b21948b..45b85a0 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -26,9 +26,9 @@
2 zonas monitorizadas
Todas as entradas e saídas são notificadas em tempo real.
Adicionar nova zona
- Escola Secundária
- Chegada prevista 08:45
- Ativa
+ Escola Profissional de Vila do Conde
+ Av. Júlio Graça, Vila do Conde
+ Seguro
Entrada confirmada
Atualizado há 2 min
Casa