cursor fez maior parte dos designs

main
230408 2025-11-25 17:07:52 +00:00
parent ee532f47cb
commit cd4ff307b7
65 changed files with 1639 additions and 292 deletions

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>

View File

@ -23,14 +23,11 @@ public class MainActivity extends AppCompatActivity {
binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
BottomNavigationView navView = findViewById(R.id.nav_view);
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
BottomNavigationView navView = binding.navView;
AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(
R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications)
R.id.navigation_map, R.id.navigation_zones, R.id.navigation_alerts)
.build();
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_activity_main);
NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
NavigationUI.setupWithNavController(binding.navView, navController);
}

View File

@ -0,0 +1,29 @@
package com.example.pap_findu.ui.alerts;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import com.example.pap_findu.databinding.FragmentAlertsBinding;
public class AlertsFragment extends Fragment {
private FragmentAlertsBinding binding;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
binding = FragmentAlertsBinding.inflate(inflater, container, false);
return binding.getRoot();
}
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
}

View File

@ -1,37 +0,0 @@
package com.example.pap_findu.ui.dashboard;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import com.example.pap_findu.databinding.FragmentDashboardBinding;
public class DashboardFragment extends Fragment {
private FragmentDashboardBinding binding;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
DashboardViewModel dashboardViewModel =
new ViewModelProvider(this).get(DashboardViewModel.class);
binding = FragmentDashboardBinding.inflate(inflater, container, false);
View root = binding.getRoot();
final TextView textView = binding.textDashboard;
dashboardViewModel.getText().observe(getViewLifecycleOwner(), textView::setText);
return root;
}
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
}

View File

@ -1,19 +0,0 @@
package com.example.pap_findu.ui.dashboard;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
public class DashboardViewModel extends ViewModel {
private final MutableLiveData<String> mText;
public DashboardViewModel() {
mText = new MutableLiveData<>();
mText.setValue("This is dashboard fragment");
}
public LiveData<String> getText() {
return mText;
}
}

View File

@ -1,37 +0,0 @@
package com.example.pap_findu.ui.home;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import com.example.pap_findu.databinding.FragmentHomeBinding;
public class HomeFragment extends Fragment {
private FragmentHomeBinding binding;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
HomeViewModel homeViewModel =
new ViewModelProvider(this).get(HomeViewModel.class);
binding = FragmentHomeBinding.inflate(inflater, container, false);
View root = binding.getRoot();
final TextView textView = binding.textHome;
homeViewModel.getText().observe(getViewLifecycleOwner(), textView::setText);
return root;
}
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
}

View File

@ -1,19 +0,0 @@
package com.example.pap_findu.ui.home;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
public class HomeViewModel extends ViewModel {
private final MutableLiveData<String> mText;
public HomeViewModel() {
mText = new MutableLiveData<>();
mText.setValue("This is home fragment");
}
public LiveData<String> getText() {
return mText;
}
}

View File

@ -0,0 +1,29 @@
package com.example.pap_findu.ui.map;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import com.example.pap_findu.databinding.FragmentMapBinding;
public class MapFragment extends Fragment {
private FragmentMapBinding binding;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
binding = FragmentMapBinding.inflate(inflater, container, false);
return binding.getRoot();
}
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
}

View File

@ -1,37 +0,0 @@
package com.example.pap_findu.ui.notifications;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import com.example.pap_findu.databinding.FragmentNotificationsBinding;
public class NotificationsFragment extends Fragment {
private FragmentNotificationsBinding binding;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
NotificationsViewModel notificationsViewModel =
new ViewModelProvider(this).get(NotificationsViewModel.class);
binding = FragmentNotificationsBinding.inflate(inflater, container, false);
View root = binding.getRoot();
final TextView textView = binding.textNotifications;
notificationsViewModel.getText().observe(getViewLifecycleOwner(), textView::setText);
return root;
}
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
}

View File

@ -1,19 +0,0 @@
package com.example.pap_findu.ui.notifications;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
public class NotificationsViewModel extends ViewModel {
private final MutableLiveData<String> mText;
public NotificationsViewModel() {
mText = new MutableLiveData<>();
mText.setValue("This is notifications fragment");
}
public LiveData<String> getText() {
return mText;
}
}

View File

@ -0,0 +1,29 @@
package com.example.pap_findu.ui.zones;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import com.example.pap_findu.databinding.FragmentZonesBinding;
public class ZonesFragment extends Fragment {
private FragmentZonesBinding binding;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
binding = FragmentZonesBinding.inflate(inflater, container, false);
return binding.getRoot();
}
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
}

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="#1C6CFF" android:state_checked="true" />
<item android:color="#B0B7C3" />
</selector>

View File

@ -0,0 +1,11 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="#7D9CA8"
android:alpha="0.8">
<path
android:fillColor="@android:color/white"
android:pathData="M12,2C8.13,2 5,5.13 5,9c0,5.25 7,13 7,13s7,-7.75 7,-13c0,-3.87 -3.13,-7 -7,-7zM12,11.5c-1.38,0 -2.5,-1.12 -2.5,-2.5s1.12,-2.5 2.5,-2.5 2.5,1.12 2.5,2.5 -1.12,2.5 -2.5,2.5z"/>
</vector>

Binary file not shown.

After

Width:  |  Height:  |  Size: 614 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 397 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 761 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<size android:width="56dp" android:height="56dp" />
<solid android:color="#E0F2FF" />
</shape>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<size android:width="56dp" android:height="56dp" />
<solid android:color="#FFE8E8" />
</shape>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="#E8EEFF" />
</shape>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="#FF2F46" />
</shape>

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#FFFFFFFF" />
<corners
android:topLeftRadius="28dp"
android:topRightRadius="28dp" />
<padding
android:left="8dp"
android:top="4dp"
android:right="8dp"
android:bottom="8dp" />
<stroke
android:width="1dp"
android:color="#E6EAF2" />
</shape>

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#EEF2F7" />
<corners android:radius="14dp" />
<padding
android:left="10dp"
android:top="5dp"
android:right="10dp"
android:bottom="5dp" />
</shape>

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#E5F7ED" />
<corners android:radius="16dp" />
<padding
android:left="12dp"
android:top="6dp"
android:right="12dp"
android:bottom="6dp" />
</shape>

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#FFF4E5" />
<corners android:radius="16dp" />
<padding
android:left="12dp"
android:top="6dp"
android:right="12dp"
android:bottom="6dp" />
</shape>

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#E7EEFF" />
<corners android:radius="18dp" />
<padding
android:left="18dp"
android:top="8dp"
android:right="18dp"
android:bottom="8dp" />
</shape>

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#FFFFFFFF" />
<corners android:radius="18dp" />
<stroke
android:width="1dp"
android:color="#E3E6EF" />
<padding
android:left="18dp"
android:top="8dp"
android:right="18dp"
android:bottom="8dp" />
</shape>

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:startColor="#1B6DE8"
android:endColor="#2C85FF"
android:angle="90" />
<corners
android:bottomLeftRadius="32dp"
android:bottomRightRadius="32dp" />
</shape>

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="#FFFFFFFF" />
<corners android:radius="36dp" />
<stroke
android:width="1dp"
android:color="#E1E8F4" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="#F5FAFF" />
<corners android:radius="36dp" />
</shape>
</item>
</layer-list>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#F9FBFE" />
<corners android:radius="32dp" />
</shape>

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<size android:width="48dp" android:height="48dp" />
<solid android:color="#FFFFFFFF" />
<stroke
android:width="1dp"
android:color="#E0E7F1" />
<padding android:all="8dp" />
</shape>

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#FFFFFFFF" />
<corners android:radius="24dp" />
<stroke
android:width="1dp"
android:color="#DDE6EE" />
<padding
android:left="16dp"
android:top="6dp"
android:right="16dp"
android:bottom="6dp" />
</shape>

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<size android:width="24dp" android:height="24dp" />
<solid android:color="#1C68FF" />
<stroke
android:width="2dp"
android:color="#FFFFFFFF" />
</shape>

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#E8F8ED" />
<corners android:radius="18dp" />
<stroke
android:width="1dp"
android:color="#B8E2C8" />
<padding
android:left="16dp"
android:top="16dp"
android:right="16dp"
android:bottom="16dp" />
</shape>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<size android:width="36dp" android:height="36dp" />
<solid android:color="#E5F7ED" />
</shape>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="#5533CE7A" />
<stroke
android:width="2dp"
android:color="#AA6FDB92" />
</shape>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<size android:width="10dp" android:height="10dp" />
<solid android:color="#1AD873" />
</shape>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<size android:width="56dp" android:height="56dp" />
<solid android:color="#E4ECFF" />
</shape>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<size android:width="56dp" android:height="56dp" />
<solid android:color="#FFEFE3" />
</shape>

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape android:shape="rectangle">
<solid android:color="#E5EAF2" />
<corners android:radius="16dp" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="#FFFFFFFF" />
<corners android:radius="16dp" />
<stroke
android:width="1dp"
android:color="#E0E7F1" />
</shape>
</item>
</selector>

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#F97316"
android:pathData="M1,21h22L12,2 1,21zM13,18h-2v-2h2v2zm0,-4h-2v-4h2v4z" />
</vector>

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="20dp"
android:height="20dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#1FB66F"
android:pathData="M16,4h-1V2H9v2H8a2,2 0 0,0 -2,2v12a2,2 0 0,0 2,2h8a2,2 0 0,0 2,-2V6a2,2 0 0,0 -2,-2Zm0,14H8V6h8Z" />
<path
android:fillColor="#1FB66F"
android:pathData="M10,11h4v4h-4z" />
</vector>

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M20,2H4C2.9,2 2,2.9 2,4v18l4,-4h14c1.1,0 2,-0.9 2,-2V4C22,2.9 21.1,2 20,2z"/>
</vector>

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#000000"
android:pathData="M12,4a8,8 0 1,1 -8,8H2a10,10 0 1,0 3,-7.32V4H3v5h5V7H5.26A8,8 0 0,1 12,4Zm-1,3v6h5v-2h-3V7h-2Z"
android:fillType="evenOdd" />
</vector>

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="20dp"
android:height="20dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#1FB66F"
android:pathData="M12,2a7,7 0 0,1 7,7c0,5 -7,13 -7,13S5,14 5,9a7,7 0 0,1 7,-7Zm0,9.5a2.5,2.5 0 1,0 0,-5 2.5,2.5 0 0,0 0,5Z"
android:fillType="evenOdd" />
</vector>

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#000000"
android:pathData="M12,22a2,2 0 0,0 2,-2h-4a2,2 0 0,0 2,2zm6,-6v-5a6,6 0 0,0 -5,-5.91V4a1,1 0 1,0 -2,0v1.09A6,6 0 0,0 6,11v5l-2,2v1h16v-1z" />
</vector>

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#000000"
android:pathData="M3,10.25L12,3l9,7.25V20a1,1 0 0,1 -1,1h-5v-5h-6v5H4a1,1 0 0,1 -1,-1z"
android:fillType="evenOdd" />
</vector>

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#000000"
android:pathData="M12,2a7,7 0 0,1 7,7c0,5 -7,13 -7,13S5,14 5,9a7,7 0 0,1 7,-7zm0,9.5a2.5,2.5 0 1,0 0,-5 2.5,2.5 0 0,0 0,5z"
android:fillType="evenOdd" />
</vector>

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M2.01,21L23,12 2.01,3 2,10l15,2 -15,2z" />
</vector>

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#000000"
android:pathData="M12,12a4,4 0 1,0 0,-8 4,4 0 0,0 0,8Zm0,2c-3.33,0 -8,1.67 -8,5v2h16v-2c0,-3.33 -4.67,-5 -8,-5Z"
android:fillType="evenOdd" />
</vector>

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="20dp"
android:height="20dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#2F6BFF"
android:pathData="M12,8a4,4 0 1,0 0,8 4,4 0 0,0 0,-8Zm0,6a2,2 0 1,1 0,-4 2,2 0 0,1 0,4Z" />
<path
android:fillColor="#2F6BFF"
android:pathData="M12,4a8,8 0 0,0 -7.75,6H2v4h2.25A8,8 0 1,0 12,4Zm0,14a6,6 0 0,1 -5.65,-4h11.3A6,6 0 0,1 12,18Z" />
</vector>

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="20dp"
android:height="20dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#1F2A37"
android:pathData="M5,11h14v2H5z" />
</vector>

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="20dp"
android:height="20dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#1F2A37"
android:pathData="M11,5h2v6h6v2h-6v6h-2v-6H5v-2h6Z" />
</vector>

View File

@ -1,33 +1,41 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/container"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="?attr/actionBarSize">
android:background="#F3F6FB"
tools:context=".MainActivity">
<androidx.fragment.app.FragmentContainerView
android:id="@+id/nav_host_fragment_activity_main"
android:layout_width="0dp"
android:layout_height="0dp"
app:defaultNavHost="true"
app:layout_constraintBottom_toTopOf="@+id/nav_view"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:navGraph="@navigation/mobile_navigation" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/nav_view"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
android:background="?android:attr/windowBackground"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp"
android:background="@drawable/bg_bottom_nav"
android:paddingTop="6dp"
android:paddingBottom="10dp"
app:itemIconSize="24dp"
app:itemIconTint="@color/bottom_nav_selector"
app:itemTextColor="@color/bottom_nav_selector"
app:labelVisibilityMode="labeled"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:menu="@menu/bottom_nav_menu" />
<fragment
android:id="@+id/nav_host_fragment_activity_main"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:layout_constraintBottom_toTopOf="@id/nav_view"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:navGraph="@navigation/mobile_navigation" />
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:menu="@menu/bottom_tabs" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,322 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#F6F7FB"
android:paddingBottom="96dp"
tools:context=".ui.alerts.AlertsFragment">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingBottom="24dp">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="190dp">
<View
android:layout_width="match_parent"
android:layout_height="190dp"
android:background="@drawable/bg_header_top" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/alerts_header_title"
android:textColor="#FFFFFF"
android:textSize="26sp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:text="@string/alerts_header_subtitle"
android:textColor="#E1EAFF"
android:textSize="14sp" />
</LinearLayout>
</FrameLayout>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="-50dp"
android:layout_marginEnd="20dp"
app:cardCornerRadius="20dp"
app:cardElevation="4dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="18dp">
<ImageView
android:layout_width="48dp"
android:layout_height="48dp"
android:src="@drawable/ic_alert_warning" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="14dp"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/alerts_summary_title"
android:textColor="#111827"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:text="@string/alerts_summary_desc"
android:textColor="#6B7280" />
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
<LinearLayout
android:id="@+id/filterRow"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:gravity="center_horizontal"
android:orientation="horizontal"
android:paddingStart="20dp"
android:paddingEnd="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_filter_chip_active"
android:text="@string/alerts_filter_all"
android:textColor="#1C6CFF"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:background="@drawable/bg_filter_chip_neutral"
android:text="@string/alerts_filter_pending"
android:textColor="#64748B"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:background="@drawable/bg_filter_chip_neutral"
android:text="@string/alerts_filter_resolved"
android:textColor="#64748B"
android:textStyle="bold" />
</LinearLayout>
<LinearLayout
android:id="@+id/alertsList"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:orientation="vertical"
android:paddingStart="20dp"
android:paddingEnd="20dp">
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
app:cardBackgroundColor="#FFFFFF"
app:cardCornerRadius="22dp"
app:strokeColor="#E1E5EF"
app:strokeWidth="1dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="20dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<FrameLayout
android:layout_width="56dp"
android:layout_height="56dp"
android:background="@drawable/bg_alert_icon_warning">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="14dp"
android:src="@drawable/ic_alert_warning" />
</FrameLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/alerts_school_title"
android:textColor="#111827"
android:textSize="17sp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:text="@string/alerts_school_desc"
android:textColor="#6B7280" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_chip_warning"
android:text="@string/alerts_status_attention"
android:textColor="#B45309"
android:textStyle="bold" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="14dp"
android:gravity="space_between"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/alerts_school_time"
android:textColor="#0F172A"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/alerts_school_action"
android:textColor="#1C6CFF"
android:textStyle="bold" />
</LinearLayout>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
app:cardBackgroundColor="#FFFFFF"
app:cardCornerRadius="22dp"
app:strokeColor="#E1E5EF"
app:strokeWidth="1dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="20dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<FrameLayout
android:layout_width="56dp"
android:layout_height="56dp"
android:background="@drawable/bg_alert_icon_info">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="14dp"
android:src="@android:drawable/ic_dialog_info"
android:tint="#1F6AEF" />
</FrameLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/alerts_geofence_title"
android:textColor="#111827"
android:textSize="17sp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:text="@string/alerts_geofence_desc"
android:textColor="#6B7280" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_chip_success"
android:text="@string/alerts_status_resolved"
android:textColor="#0F7A45"
android:textStyle="bold" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="14dp"
android:gravity="space_between"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/alerts_geofence_time"
android:textColor="#0F172A"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/alerts_geofence_action"
android:textColor="#9CA3AF" />
</LinearLayout>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
</LinearLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>

View File

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.dashboard.DashboardFragment">
<TextView
android:id="@+id/text_dashboard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:textAlignment="center"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.home.HomeFragment">
<TextView
android:id="@+id/text_home"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:textAlignment="center"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,449 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#F3F6FB"
android:paddingBottom="90dp"
tools:context=".ui.map.MapFragment">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingBottom="24dp">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="210dp">
<View
android:layout_width="match_parent"
android:layout_height="210dp"
android:background="@drawable/bg_header_top" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/headerTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-medium"
android:text="@string/header_title"
android:textColor="#FFFFFF"
android:textSize="28sp"
android:textStyle="bold" />
<TextView
android:id="@+id/headerSubtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:text="@string/header_subtitle"
android:textColor="#E1EAFF"
android:textSize="14sp" />
</LinearLayout>
</FrameLayout>
<androidx.cardview.widget.CardView
android:id="@+id/userStatusCard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
android:layout_marginTop="-60dp"
android:elevation="6dp"
android:translationZ="6dp"
app:cardCornerRadius="22dp"
app:cardUseCompatPadding="false">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="20dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<FrameLayout
android:layout_width="60dp"
android:layout_height="60dp"
android:background="@drawable/bg_avatar_placeholder"
android:padding="6dp">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="@string/status_avatar_emoji"
android:textSize="26sp" />
</FrameLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/status_name"
android:textColor="#111827"
android:textSize="18sp"
android:textStyle="bold" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<View
android:layout_width="10dp"
android:layout_height="10dp"
android:background="@drawable/bg_status_online" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
android:text="@string/status_online"
android:textColor="#1FB66F"
android:textSize="14sp"
android:textStyle="bold" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="end"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:src="@drawable/ic_battery" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:text="@string/battery_percent"
android:textColor="#111827"
android:textStyle="bold" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:src="@drawable/ic_signal_gps" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:text="@string/gps_label"
android:textColor="#111827"
android:textStyle="bold" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:background="@drawable/bg_safe_banner"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="16dp">
<FrameLayout
android:layout_width="40dp"
android:layout_height="40dp"
android:background="@drawable/bg_safe_banner_icon">
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_gravity="center"
android:src="@drawable/ic_location_pin" />
</FrameLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/status_safe_zone_line1"
android:textColor="#0B6635"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:text="@string/status_safe_zone_line2"
android:textColor="#0B6635" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:id="@+id/mapContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="12dp"
android:layout_marginEnd="20dp"
app:cardCornerRadius="36dp"
app:cardElevation="4dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="380dp"
android:background="@drawable/bg_map_card"
android:clipToPadding="false"
android:padding="24dp">
<ImageView
android:id="@+id/mapTexture"
android:layout_width="0dp"
android:layout_height="0dp"
android:alpha="0.35"
android:contentDescription="@string/header_title"
android:scaleType="centerCrop"
android:src="@drawable/zonas"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<View
android:id="@+id/safeZone"
android:layout_width="280dp"
android:layout_height="280dp"
android:background="@drawable/bg_safe_zone_circle"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:id="@+id/userMarker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<View
android:layout_width="24dp"
android:layout_height="24dp"
android:background="@drawable/bg_marker_user" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:text="@string/map_marker_miguel"
android:textColor="#111827"
android:textStyle="bold" />
</LinearLayout>
<LinearLayout
android:id="@+id/homeMarker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginBottom="48dp"
android:gravity="center_vertical"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent">
<FrameLayout
android:layout_width="48dp"
android:layout_height="48dp"
android:background="@drawable/bg_marker_avatar">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="🏠"
android:textSize="18sp" />
</FrameLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:background="@drawable/bg_marker_label"
android:text="@string/map_marker_home"
android:textColor="#111827"
android:textStyle="bold" />
</LinearLayout>
<LinearLayout
android:id="@+id/schoolMarker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginTop="24dp"
android:gravity="center_vertical"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="@+id/safeZone"
app:layout_constraintTop_toTopOf="@+id/safeZone">
<FrameLayout
android:layout_width="48dp"
android:layout_height="48dp"
android:background="@drawable/bg_marker_avatar">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="🏫"
android:textSize="18sp" />
</FrameLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:background="@drawable/bg_marker_label"
android:text="@string/map_marker_school"
android:textColor="#111827"
android:textStyle="bold" />
</LinearLayout>
<LinearLayout
android:id="@+id/zoomControls"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageButton
android:id="@+id/zoomInButton"
android:layout_width="52dp"
android:layout_height="52dp"
android:background="@drawable/bg_zoom_button"
android:contentDescription="@string/zoom_in"
android:src="@drawable/ic_zoom_plus" />
<ImageButton
android:id="@+id/zoomOutButton"
android:layout_width="52dp"
android:layout_height="52dp"
android:layout_marginTop="10dp"
android:background="@drawable/bg_zoom_button"
android:contentDescription="@string/zoom_out"
android:src="@drawable/ic_zoom_minus" />
</LinearLayout>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/navigationFab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginBottom="12dp"
android:contentDescription="@string/navigate"
app:backgroundTint="#1F6AEF"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:srcCompat="@drawable/ic_navigation_plane" />
<FrameLayout
android:id="@+id/messagesFabContainer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="12dp"
android:layout_marginBottom="12dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent">
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/messagesFab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/messages"
app:backgroundTint="#1DB45A"
app:srcCompat="@drawable/ic_chat_bubble" />
<TextView
android:id="@+id/messagesBadge"
android:layout_width="22dp"
android:layout_height="22dp"
android:layout_gravity="top|end"
android:background="@drawable/bg_badge"
android:gravity="center"
android:text="@string/messages_badge"
android:textColor="#FFFFFF"
android:textSize="12sp"
android:textStyle="bold" />
</FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
<com.google.android.material.button.MaterialButton
android:id="@+id/sosButton"
style="@style/Widget.MaterialComponents.Button"
android:layout_width="match_parent"
android:layout_height="64dp"
android:layout_marginStart="24dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="24dp"
android:backgroundTint="#E53935"
android:cornerRadius="18dp"
android:drawablePadding="12dp"
android:drawableEnd="@android:drawable/ic_menu_call"
android:icon="@android:drawable/ic_dialog_alert"
android:iconPadding="12dp"
android:iconTint="#FFFFFF"
android:text="@string/sos_button_text"
android:textAllCaps="true"
android:textColor="#FFFFFF"
android:textStyle="bold"
app:iconGravity="textStart" />
</LinearLayout>
</androidx.core.widget.NestedScrollView>

View File

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.notifications.NotificationsFragment">
<TextView
android:id="@+id/text_notifications"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:textAlignment="center"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,283 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#F5F7FB"
android:paddingBottom="96dp"
tools:context=".ui.zones.ZonesFragment">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingBottom="24dp">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="190dp">
<View
android:layout_width="match_parent"
android:layout_height="190dp"
android:background="@drawable/bg_header_top" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/zones_header_title"
android:textColor="#FFFFFF"
android:textSize="26sp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:text="@string/zones_header_subtitle"
android:textColor="#E1EAFF"
android:textSize="14sp" />
</LinearLayout>
</FrameLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="-40dp"
android:layout_marginEnd="24dp"
android:background="@drawable/bg_safe_banner"
android:orientation="vertical"
android:padding="18dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/zones_summary_title"
android:textColor="#0B6635"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:text="@string/zones_summary_desc"
android:textColor="#0B6635" />
</LinearLayout>
<com.google.android.material.button.MaterialButton
android:id="@+id/addZoneButton"
style="@style/Widget.MaterialComponents.Button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="24dp"
android:backgroundTint="#1F6AEF"
android:cornerRadius="16dp"
android:icon="@android:drawable/ic_input_add"
android:iconTint="#FFFFFF"
android:text="@string/zones_add_button"
android:textAllCaps="false"
android:textColor="#FFFFFF"
android:textStyle="bold" />
<LinearLayout
android:id="@+id/zoneList"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:orientation="vertical"
android:paddingStart="20dp"
android:paddingEnd="20dp">
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
app:cardBackgroundColor="#FFFFFF"
app:cardCornerRadius="24dp"
app:strokeColor="#E1E5EF"
app:strokeWidth="1dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="20dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<FrameLayout
android:layout_width="56dp"
android:layout_height="56dp"
android:background="@drawable/bg_zone_icon_primary">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="🏫"
android:textSize="24sp" />
</FrameLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/zones_school_name"
android:textColor="#0F172A"
android:textSize="18sp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:text="@string/zones_school_desc"
android:textColor="#6B7280" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_chip_success"
android:text="@string/zones_status_safe"
android:textColor="#0F7A45"
android:textStyle="bold" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="14dp"
android:gravity="space_between"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_chip_muted"
android:text="@string/zones_chip_entry"
android:textColor="#4B5563" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/zones_last_update"
android:textColor="#9CA3AF" />
</LinearLayout>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
app:cardBackgroundColor="#FFFFFF"
app:cardCornerRadius="24dp"
app:strokeColor="#E1E5EF"
app:strokeWidth="1dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="20dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<FrameLayout
android:layout_width="56dp"
android:layout_height="56dp"
android:background="@drawable/bg_zone_icon_secondary">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="🏠"
android:textSize="24sp" />
</FrameLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/zones_home_name"
android:textColor="#0F172A"
android:textSize="18sp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:text="@string/zones_home_desc"
android:textColor="#6B7280" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_chip_warning"
android:text="@string/zones_status_attention"
android:textColor="#B45309"
android:textStyle="bold" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="14dp"
android:gravity="space_between"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_chip_muted"
android:text="@string/zones_chip_exit"
android:textColor="#4B5563" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/zones_home_update"
android:textColor="#F97316"
android:textStyle="bold" />
</LinearLayout>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
</LinearLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>

View File

@ -1,19 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/navigation_home"
android:icon="@drawable/ic_home_black_24dp"
android:title="@string/title_home" />
<item
android:id="@+id/navigation_dashboard"
android:icon="@drawable/ic_dashboard_black_24dp"
android:title="@string/title_dashboard" />
<item
android:id="@+id/navigation_notifications"
android:icon="@drawable/ic_notifications_black_24dp"
android:title="@string/title_notifications" />
</menu>

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/navigation_map"
android:icon="@drawable/ic_nav_home"
android:title="Mapa" />
<item
android:id="@+id/navigation_zones"
android:icon="@drawable/ic_nav_zones"
android:title="Zonas" />
<item
android:id="@+id/navigation_alerts"
android:icon="@drawable/ic_nav_alerts"
android:title="Alertas" />
</menu>

View File

@ -3,23 +3,24 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/mobile_navigation"
app:startDestination="@+id/navigation_home">
app:startDestination="@id/navigation_map">
<fragment
android:id="@+id/navigation_home"
android:name="com.example.pap_findu.ui.home.HomeFragment"
android:label="@string/title_home"
tools:layout="@layout/fragment_home" />
android:id="@+id/navigation_map"
android:name="com.example.pap_findu.ui.map.MapFragment"
android:label="Mapa"
tools:layout="@layout/fragment_map" />
<fragment
android:id="@+id/navigation_dashboard"
android:name="com.example.pap_findu.ui.dashboard.DashboardFragment"
android:label="@string/title_dashboard"
tools:layout="@layout/fragment_dashboard" />
android:id="@+id/navigation_zones"
android:name="com.example.pap_findu.ui.zones.ZonesFragment"
android:label="Zonas"
tools:layout="@layout/fragment_zones" />
<fragment
android:id="@+id/navigation_notifications"
android:name="com.example.pap_findu.ui.notifications.NotificationsFragment"
android:label="@string/title_notifications"
tools:layout="@layout/fragment_notifications" />
android:id="@+id/navigation_alerts"
android:name="com.example.pap_findu.ui.alerts.AlertsFragment"
android:label="Alertas"
tools:layout="@layout/fragment_alerts" />
</navigation>

View File

@ -3,4 +3,54 @@
<string name="title_home">Home</string>
<string name="title_dashboard">Dashboard</string>
<string name="title_notifications">Notifications</string>
<string name="header_title">FindU</string>
<string name="header_subtitle">Segurança em Tempo Real</string>
<string name="status_name">Miguel Santos</string>
<string name="status_online">Online</string>
<string name="status_avatar_emoji">🧒</string>
<string name="battery_percent">85%</string>
<string name="gps_label">GPS</string>
<string name="status_safe_zone_line1">Dentro de Zona Segura</string>
<string name="status_safe_zone_line2">Escola Secundária - Chegada às 08:45</string>
<string name="map_marker_miguel">Miguel</string>
<string name="map_marker_home">Casa</string>
<string name="map_marker_school">Escola</string>
<string name="zoom_in">Aproximar</string>
<string name="zoom_out">Afastar</string>
<string name="navigate">Navegar</string>
<string name="messages">Mensagens</string>
<string name="messages_badge">3</string>
<string name="sos_button_text">BOTÃO SOS DE EMERGÊNCIA</string>
<string name="zones_header_title">Zonas Seguras</string>
<string name="zones_header_subtitle">Gerencie os locais protegidos do Miguel</string>
<string name="zones_summary_title">2 zonas monitorizadas</string>
<string name="zones_summary_desc">Todas as entradas e saídas são notificadas em tempo real.</string>
<string name="zones_add_button">Adicionar nova zona</string>
<string name="zones_school_name">Escola Secundária</string>
<string name="zones_school_desc">Chegada prevista 08:45</string>
<string name="zones_status_safe">Ativa</string>
<string name="zones_chip_entry">Entrada confirmada</string>
<string name="zones_last_update">Atualizado há 2 min</string>
<string name="zones_home_name">Casa</string>
<string name="zones_home_desc">Saída habitual 13:30</string>
<string name="zones_status_attention">Atenção</string>
<string name="zones_chip_exit">Saída inesperada</string>
<string name="zones_home_update">Há 5 min</string>
<string name="alerts_header_title">Alertas em Tempo Real</string>
<string name="alerts_header_subtitle">Veja rapidamente eventos críticos e resolvidos</string>
<string name="alerts_summary_title">2 alertas aguardando revisão</string>
<string name="alerts_summary_desc">Último evento há 5 minutos</string>
<string name="alerts_filter_all">Todos</string>
<string name="alerts_filter_pending">Pendentes</string>
<string name="alerts_filter_resolved">Resolvidos</string>
<string name="alerts_school_title">Saída antecipada da Escola</string>
<string name="alerts_school_desc">Miguel saiu da zona antes do previsto.</string>
<string name="alerts_status_attention">Urgente</string>
<string name="alerts_school_time">12:35</string>
<string name="alerts_school_action">Contactar</string>
<string name="alerts_geofence_title">Entrada confirmada na Casa</string>
<string name="alerts_geofence_desc">Miguel chegou dentro do horário configurado.</string>
<string name="alerts_status_resolved">Resolvido</string>
<string name="alerts_geofence_time">13:32</string>
<string name="alerts_geofence_action">Registado automaticamente</string>
</resources>