From 2236aaff7ad34b0b686217e59f31da8d970e0906 Mon Sep 17 00:00:00 2001
From: t22couch <thibaud.couchet@imt-atlantique.net>
Date: Tue, 25 Feb 2025 14:49:43 +0100
Subject: [PATCH] Change datepickersystem

---
 app/src/main/AndroidManifest.xml              |   6 ++
 .../myfirstapplication/DatePicker.java        |  51 +++++++++
 .../DatePickerActivity.java                   | 100 ++++++++++++++++++
 .../myfirstapplication/MainActivity.java      |  65 ++++++++----
 4 files changed, 200 insertions(+), 22 deletions(-)
 create mode 100644 app/src/main/java/fr/imt_atlantique/myfirstapplication/DatePicker.java
 create mode 100644 app/src/main/java/fr/imt_atlantique/myfirstapplication/DatePickerActivity.java

diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index dc86f20..f7034ac 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -27,6 +27,12 @@
             </intent-filter>
         </activity>
         <activity android:name=".SecondActivity" android:exported="true" />
+        <activity android:name=".DatePickerActivity" android:exported="true">
+            <intent-filter>
+                <action android:name="android.intent.action.PICK" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
     </application>
 
     <queries>
diff --git a/app/src/main/java/fr/imt_atlantique/myfirstapplication/DatePicker.java b/app/src/main/java/fr/imt_atlantique/myfirstapplication/DatePicker.java
new file mode 100644
index 0000000..4047982
--- /dev/null
+++ b/app/src/main/java/fr/imt_atlantique/myfirstapplication/DatePicker.java
@@ -0,0 +1,51 @@
+package fr.imt_atlantique.myfirstapplication;
+
+import android.os.Build;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import androidx.annotation.NonNull;
+
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+
+public class DatePicker implements Parcelable {
+    private LocalDate date;
+
+    public DatePicker(LocalDate birthDate) {
+        this.date = birthDate;
+    }
+
+    protected DatePicker(Parcel in) {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-M-d");
+            date = LocalDate.parse(in.readString(), formatter);
+        }
+    }
+
+    public static final Creator<DatePicker> CREATOR = new Creator<DatePicker>() {
+        @Override
+        public DatePicker createFromParcel(Parcel in) {
+            return new DatePicker(in);
+        }
+
+        @Override
+        public DatePicker[] newArray(int size) {
+            return new DatePicker[size];
+        }
+    };
+
+    @Override
+    public void writeToParcel(@NonNull Parcel parcel, int i) {
+        parcel.writeString(this.date.toString());
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    public LocalDate getDate() {
+        return date;
+    }
+}
diff --git a/app/src/main/java/fr/imt_atlantique/myfirstapplication/DatePickerActivity.java b/app/src/main/java/fr/imt_atlantique/myfirstapplication/DatePickerActivity.java
new file mode 100644
index 0000000..9573507
--- /dev/null
+++ b/app/src/main/java/fr/imt_atlantique/myfirstapplication/DatePickerActivity.java
@@ -0,0 +1,100 @@
+package fr.imt_atlantique.myfirstapplication;
+
+import android.content.Intent;
+import android.os.Build;
+import android.os.Bundle;
+import android.util.Log;
+import android.widget.Button;
+import android.widget.DatePicker;
+
+import androidx.activity.EdgeToEdge;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.graphics.Insets;
+import androidx.core.view.ViewCompat;
+import androidx.core.view.WindowInsetsCompat;
+
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+
+public class DatePickerActivity extends AppCompatActivity {
+
+    LocalDate date;
+
+    DatePicker datePicker;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        Log.i("Lifecycle", "onCreate method");
+        EdgeToEdge.enable(this);
+        setContentView(R.layout.activity_date);
+        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.date), (v, insets) -> {
+            Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
+            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
+            return insets;
+        });
+        datePicker = findViewById(R.id.datePicker);
+
+        getValues();
+
+        // Bouton de validation
+        Button validateButton = findViewById(R.id.validateDateButton);
+        validateButton.setOnClickListener(view -> {
+            int day = datePicker.getDayOfMonth();
+            int month = datePicker.getMonth() + 1; // Le mois commence à 0
+            int year = datePicker.getYear();
+            LocalDate date = null;
+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+                date = LocalDate.of(year, month, day);
+            }
+
+            // Retourne la date sélectionnée via Parcelable
+            fr.imt_atlantique.myfirstapplication.DatePicker dateObject = new fr.imt_atlantique.myfirstapplication.DatePicker(date);
+            Intent resultIntent = new Intent();
+            resultIntent.putExtra("date", dateObject);
+            setResult(RESULT_OK, resultIntent);
+            finish(); // Ferme l'activité
+        });
+
+        // Bouton d'annulation
+        Button cancelButton = findViewById(R.id.cancel_button);
+        cancelButton.setOnClickListener(view -> {
+            setResult(RESULT_CANCELED);
+            finish();
+        });
+    }
+
+    private void getValues() {
+        Intent intent = getIntent();
+        if (intent != null) {
+            fr.imt_atlantique.myfirstapplication.DatePicker date = intent.getParcelableExtra("date");
+            if (date != null) {
+                this.date = date.getDate();
+
+                // ✅ Met à jour le DatePicker avec la date reçue
+                datePicker.updateDate(this.date.getYear(), this.date.getMonthValue() - 1, this.date.getDayOfMonth());
+            }
+        }
+    }
+
+
+    @Override
+    protected void onStart() {
+        super.onStart();
+        Log.i("Lifecycle", "onStart method");
+    }
+
+    @Override
+    protected void onRestart() {
+        super.onRestart();
+        Log.i("Lifecycle", "onRestart method");
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        Log.i("Lifecycle", "onResume method");
+    }
+
+
+}
diff --git a/app/src/main/java/fr/imt_atlantique/myfirstapplication/MainActivity.java b/app/src/main/java/fr/imt_atlantique/myfirstapplication/MainActivity.java
index d36e118..37eef5c 100644
--- a/app/src/main/java/fr/imt_atlantique/myfirstapplication/MainActivity.java
+++ b/app/src/main/java/fr/imt_atlantique/myfirstapplication/MainActivity.java
@@ -6,6 +6,7 @@ import android.content.Intent;
 import android.content.SharedPreferences;
 import android.icu.util.Calendar;
 import android.net.Uri;
+import android.os.Build;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.LayoutInflater;
@@ -19,8 +20,11 @@ import android.widget.DatePicker;
 import android.widget.EditText;
 import android.widget.LinearLayout;
 import android.widget.Spinner;
+import android.widget.TextView;
 
 import androidx.activity.EdgeToEdge;
+import androidx.activity.result.ActivityResultLauncher;
+import androidx.activity.result.contract.ActivityResultContracts;
 import androidx.annotation.NonNull;
 import androidx.appcompat.app.AppCompatActivity;
 import androidx.core.graphics.Insets;
@@ -44,6 +48,9 @@ public class MainActivity extends AppCompatActivity {
     int birthDept = 0;
     ArrayList<String> phoneNumbersList = new ArrayList<>();
 
+    TextView birthDateTextView;
+    Button birthDateButton;
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -55,6 +62,12 @@ public class MainActivity extends AppCompatActivity {
             v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
             return insets;
         });
+
+        birthDateTextView = findViewById(R.id.birthDateTextView);
+        birthDateButton = findViewById(R.id.birthDateEditText);
+
+        birthDateButton.setOnClickListener(view -> showDatePicker());
+
         restorePreferences();
     }
 
@@ -241,29 +254,7 @@ public class MainActivity extends AppCompatActivity {
         saveValues();
     }
 
-    public void showDatePicker(View v) {
-        // Obtenir la date actuelle
-        final Calendar c = Calendar.getInstance();
-        int year = c.get(Calendar.YEAR);
-        int month = c.get(Calendar.MONTH);
-        int day = c.get(Calendar.DAY_OF_MONTH);
-
-        DatePickerDialog datePickerDialog = new DatePickerDialog(
-                this,
-                new DatePickerDialog.OnDateSetListener() {
-                    @Override
-                    public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDay) {
-                        // Mettre à jour le texte du bouton avec la date choisie
-                        Button birthDateButton = findViewById(R.id.birthDateEditText);
-                        String selectedDate = selectedDay + "/" + (selectedMonth + 1) + "/" + selectedYear;
-                        birthDateButton.setText(selectedDate);
-                    }
-                },
-                year, month, day
-        );
 
-        datePickerDialog.show();
-    }
 
     protected void onSaveInstanceState(Bundle outState){
         super.onSaveInstanceState(outState);
@@ -356,4 +347,34 @@ public class MainActivity extends AppCompatActivity {
 
     }
 
+    public void showDatePicker() {
+        Intent intent = new Intent(MainActivity.this, DatePickerActivity.class);
+
+        if (!birthDate.equals("Pick date")) {  // ✅ Envoie la date uniquement si elle est définie
+            LocalDate date = null;
+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+                date = LocalDate.parse(birthDate, DateTimeFormatter.ofPattern("d/M/yyyy"));
+            }
+            fr.imt_atlantique.myfirstapplication.DatePicker dateObject = new fr.imt_atlantique.myfirstapplication.DatePicker(date);
+            intent.putExtra("date", dateObject);
+        }
+
+        datePickerLauncher.launch(intent);
+    }
+
+    private final ActivityResultLauncher<Intent> datePickerLauncher = registerForActivityResult(
+            new ActivityResultContracts.StartActivityForResult(),
+            result -> {
+                if (result.getResultCode() == RESULT_OK && result.getData() != null) {
+                    fr.imt_atlantique.myfirstapplication.DatePicker date = result.getData().getParcelableExtra("date");
+                    if (date != null) {
+                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+                            birthDate = date.getDate().format(DateTimeFormatter.ofPattern("d/M/yyyy"));  // ✅ Formate la date
+                        }
+                        birthDateButton.setText(birthDate);    // ✅ Met à jour le texte du bouton (si nécessaire)
+                    }
+                }
+            }
+    );
+
 }
\ No newline at end of file
-- 
GitLab