From c2aede89f72a1dd4a55a3292f6a29cbfd40edf86 Mon Sep 17 00:00:00 2001 From: Aditya_WDI Date: Wed, 9 Aug 2023 21:02:52 +0530 Subject: [PATCH] . --- app/build.gradle | 3 + app/src/main/AndroidManifest.xml | 9 + .../com/ssb/simplitend/apputils/AppUtil.java | 5 + .../CgSubscriptionActivity.java | 198 + .../cg_subscription/PlanAdapter.java | 71 + .../cg_subscription/SubscriptionPlan.java | 23 + .../mvp/SubscriptionApiService.java | 28 + .../mvp/SubscriptionContracts.java | 25 + .../mvp/SubscriptionCredentials.java | 10 + .../mvp/SubscriptionPresenter.java | 89 + .../fragments/SignInFragment.java | 37 +- .../contacts/ContactListFragment.java | 5 +- .../fragments/register/SplashFragment.java | 36 +- app/src/main/res/drawable/ic_sub_1.xml | 824 ++++ app/src/main/res/drawable/ic_sub_2.xml | 3368 +++++++++++++++++ app/src/main/res/drawable/ic_sub_dash.xml | 12 + app/src/main/res/drawable/ic_sub_done.xml | 18 + .../main/res/layout/cg_sign_in_fragment.xml | 4 +- .../res/layout/cg_subscription_layout.xml | 50 + .../main/res/layout/contact_list_fragment.xml | 3 +- .../res/layout/profile_progress_fragment.xml | 1 - app/src/main/res/layout/sign_in_fragment.xml | 28 +- .../res/layout/subscription_viewholder.xml | 293 ++ .../main/res/navigation/welcome_nav_graph.xml | 9 + app/src/main/res/values/strings.xml | 4 + 25 files changed, 5107 insertions(+), 46 deletions(-) create mode 100644 app/src/main/java/com/ssb/simplitend/cg_subscription/CgSubscriptionActivity.java create mode 100644 app/src/main/java/com/ssb/simplitend/cg_subscription/PlanAdapter.java create mode 100644 app/src/main/java/com/ssb/simplitend/cg_subscription/SubscriptionPlan.java create mode 100644 app/src/main/java/com/ssb/simplitend/cg_subscription/mvp/SubscriptionApiService.java create mode 100644 app/src/main/java/com/ssb/simplitend/cg_subscription/mvp/SubscriptionContracts.java create mode 100644 app/src/main/java/com/ssb/simplitend/cg_subscription/mvp/SubscriptionCredentials.java create mode 100644 app/src/main/java/com/ssb/simplitend/cg_subscription/mvp/SubscriptionPresenter.java create mode 100644 app/src/main/res/drawable/ic_sub_1.xml create mode 100644 app/src/main/res/drawable/ic_sub_2.xml create mode 100644 app/src/main/res/drawable/ic_sub_dash.xml create mode 100644 app/src/main/res/drawable/ic_sub_done.xml create mode 100644 app/src/main/res/layout/cg_subscription_layout.xml create mode 100644 app/src/main/res/layout/subscription_viewholder.xml diff --git a/app/build.gradle b/app/build.gradle index 10c8a2c..c92aede 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -102,6 +102,9 @@ dependencies { // biometrics implementation "androidx.biometric:biometric:1.1.0" + // Stripe Android SDK + implementation 'com.stripe:stripe-android:20.28.0' + implementation 'androidx.appcompat:appcompat:1.6.0' implementation 'com.google.android.material:material:1.8.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 57e9678..9799ec4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -67,6 +67,15 @@ android:value="" /> + + + + + subscriptionPlans; + + private ProgressDialog progressDialog; + + private SubscriptionPresenter presenter; + + private PaymentSheet paymentSheet; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + binding = CgSubscriptionLayoutBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + + presenter = SubscriptionPresenter.getPresenter(); + + initViews(); + + clickEvents(); + + } + + private void clickEvents() { + binding.makePayment.setOnClickListener(view -> { + payForSubscription(); + }); + } + + private void payForSubscription() { + int position = binding.viewPager.getCurrentItem(); + if (subscriptionPlans == null || position < 0 || position >= subscriptionPlans.size()){ + Toast.makeText(this, "Couldn't load plan.", Toast.LENGTH_SHORT).show(); + return; + } + + progressDialog.setTitle("Please wait..."); + progressDialog.setMessage("while we take you to the payment gateway."); + progressDialog.setCancelable(false); + progressDialog.show(); + + SubscriptionPlan plan = subscriptionPlans.get(position); + + Map body = new HashMap<>(); + + RequestBody name_body = RequestBody.create("Aditya Gaikwad", MediaType.parse("text/plain")); + body.put("name", name_body); + + RequestBody email_body = RequestBody.create("test@gmail.com", MediaType.parse("text/plain")); + body.put("email", email_body); + + RequestBody price_body = RequestBody.create("595", MediaType.parse("text/plain")); + body.put("price", price_body); + + RequestBody subscription_xid_body = RequestBody.create("4", MediaType.parse("text/plain")); + body.put("subscription_xid", subscription_xid_body); + + RequestBody caregiver_xid_body = RequestBody.create("4", MediaType.parse("text/plain")); + body.put("caregiver_xid", caregiver_xid_body); + + String token = "Bearer " + AppUtil.getCgToken(this); + + presenter.getPaymentCred(token, body, this); + + } + + private void initViews() { + binding.viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { + @Override + public void onPageSelected(int position) { + super.onPageSelected(position); + if (subscriptionPlans == null + || position < 0 || position >= subscriptionPlans.size()) return; + + String btn_text = "Make payment $" + subscriptionPlans.get(position).plan_value; + binding.makePayment.setText(btn_text); + } + }); + + // loading subscription plans + progressDialog = new ProgressDialog(this); + + progressDialog.setTitle("Please wait...."); + progressDialog.setMessage("while we fetch subscription plans for you."); + progressDialog.setCancelable(false); + progressDialog.show(); + + + String token = "Bearer " + AppUtil.getCgToken(this); + presenter.getSubscriptionPlans(token, this); + + paymentSheet = new PaymentSheet(this, this::onPaymentSheetResult); + } + + // payment callback + public void onPaymentSheetResult(final PaymentSheetResult paymentSheetResult) { + // implemented in the next steps + if (paymentSheetResult instanceof PaymentSheetResult.Canceled) { + Toast.makeText(this, "Payment canceled.", Toast.LENGTH_SHORT).show(); + } else if (paymentSheetResult instanceof PaymentSheetResult.Failed) { + Log.e(TAG, "Got error: ", ((PaymentSheetResult.Failed) paymentSheetResult).getError()); + Toast.makeText(this, "Payment failed.", Toast.LENGTH_SHORT).show(); + } else if (paymentSheetResult instanceof PaymentSheetResult.Completed) { + // Display for example, an order confirmation screen + Log.d(TAG, "Completed"); + Toast.makeText(this, "Payment successful.", Toast.LENGTH_SHORT).show(); + } + + } + + // get payment credentials callback + @Override + public void onPaymentCredFetched(SubscriptionCredentials credentials) { + if (credentials == null){ + progressDialog.dismiss(); + Toast.makeText(this, "Something went wrong.", Toast.LENGTH_SHORT).show(); + return; + } + + final PaymentSheet.CustomerConfiguration customerConfig = new PaymentSheet.CustomerConfiguration( + credentials.customerId, + credentials.ephemeralKey + ); + String paymentIntentClientSecret = credentials.paymentIntent; + PaymentConfiguration.init(getApplicationContext(), credentials.stripe_publish_key); + + // dismissing dialog now + progressDialog.dismiss(); + + final PaymentSheet.Configuration configuration = new PaymentSheet.Configuration.Builder("SimpliTend") + .customer(customerConfig) + .allowsDelayedPaymentMethods(true) + .build(); + paymentSheet.presentWithPaymentIntent( + paymentIntentClientSecret, + configuration + ); + + } + + @Override + public void onPaymentCredFetchFailed(Throwable throwable, String message) { + progressDialog.dismiss(); + Toast.makeText(this, "" + message, Toast.LENGTH_SHORT).show(); + } + + @Override + public void onSubscriptionFetched(ArrayList subscriptionPlans) { + this.subscriptionPlans = subscriptionPlans; + progressDialog.dismiss(); + + // loading plans + PlanAdapter planAdapter = new PlanAdapter(subscriptionPlans); + binding.viewPager.setAdapter(planAdapter); + binding.circleIndicator.setViewPager(binding.viewPager); + } + + @Override + public void onSubsFetchFailed(Throwable t, String message) { + progressDialog.dismiss(); + Toast.makeText(this, "" + message, Toast.LENGTH_SHORT).show(); + } +} diff --git a/app/src/main/java/com/ssb/simplitend/cg_subscription/PlanAdapter.java b/app/src/main/java/com/ssb/simplitend/cg_subscription/PlanAdapter.java new file mode 100644 index 0000000..61d0183 --- /dev/null +++ b/app/src/main/java/com/ssb/simplitend/cg_subscription/PlanAdapter.java @@ -0,0 +1,71 @@ +package com.ssb.simplitend.cg_subscription; + +import android.view.LayoutInflater; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.ssb.simplitend.R; +import com.ssb.simplitend.databinding.SubscriptionViewholderBinding; + +import java.util.ArrayList; + +public class PlanAdapter extends RecyclerView.Adapter{ + + private final ArrayList subscriptionPlans; + + public PlanAdapter(@NonNull ArrayList subscriptionPlans) { + this.subscriptionPlans = subscriptionPlans; + } + + @NonNull + @Override + public PlanViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + SubscriptionViewholderBinding binding = SubscriptionViewholderBinding.inflate( + LayoutInflater.from(parent.getContext()), + parent, + false + ); + return new PlanViewHolder(binding); + } + + @Override + public void onBindViewHolder(@NonNull PlanViewHolder holder, int position) { + holder.setData(subscriptionPlans.get(position), position); + } + + @Override + public int getItemCount() { + return subscriptionPlans.size(); + } + + public static class PlanViewHolder extends RecyclerView.ViewHolder{ + + public SubscriptionViewholderBinding binding; + + public PlanViewHolder(@NonNull SubscriptionViewholderBinding binding) { + super(binding.getRoot()); + this.binding = binding; + } + + public void setData(SubscriptionPlan subscriptionPlan, int position){ + if (subscriptionPlan == null) return; + + binding.planName.setText(subscriptionPlan.plan_name); + + String price = "$" + subscriptionPlan.plan_value; + binding.planValue.setText(price); + + switch (position){ + case 0: + binding.image.setImageResource(R.drawable.ic_sub_1); + break; + case 1: + default: + binding.image.setImageResource(R.drawable.ic_sub_2); + } + + } + } +} diff --git a/app/src/main/java/com/ssb/simplitend/cg_subscription/SubscriptionPlan.java b/app/src/main/java/com/ssb/simplitend/cg_subscription/SubscriptionPlan.java new file mode 100644 index 0000000..49e1f70 --- /dev/null +++ b/app/src/main/java/com/ssb/simplitend/cg_subscription/SubscriptionPlan.java @@ -0,0 +1,23 @@ +package com.ssb.simplitend.cg_subscription; + +public class SubscriptionPlan{ + public int id; + public String plan_name; + public String plan_value; + public String plan_details; + public String stripe_product_id; + public String stripe_price_id; + public String active; + public String deleted_at; + public String created_by; + public String updated_by; + public String created_at; + public String updated_at; + + public SubscriptionPlan(){} + + public SubscriptionPlan(String plan_name, String plan_value) { + this.plan_name = plan_name; + this.plan_value = plan_value; + } +} diff --git a/app/src/main/java/com/ssb/simplitend/cg_subscription/mvp/SubscriptionApiService.java b/app/src/main/java/com/ssb/simplitend/cg_subscription/mvp/SubscriptionApiService.java new file mode 100644 index 0000000..edd538d --- /dev/null +++ b/app/src/main/java/com/ssb/simplitend/cg_subscription/mvp/SubscriptionApiService.java @@ -0,0 +1,28 @@ +package com.ssb.simplitend.cg_subscription.mvp; + +import com.ssb.simplitend.cg_subscription.SubscriptionPlan; +import com.ssb.simplitend.welcome.welcomepatient.mvvm.models.CallResponse; + +import java.util.ArrayList; +import java.util.Map; + +import okhttp3.RequestBody; +import retrofit2.Call; +import retrofit2.http.GET; +import retrofit2.http.Header; +import retrofit2.http.Multipart; +import retrofit2.http.POST; +import retrofit2.http.PartMap; + +public interface SubscriptionApiService { + + @GET("api/list-of-plans") + Call>> getSubscriptionPlans(@Header("Authorization") String token); + + @Multipart + @POST("api/pay-subscription") + Call> paySubscription( + @Header("Authorization") String token, + @PartMap Map body); + +} diff --git a/app/src/main/java/com/ssb/simplitend/cg_subscription/mvp/SubscriptionContracts.java b/app/src/main/java/com/ssb/simplitend/cg_subscription/mvp/SubscriptionContracts.java new file mode 100644 index 0000000..75fe652 --- /dev/null +++ b/app/src/main/java/com/ssb/simplitend/cg_subscription/mvp/SubscriptionContracts.java @@ -0,0 +1,25 @@ +package com.ssb.simplitend.cg_subscription.mvp; + +import com.ssb.simplitend.cg_subscription.SubscriptionPlan; + +import java.util.ArrayList; + +public interface SubscriptionContracts { + + interface GetSubPlansCallback{ + + void onSubscriptionFetched(ArrayList subscriptionPlans); + + void onSubsFetchFailed(Throwable t, String message); + + } + + interface PaySubscriptionCallback{ + + void onPaymentCredFetched(SubscriptionCredentials credentials); + + void onPaymentCredFetchFailed(Throwable throwable, String message); + + } + +} diff --git a/app/src/main/java/com/ssb/simplitend/cg_subscription/mvp/SubscriptionCredentials.java b/app/src/main/java/com/ssb/simplitend/cg_subscription/mvp/SubscriptionCredentials.java new file mode 100644 index 0000000..e5861b7 --- /dev/null +++ b/app/src/main/java/com/ssb/simplitend/cg_subscription/mvp/SubscriptionCredentials.java @@ -0,0 +1,10 @@ +package com.ssb.simplitend.cg_subscription.mvp; + +public class SubscriptionCredentials{ + public String customerId; + public String paymentIntent; + public String ephemeralKey; + public String stripe_publish_key; + + public SubscriptionCredentials(){} +} diff --git a/app/src/main/java/com/ssb/simplitend/cg_subscription/mvp/SubscriptionPresenter.java b/app/src/main/java/com/ssb/simplitend/cg_subscription/mvp/SubscriptionPresenter.java new file mode 100644 index 0000000..0b1427d --- /dev/null +++ b/app/src/main/java/com/ssb/simplitend/cg_subscription/mvp/SubscriptionPresenter.java @@ -0,0 +1,89 @@ +package com.ssb.simplitend.cg_subscription.mvp; + +import androidx.annotation.NonNull; + +import com.ssb.simplitend.apputils.AppUtil; +import com.ssb.simplitend.apputils.RetrofitHelper; +import com.ssb.simplitend.cg_subscription.CgSubscriptionActivity; +import com.ssb.simplitend.cg_subscription.SubscriptionPlan; +import com.ssb.simplitend.welcome.welcomepatient.mvvm.models.CallResponse; + +import java.util.ArrayList; +import java.util.Map; + +import okhttp3.RequestBody; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class SubscriptionPresenter { + + private static SubscriptionPresenter presenter; + + private final SubscriptionApiService apiService; + + private SubscriptionPresenter(){ + apiService = RetrofitHelper.getRetrofit().create(SubscriptionApiService.class); + } + + public static synchronized SubscriptionPresenter getPresenter(){ + if (presenter == null){ + presenter = new SubscriptionPresenter(); + } + + return presenter; + } + + public void getSubscriptionPlans(@NonNull String token, @NonNull SubscriptionContracts.GetSubPlansCallback subPlansCallback){ + apiService.getSubscriptionPlans(token) + .enqueue(new Callback>>() { + @Override + public void onResponse(Call>> call, Response>> response) { + if (response.body() != null){ + if (response.body().status != 200 || response.body().result == null){ + subPlansCallback.onSubsFetchFailed(new Exception(), response.body().message); + return; + } + + subPlansCallback.onSubscriptionFetched(response.body().result); + }else{ + subPlansCallback.onSubsFetchFailed(new Exception(), "Please try again later."); + } + } + + @Override + public void onFailure(Call>> call, Throwable t) { + subPlansCallback.onSubsFetchFailed(new Exception(), "Please try again later."); + } + }); + } + + public void getPaymentCred(@NonNull String token, + Map body, + @NonNull SubscriptionContracts.PaySubscriptionCallback paySubscriptionCallback){ + + apiService.paySubscription(token, body) + .enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + if (response.body() != null){ + if (response.body().status != 200 || response.body().result == null){ + paySubscriptionCallback.onPaymentCredFetchFailed(new Exception(), response.body().message); + return; + } + + paySubscriptionCallback.onPaymentCredFetched(response.body().result); + }else{ + paySubscriptionCallback.onPaymentCredFetchFailed(new Exception(), "Please try again later."); + } + } + + @Override + public void onFailure(Call> call, Throwable t) { + paySubscriptionCallback.onPaymentCredFetchFailed(new Exception(), "Please try again later."); + } + }); + + } + +} diff --git a/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/SignInFragment.java b/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/SignInFragment.java index 61129de..4a8103b 100644 --- a/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/SignInFragment.java +++ b/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/SignInFragment.java @@ -15,6 +15,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; +import androidx.navigation.NavOptions; import androidx.navigation.Navigation; import com.ssb.simplitend.R; @@ -159,10 +160,17 @@ public class SignInFragment extends Fragment implements WelcomeContracts.Registe Toast.makeText(requireContext(), "Log in successful.", Toast.LENGTH_SHORT).show(); - Intent intent = new Intent(requireActivity(), DashBoardActivity.class); - intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); - startActivity(intent); - requireActivity().finish(); + if (patientResult.patientData != null){ + if (patientResult.patientData.isCareGiverLink == 1){ + gotoProfileProgress(); + return; + } + } + + // no patient data or no caregiver contact yet added thus sending to contactlist + gotoContactList(); + + // TODO: 09-08-2023 don't do anything further more. } @Override @@ -177,4 +185,23 @@ public class SignInFragment extends Fragment implements WelcomeContracts.Registe dialog.dismiss(); }), null, null); } -} + + private void gotoProfileProgress(){ + NavOptions navOptions = new NavOptions.Builder() + .setPopUpTo(R.id.signInFragment, true) + .build(); + + Navigation.findNavController(binding.getRoot()) + .navigate(R.id.action_signInFragment_to_profileProgressFragment, null, navOptions); + } + + private void gotoContactList(){ + NavOptions navOptions = new NavOptions.Builder() + .setPopUpTo(R.id.welcomeFragment, true) + .build(); + + Navigation.findNavController(binding.getRoot()) + .navigate(R.id.action_signInFragment_to_contactListFragment, null, navOptions); + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/contacts/ContactListFragment.java b/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/contacts/ContactListFragment.java index 0882a30..f21afa1 100644 --- a/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/contacts/ContactListFragment.java +++ b/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/contacts/ContactListFragment.java @@ -69,10 +69,7 @@ public class ContactListFragment extends Fragment { private void clickEvents() { binding.backBtn.setOnClickListener(v -> { - if (Navigation.findNavController(v).getPreviousBackStackEntry() != null){ - Navigation.findNavController(v).popBackStack(); - Toast.makeText(requireContext(), "Back done", Toast.LENGTH_SHORT).show(); - } + requireActivity().onBackPressed(); }); binding.createContact.setOnClickListener(v -> diff --git a/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/register/SplashFragment.java b/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/register/SplashFragment.java index 2ed6073..c5d7051 100644 --- a/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/register/SplashFragment.java +++ b/app/src/main/java/com/ssb/simplitend/welcome/welcomepatient/fragments/register/SplashFragment.java @@ -3,6 +3,7 @@ package com.ssb.simplitend.welcome.welcomepatient.fragments.register; import android.content.Intent; import android.os.Bundle; import android.os.Handler; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -37,13 +38,12 @@ public class SplashFragment extends Fragment implements ProfileContracts.Profile @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { binding = SplashFragmentBinding.inflate(inflater, container, false); - return binding.getRoot(); } @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); + public void onResume() { + super.onResume(); checkIfAhyUser(); } @@ -83,24 +83,22 @@ public class SplashFragment extends Fragment implements ProfileContracts.Profile } } - private void gotoDashBoard(){ - Intent intent = new Intent(requireActivity(), DashBoardActivity.class); - intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); - startActivity(intent); - requireActivity().finish(); + private void gotoProfileProgress(){ + NavOptions navOptions = new NavOptions.Builder() + .setPopUpTo(R.id.splashFragment, true) + .build(); + + Navigation.findNavController(binding.getRoot()) + .navigate(R.id.action_splashFragment_to_profileProgressFragment, null, navOptions); } public void gotoWelcomeFragment(){ - new Handler().postDelayed(() -> { + NavOptions navOptions = new NavOptions.Builder() + .setPopUpTo(R.id.splashFragment, true) + .build(); - NavOptions navOptions = new NavOptions.Builder() - .setPopUpTo(R.id.splashFragment, true) - .build(); - - Navigation.findNavController(binding.mainIcon) - .navigate(R.id.action_splashFragment_to_welcomeFragment, null, navOptions); - - }, 1000); + Navigation.findNavController(binding.getRoot()) + .navigate(R.id.action_splashFragment_to_welcomeFragment, null, navOptions); } @Override @@ -108,7 +106,7 @@ public class SplashFragment extends Fragment implements ProfileContracts.Profile if (patientData.isCareGiverLink == 1){ // user has already added caregiver as a contact // thus, sending it to dashboard - gotoDashBoard(); + gotoProfileProgress(); }else{ // user has not added caregiver contact. // thus, sending it to contact list to add caregiver contact. @@ -116,7 +114,7 @@ public class SplashFragment extends Fragment implements ProfileContracts.Profile .setPopUpTo(R.id.splashFragment, true) .build(); - Navigation.findNavController(binding.mainIcon) + Navigation.findNavController(binding.getRoot()) .navigate(R.id.action_splashFragment_to_contactListFragment, null, navOptions); } } diff --git a/app/src/main/res/drawable/ic_sub_1.xml b/app/src/main/res/drawable/ic_sub_1.xml new file mode 100644 index 0000000..2cb4f56 --- /dev/null +++ b/app/src/main/res/drawable/ic_sub_1.xml @@ -0,0 +1,824 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_sub_2.xml b/app/src/main/res/drawable/ic_sub_2.xml new file mode 100644 index 0000000..18ccc6c --- /dev/null +++ b/app/src/main/res/drawable/ic_sub_2.xml @@ -0,0 +1,3368 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_sub_dash.xml b/app/src/main/res/drawable/ic_sub_dash.xml new file mode 100644 index 0000000..28e190a --- /dev/null +++ b/app/src/main/res/drawable/ic_sub_dash.xml @@ -0,0 +1,12 @@ + + + diff --git a/app/src/main/res/drawable/ic_sub_done.xml b/app/src/main/res/drawable/ic_sub_done.xml new file mode 100644 index 0000000..d1603cf --- /dev/null +++ b/app/src/main/res/drawable/ic_sub_done.xml @@ -0,0 +1,18 @@ + + + + diff --git a/app/src/main/res/layout/cg_sign_in_fragment.xml b/app/src/main/res/layout/cg_sign_in_fragment.xml index 48607f5..83edc16 100644 --- a/app/src/main/res/layout/cg_sign_in_fragment.xml +++ b/app/src/main/res/layout/cg_sign_in_fragment.xml @@ -46,7 +46,7 @@ android:fontFamily="@font/nunito_medium" android:textColor="@color/black" android:layout_gravity="start" - android:textSize="@dimen/_18ssp" + android:textSize="@dimen/_16ssp" android:layout_marginHorizontal="15dp" android:layout_marginTop="35sp" /> @@ -82,7 +82,7 @@ android:layout_marginHorizontal="15dp" android:fontFamily="@font/nunito_medium" android:textColor="@color/black" - android:textSize="@dimen/_18ssp" + android:textSize="@dimen/_16ssp" /> + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/contact_list_fragment.xml b/app/src/main/res/layout/contact_list_fragment.xml index 0ad258c..0092bdf 100644 --- a/app/src/main/res/layout/contact_list_fragment.xml +++ b/app/src/main/res/layout/contact_list_fragment.xml @@ -10,7 +10,8 @@ android:id="@+id/back_btn" android:layout_width="35sp" android:layout_height="35sp" - android:layout_margin="15dp" + android:layout_marginHorizontal="15dp" + android:layout_marginTop="15dp" android:contentDescription="@string/back_button" android:padding="5dp" android:paddingStart="-15dp" diff --git a/app/src/main/res/layout/profile_progress_fragment.xml b/app/src/main/res/layout/profile_progress_fragment.xml index ef2c266..3457c0b 100644 --- a/app/src/main/res/layout/profile_progress_fragment.xml +++ b/app/src/main/res/layout/profile_progress_fragment.xml @@ -470,7 +470,6 @@ android:layout_height="wrap_content" android:layout_marginStart="15dp" android:layout_marginVertical="20dp" - android:text="@string/proceed" android:textAppearance="@style/TextAppearance.Material3.TitleMedium" android:textAllCaps="false" android:fontFamily="@font/nunito_regular" diff --git a/app/src/main/res/layout/sign_in_fragment.xml b/app/src/main/res/layout/sign_in_fragment.xml index c554001..4adef14 100644 --- a/app/src/main/res/layout/sign_in_fragment.xml +++ b/app/src/main/res/layout/sign_in_fragment.xml @@ -129,20 +129,20 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/navigation/welcome_nav_graph.xml b/app/src/main/res/navigation/welcome_nav_graph.xml index 0804fba..36db11c 100644 --- a/app/src/main/res/navigation/welcome_nav_graph.xml +++ b/app/src/main/res/navigation/welcome_nav_graph.xml @@ -41,6 +41,12 @@ + + + OR Unlock with Fingerprint or FaceID Enter Login pin + Remote access to patient\'s profile and setting + Real time patient tracking + Real-time alerts and notifications + Setup geo-fence zone \ No newline at end of file