diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index dc86f20a7d0f446a5074c7a11176d275838c76c5..f7034ac4ac31192ba884bbe7dc9c95ed508935a8 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 0000000000000000000000000000000000000000..404798205b21cf7c96c60b196caf96cfde29321b --- /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 0000000000000000000000000000000000000000..9573507dcb340bc1c3a36cfcf6ae371c6e642674 --- /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 d36e118d8ac04b08e3046139b72439f9a7a9104b..37eef5c10eec3cae28897fd8779b3dae3da47c53 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