From 4f428e4ad7d794d1315255949a3269ed1b92c0c0 Mon Sep 17 00:00:00 2001 From: D4rK Date: Tue, 10 Jun 2025 11:55:25 +0300 Subject: [PATCH] feat: add daily tip card --- .../java/ui/screens/home/HomeFragment.java | 11 +++++++ .../java/ui/screens/home/HomeViewModel.java | 9 +++++ .../home/repository/HomeRepository.java | 15 ++++++++- app/src/main/res/layout/fragment_home.xml | 33 +++++++++++++++++++ app/src/main/res/values/strings.xml | 8 +++++ 5 files changed, 75 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/home/HomeFragment.java b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/home/HomeFragment.java index bfe65876..d985c48a 100644 --- a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/home/HomeFragment.java +++ b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/home/HomeFragment.java @@ -34,6 +34,10 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat homeViewModel = new ViewModelProvider(this).get(HomeViewModel.class); homeViewModel.getAnnouncementTitle().observe(getViewLifecycleOwner(), title -> binding.announcementTitle.setText(title)); homeViewModel.getAnnouncementSubtitle().observe(getViewLifecycleOwner(), subtitle -> binding.announcementSubtitle.setText(subtitle)); + homeViewModel.getDailyTip().observe(getViewLifecycleOwner(), tip -> { + binding.tipText.setText(tip); + binding.shareTipButton.setOnClickListener(v -> shareTip(tip)); + }); new FastScrollerBuilder(binding.scrollView) .useMd2Style() .build(); @@ -51,4 +55,11 @@ private void initializeAds() { binding.smallBannerAd.loadAd(new AdRequest.Builder().build()); binding.largeBannerAd.loadAd(new AdRequest.Builder().build()); } + + private void shareTip(String tip) { + android.content.Intent shareIntent = new android.content.Intent(android.content.Intent.ACTION_SEND); + shareIntent.setType("text/plain"); + shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, tip); + startActivity(android.content.Intent.createChooser(shareIntent, getString(com.d4rk.androidtutorials.java.R.string.share_using))); + } } \ No newline at end of file diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/home/HomeViewModel.java b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/home/HomeViewModel.java index 72230f9d..ddda5632 100644 --- a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/home/HomeViewModel.java +++ b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/home/HomeViewModel.java @@ -18,6 +18,7 @@ public class HomeViewModel extends AndroidViewModel { private final MutableLiveData announcementTitle = new MutableLiveData<>(); private final MutableLiveData announcementSubtitle = new MutableLiveData<>(); + private final MutableLiveData dailyTip = new MutableLiveData<>(); public HomeViewModel(@NonNull Application application) { super(application); @@ -25,6 +26,7 @@ public HomeViewModel(@NonNull Application application) { announcementTitle.setValue(application.getString(R.string.announcement_title)); announcementSubtitle.setValue(application.getString(R.string.announcement_subtitle)); + dailyTip.setValue(homeRepository.getDailyTip()); } /** @@ -41,6 +43,13 @@ public LiveData getAnnouncementSubtitle() { return announcementSubtitle; } + /** + * Provides a LiveData for the tip of the day text. + */ + public LiveData getDailyTip() { + return dailyTip; + } + /** * Returns an Intent that opens the Google Play Store page for your app. * The HomeFragment can startActivity(...) on it. diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/home/repository/HomeRepository.java b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/home/repository/HomeRepository.java index a8eb762d..a53a739d 100644 --- a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/home/repository/HomeRepository.java +++ b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/home/repository/HomeRepository.java @@ -4,6 +4,7 @@ import android.content.Intent; import android.net.Uri; import com.d4rk.androidtutorials.java.BuildConfig; +import com.d4rk.androidtutorials.java.R; /** * Repository for Home screen data/logic. @@ -11,8 +12,10 @@ */ public class HomeRepository { + private final Context context; + public HomeRepository(Context context) { - context.getApplicationContext(); + this.context = context.getApplicationContext(); } /** @@ -25,4 +28,14 @@ public Intent getPlayStoreIntent() { intent.setPackage("com.android.vending"); return intent; } + + /** + * Returns a daily tip based on the current date. + */ + public String getDailyTip() { + String[] tips = context.getResources().getStringArray(R.array.daily_tips); + long daysSinceEpoch = System.currentTimeMillis() / (24L * 60 * 60 * 1000); + int index = (int) (daysSinceEpoch % tips.length); + return tips[index]; + } } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 37b262ac..840c3ff0 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -134,6 +134,39 @@ app:adSize="MEDIUM_RECTANGLE" app:adUnitId="@string/ad_banner_unit_id" /> + + + + + + + + + + Ad storage Ad user data Ad personalization + Tip of the Day + + Use ConstraintLayout to create responsive UIs. + Leverage ViewBinding for safer UI code. + Implement RecyclerView for smooth scrolling lists. + Use Material Design 3 components for a modern look. + Profile your app regularly to track performance. + \ No newline at end of file