From 35994f23d551155bc849db456032a30f40e13efc Mon Sep 17 00:00:00 2001 From: phanhuuloi27 <73208452+Nezumi2711@users.noreply.github.com> Date: Thu, 16 Jun 2022 19:52:39 +0700 Subject: [PATCH] Add custom font in app --- Foodify/app/build.gradle | 3 ++ Foodify/app/src/main/assets/fonts/font.ttf | Bin 0 -> 74736 bytes .../main/java/com/waterbase/foodify/Cart.java | 39 +++++++++++++----- .../com/waterbase/foodify/ChangePassword.java | 28 ++++++++++--- .../com/waterbase/foodify/FoodDetail.java | 29 +++++++++++-- .../java/com/waterbase/foodify/FoodList.java | 22 ++++++++++ .../com/waterbase/foodify/ForgotPassword.java | 27 ++++++++++-- .../main/java/com/waterbase/foodify/Home.java | 28 +++++++++++-- .../com/waterbase/foodify/OrderStatus.java | 27 ++++++++++-- .../java/com/waterbase/foodify/SignIn.java | 21 ++++++++++ .../java/com/waterbase/foodify/SignUp.java | 27 +++++++++--- .../com/waterbase/foodify/VerifyPhone.java | 29 +++++++++++-- .../foodify/ViewHolder/FoodViewHolder.java | 3 +- .../java/com/waterbase/foodify/Welcome.java | 17 ++++++++ Foodify/app/src/main/res/layout/food_item.xml | 32 +++++++++----- Foodify/app/src/main/res/layout/menu_item.xml | 8 ++-- 16 files changed, 286 insertions(+), 54 deletions(-) create mode 100644 Foodify/app/src/main/assets/fonts/font.ttf diff --git a/Foodify/app/build.gradle b/Foodify/app/build.gradle index a064719..8b2ca18 100644 --- a/Foodify/app/build.gradle +++ b/Foodify/app/build.gradle @@ -66,6 +66,9 @@ dependencies { implementation 'com.github.rey5137:material:1.2.4' implementation 'com.squareup.okhttp3:okhttp:4.9.2' + + implementation 'io.github.inflationx:calligraphy3:3.1.1' + implementation 'io.github.inflationx:viewpump:2.0.3' } apply plugin: 'com.google.gms.google-services' \ No newline at end of file diff --git a/Foodify/app/src/main/assets/fonts/font.ttf b/Foodify/app/src/main/assets/fonts/font.ttf new file mode 100644 index 0000000000000000000000000000000000000000..22d6180bb980e40bda882b9750d81a58de39c67b GIT binary patch literal 74736 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 oj)!=N>FPDWq6s>85>zv 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 literal 0 HcmV?d00001 diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/Cart.java b/Foodify/app/src/main/java/com/waterbase/foodify/Cart.java index e69d192..cf8ee3a 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/Cart.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/Cart.java @@ -1,5 +1,15 @@ package com.waterbase.foodify; +import android.content.Context; +import android.content.DialogInterface; +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.MenuItem; +import android.view.View; +import android.widget.TextView; +import android.widget.Toast; + import androidx.annotation.NonNull; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AlertDialog; @@ -7,17 +17,6 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; -import android.content.DialogInterface; -import android.os.Bundle; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.MenuItem; -import android.view.View; -import android.widget.EditText; -import android.widget.LinearLayout; -import android.widget.TextView; -import android.widget.Toast; - import com.google.firebase.database.DataSnapshot; import com.google.firebase.database.DatabaseError; import com.google.firebase.database.DatabaseReference; @@ -42,6 +41,10 @@ import java.util.List; import java.util.Locale; import info.hoang8f.widget.FButton; +import io.github.inflationx.calligraphy3.CalligraphyConfig; +import io.github.inflationx.calligraphy3.CalligraphyInterceptor; +import io.github.inflationx.viewpump.ViewPump; +import io.github.inflationx.viewpump.ViewPumpContextWrapper; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -62,9 +65,23 @@ public class Cart extends AppCompatActivity { APIService mService; + @Override + protected void attachBaseContext(Context newBase) { + super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase)); + } + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + ViewPump.init(ViewPump.builder() + .addInterceptor(new CalligraphyInterceptor( + new CalligraphyConfig.Builder() + .setDefaultFontPath("fonts/font.ttf") + .setFontAttrId(io.github.inflationx.calligraphy3.R.attr.fontPath) + .build())) + .build()); + setContentView(R.layout.activity_cart); //Init diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/ChangePassword.java b/Foodify/app/src/main/java/com/waterbase/foodify/ChangePassword.java index 7f6bd19..8ca9ce8 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/ChangePassword.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/ChangePassword.java @@ -1,7 +1,6 @@ package com.waterbase.foodify; -import androidx.appcompat.app.AppCompatActivity; - +import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.view.View; @@ -9,16 +8,20 @@ import android.widget.Button; import android.widget.EditText; import android.widget.Toast; -import com.google.firebase.database.DataSnapshot; -import com.google.firebase.database.DatabaseError; +import androidx.appcompat.app.AppCompatActivity; + import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; -import com.google.firebase.database.ValueEventListener; import com.waterbase.foodify.Model.User; import java.util.regex.Matcher; import java.util.regex.Pattern; +import io.github.inflationx.calligraphy3.CalligraphyConfig; +import io.github.inflationx.calligraphy3.CalligraphyInterceptor; +import io.github.inflationx.viewpump.ViewPump; +import io.github.inflationx.viewpump.ViewPumpContextWrapper; + public class ChangePassword extends AppCompatActivity { User user; @@ -27,9 +30,24 @@ public class ChangePassword extends AppCompatActivity { Button btnChangePass; final String PASSWORD_PATTERN = "^(?=.*[0-9])(?=.*[A-Z])(?=.*[@#$%^&+=!])(?=\\S+$).{4,}$"; + @Override + protected void attachBaseContext(Context newBase) { + super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase)); + } + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + //Set font all activity + ViewPump.init(ViewPump.builder() + .addInterceptor(new CalligraphyInterceptor( + new CalligraphyConfig.Builder() + .setDefaultFontPath("fonts/font.ttf") + .setFontAttrId(io.github.inflationx.calligraphy3.R.attr.fontPath) + .build())) + .build()); + setContentView(R.layout.activity_change_password); edtPassword = findViewById(R.id.edtPassword); diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/FoodDetail.java b/Foodify/app/src/main/java/com/waterbase/foodify/FoodDetail.java index 8d9b754..03e2dab 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/FoodDetail.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/FoodDetail.java @@ -1,9 +1,6 @@ package com.waterbase.foodify; -import androidx.annotation.NonNull; -import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AppCompatActivity; - +import android.content.Context; import android.os.Bundle; import android.view.MenuItem; import android.view.View; @@ -12,6 +9,10 @@ import android.widget.RatingBar; import android.widget.TextView; import android.widget.Toast; +import androidx.annotation.NonNull; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; + import com.cepheuen.elegantnumberbutton.view.ElegantNumberButton; import com.google.android.material.appbar.CollapsingToolbarLayout; import com.google.android.material.floatingactionbutton.FloatingActionButton; @@ -32,6 +33,11 @@ import com.waterbase.foodify.Model.Rating; import java.util.Arrays; +import io.github.inflationx.calligraphy3.CalligraphyConfig; +import io.github.inflationx.calligraphy3.CalligraphyInterceptor; +import io.github.inflationx.viewpump.ViewPump; +import io.github.inflationx.viewpump.ViewPumpContextWrapper; + public class FoodDetail extends AppCompatActivity implements RatingDialogListener { @@ -50,9 +56,24 @@ public class FoodDetail extends AppCompatActivity implements RatingDialogListene Food currentFood; + @Override + protected void attachBaseContext(Context newBase) { + super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase)); + } + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + //Set font all activity + ViewPump.init(ViewPump.builder() + .addInterceptor(new CalligraphyInterceptor( + new CalligraphyConfig.Builder() + .setDefaultFontPath("fonts/font.ttf") + .setFontAttrId(io.github.inflationx.calligraphy3.R.attr.fontPath) + .build())) + .build()); + setContentView(R.layout.activity_food_detail); //Firebase diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/FoodList.java b/Foodify/app/src/main/java/com/waterbase/foodify/FoodList.java index e96cdf8..9172049 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/FoodList.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/FoodList.java @@ -7,6 +7,7 @@ import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; +import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.text.Editable; @@ -32,6 +33,11 @@ import com.waterbase.foodify.ViewHolder.FoodViewHolder; import java.util.ArrayList; import java.util.List; +import io.github.inflationx.calligraphy3.CalligraphyConfig; +import io.github.inflationx.calligraphy3.CalligraphyInterceptor; +import io.github.inflationx.viewpump.ViewPump; +import io.github.inflationx.viewpump.ViewPumpContextWrapper; + public class FoodList extends AppCompatActivity { RecyclerView recyclerView; @@ -54,9 +60,24 @@ public class FoodList extends AppCompatActivity { SwipeRefreshLayout swipeRefreshLayout; + @Override + protected void attachBaseContext(Context newBase) { + super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase)); + } + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + //Set font all activity + ViewPump.init(ViewPump.builder() + .addInterceptor(new CalligraphyInterceptor( + new CalligraphyConfig.Builder() + .setDefaultFontPath("fonts/font.ttf") + .setFontAttrId(io.github.inflationx.calligraphy3.R.attr.fontPath) + .build())) + .build()); + setContentView(R.layout.activity_food_list); //Firebase @@ -224,6 +245,7 @@ public class FoodList extends AppCompatActivity { @Override protected void populateViewHolder(FoodViewHolder viewHolder, Food model, int position) { viewHolder.food_name.setText(model.getName()); + viewHolder.food_price.setText(String.format("%s đ", model.getPrice())); Picasso.with(getBaseContext()).load(model.getImage()).into(viewHolder.food_image); //Add Favorites diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/ForgotPassword.java b/Foodify/app/src/main/java/com/waterbase/foodify/ForgotPassword.java index 48838dd..89303de 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/ForgotPassword.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/ForgotPassword.java @@ -1,7 +1,6 @@ package com.waterbase.foodify; -import androidx.appcompat.app.AppCompatActivity; - +import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.text.TextUtils; @@ -11,6 +10,8 @@ import android.widget.EditText; import android.widget.ProgressBar; import android.widget.Toast; +import androidx.appcompat.app.AppCompatActivity; + import com.google.firebase.FirebaseException; import com.google.firebase.auth.PhoneAuthCredential; import com.google.firebase.auth.PhoneAuthProvider; @@ -20,12 +21,16 @@ import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; import com.google.firebase.database.ValueEventListener; import com.waterbase.foodify.Common.Common; -import com.waterbase.foodify.Model.User; import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; import java.util.regex.Pattern; +import io.github.inflationx.calligraphy3.CalligraphyConfig; +import io.github.inflationx.calligraphy3.CalligraphyInterceptor; +import io.github.inflationx.viewpump.ViewPump; +import io.github.inflationx.viewpump.ViewPumpContextWrapper; + public class ForgotPassword extends AppCompatActivity { EditText edtPhone; @@ -34,9 +39,25 @@ public class ForgotPassword extends AppCompatActivity { final String PHONE_PATTERN = "^0[98753]{1}\\d{8}$"; + @Override + protected void attachBaseContext(Context newBase) { + super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase)); + } + + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + //Set font all activity + ViewPump.init(ViewPump.builder() + .addInterceptor(new CalligraphyInterceptor( + new CalligraphyConfig.Builder() + .setDefaultFontPath("fonts/font.ttf") + .setFontAttrId(io.github.inflationx.calligraphy3.R.attr.fontPath) + .build())) + .build()); + setContentView(R.layout.activity_forgot_password); btnSendOTP = findViewById(R.id.btnSendOTP); diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/Home.java b/Foodify/app/src/main/java/com/waterbase/foodify/Home.java index 35128f6..a4b6c32 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/Home.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/Home.java @@ -1,5 +1,6 @@ package com.waterbase.foodify; +import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; @@ -17,8 +18,7 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import androidx.core.view.GravityCompat; import androidx.drawerlayout.widget.DrawerLayout; -import androidx.navigation.ui.AppBarConfiguration; -import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; @@ -42,6 +42,10 @@ import java.util.HashMap; import java.util.Map; import dmax.dialog.SpotsDialog; +import io.github.inflationx.calligraphy3.CalligraphyConfig; +import io.github.inflationx.calligraphy3.CalligraphyInterceptor; +import io.github.inflationx.viewpump.ViewPump; +import io.github.inflationx.viewpump.ViewPumpContextWrapper; import io.paperdb.Paper; @@ -56,10 +60,25 @@ public class Home extends AppCompatActivity implements NavigationView.OnNavigati SwipeRefreshLayout swipeRefreshLayout; + @Override + protected void attachBaseContext(Context newBase) { + super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase)); + } + + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + //Set font all activity + ViewPump.init(ViewPump.builder() + .addInterceptor(new CalligraphyInterceptor( + new CalligraphyConfig.Builder() + .setDefaultFontPath("fonts/font.ttf") + .setFontAttrId(io.github.inflationx.calligraphy3.R.attr.fontPath) + .build())) + .build()); + setContentView(R.layout.activity_home); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); @@ -115,8 +134,9 @@ public class Home extends AppCompatActivity implements NavigationView.OnNavigati //Load menu recyler_menu = (RecyclerView) findViewById(R.id.recyler_menu); recyler_menu.setHasFixedSize(true); - layoutManager = new LinearLayoutManager(this); - recyler_menu.setLayoutManager(layoutManager); +// layoutManager = new LinearLayoutManager(this); +// recyler_menu.setLayoutManager(layoutManager); + recyler_menu.setLayoutManager(new GridLayoutManager(this, 2)); //Set name for user View headerView = navigationView.getHeaderView(0); diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/OrderStatus.java b/Foodify/app/src/main/java/com/waterbase/foodify/OrderStatus.java index ae349d6..0b77a30 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/OrderStatus.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/OrderStatus.java @@ -1,14 +1,15 @@ package com.waterbase.foodify; +import android.content.Context; +import android.os.Bundle; +import android.view.MenuItem; + import androidx.annotation.NonNull; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; -import android.os.Bundle; -import android.view.MenuItem; - import com.firebase.ui.database.FirebaseRecyclerAdapter; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; @@ -16,6 +17,11 @@ import com.waterbase.foodify.Common.Common; import com.waterbase.foodify.Model.Request; import com.waterbase.foodify.ViewHolder.OrderViewHolder; +import io.github.inflationx.calligraphy3.CalligraphyConfig; +import io.github.inflationx.calligraphy3.CalligraphyInterceptor; +import io.github.inflationx.viewpump.ViewPump; +import io.github.inflationx.viewpump.ViewPumpContextWrapper; + public class OrderStatus extends AppCompatActivity { public RecyclerView recyclerView; @@ -26,9 +32,24 @@ public class OrderStatus extends AppCompatActivity { FirebaseDatabase database; DatabaseReference requests; + @Override + protected void attachBaseContext(Context newBase) { + super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase)); + } + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + //Set font all activity + ViewPump.init(ViewPump.builder() + .addInterceptor(new CalligraphyInterceptor( + new CalligraphyConfig.Builder() + .setDefaultFontPath("fonts/font.ttf") + .setFontAttrId(io.github.inflationx.calligraphy3.R.attr.fontPath) + .build())) + .build()); + setContentView(R.layout.activity_order_status); //Firebase diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/SignIn.java b/Foodify/app/src/main/java/com/waterbase/foodify/SignIn.java index cc120d8..ca32399 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/SignIn.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/SignIn.java @@ -1,6 +1,7 @@ package com.waterbase.foodify; import android.app.ProgressDialog; +import android.content.Context; import android.content.Intent; import android.graphics.Typeface; import android.os.Bundle; @@ -21,6 +22,10 @@ import com.rey.material.widget.CheckBox; import com.waterbase.foodify.Common.Common; import com.waterbase.foodify.Model.User; +import io.github.inflationx.calligraphy3.CalligraphyConfig; +import io.github.inflationx.calligraphy3.CalligraphyInterceptor; +import io.github.inflationx.viewpump.ViewPump; +import io.github.inflationx.viewpump.ViewPumpContextWrapper; import io.paperdb.Paper; public class SignIn extends AppCompatActivity { @@ -30,9 +35,25 @@ public class SignIn extends AppCompatActivity { TextView txtAppName, edtForgotPassword; CheckBox ckbRemember; + @Override + protected void attachBaseContext(Context newBase) { + super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase)); + } + + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + //Set font all activity + ViewPump.init(ViewPump.builder() + .addInterceptor(new CalligraphyInterceptor( + new CalligraphyConfig.Builder() + .setDefaultFontPath("fonts/font.ttf") + .setFontAttrId(io.github.inflationx.calligraphy3.R.attr.fontPath) + .build())) + .build()); + setContentView(R.layout.activity_sign_in); edtPassword = (EditText) findViewById(R.id.edtPassword); diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/SignUp.java b/Foodify/app/src/main/java/com/waterbase/foodify/SignUp.java index 5ca9eec..834abda 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/SignUp.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/SignUp.java @@ -1,6 +1,6 @@ package com.waterbase.foodify; -import android.app.ProgressDialog; +import android.content.Context; import android.content.Intent; import android.graphics.Typeface; import android.os.Bundle; @@ -12,13 +12,9 @@ import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; -import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; -import com.google.android.gms.tasks.OnCompleteListener; -import com.google.android.gms.tasks.Task; import com.google.firebase.FirebaseException; -import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.PhoneAuthCredential; import com.google.firebase.auth.PhoneAuthProvider; import com.google.firebase.database.DataSnapshot; @@ -33,6 +29,11 @@ import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; import java.util.regex.Pattern; +import io.github.inflationx.calligraphy3.CalligraphyConfig; +import io.github.inflationx.calligraphy3.CalligraphyInterceptor; +import io.github.inflationx.viewpump.ViewPump; +import io.github.inflationx.viewpump.ViewPumpContextWrapper; + public class SignUp extends AppCompatActivity { EditText edtPhone, edtName, edtPassword, edtPasswordVerify; @@ -42,9 +43,25 @@ public class SignUp extends AppCompatActivity { final String PASSWORD_PATTERN = "^(?=.*[0-9])(?=.*[A-Z])(?=.*[@#$%^&+=!])(?=\\S+$).{4,}$"; final String PHONE_PATTERN = "^0[98753]{1}\\d{8}$"; + @Override + protected void attachBaseContext(Context newBase) { + super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase)); + } + + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + //Set font all activity + ViewPump.init(ViewPump.builder() + .addInterceptor(new CalligraphyInterceptor( + new CalligraphyConfig.Builder() + .setDefaultFontPath("fonts/font.ttf") + .setFontAttrId(io.github.inflationx.calligraphy3.R.attr.fontPath) + .build())) + .build()); + setContentView(R.layout.activity_sign_up); edtName = (EditText) findViewById(R.id.txtFullName); diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/VerifyPhone.java b/Foodify/app/src/main/java/com/waterbase/foodify/VerifyPhone.java index 6f75638..a27be16 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/VerifyPhone.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/VerifyPhone.java @@ -1,8 +1,6 @@ package com.waterbase.foodify; -import androidx.annotation.NonNull; -import androidx.appcompat.app.AppCompatActivity; - +import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.CountDownTimer; @@ -15,7 +13,9 @@ import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; -import com.firebase.ui.database.ChangeEventListener; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.Task; import com.google.firebase.FirebaseException; @@ -32,6 +32,11 @@ import com.waterbase.foodify.Model.User; import java.util.concurrent.TimeUnit; +import io.github.inflationx.calligraphy3.CalligraphyConfig; +import io.github.inflationx.calligraphy3.CalligraphyInterceptor; +import io.github.inflationx.viewpump.ViewPump; +import io.github.inflationx.viewpump.ViewPumpContextWrapper; + public class VerifyPhone extends AppCompatActivity { private EditText inputCode1, inputCode2, inputCode3, inputCode4, inputCode5, inputCode6; @@ -39,9 +44,25 @@ public class VerifyPhone extends AppCompatActivity { String verificationId, phone, isForgotPassword = null; TextView resendCode, countdown; + @Override + protected void attachBaseContext(Context newBase) { + super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase)); + } + + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + //Set font all activity + ViewPump.init(ViewPump.builder() + .addInterceptor(new CalligraphyInterceptor( + new CalligraphyConfig.Builder() + .setDefaultFontPath("fonts/font.ttf") + .setFontAttrId(io.github.inflationx.calligraphy3.R.attr.fontPath) + .build())) + .build()); + setContentView(R.layout.activity_verify_phone); user = (User) getIntent().getSerializableExtra("user"); diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/ViewHolder/FoodViewHolder.java b/Foodify/app/src/main/java/com/waterbase/foodify/ViewHolder/FoodViewHolder.java index f0e0551..bd1ccb2 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/ViewHolder/FoodViewHolder.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/ViewHolder/FoodViewHolder.java @@ -12,7 +12,7 @@ import com.waterbase.foodify.R; public class FoodViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { - public TextView food_name; + public TextView food_name, food_price; public ImageView food_image, fav_image; private ItemClickListener itemClickListener; @@ -27,6 +27,7 @@ public class FoodViewHolder extends RecyclerView.ViewHolder implements View.OnCl food_name = (TextView) itemView.findViewById(R.id.food_name); food_image = (ImageView) itemView.findViewById(R.id.food_image); fav_image = (ImageView) itemView.findViewById(R.id.fav); + food_price = (TextView) itemView.findViewById(R.id.food_price); itemView.setOnClickListener(this); } diff --git a/Foodify/app/src/main/java/com/waterbase/foodify/Welcome.java b/Foodify/app/src/main/java/com/waterbase/foodify/Welcome.java index 24f9b3c..a3ae824 100644 --- a/Foodify/app/src/main/java/com/waterbase/foodify/Welcome.java +++ b/Foodify/app/src/main/java/com/waterbase/foodify/Welcome.java @@ -1,6 +1,7 @@ package com.waterbase.foodify; import android.app.ProgressDialog; +import android.content.Context; import android.content.Intent; import android.graphics.Typeface; import android.os.Bundle; @@ -19,6 +20,10 @@ import com.google.firebase.database.ValueEventListener; import com.waterbase.foodify.Common.Common; import com.waterbase.foodify.Model.User; +import io.github.inflationx.calligraphy3.CalligraphyConfig; +import io.github.inflationx.calligraphy3.CalligraphyInterceptor; +import io.github.inflationx.viewpump.ViewPump; +import io.github.inflationx.viewpump.ViewPumpContextWrapper; import io.paperdb.Paper; public class Welcome extends AppCompatActivity { @@ -26,9 +31,21 @@ public class Welcome extends AppCompatActivity { Button btnSignIn, btnSignUp; TextView txtSlogan, txtAppName; + @Override + protected void attachBaseContext(Context newBase) { + super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase)); + } + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + ViewPump.init(ViewPump.builder() + .addInterceptor(new CalligraphyInterceptor( + new CalligraphyConfig.Builder() + .setDefaultFontPath("fonts/font.ttf") + .setFontAttrId(io.github.inflationx.calligraphy3.R.attr.fontPath) + .build())) + .build()); setContentView(R.layout.activity_welcome); btnSignIn = (Button) findViewById(R.id.btnSignIn); diff --git a/Foodify/app/src/main/res/layout/food_item.xml b/Foodify/app/src/main/res/layout/food_item.xml index c803d4a..6d60c3e 100644 --- a/Foodify/app/src/main/res/layout/food_item.xml +++ b/Foodify/app/src/main/res/layout/food_item.xml @@ -3,19 +3,24 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" - android:layout_height="200dp" - app:cardElevation="4dp" + android:layout_height="wrap_content" + app:cardElevation="10dp" + app:cardCornerRadius="0dp" android:layout_marginBottom="8dp" > - @@ -23,9 +28,9 @@ android:weightSum="10" android:orientation="horizontal" android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_alignParentBottom="true" - android:background="#4f0e0d0e" + android:gravity="center_vertical" + android:layout_height="0dp" + android:layout_weight="1" > - + + + \ No newline at end of file diff --git a/Foodify/app/src/main/res/layout/menu_item.xml b/Foodify/app/src/main/res/layout/menu_item.xml index 0210b8c..e3e73d9 100644 --- a/Foodify/app/src/main/res/layout/menu_item.xml +++ b/Foodify/app/src/main/res/layout/menu_item.xml @@ -2,8 +2,10 @@