Skip to content

Commit 96351f6

Browse files
Merge pull request #65 from MihaiCristianCondrea/codex/refactor-supportviewmodel-callbacks-and-methods
Refactor support view model callbacks
2 parents 89bac3d + 007a115 commit 96351f6

File tree

7 files changed

+31
-57
lines changed

7 files changed

+31
-57
lines changed

app/src/main/java/com/d4rk/androidtutorials/java/data/model/AdLoadParams.java

Lines changed: 0 additions & 24 deletions
This file was deleted.

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

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import com.android.billingclient.api.PendingPurchasesParams;
1212
import com.android.billingclient.api.ProductDetails;
1313
import com.android.billingclient.api.QueryProductDetailsParams;
14-
import com.d4rk.androidtutorials.java.data.model.AdLoadParams;
1514
import com.d4rk.androidtutorials.java.data.repository.SupportRepository.BillingFlowLauncher;
1615
import com.d4rk.androidtutorials.java.data.repository.SupportRepository.OnProductDetailsListener;
1716
import com.google.android.gms.ads.AdRequest;
@@ -121,44 +120,40 @@ public void queryProductDetails(List<String> productIds, OnProductDetailsListene
121120
/**
122121
* Launch the billing flow for a particular product.
123122
*/
124-
public void initiatePurchase(String productId, BillingFlowLauncher launcher) {
123+
public BillingFlowLauncher initiatePurchase(String productId) {
125124
ProductDetails details = productDetailsMap.get(productId);
126-
if (details != null && billingClient != null && launcher != null) {
127-
// Note: In a real app, you would select a specific offer. For simplicity,
128-
// we're assuming there's only one or we're using the base plan.
129-
// For subscriptions, this would be ProductDetails.getSubscriptionOfferDetails()
125+
if (details != null && billingClient != null) {
130126
String offerToken = "";
131127
if (details.getOneTimePurchaseOfferDetails() != null) {
132128
offerToken = details.getOneTimePurchaseOfferDetails().getOfferToken();
133129
}
134130

135-
assert offerToken != null;
131+
String finalOfferToken = offerToken;
136132
List<BillingFlowParams.ProductDetailsParams> productDetailsParamsList =
137133
Collections.singletonList(
138134
BillingFlowParams.ProductDetailsParams.newBuilder()
139135
.setProductDetails(details)
140-
.setOfferToken(offerToken)
136+
.setOfferToken(finalOfferToken)
141137
.build()
142138
);
143139

144140
BillingFlowParams flowParams = BillingFlowParams.newBuilder()
145141
.setProductDetailsParamsList(productDetailsParamsList)
146142
.build();
147143

148-
launcher.launch(billingClient, flowParams);
144+
return activity -> billingClient.launchBillingFlow(activity, flowParams);
149145
}
146+
return null;
150147
}
151148

152149

153150
/**
154151
* Initialize Mobile Ads (usually done once in your app, but
155152
* can be done here if needed for the support screen).
156153
*/
157-
public void initMobileAds(AdLoadParams params) {
154+
public AdRequest initMobileAds() {
158155
MobileAds.initialize(context);
159-
if (params != null && params.getAdLoader() != null) {
160-
params.getAdLoader().load(new AdRequest.Builder().build());
161-
}
156+
return new AdRequest.Builder().build();
162157
}
163158

164159
}
Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,21 @@
11
package com.d4rk.androidtutorials.java.data.repository;
22

3-
import com.android.billingclient.api.BillingClient;
4-
import com.android.billingclient.api.BillingFlowParams;
3+
import android.app.Activity;
4+
import com.google.android.gms.ads.AdRequest;
55
import com.android.billingclient.api.ProductDetails;
6-
import com.d4rk.androidtutorials.java.data.model.AdLoadParams;
76
import java.util.List;
87

98
public interface SupportRepository {
109
void initBillingClient(Runnable onConnected);
1110
void queryProductDetails(List<String> productIds, OnProductDetailsListener listener);
12-
void initiatePurchase(String productId, BillingFlowLauncher launcher);
13-
void initMobileAds(AdLoadParams params);
11+
BillingFlowLauncher initiatePurchase(String productId);
12+
AdRequest initMobileAds();
1413

1514
interface OnProductDetailsListener {
1615
void onProductDetailsRetrieved(List<ProductDetails> productDetailsList);
1716
}
1817

1918
interface BillingFlowLauncher {
20-
void launch(BillingClient billingClient, BillingFlowParams params);
19+
void launch(Activity activity);
2120
}
2221
}
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.d4rk.androidtutorials.java.domain.support;
22

3-
import com.d4rk.androidtutorials.java.data.model.AdLoadParams;
43
import com.d4rk.androidtutorials.java.data.repository.SupportRepository;
4+
import com.google.android.gms.ads.AdRequest;
55

66
/** Initializes Google Mobile Ads. */
77
public class InitMobileAdsUseCase {
@@ -11,7 +11,7 @@ public InitMobileAdsUseCase(SupportRepository repository) {
1111
this.repository = repository;
1212
}
1313

14-
public void invoke(AdLoadParams params) {
15-
repository.initMobileAds(params);
14+
public AdRequest invoke() {
15+
return repository.initMobileAds();
1616
}
1717
}

app/src/main/java/com/d4rk/androidtutorials/java/domain/support/InitiatePurchaseUseCase.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public InitiatePurchaseUseCase(SupportRepository repository) {
1010
this.repository = repository;
1111
}
1212

13-
public void invoke(String productId, SupportRepository.BillingFlowLauncher launcher) {
14-
repository.initiatePurchase(productId, launcher);
13+
public SupportRepository.BillingFlowLauncher invoke(String productId) {
14+
return repository.initiatePurchase(productId);
1515
}
1616
}

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/support/SupportActivity.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,10 @@
1111
import androidx.lifecycle.ViewModelProvider;
1212

1313
import com.android.billingclient.api.ProductDetails;
14-
import com.d4rk.androidtutorials.java.data.model.AdLoadParams;
14+
import com.d4rk.androidtutorials.java.data.repository.SupportRepository;
1515
import com.d4rk.androidtutorials.java.databinding.ActivitySupportBinding;
1616
import com.d4rk.androidtutorials.java.utils.EdgeToEdgeDelegate;
17+
import com.google.android.gms.ads.AdRequest;
1718

1819
import java.util.List;
1920

@@ -42,7 +43,8 @@ protected void onCreate(Bundle savedInstanceState) {
4243

4344
supportViewModel = new ViewModelProvider(this).get(SupportViewModel.class);
4445

45-
supportViewModel.initMobileAds(new AdLoadParams(adRequest -> binding.largeBannerAd.loadAd(adRequest)));
46+
AdRequest adRequest = supportViewModel.initMobileAds();
47+
binding.largeBannerAd.loadAd(adRequest);
4648

4749
binding.buttonWebAd.setOnClickListener(v ->
4850
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://bit.ly/3p8bpjj"))));
@@ -73,8 +75,10 @@ private void queryProductDetails() {
7375
}
7476

7577
private void initiatePurchase(String productId) {
76-
supportViewModel.initiatePurchase(productId,
77-
(billingClient, params) -> billingClient.launchBillingFlow(this, params));
78+
SupportRepository.BillingFlowLauncher launcher = supportViewModel.initiatePurchase(productId);
79+
if (launcher != null) {
80+
launcher.launch(this);
81+
}
7882
}
7983

8084
@Override

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/support/SupportViewModel.java

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

33
import androidx.lifecycle.ViewModel;
44

5-
import com.d4rk.androidtutorials.java.data.model.AdLoadParams;
65
import com.d4rk.androidtutorials.java.data.repository.SupportRepository;
76
import com.d4rk.androidtutorials.java.domain.support.InitBillingClientUseCase;
87
import com.d4rk.androidtutorials.java.domain.support.QueryProductDetailsUseCase;
98
import com.d4rk.androidtutorials.java.domain.support.InitiatePurchaseUseCase;
109
import com.d4rk.androidtutorials.java.domain.support.InitMobileAdsUseCase;
10+
import com.google.android.gms.ads.AdRequest;
1111

1212
import dagger.hilt.android.lifecycle.HiltViewModel;
1313
import javax.inject.Inject;
@@ -42,11 +42,11 @@ public void queryProductDetails(List<String> productIds,
4242
queryProductDetailsUseCase.invoke(productIds, listener);
4343
}
4444

45-
public void initiatePurchase(String productId, SupportRepository.BillingFlowLauncher launcher) {
46-
initiatePurchaseUseCase.invoke(productId, launcher);
45+
public SupportRepository.BillingFlowLauncher initiatePurchase(String productId) {
46+
return initiatePurchaseUseCase.invoke(productId);
4747
}
4848

49-
public void initMobileAds(AdLoadParams params) {
50-
initMobileAdsUseCase.invoke(params);
49+
public AdRequest initMobileAds() {
50+
return initMobileAdsUseCase.invoke();
5151
}
5252
}

0 commit comments

Comments
 (0)