diff --git a/.idea/androidTestResultsUserPreferences.xml b/.idea/androidTestResultsUserPreferences.xml index abd2b2e..162046b 100644 --- a/.idea/androidTestResultsUserPreferences.xml +++ b/.idea/androidTestResultsUserPreferences.xml @@ -16,6 +16,32 @@ + + + + + + + + + + + + + + diff --git a/app/build.gradle b/app/build.gradle index 4299067..a35a216 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -71,7 +71,9 @@ dependencies { implementation 'com.github.slavce14:SJ-Dialog:1.5' implementation 'com.saadahmedev.popup-dialog:popup-dialog:1.0.2' implementation 'com.github.gabriel-TheCode:AestheticDialogs:1.3.6' + implementation 'io.github.pilgr:paperdb:2.7.2' //Firebase implementation platform('com.google.firebase:firebase-bom:31.2.3') + implementation("com.squareup.okhttp3:okhttp:4.10.0") } \ No newline at end of file diff --git a/app/src/main/java/com/capstone/foodify/API/FoodApi.java b/app/src/main/java/com/capstone/foodify/API/FoodApi.java index e776f42..53c1b78 100644 --- a/app/src/main/java/com/capstone/foodify/API/FoodApi.java +++ b/app/src/main/java/com/capstone/foodify/API/FoodApi.java @@ -23,11 +23,10 @@ import retrofit2.http.Query; public interface FoodApi { - Gson gson = new GsonBuilder().setDateFormat("HH:mm:ss dd-MM-yyyy").create(); FoodApi apiService = new Retrofit.Builder() - .baseUrl("http://10.0.2.2:8080/api/").addConverterFactory(GsonConverterFactory.create(gson)) + .baseUrl("http://192.168.1.183:8080/api/").addConverterFactory(GsonConverterFactory.create(gson)) .build() .create(FoodApi.class); @@ -66,13 +65,4 @@ public interface FoodApi { @GET("district") Call> districtResponse(); - - @GET("wishlist") - Call> getListFavoriteFood(); - - @POST("wishlist") - Call addFoodToFavorite(@Body Food food); - - @DELETE("wishlist/{id}") - Call removeFoodFromFavorite(@Path("id") int id); } diff --git a/app/src/main/java/com/capstone/foodify/API/FoodApiToken.java b/app/src/main/java/com/capstone/foodify/API/FoodApiToken.java new file mode 100644 index 0000000..915fed0 --- /dev/null +++ b/app/src/main/java/com/capstone/foodify/API/FoodApiToken.java @@ -0,0 +1,54 @@ +package com.capstone.foodify.API; + +import static com.capstone.foodify.Common.TOKEN; + +import androidx.annotation.NonNull; + +import com.capstone.foodify.Model.Food.Food; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +import java.io.IOException; +import java.util.List; + +import okhttp3.Interceptor; +import okhttp3.OkHttpClient; +import okhttp3.Request; +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.Path; + +public interface FoodApiToken { + Gson gson = new GsonBuilder().setDateFormat("HH:mm:ss dd-MM-yyyy").create(); + + OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new Interceptor() { + @NonNull + @Override + public Response intercept(@NonNull Chain chain) throws IOException { + Request newRequest = chain.request().newBuilder().addHeader("Authorization", "Bearer " + TOKEN).build(); + return chain.proceed(newRequest); + } + }).build(); + + + FoodApiToken apiService = new Retrofit.Builder() + .client(client) + .baseUrl("http://10.0.2.2:8080/api/").addConverterFactory(GsonConverterFactory.create(gson)) + .build() + .create(FoodApiToken.class); + + @GET("wishlist") + Call> getListFavoriteFood(); + + @POST("wishlist") + Call addFoodToFavorite(@Body Food food); + + @DELETE("wishlist/{id}") + Call removeFoodFromFavorite(@Path("id") int id); +} 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 9a1abe4..0b2532b 100644 --- a/app/src/main/java/com/capstone/foodify/Activity/FoodDetailActivity.java +++ b/app/src/main/java/com/capstone/foodify/Activity/FoodDetailActivity.java @@ -6,6 +6,7 @@ import android.content.Intent; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; +import android.util.Log; import android.view.Gravity; import android.view.View; import android.view.Window; @@ -25,7 +26,7 @@ import com.capstone.foodify.API.FoodApi; import com.capstone.foodify.Common; import com.capstone.foodify.Model.Basket.Basket; import com.capstone.foodify.Model.Food.Food; -import com.capstone.foodify.Model.Image; +import com.capstone.foodify.Model.Image.Image; import com.capstone.foodify.Model.Review.Review; import com.capstone.foodify.Adapter.ReviewAdapter; import com.capstone.foodify.R; @@ -267,6 +268,8 @@ public class FoodDetailActivity extends AppCompatActivity { @Override public void onFailure(Call call, Throwable t) { Common.showNotificationError(t, getBaseContext(), FoodDetailActivity.this); + + Log.e("ERROR", "Get Detail Food Error!"); } }); } diff --git a/app/src/main/java/com/capstone/foodify/Activity/MainActivity.java b/app/src/main/java/com/capstone/foodify/Activity/MainActivity.java index ce2c308..0943ae7 100644 --- a/app/src/main/java/com/capstone/foodify/Activity/MainActivity.java +++ b/app/src/main/java/com/capstone/foodify/Activity/MainActivity.java @@ -1,6 +1,7 @@ package com.capstone.foodify.Activity; import android.annotation.SuppressLint; +import android.content.Intent; import android.os.Bundle; import android.view.MenuItem; import android.widget.Toast; @@ -12,19 +13,58 @@ import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.viewpager2.widget.ViewPager2; +import com.capstone.foodify.API.FoodApi; import com.capstone.foodify.Common; +import com.capstone.foodify.Model.Image.Images; import com.capstone.foodify.R; import com.capstone.foodify.ViewPagerAdapter; +import com.google.android.gms.tasks.OnCompleteListener; +import com.google.android.gms.tasks.Task; import com.google.android.material.bottomnavigation.BottomNavigationView; import com.google.android.material.navigation.NavigationBarView; import com.google.firebase.FirebaseApp; +import com.google.firebase.auth.FirebaseAuth; +import com.google.firebase.auth.FirebaseUser; +import com.google.firebase.auth.GetTokenResult; +import com.saadahmedsoft.popupdialog.PopupDialog; + +import io.paperdb.Paper; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; public class MainActivity extends AppCompatActivity { ViewPager2 viewPager2; ViewPagerAdapter viewPagerAdapter; BottomNavigationView bottomNavigationView; + private FirebaseAuth mAuth; + private FirebaseUser user; + @Override + public void onStart() { + super.onStart(); + //Get user from Paper + user = Paper.book().read("user"); + + // Check if user is signed in (non-null) and update UI accordingly. + user = mAuth.getCurrentUser(); + if(user != null){ + user.getIdToken(true) + .addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if(task.isSuccessful()){ + Common.TOKEN = task.getResult().getToken(); + } else { + Toast.makeText(MainActivity.this, "Error when taking token!", Toast.LENGTH_SHORT).show(); + } + } + }); + } + + + } @Override protected void onCreate(Bundle savedInstanceState) { @@ -33,6 +73,12 @@ public class MainActivity extends AppCompatActivity { AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO); setContentView(R.layout.activity_main); + //Initialize Firebase Auth + mAuth = FirebaseAuth.getInstance(); + + //Paper Init + Paper.init(this); + initComponent(); bottomNavigation(); @@ -62,10 +108,18 @@ public class MainActivity extends AppCompatActivity { viewPager2.setCurrentItem(2); break; case R.id.activity_favorite: - viewPager2.setCurrentItem(3); + if(Common.TOKEN != null){ + viewPager2.setCurrentItem(3); + } else { + startActivity(new Intent(MainActivity.this, SignInActivity.class)); + } break; case R.id.activity_profile: - viewPager2.setCurrentItem(4); + if(Common.TOKEN != null){ + viewPager2.setCurrentItem(4); + } else { + startActivity(new Intent(MainActivity.this, SignInActivity.class)); + } break; } return false; diff --git a/app/src/main/java/com/capstone/foodify/Activity/ShopDetailActivity.java b/app/src/main/java/com/capstone/foodify/Activity/ShopDetailActivity.java index d806031..e9729b9 100644 --- a/app/src/main/java/com/capstone/foodify/Activity/ShopDetailActivity.java +++ b/app/src/main/java/com/capstone/foodify/Activity/ShopDetailActivity.java @@ -8,6 +8,7 @@ import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import android.os.Bundle; +import android.util.Log; import android.view.View; import android.widget.ImageView; import android.widget.ProgressBar; @@ -135,6 +136,8 @@ public class ShopDetailActivity extends AppCompatActivity { public void onFailure(Call call, Throwable t) { //Check internet connection Common.showNotificationError(t, getBaseContext(), ShopDetailActivity.this); + + Log.e("ERROR", "List Food By Shop Id Error!"); } }); } @@ -155,6 +158,8 @@ public class ShopDetailActivity extends AppCompatActivity { @Override public void onFailure(Call call, Throwable t) { Common.showNotificationError(t, getBaseContext(), ShopDetailActivity.this); + + Log.e("ERROR", "Get Detail Shop Error!"); } }); } diff --git a/app/src/main/java/com/capstone/foodify/Activity/SignInActivity.java b/app/src/main/java/com/capstone/foodify/Activity/SignInActivity.java index 69b438b..62de475 100644 --- a/app/src/main/java/com/capstone/foodify/Activity/SignInActivity.java +++ b/app/src/main/java/com/capstone/foodify/Activity/SignInActivity.java @@ -25,29 +25,37 @@ import com.google.firebase.auth.AuthResult; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; import com.google.firebase.auth.GetTokenResult; +import com.saadahmedsoft.popupdialog.PopupDialog; +import com.saadahmedsoft.popupdialog.Styles; + +import io.paperdb.Paper; public class SignInActivity extends AppCompatActivity { private FirebaseAuth mAuth; TextView signUp_textView, forgotPassword_textView; - TextInputLayout textInput_account, textInput_password; TextInputEditText email, password; MaterialButton signInButton; - ImageView back_image; + PopupDialog popupDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + //Init firebase app FirebaseApp.initializeApp(SignInActivity.this); - setContentView(R.layout.activity_sign_in); + //Init Paper + Paper.init(this); // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance(); + //Init Popup Dialog + popupDialog = PopupDialog.getInstance(SignInActivity.this); + initComponent(); setFontUI(); @@ -73,10 +81,16 @@ public class SignInActivity extends AppCompatActivity { } }); + //Set event when user click sign in button signInButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { + + //Show progress bar + popupDialog.setStyle(Styles.PROGRESS).setProgressDialogTint(getResources().getColor(R.color.primaryColor, null)) + .setCancelable(false).showDialog(); + mAuth.signInWithEmailAndPassword(email.getText().toString(), password.getText().toString()) .addOnCompleteListener(SignInActivity.this, new OnCompleteListener() { @Override @@ -85,14 +99,20 @@ public class SignInActivity extends AppCompatActivity { // Sign in success, update UI with the signed-in user's information FirebaseUser user = mAuth.getCurrentUser(); + //Save user + Paper.book().write("user", user); + user.getIdToken(true) .addOnCompleteListener(new OnCompleteListener() { @Override public void onComplete(@NonNull Task task) { if(task.isSuccessful()){ - String idToken = task.getResult().getToken(); + Common.TOKEN = task.getResult().getToken(); - System.out.println("TOKEN: " + idToken); + //Dismiss progress bar dialog + popupDialog.dismissDialog(); + + startActivity(new Intent(SignInActivity.this, MainActivity.class)); } else { Toast.makeText(SignInActivity.this, "Error when taking token!", Toast.LENGTH_SHORT).show(); } @@ -100,8 +120,10 @@ public class SignInActivity extends AppCompatActivity { }); } else { // If sign in fails, display a message to the user. - Toast.makeText(SignInActivity.this, "Authentication failed.", + Toast.makeText(SignInActivity.this, "Thông tin đăng nhập không đúng! Vui lòng kiểm tra và thử lại!", Toast.LENGTH_SHORT).show(); + + popupDialog.dismissDialog(); } } }); diff --git a/app/src/main/java/com/capstone/foodify/Adapter/FoodFavoriteAdapter.java b/app/src/main/java/com/capstone/foodify/Adapter/FoodFavoriteAdapter.java index 11c996a..7f60c0d 100644 --- a/app/src/main/java/com/capstone/foodify/Adapter/FoodFavoriteAdapter.java +++ b/app/src/main/java/com/capstone/foodify/Adapter/FoodFavoriteAdapter.java @@ -13,6 +13,7 @@ import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import com.capstone.foodify.API.FoodApi; +import com.capstone.foodify.API.FoodApiToken; import com.capstone.foodify.Model.Food.Food; import com.capstone.foodify.R; @@ -81,7 +82,7 @@ public class FoodFavoriteAdapter extends RecyclerView.Adapter() { + FoodApiToken.apiService.removeFoodFromFavorite(index).enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { Toast.makeText(context, "Remove successful!", Toast.LENGTH_SHORT).show(); @@ -98,7 +99,7 @@ public class FoodFavoriteAdapter extends RecyclerView.Adapter() { + FoodApiToken.apiService.addFoodToFavorite(food).enqueue(new Callback() { @Override public void onResponse(@NonNull Call call, @NonNull Response response) { Toast.makeText(context, "Add successful!", Toast.LENGTH_SHORT).show(); diff --git a/app/src/main/java/com/capstone/foodify/Common.java b/app/src/main/java/com/capstone/foodify/Common.java index 2cea49e..e1c8aa2 100644 --- a/app/src/main/java/com/capstone/foodify/Common.java +++ b/app/src/main/java/com/capstone/foodify/Common.java @@ -27,6 +27,8 @@ import java.util.Locale; public class Common { public static List LIST_BASKET_FOOD = new ArrayList<>(); + public static String TOKEN = null; + public static String changeCurrencyUnit(float price){ Locale locale = new Locale("vi", "VN"); NumberFormat fmt = NumberFormat.getCurrencyInstance(locale); diff --git a/app/src/main/java/com/capstone/foodify/Fragment/FavoriteFragment.java b/app/src/main/java/com/capstone/foodify/Fragment/FavoriteFragment.java index 5095e9e..630f6f8 100644 --- a/app/src/main/java/com/capstone/foodify/Fragment/FavoriteFragment.java +++ b/app/src/main/java/com/capstone/foodify/Fragment/FavoriteFragment.java @@ -11,12 +11,14 @@ import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Toast; import com.capstone.foodify.API.FoodApi; +import com.capstone.foodify.API.FoodApiToken; import com.capstone.foodify.Common; import com.capstone.foodify.ItemTouchHelperListener; import com.capstone.foodify.Model.Food.Food; @@ -67,31 +69,34 @@ public class FavoriteFragment extends Fragment implements ItemTouchHelperListene private void getListFavoriteFood() { //Get data from api - FoodApi.apiService.getListFavoriteFood().enqueue(new Callback>() { - @Override - public void onResponse(@NonNull Call> call, @NonNull Response> response) { - List listFoodData = response.body(); - if(listFoodData != null){ - listFavoriteFood.addAll(listFoodData); - } - Collections.sort(listFavoriteFood); - - adapter.setData(listFavoriteFood); - recyclerView_favorite_food.setAdapter(adapter); - } - - @Override - public void onFailure(Call> call, Throwable t) { - //Check internet connection - if(Common.checkInternetConnection(getContext())){ - //Has internet connection - Toast.makeText(getContext(), "Error: " + t, Toast.LENGTH_SHORT).show(); - } else { - //No internet, show notification - Common.showErrorInternetConnectionNotification(getActivity()); - } - } - }); +// FoodApiToken.apiService.getListFavoriteFood().enqueue(new Callback>() { +// @Override +// public void onResponse(@NonNull Call> call, @NonNull Response> response) { +// List listFoodData = response.body(); +// if(listFoodData != null){ +// listFavoriteFood.addAll(listFoodData); +// } +// Collections.sort(listFavoriteFood); +// +// adapter.setData(listFavoriteFood); +// recyclerView_favorite_food.setAdapter(adapter); +// } +// +// @Override +// public void onFailure(Call> call, Throwable t) { +// //Check internet connection +// if(Common.checkInternetConnection(getContext())){ +// //Has internet connection +// Toast.makeText(getContext(), "Error: " + t, Toast.LENGTH_SHORT).show(); +// } else { +// //No internet, show notification +// Common.showErrorInternetConnectionNotification(getActivity()); +// +// Log.e("ERROR", "Get list favorite food error!"); +// +// } +// } +// }); } @Override diff --git a/app/src/main/java/com/capstone/foodify/Fragment/HomeFragment.java b/app/src/main/java/com/capstone/foodify/Fragment/HomeFragment.java index be89330..f3fc765 100644 --- a/app/src/main/java/com/capstone/foodify/Fragment/HomeFragment.java +++ b/app/src/main/java/com/capstone/foodify/Fragment/HomeFragment.java @@ -1,6 +1,7 @@ package com.capstone.foodify.Fragment; import android.os.Bundle; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -114,6 +115,9 @@ public class HomeFragment extends Fragment { public void onFailure(Call call, Throwable t) { //Check internet connection Common.showNotificationError(t, getContext(), getActivity()); + + Log.e("ERROR", "Get recommend food error!"); + } }); } @@ -138,6 +142,9 @@ public class HomeFragment extends Fragment { public void onFailure(Call call, Throwable t) { //Check internet connection Common.showNotificationError(t,getContext(), getActivity()); + + Log.e("ERROR", "Get recent food error!"); + } }); } @@ -161,6 +168,8 @@ public class HomeFragment extends Fragment { public void onFailure(Call call, Throwable t) { //Check internet connection Common.showNotificationError(t, getContext(), getActivity()); + + Log.e("ERROR", "Get all shop error!"); } }); } 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 91897c6..bbcbff1 100644 --- a/app/src/main/java/com/capstone/foodify/Fragment/ProfileFragment.java +++ b/app/src/main/java/com/capstone/foodify/Fragment/ProfileFragment.java @@ -1,5 +1,6 @@ package com.capstone.foodify.Fragment; +import android.app.Dialog; import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; @@ -8,37 +9,38 @@ import android.view.ViewGroup; import android.widget.Button; import android.widget.LinearLayout; +import androidx.constraintlayout.widget.ConstraintLayout; import androidx.fragment.app.Fragment; import com.capstone.foodify.Activity.AccountAndProfileActivity; import com.capstone.foodify.Activity.AddressManagerActivity; +import com.capstone.foodify.Activity.MainActivity; import com.capstone.foodify.Activity.OrderActivity; import com.capstone.foodify.Activity.SignInActivity; import com.capstone.foodify.Activity.SignUpActivity; +import com.capstone.foodify.Common; import com.capstone.foodify.R; +import com.google.firebase.auth.FirebaseAuth; +import com.saadahmedsoft.popupdialog.PopupDialog; +import com.saadahmedsoft.popupdialog.Styles; +import com.saadahmedsoft.popupdialog.listener.OnDialogButtonClickListener; + +import io.paperdb.Paper; public class ProfileFragment extends Fragment { - - Button btnSignUp, btnSignIn; - - LinearLayout account_and_profile, manage_address, order_history; + LinearLayout account_and_profile, manage_address, order_history, log_out; + PopupDialog popupDialog; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View rootView = inflater.inflate(R.layout.fragment_profile, container, false); - btnSignUp = rootView.findViewById(R.id.sign_up_button); account_and_profile = rootView.findViewById(R.id.account_and_profile); manage_address = rootView.findViewById(R.id.manage_address); order_history = rootView.findViewById(R.id.order_history); - btnSignIn = rootView.findViewById(R.id.sign_in_button); + log_out = rootView.findViewById(R.id.log_out); - btnSignUp.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - startActivity(new Intent(getActivity(), SignUpActivity.class)); - } - }); + popupDialog = PopupDialog.getInstance(getContext()); account_and_profile.setOnClickListener(new View.OnClickListener() { @Override @@ -61,10 +63,37 @@ public class ProfileFragment extends Fragment { } }); - btnSignIn.setOnClickListener(new View.OnClickListener() { + log_out.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - getContext().startActivity(new Intent(getContext(), SignInActivity.class)); + + PopupDialog.getInstance(getContext()) + .setStyle(Styles.STANDARD) + .setHeading("Đăng xuất?") + .setDescription("Bạn thực sự muốn đăng xuất?") + .setPopupDialogIcon(R.drawable.baseline_logout) + .setPopupDialogIconTint(R.color.primaryColor) + .setPositiveButtonBackground(R.drawable.bg_color_primary_corner) + .setPositiveButtonText("Có") + .setNegativeButtonText("Không") + .setCancelable(false) + .showDialog(new OnDialogButtonClickListener() { + @Override + public void onPositiveClicked(Dialog dialog) { + FirebaseAuth.getInstance().signOut(); + + //Delete user from local storage + Paper.book().delete("user"); + + Common.TOKEN = null; + startActivity(new Intent(getContext(), MainActivity.class)); + } + + @Override + public void onNegativeClicked(Dialog dialog) { + super.onNegativeClicked(dialog); + } + }); } }); return rootView; diff --git a/app/src/main/java/com/capstone/foodify/Fragment/SearchFragment.java b/app/src/main/java/com/capstone/foodify/Fragment/SearchFragment.java index 85cff1e..e765ee2 100644 --- a/app/src/main/java/com/capstone/foodify/Fragment/SearchFragment.java +++ b/app/src/main/java/com/capstone/foodify/Fragment/SearchFragment.java @@ -1,6 +1,7 @@ package com.capstone.foodify.Fragment; import android.os.Bundle; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -160,6 +161,8 @@ public class SearchFragment extends Fragment { public void onFailure(Call call, Throwable t) { //Check internet connection Common.showNotificationError(t, getContext(), getActivity()); + + Log.e("ERROR", "Get search food by name error!"); } }); } @@ -238,6 +241,8 @@ public class SearchFragment extends Fragment { public void onFailure(Call> call, Throwable t) { //Check internet connection Common.showNotificationError(t, getContext(), getActivity()); + + Log.e("ERROR", "Get list category Error!"); } }); } @@ -253,9 +258,10 @@ public class SearchFragment extends Fragment { @Override public void onFailure(Call call, Throwable t) { - //Check internet connection //Check internet connection Common.showNotificationError(t, getContext(), getActivity()); + + Log.e("ERROR", "Get List Food By Category Error!"); } }); } @@ -272,6 +278,8 @@ public class SearchFragment extends Fragment { public void onFailure(Call call, Throwable t) { //Check internet connection Common.showNotificationError(t, getContext(), getActivity()); + + Log.e("ERROR", "Get list food error!"); } }); } diff --git a/app/src/main/java/com/capstone/foodify/Model/Food/Food.java b/app/src/main/java/com/capstone/foodify/Model/Food/Food.java index 17db296..5f88bb1 100644 --- a/app/src/main/java/com/capstone/foodify/Model/Food/Food.java +++ b/app/src/main/java/com/capstone/foodify/Model/Food/Food.java @@ -1,7 +1,7 @@ package com.capstone.foodify.Model.Food; import com.capstone.foodify.Model.Category.Category; -import com.capstone.foodify.Model.Image; +import com.capstone.foodify.Model.Image.Image; import com.capstone.foodify.Model.Shop.Shop; import java.util.List; diff --git a/app/src/main/java/com/capstone/foodify/Model/Image.java b/app/src/main/java/com/capstone/foodify/Model/Image/Image.java similarity index 92% rename from app/src/main/java/com/capstone/foodify/Model/Image.java rename to app/src/main/java/com/capstone/foodify/Model/Image/Image.java index ea8efbe..936dbf3 100644 --- a/app/src/main/java/com/capstone/foodify/Model/Image.java +++ b/app/src/main/java/com/capstone/foodify/Model/Image/Image.java @@ -1,4 +1,4 @@ -package com.capstone.foodify.Model; +package com.capstone.foodify.Model.Image; public class Image { private int id; diff --git a/app/src/main/java/com/capstone/foodify/Model/Image/Images.java b/app/src/main/java/com/capstone/foodify/Model/Image/Images.java new file mode 100644 index 0000000..f4f2599 --- /dev/null +++ b/app/src/main/java/com/capstone/foodify/Model/Image/Images.java @@ -0,0 +1,26 @@ +package com.capstone.foodify.Model.Image; + +import com.capstone.foodify.Model.Page; + +import java.util.List; + +public class Images { + private List images; + private Page page; + + public List getImages() { + return images; + } + + public void setImages(List images) { + this.images = images; + } + + public Page getPage() { + return page; + } + + public void setPage(Page page) { + this.page = page; + } +} diff --git a/app/src/main/res/drawable/baseline_logout.xml b/app/src/main/res/drawable/baseline_logout.xml new file mode 100644 index 0000000..70d8b8f --- /dev/null +++ b/app/src/main/res/drawable/baseline_logout.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/bg_color_primary_corner.xml b/app/src/main/res/drawable/bg_color_primary_corner.xml new file mode 100644 index 0000000..7641064 --- /dev/null +++ b/app/src/main/res/drawable/bg_color_primary_corner.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_profile.xml b/app/src/main/res/layout/fragment_profile.xml index b741b5c..8221140 100644 --- a/app/src/main/res/layout/fragment_profile.xml +++ b/app/src/main/res/layout/fragment_profile.xml @@ -7,14 +7,12 @@ tools:context=".Fragment.ProfileFragment"> - - - - - - - - -