From 3bd72ccb362870589f1a4f87ff9da30a88a7c73b Mon Sep 17 00:00:00 2001 From: Cosano-star Date: Mon, 13 Jul 2026 14:05:04 +0200 Subject: [PATCH] v1.1 : fiabilisation de l'envoi et refonte de l'interface en Material 3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 --- app/build.gradle.kts | 4 +- app/src/main/AndroidManifest.xml | 4 +- .../com/example/maposition/MainActivity.kt | 313 ++++++++++++++---- .../example/maposition/SettingsActivity.kt | 57 ++++ .../example/maposition/settingsActivity.kt | 36 -- app/src/main/res/drawable/ic_back.xml | 9 + app/src/main/res/drawable/ic_pin.xml | 9 + app/src/main/res/drawable/ic_settings.xml | 9 + app/src/main/res/layout/activity_main.xml | 112 ++++++- app/src/main/res/layout/activity_settings.xml | 84 ++++- app/src/main/res/menu/main_menu.xml | 7 - app/src/main/res/values/colors.xml | 1 + app/src/main/res/values/strings.xml | 37 ++- 13 files changed, 544 insertions(+), 138 deletions(-) create mode 100644 app/src/main/java/com/example/maposition/SettingsActivity.kt delete mode 100644 app/src/main/java/com/example/maposition/settingsActivity.kt create mode 100644 app/src/main/res/drawable/ic_back.xml create mode 100644 app/src/main/res/drawable/ic_pin.xml create mode 100644 app/src/main/res/drawable/ic_settings.xml delete mode 100644 app/src/main/res/menu/main_menu.xml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index ea01b9d..44bf3a5 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -13,8 +13,8 @@ android { applicationId = "com.example.maposition" minSdk = 21 targetSdk = 36 - versionCode = 1 - versionName = "1.0" + versionCode = 2 + versionName = "1.1" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 128db57..928745c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,12 +7,12 @@ diff --git a/app/src/main/java/com/example/maposition/MainActivity.kt b/app/src/main/java/com/example/maposition/MainActivity.kt index 36e6b5c..4dcabd4 100644 --- a/app/src/main/java/com/example/maposition/MainActivity.kt +++ b/app/src/main/java/com/example/maposition/MainActivity.kt @@ -1,111 +1,300 @@ package com.example.maposition import android.Manifest +import android.annotation.SuppressLint +import android.app.Activity +import android.app.PendingIntent +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter import android.content.pm.PackageManager import android.location.Location +import android.os.Build import android.os.Bundle +import android.os.Handler +import android.os.Looper +import android.os.SystemClock import android.telephony.SmsManager -import android.widget.Button -import android.widget.Toast +import android.view.View +import android.widget.ImageButton +import android.widget.TextView import androidx.appcompat.app.AppCompatActivity import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat -import com.google.android.gms.location.LocationCallback -import com.google.android.gms.location.LocationRequest -import com.google.android.gms.location.LocationResult +import com.google.android.gms.location.FusedLocationProviderClient import com.google.android.gms.location.LocationServices import com.google.android.gms.location.Priority +import com.google.android.gms.tasks.CancellationTokenSource +import com.google.android.material.button.MaterialButton +import com.google.android.material.card.MaterialCardView +import com.google.android.material.progressindicator.CircularProgressIndicator +import java.util.concurrent.TimeUnit class MainActivity : AppCompatActivity() { + companion object { + private const val ACTION_SMS_SENT = "com.example.maposition.SMS_SENT" + private const val EXTRA_RECIPIENT = "recipient" + private const val REQUEST_PERMISSIONS = 1 + private const val LOCATION_TIMEOUT_MS = 10_000L + private const val SEND_STAGGER_MS = 500L + private const val REPORT_TIMEOUT_MS = 20_000L + } + private val permissions = arrayOf( Manifest.permission.SEND_SMS, Manifest.permission.ACCESS_FINE_LOCATION ) - private val REQUEST_ALL = 1 + private val handler = Handler(Looper.getMainLooper()) - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) - title = "Paramètres ----> " - val sendButton = findViewById