From 0e09787c92f85d5af399fb8859b9a9cfe30f9d2b Mon Sep 17 00:00:00 2001 From: Mihai-Cristian Condrea Date: Sun, 31 Aug 2025 10:30:41 +0300 Subject: [PATCH 1/2] Refactor Home repository to remove Android dependencies --- .../repository/DefaultHomeRepository.java | 19 +++++++++--------- .../java/data/repository/HomeRepository.java | 11 +++++----- .../source/DefaultHomeLocalDataSource.java | 20 ++++--------------- .../java/data/source/HomeLocalDataSource.java | 6 ++---- .../java/ui/screens/home/HomeViewModel.java | 14 +++++++++++-- 5 files changed, 33 insertions(+), 37 deletions(-) diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/data/repository/DefaultHomeRepository.java b/app/src/main/java/com/d4rk/androidtutorials/java/data/repository/DefaultHomeRepository.java index 11160ff7..20447c0f 100644 --- a/app/src/main/java/com/d4rk/androidtutorials/java/data/repository/DefaultHomeRepository.java +++ b/app/src/main/java/com/d4rk/androidtutorials/java/data/repository/DefaultHomeRepository.java @@ -1,10 +1,11 @@ package com.d4rk.androidtutorials.java.data.repository; -import android.content.Intent; - import com.d4rk.androidtutorials.java.data.source.HomeLocalDataSource; import com.d4rk.androidtutorials.java.data.source.HomeRemoteDataSource; -import com.d4rk.androidtutorials.java.data.source.HomeRemoteDataSource.PromotedAppsCallback; +import com.d4rk.androidtutorials.java.data.model.PromotedApp; + +import java.util.List; +import java.util.function.Consumer; /** * Default implementation of {@link HomeRepository} combining local and remote sources. @@ -21,13 +22,13 @@ public DefaultHomeRepository(HomeRemoteDataSource remoteDataSource, } @Override - public Intent getPlayStoreIntent() { - return localDataSource.getPlayStoreIntent(); + public String getPlayStoreUrl() { + return localDataSource.getPlayStoreUrl(); } @Override - public Intent getAppPlayStoreIntent(String packageName) { - return localDataSource.getAppPlayStoreIntent(packageName); + public String getAppPlayStoreUrl(String packageName) { + return localDataSource.getAppPlayStoreUrl(packageName); } @Override @@ -36,7 +37,7 @@ public String getDailyTip() { } @Override - public void fetchPromotedApps(PromotedAppsCallback callback) { - remoteDataSource.fetchPromotedApps(callback); + public void fetchPromotedApps(Consumer> callback) { + remoteDataSource.fetchPromotedApps(callback::accept); } } diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/data/repository/HomeRepository.java b/app/src/main/java/com/d4rk/androidtutorials/java/data/repository/HomeRepository.java index 77815888..80c3f383 100644 --- a/app/src/main/java/com/d4rk/androidtutorials/java/data/repository/HomeRepository.java +++ b/app/src/main/java/com/d4rk/androidtutorials/java/data/repository/HomeRepository.java @@ -1,20 +1,19 @@ package com.d4rk.androidtutorials.java.data.repository; -import android.content.Intent; - import com.d4rk.androidtutorials.java.data.model.PromotedApp; -import com.d4rk.androidtutorials.java.data.source.HomeRemoteDataSource.PromotedAppsCallback; +import java.util.List; +import java.util.function.Consumer; /** * Abstraction over home data operations. */ public interface HomeRepository { - Intent getPlayStoreIntent(); + String getPlayStoreUrl(); - Intent getAppPlayStoreIntent(String packageName); + String getAppPlayStoreUrl(String packageName); String getDailyTip(); - void fetchPromotedApps(PromotedAppsCallback callback); + void fetchPromotedApps(Consumer> callback); } diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/data/source/DefaultHomeLocalDataSource.java b/app/src/main/java/com/d4rk/androidtutorials/java/data/source/DefaultHomeLocalDataSource.java index 906749dc..4975e5a1 100644 --- a/app/src/main/java/com/d4rk/androidtutorials/java/data/source/DefaultHomeLocalDataSource.java +++ b/app/src/main/java/com/d4rk/androidtutorials/java/data/source/DefaultHomeLocalDataSource.java @@ -1,8 +1,6 @@ package com.d4rk.androidtutorials.java.data.source; import android.content.Context; -import android.content.Intent; -import android.net.Uri; import com.d4rk.androidtutorials.java.R; @@ -18,15 +16,13 @@ public DefaultHomeLocalDataSource(Context context) { } @Override - public Intent getPlayStoreIntent() { - String playStoreUrl = "https://play.google.com/store/apps/details?id=com.d4rk.androidtutorials"; - return buildPlayStoreIntent(playStoreUrl); + public String getPlayStoreUrl() { + return "https://play.google.com/store/apps/details?id=com.d4rk.androidtutorials"; } @Override - public Intent getAppPlayStoreIntent(String packageName) { - String url = "https://play.google.com/store/apps/details?id=" + packageName; - return buildPlayStoreIntent(url); + public String getAppPlayStoreUrl(String packageName) { + return "https://play.google.com/store/apps/details?id=" + packageName; } @Override @@ -37,12 +33,4 @@ public String getDailyTip() { return tips[index]; } - private Intent buildPlayStoreIntent(String url) { - Intent playStoreIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); - playStoreIntent.setPackage("com.android.vending"); - if (playStoreIntent.resolveActivity(context.getPackageManager()) != null) { - return playStoreIntent; - } - return new Intent(Intent.ACTION_VIEW, Uri.parse(url)); - } } diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/data/source/HomeLocalDataSource.java b/app/src/main/java/com/d4rk/androidtutorials/java/data/source/HomeLocalDataSource.java index 002b7ff9..f3961ec8 100644 --- a/app/src/main/java/com/d4rk/androidtutorials/java/data/source/HomeLocalDataSource.java +++ b/app/src/main/java/com/d4rk/androidtutorials/java/data/source/HomeLocalDataSource.java @@ -1,15 +1,13 @@ package com.d4rk.androidtutorials.java.data.source; -import android.content.Intent; - /** * Local data access for the home feature. */ public interface HomeLocalDataSource { - Intent getPlayStoreIntent(); + String getPlayStoreUrl(); - Intent getAppPlayStoreIntent(String packageName); + String getAppPlayStoreUrl(String packageName); String getDailyTip(); } 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 9585fd9d..cea7e877 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 @@ -2,6 +2,7 @@ import android.app.Application; import android.content.Intent; +import android.net.Uri; import androidx.annotation.NonNull; import androidx.lifecycle.AndroidViewModel; @@ -90,7 +91,7 @@ public LiveData getDailyTip() { * The HomeFragment can startActivity(...) on it. */ public Intent getOpenPlayStoreIntent() { - return homeRepository.getPlayStoreIntent(); + return buildPlayStoreIntent(homeRepository.getPlayStoreUrl()); } /** @@ -104,6 +105,15 @@ public LiveData> getPromotedApps() { * Builds an intent to open the Google Play listing for the provided package. */ public Intent getPromotedAppIntent(String packageName) { - return homeRepository.getAppPlayStoreIntent(packageName); + return buildPlayStoreIntent(homeRepository.getAppPlayStoreUrl(packageName)); + } + + private Intent buildPlayStoreIntent(String url) { + Intent playStoreIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); + playStoreIntent.setPackage("com.android.vending"); + if (playStoreIntent.resolveActivity(getApplication().getPackageManager()) != null) { + return playStoreIntent; + } + return new Intent(Intent.ACTION_VIEW, Uri.parse(url)); } } \ No newline at end of file From 099d1a3ba9e6b15be514b4ada02aa48a022e5f26 Mon Sep 17 00:00:00 2001 From: Mihai-Cristian Condrea Date: Sun, 31 Aug 2025 10:55:19 +0300 Subject: [PATCH 2/2] Replace Java Consumer with repository callback --- .../java/data/repository/DefaultHomeRepository.java | 9 +++------ .../java/data/repository/HomeRepository.java | 7 +++++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/data/repository/DefaultHomeRepository.java b/app/src/main/java/com/d4rk/androidtutorials/java/data/repository/DefaultHomeRepository.java index 20447c0f..e5f62b79 100644 --- a/app/src/main/java/com/d4rk/androidtutorials/java/data/repository/DefaultHomeRepository.java +++ b/app/src/main/java/com/d4rk/androidtutorials/java/data/repository/DefaultHomeRepository.java @@ -2,10 +2,7 @@ import com.d4rk.androidtutorials.java.data.source.HomeLocalDataSource; import com.d4rk.androidtutorials.java.data.source.HomeRemoteDataSource; -import com.d4rk.androidtutorials.java.data.model.PromotedApp; - -import java.util.List; -import java.util.function.Consumer; +import com.d4rk.androidtutorials.java.data.repository.HomeRepository.PromotedAppsCallback; /** * Default implementation of {@link HomeRepository} combining local and remote sources. @@ -37,7 +34,7 @@ public String getDailyTip() { } @Override - public void fetchPromotedApps(Consumer> callback) { - remoteDataSource.fetchPromotedApps(callback::accept); + public void fetchPromotedApps(PromotedAppsCallback callback) { + remoteDataSource.fetchPromotedApps(callback::onResult); } } diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/data/repository/HomeRepository.java b/app/src/main/java/com/d4rk/androidtutorials/java/data/repository/HomeRepository.java index 80c3f383..ab2fe615 100644 --- a/app/src/main/java/com/d4rk/androidtutorials/java/data/repository/HomeRepository.java +++ b/app/src/main/java/com/d4rk/androidtutorials/java/data/repository/HomeRepository.java @@ -2,7 +2,6 @@ import com.d4rk.androidtutorials.java.data.model.PromotedApp; import java.util.List; -import java.util.function.Consumer; /** * Abstraction over home data operations. @@ -15,5 +14,9 @@ public interface HomeRepository { String getDailyTip(); - void fetchPromotedApps(Consumer> callback); + void fetchPromotedApps(PromotedAppsCallback callback); + + interface PromotedAppsCallback { + void onResult(List apps); + } }