From 11d32ad7c3c4fafd83f3384bdcce4ee464731a23 Mon Sep 17 00:00:00 2001 From: Nezumi <123229563+Nez27@users.noreply.github.com> Date: Fri, 17 Mar 2023 11:40:08 +0700 Subject: [PATCH] Add update account information --- .../capstone/foodify/API/FoodApiToken.java | 5 ++ .../Activity/AccountAndProfileActivity.java | 86 +++++++++++++++---- .../Activity/FavoriteFoodActivity.java | 5 ++ .../foodify/Activity/FoodDetailActivity.java | 2 + .../foodify/Activity/SignUpActivity.java | 6 +- .../java/com/capstone/foodify/Common.java | 2 +- .../foodify/Fragment/ProfileFragment.java | 9 ++ .../java/com/capstone/foodify/Model/User.java | 9 ++ .../layout/activity_account_and_profile.xml | 6 +- 9 files changed, 106 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/com/capstone/foodify/API/FoodApiToken.java b/app/src/main/java/com/capstone/foodify/API/FoodApiToken.java index 7003d9b..741cd19 100644 --- a/app/src/main/java/com/capstone/foodify/API/FoodApiToken.java +++ b/app/src/main/java/com/capstone/foodify/API/FoodApiToken.java @@ -20,9 +20,11 @@ import okhttp3.Response; import retrofit2.Call; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; +import retrofit2.http.Body; import retrofit2.http.DELETE; import retrofit2.http.GET; import retrofit2.http.POST; +import retrofit2.http.PUT; import retrofit2.http.Path; import retrofit2.http.Query; @@ -57,4 +59,7 @@ public interface FoodApiToken { @GET("users/{userId}/loves") Call getListFavoriteFood(@Path("userId") int userId, @Query("pageNo") int pageNo, @Query("pageSize") int pageSize, @Query("sortBy") String sortBy, @Query("sortDir") String sortDir); + + @PUT("users/{userId}") + Call updateUser(@Path("userId") int userId, @Body User user); } diff --git a/app/src/main/java/com/capstone/foodify/Activity/AccountAndProfileActivity.java b/app/src/main/java/com/capstone/foodify/Activity/AccountAndProfileActivity.java index 72cd305..10f1b7d 100644 --- a/app/src/main/java/com/capstone/foodify/Activity/AccountAndProfileActivity.java +++ b/app/src/main/java/com/capstone/foodify/Activity/AccountAndProfileActivity.java @@ -9,26 +9,33 @@ import android.widget.DatePicker; import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; +import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; +import com.capstone.foodify.API.FoodApiToken; import com.capstone.foodify.Common; +import com.capstone.foodify.Model.User; import com.capstone.foodify.R; +import com.google.android.material.button.MaterialButton; import com.google.android.material.textfield.TextInputLayout; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Locale; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + public class AccountAndProfileActivity extends AppCompatActivity { TextInputLayout textInput_email, textInput_phone, textInput_fullName, textInput_birthDay; - EditText edt_birthday; + EditText edt_birthday, edt_email, edt_phone, edt_fullName; final Calendar myCalendar= Calendar.getInstance(); LinearLayout change_password; Button update_button; - ImageView back_image; @Override @@ -38,6 +45,10 @@ public class AccountAndProfileActivity extends AppCompatActivity { initComponent(); setFontUI(); + + //Init data + initData(); + chooseDateOfBirth(); change_password.setOnClickListener(new View.OnClickListener() { @@ -54,22 +65,39 @@ public class AccountAndProfileActivity extends AppCompatActivity { } }); + update_button.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + updateUser(); + } + }); + + } + + private void initData() { + edt_email.setText(Common.CURRENT_USER.getEmail()); + edt_phone.setText(Common.CURRENT_USER.getPhoneNumber()); + edt_fullName.setText(Common.CURRENT_USER.getFullName()); + edt_birthday.setText(Common.CURRENT_USER.getDateOfBirth()); } private void initComponent() { //Init Component - textInput_email= (TextInputLayout) findViewById(R.id.textInput_email); - textInput_phone = (TextInputLayout) findViewById(R.id.textInput_phone); - textInput_fullName = (TextInputLayout) findViewById(R.id.textInput_fullName); - textInput_birthDay = (TextInputLayout) findViewById(R.id.textInput_birthDay); - change_password = (LinearLayout) findViewById(R.id.change_password); + textInput_email= findViewById(R.id.textInput_email); + textInput_phone = findViewById(R.id.textInput_phone); + textInput_fullName = findViewById(R.id.textInput_fullName); + textInput_birthDay = findViewById(R.id.textInput_birthDay); + change_password = findViewById(R.id.change_password); - update_button = (Button) findViewById(R.id.updated_button); + update_button = findViewById(R.id.updated_button); - back_image = (ImageView) findViewById(R.id.back_image); + back_image = findViewById(R.id.back_image); - edt_birthday = (EditText) findViewById(R.id.edt_birthDay); + edt_birthday = findViewById(R.id.edt_birthDay); + edt_email = findViewById(R.id.edt_email); + edt_phone = findViewById(R.id.edt_phone); + edt_fullName = findViewById(R.id.edt_fullName); } private void setFontUI() { @@ -82,9 +110,14 @@ public class AccountAndProfileActivity extends AppCompatActivity { } private void chooseDateOfBirth() { - //Calendar date of birth + //Get date, month, year from user + String [] dateParts = edt_birthday.getText().toString().split("-"); + String day = dateParts[0]; + String month = dateParts[1]; + String year = dateParts[2]; - DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener() { + //Calendar date of birth + DatePickerDialog datePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener(){ @Override public void onDateSet(DatePicker view, int year, int month, int day) { myCalendar.set(Calendar.YEAR, year); @@ -92,18 +125,39 @@ public class AccountAndProfileActivity extends AppCompatActivity { myCalendar.set(Calendar.DAY_OF_MONTH,day); updateLabel(); } - }; + }, Integer.parseInt(year), Integer.parseInt(month) - 1, Integer.parseInt(day)); edt_birthday.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - new DatePickerDialog(AccountAndProfileActivity.this, date, myCalendar.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH)).show(); + datePickerDialog.show(); } }); } private void updateLabel(){ - String myFormat="dd/MM/yyyy"; - SimpleDateFormat dateFormat=new SimpleDateFormat(myFormat, Locale.US); + SimpleDateFormat dateFormat=new SimpleDateFormat(Common.FORMAT_DATE, Locale.US); edt_birthday.setText(dateFormat.format(myCalendar.getTime())); } + + private void updateUser() { + //Get data from form + String fullName = edt_fullName.getText().toString(); + String dateOfBirth = edt_birthday.getText().toString(); + + //Create object User + Common.CURRENT_USER.setFullName(fullName); + Common.CURRENT_USER.setDateOfBirth(dateOfBirth); + + FoodApiToken.apiService.updateUser(Common.CURRENT_USER.getId(), Common.CURRENT_USER).enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + Toast.makeText(AccountAndProfileActivity.this, "Cập nhật thành công!", Toast.LENGTH_SHORT).show(); + } + + @Override + public void onFailure(Call call, Throwable t) { + Common.showErrorServerNotification(AccountAndProfileActivity.this); + } + }); + } } \ No newline at end of file diff --git a/app/src/main/java/com/capstone/foodify/Activity/FavoriteFoodActivity.java b/app/src/main/java/com/capstone/foodify/Activity/FavoriteFoodActivity.java index 06f50bf..26af1b9 100644 --- a/app/src/main/java/com/capstone/foodify/Activity/FavoriteFoodActivity.java +++ b/app/src/main/java/com/capstone/foodify/Activity/FavoriteFoodActivity.java @@ -131,6 +131,11 @@ public class FavoriteFoodActivity extends AppCompatActivity implements ItemTouch LAST_PAGE = foodData.getPage().isLast(); } + if(LAST_PAGE){ + progressBar.setVisibility(View.GONE); + endOfListText.setVisibility(View.VISIBLE); + } + Collections.sort(listFavoriteFood); diff --git a/app/src/main/java/com/capstone/foodify/Activity/FoodDetailActivity.java b/app/src/main/java/com/capstone/foodify/Activity/FoodDetailActivity.java index c554d56..4703194 100644 --- a/app/src/main/java/com/capstone/foodify/Activity/FoodDetailActivity.java +++ b/app/src/main/java/com/capstone/foodify/Activity/FoodDetailActivity.java @@ -164,6 +164,8 @@ public class FoodDetailActivity extends AppCompatActivity { favorite_icon.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { + //TODO Check food has been in favorite food or not + addFoodToFavorite(); } }); diff --git a/app/src/main/java/com/capstone/foodify/Activity/SignUpActivity.java b/app/src/main/java/com/capstone/foodify/Activity/SignUpActivity.java index 2d4d291..2a107ba 100644 --- a/app/src/main/java/com/capstone/foodify/Activity/SignUpActivity.java +++ b/app/src/main/java/com/capstone/foodify/Activity/SignUpActivity.java @@ -53,7 +53,6 @@ import retrofit2.Callback; import retrofit2.Response; public class SignUpActivity extends AppCompatActivity { - public static final String FORMAT_DATE="dd/MM/yyyy"; TextInputLayout textInput_password, textInput_phone, textInput_email, textInput_address, textInput_confirmPassword, textInput_fullName, textInput_birthDay; final Calendar myCalendar= Calendar.getInstance(); @@ -210,7 +209,7 @@ public class SignUpActivity extends AppCompatActivity { } else { //Calculate user age - DateTimeFormatter formatter = DateTimeFormatter.ofPattern(FORMAT_DATE); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern(Common.FORMAT_DATE); LocalDate birthday = LocalDate.parse(edt_birthday.getText().toString(), formatter); if(calculateAge(birthday, LocalDate.now()) < 16){ textInput_birthDay.setError("Xin lỗi, bạn chưa đủ tuổi đề dùng app này!"); @@ -260,6 +259,7 @@ public class SignUpActivity extends AppCompatActivity { return dataHasValidate; } + private void getDataFromForm(){ email = edt_email.getText().toString(); phone = edt_phone.getText().toString(); @@ -465,7 +465,7 @@ public class SignUpActivity extends AppCompatActivity { } private void updateLabel(){ - SimpleDateFormat dateFormat=new SimpleDateFormat(FORMAT_DATE, Locale.US); + SimpleDateFormat dateFormat=new SimpleDateFormat(Common.FORMAT_DATE, Locale.US); edt_birthday.setText(dateFormat.format(myCalendar.getTime())); } diff --git a/app/src/main/java/com/capstone/foodify/Common.java b/app/src/main/java/com/capstone/foodify/Common.java index cbfa8e1..7e8584f 100644 --- a/app/src/main/java/com/capstone/foodify/Common.java +++ b/app/src/main/java/com/capstone/foodify/Common.java @@ -30,12 +30,12 @@ import java.util.List; import java.util.Locale; public class Common { + public static final String FORMAT_DATE="dd-MM-yyyy"; public static final String VALID_EMAIL_ADDRESS_REGEX = "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,6}$"; public static final String PHONE_CODE = "+84"; public static final String PASSWORD_PATTERN = "^(?=.*[0-9])(?=.*[A-Z])(?=.*[@#$%^&+=!_])(?=\\S+$).{4,}$"; public static final String PHONE_PATTERN = "^0[98753]{1}\\d{8}$"; public static List LIST_BASKET_FOOD = new ArrayList<>(); - public static List LIST_FAVORITE_FOOD = new ArrayList<>(); public static String TOKEN = null; public static User CURRENT_USER = null; diff --git a/app/src/main/java/com/capstone/foodify/Fragment/ProfileFragment.java b/app/src/main/java/com/capstone/foodify/Fragment/ProfileFragment.java index a4a1ca3..b9d4599 100644 --- a/app/src/main/java/com/capstone/foodify/Fragment/ProfileFragment.java +++ b/app/src/main/java/com/capstone/foodify/Fragment/ProfileFragment.java @@ -103,6 +103,7 @@ public class ProfileFragment extends Fragment { Paper.book().delete("user"); Common.TOKEN = null; + Common.CURRENT_USER = null; startActivity(new Intent(getContext(), MainActivity.class)); } @@ -115,4 +116,12 @@ public class ProfileFragment extends Fragment { }); return rootView; } + + @Override + public void onResume() { + super.onResume(); + + //Update user name on textview + user_name.setText(Common.CURRENT_USER.getFullName()); + } } \ No newline at end of file diff --git a/app/src/main/java/com/capstone/foodify/Model/User.java b/app/src/main/java/com/capstone/foodify/Model/User.java index 7a76d65..620faa6 100644 --- a/app/src/main/java/com/capstone/foodify/Model/User.java +++ b/app/src/main/java/com/capstone/foodify/Model/User.java @@ -17,6 +17,7 @@ public class User implements Serializable { private boolean isLocked; private String phoneNumber; private String roleName; + private int defaultAddress; private List
addresses; public User() { @@ -114,6 +115,14 @@ public class User implements Serializable { return addresses; } + public int getDefaultAddress() { + return defaultAddress; + } + + public void setDefaultAddress(int defaultAddress) { + this.defaultAddress = defaultAddress; + } + public void setAddresses(List
addresses) { this.addresses = addresses; } diff --git a/app/src/main/res/layout/activity_account_and_profile.xml b/app/src/main/res/layout/activity_account_and_profile.xml index 6ca2e19..eada0c1 100644 --- a/app/src/main/res/layout/activity_account_and_profile.xml +++ b/app/src/main/res/layout/activity_account_and_profile.xml @@ -88,15 +88,14 @@ app:boxBackgroundColor="@color/white" app:layout_constraintStart_toStartOf="parent" app:layout_constraintBottom_toTopOf="@id/textInput_birthDay" - app:startIconDrawable="@drawable/baseline_phone_24" + app:startIconDrawable="@drawable/baseline_abc_24" app:startIconTint="@color/primaryColor"> @@ -120,7 +119,6 @@ android:id="@+id/edt_birthDay" android:layout_width="match_parent" android:layout_height="match_parent" - android:text="25/5/2001" android:clickable="false" android:cursorVisible="false" android:focusable="false"