Fix bug and improve layout

This commit is contained in:
Nezumi
2023-04-15 10:21:09 +07:00
parent f91ca323b5
commit a77959a2d7
16 changed files with 202 additions and 87 deletions
@@ -61,12 +61,14 @@ import com.google.android.gms.tasks.OnSuccessListener;
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.appdistribution.FirebaseAppDistribution;
import com.google.firebase.appdistribution.InterruptionLevel;
import com.google.firebase.appdistribution.AppDistributionRelease;
import com.google.firebase.appdistribution.OnProgressListener;
import com.google.firebase.appdistribution.UpdateProgress;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.auth.GetTokenResult;
import com.google.firebase.messaging.FirebaseMessaging;
import com.techiness.progressdialoglibrary.ProgressDialog;
import java.util.Arrays;
import java.util.List;
@@ -79,13 +81,11 @@ import retrofit2.Response;
public class MainActivity extends AppCompatActivity {
public static boolean slider, shop, recommendFood, recentFood, loadUser;
private final FirebaseAppDistribution firebaseAppDistribution = FirebaseAppDistribution.getInstance();
private ViewPager2 viewPager2;
private BottomNavigationView bottomNavigationView;
private FirebaseAuth mAuth;
private FirebaseUser user;
private static ConstraintLayout progressLayout;
//Location
private static final int REQUEST_CHECK_SETTINGS = 100;
private static final long UPDATE_INTERVAL_IN_MILLISECONDS = 1000;
@@ -169,6 +169,56 @@ public class MainActivity extends AppCompatActivity {
//Initialize Firebase Auth
mAuth = FirebaseAuth.getInstance();
if(Common.firebaseAppDistribution.isTesterSignedIn()){
//Customise progress dialog
ProgressDialog progressDialog = new ProgressDialog(this);
progressDialog.setTheme(ProgressDialog.THEME_LIGHT);
progressDialog.setMode(ProgressDialog.MODE_DETERMINATE);
progressDialog.setProgress(0);
progressDialog.setMessage("Xin vui lòng chờ...");
progressDialog.showProgressTextAsFraction(true);
progressDialog.setProgressTintList(getColorStateList(R.color.primaryColor));
progressDialog.setSecondaryProgressTintList(getColorStateList(R.color.primaryLightColor));
Common.firebaseAppDistribution.checkForNewRelease().addOnCompleteListener(new OnCompleteListener<AppDistributionRelease>() {
@Override
public void onComplete(@NonNull Task<AppDistributionRelease> task) {
if(task.isSuccessful()){
AppDistributionRelease appDistributionRelease = task.getResult();
if(appDistributionRelease != null){
progressDialog.show();
}
}
}
});
Common.firebaseAppDistribution.updateIfNewReleaseAvailable().addOnProgressListener(new OnProgressListener() {
@Override
public void onProgressUpdate(@NonNull UpdateProgress updateProgress) {
double totalBytes = updateProgress.getApkFileTotalBytes();
double number = (updateProgress.getApkBytesDownloaded() / totalBytes) * 100;
progressDialog.setProgress((int) number);
progressDialog.setSecondaryProgress((int) number + 10);
if(number == 100){
progressDialog.dismiss();
}
}
}).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(!task.isSuccessful()){
progressDialog.dismiss();
}
}
});
}
//Paper Init
Paper.init(this);
@@ -179,14 +229,12 @@ public class MainActivity extends AppCompatActivity {
startPowerSaverIntent(this);
checkNotificationPermission();
firebaseAppDistribution.showFeedbackNotification(
// Text providing notice to your testers about collection and
// processing of their feedback data
"Nhấp vào đây để đánh giá app Foodify!",
// The level of interruption for the notification
InterruptionLevel.HIGH);
getLocation();
}
private void getLocation() {
if (Common.CURRENT_LOCATION == null) {
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
mSettingsClient = LocationServices.getSettingsClient(this);
@@ -212,22 +260,21 @@ public class MainActivity extends AppCompatActivity {
checkLocationPermission();
}
//Init location user
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
if(mCurrentLocation != null){
Common.CURRENT_LOCATION = mCurrentLocation;
stopLocationUpdates();
}
//Init location user
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
if(mCurrentLocation != null){
Common.CURRENT_LOCATION = mCurrentLocation;
stopLocationUpdates();
}
}, 4000);
}
}, 4000);
}
}
private void getTokenFCM(){
@@ -355,8 +402,8 @@ public class MainActivity extends AppCompatActivity {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(requestCode == LOCATION_REQUEST_CODE){
if(grantResults[0] == PackageManager.PERMISSION_GRANTED){
Toast.makeText(this, "Đã cấp quyền thành công!", Toast.LENGTH_SHORT).show();
if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
getLocation();
} else {
showDialogPermission("Hãy cho ứng dụng truy cập vào vị trí của bạn để trải nghiệm tốt hơn!");
}
@@ -479,7 +479,7 @@ public class OrderCheckOutActivity extends AppCompatActivity {
new AestheticDialog.Builder(OrderCheckOutActivity.this, DialogStyle.FLAT, DialogType.SUCCESS)
.setTitle("Thành công!")
.setMessage("Bạn đã đặt hàng thành công cho đơn hàng #" + transactionId)
.setCancelable(true)
.setCancelable(false)
.setOnClickListener(new OnDialogClickListener() {
@Override
public void onClick(@NonNull AestheticDialog.Builder builder) {
@@ -1,28 +1,25 @@
package com.capstone.foodify.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkCapabilities;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.IntRange;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import com.capstone.foodify.API.FoodApiToken;
import com.capstone.foodify.Common;
import com.capstone.foodify.Fragment.HomeFragment;
import com.capstone.foodify.Model.User;
import com.capstone.foodify.R;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.Task;
import com.google.android.material.button.MaterialButton;
import com.google.android.material.textfield.TextInputEditText;
@@ -43,7 +40,7 @@ import retrofit2.Callback;
import retrofit2.Response;
public class SignInActivity extends AppCompatActivity {
private static final String TAG = "SignInActivity";
private FirebaseAuth mAuth;
private TextView signUp_textView, forgotPassword_textView;
private TextInputLayout textInput_email, textInput_password;
@@ -52,34 +49,10 @@ public class SignInActivity extends AppCompatActivity {
private ImageView back_image;
private ConstraintLayout progressLayout;
private String email, password = null;
@IntRange(from = 0, to = 3)
public int getConnectionType() {
int result = 0; // Returns connection type. 0: none; 1: mobile data; 2: wifi
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
if (cm != null) {
NetworkCapabilities capabilities = cm.getNetworkCapabilities(cm.getActiveNetwork());
if (capabilities != null) {
if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
result = 2;
} else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
result = 1;
} else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_VPN)) {
result = 3;
}
}
}
return result;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Check internet connection
if(getConnectionType() == 0){
Common.showErrorInternetConnectionNotification(this);
}
//Init firebase app
FirebaseApp.initializeApp(SignInActivity.this);
setContentView(R.layout.activity_sign_in);
@@ -274,7 +247,8 @@ public class SignInActivity extends AppCompatActivity {
@Override
public void onFailure(Call<User> call, Throwable t) {
Log.e(TAG, t.toString());
System.out.println("ERROR: " + t);
Common.showErrorServerNotification(SignInActivity.this, "Không thể đăng nhập tài khoản! Vui lòng thử lại sau!");
}
});
} else {
@@ -23,6 +23,7 @@ import com.capstone.foodify.Fragment.HomeFragment;
import com.capstone.foodify.Model.Basket;
import com.capstone.foodify.Model.Food;
import com.capstone.foodify.Model.User;
import com.google.firebase.appdistribution.FirebaseAppDistribution;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.thecode.aestheticdialogs.AestheticDialog;
@@ -41,7 +42,7 @@ import retrofit2.Response;
public class Common {
//https://foodify-backend-production.up.railway.app/
public static final String BASE_URL = "http://192.168.1.183:8080/api/";
public static final String BASE_URL = "https://foodify-backend-production.up.railway.app/api/";
public static String FCM_TOKEN = null;
public static Location CURRENT_LOCATION = null;
public static final String MAP_API = "AIzaSyAY14Ic32UP26Hg6GILznOfbBihiY5BUxw";
@@ -55,6 +56,7 @@ public class Common {
public static String TOKEN = null;
public static User CURRENT_USER = null;
public static String FINAL_SHOP = null;
public static final FirebaseAppDistribution firebaseAppDistribution = FirebaseAppDistribution.getInstance();
public static String changeCurrencyUnit(float price){
Locale locale = new Locale("vi", "VN");
@@ -1,5 +1,7 @@
package com.capstone.foodify.Fragment;
import static com.capstone.foodify.Common.firebaseAppDistribution;
import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle;
@@ -9,6 +11,7 @@ import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import com.capstone.foodify.Activity.AccountAndProfileActivity;
@@ -18,6 +21,9 @@ import com.capstone.foodify.Activity.MainActivity;
import com.capstone.foodify.Activity.OrderActivity;
import com.capstone.foodify.Common;
import com.capstone.foodify.R;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.appdistribution.FirebaseAppDistribution;
import com.google.firebase.auth.FirebaseAuth;
import com.makeramen.roundedimageview.RoundedImageView;
import com.saadahmedsoft.popupdialog.PopupDialog;
@@ -29,7 +35,7 @@ import io.paperdb.Paper;
public class ProfileFragment extends Fragment {
private static final String TAG = "ProfileFragment";
LinearLayout account_and_profile, manage_address, favorite_food, order_history, log_out;
LinearLayout account_and_profile, manage_address, favorite_food, order_history, feed_back, log_out;
PopupDialog popupDialog;
TextView user_name;
RoundedImageView profile_avatar;
@@ -40,13 +46,7 @@ public class ProfileFragment extends Fragment {
View rootView = inflater.inflate(R.layout.fragment_profile, container, false);
//Init component
account_and_profile = rootView.findViewById(R.id.account_and_profile);
manage_address = rootView.findViewById(R.id.manage_address);
favorite_food = rootView.findViewById(R.id.favorite_food);
order_history = rootView.findViewById(R.id.order_history);
log_out = rootView.findViewById(R.id.log_out);
user_name = rootView.findViewById(R.id.user_name);
profile_avatar = rootView.findViewById(R.id.profile_avatar);
initComponent(rootView);
popupDialog = PopupDialog.getInstance(getContext());
@@ -90,6 +90,13 @@ public class ProfileFragment extends Fragment {
}
});
feed_back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
firebaseAppDistribution.startFeedback("Cảm ơn vì sự đóng góp ý kiến từ các bạn!");
}
});
log_out.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@@ -129,6 +136,17 @@ public class ProfileFragment extends Fragment {
return rootView;
}
private void initComponent(View rootView) {
account_and_profile = rootView.findViewById(R.id.account_and_profile);
manage_address = rootView.findViewById(R.id.manage_address);
favorite_food = rootView.findViewById(R.id.favorite_food);
order_history = rootView.findViewById(R.id.order_history);
log_out = rootView.findViewById(R.id.log_out);
user_name = rootView.findViewById(R.id.user_name);
profile_avatar = rootView.findViewById(R.id.profile_avatar);
feed_back = rootView.findViewById(R.id.feedback);
}
@Override
public void onResume() {
super.onResume();