- Accusés d'envoi SMS réels par destinataire (PendingIntent + BroadcastReceiver) : le statut final distingue succès, échecs par numéro et envois non confirmés - Repli GPS : si pas de position fraîche en 10 s, utilisation de la dernière position connue (mention de son âge dans le SMS) - API SmsManager moderne (getSystemService sur Android 12+, compatible multi-SIM) - Envois espacés de 500 ms entre destinataires (anti-filtrage opérateur) - UI Material 3 : gros bouton d'envoi central, indicateur de progression, statut détaillé, carte destinataires ; paramètres avec validation des numéros - Validation des numéros à la saisie, versionCode 2 / versionName 1.1 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
76 lines
2.9 KiB
XML
76 lines
2.9 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="match_parent"
|
|
android:orientation="vertical"
|
|
android:padding="24dp">
|
|
|
|
<LinearLayout
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content"
|
|
android:gravity="center_vertical"
|
|
android:orientation="horizontal">
|
|
|
|
<ImageButton
|
|
android:id="@+id/backButton"
|
|
android:layout_width="48dp"
|
|
android:layout_height="48dp"
|
|
android:background="?attr/selectableItemBackgroundBorderless"
|
|
android:contentDescription="@string/back"
|
|
android:src="@drawable/ic_back"
|
|
app:tint="?attr/colorOnSurface" />
|
|
|
|
<TextView
|
|
android:layout_width="wrap_content"
|
|
android:layout_height="wrap_content"
|
|
android:layout_marginStart="8dp"
|
|
android:text="@string/settings_title"
|
|
android:textSize="24sp"
|
|
android:textStyle="bold" />
|
|
</LinearLayout>
|
|
|
|
<com.google.android.material.textfield.TextInputLayout
|
|
android:id="@+id/nameLayout"
|
|
style="@style/Widget.Material3.TextInputLayout.OutlinedBox"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content"
|
|
android:layout_marginTop="32dp"
|
|
android:hint="@string/name_hint"
|
|
app:helperText="@string/name_helper">
|
|
|
|
<com.google.android.material.textfield.TextInputEditText
|
|
android:id="@+id/nameInput"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content"
|
|
android:inputType="textPersonName"
|
|
android:maxLength="40" />
|
|
</com.google.android.material.textfield.TextInputLayout>
|
|
|
|
<com.google.android.material.textfield.TextInputLayout
|
|
android:id="@+id/phonesLayout"
|
|
style="@style/Widget.Material3.TextInputLayout.OutlinedBox"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content"
|
|
android:layout_marginTop="24dp"
|
|
android:hint="@string/phones_hint"
|
|
app:helperText="@string/phones_helper">
|
|
|
|
<com.google.android.material.textfield.TextInputEditText
|
|
android:id="@+id/phonesInput"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content"
|
|
android:inputType="text" />
|
|
</com.google.android.material.textfield.TextInputLayout>
|
|
|
|
<com.google.android.material.button.MaterialButton
|
|
android:id="@+id/saveButton"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="56dp"
|
|
android:layout_marginTop="32dp"
|
|
android:text="@string/save"
|
|
android:textSize="16sp"
|
|
app:backgroundTint="@color/brand_blue"
|
|
app:cornerRadius="16dp" />
|
|
|
|
</LinearLayout>
|