From 5b56f826a45af33c269d811c12c40aa8d4a66fa9 Mon Sep 17 00:00:00 2001 From: Aditya_WDI Date: Thu, 5 Oct 2023 20:46:22 +0530 Subject: [PATCH] . --- .idea/deploymentTargetDropDown.xml | 12 -- .idea/inspectionProfiles/Project_Default.xml | 8 + .../simplitend/appblocking/FUAActivity.java | 100 +++++----- .../com/app/simplitend/apputils/AppUtil.java | 4 +- .../app/simplitend/apputils/Constants.java | 1 + .../apputils/NotificationService.java | 5 +- .../callwhitelisting/CallService.java | 2 +- .../deactivateacc/AccountPresenter.java | 1 + .../fragments/MyPatientFragment.java | 14 +- .../CgSubscriptionActivity.java | 183 +++++++++++++++--- .../cg_subscription/mvp/CurrentPlan.java | 18 ++ .../mvp/SubscriptionApiService.java | 6 + .../mvp/SubscriptionContracts.java | 6 + .../mvp/SubscriptionPresenter.java | 26 +++ .../PatSettingsActivity.java | 2 +- .../PatientMainViewModel.java | 2 +- .../fragments/PatientDashboardFragment.java | 15 +- .../RegisterCompleteFragment.java | 28 +++ .../contacts/ContactListAdapter.java | 9 + .../contacts/CreateContactFragment.java | 9 + .../fragments/contacts/mvvm/Contact.java | 1 + .../contacts/mvvm/ContactViewModel.java | 43 ++++ .../contacts/mvvm/UserContactRepository.java | 10 +- .../contacts/mvvm/models/ContactData.java | 3 +- .../fragments/register/SplashFragment.java | 12 +- .../res/layout/cg_subscription_layout.xml | 22 ++- .../main/res/layout/contact_view_holder.xml | 9 +- .../main/res/layout/my_patient_fragment.xml | 1 + app/src/main/res/values/strings.xml | 2 + 29 files changed, 442 insertions(+), 112 deletions(-) create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 app/src/main/java/com/app/simplitend/cg_subscription/mvp/CurrentPlan.java diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml index f5eef4c..758cc80 100644 --- a/.idea/deploymentTargetDropDown.xml +++ b/.idea/deploymentTargetDropDown.xml @@ -1,18 +1,6 @@ - - - - - - - - - - - - diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..1c3c002 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/app/src/main/java/com/app/simplitend/appblocking/FUAActivity.java b/app/src/main/java/com/app/simplitend/appblocking/FUAActivity.java index 2641646..e5de34f 100644 --- a/app/src/main/java/com/app/simplitend/appblocking/FUAActivity.java +++ b/app/src/main/java/com/app/simplitend/appblocking/FUAActivity.java @@ -11,7 +11,9 @@ import android.provider.Settings; import android.text.TextUtils; import android.util.Log; import android.view.View; +import android.view.ViewGroup; import android.widget.LinearLayout; +import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; @@ -36,20 +38,28 @@ public class FUAActivity extends AppCompatActivity { MySharedPref mySharedPref; List whiteList; + TextView all_apps_title; + LinearLayout no_fua; List installed_app_list; + public static final String IS_FROM_DASHBOARD = "is_from_dashboard"; + protected boolean isFromDashboard; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_fua); + isFromDashboard = getIntent().getBooleanExtra(IS_FROM_DASHBOARD, false); + // swBlock = (SwitchCompat) findViewById(R.id.swBlock); rvApps = (RecyclerView) findViewById(R.id.rvApps); rvWhiteApps = (RecyclerView) findViewById(R.id.rv_white_apps); mySharedPref = new MySharedPref(FUAActivity.this); no_fua = findViewById(R.id.no_fua); + all_apps_title = findViewById(R.id.all_app_tile); if (!isAccessibilityAppBlockingEnabled()) { openAccessibilityDialog(); @@ -69,25 +79,6 @@ public class FUAActivity extends AppCompatActivity { rvWhiteApps.setVisibility(View.GONE); } - adapter = new MyAppsAdapter(FUAActivity.this, getInstalledApps(), false, appList -> { - if (!isContainsWhiteList(appList)) { - whiteList.add(appList); - Collections.sort(whiteList, (o1, o2) -> o1.getName().compareToIgnoreCase(o2.getName())); - } else { - whiteList.remove(getPosition(appList)); - } - - if (whiteList.size() > 0) { - no_fua.setVisibility(View.GONE); - rvWhiteApps.setVisibility(View.VISIBLE); - } else { - no_fua.setVisibility(View.VISIBLE); - rvWhiteApps.setVisibility(View.GONE); - } - - whiteListAdapter.notifyDataSetChanged(); - }); - whiteListAdapter = new MyAppsAdapter(FUAActivity.this, whiteList, true, new MyAppsAdapter.ItemClicked() { @Override public void onCLick(AppList appList) { @@ -100,41 +91,50 @@ public class FUAActivity extends AppCompatActivity { } }); - rvApps.setLayoutManager(new GridLayoutManager(this, 4)); - rvApps.setAdapter(adapter); - rvWhiteApps.setLayoutManager(new GridLayoutManager(this, 4)); rvWhiteApps.setAdapter(whiteListAdapter); -// swBlock.setOnCheckedChangeListener((buttonView, isChecked) -> { -// -// if (!isAccessibilityAppBlockingEnabled() && isChecked) { -// Intent accessibilityIntent = new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS); -// startActivity(accessibilityIntent); -// } -// -// // Intent serviceIntent = new Intent(getApplicationContext(), service.class); -//// ContextCompat.startForegroundService(getApplicationContext(), serviceIntent); -// -// // if (isChecked) { -// -// // startService(new Intent(MainActivity.this, ServiceTest.class)); -// -//// Intent serviceIntent = new Intent(MainActivity.this, OverlayService.class); -//// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { -//// getApplicationContext().startForegroundService(serviceIntent); -//// } else { -//// getApplicationContext().startService(serviceIntent); -//// } -// -// /* Intent serviceIntent = new Intent(MainActivity.this, OverlayService.class); -// startService(serviceIntent);*/ -// -// /* } else { -// stopService(new Intent(MainActivity.this, OverlayService.class)); -// }*/ + if (!isFromDashboard) { + // from settings page + rvApps.setVisibility(View.VISIBLE); + all_apps_title.setVisibility(View.VISIBLE); + findViewById(R.id.done_btn).setVisibility(View.VISIBLE); -// }); + adapter = new MyAppsAdapter(FUAActivity.this, getInstalledApps(), false, appList -> { + if (!isContainsWhiteList(appList)) { + whiteList.add(appList); + Collections.sort(whiteList, (o1, o2) -> o1.getName().compareToIgnoreCase(o2.getName())); + } else { + whiteList.remove(getPosition(appList)); + } + + if (whiteList.size() > 0) { + no_fua.setVisibility(View.GONE); + rvWhiteApps.setVisibility(View.VISIBLE); + } else { + no_fua.setVisibility(View.VISIBLE); + rvWhiteApps.setVisibility(View.GONE); + } + + whiteListAdapter.notifyDataSetChanged(); + }); + + rvApps.setLayoutManager(new GridLayoutManager(this, 4)); + rvApps.setAdapter(adapter); + } else { + // from dashboard + rvApps.setVisibility(View.GONE); + all_apps_title.setVisibility(View.GONE); + findViewById(R.id.done_btn).setVisibility(View.GONE); + + LinearLayout.LayoutParams p1 = (LinearLayout.LayoutParams) no_fua.getLayoutParams(); + p1.weight = 10; + no_fua.setLayoutParams(p1); + + LinearLayout.LayoutParams p2 = (LinearLayout.LayoutParams) rvWhiteApps.getLayoutParams(); + p2.weight = 10; + rvWhiteApps.setLayoutParams(p2); + } findViewById(R.id.done_btn).setOnClickListener(v -> { onBackPressed(); diff --git a/app/src/main/java/com/app/simplitend/apputils/AppUtil.java b/app/src/main/java/com/app/simplitend/apputils/AppUtil.java index 0224562..1fdc977 100644 --- a/app/src/main/java/com/app/simplitend/apputils/AppUtil.java +++ b/app/src/main/java/com/app/simplitend/apputils/AppUtil.java @@ -272,9 +272,11 @@ public abstract class AppUtil { switch (content_type) { case Constants.PATIENT_OUT_OF_GEOFENCE: + title = patient_name + " is out of Geofence!"; + setupBottomSheet(binding, R.drawable.img_medication_time, - title, "Current location of patient", + title, "Current location", "Unknown", "Call patient", v -> { CaregiverDataCache.getCaregiverData(context, (careGiverData -> { diff --git a/app/src/main/java/com/app/simplitend/apputils/Constants.java b/app/src/main/java/com/app/simplitend/apputils/Constants.java index 6b1ebd8..69983d3 100644 --- a/app/src/main/java/com/app/simplitend/apputils/Constants.java +++ b/app/src/main/java/com/app/simplitend/apputils/Constants.java @@ -5,6 +5,7 @@ public abstract class Constants { public static final String ACTIVITY_TIME = "activity_time"; public static final String MEDICINE_TIME = "medicine_time"; public static final String GEOFENCING_RADIUS_UPDATED = "geofencing_radius_updated"; + public static final String GEOFENCING_RADIUS_ADDED = "geofencing_radius_add"; public static final String HOME_LOCATION_UPDATED = "home_location_updated"; public static final String PATIENT_OUT_OF_GEOFENCE = "patient_outof_geofence"; public static final String PATIENT_REQUESTED_DIRECTION = "patient_requested_help"; diff --git a/app/src/main/java/com/app/simplitend/apputils/NotificationService.java b/app/src/main/java/com/app/simplitend/apputils/NotificationService.java index a8f1cc2..c8ae7a1 100644 --- a/app/src/main/java/com/app/simplitend/apputils/NotificationService.java +++ b/app/src/main/java/com/app/simplitend/apputils/NotificationService.java @@ -57,7 +57,10 @@ public class NotificationService implements INotificationServiceExtension { iNotificationReceivedEvent.getContext().sendBroadcast(intent); - if (Constants.GEOFENCING_RADIUS_UPDATED.equals(content_type) || Constants.HOME_LOCATION_UPDATED.equals(content_type)) { + if (Constants.GEOFENCING_RADIUS_ADDED.equals(content_type) + || Constants.GEOFENCING_RADIUS_UPDATED.equals(content_type) + || Constants.HOME_LOCATION_UPDATED.equals(content_type)) { + if (AppUtil.isPatientLoggedIn(iNotificationReceivedEvent.getContext())){ // Either Geofence radius or Patient's location has changed. Log.d(GEOFENCE_TAG, "Adding geo fence..."); diff --git a/app/src/main/java/com/app/simplitend/callwhitelisting/CallService.java b/app/src/main/java/com/app/simplitend/callwhitelisting/CallService.java index 9b5b43e..85fd0b0 100644 --- a/app/src/main/java/com/app/simplitend/callwhitelisting/CallService.java +++ b/app/src/main/java/com/app/simplitend/callwhitelisting/CallService.java @@ -47,7 +47,7 @@ public class CallService extends CallScreeningService { Set white_contacts = AppUtil.getWhiteListedContacts(this); Log.d(CONTACT_WHITE_LISTING_TAG, "WHITE LISTED CONTACTS -> " + white_contacts); - if (white_contacts != null && white_contacts.contains(phoneNumber)){ + if (white_contacts != null && !white_contacts.contains(phoneNumber)){ endCall(builder); Log.d(CONTACT_WHITE_LISTING_TAG, "CALL ENDED"); } diff --git a/app/src/main/java/com/app/simplitend/caregiverdashboard/activities/deactivateacc/AccountPresenter.java b/app/src/main/java/com/app/simplitend/caregiverdashboard/activities/deactivateacc/AccountPresenter.java index 2c6897d..89da55f 100644 --- a/app/src/main/java/com/app/simplitend/caregiverdashboard/activities/deactivateacc/AccountPresenter.java +++ b/app/src/main/java/com/app/simplitend/caregiverdashboard/activities/deactivateacc/AccountPresenter.java @@ -20,6 +20,7 @@ public class AccountPresenter { public static final String ACC_ACTIVE_STR = "1"; public static final int ACC_DEACTIVATE_BY_USER = 2; public static final int ACC_DEACTIVATE_BY_ADMIN = 3; + public static final String DEFAULT_ACTIVE_STATUS = "0"; private static AccountPresenter accountPresenter; diff --git a/app/src/main/java/com/app/simplitend/caregiverdashboard/fragments/MyPatientFragment.java b/app/src/main/java/com/app/simplitend/caregiverdashboard/fragments/MyPatientFragment.java index a7a508e..6addfc9 100644 --- a/app/src/main/java/com/app/simplitend/caregiverdashboard/fragments/MyPatientFragment.java +++ b/app/src/main/java/com/app/simplitend/caregiverdashboard/fragments/MyPatientFragment.java @@ -1,6 +1,10 @@ package com.app.simplitend.caregiverdashboard.fragments; -import static com.app.simplitend.caregiverdashboard.activities.PatientProfileShowerActivity.*; +import static com.app.simplitend.caregiverdashboard.activities.PatientProfileShowerActivity.ACTIVITY_F; +import static com.app.simplitend.caregiverdashboard.activities.PatientProfileShowerActivity.CONTACTS_F; +import static com.app.simplitend.caregiverdashboard.activities.PatientProfileShowerActivity.MED_INFO_F; +import static com.app.simplitend.caregiverdashboard.activities.PatientProfileShowerActivity.MED_REMINDER_F; +import static com.app.simplitend.caregiverdashboard.activities.PatientProfileShowerActivity.WHICH_FRAGMENT; import static com.app.simplitend.cg_geofencing.CgGeoFencingActivity.GEOFENCE_DETAILS_KEY; import android.app.ProgressDialog; @@ -17,7 +21,6 @@ import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; -import com.bumptech.glide.Glide; import com.app.simplitend.R; import com.app.simplitend.apputils.AppUtil; import com.app.simplitend.apputils.CaregiverDataCache; @@ -27,8 +30,10 @@ import com.app.simplitend.caregiverdashboard.mvvm.CaregiverMainViewModel; import com.app.simplitend.caregiverdashboard.mvvm.CgHomeContracts; import com.app.simplitend.caregiverdashboard.mvvm.models.GeoFenceDetails; import com.app.simplitend.cg_geofencing.CgGeoFencingActivity; +import com.app.simplitend.cg_subscription.CgSubscriptionActivity; import com.app.simplitend.databinding.MyPatientFragmentBinding; import com.app.simplitend.welcome.welcomecg.mvvm.CareGiverData; +import com.bumptech.glide.Glide; public class MyPatientFragment extends Fragment implements CgHomeContracts.GetGeoFenceCallback { @@ -150,6 +155,11 @@ public class MyPatientFragment extends Fragment implements CgHomeContracts.GetGe } }); + binding.subPlans.setOnClickListener(v -> { + Intent intent = new Intent(requireActivity(), CgSubscriptionActivity.class); + startActivity(intent); + }); + } private void gotoProfileShower(String which_f) { diff --git a/app/src/main/java/com/app/simplitend/cg_subscription/CgSubscriptionActivity.java b/app/src/main/java/com/app/simplitend/cg_subscription/CgSubscriptionActivity.java index 66a7ece..3351f0b 100644 --- a/app/src/main/java/com/app/simplitend/cg_subscription/CgSubscriptionActivity.java +++ b/app/src/main/java/com/app/simplitend/cg_subscription/CgSubscriptionActivity.java @@ -21,6 +21,7 @@ import com.app.simplitend.R; import com.app.simplitend.apputils.AppUtil; import com.app.simplitend.apputils.CaregiverDataCache; import com.app.simplitend.caregiverdashboard.activities.CgProfileProgressActivity; +import com.app.simplitend.cg_subscription.mvp.CurrentPlan; import com.app.simplitend.cg_subscription.mvp.SubscriptionContracts; import com.app.simplitend.cg_subscription.mvp.SubscriptionCredentials; import com.app.simplitend.cg_subscription.mvp.SubscriptionPresenter; @@ -42,7 +43,7 @@ import okhttp3.RequestBody; public class CgSubscriptionActivity extends AppCompatActivity implements SubscriptionContracts.GetSubPlansCallback, SubscriptionContracts.PaySubscriptionCallback, - SubscriptionContracts.CreateSubscriptionCallback { + SubscriptionContracts.CreateSubscriptionCallback, SubscriptionContracts.GetCurrentPlanCallback { private static final String TAG = "CgSubscriptionActivity"; @@ -68,43 +69,89 @@ public class CgSubscriptionActivity extends AppCompatActivity presenter = SubscriptionPresenter.getPresenter(); - CaregiverDataCache.getCaregiverData(this, (careGiverData -> { - this.careGiverData = careGiverData; - }), true); - initViews(); clickEvents(); + CaregiverDataCache.getCaregiverData(this, (careGiverData -> { + this.careGiverData = careGiverData; + + if (careGiverData != null){ + if (careGiverData.isCaregiverTakeSubscription != 1){ + // not subscribed thus, load plans + loadPlans(); + paymentSheet = new PaymentSheet(this, this::onPaymentSheetResult); + }else{ + // Already subscribed thus, loading current plans + loadCurrentPlans(); + } + }else{ + binding.plansView.setVisibility(View.GONE); + } + + }), true); + // selecting default yearly pack binding.yearCheck.setSelected(true); } + private void loadCurrentPlans() { + CaregiverDataCache.getCaregiverData(this, (careGiverData1 -> { + this.careGiverData = careGiverData1; + + if (careGiverData1 == null){ + binding.plansView.setVisibility(View.GONE); + return; + } + + progressDialog.setTitle("Please wait...."); + progressDialog.setMessage("while we fetch your subscription details"); + progressDialog.setCancelable(false); + progressDialog.show(); + + String token = "Bearer " + AppUtil.getCgToken(this); + presenter.getCurrentSubscriptionPlan(careGiverData.caregiver_xid, + token, this); + }), true); + } + private void clickEvents() { binding.makePayment.setOnClickListener(view -> { - payForSubscription(); - }); - - binding.yearCard.setOnClickListener(v -> { - if (!binding.yearCheck.isSelected()){ - // not selected - binding.monthCheck.setSelected(false); - binding.yearCheck.setSelected(true); - } - }); - - binding.monthCard.setOnClickListener(v -> { - if (!binding.monthCheck.isActivated()){ - binding.yearCheck.setSelected(false); - binding.monthCheck.setSelected(true); - } + CaregiverDataCache.getCaregiverData(this, (careGiverData1 -> { + this.careGiverData = careGiverData1; + if (careGiverData1 != null){ + if (careGiverData.isCaregiverTakeSubscription == 1){ + // no sub + Toast.makeText(this, "Cancel subscription", Toast.LENGTH_SHORT).show(); + }else{ + payForSubscription(); + } + }else{ + Toast.makeText(this, "Couldn't load data", Toast.LENGTH_SHORT).show(); + } + }), true); }); binding.contactAdmin.setOnClickListener(view -> { contactMail(); }); - binding.retry.setOnClickListener(v -> loadPlans()); + binding.retry.setOnClickListener(v -> { + CaregiverDataCache.getCaregiverData(this, (careGiverData1 -> { + this.careGiverData = careGiverData1; + + if (careGiverData != null){ + if (careGiverData.isCaregiverTakeSubscription != 1){ + // no sub + loadPlans(); + }else{ + loadCurrentPlans(); + } + }else{ + Toast.makeText(this, "Couldn't load data", Toast.LENGTH_SHORT).show(); + } + }), true); + }); } @@ -177,10 +224,6 @@ public class CgSubscriptionActivity extends AppCompatActivity // loading subscription plans progressDialog = new ProgressDialog(this); - loadPlans(); - - paymentSheet = new PaymentSheet(this, this::onPaymentSheetResult); - try { String description = getString(R.string.subscribe_description); String contact_email = getString(R.string.contact_email); @@ -208,6 +251,11 @@ public class CgSubscriptionActivity extends AppCompatActivity CaregiverDataCache.getCaregiverData(this, (careGiverData1 -> { this.careGiverData = careGiverData1; + if (careGiverData1 == null){ + binding.plansView.setVisibility(View.GONE); + return; + } + progressDialog.setTitle("Please wait...."); progressDialog.setMessage("while we fetch subscription plans for you."); progressDialog.setCancelable(false); @@ -274,7 +322,76 @@ public class CgSubscriptionActivity extends AppCompatActivity } + private void inflateCurrentPlan(CurrentPlan currentPlan){ + binding.makePayment.setVisibility(View.VISIBLE); + binding.makePayment.setText(R.string.cancel_subscription); + + binding.yourPlan.setVisibility(View.VISIBLE); + + SubscriptionPlan plan = currentPlan.plan; + + if (getString(R.string.monthly).equals(plan.plan_name)){ + // monthly + binding.monthlyName.setText(plan.plan_name); + + binding.monthCheck.setSelected(true); + + String price = "$" + plan.plan_value; + binding.monthlyPrice.setText(price); + + binding.monthCard.setVisibility(View.VISIBLE); + binding.yearCard.setVisibility(View.GONE); + + }else if (getString(R.string.year).equals(plan.plan_name)){ + // yearly + binding.yearlyName.setText(plan.plan_name); + + binding.yearCheck.setSelected(true); + + String price = "$" + plan.plan_value; + binding.yearDiscountedPrice.setText(price); + + binding.yearActualPrice.setVisibility(View.GONE); + binding.yearDiscount.setVisibility(View.GONE); + + try { + BigDecimal year_price_d = new BigDecimal(plan.plan_value); + String yearly_month_price = year_price_d.divide(new BigDecimal(12), RoundingMode.DOWN).toString(); + yearly_month_price = "$" + yearly_month_price; + binding.yearlyMonthPrice.setText(yearly_month_price); + }catch (Exception e){ + binding.yearlyMonthPrice.setVisibility(View.GONE); + } + + binding.monthCard.setVisibility(View.GONE); + binding.yearCard.setVisibility(View.VISIBLE); + } + } + private void inflatePlans() { + + binding.makePayment.setVisibility(View.VISIBLE); + binding.makePayment.setText(getString(R.string.subscribe)); + + binding.yourPlan.setVisibility(View.GONE); + + binding.yearCard.setVisibility(View.VISIBLE); + binding.yearCard.setOnClickListener(v -> { + if (!binding.yearCheck.isSelected()){ + // not selected + binding.monthCheck.setSelected(false); + binding.yearCheck.setSelected(true); + } + }); + + binding.monthCard.setVisibility(View.VISIBLE); + binding.monthCard.setOnClickListener(v -> { + if (!binding.monthCheck.isActivated()){ + binding.yearCheck.setSelected(false); + binding.monthCheck.setSelected(true); + } + }); + try { String monthly_price = null; String yearly_price = null; @@ -397,10 +514,22 @@ public class CgSubscriptionActivity extends AppCompatActivity progressDialog.dismiss(); AppUtil.showAlert(this, getString(R.string.something_went_wrong), - message + "\nNegative response will be handled properly.", + message , "OK", ((dialogInterface, i) -> { }), null, null); } + + @Override + public void currentPlan(@NonNull CurrentPlan currentPlan) { + progressDialog.dismiss(); + inflateCurrentPlan(currentPlan); + } + + @Override + public void failedCurrentPlan(Throwable t, String message) { + progressDialog.dismiss(); + binding.plansView.setVisibility(View.GONE); + } } diff --git a/app/src/main/java/com/app/simplitend/cg_subscription/mvp/CurrentPlan.java b/app/src/main/java/com/app/simplitend/cg_subscription/mvp/CurrentPlan.java new file mode 100644 index 0000000..7e114f5 --- /dev/null +++ b/app/src/main/java/com/app/simplitend/cg_subscription/mvp/CurrentPlan.java @@ -0,0 +1,18 @@ +package com.app.simplitend.cg_subscription.mvp; + +import com.app.simplitend.cg_subscription.SubscriptionPlan; + +public class CurrentPlan{ + public String subscription_id; + public SubscriptionPlan plan; + public String current_period_start; + public String current_period_end; + public String customer_name; + public String customer_email; + public double amount; + public String metadata; + public String subscription_status; + public String pay_status; + public String ended_at; + public String is_subscription_completed; +} diff --git a/app/src/main/java/com/app/simplitend/cg_subscription/mvp/SubscriptionApiService.java b/app/src/main/java/com/app/simplitend/cg_subscription/mvp/SubscriptionApiService.java index f14c563..417aa43 100644 --- a/app/src/main/java/com/app/simplitend/cg_subscription/mvp/SubscriptionApiService.java +++ b/app/src/main/java/com/app/simplitend/cg_subscription/mvp/SubscriptionApiService.java @@ -13,6 +13,8 @@ import retrofit2.http.Header; import retrofit2.http.Multipart; import retrofit2.http.POST; import retrofit2.http.PartMap; +import retrofit2.http.Path; +import retrofit2.http.Query; public interface SubscriptionApiService { @@ -32,4 +34,8 @@ public interface SubscriptionApiService { @PartMap Map bodyMap ); + @GET("api/get-subscription-details") + Call> getCurrentPlan(@Query("caregiver_id") long c_id, + @Header("Authorization") String token); + } diff --git a/app/src/main/java/com/app/simplitend/cg_subscription/mvp/SubscriptionContracts.java b/app/src/main/java/com/app/simplitend/cg_subscription/mvp/SubscriptionContracts.java index 9a1f570..a288fbb 100644 --- a/app/src/main/java/com/app/simplitend/cg_subscription/mvp/SubscriptionContracts.java +++ b/app/src/main/java/com/app/simplitend/cg_subscription/mvp/SubscriptionContracts.java @@ -1,5 +1,7 @@ package com.app.simplitend.cg_subscription.mvp; +import androidx.annotation.NonNull; + import com.app.simplitend.cg_subscription.SubscriptionPlan; import java.util.ArrayList; @@ -28,4 +30,8 @@ public interface SubscriptionContracts { void onSubscriptionCreateFailed(Throwable throwable, String message); } + interface GetCurrentPlanCallback{ + void currentPlan(@NonNull CurrentPlan currentPlan); + void failedCurrentPlan(Throwable t, String message); + } } diff --git a/app/src/main/java/com/app/simplitend/cg_subscription/mvp/SubscriptionPresenter.java b/app/src/main/java/com/app/simplitend/cg_subscription/mvp/SubscriptionPresenter.java index 608d934..891bf51 100644 --- a/app/src/main/java/com/app/simplitend/cg_subscription/mvp/SubscriptionPresenter.java +++ b/app/src/main/java/com/app/simplitend/cg_subscription/mvp/SubscriptionPresenter.java @@ -110,4 +110,30 @@ public class SubscriptionPresenter { }); } + public void getCurrentSubscriptionPlan(long c_id, + @NonNull String token, + @NonNull SubscriptionContracts.GetCurrentPlanCallback callback){ + apiService.getCurrentPlan(c_id, token) + .enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + if (response.body() != null){ + if (response.body().status != 200 || response.body().error_code == 1 || response.body().result == null){ + callback.failedCurrentPlan(new Exception(), response.body().message); + return; + } + + callback.currentPlan(response.body().result); + }else{ + callback.failedCurrentPlan(new Exception(), "Please try again later."); + } + } + + @Override + public void onFailure(Call> call, Throwable t) { + callback.failedCurrentPlan(new Exception(), "Please try again later."); + } + }); + } + } diff --git a/app/src/main/java/com/app/simplitend/patient_dashboard/PatSettingsActivity.java b/app/src/main/java/com/app/simplitend/patient_dashboard/PatSettingsActivity.java index 27bcbe4..3697378 100644 --- a/app/src/main/java/com/app/simplitend/patient_dashboard/PatSettingsActivity.java +++ b/app/src/main/java/com/app/simplitend/patient_dashboard/PatSettingsActivity.java @@ -81,7 +81,7 @@ public class PatSettingsActivity extends AppCompatActivity implements CgHomeCont progressDialog.setCancelable(false); progressDialog.show(); - accountPresenter.signOut("Bearer " + AppUtil.getCgToken(this), + accountPresenter.signOut("Bearer " + AppUtil.getPatientToken(this), this); })); }); diff --git a/app/src/main/java/com/app/simplitend/patient_dashboard/PatientMainViewModel.java b/app/src/main/java/com/app/simplitend/patient_dashboard/PatientMainViewModel.java index 7b1c710..f992185 100644 --- a/app/src/main/java/com/app/simplitend/patient_dashboard/PatientMainViewModel.java +++ b/app/src/main/java/com/app/simplitend/patient_dashboard/PatientMainViewModel.java @@ -131,7 +131,7 @@ public class PatientMainViewModel extends ViewModel { geofencingClient.addGeofences(geofencingRequest, pendingIntent) .addOnSuccessListener(aVoid -> { - Log.d(GEOFENCE_TAG, "Geofence added successfully."); + Log.d(GEOFENCE_TAG, "Geofence added successfully. " + latLng + " Radius: " + GEOFENCING_RADIUS + " meters"); AppUtil.updatePatientGeofence(activity, latLng.latitude+"", latLng.longitude+"", GEOFENCING_RADIUS+"", unit); }) diff --git a/app/src/main/java/com/app/simplitend/patient_dashboard/fragments/PatientDashboardFragment.java b/app/src/main/java/com/app/simplitend/patient_dashboard/fragments/PatientDashboardFragment.java index 501d181..1e8babf 100644 --- a/app/src/main/java/com/app/simplitend/patient_dashboard/fragments/PatientDashboardFragment.java +++ b/app/src/main/java/com/app/simplitend/patient_dashboard/fragments/PatientDashboardFragment.java @@ -1,5 +1,6 @@ package com.app.simplitend.patient_dashboard.fragments; +import static com.app.simplitend.appblocking.FUAActivity.IS_FROM_DASHBOARD; import static com.app.simplitend.apputils.NotificationService.CONTENT_TYPE_KEY; import static com.app.simplitend.caregiverdashboard.activities.EditProfileInfoActivity.IS_CAREGIVER; import static com.app.simplitend.patient_dashboard.DirectionToHomeActivity.LAT_KEY; @@ -14,6 +15,7 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.content.res.Resources; import android.os.Bundle; import android.telecom.TelecomManager; import android.view.LayoutInflater; @@ -243,6 +245,7 @@ public class PatientDashboardFragment extends Fragment implements ProfileContrac binding.apps.setOnClickListener(v -> { Intent intent = new Intent(requireActivity(), FUAActivity.class); + intent.putExtra(IS_FROM_DASHBOARD, true); startActivity(intent); }); @@ -327,11 +330,13 @@ public class PatientDashboardFragment extends Fragment implements ProfileContrac private void removeReminder() { binding.homeReminder.setVisibility(View.GONE); - ViewGroup.LayoutParams layoutParams = binding.bgImg.getLayoutParams(); - - layoutParams.height = (int) getResources().getDimension(com.intuit.sdp.R.dimen._140sdp); - - binding.bgImg.setLayoutParams(layoutParams); + try { + ViewGroup.LayoutParams layoutParams = binding.bgImg.getLayoutParams(); + layoutParams.height = (int) getResources().getDimension(com.intuit.sdp.R.dimen._140sdp); + binding.bgImg.setLayoutParams(layoutParams); + } catch (Exception e) { + // do nothing + } viewModel.message_title = null; } diff --git a/app/src/main/java/com/app/simplitend/patientprofile/RegisterCompleteFragment.java b/app/src/main/java/com/app/simplitend/patientprofile/RegisterCompleteFragment.java index 2a97364..e78038d 100644 --- a/app/src/main/java/com/app/simplitend/patientprofile/RegisterCompleteFragment.java +++ b/app/src/main/java/com/app/simplitend/patientprofile/RegisterCompleteFragment.java @@ -1,7 +1,12 @@ package com.app.simplitend.patientprofile; +import static com.app.simplitend.apputils.NotificationService.CONTENT_TYPE_KEY; + import android.app.ProgressDialog; +import android.content.BroadcastReceiver; +import android.content.Context; import android.content.Intent; +import android.content.IntentFilter; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.view.LayoutInflater; @@ -14,6 +19,7 @@ import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.vectordrawable.graphics.drawable.Animatable2Compat; +import com.app.simplitend.apputils.Constants; import com.bumptech.glide.Glide; import com.bumptech.glide.load.DataSource; import com.bumptech.glide.load.engine.GlideException; @@ -45,6 +51,8 @@ public class RegisterCompleteFragment extends Fragment implements ProfileContrac private ProgressDialog progressDialog; + private BroadcastReceiver notification_receiver; + public RegisterCompleteFragment() { // required } @@ -96,9 +104,29 @@ public class RegisterCompleteFragment extends Fragment implements ProfileContrac checkConnectionStatus(); }); + notification_receiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String content_type = intent.getStringExtra(CONTENT_TYPE_KEY); + + if (Constants.NEW_SUBSCRIPTION.equals(content_type)){ + // new subscription was bought by caregiver + gotoPatientDashBoard(); + } + } + }; + + requireContext().registerReceiver(notification_receiver, new IntentFilter(AppUtil.NOTIFICATION_ACTION)); + return binding.getRoot(); } + @Override + public void onDestroyView() { + super.onDestroyView(); + requireContext().unregisterReceiver(notification_receiver); + } + private void checkConnectionStatus() { progressDialog = new ProgressDialog(requireContext()); progressDialog.setTitle("Please wait..."); diff --git a/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/contacts/ContactListAdapter.java b/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/contacts/ContactListAdapter.java index 7ffd094..2187717 100644 --- a/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/contacts/ContactListAdapter.java +++ b/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/contacts/ContactListAdapter.java @@ -1,5 +1,6 @@ package com.app.simplitend.welcome.welcomepatient.fragments.contacts; +import android.net.Uri; import android.view.LayoutInflater; import android.view.ViewGroup; @@ -8,8 +9,10 @@ import androidx.recyclerview.widget.DiffUtil; import androidx.recyclerview.widget.ListAdapter; import androidx.recyclerview.widget.RecyclerView; +import com.app.simplitend.R; import com.app.simplitend.databinding.ContactViewHolderBinding; import com.app.simplitend.welcome.welcomepatient.fragments.contacts.mvvm.Contact; +import com.bumptech.glide.Glide; import java.util.ArrayList; @@ -132,6 +135,12 @@ public class ContactListAdapter extends ListAdapter, ContactL binding.name.setText(contact.first_name); binding.initial.setText(contact.first_name.toUpperCase()); + + if (contact.imageUri != null){ + binding.image.setImageURI(Uri.parse(contact.imageUri)); + }else{ + binding.image.setImageResource(R.drawable.ic_user_filled); + } } } diff --git a/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/contacts/CreateContactFragment.java b/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/contacts/CreateContactFragment.java index 23fdd7e..c5bab04 100644 --- a/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/contacts/CreateContactFragment.java +++ b/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/contacts/CreateContactFragment.java @@ -473,6 +473,15 @@ public class CreateContactFragment extends Fragment implements WelcomeContracts. .placeholder(android.R.color.darker_gray) .error(R.drawable.ic_contact) .fitCenter().into(binding.image); + }else if (contactData.photo_uri != null){ + Glide.with(requireContext()) + .load(contactData.photo_uri) + .placeholder(android.R.color.darker_gray) + .error(R.drawable.ic_contact) + .fitCenter().into(binding.image); + + selectedImageUri = contactViewModel.accessPHotoUri(requireContext(), contactData.photo_uri); + Log.d(TAG, "setDetails: "); } if (contactData.first_name != null) { diff --git a/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/contacts/mvvm/Contact.java b/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/contacts/mvvm/Contact.java index cdab8c5..0bdd54f 100644 --- a/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/contacts/mvvm/Contact.java +++ b/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/contacts/mvvm/Contact.java @@ -22,6 +22,7 @@ public class Contact implements Serializable { if (contacts != null && !contacts.isEmpty()){ this.first_name = contacts.get(0).first_name; this.email_address = contacts.get(0).email_address; + this.imageUri = contacts.get(0).imageUri; StringBuilder stringBuilder = new StringBuilder(); diff --git a/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/contacts/mvvm/ContactViewModel.java b/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/contacts/mvvm/ContactViewModel.java index 9641737..a029eb3 100644 --- a/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/contacts/mvvm/ContactViewModel.java +++ b/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/contacts/mvvm/ContactViewModel.java @@ -1,7 +1,11 @@ package com.app.simplitend.welcome.welcomepatient.fragments.contacts.mvvm; import android.app.Application; +import android.content.ContentResolver; import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.net.Uri; import android.util.Log; import android.view.LayoutInflater; @@ -21,6 +25,8 @@ import org.json.JSONArray; import org.json.JSONObject; import java.io.BufferedReader; +import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; @@ -73,6 +79,43 @@ public class ContactViewModel extends AndroidViewModel { return contactLIst; } + public Uri accessPHotoUri(Context context, String photo_uri) { + // Create a ContentResolver + ContentResolver contentResolver = context.getContentResolver(); + + try { + // Convert the PHOTO_URI string to a Uri object + Uri uri = Uri.parse(photo_uri); + + // Use ContentResolver to open an InputStream from the Uri + InputStream inputStream = contentResolver.openInputStream(uri); + + if (inputStream != null) { + // Decode the InputStream into a Bitmap + Bitmap contactPhoto = BitmapFactory.decodeStream(inputStream); + + File file = new File(context.getCacheDir(), "img_temp_contact"); + // Create an output stream to write the Bitmap data to the file + FileOutputStream outputStream = new FileOutputStream(file); + + // Compress and save the Bitmap as a PNG file (you can choose a different format) + contactPhoto.compress(Bitmap.CompressFormat.PNG, 100, outputStream); + + // Close the output stream and input stream when done + outputStream.close(); + + // Close the InputStream when done + inputStream.close(); + + return Uri.fromFile(file); + } + } catch (Exception e) { + // do nothing + } + + return null; + } + public UserContactRepository getContactRepository() { return contactRepository; } diff --git a/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/contacts/mvvm/UserContactRepository.java b/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/contacts/mvvm/UserContactRepository.java index 4953b0a..e85fc35 100644 --- a/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/contacts/mvvm/UserContactRepository.java +++ b/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/contacts/mvvm/UserContactRepository.java @@ -3,6 +3,8 @@ package com.app.simplitend.welcome.welcomepatient.fragments.contacts.mvvm; import android.content.ContentResolver; import android.content.Context; import android.database.Cursor; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.net.Uri; import android.provider.ContactsContract; import android.util.Log; @@ -17,6 +19,8 @@ import com.app.simplitend.welcome.welcomepatient.mvvm.WelcomeApiService; import com.app.simplitend.welcome.welcomepatient.mvvm.WelcomeContracts; import com.app.simplitend.welcome.welcomepatient.mvvm.models.CallResponse; +import java.io.IOException; +import java.io.InputStream; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -36,7 +40,8 @@ public class UserContactRepository { private static final String[] PROJECTION = new String[]{ ContactsContract.CommonDataKinds.Phone.CONTACT_ID, ContactsContract.Contacts.DISPLAY_NAME, - ContactsContract.CommonDataKinds.Phone.NUMBER + ContactsContract.CommonDataKinds.Phone.NUMBER, + ContactsContract.CommonDataKinds.Phone.PHOTO_URI }; private static UserContactRepository contactRepository; @@ -185,11 +190,13 @@ public class UserContactRepository { final int c_id_index = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID); final int nameIndex = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME); final int numberIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); + final int photoIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_URI); while (cursor.moveToNext()) { String name = cursor.getString(nameIndex); String number = cursor.getString(numberIndex); String c_id = cursor.getString(c_id_index); + String photo_uri = cursor.getString(photoIndex); if (number == null) continue; if (name == null || name.isEmpty()) name = "No name"; @@ -203,6 +210,7 @@ public class UserContactRepository { } Contact contact = new Contact(name, number); + contact.imageUri = photo_uri; Set contactList; diff --git a/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/contacts/mvvm/models/ContactData.java b/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/contacts/mvvm/models/ContactData.java index 6db1f95..9d42fa9 100644 --- a/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/contacts/mvvm/models/ContactData.java +++ b/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/contacts/mvvm/models/ContactData.java @@ -14,7 +14,7 @@ public class ContactData implements Serializable { public String email_address; public String relationship; public String is_sos; - public String contact_photo; + public String contact_photo, photo_uri; public CareGiverData care_giver_data; public String extra_phone_numbers; @@ -31,6 +31,7 @@ public class ContactData implements Serializable { this.phone_number = contact.phone_number; this.email_address = contact.email_address; this.extra_phone_numbers = contact.extra_phone_numbers; + this.photo_uri = contact.imageUri; } public ContactData(int id) { diff --git a/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/register/SplashFragment.java b/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/register/SplashFragment.java index a5f2995..a709c8c 100644 --- a/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/register/SplashFragment.java +++ b/app/src/main/java/com/app/simplitend/welcome/welcomepatient/fragments/register/SplashFragment.java @@ -270,10 +270,14 @@ public class SplashFragment extends Fragment if (!patientData.caregiver_status.equals(AccountPresenter.ACC_ACTIVE_STR)){ // account is not active - gotoReActivateScreen(patientData.caregiver_status, - AppUtil.getPatientToken(requireContext()), - -1, false); - return; + if (!patientData.caregiver_status.equals(AccountPresenter.DEFAULT_ACTIVE_STATUS)) { + // account is in default state + + gotoReActivateScreen(patientData.caregiver_status, + AppUtil.getPatientToken(requireContext()), + -1, false); + return; + } } binding.retry.setVisibility(View.GONE); diff --git a/app/src/main/res/layout/cg_subscription_layout.xml b/app/src/main/res/layout/cg_subscription_layout.xml index 6583d6c..c933d0e 100644 --- a/app/src/main/res/layout/cg_subscription_layout.xml +++ b/app/src/main/res/layout/cg_subscription_layout.xml @@ -63,8 +63,25 @@ android:layout_height="wrap_content" android:orientation="vertical"> + + @@ -166,7 +185,6 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginStart="10dp" android:fontFamily="@font/nunito_bold" tools:text="@string/_53_5" android:textColor="@color/color_primary_dark" @@ -233,6 +251,7 @@ - + /> Notifications Couldn\'t load notifications No notifications + Your plan + Cancel subscription \ No newline at end of file