Skip to content

Commit 62040b6

Browse files
Merge pull request #54 from MihaiCristianCondrea/codex/refactor-homerepository-and-dependencies
Refactor Home repository to remove Android dependencies
2 parents 0502b37 + 099d1a3 commit 62040b6

File tree

5 files changed

+31
-35
lines changed

5 files changed

+31
-35
lines changed

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

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
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.repository.HomeRepository.PromotedAppsCallback;
86

97
/**
108
* Default implementation of {@link HomeRepository} combining local and remote sources.
@@ -21,13 +19,13 @@ public DefaultHomeRepository(HomeRemoteDataSource remoteDataSource,
2119
}
2220

2321
@Override
24-
public Intent getPlayStoreIntent() {
25-
return localDataSource.getPlayStoreIntent();
22+
public String getPlayStoreUrl() {
23+
return localDataSource.getPlayStoreUrl();
2624
}
2725

2826
@Override
29-
public Intent getAppPlayStoreIntent(String packageName) {
30-
return localDataSource.getAppPlayStoreIntent(packageName);
27+
public String getAppPlayStoreUrl(String packageName) {
28+
return localDataSource.getAppPlayStoreUrl(packageName);
3129
}
3230

3331
@Override
@@ -37,6 +35,6 @@ public String getDailyTip() {
3735

3836
@Override
3937
public void fetchPromotedApps(PromotedAppsCallback callback) {
40-
remoteDataSource.fetchPromotedApps(callback);
38+
remoteDataSource.fetchPromotedApps(callback::onResult);
4139
}
4240
}
Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,22 @@
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;
75

86
/**
97
* Abstraction over home data operations.
108
*/
119
public interface HomeRepository {
1210

13-
Intent getPlayStoreIntent();
11+
String getPlayStoreUrl();
1412

15-
Intent getAppPlayStoreIntent(String packageName);
13+
String getAppPlayStoreUrl(String packageName);
1614

1715
String getDailyTip();
1816

1917
void fetchPromotedApps(PromotedAppsCallback callback);
18+
19+
interface PromotedAppsCallback {
20+
void onResult(List<PromotedApp> apps);
21+
}
2022
}
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)