Skip to content
Snippets Groups Projects
Commit 4fc74f2a authored by s22thong's avatar s22thong
Browse files
parents 0baddea8 caf74c5a
No related branches found
No related tags found
No related merge requests found
......@@ -12,12 +12,25 @@ import android.view.ViewGroup;
import android.widget.Button;
import android.widget.DatePicker;
import java.util.ArrayList;
import java.util.Date;
public class DatePickerFragment extends Fragment {
private static final String ARG_DATE = "date";
private static final String ARG_FIRSTNAME = "firstName";
private static final String ARG_LASTNAME = "lastName";
private static final String ARG_BIRTHCITY = "birthCity";
private static final String ARG_BIRTHDEPT = "birthDept";
private static final String ARG_PHONES = "phoneNumbers";
private static final String ARG_PREVIOUS_BIRTHDATE = "previousBirthDate";
private Date mDate;
private String firstName;
private String lastName;
private String birthCity;
private int birthDept;
private ArrayList<String> phoneNumbers;
private String previousBirthDate;
private DatePicker datePicker;
private Button validateDateButton;
private Button cancelButton;
......@@ -27,16 +40,22 @@ public class DatePickerFragment extends Fragment {
// Required empty public constructor
}
public interface onUserPickingDateListener {
void onUserPickingDate(Date date);
public void onUserPickingDate(Date date, String firstName, String lastName, String birthCity, int birthDept, ArrayList<String> phoneNumbers, String previousBirthDate) {
mDate = date;
this.firstName = firstName;
this.lastName = lastName;
this.birthCity = birthCity;
this.birthDept = birthDept;
this.phoneNumbers = phoneNumbers;
this.previousBirthDate = previousBirthDate;
}
public interface onDateSubmittedListener {
void onDateSubmitted(int day, int month, int year);
}
public interface onUserPickingDateListener {
void onUserPickingDate(Date date, String firstName, String lastName, String birthCity, int birthDept, ArrayList<String> phoneNumbers, String previousBirthDate);
public interface onDateCancelledListener {
void onDateCancelled();
void onDateSubmittedListener(int day, int month, int year, String firstName, String lastName, String birthCity, int birthDept, ArrayList<String> phoneNumbers);
void onDateCancelledListener(String firstName, String lastName, String birthCity, int birthDept, ArrayList<String> phoneNumbers, String previousBirthDate);
}
public static DatePickerFragment newInstance(Date date) {
......@@ -47,11 +66,31 @@ public class DatePickerFragment extends Fragment {
return fragment;
}
public static DatePickerFragment newInstance(Date date, String firstName, String lastName, String birthCity, int birthDept, ArrayList<String> phoneNumbers, String previousBirthDate) {
DatePickerFragment fragment = new DatePickerFragment();
Bundle args = new Bundle();
args.putLong(ARG_DATE, date.getTime());
args.putString(ARG_FIRSTNAME, firstName);
args.putString(ARG_LASTNAME, lastName);
args.putString(ARG_BIRTHCITY, birthCity);
args.putInt(ARG_BIRTHDEPT, birthDept);
args.putStringArrayList(ARG_PHONES, phoneNumbers);
args.putString(ARG_PREVIOUS_BIRTHDATE, previousBirthDate);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mDate = new Date(getArguments().getLong(ARG_DATE));
firstName = getArguments().getString(ARG_FIRSTNAME);
lastName = getArguments().getString(ARG_LASTNAME);
birthCity = getArguments().getString(ARG_BIRTHCITY);
birthDept = getArguments().getInt(ARG_BIRTHDEPT);
phoneNumbers = getArguments().getStringArrayList(ARG_PHONES);
previousBirthDate = getArguments().getString(ARG_PREVIOUS_BIRTHDATE);
}
}
......@@ -71,23 +110,27 @@ public class DatePickerFragment extends Fragment {
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_date_picker, container, false);
/*
DatePicker datePicker = view.findViewById(R.id.datePicker);
validateDateButton = view.findViewById(R.id.validateDateButton);
validateDateButton.setOnClickListener(() -> {
int day = datePicker.getDayOfMonth();
int month = datePicker.getMonth() + 1;
int year = datePicker.getYear();
mListener.onDateSubmittedListener(day, month, year);
validateDateButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int day = datePicker.getDayOfMonth();
int month = datePicker.getMonth() + 1;
int year = datePicker.getYear();
mListener.onDateSubmittedListener(day, month, year, firstName, lastName, birthCity, birthDept, phoneNumbers);
}
});
cancelButton = view.findViewById(R.id.cancel_button);
cancelButton.setOnClickListener(() -> {
mListener.onDateCancelledListener();
cancelButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mListener.onDateCancelledListener(firstName, lastName, birthCity, birthDept, phoneNumbers, previousBirthDate);
}
});
*/
return view;
}
......
package fr.imt_atlantique.myfirstapplication;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
......@@ -18,6 +21,7 @@ import android.widget.Spinner;
import android.widget.TextView;
import com.google.android.material.snackbar.Snackbar;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
public class EditUserFragment extends Fragment {
......@@ -45,11 +49,32 @@ public class EditUserFragment extends Fragment {
private OnUserInfoSubmittedListener callback;
public static EditUserFragment newInstance(int day, int month, int year, String firstName, String lastName, String birthCity, int birthDept, ArrayList<String> phoneNumbers) {
EditUserFragment fragment = new EditUserFragment();
Bundle args = new Bundle();
// Make the date right string format
String date = day + "/" + month + "/" + year;
args.putString(ARG_BIRTHDATE, date);
args.putString(ARG_FIRSTNAME, firstName);
args.putString(ARG_LASTNAME, lastName);
args.putString(ARG_BIRTHCITY, birthCity);
args.putInt(ARG_BIRTHDEPT, birthDept);
args.putStringArrayList(ARG_PHONES, phoneNumbers);
Log.i("Test", "Date: " + date);
fragment.setArguments(args);
return fragment;
}
public void onDateSubmittedListener(int day, int month, int year, String firstName, String lastName, String birthCity, int birthDept, ArrayList<String> phoneNumbers) {
}
/**
* Interface pour communiquer avec l'activité principale.
*/
public interface OnUserInfoSubmittedListener {
void onUserInfoSubmitted(String firstName, String lastName, String birthCity, String birthDate, int birthDept, ArrayList<String> phoneNumbers);
void onEditDateRequested(String birthDate, String firstName, String lastName, String birthCity, int birthDept, ArrayList<String> phoneNumbers, String previousBirthDate);
}
public EditUserFragment() {
......@@ -71,6 +96,17 @@ public class EditUserFragment extends Fragment {
fragment.setArguments(args);
return fragment;
}
public static EditUserFragment newInstance(String firstName, String lastName, String birthCity, int birthDept, ArrayList<String> phoneNumbers) {
EditUserFragment fragment = new EditUserFragment();
Bundle args = new Bundle();
args.putString(ARG_FIRSTNAME, firstName);
args.putString(ARG_LASTNAME, lastName);
args.putString(ARG_BIRTHCITY, birthCity);
args.putInt(ARG_BIRTHDEPT, birthDept);
args.putStringArrayList(ARG_PHONES, phoneNumbers);
fragment.setArguments(args);
return fragment;
}
@Override
public void onAttach(@NonNull Context context) {
......@@ -85,7 +121,7 @@ public class EditUserFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
restoreFromPreferences(); // Restaure les données dès la création du fragment
restoreFromPreferences();
}
@Nullable
......@@ -111,33 +147,92 @@ public class EditUserFragment extends Fragment {
toolbar.inflateMenu(R.menu.menu_main);
// Gérer les clics sur les éléments du menu
toolbar.setOnMenuItemClickListener(item -> {
if (item.getItemId() == R.id.shareAction) {
shareAction();
return true;
} else if (item.getItemId() == R.id.wikipediaAction) {
openWikipedia();
return true;
} else if (item.getItemId() == R.id.resetAction) {
resetAllFields();
return true;
}
return false;
});
if (savedInstanceState != null) {
firstNameEditText.setText(savedInstanceState.getString(ARG_FIRSTNAME, ""));
lastNameEditText.setText(savedInstanceState.getString(ARG_LASTNAME, ""));
birthCityEditText.setText(savedInstanceState.getString(ARG_BIRTHCITY, ""));
birthDateTextView.setText(savedInstanceState.getString(ARG_BIRTHDATE, getString(R.string.pick_date_hint)));
birthDateButton.setText(savedInstanceState.getString(ARG_BIRTHDATE, getString(R.string.pick_date_hint)));
birthDeptSpinner.setSelection(savedInstanceState.getInt(ARG_BIRTHDEPT, 0));
// Restaurer la liste des numéros après rotation
phoneNumbersList = savedInstanceState.getStringArrayList(ARG_PHONES);
restorePhoneNumbers();
} else {
firstNameEditText.setText(firstName);
lastNameEditText.setText(lastName);
birthCityEditText.setText(birthCity);
birthDateTextView.setText(birthDate);
birthDateButton.setText(birthDate);
birthDeptSpinner.setSelection(birthDept);
restorePhoneNumbers();
}
if (getArguments() != null) {
String birthDate = getArguments().getString(ARG_BIRTHDATE, getString(R.string.pick_date_hint));
String firstName = getArguments().getString(ARG_FIRSTNAME, "");
String lastName = getArguments().getString(ARG_LASTNAME, "");
String birthCity = getArguments().getString(ARG_BIRTHCITY, "");
ArrayList<String> phoneNumbersList = getArguments().getStringArrayList(ARG_PHONES);
birthDateButton.setText(birthDate);
firstNameEditText.setText(firstName);
lastNameEditText.setText(lastName);
birthCityEditText.setText(birthCity);
this.phoneNumbersList = phoneNumbersList;
restorePhoneNumbers();
}
birthDateButton.setOnClickListener(v -> {
Snackbar.make(view, "Sélection de la date (à implémenter)", Snackbar.LENGTH_LONG).show();
getPhoneNumbersList();
callback.onEditDateRequested(birthDate, firstNameEditText.getText().toString(), lastNameEditText.getText().toString(), birthCityEditText.getText().toString(), birthDeptSpinner.getSelectedItemPosition(), phoneNumbersList, birthDateButton.getText().toString());
});
addPhoneButton.setOnClickListener(v -> addPhoneNumberToLayout(""));
validateButton.setOnClickListener(v -> validateAction());
}
private void shareAction() {
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_TEXT, birthCity);
startActivity(Intent.createChooser(shareIntent, getString(R.string.share)));
}
private void openWikipedia() {
String url = "http://fr.wikipedia.org/?search=" + birthCity;
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(browserIntent);
}
private void resetAllFields() {
firstNameEditText.setText("");
lastNameEditText.setText("");
birthCityEditText.setText("");
birthDateButton.setText(getString(R.string.pick_date_hint));
birthDeptSpinner.setSelection(0);
while (phonesLayout.getChildCount() > 1) {
phonesLayout.removeViewAt(1);
}
// Clear the saved preferences
SharedPreferences prefs = requireActivity().getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.clear();
editor.apply();
}
private void addPhoneNumberToLayout(String phoneNumber) {
LayoutInflater inflater = LayoutInflater.from(getContext());
View phoneView = inflater.inflate(R.layout.phone_number_input, phonesLayout, false);
......@@ -151,9 +246,6 @@ public class EditUserFragment extends Fragment {
phonesLayout.addView(phoneView);
}
/**
* Supprime un champ numéro de téléphone.
*/
private void removePhoneNumber(View phoneView) {
phonesLayout.removeView(phoneView);
}
......@@ -165,7 +257,7 @@ public class EditUserFragment extends Fragment {
firstName = firstNameEditText.getText().toString().trim();
lastName = lastNameEditText.getText().toString().trim();
birthCity = birthCityEditText.getText().toString().trim();
birthDate = birthDateTextView.getText().toString();
birthDate = birthDateButton.getText().toString();
birthDept = birthDeptSpinner.getSelectedItemPosition();
phoneNumbersList.clear();
......@@ -187,6 +279,21 @@ public class EditUserFragment extends Fragment {
callback.onUserInfoSubmitted(firstName, lastName, birthCity, birthDate, birthDept, phoneNumbersList);
}
private void getPhoneNumbersList() {
if (phoneNumbersList == null) {
phoneNumbersList = new ArrayList<>();
}
phoneNumbersList.clear();
for (int i = 1; i < phonesLayout.getChildCount(); i++) {
View phoneView = phonesLayout.getChildAt(i);
EditText phoneEditText = phoneView.findViewById(R.id.phoneNumberEditText);
String phoneNumber = phoneEditText.getText().toString();
if (!phoneNumber.isEmpty()) {
phoneNumbersList.add(phoneNumber);
}
}
}
/**
* Sauvegarde les données utilisateur dans SharedPreferences.
*/
......@@ -234,7 +341,7 @@ public class EditUserFragment extends Fragment {
outState.putString(ARG_FIRSTNAME, firstNameEditText.getText().toString());
outState.putString(ARG_LASTNAME, lastNameEditText.getText().toString());
outState.putString(ARG_BIRTHCITY, birthCityEditText.getText().toString());
outState.putString(ARG_BIRTHDATE, birthDateTextView.getText().toString());
outState.putString(ARG_BIRTHDATE, birthDateButton.getText().toString());
outState.putInt(ARG_BIRTHDEPT, birthDeptSpinner.getSelectedItemPosition());
// Récupérer les numéros affichés à l'écran
......
......@@ -2,6 +2,7 @@ package fr.imt_atlantique.myfirstapplication;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.MenuItem;
import androidx.annotation.NonNull;
......@@ -11,9 +12,10 @@ import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
public class MainActivity extends AppCompatActivity implements EditUserFragment.OnUserInfoSubmittedListener {
public class MainActivity extends AppCompatActivity implements EditUserFragment.OnUserInfoSubmittedListener, DatePickerFragment.onUserPickingDateListener {
private static final String PREFS_NAME = "UserPrefs";
private static final String ARG_FIRSTNAME = "firstName";
......@@ -79,6 +81,24 @@ public class MainActivity extends AppCompatActivity implements EditUserFragment.
showDisplayFragment(firstName, lastName, birthCity, getResources().getStringArray(R.array.departments)[birthDept], birthDate, phoneNumbersList);
}
/**
* Callback lorsque l'utilisateur veut modifier sa date dans `DisplayUserFragment`.
*/
@Override
public void onEditDateRequested(String birthDate, String firstName, String lastName, String birthCity, int birthDept, ArrayList<String> phoneNumbers, String previousBirthDate) {
// go to DatePickerFragment with the current date if no date is set yet or with the current date in Date format
Date date = new Date();
if (!birthDate.equals(getString(R.string.pick_date_hint))) {
String[] dateParts = birthDate.split("/");
date = new Date(Integer.parseInt(dateParts[2]) - 1900, Integer.parseInt(dateParts[1]) - 1, Integer.parseInt(dateParts[0]));
}
DatePickerFragment datePickerFragment = DatePickerFragment.newInstance(date, firstName, lastName, birthCity, birthDept, phoneNumbers, previousBirthDate);
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragmentContainer, datePickerFragment)
.commit();
}
/**
* Sauvegarde les informations utilisateur dans `SharedPreferences`.
*/
......@@ -94,6 +114,34 @@ public class MainActivity extends AppCompatActivity implements EditUserFragment.
editor.apply();
}
public void resetAction(MenuItem item) {
@Override
public void onUserPickingDate(Date date, String firstName, String lastName, String birthCity, int birthDept, ArrayList<String> phoneNumbers, String previousBirthDate) {
// Send the date actually picked by the user to the fragment DatePickerFragment
DatePickerFragment fragment = (DatePickerFragment) getSupportFragmentManager().findFragmentById(R.id.fragmentContainer);
assert fragment != null;
fragment.onUserPickingDate(date, firstName, lastName, birthCity, birthDept, phoneNumbers, previousBirthDate);
}
@Override
public void onDateSubmittedListener(int day, int month, int year, String firstName, String lastName, String birthCity, int birthDept, ArrayList<String> phoneNumbers) {
// Send the date picked by the user to the fragment EditUserFragment showEditFragment(String newDate)
showEditFragment(day, month, year, firstName, lastName, birthCity, birthDept, phoneNumbers);
}
private void showEditFragment(int day, int month, int year, String firstName, String lastName, String birthCity, int birthDept, ArrayList<String> phoneNumbers) {
EditUserFragment fragment = EditUserFragment.newInstance(day, month, year, firstName, lastName, birthCity, birthDept, phoneNumbers);
replaceFragment(fragment, false);
}
@Override
public void onDateCancelledListener(String firstName, String lastName, String birthCity, int birthDept, ArrayList<String> phoneNumbers, String previousBirthDate) {
// cancel the date picking, go back to the previous fragment
showEditFragment(firstName, lastName, birthCity, birthDept, phoneNumbers, previousBirthDate);
}
private void showEditFragment(String firstName, String lastName, String birthCity, int birthDept, ArrayList<String> phoneNumbers, String previousBirthDate) {
Log.i("Testsssss", "showEditFragment: " + previousBirthDate);
EditUserFragment fragment = EditUserFragment.newInstance(firstName, lastName, birthCity, previousBirthDate, birthDept, phoneNumbers);
replaceFragment(fragment, false);
}
}
\ No newline at end of file
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/resetAction"
android:title="@string/reset_action"
android:onClick="resetAction">
android:title="@string/reset_action">
</item>
<item
android:id="@+id/wikipediaAction"
......
......@@ -31,6 +31,4 @@
<string name="open_wikipedia">Open Wikipedia</string>
<string name="share">Share</string>
<string name="error_first_name_empty">The first name can not be empty.</string>
<!-- TODO: Remove or change this placeholder text -->
<string name="hello_blank_fragment">Hello blank fragment</string>
</resources>
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment