mirror of
https://github.com/Nezumi-2711/Foodify.git
synced 2026-09-22 20:00:50 +00:00
Add sign in method
This commit is contained in:
@@ -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<List<DistrictWardResponse>> districtResponse();
|
||||
|
||||
@GET("wishlist")
|
||||
Call<List<Food>> getListFavoriteFood();
|
||||
|
||||
@POST("wishlist")
|
||||
Call<Food> addFoodToFavorite(@Body Food food);
|
||||
|
||||
@DELETE("wishlist/{id}")
|
||||
Call<Food> removeFoodFromFavorite(@Path("id") int id);
|
||||
}
|
||||
|
||||
@@ -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<List<Food>> getListFavoriteFood();
|
||||
|
||||
@POST("wishlist")
|
||||
Call<Food> addFoodToFavorite(@Body Food food);
|
||||
|
||||
@DELETE("wishlist/{id}")
|
||||
Call<Food> removeFoodFromFavorite(@Path("id") int id);
|
||||
}
|
||||
@@ -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<Food> call, Throwable t) {
|
||||
Common.showNotificationError(t, getBaseContext(), FoodDetailActivity.this);
|
||||
|
||||
Log.e("ERROR", "Get Detail Food Error!");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -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<GetTokenResult>() {
|
||||
@Override
|
||||
public void onComplete(@NonNull Task<GetTokenResult> 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;
|
||||
|
||||
@@ -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<Foods> 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<Shop> call, Throwable t) {
|
||||
Common.showNotificationError(t, getBaseContext(), ShopDetailActivity.this);
|
||||
|
||||
Log.e("ERROR", "Get Detail Shop Error!");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -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<AuthResult>() {
|
||||
@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<GetTokenResult>() {
|
||||
@Override
|
||||
public void onComplete(@NonNull Task<GetTokenResult> 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();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -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<FoodFavoriteAdapt
|
||||
listFavoriteFood.remove(index);
|
||||
notifyItemRemoved(index);
|
||||
|
||||
FoodApi.apiService.removeFoodFromFavorite(index).enqueue(new Callback<Food>() {
|
||||
FoodApiToken.apiService.removeFoodFromFavorite(index).enqueue(new Callback<Food>() {
|
||||
@Override
|
||||
public void onResponse(Call<Food> call, Response<Food> response) {
|
||||
Toast.makeText(context, "Remove successful!", Toast.LENGTH_SHORT).show();
|
||||
@@ -98,7 +99,7 @@ public class FoodFavoriteAdapter extends RecyclerView.Adapter<FoodFavoriteAdapt
|
||||
listFavoriteFood.add(index, food);
|
||||
notifyItemInserted(index);
|
||||
|
||||
FoodApi.apiService.addFoodToFavorite(food).enqueue(new Callback<Food>() {
|
||||
FoodApiToken.apiService.addFoodToFavorite(food).enqueue(new Callback<Food>() {
|
||||
@Override
|
||||
public void onResponse(@NonNull Call<Food> call, @NonNull Response<Food> response) {
|
||||
Toast.makeText(context, "Add successful!", Toast.LENGTH_SHORT).show();
|
||||
|
||||
@@ -27,6 +27,8 @@ import java.util.Locale;
|
||||
public class Common {
|
||||
public static List<Basket> 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);
|
||||
|
||||
@@ -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<List<Food>>() {
|
||||
@Override
|
||||
public void onResponse(@NonNull Call<List<Food>> call, @NonNull Response<List<Food>> response) {
|
||||
List<Food> 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<List<Food>> 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<List<Food>>() {
|
||||
// @Override
|
||||
// public void onResponse(@NonNull Call<List<Food>> call, @NonNull Response<List<Food>> response) {
|
||||
// List<Food> 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<List<Food>> 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
|
||||
|
||||
@@ -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<Foods> 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<Foods> 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<Shops> call, Throwable t) {
|
||||
//Check internet connection
|
||||
Common.showNotificationError(t, getContext(), getActivity());
|
||||
|
||||
Log.e("ERROR", "Get all shop error!");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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<Foods> 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<List<Category>> 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<Foods> 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<Foods> call, Throwable t) {
|
||||
//Check internet connection
|
||||
Common.showNotificationError(t, getContext(), getActivity());
|
||||
|
||||
Log.e("ERROR", "Get list food error!");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.capstone.foodify.Model;
|
||||
package com.capstone.foodify.Model.Image;
|
||||
|
||||
public class Image {
|
||||
private int id;
|
||||
@@ -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<Image> images;
|
||||
private Page page;
|
||||
|
||||
public List<Image> getImages() {
|
||||
return images;
|
||||
}
|
||||
|
||||
public void setImages(List<Image> images) {
|
||||
this.images = images;
|
||||
}
|
||||
|
||||
public Page getPage() {
|
||||
return page;
|
||||
}
|
||||
|
||||
public void setPage(Page page) {
|
||||
this.page = page;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
<vector android:autoMirrored="true" android:height="64dp"
|
||||
android:tint="#000000" android:viewportHeight="24"
|
||||
android:viewportWidth="24" android:width="64dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M17,7l-1.41,1.41L18.17,11H8v2h10.17l-2.58,2.58L17,17l5,-5zM4,5h8V3H4c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h8v-2H4V5z"/>
|
||||
</vector>
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<solid android:color="@color/primaryColor" />
|
||||
<corners android:topLeftRadius="10dp" android:topRightRadius="10dp"
|
||||
android:bottomLeftRadius="10dp" android:bottomRightRadius="10dp"/>
|
||||
</shape>
|
||||
@@ -7,14 +7,12 @@
|
||||
tools:context=".Fragment.ProfileFragment">
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/user_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
android:visibility="gone"
|
||||
>
|
||||
|
||||
<com.makeramen.roundedimageview.RoundedImageView
|
||||
@@ -223,104 +221,4 @@
|
||||
</LinearLayout>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/guest_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:visibility="visible"
|
||||
>
|
||||
|
||||
<com.makeramen.roundedimageview.RoundedImageView
|
||||
android:id="@+id/guest_avatar"
|
||||
android:src="@drawable/profile_avatar"
|
||||
app:riv_corner_radius="180dp"
|
||||
android:layout_width="80dp"
|
||||
android:layout_height="80dp"
|
||||
android:scaleType="centerCrop"
|
||||
android:layout_marginBottom="200dp"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/text_view_guest"
|
||||
android:text="Guest"
|
||||
android:textSize="20sp"
|
||||
android:fontFamily="@font/opensans"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintTop_toBottomOf="@id/guest_avatar"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
/>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/button_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintTop_toBottomOf="@id/text_view_guest"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
android:orientation="horizontal"
|
||||
android:gravity="center"
|
||||
android:layout_marginTop="20dp"
|
||||
>
|
||||
|
||||
<Button
|
||||
android:id="@+id/sign_up_button"
|
||||
android:backgroundTint="@color/grayLight"
|
||||
android:text="Sign Up"
|
||||
android:textSize="18sp"
|
||||
android:fontFamily="@font/bebas"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/sign_in_button"
|
||||
android:text="Sign in"
|
||||
android:textSize="18sp"
|
||||
android:fontFamily="@font/bebas"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="30dp"
|
||||
/>
|
||||
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/version_app_text"
|
||||
android:text="Foodify V1.0.0"
|
||||
android:textSize="18sp"
|
||||
android:fontFamily="@font/opensans"
|
||||
android:textColor="@color/grayLight"
|
||||
android:layout_marginTop="30dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintTop_toBottomOf="@id/button_layout"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/copyright_text"
|
||||
android:text="Foodify Coperation"
|
||||
android:textSize="18sp"
|
||||
android:fontFamily="@font/opensans"
|
||||
android:textColor="@color/grayLight"
|
||||
android:layout_marginTop="20dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintTop_toBottomOf="@id/version_app_text"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
/>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
Reference in New Issue
Block a user