From 8c5d96bbf04df662e78f6c26b5ec10b65681c4ef Mon Sep 17 00:00:00 2001 From: t22couch <thibaud.couchet@imt-atlantique.net> Date: Tue, 25 Feb 2025 16:24:25 +0100 Subject: [PATCH] Code refactor --- .../DatePickerActivity.java | 13 +-- .../DisplayUserActivity.java | 21 +---- .../myfirstapplication/MainActivity.java | 92 ++++++++----------- .../myfirstapplication/User.java | 17 +--- app/src/main/res/values/strings.xml | 1 + 5 files changed, 56 insertions(+), 88 deletions(-) diff --git a/app/src/main/java/fr/imt_atlantique/myfirstapplication/DatePickerActivity.java b/app/src/main/java/fr/imt_atlantique/myfirstapplication/DatePickerActivity.java index 9573507..216e379 100644 --- a/app/src/main/java/fr/imt_atlantique/myfirstapplication/DatePickerActivity.java +++ b/app/src/main/java/fr/imt_atlantique/myfirstapplication/DatePickerActivity.java @@ -14,7 +14,6 @@ import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; import java.time.LocalDate; -import java.time.format.DateTimeFormatter; public class DatePickerActivity extends AppCompatActivity { @@ -37,26 +36,23 @@ public class DatePickerActivity extends AppCompatActivity { 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 month = datePicker.getMonth() + 1; 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é + finish(); }); - // Bouton d'annulation Button cancelButton = findViewById(R.id.cancel_button); cancelButton.setOnClickListener(view -> { setResult(RESULT_CANCELED); @@ -71,8 +67,9 @@ public class DatePickerActivity extends AppCompatActivity { 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()); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + datePicker.updateDate(this.date.getYear(), this.date.getMonthValue() - 1, this.date.getDayOfMonth()); + } } } } diff --git a/app/src/main/java/fr/imt_atlantique/myfirstapplication/DisplayUserActivity.java b/app/src/main/java/fr/imt_atlantique/myfirstapplication/DisplayUserActivity.java index a09a6e9..13a4f3f 100644 --- a/app/src/main/java/fr/imt_atlantique/myfirstapplication/DisplayUserActivity.java +++ b/app/src/main/java/fr/imt_atlantique/myfirstapplication/DisplayUserActivity.java @@ -1,7 +1,6 @@ package fr.imt_atlantique.myfirstapplication; import android.app.AlertDialog; -import android.content.DialogInterface; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Build; @@ -58,7 +57,7 @@ public class DisplayUserActivity extends AppCompatActivity { lastName = user.getLastName(); birthCity = user.getBirthCity(); birthDept = user.getBirthDept(); - DateTimeFormatter formatter = null; + DateTimeFormatter formatter; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { formatter = DateTimeFormatter.ofPattern("d/M/yyyy"); birthDate = user.getBirthDate().format(formatter); @@ -143,7 +142,7 @@ public class DisplayUserActivity extends AppCompatActivity { callIntent.setData(Uri.parse("tel:" + phoneNumber)); startActivity(callIntent); } catch (SecurityException e) { - Snackbar.make(v, "An error occurred during the call attempt: " + e.toString(), Snackbar.LENGTH_SHORT).show(); + Snackbar.make(v, "An error occurred during the call attempt: " + e, Snackbar.LENGTH_SHORT).show(); } } @@ -152,19 +151,9 @@ public class DisplayUserActivity extends AppCompatActivity { new AlertDialog.Builder(this) .setTitle("Call Permission Required") .setMessage("This App needs Call permission in order to be able to handle calling a phone number") - .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - Toast.makeText(DisplayUserActivity.this, "Permission Denied", Toast.LENGTH_SHORT) - .show(); - } - }) - .setPositiveButton("Ok", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - ActivityCompat.requestPermissions(DisplayUserActivity.this, new String[]{Manifest.permission.CALL_PHONE}, 3); // 3 is requestCode and can be any number - } - }) + .setNegativeButton("Cancel", (dialog, which) -> Toast.makeText(DisplayUserActivity.this, "Permission Denied", Toast.LENGTH_SHORT) + .show()) + .setPositiveButton("Ok", (dialog, which) -> ActivityCompat.requestPermissions(DisplayUserActivity.this, new String[]{Manifest.permission.CALL_PHONE}, 3)) .create() .show(); } 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 6e17615..011faf5 100644 --- a/app/src/main/java/fr/imt_atlantique/myfirstapplication/MainActivity.java +++ b/app/src/main/java/fr/imt_atlantique/myfirstapplication/MainActivity.java @@ -37,14 +37,16 @@ import java.util.Set; public class MainActivity extends AppCompatActivity { - String firstName, lastName, birthCity = ""; - String birthDate = "Pick date"; + String firstName, lastName, birthCity; + String birthDate = getString(R.string.pick_date_hint); int birthDept = 0; ArrayList<String> phoneNumbersList = new ArrayList<>(); TextView birthDateTextView; Button birthDateButton; EditText firstNameEditText, lastNameEditText, birthCityEditText; + Spinner birthDeptSpinner; + LinearLayout phonesLayout, mainContent; @Override protected void onCreate(Bundle savedInstanceState) { @@ -58,20 +60,27 @@ public class MainActivity extends AppCompatActivity { return insets; }); + findAllViewById(); + birthDateButton.setOnClickListener(view -> showDatePicker()); + restorePreferences(); + } + + private void findAllViewById() { birthDateTextView = findViewById(R.id.birthDateTextView); birthDateButton = findViewById(R.id.birthDateEditText); firstNameEditText = findViewById(R.id.firstNameEditText); lastNameEditText = findViewById(R.id.lastNameEditText); birthCityEditText = findViewById(R.id.birthCityEditText); - birthDateButton.setOnClickListener(view -> showDatePicker()); - - restorePreferences(); + birthDeptSpinner = findViewById(R.id.birthDeptSpinner); + phonesLayout = findViewById(R.id.phonesLayout); + mainContent = findViewById(R.id.mainContent); } + @Override protected void onStart() { super.onStart(); - Spinner spinner = findViewById(R.id.birthDeptSpinner); + Spinner spinner = birthDeptSpinner; ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( this, R.array.departments, R.layout.spinner_item); adapter.setDropDownViewResource(R.layout.spinner_item); @@ -93,13 +102,6 @@ public class MainActivity extends AppCompatActivity { } private void restoreValues() { - EditText firstNameEditText = findViewById(R.id.firstNameEditText); - EditText lastNameEditText = findViewById(R.id.lastNameEditText); - Button birthDateButton = findViewById(R.id.birthDateEditText); - EditText birthCityEditText = findViewById(R.id.birthCityEditText); - Spinner birthDeptSpinner = findViewById(R.id.birthDeptSpinner); - LinearLayout phonesLayout = findViewById(R.id.phonesLayout); - firstNameEditText.setText(firstName); lastNameEditText.setText(lastName); birthDateButton.setText(birthDate); @@ -113,14 +115,8 @@ public class MainActivity extends AppCompatActivity { addPhoneNumberToLayout(phonesLayout, phoneNumber); } } - private void saveValues() { - EditText firstNameEditText = findViewById(R.id.firstNameEditText); - EditText lastNameEditText = findViewById(R.id.lastNameEditText); - Button birthDateButton = findViewById(R.id.birthDateEditText); - EditText birthCityEditText = findViewById(R.id.birthCityEditText); - Spinner birthDeptSpinner = findViewById(R.id.birthDeptSpinner); - LinearLayout phonesLayout = findViewById(R.id.phonesLayout); + private void saveValues() { firstName = firstNameEditText.getText().toString(); lastName = lastNameEditText.getText().toString(); birthDate = birthDateButton.getText().toString(); @@ -172,8 +168,8 @@ public class MainActivity extends AppCompatActivity { public void validateAction(View v) { - if (firstNameEditText.getText().toString().isEmpty() || lastNameEditText.getText().toString().isEmpty() || birthCityEditText.getText().toString().isEmpty() || birthDateButton.getText().toString().equalsIgnoreCase("pick date")){ - final Snackbar snackbar = Snackbar.make(findViewById(R.id.mainContent), getString(R.string.empty_warning), Snackbar.LENGTH_LONG); + if (firstNameEditText.getText().toString().isEmpty() || lastNameEditText.getText().toString().isEmpty() || birthCityEditText.getText().toString().isEmpty() || birthDateButton.getText().toString().equalsIgnoreCase(getString(R.string.pick_date_hint))) { + final Snackbar snackbar = Snackbar.make(mainContent, getString(R.string.empty_warning), Snackbar.LENGTH_LONG); snackbar.setAction(getString(R.string.close_snackbar), v1 -> snackbar.dismiss()); snackbar.show(); return; @@ -181,7 +177,7 @@ public class MainActivity extends AppCompatActivity { saveValues(); - SharedPreferences sp = getSharedPreferences("identity",0); + SharedPreferences sp = getSharedPreferences("identity", 0); SharedPreferences.Editor editor = sp.edit(); savePreferencesViaEditor(editor); @@ -201,15 +197,15 @@ public class MainActivity extends AppCompatActivity { } else { phoneNumbers = phoneNumbersList.toArray(new String[0]); } - User user = null; + User user; try { user = new User(firstName, lastName, birthCity, birthDeptString, parsedBirthDate, phoneNumbers); } catch (Exception e) { final Snackbar snackbar; - if (e.getMessage() == null){ - snackbar = Snackbar.make(findViewById(R.id.mainContent), "An error occured please try again.", Snackbar.LENGTH_LONG); + if (e.getMessage() == null) { + snackbar = Snackbar.make(mainContent, "An error occurred please try again.", Snackbar.LENGTH_LONG); } else { - snackbar = Snackbar.make(findViewById(R.id.mainContent), e.getMessage(), Snackbar.LENGTH_LONG); + snackbar = Snackbar.make(mainContent, e.getMessage(), Snackbar.LENGTH_LONG); } snackbar.setAction(getString(R.string.close_snackbar), v1 -> snackbar.dismiss()); snackbar.show(); @@ -221,16 +217,9 @@ public class MainActivity extends AppCompatActivity { } public void resetAction(MenuItem item) { - EditText firstNameEditText = findViewById(R.id.firstNameEditText); - EditText lastNameEditText = findViewById(R.id.lastNameEditText); - Button birthDateButton = findViewById(R.id.birthDateEditText); - EditText birthCityEditText = findViewById(R.id.birthCityEditText); - Spinner birthDeptSpinner = findViewById(R.id.birthDeptSpinner); - LinearLayout phonesLayout = findViewById(R.id.phonesLayout); - firstNameEditText.setText(""); lastNameEditText.setText(""); - birthDateButton.setText("Pick date"); + birthDateButton.setText(getString(R.string.pick_date_hint)); birthCityEditText.setText(""); birthDeptSpinner.setSelection(0); @@ -245,8 +234,8 @@ public class MainActivity extends AppCompatActivity { return true; } - public void addPhoneNumber (View v){ - ViewGroup viewGroup = (ViewGroup) findViewById(R.id.phonesLayout); + public void addPhoneNumber(View v) { + ViewGroup viewGroup = phonesLayout; LayoutInflater inflater = LayoutInflater.from(this); View duplicatedView = inflater.inflate(R.layout.phone_number_input, viewGroup, false); @@ -266,8 +255,7 @@ public class MainActivity extends AppCompatActivity { } - - protected void onSaveInstanceState(Bundle outState){ + protected void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); Log.i("Lifecycle", "onSaveInstanceState method"); saveValues(); @@ -279,7 +267,7 @@ public class MainActivity extends AppCompatActivity { outState.putStringArrayList("phones", phoneNumbersList); } - protected void onRestoreInstanceState(Bundle savedInstanceState){ + protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); firstName = savedInstanceState.getString("firstName"); lastName = savedInstanceState.getString("lastName"); @@ -290,7 +278,7 @@ public class MainActivity extends AppCompatActivity { restoreValues(); } - private void savePreferencesViaEditor(SharedPreferences.Editor editor){ + private void savePreferencesViaEditor(SharedPreferences.Editor editor) { editor.putString("firstName", firstName); editor.putString("lastName", lastName); @@ -302,11 +290,11 @@ public class MainActivity extends AppCompatActivity { editor.apply(); } - private void restorePreferences(){ - SharedPreferences sp = getSharedPreferences("identity",0); + private void restorePreferences() { + SharedPreferences sp = getSharedPreferences("identity", 0); firstName = sp.getString("firstName", ""); lastName = sp.getString("lastName", ""); - birthDate = sp.getString("birthDate", "Pick date"); + birthDate = sp.getString("birthDate", getString(R.string.pick_date_hint)); birthCity = sp.getString("birthCity", ""); birthDept = sp.getInt("birthDept", 0); @@ -330,7 +318,7 @@ public class MainActivity extends AppCompatActivity { private void openWikipedia() { if (birthCity == null || birthCity.trim().isEmpty()) { - Snackbar.make(findViewById(R.id.mainContent), "Please enter a birth city first", Snackbar.LENGTH_LONG).show(); + Snackbar.make(mainContent, "Please enter a birth city first", Snackbar.LENGTH_LONG).show(); return; } @@ -340,20 +328,20 @@ public class MainActivity extends AppCompatActivity { if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } else { - Snackbar.make(findViewById(R.id.mainContent), "No browser found to open Wikipedia", Snackbar.LENGTH_LONG).show(); + Snackbar.make(mainContent, "No browser found to open Wikipedia", Snackbar.LENGTH_LONG).show(); } } private void shareCity() { if (birthCity == null || birthCity.trim().isEmpty()) { - Snackbar.make(findViewById(R.id.mainContent), "Please enter a birth city first", Snackbar.LENGTH_LONG).show(); + Snackbar.make(mainContent, "Please enter a birth city first", Snackbar.LENGTH_LONG).show(); return; } Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); - intent.putExtra(intent.EXTRA_TEXT, birthCity); - Intent chooser = Intent.createChooser(intent, "Partage ville"); + intent.putExtra(Intent.EXTRA_TEXT, birthCity); + Intent chooser = Intent.createChooser(intent, "Share ville"); startActivity(chooser); } @@ -361,7 +349,7 @@ 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 + if (!birthDate.equals(getString(R.string.pick_date_hint))) { LocalDate date = null; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { date = LocalDate.parse(birthDate, DateTimeFormatter.ofPattern("d/M/yyyy")); @@ -380,9 +368,9 @@ public class MainActivity extends AppCompatActivity { 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 + birthDate = date.getDate().format(DateTimeFormatter.ofPattern("d/M/yyyy")); } - birthDateButton.setText(birthDate); // ✅ Met à jour le texte du bouton (si nécessaire) + birthDateButton.setText(birthDate); } } } diff --git a/app/src/main/java/fr/imt_atlantique/myfirstapplication/User.java b/app/src/main/java/fr/imt_atlantique/myfirstapplication/User.java index 863d360..b56fe5b 100644 --- a/app/src/main/java/fr/imt_atlantique/myfirstapplication/User.java +++ b/app/src/main/java/fr/imt_atlantique/myfirstapplication/User.java @@ -6,22 +6,16 @@ import android.os.Parcelable; import androidx.annotation.NonNull; -import java.text.DateFormat; import java.time.LocalDate; import java.time.format.DateTimeFormatter; -import java.util.ArrayList; import java.util.Arrays; -import java.util.Date; public class User implements Parcelable { - private String firstName; - private String lastName; - private String birthCity; - private String birthDept; - private LocalDate birthDate; - private String[] phoneNumbers; - - public User(String firstName, String lastName, String birthCity, String birthDept, LocalDate birthDate, String[] phoneNumbers) throws Exception { + private String firstName, lastName, birthCity, birthDept; + LocalDate birthDate; + String[] phoneNumbers; + + public User(String firstName, String lastName, String birthCity, String birthDept, LocalDate birthDate, String[] phoneNumbers) throws IllegalArgumentException { try { setFirstName(firstName); setLastName(lastName); @@ -35,7 +29,6 @@ public class User implements Parcelable { } - protected User(Parcel in) { firstName = in.readString(); lastName = in.readString(); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b8800e8..4582dc4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -17,4 +17,5 @@ <string name="phone_number_placeholder">0612345678</string> <string name="empty_warning">Please fill all empty field !</string> <string name="close_snackbar">Close</string> + <string name="pick_date_hint">Pick date</string> </resources> \ No newline at end of file -- GitLab