Completed Shipper App

This commit is contained in:
Nezumi
2023-04-12 16:59:32 +07:00
parent fe675e272d
commit e8c1cb4d5c
17 changed files with 595 additions and 167 deletions
+6
View File
@@ -8,6 +8,12 @@ android {
namespace 'com.capstone.foodify.shipper'
compileSdk 31
lintOptions {
checkReleaseBuilds false
tasks.lint.enabled = false
baseline file("lint-baseline.xml")
}
defaultConfig {
applicationId "com.capstone.foodify.shipper"
minSdk 26
+15
View File
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<issues format="6" by="lint 7.4.2" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.2)" variant="fatal" version="7.4.2">
<issue
id="ExpiredTargetSdkVersion"
message="Google Play requires that apps target API level 31 or higher.&#xA;"
errorLine1=" targetSdk 30"
errorLine2=" ~~~~~~~~~~~~">
<location
file="build.gradle"
line="19"
column="9"/>
</issue>
</issues>
+20
View File
@@ -0,0 +1,20 @@
{
"version": 3,
"artifactType": {
"type": "APK",
"kind": "Directory"
},
"applicationId": "com.capstone.foodify.shipper",
"variantName": "release",
"elements": [
{
"type": "SINGLE",
"filters": [],
"attributes": [],
"versionCode": 1,
"versionName": "1.0",
"outputFile": "app-release.apk"
}
],
"elementType": "File"
}
@@ -82,7 +82,7 @@ public class OrderDetailActivity extends AppCompatActivity {
ConstraintLayout progressLayout;
RecyclerView rcv_list_order;
OrderDetailAdapter adapter;
LinearLayout layoutConfirmOrder;
LinearLayout layout1;
private GeofencingClient geofencingClient;
private GeofenceHelper geofenceHelper;
private float GEOFENCE_RADIUS = 200;
@@ -155,6 +155,7 @@ public class OrderDetailActivity extends AppCompatActivity {
} else{
Common.showErrorDialog(OrderDetailActivity.this, "Không thể lấy được thông tin đơn, vui lòng thử lại sau!");
}
}
});
@@ -184,7 +185,7 @@ public class OrderDetailActivity extends AppCompatActivity {
geofencingClient = LocationServices.getGeofencingClient(this);
geofenceHelper = new GeofenceHelper(this);
if(!order.getStatus().equals(COMPLETE_STATUS) && !order.getStatus().equals(CANCEL_STATUS)){
if(!order.getStatus().equals(COMPLETE_STATUS)){
getLocation();
final Handler handler = new Handler(Looper.getMainLooper());
@@ -202,8 +203,8 @@ public class OrderDetailActivity extends AppCompatActivity {
}
}, 5000);
} else {
btn_shipping.setVisibility(View.GONE);
layoutConfirmOrder.setVisibility(View.GONE);
btn_call.setVisibility(View.GONE);
layout1.setVisibility(View.GONE);
progressLayout.setVisibility(View.GONE);
}
}
@@ -215,7 +216,7 @@ public class OrderDetailActivity extends AppCompatActivity {
if(response.code() == 200){
String tempToken = response.body();
assert tempToken != null;
Common.FCM_TOKEN_USER = tempToken.replace("\"", "");
Common.FCM_TOKEN_CUSTOMER = tempToken.replace("\"", "");
} else {
Toast.makeText(OrderDetailActivity.this, "Error code: " + response.code(), Toast.LENGTH_SHORT).show();
}
@@ -278,7 +279,7 @@ public class OrderDetailActivity extends AppCompatActivity {
rcv_list_order = findViewById(R.id.list_order);
layoutConfirmOrder = findViewById(R.id.layout1);
layout1 = findViewById(R.id.layout1);
progressLayout = findViewById(R.id.progress_layout);
@@ -471,11 +472,11 @@ public class OrderDetailActivity extends AppCompatActivity {
private void changeLayoutButton(double lat1, double lng1) {
if(distance(lat1, lng1, order.getLat(), order.getLng()) < 0.2){
btn_shipping.setVisibility(View.GONE);
layoutConfirmOrder.setVisibility(View.VISIBLE);
layout1.setVisibility(View.GONE);
btn_confirm_ship_completed.setVisibility(View.VISIBLE);
} else {
btn_shipping.setVisibility(View.VISIBLE);
layoutConfirmOrder.setVisibility(View.GONE);
layout1.setVisibility(View.VISIBLE);
btn_confirm_ship_completed.setVisibility(View.GONE);
}
}
@@ -531,6 +532,6 @@ public class OrderDetailActivity extends AppCompatActivity {
super.onDestroy();
stopLocationService();
Common.CURRENT_ORDER = null;
Common.FCM_TOKEN_USER = null;
Common.FCM_TOKEN_CUSTOMER = null;
}
}
@@ -4,6 +4,7 @@ import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
@@ -30,6 +31,7 @@ import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.auth.GetTokenResult;
import com.google.firebase.auth.SignInMethodQueryResult;
import com.google.firebase.messaging.FirebaseMessaging;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -92,6 +94,16 @@ public class SignInActivity extends AppCompatActivity {
}
});
FirebaseMessaging.getInstance().getToken()
.addOnCompleteListener(new OnCompleteListener<String>() {
@Override
public void onComplete(@NonNull Task<String> task) {
if(task.isSuccessful()){
Log.d("TOKEN_FCM", "Token: " + task.getResult());
}
}
});
edt_password.addTextChangedListener(new TextWatcher() {
@Override
@@ -182,9 +194,6 @@ public class SignInActivity extends AppCompatActivity {
//Get shipper id
getShipperId(userData.getId());
startActivity(new Intent(SignInActivity.this, MainActivity.class));
finish();
} else {
Toast.makeText(SignInActivity.this, "Tài khoản không hợp lệ! Vui lòng kiểm tra lại!", Toast.LENGTH_SHORT).show();
FirebaseAuth.getInstance().signOut();
@@ -277,7 +286,10 @@ public class SignInActivity extends AppCompatActivity {
@Override
public void onResponse(Call<Shipper> call, Response<Shipper> response) {
if(response.code() == 200){
Common.CURRENT_SHIPPER = response.body();
Common.CURRENT_SHIPPER = response.body();
startActivity(new Intent(SignInActivity.this, MainActivity.class));
finish();
//Dismiss progress bar
progressLayout.setVisibility(View.GONE);
}
@@ -26,9 +26,9 @@ public class Common {
public static Order CURRENT_ORDER = null;
public static String TOKEN = null;
public static String FCM_TOKEN_SHIPPER = null;
public static String FCM_TOKEN_USER = null;
public static String FCM_TOKEN_CUSTOMER = null;
public static Location CURRENT_LOCATION = null;
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 final String MAP_API = "AIzaSyAY14Ic32UP26Hg6GILznOfbBihiY5BUxw";
public static final String FORMAT_DATE="dd-MM-yyyy";
public static final String VALID_EMAIL_ADDRESS_REGEX = "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,6}$";
@@ -0,0 +1,157 @@
package com.capstone.foodify.shipper.Fragment.Order;
import android.os.Bundle;
import androidx.annotation.NonNull;
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;
import android.view.ViewGroup;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.capstone.foodify.shipper.API.FoodApiToken;
import com.capstone.foodify.shipper.Adapter.OrderAdapter;
import com.capstone.foodify.shipper.Common;
import com.capstone.foodify.shipper.Model.Order;
import com.capstone.foodify.shipper.Model.Response.Orders;
import com.capstone.foodify.shipper.R;
import java.util.ArrayList;
import java.util.Currency;
import java.util.List;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class AwaitingOrder extends Fragment {
private static int CURRENT_PAGE = 0;
private static final int PAGE_SIZE = 8;
private static final String SORT_BY = "id";
private static final String SORT_DIR = "asc";
private static boolean LAST_PAGE = false;
private final List<Order> listOrders = new ArrayList<>();
RecyclerView recyclerView;
OrderAdapter orderAdapter;
TextView end_of_list_text_view, no_order_text;
NestedScrollView list_order_layout;
ProgressBar progressBar;
SwipeRefreshLayout swipeRefreshLayout;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_waiting_order, container, false);
//Init component
recyclerView = view.findViewById(R.id.rcv_list_order);
list_order_layout = view.findViewById(R.id.list_order_layout);
progressBar = view.findViewById(R.id.progress_bar);
end_of_list_text_view = view.findViewById(R.id.end_of_list_text);
no_order_text = view.findViewById(R.id.no_oder_text);
swipeRefreshLayout = view.findViewById(R.id.swipe_refresh);
orderAdapter = new OrderAdapter(getActivity());
CURRENT_PAGE = 0;
getListOrder();
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext(), RecyclerView.VERTICAL, false);
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setAdapter(orderAdapter);
if (list_order_layout != null) {
list_order_layout.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {
@Override
public void onScrollChange(@NonNull NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
if (scrollY == (v.getChildAt(0).getMeasuredHeight() - v.getMeasuredHeight())) {
//When user scroll to bottom, load more data
dataLoadMore();
}
}
});
}
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
listOrders.clear();
CURRENT_PAGE = 0;
getListOrder();
progressBar.setVisibility(View.VISIBLE);
no_order_text.setVisibility(View.GONE);
end_of_list_text_view.setVisibility(View.GONE);
swipeRefreshLayout.setRefreshing(false);
}
});
return view;
}
private void getListOrder(){
if(Common.CURRENT_SHIPPER != null){
FoodApiToken.apiService.getListOrder(Common.CURRENT_SHIPPER.getId(), "AWAITING", CURRENT_PAGE++, PAGE_SIZE, SORT_BY, SORT_DIR).enqueue(new Callback<Orders>() {
@Override
public void onResponse(Call<Orders> call, Response<Orders> response) {
if(response.code() == 200){
assert response.body() != null;
listOrders.addAll(response.body().getOrders());
orderAdapter.setData(listOrders);
LAST_PAGE = response.body().getPage().isLast();
if(listOrders.size() == 0){
progressBar.setVisibility(View.GONE);
end_of_list_text_view.setVisibility(View.GONE);
no_order_text.setVisibility(View.VISIBLE);
} else {
if(LAST_PAGE)
hideProgressBarAndShowEndOfListText();
}
} else {
Toast.makeText(getContext(), "Đã có lỗi hệ thống! Mã lỗi: " + response.code(), Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure(Call<Orders> call, Throwable t) {
Toast.makeText(getContext(), Common.ERROR_CONNECT_SERVER, Toast.LENGTH_SHORT).show();
}
});
}
}
private void hideProgressBarAndShowEndOfListText(){
progressBar.setVisibility(View.GONE);
end_of_list_text_view.setVisibility(View.VISIBLE);
}
private void defaultLayout(){
}
private void dataLoadMore() {
if(!LAST_PAGE){
getListOrder();
} else {
hideProgressBarAndShowEndOfListText();
}
}
}
@@ -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;
@@ -31,28 +32,30 @@ import retrofit2.Response;
public class CompletedOrder extends Fragment {
private static int CURRENT_PAGE = 0;
private static int PAGE_SIZE = 8;
private static String SORT_BY = "id";
private static String SORT_DIR = "asc";
private static final int PAGE_SIZE = 8;
private static final String SORT_BY = "id";
private static final String SORT_DIR = "asc";
private static boolean LAST_PAGE = false;
private List<Order> listOrders = new ArrayList<>();
private final List<Order> listOrders = new ArrayList<>();
RecyclerView recyclerView;
OrderAdapter orderAdapter;
TextView end_of_list_text_view;
TextView end_of_list_text_view, no_order_text;
NestedScrollView list_order_layout;
ProgressBar progressBar;
SwipeRefreshLayout swipeRefreshLayout;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_completed_order, container, false);
View view = inflater.inflate(R.layout.fragment_waiting_order, container, false);
//Init component
recyclerView = view.findViewById(R.id.rcv_list_order);
list_order_layout = view.findViewById(R.id.list_order_layout);
progressBar = view.findViewById(R.id.progress_bar);
end_of_list_text_view = view.findViewById(R.id.end_of_list_text);
no_order_text = view.findViewById(R.id.no_oder_text);
swipeRefreshLayout = view.findViewById(R.id.swipe_refresh);
orderAdapter = new OrderAdapter(getActivity());
@@ -76,6 +79,23 @@ public class CompletedOrder extends Fragment {
}
});
}
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
listOrders.clear();
CURRENT_PAGE = 0;
getListOrder();
progressBar.setVisibility(View.VISIBLE);
no_order_text.setVisibility(View.GONE);
end_of_list_text_view.setVisibility(View.GONE);
swipeRefreshLayout.setRefreshing(false);
}
});
return view;
}
@@ -86,14 +106,24 @@ public class CompletedOrder extends Fragment {
public void onResponse(Call<Orders> call, Response<Orders> response) {
if(response.code() == 200){
assert response.body() != null;
listOrders.addAll(response.body().getOrders());
orderAdapter.setData(listOrders);
LAST_PAGE = response.body().getPage().isLast();
if(LAST_PAGE)
hideProgressBarAndShowEndOfListText();
if(listOrders.size() == 0){
progressBar.setVisibility(View.GONE);
end_of_list_text_view.setVisibility(View.GONE);
no_order_text.setVisibility(View.VISIBLE);
} else {
if(LAST_PAGE)
hideProgressBarAndShowEndOfListText();
}
} else {
Toast.makeText(getContext(), "Đã có lỗi hệ thống! Mã lỗi: " + response.code(), Toast.LENGTH_SHORT).show();
}
@@ -112,6 +142,10 @@ public class CompletedOrder extends Fragment {
end_of_list_text_view.setVisibility(View.VISIBLE);
}
private void defaultLayout(){
}
private void dataLoadMore() {
if(!LAST_PAGE){
getListOrder();
@@ -5,9 +5,6 @@ import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.viewpager2.adapter.FragmentStateAdapter;
import com.capstone.foodify.shipper.Fragment.OrderFragment;
import com.capstone.foodify.shipper.Fragment.ProfileFragment;
public class OrderViewPagerAdapter extends FragmentStateAdapter {
public OrderViewPagerAdapter(@NonNull FragmentActivity fragmentActivity) {
@@ -18,13 +15,14 @@ public class OrderViewPagerAdapter extends FragmentStateAdapter {
@Override
public Fragment createFragment(int position) {
switch(position) {
case 1: return new CompletedOrder();
default: return new ShippingOrder();
case 1: return new ShippingFragment();
case 2: return new CompletedOrder();
default: return new AwaitingOrder();
}
}
@Override
public int getItemCount() {
return 2;
return 3;
}
@Override
@@ -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;
@@ -29,30 +30,32 @@ import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class ShippingOrder extends Fragment {
public class ShippingFragment extends Fragment {
private static int CURRENT_PAGE = 0;
private static int PAGE_SIZE = 8;
private static String SORT_BY = "id";
private static String SORT_DIR = "asc";
private static final int PAGE_SIZE = 8;
private static final String SORT_BY = "id";
private static final String SORT_DIR = "asc";
private static boolean LAST_PAGE = false;
private List<Order> listOrders = new ArrayList<>();
private final List<Order> listOrders = new ArrayList<>();
RecyclerView recyclerView;
OrderAdapter orderAdapter;
TextView end_of_list_text_view;
TextView end_of_list_text_view, no_order_text;
NestedScrollView list_order_layout;
ProgressBar progressBar;
SwipeRefreshLayout swipeRefreshLayout;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_shipping_order, container, false);
View view = inflater.inflate(R.layout.fragment_waiting_order, container, false);
//Init component
recyclerView = view.findViewById(R.id.rcv_list_order);
list_order_layout = view.findViewById(R.id.list_order_layout);
progressBar = view.findViewById(R.id.progress_bar);
end_of_list_text_view = view.findViewById(R.id.end_of_list_text);
no_order_text = view.findViewById(R.id.no_oder_text);
swipeRefreshLayout = view.findViewById(R.id.swipe_refresh);
orderAdapter = new OrderAdapter(getActivity());
@@ -76,6 +79,23 @@ public class ShippingOrder extends Fragment {
}
});
}
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
listOrders.clear();
CURRENT_PAGE = 0;
getListOrder();
progressBar.setVisibility(View.VISIBLE);
no_order_text.setVisibility(View.GONE);
end_of_list_text_view.setVisibility(View.GONE);
swipeRefreshLayout.setRefreshing(false);
}
});
return view;
}
@@ -93,8 +113,17 @@ public class ShippingOrder extends Fragment {
LAST_PAGE = response.body().getPage().isLast();
if(LAST_PAGE)
hideProgressBarAndShowEndOfListText();
if(listOrders.size() == 0){
progressBar.setVisibility(View.GONE);
end_of_list_text_view.setVisibility(View.GONE);
no_order_text.setVisibility(View.VISIBLE);
} else {
if(LAST_PAGE)
hideProgressBarAndShowEndOfListText();
}
} else {
Toast.makeText(getContext(), "Đã có lỗi hệ thống! Mã lỗi: " + response.code(), Toast.LENGTH_SHORT).show();
}
@@ -113,6 +142,10 @@ public class ShippingOrder extends Fragment {
end_of_list_text_view.setVisibility(View.VISIBLE);
}
private void defaultLayout(){
}
private void dataLoadMore() {
if(!LAST_PAGE){
getListOrder();
@@ -43,7 +43,7 @@ public class GeofenceBroadcastReceiver extends BroadcastReceiver {
if(transitionType == Geofence.GEOFENCE_TRANSITION_ENTER){
notificationHelper.sendHighPriorityNotification("Đã tới khu vực giao!", "Nhấp vào đây để quay về app!", OrderDetailActivity.class);
if(Common.FCM_TOKEN_USER != null)
if(Common.FCM_TOKEN_CUSTOMER != null)
sendNotification();
}
@@ -53,7 +53,9 @@ public class GeofenceBroadcastReceiver extends BroadcastReceiver {
Notification notification = new Notification("Thông báo!", "Đơn hàng đang gần đến bạn!");
FirebaseMessaging firebaseMessaging = new FirebaseMessaging();
firebaseMessaging.setTo(Common.FCM_TOKEN_USER);
firebaseMessaging.setTo(Common.FCM_TOKEN_CUSTOMER);
firebaseMessaging.setNotification(notification);
FirebaseMessagingAPI.apiService.sendNotification(firebaseMessaging).enqueue(new Callback<FirebaseMessaging>() {
@Override
@@ -348,23 +348,50 @@
</LinearLayout>
<com.google.android.material.button.MaterialButton
android:id="@+id/btn_shipping"
android:layout_width="match_parent"
android:id="@+id/btn_call"
android:layout_width="250dp"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:backgroundTint="@color/green"
android:backgroundTint="@color/colorGrey"
android:layout_gravity="center"
android:fontFamily="@font/opensans"
android:text="Giao đến địa chỉ này!"
android:gravity="center"
android:text="Gọi điện thoại"
android:textAllCaps="false"
android:textStyle="bold"
android:textColor="@color/white"
app:iconGravity="textStart"
android:drawableLeft="@drawable/baseline_phone_24"
android:drawableTint="@color/white"
android:layout_marginTop="30dp"
android:layout_marginStart="60dp"
android:layout_marginEnd="60dp"
app:layout_constraintTop_toBottomOf="@id/total_cost_layout"
android:layout_marginStart="100dp"
android:layout_marginEnd="100dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:drawableLeft="@drawable/baseline_local_shipping_24"
app:layout_constraintTop_toBottomOf="@id/total_cost_layout"
/>
<com.google.android.material.button.MaterialButton
android:id="@+id/btn_confirm_ship_complete"
android:layout_width="250dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="10dp"
android:layout_marginStart="100dp"
android:layout_marginEnd="100dp"
android:fontFamily="@font/opensans"
android:gravity="center"
android:textStyle="bold"
android:text="Đã giao"
android:textAllCaps="false"
android:textColor="@color/white"
app:iconGravity="textStart"
android:drawableLeft="@drawable/baseline_verified_24"
android:drawableTint="@color/white"
app:layout_constraintTop_toBottomOf="@id/btn_call"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:visibility="gone"
/>
<LinearLayout
@@ -372,52 +399,30 @@
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/total_cost_layout"
app:layout_constraintTop_toBottomOf="@id/btn_call"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginTop="20dp"
android:visibility="gone"
android:visibility="visible"
>
<com.google.android.material.button.MaterialButton
android:id="@+id/btn_call"
android:layout_width="match_parent"
android:id="@+id/btn_shipping"
android:layout_width="250dp"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:backgroundTint="@color/colorGrey"
android:layout_gravity="center"
android:backgroundTint="@color/green"
android:fontFamily="@font/opensans"
android:gravity="center"
android:text="Gọi điện thoại"
android:text="Giao đến địa chỉ này!"
android:textAllCaps="false"
android:textStyle="bold"
android:textColor="@color/white"
app:iconGravity="textStart"
android:drawableLeft="@drawable/baseline_phone_24"
android:layout_marginTop="10dp"
android:drawableLeft="@drawable/baseline_local_shipping_24"
android:drawableTint="@color/white"
/>
<com.google.android.material.button.MaterialButton
android:id="@+id/btn_confirm_ship_complete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginTop="10dp"
android:layout_gravity="center"
android:fontFamily="@font/opensans"
android:gravity="center"
android:textStyle="bold"
android:text="Đã giao"
android:textAllCaps="false"
android:textColor="@color/white"
app:iconGravity="textStart"
android:drawableLeft="@drawable/baseline_verified_24"
android:drawableTint="@color/white"/>
<com.google.android.material.button.MaterialButton
android:id="@+id/btn_cancel_order"
android:layout_width="match_parent"
android:layout_width="250dp"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:backgroundTint="@color/red"
@@ -1,49 +1,79 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".Fragment.Order.ShippingOrder"
android:id="@+id/list_order_layout"
tools:context=".Fragment.Order.AwaitingOrder"
>
<androidx.constraintlayout.widget.ConstraintLayout
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent"
android:id="@+id/swipe_refresh"
>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rcv_list_order"
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:listitem="@layout/item_order"
app:layout_constraintTop_toTopOf="parent"
/>
android:layout_height="match_parent"
android:id="@+id/list_order_layout"
>
<ProgressBar
android:id="@+id/progress_bar"
android:indeterminateTint="@color/primaryColor"
app:layout_constraintTop_toBottomOf="@id/rcv_list_order"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_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.recyclerview.widget.RecyclerView
android:id="@+id/rcv_list_order"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:listitem="@layout/item_order"
app:layout_constraintTop_toTopOf="parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
<ProgressBar
android:id="@+id/progress_bar"
android:indeterminateTint="@color/primaryColor"
app:layout_constraintTop_toBottomOf="@id/rcv_list_order"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</androidx.core.widget.NestedScrollView>
<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"
/>
<TextView
android:id="@+id/no_oder_text"
android:text="Không có đơn hàng nào ở đây cả!"
android:textSize="15sp"
android:layout_marginTop="20dp"
android:fontFamily="@font/opensans"
android:textColor="@color/grayLight"
android:visibility="gone"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="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>
</androidx.constraintlayout.widget.ConstraintLayout>
@@ -70,6 +70,11 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<com.google.android.material.tabs.TabItem
android:text="ĐANG GIAO"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<com.google.android.material.tabs.TabItem
android:text="ĐÃ GIAO"
android:layout_width="wrap_content"
@@ -0,0 +1,79 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Fragment.Order.ShippingFragment"
>
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/swipe_refresh"
>
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/list_order_layout"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rcv_list_order"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:listitem="@layout/item_order"
app:layout_constraintTop_toTopOf="parent"
/>
<ProgressBar
android:id="@+id/progress_bar"
android:indeterminateTint="@color/primaryColor"
app:layout_constraintTop_toBottomOf="@id/rcv_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"
/>
<TextView
android:id="@+id/no_oder_text"
android:text="Không có đơn hàng nào ở đây cả!"
android:textSize="15sp"
android:layout_marginTop="20dp"
android:fontFamily="@font/opensans"
android:textColor="@color/grayLight"
android:visibility="gone"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="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>
</androidx.constraintlayout.widget.ConstraintLayout>
@@ -1,49 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".Fragment.Order.ShippingOrder"
android:id="@+id/list_order_layout"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rcv_list_order"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:listitem="@layout/item_order"
app:layout_constraintTop_toTopOf="parent"
/>
<ProgressBar
android:id="@+id/progress_bar"
android:indeterminateTint="@color/primaryColor"
app:layout_constraintTop_toBottomOf="@id/rcv_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>
@@ -0,0 +1,80 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".Fragment.Order.AwaitingOrder"
>
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/swipe_refresh"
>
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/list_order_layout"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rcv_list_order"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:listitem="@layout/item_order"
app:layout_constraintTop_toTopOf="parent"
/>
<ProgressBar
android:id="@+id/progress_bar"
android:indeterminateTint="@color/primaryColor"
app:layout_constraintTop_toBottomOf="@id/rcv_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"
/>
<TextView
android:id="@+id/no_oder_text"
android:text="Không có đơn hàng nào ở đây cả!"
android:textSize="15sp"
android:layout_marginTop="20dp"
android:fontFamily="@font/opensans"
android:textColor="@color/grayLight"
android:visibility="gone"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="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>
</androidx.constraintlayout.widget.ConstraintLayout>