From 1083254ace1226b06f891185d9fc84b8d242b4fe Mon Sep 17 00:00:00 2001 From: Aditya_WDI Date: Wed, 23 Aug 2023 20:12:59 +0530 Subject: [PATCH] . --- app/src/main/AndroidManifest.xml | 9 +- .../articles/ArticleShowerActivity.java | 18 +- .../simplitend/articles/ArticlesActivity.java | 27 +- .../fragments/DashBoardFragment.java | 206 +++++++- .../mvvm/CaregiverMainViewModel.java | 26 +- .../mvvm/DashboardApiService.java | 7 + .../mvvm/HomeRepository.java | 28 ++ .../CgSubscriptionActivity.java | 60 ++- .../com/ssb/simplitend/faqs/FAQ_Activity.java | 21 +- .../main/res/drawable/article_home_tint.xml | 10 + app/src/main/res/drawable/ic_dash_small.xml | 12 + .../res/drawable/ic_home_notification.xml | 44 ++ app/src/main/res/drawable/ic_pill.xml | 12 + app/src/main/res/drawable/sub_check.xml | 20 +- .../main/res/drawable/sub_check_drawable.xml | 10 + app/src/main/res/drawable/sub_uncheck.xml | 14 + .../res/layout/activity_article_shower.xml | 9 + app/src/main/res/layout/activity_articles.xml | 32 ++ app/src/main/res/layout/activity_faq.xml | 33 +- .../res/layout/caregiver_dash_fragment.xml | 454 ++++++++++++++++++ .../res/layout/cg_subscription_layout.xml | 105 ++-- app/src/main/res/raw/anim_pulse.gif | Bin 0 -> 5625 bytes app/src/main/res/values/strings.xml | 6 + 23 files changed, 1068 insertions(+), 95 deletions(-) create mode 100644 app/src/main/java/com/ssb/simplitend/caregiverdashboard/mvvm/DashboardApiService.java create mode 100644 app/src/main/java/com/ssb/simplitend/caregiverdashboard/mvvm/HomeRepository.java create mode 100644 app/src/main/res/drawable/article_home_tint.xml create mode 100644 app/src/main/res/drawable/ic_dash_small.xml create mode 100644 app/src/main/res/drawable/ic_home_notification.xml create mode 100644 app/src/main/res/drawable/ic_pill.xml create mode 100644 app/src/main/res/drawable/sub_check_drawable.xml create mode 100644 app/src/main/res/drawable/sub_uncheck.xml create mode 100644 app/src/main/res/raw/anim_pulse.gif diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c65ef8e..29bc014 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -98,6 +98,11 @@ android:exported="true" android:screenOrientation="portrait"> + + + + + - - - - diff --git a/app/src/main/java/com/ssb/simplitend/articles/ArticleShowerActivity.java b/app/src/main/java/com/ssb/simplitend/articles/ArticleShowerActivity.java index b8d91fd..d55cc6c 100644 --- a/app/src/main/java/com/ssb/simplitend/articles/ArticleShowerActivity.java +++ b/app/src/main/java/com/ssb/simplitend/articles/ArticleShowerActivity.java @@ -1,14 +1,14 @@ package com.ssb.simplitend.articles; -import androidx.appcompat.app.AppCompatActivity; - import android.content.Intent; import android.os.Bundle; -import android.webkit.WebSettings; +import android.view.View; +import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Toast; -import com.ssb.simplitend.R; +import androidx.appcompat.app.AppCompatActivity; + import com.ssb.simplitend.databinding.ActivityArticleShowerBinding; public class ArticleShowerActivity extends AppCompatActivity { @@ -52,11 +52,19 @@ public class ArticleShowerActivity extends AppCompatActivity { return; } + binding.progressBar.setVisibility(View.VISIBLE); + binding.webView.getSettings().setJavaScriptEnabled(true); binding.webView.getSettings().setBuiltInZoomControls(true); binding.webView.getSettings().setDisplayZoomControls(false); - binding.webView.setWebViewClient(new WebViewClient()); + binding.webView.setWebViewClient(new WebViewClient(){ + @Override + public void onPageCommitVisible(WebView view, String url) { + super.onPageCommitVisible(view, url); + binding.progressBar.setVisibility(View.GONE); + } + }); binding.webView.loadUrl(url); } diff --git a/app/src/main/java/com/ssb/simplitend/articles/ArticlesActivity.java b/app/src/main/java/com/ssb/simplitend/articles/ArticlesActivity.java index 3e9b3b2..dba3a72 100644 --- a/app/src/main/java/com/ssb/simplitend/articles/ArticlesActivity.java +++ b/app/src/main/java/com/ssb/simplitend/articles/ArticlesActivity.java @@ -9,6 +9,7 @@ import androidx.recyclerview.widget.LinearLayoutManager; import android.app.ProgressDialog; import android.content.Intent; import android.os.Bundle; +import android.view.View; import android.widget.Toast; import com.ssb.simplitend.R; @@ -25,8 +26,6 @@ public class ArticlesActivity extends AppCompatActivity private ArticlesAdapter articlesAdapter; - private ProgressDialog progressDialog; - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -44,18 +43,14 @@ public class ArticlesActivity extends AppCompatActivity } private void getArticles() { - progressDialog.setTitle("Please wait..."); - progressDialog.setMessage("while we fetch the articles"); - progressDialog.setCancelable(false); - progressDialog.show(); + binding.noArticles.setVisibility(View.GONE); + binding.progressBar.setVisibility(View.VISIBLE); + binding.search.setVisibility(View.GONE); presenter.getArticles(this); } private void initViews() { - - progressDialog = new ProgressDialog(this); - binding.articlesRv.setLayoutManager(new LinearLayoutManager(this)); articlesAdapter = new ArticlesAdapter(this); binding.articlesRv.setAdapter(articlesAdapter); @@ -77,14 +72,24 @@ public class ArticlesActivity extends AppCompatActivity @Override public void onArticlesFetched(ArrayList articleResults) { - progressDialog.dismiss(); + binding.progressBar.setVisibility(View.GONE); + binding.noArticles.setVisibility(View.GONE); + binding.search.setVisibility(View.VISIBLE); + + if (articleResults.isEmpty()){ + binding.noArticles.setVisibility(View.VISIBLE); + binding.search.setVisibility(View.GONE); + } articlesAdapter.submitList(articleResults); } @Override public void onArticleFetchFailed(Throwable t, String message) { - progressDialog.dismiss(); + binding.progressBar.setVisibility(View.GONE); + binding.noArticles.setVisibility(View.VISIBLE); + binding.search.setVisibility(View.GONE); + Toast.makeText(this, "" + message, Toast.LENGTH_SHORT).show(); } diff --git a/app/src/main/java/com/ssb/simplitend/caregiverdashboard/fragments/DashBoardFragment.java b/app/src/main/java/com/ssb/simplitend/caregiverdashboard/fragments/DashBoardFragment.java index 7b2e4bf..ba5abe3 100644 --- a/app/src/main/java/com/ssb/simplitend/caregiverdashboard/fragments/DashBoardFragment.java +++ b/app/src/main/java/com/ssb/simplitend/caregiverdashboard/fragments/DashBoardFragment.java @@ -1,21 +1,58 @@ package com.ssb.simplitend.caregiverdashboard.fragments; +import static com.ssb.simplitend.articles.ArticleShowerActivity.ARTICLE_TITLE; +import static com.ssb.simplitend.articles.ArticleShowerActivity.ARTICLE_URL_KEY; + +import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; +import androidx.lifecycle.ViewModelProvider; +import com.bumptech.glide.Glide; +import com.google.android.gms.maps.CameraUpdateFactory; +import com.google.android.gms.maps.GoogleMap; +import com.google.android.gms.maps.OnMapReadyCallback; +import com.google.android.gms.maps.SupportMapFragment; +import com.google.android.gms.maps.model.LatLng; +import com.google.android.gms.maps.model.MarkerOptions; +import com.ssb.simplitend.R; +import com.ssb.simplitend.apputils.AppUtil; +import com.ssb.simplitend.apputils.CaregiverDataCache; +import com.ssb.simplitend.articles.ArticleContracts; +import com.ssb.simplitend.articles.ArticleResult; +import com.ssb.simplitend.articles.ArticleShowerActivity; +import com.ssb.simplitend.articles.ArticlesActivity; +import com.ssb.simplitend.caregiverdashboard.mvvm.CaregiverMainViewModel; +import com.ssb.simplitend.cg_geofencing.CgGeoFencingActivity; import com.ssb.simplitend.databinding.CaregiverDashFragmentBinding; +import com.ssb.simplitend.welcome.welcomecg.mvvm.CareGiverData; +import com.ssb.simplitend.welcome.welcomepatient.mvvm.models.PatientData; -public class DashBoardFragment extends Fragment { +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.Locale; +import java.util.TimeZone; + +public class DashBoardFragment extends Fragment implements + OnMapReadyCallback, ArticleContracts.GetArticleCallback { // view binding protected CaregiverDashFragmentBinding binding; + private CaregiverMainViewModel viewModel; + + private CareGiverData careGiverData; + + private PatientData patientData; + public DashBoardFragment(){ // required empty } @@ -24,7 +61,174 @@ public class DashBoardFragment extends Fragment { @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { binding = CaregiverDashFragmentBinding.inflate(inflater, container, false); + viewModel = new ViewModelProvider(requireActivity()).get(CaregiverMainViewModel.class); + + CaregiverDataCache.getCaregiverData(requireActivity(), (careGiverData1 -> { + this.careGiverData = careGiverData1; + + setDetails(); + }), true); + + initViews(); + + clickEvents(); + + loadArticles(); return binding.getRoot(); } + + private void loadArticles() { + viewModel.getArticles(this); + } + + private void setDetails() { + if (careGiverData == null || careGiverData.patientDetails == null){ + Toast.makeText(requireActivity(), "Couldn't load data", Toast.LENGTH_SHORT).show(); + return; + } + + patientData = careGiverData.patientDetails; + + binding.patientName.setText(patientData.first_name); + + setUpMap(); + } + + private void setUpMap() { + // Obtain the SupportMapFragment and get notified when the map is ready to be used. + SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager() + .findFragmentById(R.id.home_map); + if (mapFragment != null) { + mapFragment.getMapAsync(this); + }else{ + Toast.makeText(requireActivity(), "Couldn't load map. Please try again.", Toast.LENGTH_SHORT).show(); + } + } + + private void initViews() { + Glide.with(requireActivity()) + .asGif() + .load(R.raw.anim_pulse) + .into(binding.activityGif); + + Glide.with(requireActivity()) + .asGif() + .load(R.raw.anim_pulse) + .into(binding.upComingGif); + } + + private void clickEvents() { + binding.viewMoreArticle.setOnClickListener(v -> { + Intent intent = new Intent(requireActivity(), ArticlesActivity.class); + startActivity(intent); + }); + } + + public void setArticleDetails(ArticleResult articleResult){ + if (articleResult == null) return; + + Glide.with(requireActivity()) + .load(AppUtil.IMAGE_BASE_URL + articleResult.large_image) + .centerCrop() + .placeholder(android.R.color.darker_gray) + .error(android.R.color.darker_gray) + .into(binding.articleImg); + + if (articleResult.article_title == null){ + articleResult.article_title = "No title"; + } + + binding.articleTitle.setText(articleResult.article_title); + + if (articleResult.article_author == null){ + articleResult.article_author = "No author"; + } + + binding.articleAuthorName.setText(articleResult.article_author); + + try { + if (articleResult.created_at == null) throw new Exception(); + // parsing time of created at + SimpleDateFormat format = new SimpleDateFormat( + "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US); + format.setTimeZone(TimeZone.getTimeZone("UTC")); + + Date date = format.parse(articleResult.created_at); + if (date == null) throw new Exception(); + + SimpleDateFormat pretty_format = new SimpleDateFormat("dd MMM yy, HH:mm a", Locale.getDefault()); + String time = pretty_format.format(date); + + binding.articleCreatedAt.setText(time); + + }catch (Exception e){ + // do nothing + String none = "None"; + binding.articleCreatedAt.setText(none); + } + + binding.articleCard.setOnClickListener(v -> { + Intent intent = new Intent(requireActivity(), ArticleShowerActivity.class); + intent.putExtra(ARTICLE_URL_KEY, articleResult.article_link); + intent.putExtra(ARTICLE_TITLE, articleResult.article_title); + startActivity(intent); + }); + } + + @Override + public void onArticlesFetched(ArrayList articleResults) { + if (articleResults == null) return; + + // saving in view model + viewModel.setArticleResults(articleResults); + + if (articleResults.size() > 0){ + binding.articleView.setVisibility(View.VISIBLE); + + setArticleDetails(articleResults.get(0)); + + }else{ + // no articles + binding.articleView.setVisibility(View.GONE); + } + } + + @Override + public void onArticleFetchFailed(Throwable t, String message) { + // do nothing + binding.articleView.setVisibility(View.GONE); + } + + @Override + public void onMapReady(@NonNull GoogleMap googleMap) { + LatLng latLng; + + // loading patient's location + try { + if (patientData == null) throw new Exception(); + + double lat = Double.parseDouble(patientData.lat); + double lng = Double.parseDouble(patientData.lng); + + latLng = new LatLng(lat, lng); + }catch (Exception e){ + // near marine drive + latLng = new LatLng(18.93294274664527, 72.82806102186441); + } + + googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 16)); + + MarkerOptions markerOptions = new MarkerOptions() + .position(latLng) + .title(patientData.first_name + ""); + + googleMap.addMarker(markerOptions); + googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 16));; + + googleMap.setOnMapClickListener(latLng1 -> { + Intent intent = new Intent(requireActivity(), CgGeoFencingActivity.class); + startActivity(intent); + }); + } } diff --git a/app/src/main/java/com/ssb/simplitend/caregiverdashboard/mvvm/CaregiverMainViewModel.java b/app/src/main/java/com/ssb/simplitend/caregiverdashboard/mvvm/CaregiverMainViewModel.java index 65c2b29..75a9bf1 100644 --- a/app/src/main/java/com/ssb/simplitend/caregiverdashboard/mvvm/CaregiverMainViewModel.java +++ b/app/src/main/java/com/ssb/simplitend/caregiverdashboard/mvvm/CaregiverMainViewModel.java @@ -1,14 +1,38 @@ package com.ssb.simplitend.caregiverdashboard.mvvm; +import androidx.annotation.NonNull; import androidx.lifecycle.ViewModel; import com.google.android.material.appbar.MaterialToolbar; +import com.ssb.simplitend.articles.ArticleContracts; +import com.ssb.simplitend.articles.ArticleResult; import com.yarolegovich.slidingrootnav.SlidingRootNav; +import java.util.ArrayList; + public class CaregiverMainViewModel extends ViewModel { public SlidingRootNav slidingRootNav; - public CaregiverMainViewModel(){} + private final HomeRepository homeRepository; + + private ArrayList articleResults; + + public CaregiverMainViewModel(){ + this.homeRepository = HomeRepository.getHomeRepository(); + } + + public void setArticleResults(ArrayList articleResults) { + this.articleResults = articleResults; + } + + public void getArticles(@NonNull ArticleContracts.GetArticleCallback articleCallback){ + if (articleResults == null){ + homeRepository.getArticles(articleCallback); + }else{ + articleCallback.onArticlesFetched(articleResults); + } + + } } diff --git a/app/src/main/java/com/ssb/simplitend/caregiverdashboard/mvvm/DashboardApiService.java b/app/src/main/java/com/ssb/simplitend/caregiverdashboard/mvvm/DashboardApiService.java new file mode 100644 index 0000000..a2cf06d --- /dev/null +++ b/app/src/main/java/com/ssb/simplitend/caregiverdashboard/mvvm/DashboardApiService.java @@ -0,0 +1,7 @@ +package com.ssb.simplitend.caregiverdashboard.mvvm; + +public interface DashboardApiService { + + + +} diff --git a/app/src/main/java/com/ssb/simplitend/caregiverdashboard/mvvm/HomeRepository.java b/app/src/main/java/com/ssb/simplitend/caregiverdashboard/mvvm/HomeRepository.java new file mode 100644 index 0000000..683cc8c --- /dev/null +++ b/app/src/main/java/com/ssb/simplitend/caregiverdashboard/mvvm/HomeRepository.java @@ -0,0 +1,28 @@ +package com.ssb.simplitend.caregiverdashboard.mvvm; + +import androidx.annotation.NonNull; + +import com.ssb.simplitend.articles.ArticleContracts; +import com.ssb.simplitend.articles.ArticlePresenter; + +public class HomeRepository { + + private static HomeRepository homeRepository; + + private HomeRepository(){} + + public static synchronized HomeRepository getHomeRepository(){ + if (homeRepository == null){ + homeRepository = new HomeRepository(); + } + + return homeRepository; + } + + public void getArticles(@NonNull ArticleContracts.GetArticleCallback getArticleCallback){ + ArticlePresenter articlePresenter = ArticlePresenter.getArticlePresenter(); + + articlePresenter.getArticles(getArticleCallback); + } + +} diff --git a/app/src/main/java/com/ssb/simplitend/cg_subscription/CgSubscriptionActivity.java b/app/src/main/java/com/ssb/simplitend/cg_subscription/CgSubscriptionActivity.java index fc21403..2c3359d 100644 --- a/app/src/main/java/com/ssb/simplitend/cg_subscription/CgSubscriptionActivity.java +++ b/app/src/main/java/com/ssb/simplitend/cg_subscription/CgSubscriptionActivity.java @@ -66,28 +66,54 @@ public class CgSubscriptionActivity extends AppCompatActivity clickEvents(); + // selecting default yearly pack + binding.yearCheck.setSelected(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); + } + }); + } private void payForSubscription() { - if (careGiverData == null){ + if (careGiverData == null) { Toast.makeText(this, "Something went wrong", Toast.LENGTH_SHORT).show(); return; } -// 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; -// } + if (!binding.monthCheck.isSelected() && !binding.yearCheck.isSelected()){ + Toast.makeText(this, "Please select a plan", Toast.LENGTH_SHORT).show(); + return; + } int position = 0; + if (binding.yearCheck.isSelected()){ + position = 1; + } + + if (position >= subscriptionPlans.size()){ + Toast.makeText(this, "Something went wrong", Toast.LENGTH_SHORT).show(); + return; + } + progressDialog.setTitle("Please wait..."); progressDialog.setMessage("while we take you to the payment gateway."); progressDialog.setCancelable(false); @@ -132,18 +158,6 @@ public class CgSubscriptionActivity extends AppCompatActivity } 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); @@ -152,7 +166,6 @@ public class CgSubscriptionActivity extends AppCompatActivity progressDialog.setCancelable(false); progressDialog.show(); - String token = "Bearer " + AppUtil.getCgToken(this); presenter.getSubscriptionPlans(token, this); @@ -179,7 +192,7 @@ public class CgSubscriptionActivity extends AppCompatActivity } private void createSubscription() { - if (this.stripe_price_id == null || this.payment_intent_id == null){ + if (this.stripe_price_id == null || this.payment_intent_id == null) { // something went wrong Toast.makeText(this, "Something went wrong", Toast.LENGTH_SHORT).show(); return; @@ -246,11 +259,6 @@ public class CgSubscriptionActivity extends AppCompatActivity 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 @@ -263,7 +271,7 @@ public class CgSubscriptionActivity extends AppCompatActivity @Override public void onSubscriptionCreated() { // statically changing the flag of subscription to 1 - if (careGiverData != null){ + if (careGiverData != null) { careGiverData.isCaregiverTakeSubscription = 1; } diff --git a/app/src/main/java/com/ssb/simplitend/faqs/FAQ_Activity.java b/app/src/main/java/com/ssb/simplitend/faqs/FAQ_Activity.java index 958ff9d..0790c14 100644 --- a/app/src/main/java/com/ssb/simplitend/faqs/FAQ_Activity.java +++ b/app/src/main/java/com/ssb/simplitend/faqs/FAQ_Activity.java @@ -5,6 +5,7 @@ import androidx.recyclerview.widget.LinearLayoutManager; import android.app.ProgressDialog; import android.os.Bundle; +import android.view.View; import android.widget.Toast; import com.ssb.simplitend.R; @@ -19,8 +20,6 @@ public class FAQ_Activity extends AppCompatActivity implements FAQContracts.GETF private FAQsPresenter presenter; - private ProgressDialog progressDialog; - private FAQAdapter faqAdapter; @Override @@ -40,8 +39,6 @@ public class FAQ_Activity extends AppCompatActivity implements FAQContracts.GETF } private void initViews() { - progressDialog = new ProgressDialog(this); - binding.faqsRv.setLayoutManager(new LinearLayoutManager(this)); faqAdapter = new FAQAdapter(); binding.faqsRv.setAdapter(faqAdapter); @@ -54,17 +51,20 @@ public class FAQ_Activity extends AppCompatActivity implements FAQContracts.GETF } private void getFAQs() { - progressDialog.setTitle("Please wait..."); - progressDialog.setMessage("while we fetch the FAQs"); - progressDialog.setCancelable(false); - progressDialog.show(); + binding.progressBar.setVisibility(View.VISIBLE); + binding.noFaqs.setVisibility(View.GONE); presenter.getFAQs(this); } @Override public void onFAQsFetched(ArrayList faqResults) { - progressDialog.dismiss(); + binding.progressBar.setVisibility(View.GONE); + binding.noFaqs.setVisibility(View.GONE); + + if (faqResults.isEmpty()){ + binding.noFaqs.setVisibility(View.VISIBLE); + } faqAdapter.submitList(faqResults); @@ -72,7 +72,8 @@ public class FAQ_Activity extends AppCompatActivity implements FAQContracts.GETF @Override public void onFAQsFetchedFailed(Throwable t, String message) { - progressDialog.dismiss(); + binding.progressBar.setVisibility(View.GONE); + binding.noFaqs.setVisibility(View.VISIBLE); Toast.makeText(this, "" + message, Toast.LENGTH_SHORT).show(); } diff --git a/app/src/main/res/drawable/article_home_tint.xml b/app/src/main/res/drawable/article_home_tint.xml new file mode 100644 index 0000000..5e6ff8c --- /dev/null +++ b/app/src/main/res/drawable/article_home_tint.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_dash_small.xml b/app/src/main/res/drawable/ic_dash_small.xml new file mode 100644 index 0000000..db9941b --- /dev/null +++ b/app/src/main/res/drawable/ic_dash_small.xml @@ -0,0 +1,12 @@ + + + diff --git a/app/src/main/res/drawable/ic_home_notification.xml b/app/src/main/res/drawable/ic_home_notification.xml new file mode 100644 index 0000000..af708b5 --- /dev/null +++ b/app/src/main/res/drawable/ic_home_notification.xml @@ -0,0 +1,44 @@ + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_pill.xml b/app/src/main/res/drawable/ic_pill.xml new file mode 100644 index 0000000..e14a1ba --- /dev/null +++ b/app/src/main/res/drawable/ic_pill.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/sub_check.xml b/app/src/main/res/drawable/sub_check.xml index 1aa59b9..9402c23 100644 --- a/app/src/main/res/drawable/sub_check.xml +++ b/app/src/main/res/drawable/sub_check.xml @@ -1,11 +1,17 @@ - + - + + + - + + + - \ No newline at end of file + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/sub_check_drawable.xml b/app/src/main/res/drawable/sub_check_drawable.xml new file mode 100644 index 0000000..175712e --- /dev/null +++ b/app/src/main/res/drawable/sub_check_drawable.xml @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/sub_uncheck.xml b/app/src/main/res/drawable/sub_uncheck.xml new file mode 100644 index 0000000..68cc19f --- /dev/null +++ b/app/src/main/res/drawable/sub_uncheck.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_article_shower.xml b/app/src/main/res/layout/activity_article_shower.xml index 1ac309a..fc8ef85 100644 --- a/app/src/main/res/layout/activity_article_shower.xml +++ b/app/src/main/res/layout/activity_article_shower.xml @@ -27,4 +27,13 @@ android:layout_below="@id/toolbar" /> + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_articles.xml b/app/src/main/res/layout/activity_articles.xml index bc13880..93edd9a 100644 --- a/app/src/main/res/layout/activity_articles.xml +++ b/app/src/main/res/layout/activity_articles.xml @@ -74,6 +74,38 @@ + + + + + + + + @@ -30,6 +29,38 @@ android:textSize="@dimen/_18ssp" android:textColor="@color/black" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/cg_subscription_layout.xml b/app/src/main/res/layout/cg_subscription_layout.xml index 03ca1fc..7f814d4 100644 --- a/app/src/main/res/layout/cg_subscription_layout.xml +++ b/app/src/main/res/layout/cg_subscription_layout.xml @@ -3,8 +3,8 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" - android:orientation="vertical" - android:background="@color/white"> + android:background="@color/white" + android:orientation="vertical"> + android:overScrollMode="never" + android:scrollbars="none"> - - android:fontFamily="@font/nunito_bold" - android:text="@string/year" - android:textColor="@color/black" - android:textSize="@dimen/_14ssp" + - /> + + + @@ -194,6 +220,7 @@ - - android:fontFamily="@font/nunito_bold" - android:text="@string/monthly" - android:textColor="@color/black" - android:textSize="@dimen/_14ssp" + + android:src="@drawable/sub_check_drawable" + + /> + + + + diff --git a/app/src/main/res/raw/anim_pulse.gif b/app/src/main/res/raw/anim_pulse.gif new file mode 100644 index 0000000000000000000000000000000000000000..d47276c0e5c4f6a5b13b24d5caf88b9e12f0e072 GIT binary patch literal 5625 zcma)AcR1DW`+vtN9qZU3WE^`JLMZzfNmeqV$X1kO?>$fUp2yC}sADFwR~ZqK65^Cn zM$-5`4(C&!&mX_*cb)4xj_ZCsuls&p_x+6fQP)tDmbvNyc|czw2r^HD%+sMOY0wq$ zodKDFf5A8SoeG(!LT0IuMLJ}f2AO3*rr>uP$8RznRReuxMP1dCB4Wgc00YMk>@d;Z z-(S4y8fxsfuHUxzx^B&W^9H+}o14pRSy9pJUbgl&B33t@MfZ)65P$>!9uP!?4v8-t z_=qUXs-KRon`_xcguO+jEJYTt_CH)B>-nNRxfQ$oeR%s9f}Aw`X~BAgwm|A&@mF}P zX32Q@X4H_wquHu$GRo+lceOh)Iu(;29_~`a4=isq{fryIZU1QdjbP-HMj6|AM5L8s zd#B!iJIcf_qjA~ZGcvubvG3)|4xCv)R@216D=MSBsejr_k1!unNQeZIhK_;{1f$X| zQw+~aemi*TJu}wun7iu1qz^+vWB_z{4@3+%mYkk->5{R~IItf1%L*fX)~m5nV;q!z zBlf@y+czJ<4<<*+PPYs9zdVAx+W67?0Qf!t&j6zo z>*H`N*s?M6)XVO0rT*iD0&pBa(7haj`2ey*W&YOiF9;<8LQDbTc)F%K^&YEblT6S8 zL`p?Kzz}G(IHt&`SPr+CLw8M&5DU?Cvi;-YeH$axa}L{vh4p zveo@jGj$?+smT$Sbo5{#kd_2G2{A*IV4#RtpN1o=$JEg6rM!2(S5IFnx|6U{U(n|* zP|f%HO3bG%zwI`9ZsXh3>X}?lG>887EdsGXG=Sm^@Lka=J$5K;a{g_sMZ~>A&-^kI zxX}C!Cz&l!rh|zBf}I=meN61UrugVOCnr4%z-P;q|hVidwwuUe=&O|cUU6F3^RUoF)3WOon2BVd>^7Es z*iuK|uE9!eLJgKDPwNm}h^+ZI*nN50nKDZ_x8n4cpu&jedNAw19I`-2@PT0Vc!#&_ z2E8XT#5^#EgU*%N@M04_?sz>oW3}nNu;aJLm0QO9V?3&x>lRT2JcX7$i9S;VqyIs# zncF>CS7dazQb)DYAVuy-s;SXB!b7uWdBX=?INAB#%|GA7@c_1TAoU8RG_Oj;fT z&TNH}XaR!~8q2avxX%^NDe<;$Q!O^}51g-O@J;#Fxi;Vw5L?-2+2NkY0>eZl!^4E5 z0%Kxtile=S5(VT_&WZgi6eR)^EPdk{3o(^^aD$X1?9YYj-d}E^HjAS@?f&>y$IYrXaPGzQM=b-iT)AKMzXG&yG z<6{E{27YN$f}`Lhh%E*mn>21{@|z{^4NK`9!^;I9I7=Ca+p_CHeF8;Vw}(Da4l-6?h#}g>o;=EXtqh5u-(|rG=%rtF#4^EZFmHywysdlxs&;6ESM0!5&_wARpD|4f_Nm5 z5EDcN)*CknQ08;*-ulH2HUGBci?g;j>WnNOgKB!%OWrw+Ey$;S*Wr=BqHCv55g?s* ztItU`_gSf%W~E7W4Piq8oB19aJD$y#3M?}g>6sz>U&_2jL=my2JNX6W4>ETM>iPEA(t{ZemY0{KiY+d`P+h{s`w?M$F*)oywJmuunis9hL zz<6O7Ueq(a$15I8#({oZ3hDuBchw?7V_a{=$Fe6lM=GVtxu|io+ayQF5E209M*<*pF! z88)?z`#?+JfLH;?}NhOMrCkl-!&U>A!q^qkbdstMSd#YLZfnY;kHIL(?s_vH7 zzFur&d#8qIV!ck+;6S74vk~{{{#pCENp73BlC^G2=}kqe5wE?Y7S=gmZ0s*XusP$^ z6oBOMo3q;gL(N%sEECPC?gcR!J2vj1;_;mq?3zz|nR&T$meoUx zjl|L1&CN@JA$`YJCQy*boy(Iag3ZXA-ya#}7ayJ&nVeuw#O!Du6N^rz%_=nJ%Rh?2 z#O0S2RsG@-8f9 zq=(zfBhdS{Z*V}UTX;mIU33h8m>7{utVulj-c4sN!xR3gd3RED(&!2_i%UwC%0n=U zRTca>dbQOz9@Zphl-+N+tR`B2>9KyZeQ#Iez@Xft!eQxW&yOeN>Snd}jQW}Nb3A_C zZF+xU{>{?zld)!;`Or+=vRd&*+bdt0ci$O0zx=GpC*$Ki@x+0dhDG}{n*DJo0-=X1 zp_o%LgG7f1N~sIOOjsFwRote;=23~fyG7%V61aQNSj(yi{H+mG)`3(i(D{E$#g5&R zYE-(w$q`<@H0;zeinSZ?%>5{rD|VQi^0w+Ib-ILz>G?%k=EK_N&u2E1l5Z$W;np09 zP7Ye@c1T_B89lM#N#4`Dc!$)ls&+}x+xt$CkAOdIh?{>%XjpU<1KLH3h%H7xHP*!b z2A5xoQ)0r|eCzaxBGZ!6va~|?YUK(q@!YCP*9QtstS!=Y0azt5UxNDEL-{!UA==zDT;rGHpfzC1j9sC*zefiFqdZ09j#BdF|yS z?D^^1hDmw7fiv%Ae^SokG>m$D{AM z1hA*swk@$;TU;>Ew&VODYhfH}xUu{3 z#FMdWlT(73yhhKS8@{x+s9ji&T2hjHidz|&X~1=U`D(Gb6>F;ebXRk9LtL-tdLD`O zL-LHzB{eK9VO>VZfZmTBUGR6zHU_;lSEb#L$(LPjnYve4h0c;1WBPhb67nsS{e114U8LrT-`@y{BlY z3Q+V4P_!N>DgqR>YMHw!O*$N*Qb<(>6ct^jod$}I|D|Y25J~;Z14SzZ2F|Y514Sn< z0Y%+ZLxMtG8T`V%!Xl(&Vk4uXeLRyA!-1r!cXR0T99@us*>R2q`N>zyE7EPMs%y+^ z=^iR$A6eaMibpq;vfoFwHP>s42N*s*+f9#Y*B!|TpR-sGO55bxT80XU^{C=peAv z)9mWjpYItku)_D4z?}g2R)sV`+X-4FVkP6I*$WJj+Om4DDN{#_Fn`8wtSEJ98cbWeOLgFE9{MWL9MIx5Py^wy0$Og+ z&Hi$UmEponNo8$T=A3l0@<{*BrACV&2AG-(qyjPS9p1z|U}|Svuq)RvQzm9Ji|nv4 zuFC{5{<#ii5qf$s7ZpembjF+@QP*mEL4(`58tXlmw;Y%?buZPkAhD_TM%V*YGk=Wl zLXki#^D7GU?S=rlH*u*FY_<%G2{Npb_eNJI=;-Ae%^m4?7HkIQz8bf>AF-OFGMf$V zTpAZ^PN*6C;qUF`7HA3H2L6#y1v(1^WC9U$0SV<@uo_kvV@2P(WedL0Kk3_#c#Y@J zxQmb+s1hnLjv0)r;_4<@gccUL?K9cxLaFTWGd0EMd_PkcAz1(iy*Kf30B_^!F0rOt zxGu#nl(`+rwGYSX;WG=)Dxk(iNCuD}RF#~9Q2F+|Ac`5IjU|hBq1H@E2PsG*=m+ji z>fjE_0to{BH1;kxtc){57k`<*_f7A;m*<&JoM+^;qq8nHwjNvey?0yEQs-Oq;YdDY z*|OGZ+(`b#{`)4?Q}^8mK6*W#ukp|p$sBnvvA_B6$8Q4IN%0RHl*UbxKPal+ARCT3 z8t>;GKtS&IAmn%ml}D3oXH9D_Px3Katyi0x_yPeSP+DdHM1}_;P))KwC~DtW*JCuJ zHpd864T!7&=HMO5<8K*p=*)36-l^CgQuZA`~Djgg)Vp++IyyIe8_T)fB+tB2?%1m2OX>=NA?iG14xhk z9}nQ2?fyaoytqY}Fdjtk#|}p|4K6sgpiBuOfYA>BjK;sx>B=+Vv=1r^MCS;susw-j zaNRzQiPCS=%milehPP)un46u{^lU-d>7q&jf*nNeL>NsB_h^#q)RkX1CU^!#@{bh; zr|N?jw|We+a~*gF+Monthly $5.95 /year + On going activity + Upcoming activity + None + view more + No articles found! + No FAQs found! Kms