ja da login cria conta e vai para o menu principal.

This commit is contained in:
2026-01-13 09:54:02 +00:00
parent 472180e9a7
commit 22dcb619da
47 changed files with 776 additions and 39 deletions

View File

@@ -7,6 +7,14 @@
</SelectionState> </SelectionState>
<SelectionState runConfigName="login_activity"> <SelectionState runConfigName="login_activity">
<option name="selectionMode" value="DROPDOWN" /> <option name="selectionMode" value="DROPDOWN" />
<DropdownSelection timestamp="2026-01-07T08:41:59.573594Z">
<Target type="DEFAULT_BOOT">
<handle>
<DeviceId pluginId="LocalEmulator" identifier="path=/Users/230408/.android/avd/Medium_Phone.avd" />
</handle>
</Target>
</DropdownSelection>
<DialogSelection />
</SelectionState> </SelectionState>
</selectionStates> </selectionStates>
</component> </component>

View File

@@ -50,6 +50,8 @@ dependencies {
implementation(libs.credentials) implementation(libs.credentials)
implementation(libs.credentials.play.services.auth) implementation(libs.credentials.play.services.auth)
implementation(libs.googleid) 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) testImplementation(libs.junit)
androidTestImplementation(libs.ext.junit) androidTestImplementation(libs.ext.junit)
androidTestImplementation(libs.espresso.core) androidTestImplementation(libs.espresso.core)

View File

@@ -2,6 +2,10 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"> xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<application <application
android:allowBackup="true" android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules" android:dataExtractionRules="@xml/data_extraction_rules"
@@ -11,12 +15,19 @@
android:roundIcon="@mipmap/ic_launcher_round" android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/Theme.PAP_FindU"> android:theme="@style/Theme.PAP_FindU">
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="YOUR_API_KEY_HERE" />
<activity <activity
android:name=".CriarConta" android:name=".CriarConta"
android:exported="false" /> android:exported="false" />
<activity <activity
android:name=".Recuperar_Passe" android:name=".Recuperar_Passe"
android:exported="false" /> android:exported="false" />
<activity
android:name=".ChatActivity"
android:exported="false" />
<activity <activity
android:name=".login_activity" android:name=".login_activity"
android:exported="true"> android:exported="true">
@@ -26,6 +37,9 @@
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity> </activity>
<activity
android:name=".AddZoneActivity"
android:exported="false" />
<activity <activity
android:name=".MainActivity" android:name=".MainActivity"
android:exported="true" android:exported="true"

View File

@@ -8,17 +8,63 @@ import android.view.ViewGroup;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import com.example.pap_findu.R;
import com.example.pap_findu.databinding.FragmentMapBinding; import com.example.pap_findu.databinding.FragmentMapBinding;
public class MapFragment extends Fragment { public class MapFragment extends Fragment {
private FragmentMapBinding binding; private FragmentMapBinding binding;
private com.google.android.gms.maps.GoogleMap mMap;
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {
binding = FragmentMapBinding.inflate(inflater, container, false); binding = FragmentMapBinding.inflate(inflater, container, false);
View root = binding.getRoot(); View root = binding.getRoot();
// Initialize Map
com.google.android.gms.maps.SupportMapFragment mapFragment = (com.google.android.gms.maps.SupportMapFragment) getChildFragmentManager()
.findFragmentById(R.id.map);
if (mapFragment != null) {
mapFragment.getMapAsync(googleMap -> {
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 // Implement SOS Button logic
binding.sosButton.setOnClickListener(v -> { binding.sosButton.setOnClickListener(v -> {
android.content.Intent intent = new android.content.Intent(android.content.Intent.ACTION_DIAL); 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 -> { 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; return root;

View File

@@ -20,6 +20,19 @@ public class ProfileFragment extends Fragment {
ViewGroup container, Bundle savedInstanceState) { ViewGroup container, Bundle savedInstanceState) {
binding = FragmentProfileBinding.inflate(inflater, container, false); binding = FragmentProfileBinding.inflate(inflater, container, false);
View root = binding.getRoot(); 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; return root;
} }

View File

@@ -16,9 +16,17 @@ public class ZonesFragment extends Fragment {
@Override @Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {
binding = FragmentZonesBinding.inflate(inflater, container, false); 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 @Override

View File

@@ -10,3 +10,5 @@

View File

@@ -11,3 +11,5 @@

View File

@@ -10,3 +10,5 @@

View File

@@ -20,3 +20,5 @@

View File

@@ -16,3 +16,5 @@

View File

@@ -16,3 +16,5 @@

View File

@@ -16,3 +16,5 @@

View File

@@ -16,3 +16,5 @@

View File

@@ -23,3 +23,5 @@

View File

@@ -11,3 +11,5 @@

View File

@@ -15,3 +15,5 @@

View File

@@ -19,3 +19,5 @@

View File

@@ -14,3 +14,5 @@

View File

@@ -11,3 +11,5 @@

View File

@@ -13,3 +13,5 @@

View File

@@ -11,3 +11,5 @@

View File

@@ -23,3 +23,5 @@

View File

@@ -15,3 +15,5 @@

View File

@@ -18,3 +18,5 @@

View File

@@ -15,3 +15,5 @@

View File

@@ -16,3 +16,5 @@

View File

@@ -16,3 +16,5 @@

View File

@@ -15,3 +15,5 @@

View File

@@ -16,3 +16,5 @@

View File

@@ -16,3 +16,5 @@

View File

@@ -15,3 +15,5 @@

View File

@@ -16,3 +16,5 @@

View File

@@ -18,3 +18,5 @@

View File

@@ -15,3 +15,5 @@

View File

@@ -15,3 +15,5 @@

View File

@@ -1,19 +1,334 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="#F6F7FB"
android:paddingBottom="96dp"
tools:context=".ui.history.HistoryFragment"> tools:context=".ui.history.HistoryFragment">
<TextView <LinearLayout
android:id="@+id/text_history" android:layout_width="match_parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Histórico" android:orientation="vertical"
android:textSize="20sp" android:paddingBottom="24dp">
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" <FrameLayout
app:layout_constraintStart_toStartOf="parent" android:layout_width="match_parent"
app:layout_constraintTop_toTopOf="parent" /> android:layout_height="190dp">
</androidx.constraintlayout.widget.ConstraintLayout>
<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="Histórico de Atividade"
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="Linha do tempo completa de eventos"
android:textColor="#E1EAFF"
android:textSize="14sp" />
</LinearLayout>
</FrameLayout>
<!-- Date Header -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="24dp"
android:text="Hoje, 12 Dezembro"
android:textColor="#6B7280"
android:textSize="14sp"
android:textStyle="bold" />
<!-- Timeline Item 1 -->
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="12dp"
android:layout_marginEnd="20dp"
app:cardBackgroundColor="#FFFFFF"
app:cardCornerRadius="20dp"
app:strokeColor="#E1E5EF"
app:strokeWidth="1dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="16dp">
<FrameLayout
android:layout_width="48dp"
android:layout_height="48dp"
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="20sp" />
</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="Chegou a Casa"
android:textColor="#0F172A"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Localização segura confirmada"
android:textColor="#6B7280"
android:textSize="13sp" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="13:30"
android:textColor="#9CA3AF"
android:textSize="14sp"
android:textStyle="bold" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<!-- Timeline Item 2 -->
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="12dp"
android:layout_marginEnd="20dp"
app:cardBackgroundColor="#FFFFFF"
app:cardCornerRadius="20dp"
app:strokeColor="#E1E5EF"
app:strokeWidth="1dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="16dp">
<FrameLayout
android:layout_width="48dp"
android:layout_height="48dp"
android:background="@drawable/bg_alert_icon_warning">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="⚠️"
android:textSize="20sp" />
</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="Saiu da Area Escolar"
android:textColor="#0F172A"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Saída antes do horário previsto"
android:textColor="#B45309"
android:textSize="13sp" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="12:35"
android:textColor="#B45309"
android:textSize="14sp"
android:textStyle="bold" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<!-- Timeline Item 3 -->
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="12dp"
android:layout_marginEnd="20dp"
app:cardBackgroundColor="#FFFFFF"
app:cardCornerRadius="20dp"
app:strokeColor="#E1E5EF"
app:strokeWidth="1dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="16dp">
<FrameLayout
android:layout_width="48dp"
android:layout_height="48dp"
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="20sp" />
</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="Chegou à Escola"
android:textColor="#0F172A"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Dentro do horário esperado"
android:textColor="#6B7280"
android:textSize="13sp" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="08:45"
android:textColor="#9CA3AF"
android:textSize="14sp"
android:textStyle="bold" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<!-- Date Header 2 -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="24dp"
android:text="Ontem, 11 Dezembro"
android:textColor="#6B7280"
android:textSize="14sp"
android:textStyle="bold" />
<!-- Timeline Item 4 -->
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="12dp"
android:layout_marginEnd="20dp"
app:cardBackgroundColor="#FFFFFF"
app:cardCornerRadius="20dp"
app:strokeColor="#E1E5EF"
app:strokeWidth="1dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="16dp">
<FrameLayout
android:layout_width="48dp"
android:layout_height="48dp"
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="20sp" />
</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="Chegou a Casa"
android:textColor="#0F172A"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Localização segura confirmada"
android:textColor="#6B7280"
android:textSize="13sp" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="18:15"
android:textColor="#9CA3AF"
android:textSize="14sp"
android:textStyle="bold" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
</LinearLayout>
</androidx.core.widget.NestedScrollView>

View File

@@ -245,14 +245,11 @@
android:clipToPadding="false" android:clipToPadding="false"
android:padding="24dp"> android:padding="24dp">
<ImageView <androidx.fragment.app.FragmentContainerView
android:id="@+id/mapTexture" android:id="@+id/map"
android:layout_width="0dp" android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_height="0dp" android:layout_width="match_parent"
android:alpha="0.35" android:layout_height="match_parent"
android:contentDescription="@string/header_title"
android:scaleType="centerCrop"
android:src="@drawable/zonas"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"

View File

@@ -1,19 +1,279 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="#F6F7FB"
android:paddingBottom="96dp"
tools:context=".ui.profile.ProfileFragment"> tools:context=".ui.profile.ProfileFragment">
<TextView <LinearLayout
android:id="@+id/text_profile" android:layout_width="match_parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Perfil" android:orientation="vertical"
android:textSize="20sp" android:paddingBottom="24dp">
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" <FrameLayout
app:layout_constraintStart_toStartOf="parent" android:layout_width="match_parent"
app:layout_constraintTop_toTopOf="parent" /> android:layout_height="220dp">
</androidx.constraintlayout.widget.ConstraintLayout>
<View
android:layout_width="match_parent"
android:layout_height="220dp"
android:background="@drawable/bg_header_top" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<com.google.android.material.imageview.ShapeableImageView
android:layout_width="80dp"
android:layout_height="80dp"
android:background="#FFFFFF"
android:padding="2dp"
app:shapeAppearanceOverlay="@style/ShapeAppearance.MaterialComponents.MediumComponent"
app:strokeColor="#FFFFFF"
app:strokeWidth="2dp"
android:src="@drawable/logo" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:text="Maria Silva"
android:textColor="#FFFFFF"
android:textSize="22sp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:text="maria.silva@email.com"
android:textColor="#E1EAFF"
android:textSize="14sp" />
</LinearLayout>
</FrameLayout>
<!-- Account Settings Section -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="24dp"
android:text="Definições de Conta"
android:textColor="#6B7280"
android:textSize="14sp"
android:textStyle="bold" />
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="12dp"
android:layout_marginEnd="20dp"
app:cardBackgroundColor="#FFFFFF"
app:cardCornerRadius="20dp"
app:cardElevation="2dp"
app:strokeColor="#E1E5EF"
app:strokeWidth="1dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<!-- Item 1 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:gravity="center_vertical"
android:padding="16dp">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@android:drawable/ic_menu_edit"
app:tint="#4B5563" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_weight="1"
android:text="Editar Perfil"
android:textColor="#1F2937"
android:textSize="16sp" />
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:src="@android:drawable/ic_media_play"
app:tint="#9CA3AF"
android:rotation="0" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#F3F4F6" />
<!-- Item 2 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:gravity="center_vertical"
android:padding="16dp">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@android:drawable/ic_lock_idle_lock"
app:tint="#4B5563" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_weight="1"
android:text="Segurança e Senha"
android:textColor="#1F2937"
android:textSize="16sp" />
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:src="@android:drawable/ic_media_play"
app:tint="#9CA3AF"
android:rotation="0" />
</LinearLayout>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<!-- App Settings Section -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="24dp"
android:text="Aplicação"
android:textColor="#6B7280"
android:textSize="14sp"
android:textStyle="bold" />
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="12dp"
android:layout_marginEnd="20dp"
app:cardBackgroundColor="#FFFFFF"
app:cardCornerRadius="20dp"
app:cardElevation="2dp"
app:strokeColor="#E1E5EF"
app:strokeWidth="1dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<!-- Item 1 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:gravity="center_vertical"
android:padding="16dp">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@android:drawable/ic_popup_sync"
app:tint="#4B5563" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_weight="1"
android:text="Notificações"
android:textColor="#1F2937"
android:textSize="16sp" />
<com.google.android.material.switchmaterial.SwitchMaterial
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#F3F4F6" />
<!-- Item 2 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:gravity="center_vertical"
android:padding="16dp">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@android:drawable/ic_dialog_info"
app:tint="#4B5563" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_weight="1"
android:text="Sobre a App"
android:textColor="#1F2937"
android:textSize="16sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="v1.0.2"
android:textColor="#9CA3AF" />
</LinearLayout>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.button.MaterialButton
android:id="@+id/btnLogout"
style="@style/Widget.MaterialComponents.Button.TextButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="32dp"
android:layout_marginEnd="24dp"
android:text="Terminar Sessão"
android:textColor="#EF4444"
android:textStyle="bold" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:gravity="center"
android:text="FindU Inc. © 2024"
android:textColor="#D1D5DB"
android:textSize="12sp" />
</LinearLayout>
</androidx.core.widget.NestedScrollView>

View File

@@ -82,7 +82,7 @@
android:layout_marginEnd="24dp" android:layout_marginEnd="24dp"
android:backgroundTint="#1F6AEF" android:backgroundTint="#1F6AEF"
app:cornerRadius="16dp" app:cornerRadius="16dp"
app:icon="@android:drawable/ic_input_add" app:icon="@drawable/ic_add"
app:iconTint="#FFFFFF" app:iconTint="#FFFFFF"
android:text="@string/zones_add_button" android:text="@string/zones_add_button"
android:textAllCaps="false" android:textAllCaps="false"
@@ -114,8 +114,8 @@
android:padding="20dp"> android:padding="20dp">
<LinearLayout <LinearLayout
android.layout_width="match_parent" android:layout_width="match_parent"
android.layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center_vertical" android:gravity="center_vertical"
android:orientation="horizontal"> android:orientation="horizontal">

View File

@@ -26,9 +26,9 @@
<string name="zones_summary_title">2 zonas monitorizadas</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_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_add_button">Adicionar nova zona</string>
<string name="zones_school_name">Escola Secundária</string> <string name="zones_school_name">Escola Profissional de Vila do Conde</string>
<string name="zones_school_desc">Chegada prevista 08:45</string> <string name="zones_school_desc">Av. Júlio Graça, Vila do Conde</string>
<string name="zones_status_safe">Ativa</string> <string name="zones_status_safe">Seguro</string>
<string name="zones_chip_entry">Entrada confirmada</string> <string name="zones_chip_entry">Entrada confirmada</string>
<string name="zones_last_update">Atualizado há 2 min</string> <string name="zones_last_update">Atualizado há 2 min</string>
<string name="zones_home_name">Casa</string> <string name="zones_home_name">Casa</string>