Add swipeRefreshLayout

This commit is contained in:
Nezumi
2023-04-13 09:57:29 +07:00
parent 45f927e7a3
commit 6d15fa4839
33 changed files with 1004 additions and 738 deletions
+16 -3
View File
@@ -5,6 +5,14 @@ plugins {
}
android {
signingConfigs {
release {
storeFile file('C:\\Users\\phanh\\Desktop\\mykeystore\\foodify-keystore.jks')
storePassword 'Phanhuuloi2@@1'
keyAlias 'foodify'
keyPassword 'Phanhuuloi2@@1'
}
}
namespace 'com.capstone.foodify'
compileSdk 33
@@ -16,11 +24,12 @@ android {
defaultConfig {
applicationId "com.capstone.foodify"
minSdk 26
targetSdk 31
targetSdk 32
versionCode 1
versionName "1.0"
versionName "0.1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
signingConfig signingConfigs.release
}
buildTypes {
@@ -67,8 +76,9 @@ dependencies {
implementation 'androidx.core:core-splashscreen:1.0.0'
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"
implementation 'com.google.code.gson:gson:2.10.1'
implementation 'com.google.android.material:material:1.7.0'
implementation 'com.google.android.material:material:1.8.0'
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.squareup.retrofit2:converter-scalars:2.9.0'
@@ -95,4 +105,7 @@ dependencies {
implementation platform('com.google.firebase:firebase-bom:31.2.3')
implementation("com.squareup.okhttp3:okhttp:4.10.0")
// ADD the API-only library to all variants
implementation 'com.google.firebase:firebase-appdistribution-api:16.0.0-beta07'
}
Binary file not shown.
+20
View File
@@ -0,0 +1,20 @@
{
"version": 3,
"artifactType": {
"type": "APK",
"kind": "Directory"
},
"applicationId": "com.capstone.foodify",
"variantName": "release",
"elements": [
{
"type": "SINGLE",
"filters": [],
"attributes": [],
"versionCode": 1,
"versionName": "0.1.0",
"outputFile": "app-release.apk"
}
],
"elementType": "File"
}
+17 -1
View File
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
xmlns:tools="http://schemas.android.com/tools"
tools:ignore="LockedOrientationActivity">
<uses-feature
android:name="android.hardware.telephony"
@@ -52,10 +53,12 @@
<activity
android:name=".Activity.TrackingOrderActivity"
android:exported="false"
android:screenOrientation="portrait"
android:label="@string/title_activity_tracking_order" />
<activity
android:name=".Activity.OrderCheckOutActivity"
android:exported="true"
android:screenOrientation="portrait"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
@@ -70,45 +73,58 @@
</activity>
<activity
android:name=".Activity.FavoriteFoodActivity"
android:screenOrientation="portrait"
android:exported="false" />
<activity
android:name=".Activity.ShopDetailActivity"
android:screenOrientation="portrait"
android:exported="false" />
<activity
android:name=".Activity.OrderDetailActivity"
android:screenOrientation="portrait"
android:exported="false" />
<activity
android:name=".Activity.OrderActivity"
android:screenOrientation="portrait"
android:exported="false" />
<activity
android:name=".Activity.AddressManagerActivity"
android:screenOrientation="portrait"
android:exported="false" />
<activity
android:name=".Activity.ChangePasswordActivity"
android:screenOrientation="portrait"
android:exported="false" />
<activity
android:name=".Activity.AccountAndProfileActivity"
android:screenOrientation="portrait"
android:exported="false" />
<activity
android:name=".Activity.FoodDetailActivity"
android:screenOrientation="portrait"
android:exported="false"
android:noHistory="true" />
<activity
android:name=".Activity.VerifyAccountActivity"
android:screenOrientation="portrait"
android:exported="false" />
<activity
android:name=".Activity.ForgotPasswordActivity"
android:screenOrientation="portrait"
android:exported="false"
android:noHistory="true" />
<activity
android:name=".Activity.SignInActivity"
android:screenOrientation="portrait"
android:exported="false" />
<activity
android:name=".Activity.SignUpActivity"
android:screenOrientation="portrait"
android:exported="false"
android:noHistory="true" />
<activity
android:name=".Activity.MainActivity"
android:screenOrientation="portrait"
android:exported="true"
android:theme="@style/Theme.Foodify.SplashScreen">
<intent-filter>
@@ -96,4 +96,7 @@ public interface FoodApi {
@GET("products/{productId}/user")
Call<CustomResponse> checkUserBuyProduct(@Path("productId") int productId, @Query("userId") int userId);
@GET("auth/check")
Call<CustomResponse> checkIdentifiedCode(@Query("code") String code);
}
@@ -296,12 +296,7 @@ public class AccountAndProfileActivity extends AppCompatActivity {
}
private void showDialogCaution() {
new AestheticDialog.Builder(this, DialogStyle.FLAT, DialogType.WARNING)
.setTitle("Email chưa được xác thực!")
.setMessage("Vui lòng xác thực email để bạn có thể thực hiện việc lấy lại mật khẩu nếu quên!")
.setAnimation(DialogAnimation.SHRINK)
.setCancelable(true)
.show();
Common.notificationDialog(this, DialogStyle.FLAT, DialogType.WARNING, "Email chưa được xác thực!", "Vui lòng xác thực email để bảo vệ tài khoản của bạn!");
}
private void updateUser(String imageUrl) {
@@ -155,11 +155,7 @@ public class ChangePasswordActivity extends AppCompatActivity {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
new AestheticDialog.Builder(ChangePasswordActivity.this, DialogStyle.RAINBOW, DialogType.SUCCESS)
.setTitle("Thàng công!")
.setMessage("Đã thay đổi mật khẩu thành công!")
.setCancelable(true)
.show();
Common.notificationDialog(ChangePasswordActivity.this, DialogStyle.RAINBOW, DialogType.SUCCESS, "Thành công!", "Đã thay đổi mật khẩu thành công!");
progressLayout.setVisibility(View.GONE);
} else {
@@ -169,11 +165,8 @@ public class ChangePasswordActivity extends AppCompatActivity {
}
});
} else {
new AestheticDialog.Builder(ChangePasswordActivity.this, DialogStyle.RAINBOW, DialogType.ERROR)
.setTitle("Lỗi!")
.setMessage("Mật khẩu không đúng! Xin vui lòng thử lại!")
.setCancelable(true)
.show();
Common.notificationDialog(ChangePasswordActivity.this, DialogStyle.RAINBOW, DialogType.ERROR, "Lỗi!", "Mật khẩu không đúng! Xin vui lòng thử lại!");
progressLayout.setVisibility(View.GONE);
}
}
@@ -26,6 +26,7 @@ import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.core.widget.NestedScrollView;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import com.capstone.foodify.API.FoodApi;
import com.capstone.foodify.API.FoodApiToken;
@@ -66,7 +67,6 @@ import retrofit2.Response;
public class FoodDetailActivity extends AppCompatActivity {
ArrayList<Comment> listComment = new ArrayList<>();
private static final int ACTION_CODE = 0;
private static final int CREATE_COMMENT = 1;
private static final int EDIT_COMMENT = 2;
private static int CURRENT_PAGE = 0;
@@ -94,6 +94,7 @@ public class FoodDetailActivity extends AppCompatActivity {
private CardView user_comment_layout;
private Comment commentUser = null;
private ChipGroup list_category;
private SwipeRefreshLayout swipeRefreshLayout;
private void initComponent() {
horizontalQuantitizer = findViewById(R.id.quantity_option);
@@ -124,6 +125,7 @@ public class FoodDetailActivity extends AppCompatActivity {
edt_button = findViewById(R.id.edit_button);
list_category = findViewById(R.id.list_category);
count_sold_txt = findViewById(R.id.count_sold);
swipeRefreshLayout = findViewById(R.id.swipe_refresh);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -143,14 +145,23 @@ public class FoodDetailActivity extends AppCompatActivity {
if (getIntent() != null)
foodId = getIntent().getStringExtra("FoodId");
commentAdapter.setData(getListComment(0));
recyclerView_comment.setAdapter(commentAdapter);
hideUI();
checkUserBuyThisProduct();
getData();
swipeRefreshLayout.setColorSchemeColors(getResources().getColor(R.color.primaryColor, null));
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
listComment.clear();
getData();
swipeRefreshLayout.setRefreshing(false);
}
});
if(Common.CURRENT_USER == null){
@@ -183,8 +194,6 @@ public class FoodDetailActivity extends AppCompatActivity {
}
});
getFoodById(foodId);
//Turn previous action when click
back_image.setOnClickListener(new View.OnClickListener() {
@Override
@@ -203,10 +212,10 @@ public class FoodDetailActivity extends AppCompatActivity {
openCommentDialog(Gravity.CENTER, CREATE_COMMENT);
} else {
//If not
Toast.makeText(FoodDetailActivity.this, "Bạn cần phải mua sản phẩm trước khi bình luận!", Toast.LENGTH_SHORT).show();
Common.notificationDialog(FoodDetailActivity.this, DialogStyle.TOASTER, DialogType.INFO, "Thông báo!", "Bạn cần phải mua sản phẩm này trước khi bình luận!");
}
} else
Toast.makeText(FoodDetailActivity.this, "Bạn cần phải đăng nhập để thực hiện hành động này!", Toast.LENGTH_SHORT).show();
Common.notificationDialog(FoodDetailActivity.this, DialogStyle.TOASTER, DialogType.WARNING, "Thông báo!", "Bạn cần phải đăng nhập trước khi thực hiện hành động này!");
}
});
@@ -275,6 +284,13 @@ public class FoodDetailActivity extends AppCompatActivity {
});
}
private void getData() {
CURRENT_PAGE = 0;
commentAdapter.setData(getListComment(0));
checkUserBuyThisProduct();
getFoodById(foodId);
}
private void checkUserBuyThisProduct(){
if(Common.CURRENT_USER != null){
@@ -347,12 +363,7 @@ public class FoodDetailActivity extends AppCompatActivity {
if(Common.FINAL_SHOP.equals(food.getShop().getName())){
addFood();
} else {
new AestheticDialog.Builder(this, DialogStyle.FLAT, DialogType.INFO)
.setTitle("Thông báo!")
.setMessage("Bạn chỉ có thể đặt những món ăn cùng cửa hàng, xin vui lòng kiểm tra lại giỏ hàng!")
.setAnimation(DialogAnimation.SHRINK)
.setCancelable(true)
.show();
Common.notificationDialog(this, DialogStyle.FLAT, DialogType.INFO, "Thông báo!", "Bạn chỉ có thể đặt những món ăn cùng cửa hàng, xin vui lòng kiểm tra lại giỏ hàng!");
}
} else {
@@ -512,6 +523,7 @@ public class FoodDetailActivity extends AppCompatActivity {
count_sold_txt.setText(food.getSold() + " đã bán");
}
list_category.removeAllViews();
//Init category
for(Category category: food.getCategories()){
Chip chip = (Chip) inflater.inflate(R.layout.chip_item, null, false);
@@ -78,10 +78,11 @@ public class ForgotPasswordActivity extends AppCompatActivity {
boolean isNewUser = task.getResult().getSignInMethods().isEmpty();
if (isNewUser) {
new AestheticDialog.Builder(ForgotPasswordActivity.this, DialogStyle.TOASTER, DialogType.ERROR)
.setTitle("Thông báo!")
.setMessage("Tài khoản chưa được đăng ký ở hệ thống! Vui lòng kiểm tra lại")
.setCancelable(true).show();
Common.notificationDialog(ForgotPasswordActivity.this, DialogStyle.FLAT, DialogType.ERROR, "Thông báo!", "Email " +
"này chưa được đăng ký ở hệ thống! Vui lòng kiểm tra lại!");
progress_layout.setVisibility(View.GONE);
} else {
sendEmail();
}
@@ -101,10 +102,8 @@ public class ForgotPasswordActivity extends AppCompatActivity {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
new AestheticDialog.Builder(ForgotPasswordActivity.this, DialogStyle.TOASTER, DialogType.SUCCESS)
.setTitle("Email đã được gửi!")
.setMessage("Vui lòng kiểm tra hộp thư và làm theo hướng dẫn để tiếp tục!")
.setCancelable(true).show();
Common.notificationDialog(ForgotPasswordActivity.this, DialogStyle.FLAT, DialogType.SUCCESS, "Email đã được gửi", "Vui lòng kiểm tra " +
"hộp thư và làm theo hướng dẫn để tiếp tục!");
progress_layout.setVisibility(View.GONE);
}
@@ -23,7 +23,9 @@ import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.app.AppCompatDelegate;
import androidx.appcompat.widget.AppCompatCheckBox;
import androidx.constraintlayout.widget.ConstraintLayout;
@@ -31,9 +33,6 @@ import androidx.core.app.ActivityCompat;
import androidx.core.app.NotificationManagerCompat;
import androidx.core.content.ContextCompat;
import androidx.core.splashscreen.SplashScreen;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager2.widget.ViewPager2;
import com.capstone.foodify.API.FoodApiToken;
@@ -56,20 +55,19 @@ import com.google.android.gms.location.LocationSettingsResponse;
import com.google.android.gms.location.LocationSettingsStatusCodes;
import com.google.android.gms.location.Priority;
import com.google.android.gms.location.SettingsClient;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnFailureListener;
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.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.auth.GetTokenResult;
import com.google.firebase.messaging.FirebaseMessaging;
import org.objectweb.asm.Handle;
import java.util.Arrays;
import java.util.List;
@@ -80,6 +78,7 @@ import retrofit2.Response;
public class MainActivity extends AppCompatActivity {
FirebaseAppDistribution firebaseAppDistribution = FirebaseAppDistribution.getInstance();
ViewPager2 viewPager2;
ViewPagerAdapter viewPagerAdapter;
BottomNavigationView bottomNavigationView;
@@ -131,8 +130,6 @@ public class MainActivity extends AppCompatActivity {
HomeFragment.setNameUser();
getTokenFCM();
progressLayout.setVisibility(View.GONE);
}
}
@@ -168,6 +165,13 @@ 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);
if (Common.CURRENT_LOCATION == null) {
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
@@ -206,8 +210,10 @@ public class MainActivity extends AppCompatActivity {
stopLocationUpdates();
}
progressLayout.setVisibility(View.GONE);
}
}, 5000);
}, 4000);
}
@@ -230,6 +236,8 @@ public class MainActivity extends AppCompatActivity {
public void onResponse(Call<CustomResponse> call, Response<CustomResponse> response) {
if(response.code() != 200)
Toast.makeText(MainActivity.this, "Không thể cập nhật FCM Token. Mã lỗi: " + response.code(), Toast.LENGTH_SHORT).show();
progressLayout.setVisibility(View.GONE);
}
@Override
@@ -102,7 +102,7 @@ public class OrderCheckOutActivity extends AppCompatActivity {
spn_ward = findViewById(R.id.ward);
edt_address_detect = findViewById(R.id.edt_address_detect);
manual_input_address_layout = findViewById(R.id.manual_input_address_layout);
adapter = new OrderDetailAdapter();
adapter = new OrderDetailAdapter(OrderCheckOutActivity.this);
recyclerView = findViewById(R.id.list_order);
back_image = findViewById(R.id.back_image);
change_address_button = findViewById(R.id.change_address_button);
@@ -144,10 +144,8 @@ public class OrderCheckOutActivity extends AppCompatActivity {
//Check current location is null or not
if(Common.CURRENT_LOCATION == null){
auto_detect_location.setEnabled(false);
new AestheticDialog.Builder(OrderCheckOutActivity.this, DialogStyle.FLAT, DialogType.INFO)
.setTitle("Thông báo")
.setMessage("Tính năng \"Lấy vị trí theo thiết bị của bạn\" sẽ không khả dụng do ứng dụng chưa được cấp quyền vị trí!")
.setCancelable(true).show();
Common.notificationDialog(OrderCheckOutActivity.this, DialogStyle.FLAT, DialogType.INFO, "Thông báo", "Tính năng \"Lấy vị trí theo thiết bị của bạn\" sẽ không khả dụng do ứng dụng chưa được cấp quyền vị trí!");
}
@@ -254,12 +252,9 @@ public class OrderCheckOutActivity extends AppCompatActivity {
btn_Pay.setEnabled(true);
btn_ZaloPay.setEnabled(true);
} else {
new AestheticDialog.Builder(OrderCheckOutActivity.this, DialogStyle.FLAT, DialogType.INFO)
.setTitle("Thông báo!")
.setMessage("Chưa thể lấy được vị trí shop, vui lòng thử lại hoặc có thể chọn \"Đến shop lấy\" để tiếp tục!")
.setAnimation(DialogAnimation.SHRINK)
.setCancelable(true)
.show();
Common.notificationDialog(OrderCheckOutActivity.this, DialogStyle.FLAT, DialogType.INFO, "Thông báo!", "Chưa thể lấy được vị trí shop, vui lòng thử lại hoặc có thể chọn \"Đến shop lấy\" để tiếp tục!");
progress_layout.setVisibility(View.GONE);
btn_Pay.setEnabled(false);
@@ -395,11 +390,7 @@ public class OrderCheckOutActivity extends AppCompatActivity {
@Override
public void onPaymentCanceled(String zpTransToken, String appTransID) {
new AestheticDialog.Builder(OrderCheckOutActivity.this, DialogStyle.RAINBOW, DialogType.INFO)
.setTitle("Thông báo!")
.setMessage("Huỷ thanh toán thành công!")
.setCancelable(true)
.show();
Common.notificationDialog(OrderCheckOutActivity.this, DialogStyle.RAINBOW, DialogType.INFO, "Thông báo!", "Huỷ thanh toán thành công!");
progress_layout.setVisibility(View.GONE);
}
@@ -189,7 +189,7 @@ public class OrderDetailActivity extends AppCompatActivity {
address = findViewById(R.id.address);
orderTime = findViewById(R.id.order_time);
total = findViewById(R.id.total);
adapter = new OrderDetailAdapter();
adapter = new OrderDetailAdapter(OrderDetailActivity.this);
recyclerView = findViewById(R.id.recycler_view_order_detail);
back_image = findViewById(R.id.back_image);
btn_cancel_order = findViewById(R.id.cancel_order_button);
@@ -29,6 +29,8 @@ import com.capstone.foodify.Model.DistrictWardResponse;
import com.capstone.foodify.Model.Response.CustomResponse;
import com.capstone.foodify.Model.User;
import com.capstone.foodify.R;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.android.material.button.MaterialButton;
import com.google.android.material.textfield.TextInputLayout;
import com.google.firebase.FirebaseException;
@@ -36,6 +38,7 @@ import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.PhoneAuthCredential;
import com.google.firebase.auth.PhoneAuthOptions;
import com.google.firebase.auth.PhoneAuthProvider;
import com.google.firebase.auth.SignInMethodQueryResult;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
@@ -45,6 +48,7 @@ import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -64,7 +68,7 @@ public class SignUpActivity extends AppCompatActivity {
private MaterialButton signUpButton;
private ConstraintLayout progressLayout;
private String email, phone, name, dateOfBirth, address, district, ward, password = null, identifiedCode;
private static boolean validIdentifiedCode, validPhone, validEmail = false;
private static final ArrayList<String> wardList = new ArrayList<>();
private static final ArrayList<String> districtList = new ArrayList<>();
@@ -157,7 +161,10 @@ public class SignUpActivity extends AppCompatActivity {
public void onClick(View v) {
if(validateData()){
loading();
checkEmailOrPhoneExist();
checkIdentifiedCodeExist();
checkPhoneExist();
checkEmailExist();
}
}
});
@@ -197,7 +204,55 @@ public class SignUpActivity extends AppCompatActivity {
});
}
private void checkEmailOrPhoneExist(){
private void checkEmailExist(){
FirebaseAuth.getInstance().fetchSignInMethodsForEmail(email).addOnCompleteListener(new OnCompleteListener<SignInMethodQueryResult>() {
@Override
public void onComplete(@NonNull Task<SignInMethodQueryResult> task) {
boolean isNewUser = Objects.requireNonNull(task.getResult().getSignInMethods()).isEmpty();
if (!isNewUser) {
textInput_email.setError("Email này đã được đăng ký sử dụng!");
validEmail = false;
} else {
validEmail = true;
signUp();
}
}
});
}
private void checkIdentifiedCodeExist(){
FoodApi.apiService.checkIdentifiedCode(identifiedCode).enqueue(new Callback<CustomResponse>() {
@Override
public void onResponse(Call<CustomResponse> call, Response<CustomResponse> response) {
if(response.code() == 200){
CustomResponse tempData = response.body();
assert tempData != null;
if(tempData.isTrue()){
//Have identifiedCode exist
validIdentifiedCode = false;
textInput_id_card.setError("Số này đã được đăng ký!");
} else {
validIdentifiedCode = true;
textInput_id_card.setErrorEnabled(false);
signUp();
}
}
}
@Override
public void onFailure(Call<CustomResponse> call, Throwable t) {
}
});
}
private void checkPhoneExist(){
//Create user object
User user = new User(new Address(address, ward, district), dateOfBirth, email, name, identifiedCode, phone);
@@ -206,17 +261,16 @@ public class SignUpActivity extends AppCompatActivity {
public void onResponse(Call<CustomResponse> call, Response<CustomResponse> response) {
CustomResponse dataTemp = response.body();
boolean isExist = false;
if(dataTemp != null)
isExist = dataTemp.isTrue();
if(!isExist){
//If user not exist on database, the app will create account
signUp(user);
loadCompleted();
assert dataTemp != null;
if(dataTemp.isTrue()){
textInput_phone.setError("Số điện thoại đã được đăng ký!");
validPhone = false;
} else {
loadCompleted();
Toast.makeText(SignUpActivity.this, "Địa chỉ email hoặc số điện thoại đã trùng, vui lòng kiểm tra lại!", Toast.LENGTH_SHORT).show();
validPhone = true;
textInput_phone.setErrorEnabled(false);
signUp();
}
}
@@ -269,7 +323,7 @@ public class SignUpActivity extends AppCompatActivity {
}
//Check identified Code
if(identifiedCode.length() < 9 && identifiedCode.length() > 10){
if(identifiedCode.length() < 8 || identifiedCode.length() > 11){
textInput_id_card.setError("CCCD / CMND không hợp lệ!");
dataHasValidate = false;
} else {
@@ -355,47 +409,52 @@ public class SignUpActivity extends AppCompatActivity {
}
}
private void signUp(User user){
FirebaseAuth auth = FirebaseAuth.getInstance();
auth.setLanguageCode("vi");
PhoneAuthOptions options = PhoneAuthOptions.newBuilder(auth)
.setPhoneNumber(Common.PHONE_CODE + edt_phone.getText().toString())
.setTimeout(0L, TimeUnit.SECONDS)
.setActivity(this)
.setCallbacks(new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
@Override
public void onCodeSent(@NonNull String verificationId,
@NonNull PhoneAuthProvider.ForceResendingToken forceResendingToken) {
loadCompleted();
private void signUp(){
Intent intent = new Intent(SignUpActivity.this, VerifyAccountActivity.class);
intent.putExtra("user", user);
intent.putExtra("phone", edt_phone.getText().toString());
intent.putExtra("verificationId", verificationId);
intent.putExtra("token", forceResendingToken);
intent.putExtra("password", password);
startActivity(intent);
finish();
}
if(validEmail && validIdentifiedCode && validPhone){
User user = new User(new Address(address, ward, district), dateOfBirth, email, name, identifiedCode, phone);
@Override
public void onVerificationCompleted(@NonNull PhoneAuthCredential phoneAuthCredential) {
loadCompleted();
}
FirebaseAuth auth = FirebaseAuth.getInstance();
auth.setLanguageCode("vi");
PhoneAuthOptions options = PhoneAuthOptions.newBuilder(auth)
.setPhoneNumber(Common.PHONE_CODE + edt_phone.getText().toString())
.setTimeout(0L, TimeUnit.SECONDS)
.setActivity(this)
.setCallbacks(new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
@Override
public void onCodeSent(@NonNull String verificationId,
@NonNull PhoneAuthProvider.ForceResendingToken forceResendingToken) {
loadCompleted();
@Override
public void onVerificationFailed(@NonNull FirebaseException e) {
// ...
loadCompleted();
showError(e.toString());
}
})
.build();
PhoneAuthProvider.verifyPhoneNumber(options);
// [END auth_test_phone_verify]
Intent intent = new Intent(SignUpActivity.this, VerifyAccountActivity.class);
intent.putExtra("user", user);
intent.putExtra("phone", edt_phone.getText().toString());
intent.putExtra("verificationId", verificationId);
intent.putExtra("token", forceResendingToken);
intent.putExtra("password", password);
startActivity(intent);
finish();
}
@Override
public void onVerificationCompleted(@NonNull PhoneAuthCredential phoneAuthCredential) {
loadCompleted();
}
@Override
public void onVerificationFailed(@NonNull FirebaseException e) {
// ...
loadCompleted();
showError(e.toString());
}
}).build();
PhoneAuthProvider.verifyPhoneNumber(options);
// [END auth_test_phone_verify]
}
}
private void showError(String msg){
private void showError(String msg){
errorText.setText(msg);
}
@@ -1,7 +1,9 @@
package com.capstone.foodify.Adapter;
import android.annotation.SuppressLint;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -12,6 +14,7 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.capstone.foodify.Activity.FoodDetailActivity;
import com.capstone.foodify.Common;
import com.capstone.foodify.Fragment.BasketFragment;
import com.capstone.foodify.Model.Basket;
@@ -27,9 +30,11 @@ public class BasketAdapter extends RecyclerView.Adapter<BasketAdapter.BasketView
public List<Basket> listBasketFood;
private final BasketFragment basketFragment;
private Context context;
public BasketAdapter(BasketFragment basketFragment) {
public BasketAdapter(BasketFragment basketFragment, Context context) {
this.basketFragment = basketFragment;
this.context = context;
}
@SuppressLint("NotifyDataSetChanged")
@@ -123,6 +128,15 @@ public class BasketAdapter extends RecyclerView.Adapter<BasketAdapter.BasketView
}
}
});
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context, FoodDetailActivity.class);
intent.putExtra("FoodId", foodBasket.getId());
context.startActivity(intent);
}
});
}
private void calculateTotalPrice() {
@@ -93,12 +93,8 @@ public class FoodAdapter extends RecyclerView.Adapter<FoodAdapter.FoodViewHolder
Common.addFoodToBasket(food);
Toast.makeText(context, "Đã thêm " + food.getName() + " vào giỏ hàng!", Toast.LENGTH_SHORT).show();
} else {
new AestheticDialog.Builder((Activity) context, DialogStyle.FLAT, DialogType.INFO)
.setTitle("Thông báo!")
.setMessage("Bạn chỉ có thể đặt những món ăn cùng cửa hàng, xin vui lòng kiểm tra lại giỏ hàng!")
.setAnimation(DialogAnimation.SHRINK)
.setCancelable(true)
.show();
Common.notificationDialog((Activity) context, DialogStyle.FLAT, DialogType.INFO, "Thông báo!", "Bạn chỉ có thể đặt những món ăn cùng cửa hàng, xin vui lòng kiểm tra lại giỏ hàng!");
}
}
});
@@ -95,12 +95,8 @@ public class FoodFavoriteAdapter extends RecyclerView.Adapter<FoodFavoriteAdapt
Common.addFoodToBasket(food);
Toast.makeText(context, "Đã thêm " + food.getName() + " vào giỏ hàng!", Toast.LENGTH_SHORT).show();
} else {
new AestheticDialog.Builder((Activity) context, DialogStyle.FLAT, DialogType.INFO)
.setTitle("Thông báo!")
.setMessage("Bạn chỉ có thể đặt những món ăn cùng cửa hàng, xin vui lòng kiểm tra lại giỏ hàng!")
.setAnimation(DialogAnimation.SHRINK)
.setCancelable(true)
.show();
Common.notificationDialog((Activity) context, DialogStyle.FLAT, DialogType.INFO, "Thông báo!", "Bạn chỉ có thể đặt những món ăn cùng cửa hàng, xin vui lòng kiểm tra lại giỏ hàng!");
}
}
});
@@ -95,12 +95,8 @@ public class FoodSearchAdapter extends RecyclerView.Adapter<FoodSearchAdapter.Fo
Common.addFoodToBasket(food);
Toast.makeText(context, "Đã thêm " + food.getName() + " vào giỏ hàng!", Toast.LENGTH_SHORT).show();
} else {
new AestheticDialog.Builder((Activity) context, DialogStyle.FLAT, DialogType.INFO)
.setTitle("Thông báo!")
.setMessage("Bạn chỉ có thể đặt những món ăn cùng cửa hàng, xin vui lòng kiểm tra lại giỏ hàng!")
.setAnimation(DialogAnimation.SHRINK)
.setCancelable(true)
.show();
Common.notificationDialog((Activity) context, DialogStyle.FLAT, DialogType.INFO, "Thông báo!", "Bạn chỉ có thể đặt những món ăn cùng cửa hàng, xin vui lòng kiểm tra lại giỏ hàng!");
}
}
});
@@ -102,12 +102,7 @@ public class FoodShopAdapter extends RecyclerView.Adapter<FoodShopAdapter.FoodSh
Common.addFoodToBasket(food);
Toast.makeText(context, "Đã thêm " + food.getName() + " vào giỏ hàng!", Toast.LENGTH_SHORT).show();
} else {
new AestheticDialog.Builder((Activity) context, DialogStyle.FLAT, DialogType.INFO)
.setTitle("Thông báo!")
.setMessage("Bạn chỉ có thể đặt những món ăn cùng cửa hàng, xin vui lòng kiểm tra lại giỏ hàng!")
.setAnimation(DialogAnimation.SHRINK)
.setCancelable(true)
.show();
Common.notificationDialog((Activity) context, DialogStyle.FLAT, DialogType.INFO, "Thông báo!", "Bạn chỉ có thể đặt những món ăn cùng cửa hàng, xin vui lòng kiểm tra lại giỏ hàng!");
}
}
});
@@ -1,5 +1,7 @@
package com.capstone.foodify.Adapter;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -9,6 +11,7 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.capstone.foodify.Activity.FoodDetailActivity;
import com.capstone.foodify.Common;
import com.capstone.foodify.Model.Basket;
import com.capstone.foodify.Model.OrderDetail;
@@ -20,8 +23,10 @@ import java.util.List;
public class OrderDetailAdapter extends RecyclerView.Adapter<OrderDetailAdapter.OrderDetailViewHolder>{
public List<Basket> listFoodInBasket;
public OrderDetailAdapter(){}
public Context context;
public OrderDetailAdapter(Context context){
this.context = context;
}
public void setData(List<Basket> listFoodInBasket){
this.listFoodInBasket = listFoodInBasket;
@@ -65,6 +70,15 @@ public class OrderDetailAdapter extends RecyclerView.Adapter<OrderDetailAdapter.
}
holder.price.setText(Common.changeCurrencyUnit(cost));
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context, FoodDetailActivity.class);
intent.putExtra("FoodId", food.getId());
context.startActivity(intent);
}
});
}
@Override
@@ -40,7 +40,7 @@ import retrofit2.Callback;
import retrofit2.Response;
public class Common {
public static final String BASE_URL = "https://foodify-backend-production.up.railway.app/api/";
public static final String BASE_URL = "http://192.168.1.183:8080/api/";
public static String FCM_TOKEN = null;
public static Location CURRENT_LOCATION = null;
public static final String MAP_API = "AIzaSyAY14Ic32UP26Hg6GILznOfbBihiY5BUxw";
@@ -124,6 +124,14 @@ public class Common {
return result;
}
public static void notificationDialog(Activity activity, DialogStyle dialogStyle, DialogType dialogType, String title, String message){
new AestheticDialog.Builder(activity, dialogStyle, dialogType)
.setTitle(title)
.setMessage(message)
.setCancelable(true)
.show();
}
public static void showErrorInternetConnectionNotification(Activity activity){
new AestheticDialog.Builder(activity, DialogStyle.CONNECTIFY, DialogType.ERROR)
.setTitle("Lỗi kết nối mạng!")
@@ -55,7 +55,7 @@ public class BasketFragment extends Fragment implements ItemTouchHelperListener
//Init Component
recyclerView_basket_food = view.findViewById(R.id.recycler_view_basket_food);
listBasketFoodView = view.findViewById(R.id.list_basket_food_view);
adapter = new BasketAdapter(this);
adapter = new BasketAdapter(this, getContext());
total = view.findViewById(R.id.total_text_view);
empty_layout = view.findViewById(R.id.empty_layout);
btnCheckOut = view.findViewById(R.id.btnCheckOut);
@@ -45,7 +45,6 @@ public class HomeFragment extends Fragment {
private RecyclerView rcvMenu, recyclerView_restaurant;
private MenuAdapter menuAdapter;
private ShopAdapter shopAdapter;
private ConstraintLayout progressLayout;
private static TextView welcomeText;
@@ -60,7 +59,6 @@ public class HomeFragment extends Fragment {
menuAdapter = new MenuAdapter(getContext());
recyclerView_restaurant = view.findViewById(R.id.recycler_view_restaurant);
shopAdapter = new ShopAdapter(getContext());
progressLayout = getActivity().findViewById(R.id.progress_layout);
welcomeText = view.findViewById(R.id.welcome_text);
@@ -116,14 +114,10 @@ public class HomeFragment extends Fragment {
imageSlider.setImageList(slideModels, ScaleTypes.FIT);
//Dismiss progress bar
progressLayout.setVisibility(View.GONE);
}
@Override
public void onFailure(Call<List<Slider>> call, Throwable t) {
//Dismiss progress bar
progressLayout.setVisibility(View.GONE);
}
});
}
@@ -157,8 +151,6 @@ public class HomeFragment extends Fragment {
if(getActivity() != null)
Common.showNotificationError(getContext(), getActivity());
//Dismiss progress bar
progressLayout.setVisibility(View.GONE);
}
});
}
@@ -7,6 +7,7 @@ import androidx.core.widget.NestedScrollView;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import android.view.LayoutInflater;
import android.view.View;
@@ -44,6 +45,7 @@ public class CancelOrderFragment extends Fragment {
private ProgressBar progressBar;
private TextView endOfListText;
private LinearLayout empty_layout;
private SwipeRefreshLayout swipeRefreshLayout;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
@@ -53,7 +55,7 @@ public class CancelOrderFragment extends Fragment {
//Init Component
initComponent(view);
getOrderUser(0);
getOrderUser(CURRENT_PAGE);
orderAdapter = new OrderAdapter(getContext());
@@ -73,6 +75,22 @@ public class CancelOrderFragment extends Fragment {
});
}
swipeRefreshLayout.setColorSchemeColors(getResources().getColor(R.color.primaryColor, null));
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
listOrders.clear();
CURRENT_PAGE = 0;
getOrderUser(CURRENT_PAGE);
nestedScrollView.setVisibility(View.VISIBLE);
empty_layout.setVisibility(View.GONE);
swipeRefreshLayout.setRefreshing(false);
}
});
return view;
}
@@ -82,6 +100,7 @@ public class CancelOrderFragment extends Fragment {
progressBar = view.findViewById(R.id.progress_bar);
endOfListText = view.findViewById(R.id.end_of_list_text);
empty_layout = view.findViewById(R.id.empty_layout);
swipeRefreshLayout = view.findViewById(R.id.swipe_refresh);
}
private void getOrderUser(int page){
@@ -7,6 +7,7 @@ import androidx.core.widget.NestedScrollView;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import android.view.LayoutInflater;
import android.view.View;
@@ -45,6 +46,7 @@ public class CompleteOrderFragment extends Fragment {
private ProgressBar progressBar;
private TextView endOfListText;
private LinearLayout empty_layout;
private SwipeRefreshLayout swipeRefreshLayout;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
@@ -55,7 +57,7 @@ public class CompleteOrderFragment extends Fragment {
//Init Component
initComponent(view);
getOrderUser(0);
getOrderUser(CURRENT_PAGE);
orderAdapter = new OrderAdapter(getContext());
@@ -75,6 +77,22 @@ public class CompleteOrderFragment extends Fragment {
});
}
swipeRefreshLayout.setColorSchemeColors(getResources().getColor(R.color.primaryColor, null));
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
listOrders.clear();
CURRENT_PAGE = 0;
getOrderUser(CURRENT_PAGE);
nestedScrollView.setVisibility(View.VISIBLE);
empty_layout.setVisibility(View.GONE);
swipeRefreshLayout.setRefreshing(false);
}
});
return view;
}
@@ -84,6 +102,7 @@ public class CompleteOrderFragment extends Fragment {
progressBar = view.findViewById(R.id.progress_bar);
endOfListText = view.findViewById(R.id.end_of_list_text);
empty_layout = view.findViewById(R.id.empty_layout);
swipeRefreshLayout = view.findViewById(R.id.swipe_refresh);
}
private void getOrderUser(int page){
@@ -7,6 +7,7 @@ import androidx.core.widget.NestedScrollView;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import android.view.LayoutInflater;
import android.view.View;
@@ -45,6 +46,8 @@ public class PreparingFragment extends Fragment {
private TextView endOfListText;
private LinearLayout empty_layout;
private SwipeRefreshLayout swipeRefreshLayout;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
@@ -54,7 +57,7 @@ public class PreparingFragment extends Fragment {
//Init Component
initComponent(view);
getOrderUser(0);
getOrderUser(CURRENT_PAGE);
orderAdapter = new OrderAdapter(getContext());
@@ -74,6 +77,22 @@ public class PreparingFragment extends Fragment {
});
}
swipeRefreshLayout.setColorSchemeColors(getResources().getColor(R.color.primaryColor, null));
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
listOrders.clear();
CURRENT_PAGE = 0;
getOrderUser(CURRENT_PAGE);
nestedScrollView.setVisibility(View.VISIBLE);
empty_layout.setVisibility(View.GONE);
swipeRefreshLayout.setRefreshing(false);
}
});
return view;
}
@@ -83,6 +102,7 @@ public class PreparingFragment extends Fragment {
progressBar = view.findViewById(R.id.progress_bar);
endOfListText = view.findViewById(R.id.end_of_list_text);
empty_layout = view.findViewById(R.id.empty_layout);
swipeRefreshLayout = view.findViewById(R.id.swipe_refresh);
}
private void getOrderUser(int page){
@@ -15,6 +15,7 @@ import androidx.core.widget.NestedScrollView;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import com.capstone.foodify.API.FoodApiToken;
import com.capstone.foodify.Adapter.OrderAdapter;
@@ -44,6 +45,7 @@ public class ProcessOderFragment extends Fragment {
private ProgressBar progressBar;
private TextView endOfListText;
private LinearLayout empty_layout;
private SwipeRefreshLayout swipeRefreshLayout;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
@@ -54,10 +56,10 @@ public class ProcessOderFragment extends Fragment {
//Init Component
initComponent(view);
getOrderUser(0);
orderAdapter = new OrderAdapter(getContext());
getOrderUser(CURRENT_PAGE);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext(), RecyclerView.VERTICAL, false);
recyclerView.setLayoutManager(linearLayoutManager);
@@ -74,6 +76,23 @@ public class ProcessOderFragment extends Fragment {
});
}
swipeRefreshLayout.setColorSchemeColors(getResources().getColor(R.color.primaryColor, null));
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
listOrders.clear();
CURRENT_PAGE = 0;
getOrderUser(CURRENT_PAGE);
nestedScrollView.setVisibility(View.VISIBLE);
empty_layout.setVisibility(View.GONE);
swipeRefreshLayout.setRefreshing(false);
}
});
return view;
}
@@ -85,6 +104,7 @@ public class ProcessOderFragment extends Fragment {
progressBar = view.findViewById(R.id.progress_bar);
endOfListText = view.findViewById(R.id.end_of_list_text);
empty_layout = view.findViewById(R.id.empty_layout);
swipeRefreshLayout = view.findViewById(R.id.swipe_refresh);
}
private void getOrderUser(int page){
@@ -7,6 +7,7 @@ import androidx.core.widget.NestedScrollView;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import android.view.LayoutInflater;
import android.view.View;
@@ -45,6 +46,7 @@ public class ShipOrderFragment extends Fragment {
private ProgressBar progressBar;
private TextView endOfListText;
private LinearLayout empty_layout;
private SwipeRefreshLayout swipeRefreshLayout;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
@@ -55,7 +57,7 @@ public class ShipOrderFragment extends Fragment {
//Init Component
initComponent(view);
getOrderUser(0);
getOrderUser(CURRENT_PAGE);
orderAdapter = new OrderAdapter(getContext());
@@ -74,6 +76,23 @@ public class ShipOrderFragment extends Fragment {
}
});
}
swipeRefreshLayout.setColorSchemeColors(getResources().getColor(R.color.primaryColor, null));
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
listOrders.clear();
CURRENT_PAGE = 0;
getOrderUser(CURRENT_PAGE);
nestedScrollView.setVisibility(View.VISIBLE);
empty_layout.setVisibility(View.GONE);
swipeRefreshLayout.setRefreshing(false);
}
});
return view;
}
@@ -83,6 +102,7 @@ public class ShipOrderFragment extends Fragment {
progressBar = view.findViewById(R.id.progress_bar);
endOfListText = view.findViewById(R.id.end_of_list_text);
empty_layout = view.findViewById(R.id.empty_layout);
swipeRefreshLayout = view.findViewById(R.id.swipe_refresh);
}
private void getOrderUser(int page){
+390 -381
View File
@@ -44,427 +44,436 @@
</com.google.android.material.appbar.AppBarLayout>
<androidx.core.widget.NestedScrollView
android:id="@+id/food_detail"
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:id="@+id/swipe_refresh"
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/content_view"
<androidx.core.widget.NestedScrollView
android:id="@+id/food_detail"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_height="wrap_content"
>
<LinearLayout
android:id="@+id/linear_layout_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
>
<TextView
android:id="@+id/food_name_text_view"
android:textSize="30sp"
android:text="Food Name"
android:textColor="@color/black"
android:fontFamily="@font/bebas"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="0.8"
/>
<LinearLayout
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_weight="0.2"
android:orientation="vertical"
android:layout_gravity="center_vertical"
>
<TextView
android:id="@+id/discount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="-89%"
android:textSize="18sp"
android:textColor="@color/red"
android:layout_gravity="right"
/>
<ImageView
android:id="@+id/not_favorite"
android:src="@drawable/baseline_favorite_border_24"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginTop="10dp"
android:layout_gravity="right"
/>
<ImageView
android:id="@+id/is_favorite"
android:src="@drawable/baseline_favorite_24"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginTop="10dp"
android:layout_gravity="right"
android:visibility="gone"
/>
</LinearLayout>
</LinearLayout>
<TextView
android:id="@+id/shop_name_text_view"
android:textSize="20sp"
android:text="Shop Name"
android:textColor="@color/secondary"
android:fontFamily="@font/opensans"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/linear_layout_1"
app:layout_constraintStart_toStartOf="parent"
/>
<LinearLayout
android:id="@+id/rating_layout"
android:layout_width="match_parent"
android:layout_marginTop="10dp"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/shop_name_text_view"
app:layout_constraintStart_toStartOf="parent"
android:orientation="vertical"
android:gravity="center"
>
<com.willy.ratingbar.ScaleRatingBar
android:id="@+id/rating_bar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:srb_starPadding="5dp"
app:srb_clickable="false"
app:srb_starWidth="22dp"
app:srb_starHeight="22dp"
app:srb_numStars="5"
app:srb_scrollable="false"
/>
<TextView
android:id="@+id/count_rating_text_view"
android:textSize="13sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="235 đánh giá" />
<TextView
android:id="@+id/count_sold"
android:textSize="13sp"
android:layout_marginTop="5dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAlignment="center"
android:text="250 đã bán" />
</LinearLayout>
<LinearLayout
android:id="@+id/category"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@+id/rating_layout"
android:orientation="horizontal"
android:layout_marginTop="8dp"
>
<TextView
android:text="Danh mục:"
android:textSize="18sp"
android:fontFamily="@font/bebas"
android:textColor="@color/black"
android:layout_marginEnd="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
/>
<com.google.android.material.chip.ChipGroup
android:id="@+id/list_category"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
<TextView
android:id="@+id/description_text_view"
android:text="Mô tả"
android:textSize="18sp"
android:fontFamily="@font/bebas"
android:textColor="@color/black"
android:layout_marginTop="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/category"
app:layout_constraintStart_toStartOf="parent"
/>
<TextView
android:id="@+id/content_description_text_view"
android:fontFamily="@font/opensans"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
app:layout_constraintTop_toBottomOf="@id/description_text_view"
app:layout_constraintStart_toStartOf="parent"
/>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/constraintLayout"
android:id="@+id/content_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
app:layout_constraintTop_toBottomOf="@id/content_description_text_view"
app:layout_constraintStart_toStartOf="parent"
android:layout_height="match_parent"
>
<LinearLayout
android:id="@+id/linear_layout_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:orientation="vertical"
>
<TextView
android:text="Số lượng"
android:fontFamily="@font/bebas"
android:textColor="@color/primaryColor"
android:textSize="15sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<com.mcdev.quantitizerlibrary.HorizontalQuantitizer
android:id="@+id/quantity_option"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="-10dp"
app:layout_constraintTop_toBottomOf="@id/content_description_text_view"
app:layout_constraintStart_toStartOf="parent"
/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:orientation="vertical"
>
<TextView
android:id="@+id/total_text_view"
android:text="Giá"
android:fontFamily="@font/bebas"
android:textColor="@color/black"
android:textSize="15sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
/>
<TextView
android:id="@+id/price"
android:text="25.000 VND"
android:fontFamily="@font/bebas"
android:textColor="@color/primaryColor"
android:textSize="30sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<com.google.android.material.button.MaterialButton
android:id="@+id/add_to_basket_button"
style="@style/DefaultSolid"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="40dp"
android:layout_marginStart="40dp"
android:layout_marginEnd="40dp"
android:fontFamily="@font/bebas"
android:padding="10dp"
android:text="Add to basket - 15000 VND"
android:textSize="18sp"
app:layout_constraintTop_toBottomOf="@id/constraintLayout"
/>
<View
android:id="@+id/line"
android:layout_width="match_parent"
android:layout_height="2dp"
android:background="#c0c0c0"
android:layout_marginTop="5dp"
app:layout_constraintTop_toBottomOf="@id/add_to_basket_button"
/>
<LinearLayout
android:id="@+id/linear_layout_2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/add_to_basket_button"
app:layout_constraintStart_toStartOf="parent"
android:gravity="center_horizontal"
>
<Button
android:id="@+id/rating_button"
android:text="Bình luận"
android:backgroundTint="@color/yellow"
android:textColor="@color/black"
android:fontFamily="@font/opensans"
android:textAllCaps="false"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:drawableLeft="@drawable/pencil"
/>
</LinearLayout>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardElevation="5dp"
app:cardUseCompatPadding="true"
android:layout_marginTop="10dp"
app:layout_constraintTop_toBottomOf="@id/linear_layout_2"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:visibility="gone"
android:id="@+id/user_comment_layout"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/linear_layout_1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
>
<TextView
android:id="@+id/user_name_text_view"
android:text="User A"
android:fontFamily="@font/opensans"
android:id="@+id/food_name_text_view"
android:textSize="30sp"
android:text="Food Name"
android:textColor="@color/black"
android:textSize="16sp"
android:layout_width="wrap_content"
android:fontFamily="@font/bebas"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
/>
<com.willy.ratingbar.ScaleRatingBar
android:id="@+id/rating_bar_comment"
android:layout_width="110dp"
android:layout_height="26dp"
app:srb_starPadding="5dp"
app:srb_clickable="false"
app:srb_starWidth="12dp"
app:srb_starHeight="12dp"
app:srb_numStars="5"
app:srb_scrollable="false"
app:layout_constraintTop_toBottomOf="@id/user_name_text_view"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="-5dp"
/>
<TextView
android:id="@+id/comment_user"
android:text="Food is good!"
android:fontFamily="@font/opensans"
android:textSize="15sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
app:layout_constraintTop_toBottomOf="@id/rating_bar_comment"
app:layout_constraintStart_toStartOf="parent"
android:layout_gravity="center_vertical"
android:layout_weight="0.8"
/>
<LinearLayout
android:layout_width="30dp"
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_height="60dp"
android:layout_weight="0.2"
android:orientation="vertical"
android:layout_gravity="center_vertical"
>
<TextView
android:id="@+id/discount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="-89%"
android:textSize="18sp"
android:textColor="@color/red"
android:layout_gravity="right"
/>
<ImageView
android:id="@+id/not_favorite"
android:src="@drawable/baseline_favorite_border_24"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginTop="10dp"
android:layout_gravity="right"
/>
<ImageView
android:id="@+id/is_favorite"
android:src="@drawable/baseline_favorite_24"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginTop="10dp"
android:layout_gravity="right"
android:visibility="gone"
/>
</LinearLayout>
</LinearLayout>
<TextView
android:id="@+id/shop_name_text_view"
android:textSize="20sp"
android:text="Shop Name"
android:textColor="@color/secondary"
android:fontFamily="@font/opensans"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/linear_layout_1"
app:layout_constraintStart_toStartOf="parent"
/>
<LinearLayout
android:id="@+id/rating_layout"
android:layout_width="match_parent"
android:layout_marginTop="10dp"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/shop_name_text_view"
app:layout_constraintStart_toStartOf="parent"
android:orientation="vertical"
android:gravity="center"
>
<com.willy.ratingbar.ScaleRatingBar
android:id="@+id/rating_bar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:srb_starPadding="5dp"
app:srb_clickable="false"
app:srb_starWidth="22dp"
app:srb_starHeight="22dp"
app:srb_numStars="5"
app:srb_scrollable="false"
/>
<TextView
android:id="@+id/count_rating_text_view"
android:textSize="13sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="235 đánh giá" />
<TextView
android:id="@+id/count_sold"
android:textSize="13sp"
android:layout_marginTop="5dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAlignment="center"
android:text="250 đã bán" />
</LinearLayout>
<LinearLayout
android:id="@+id/category"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@+id/rating_layout"
android:orientation="horizontal"
android:layout_marginTop="8dp"
>
<TextView
android:text="Danh mục:"
android:textSize="18sp"
android:fontFamily="@font/bebas"
android:textColor="@color/black"
android:layout_marginEnd="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
/>
<com.google.android.material.chip.ChipGroup
android:id="@+id/list_category"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
<TextView
android:id="@+id/description_text_view"
android:text="Mô tả"
android:textSize="18sp"
android:fontFamily="@font/bebas"
android:textColor="@color/black"
android:layout_marginTop="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/category"
app:layout_constraintStart_toStartOf="parent"
/>
<TextView
android:id="@+id/content_description_text_view"
android:fontFamily="@font/opensans"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
app:layout_constraintTop_toBottomOf="@id/description_text_view"
app:layout_constraintStart_toStartOf="parent"
/>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/constraintLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
app:layout_constraintTop_toBottomOf="@id/content_description_text_view"
app:layout_constraintStart_toStartOf="parent"
>
<LinearLayout
android:id="@+id/linear_layout_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:orientation="vertical"
>
<TextView
android:text="Số lượng"
android:fontFamily="@font/bebas"
android:textColor="@color/primaryColor"
android:textSize="15sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<com.mcdev.quantitizerlibrary.HorizontalQuantitizer
android:id="@+id/quantity_option"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="-10dp"
app:layout_constraintTop_toBottomOf="@id/content_description_text_view"
app:layout_constraintStart_toStartOf="parent"
/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:orientation="vertical"
>
<ImageView
android:src="@drawable/baseline_edit_24"
<TextView
android:id="@+id/total_text_view"
android:text="Giá"
android:fontFamily="@font/bebas"
android:textColor="@color/black"
android:textSize="15sp"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="0.5"
android:layout_gravity="center_vertical"
android:id="@+id/edit_button"
android:layout_marginBottom="10dp"
android:layout_height="wrap_content"
android:layout_gravity="right"
/>
<ImageView
android:id="@+id/delete_button"
android:src="@drawable/baseline_delete_24"
<TextView
android:id="@+id/price"
android:text="25.000 VND"
android:fontFamily="@font/bebas"
android:textColor="@color/primaryColor"
android:textSize="30sp"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="0.5"
android:layout_height="wrap_content"
/>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view_comment"
tools:listitem="@layout/item_comment"
android:layout_marginTop="5dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/user_comment_layout"
app:layout_constraintStart_toStartOf="parent"
/>
<ProgressBar
android:id="@+id/progress_bar"
android:indeterminateTint="@color/primaryColor"
app:layout_constraintTop_toBottomOf="@id/recycler_view_comment"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<com.google.android.material.button.MaterialButton
android:id="@+id/add_to_basket_button"
style="@style/DefaultSolid"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="40dp"
android:layout_marginStart="40dp"
android:layout_marginEnd="40dp"
android:fontFamily="@font/bebas"
android:padding="10dp"
android:text="Add to basket - 15000 VND"
android:textSize="18sp"
app:layout_constraintTop_toBottomOf="@id/constraintLayout"
/>
<View
android:id="@+id/line"
android:layout_width="match_parent"
android:layout_height="2dp"
android:background="#c0c0c0"
android:layout_marginTop="5dp"
app:layout_constraintTop_toBottomOf="@id/add_to_basket_button"
/>
<LinearLayout
android:id="@+id/linear_layout_2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/add_to_basket_button"
app:layout_constraintStart_toStartOf="parent"
android:gravity="center_horizontal"
>
<Button
android:id="@+id/rating_button"
android:text="Bình luận"
android:backgroundTint="@color/yellow"
android:textColor="@color/black"
android:fontFamily="@font/opensans"
android:textAllCaps="false"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:drawableLeft="@drawable/pencil"
/>
</LinearLayout>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardElevation="5dp"
app:cardUseCompatPadding="true"
android:layout_marginTop="10dp"
app:layout_constraintTop_toBottomOf="@id/linear_layout_2"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:visibility="gone"
android:id="@+id/user_comment_layout"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp"
>
<TextView
android:id="@+id/user_name_text_view"
android:text="User A"
android:fontFamily="@font/opensans"
android:textColor="@color/black"
android:textSize="16sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
/>
<com.willy.ratingbar.ScaleRatingBar
android:id="@+id/rating_bar_comment"
android:layout_width="110dp"
android:layout_height="26dp"
app:srb_starPadding="5dp"
app:srb_clickable="false"
app:srb_starWidth="12dp"
app:srb_starHeight="12dp"
app:srb_numStars="5"
app:srb_scrollable="false"
app:layout_constraintTop_toBottomOf="@id/user_name_text_view"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="-5dp"
/>
<TextView
android:id="@+id/comment_user"
android:text="Food is good!"
android:fontFamily="@font/opensans"
android:textSize="15sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
app:layout_constraintTop_toBottomOf="@id/rating_bar_comment"
app:layout_constraintStart_toStartOf="parent"
/>
<LinearLayout
android:layout_width="30dp"
android:layout_height="match_parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:orientation="vertical"
>
<ImageView
android:src="@drawable/baseline_edit_24"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="0.5"
android:layout_gravity="center_vertical"
android:id="@+id/edit_button"
android:layout_marginBottom="10dp"
/>
<ImageView
android:id="@+id/delete_button"
android:src="@drawable/baseline_delete_24"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="0.5"
/>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view_comment"
tools:listitem="@layout/item_comment"
android:layout_marginTop="5dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/user_comment_layout"
app:layout_constraintStart_toStartOf="parent"
/>
<ProgressBar
android:id="@+id/progress_bar"
android:indeterminateTint="@color/primaryColor"
app:layout_constraintTop_toBottomOf="@id/recycler_view_comment"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/end_of_list_text"
android:text="Đã hết"
android:fontFamily="@font/opensans"
android:textColor="@color/grayLight"
android:visibility="gone"
android:layout_marginTop="5dp"
app:layout_constraintTop_toBottomOf="@id/progress_bar"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
<TextView
android:id="@+id/end_of_list_text"
android:text="Đã hết"
android:fontFamily="@font/opensans"
android:textColor="@color/grayLight"
android:visibility="gone"
android:layout_marginTop="5dp"
app:layout_constraintTop_toBottomOf="@id/progress_bar"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
@@ -7,51 +7,59 @@
tools:context=".Fragment.Order.CancelOrderFragment"
>
<androidx.core.widget.NestedScrollView
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:id="@+id/root_view"
android:layout_height="match_parent"
android:id="@+id/swipe_refresh"
>
<androidx.constraintlayout.widget.ConstraintLayout
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/list_order"
tools:listitem="@layout/item_order"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:id="@+id/root_view"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
/>
android:layout_height="wrap_content">
<ProgressBar
android:id="@+id/progress_bar"
android:indeterminateTint="@color/primaryColor"
app:layout_constraintTop_toBottomOf="@id/list_order"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/list_order"
tools:listitem="@layout/item_order"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
/>
<TextView
android:id="@+id/end_of_list_text"
android:text="Đã hết"
android:fontFamily="@font/opensans"
android:textColor="@color/grayLight"
android:visibility="gone"
app:layout_constraintTop_toBottomOf="@id/progress_bar"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
<ProgressBar
android:id="@+id/progress_bar"
android:indeterminateTint="@color/primaryColor"
app:layout_constraintTop_toBottomOf="@id/list_order"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/end_of_list_text"
android:text="Đã hết"
android:fontFamily="@font/opensans"
android:textColor="@color/grayLight"
android:visibility="gone"
app:layout_constraintTop_toBottomOf="@id/progress_bar"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
<LinearLayout
android:id="@+id/empty_layout"
@@ -7,51 +7,59 @@
tools:context=".Fragment.Order.CompleteOrderFragment"
>
<androidx.core.widget.NestedScrollView
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:id="@+id/root_view"
android:layout_height="match_parent"
android:id="@+id/swipe_refresh"
>
<androidx.constraintlayout.widget.ConstraintLayout
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/list_order"
tools:listitem="@layout/item_order"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:id="@+id/root_view"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
/>
android:layout_height="wrap_content">
<ProgressBar
android:id="@+id/progress_bar"
android:indeterminateTint="@color/primaryColor"
app:layout_constraintTop_toBottomOf="@id/list_order"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/list_order"
tools:listitem="@layout/item_order"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
/>
<TextView
android:id="@+id/end_of_list_text"
android:text="Đã hết"
android:fontFamily="@font/opensans"
android:textColor="@color/grayLight"
android:visibility="gone"
app:layout_constraintTop_toBottomOf="@id/progress_bar"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
<ProgressBar
android:id="@+id/progress_bar"
android:indeterminateTint="@color/primaryColor"
app:layout_constraintTop_toBottomOf="@id/list_order"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/end_of_list_text"
android:text="Đã hết"
android:fontFamily="@font/opensans"
android:textColor="@color/grayLight"
android:visibility="gone"
app:layout_constraintTop_toBottomOf="@id/progress_bar"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
<LinearLayout
android:id="@+id/empty_layout"
+47 -39
View File
@@ -7,51 +7,59 @@
tools:context=".Fragment.Order.PreparingFragment"
>
<androidx.core.widget.NestedScrollView
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:id="@+id/root_view"
android:layout_height="match_parent"
android:id="@+id/swipe_refresh"
>
<androidx.constraintlayout.widget.ConstraintLayout
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/list_order"
tools:listitem="@layout/item_order"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:id="@+id/root_view"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
/>
android:layout_height="wrap_content">
<ProgressBar
android:id="@+id/progress_bar"
android:indeterminateTint="@color/primaryColor"
app:layout_constraintTop_toBottomOf="@id/list_order"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/list_order"
tools:listitem="@layout/item_order"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
/>
<TextView
android:id="@+id/end_of_list_text"
android:text="Đã hết"
android:fontFamily="@font/opensans"
android:textColor="@color/grayLight"
android:visibility="gone"
app:layout_constraintTop_toBottomOf="@id/progress_bar"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
<ProgressBar
android:id="@+id/progress_bar"
android:indeterminateTint="@color/primaryColor"
app:layout_constraintTop_toBottomOf="@id/list_order"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/end_of_list_text"
android:text="Đã hết"
android:fontFamily="@font/opensans"
android:textColor="@color/grayLight"
android:visibility="gone"
app:layout_constraintTop_toBottomOf="@id/progress_bar"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
<LinearLayout
android:id="@+id/empty_layout"
@@ -7,51 +7,59 @@
tools:context=".Fragment.Order.ProcessOderFragment"
>
<androidx.core.widget.NestedScrollView
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:id="@+id/root_view"
android:layout_height="match_parent"
android:id="@+id/swipe_refresh"
>
<androidx.constraintlayout.widget.ConstraintLayout
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/list_order"
tools:listitem="@layout/item_order"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:id="@+id/root_view"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
/>
android:layout_height="wrap_content">
<ProgressBar
android:id="@+id/progress_bar"
android:indeterminateTint="@color/primaryColor"
app:layout_constraintTop_toBottomOf="@id/list_order"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/list_order"
tools:listitem="@layout/item_order"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
/>
<TextView
android:id="@+id/end_of_list_text"
android:text="Đã hết"
android:fontFamily="@font/opensans"
android:textColor="@color/grayLight"
android:visibility="gone"
app:layout_constraintTop_toBottomOf="@id/progress_bar"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
<ProgressBar
android:id="@+id/progress_bar"
android:indeterminateTint="@color/primaryColor"
app:layout_constraintTop_toBottomOf="@id/list_order"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/end_of_list_text"
android:text="Đã hết"
android:fontFamily="@font/opensans"
android:textColor="@color/grayLight"
android:visibility="gone"
app:layout_constraintTop_toBottomOf="@id/progress_bar"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
<LinearLayout
android:id="@+id/empty_layout"
@@ -81,5 +89,4 @@
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
+47 -39
View File
@@ -7,51 +7,59 @@
tools:context=".Fragment.Order.ShipOrderFragment"
>
<androidx.core.widget.NestedScrollView
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:id="@+id/root_view"
android:layout_height="match_parent"
android:id="@+id/swipe_refresh"
>
<androidx.constraintlayout.widget.ConstraintLayout
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/list_order"
tools:listitem="@layout/item_order"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:id="@+id/root_view"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
/>
android:layout_height="wrap_content">
<ProgressBar
android:id="@+id/progress_bar"
android:indeterminateTint="@color/primaryColor"
app:layout_constraintTop_toBottomOf="@id/list_order"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/list_order"
tools:listitem="@layout/item_order"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
/>
<TextView
android:id="@+id/end_of_list_text"
android:text="Đã hết"
android:fontFamily="@font/opensans"
android:textColor="@color/grayLight"
android:visibility="gone"
app:layout_constraintTop_toBottomOf="@id/progress_bar"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
<ProgressBar
android:id="@+id/progress_bar"
android:indeterminateTint="@color/primaryColor"
app:layout_constraintTop_toBottomOf="@id/list_order"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/end_of_list_text"
android:text="Đã hết"
android:fontFamily="@font/opensans"
android:textColor="@color/grayLight"
android:visibility="gone"
app:layout_constraintTop_toBottomOf="@id/progress_bar"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
<LinearLayout
android:id="@+id/empty_layout"