Skip to content

Commit 0e09787

Browse files
Refactor Home repository to remove Android dependencies
1 parent 0502b37 commit 0e09787

File tree

5 files changed

+33
-37
lines changed

5 files changed

+33
-37
lines changed

app/src/main/java/com/d4rk/androidtutorials/java/data/repository/DefaultHomeRepository.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package com.d4rk.androidtutorials.java.data.repository;
22

3-
import android.content.Intent;
4-
53
import com.d4rk.androidtutorials.java.data.source.HomeLocalDataSource;
64
import com.d4rk.androidtutorials.java.data.source.HomeRemoteDataSource;
7-
import com.d4rk.androidtutorials.java.data.source.HomeRemoteDataSource.PromotedAppsCallback;
5+
import com.d4rk.androidtutorials.java.data.model.PromotedApp;
6+
7+
import java.util.List;
8+
import java.util.function.Consumer;
89

910
/**
1011
* Default implementation of {@link HomeRepository} combining local and remote sources.
@@ -21,13 +22,13 @@ public DefaultHomeRepository(HomeRemoteDataSource remoteDataSource,
2122
}
2223

2324
@Override
24-
public Intent getPlayStoreIntent() {
25-
return localDataSource.getPlayStoreIntent();
25+
public String getPlayStoreUrl() {
26+
return localDataSource.getPlayStoreUrl();
2627
}
2728

2829
@Override
29-
public Intent getAppPlayStoreIntent(String packageName) {
30-
return localDataSource.getAppPlayStoreIntent(packageName);
30+
public String getAppPlayStoreUrl(String packageName) {
31+
return localDataSource.getAppPlayStoreUrl(packageName);
3132
}
3233

3334
@Override
@@ -36,7 +37,7 @@ public String getDailyTip() {
3637
}
3738

3839
@Override
39-
public void fetchPromotedApps(PromotedAppsCallback callback) {
40-
remoteDataSource.fetchPromotedApps(callback);
40+
public void fetchPromotedApps(Consumer<List<PromotedApp>> callback) {
41+
remoteDataSource.fetchPromotedApps(callback::accept);
4142
}
4243
}
Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,19 @@
11
package com.d4rk.androidtutorials.java.data.repository;
22

3-
import android.content.Intent;
4-
53
import com.d4rk.androidtutorials.java.data.model.PromotedApp;
6-
import com.d4rk.androidtutorials.java.data.source.HomeRemoteDataSource.PromotedAppsCallback;
4+
import java.util.List;
5+
import java.util.function.Consumer;
76

87
/**
98
* Abstraction over home data operations.
109
*/
1110
public interface HomeRepository {
1211

13-
Intent getPlayStoreIntent();
12+
String getPlayStoreUrl();
1413

15-
Intent getAppPlayStoreIntent(String packageName);
14+
String getAppPlayStoreUrl(String packageName);
1615

1716
String getDailyTip();
1817

19-
void fetchPromotedApps(PromotedAppsCallback callback);
18+
void fetchPromotedApps(Consumer<List<PromotedApp>> callback);
2019
}
Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package com.d4rk.androidtutorials.java.data.source;
22

33
import android.content.Context;
4-
import android.content.Intent;
5-
import android.net.Uri;
64

75
import com.d4rk.androidtutorials.java.R;
86

@@ -18,15 +16,13 @@ public DefaultHomeLocalDataSource(Context context) {
1816
}
1917

2018
@Override
21-
public Intent getPlayStoreIntent() {
22-
String playStoreUrl = "https://play.google.com/store/apps/details?id=com.d4rk.androidtutorials";
23-
return buildPlayStoreIntent(playStoreUrl);
19+
public String getPlayStoreUrl() {
20+
return "https://play.google.com/store/apps/details?id=com.d4rk.androidtutorials";
2421
}
2522

2623
@Override
27-
public Intent getAppPlayStoreIntent(String packageName) {
28-
String url = "https://play.google.com/store/apps/details?id=" + packageName;
29-
return buildPlayStoreIntent(url);
24+
public String getAppPlayStoreUrl(String packageName) {
25+
return "https://play.google.com/store/apps/details?id=" + packageName;
3026
}
3127

3228
@Override
@@ -37,12 +33,4 @@ public String getDailyTip() {
3733
return tips[index];
3834
}
3935

40-
private Intent buildPlayStoreIntent(String url) {
41-
Intent playStoreIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
42-
playStoreIntent.setPackage("com.android.vending");
43-
if (playStoreIntent.resolveActivity(context.getPackageManager()) != null) {
44-
return playStoreIntent;
45-
}
46-
return new Intent(Intent.ACTION_VIEW, Uri.parse(url));
47-
}
4836
}
Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
package com.d4rk.androidtutorials.java.data.source;
22

3-
import android.content.Intent;
4-
53
/**
64
* Local data access for the home feature.
75
*/
86
public interface HomeLocalDataSource {
97

10-
Intent getPlayStoreIntent();
8+
String getPlayStoreUrl();
119

12-
Intent getAppPlayStoreIntent(String packageName);
10+
String getAppPlayStoreUrl(String packageName);
1311

1412
String getDailyTip();
1513
}

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/home/HomeViewModel.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import android.app.Application;
44
import android.content.Intent;
5+
import android.net.Uri;
56

67
import androidx.annotation.NonNull;
78
import androidx.lifecycle.AndroidViewModel;
@@ -90,7 +91,7 @@ public LiveData<String> getDailyTip() {
9091
* The HomeFragment can startActivity(...) on it.
9192
*/
9293
public Intent getOpenPlayStoreIntent() {
93-
return homeRepository.getPlayStoreIntent();
94+
return buildPlayStoreIntent(homeRepository.getPlayStoreUrl());
9495
}
9596

9697
/**
@@ -104,6 +105,15 @@ public LiveData<List<PromotedApp>> getPromotedApps() {
104105
* Builds an intent to open the Google Play listing for the provided package.
105106
*/
106107
public Intent getPromotedAppIntent(String packageName) {
107-
return homeRepository.getAppPlayStoreIntent(packageName);
108+
return buildPlayStoreIntent(homeRepository.getAppPlayStoreUrl(packageName));
109+
}
110+
111+
private Intent buildPlayStoreIntent(String url) {
112+
Intent playStoreIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
113+
playStoreIntent.setPackage("com.android.vending");
114+
if (playStoreIntent.resolveActivity(getApplication().getPackageManager()) != null) {
115+
return playStoreIntent;
116+
}
117+
return new Intent(Intent.ACTION_VIEW, Uri.parse(url));
108118
}
109119
}

0 commit comments

Comments
 (0)