Skip to content

Commit 42264b8

Browse files
Resolve FIXMEs and wire startup, consent, and support utilities
1 parent 6f39181 commit 42264b8

File tree

11 files changed

+83
-18
lines changed

11 files changed

+83
-18
lines changed

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

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -127,13 +127,15 @@ public BillingFlowLauncher initiatePurchase(String productId) {
127127
}
128128

129129
String finalOfferToken = offerToken;
130+
BillingFlowParams.ProductDetailsParams.Builder paramsBuilder =
131+
BillingFlowParams.ProductDetailsParams.newBuilder()
132+
.setProductDetails(details);
133+
if (finalOfferToken != null && !finalOfferToken.isEmpty()) {
134+
paramsBuilder.setOfferToken(finalOfferToken);
135+
}
136+
130137
List<BillingFlowParams.ProductDetailsParams> productDetailsParamsList =
131-
Collections.singletonList(
132-
BillingFlowParams.ProductDetailsParams.newBuilder()
133-
.setProductDetails(details)
134-
.setOfferToken(finalOfferToken) // FIXME: Argument 'finalOfferToken' might be null
135-
.build()
136-
);
138+
Collections.singletonList(paramsBuilder.build());
137139

138140
BillingFlowParams flowParams = BillingFlowParams.newBuilder()
139141
.setProductDetailsParamsList(productDetailsParamsList)

app/src/main/java/com/d4rk/androidtutorials/java/ui/components/navigation/BottomSheetMenuFragment.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.d4rk.androidtutorials.java.R;
1414
import com.d4rk.androidtutorials.java.databinding.DialogBottomSheetMenuBinding;
1515
import com.d4rk.androidtutorials.java.ui.screens.settings.SettingsActivity;
16+
import com.d4rk.androidtutorials.java.utils.ReviewHelper;
1617
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
1718

1819
public class BottomSheetMenuFragment extends BottomSheetDialogFragment {
@@ -52,6 +53,11 @@ public View onCreateView(@NonNull LayoutInflater inflater,
5253
dismiss();
5354
});
5455

56+
binding.menuRate.setOnClickListener(v -> {
57+
ReviewHelper.forceLaunchInAppReview(requireActivity());
58+
dismiss();
59+
});
60+
5561
binding.menuShare.setOnClickListener(v -> {
5662
Intent sharingIntent = new Intent(Intent.ACTION_SEND);
5763
sharingIntent.setType("text/plain");

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/main/MainActivity.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,19 +104,27 @@ protected void onCreate(Bundle savedInstanceState) {
104104
}
105105
}
106106
);
107+
mainViewModel = new ViewModelProvider(this).get(MainViewModel.class);
108+
107109
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
108-
if (!prefs.getBoolean(getString(R.string.key_onboarding_complete), false)) {
110+
boolean onboardingComplete = prefs.getBoolean(getString(R.string.key_onboarding_complete), false);
111+
boolean shouldShowStartup = mainViewModel.shouldShowStartupScreen();
112+
if (!onboardingComplete) {
113+
if (shouldShowStartup) {
114+
mainViewModel.markStartupScreenShown();
115+
}
109116
startActivity(new Intent(this, StartupActivity.class));
110117
finish();
111118
return;
112119
}
120+
if (shouldShowStartup) {
121+
mainViewModel.markStartupScreenShown();
122+
}
113123
mBinding = ActivityMainBinding.inflate(getLayoutInflater());
114124
setContentView(mBinding.getRoot());
115125

116126
StartupInitializer.schedule(this);
117127

118-
mainViewModel = new ViewModelProvider(this).get(MainViewModel.class);
119-
120128
// Fallback: show the consent form again if required.
121129
ConsentInformation consentInformation = UserMessagingPlatform.getConsentInformation(this);
122130
if (consentInformation.getConsentStatus() == ConsentInformation.ConsentStatus.REQUIRED) {

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/main/MainViewModel.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,14 +99,14 @@ public void applySettings(String[] themeValues,
9999
/**
100100
* Checks if we need to show the startup screen.
101101
*/
102-
public boolean shouldShowStartupScreen() { // FIXME: Method 'shouldShowStartupScreen()' is never used
102+
public boolean shouldShowStartupScreen() {
103103
return shouldShowStartupScreenUseCase.invoke();
104104
}
105105

106106
/**
107107
* Mark startup screen as shown.
108108
*/
109-
public void markStartupScreenShown() { // FIXME: Method 'markStartupScreenShown()' is never used
109+
public void markStartupScreenShown() {
110110
markStartupScreenShownUseCase.invoke();
111111
}
112112

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/settings/SettingsActivity.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,10 @@ public CharSequence provideSummary(ListPreference preference) {
6565
return null;
6666
}
6767

68+
public SettingsViewModel getSettingsViewModel() {
69+
return settingsViewModel;
70+
}
71+
6872
@Override
6973
protected void onDestroy() {
7074
super.onDestroy();

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/settings/SettingsFragment.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import androidx.preference.ListPreference;
1515
import androidx.preference.Preference;
1616
import androidx.preference.PreferenceFragmentCompat;
17+
import androidx.preference.SwitchPreferenceCompat;
1718

1819
import com.d4rk.androidtutorials.java.BuildConfig;
1920
import com.d4rk.androidtutorials.java.R;
@@ -25,6 +26,8 @@ public class SettingsFragment extends PreferenceFragmentCompat {
2526
@Override
2627
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
2728
setPreferencesFromResource(R.xml.preferences_settings, rootKey);
29+
SettingsActivity activity = (SettingsActivity) requireActivity();
30+
SettingsViewModel settingsViewModel = activity.getSettingsViewModel();
2831
ListPreference labelVisibilityMode = findPreference(getString(R.string.key_bottom_navigation_bar_labels));
2932
if (labelVisibilityMode != null) {
3033
labelVisibilityMode.setOnPreferenceChangeListener((preference, newValue) -> {
@@ -33,6 +36,16 @@ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
3336
return true;
3437
});
3538
}
39+
SwitchPreferenceCompat consentAnalyticsPreference =
40+
findPreference(getString(R.string.key_consent_analytics));
41+
if (consentAnalyticsPreference != null) {
42+
consentAnalyticsPreference.setOnPreferenceChangeListener((preference, newValue) -> {
43+
if (newValue instanceof Boolean && settingsViewModel != null) {
44+
settingsViewModel.setConsentAccepted((Boolean) newValue);
45+
}
46+
return true;
47+
});
48+
}
3649
ListPreference defaultTab = findPreference(getString(R.string.key_default_tab));
3750
if (defaultTab != null) {
3851
defaultTab.setOnPreferenceChangeListener((preference, newValue) -> {

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/settings/SettingsViewModel.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public String getDarkMode() {
7070
return getDarkModeUseCase.invoke();
7171
}
7272

73-
public void setConsentAccepted(boolean accepted) { // FIXME: Method 'setConsentAccepted(boolean)' is never used
73+
public void setConsentAccepted(boolean accepted) {
7474
setConsentAcceptedUseCase.invoke(accepted);
7575
}
7676
}

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
import androidx.lifecycle.ViewModelProvider;
88

99
import com.android.billingclient.api.ProductDetails;
10-
import com.d4rk.androidtutorials.java.ads.AdUtils;
1110
import com.d4rk.androidtutorials.java.data.repository.SupportRepository;
1211
import com.d4rk.androidtutorials.java.databinding.ActivitySupportBinding;
1312
import com.d4rk.androidtutorials.java.ui.components.navigation.BaseActivity;
13+
import com.google.android.gms.ads.AdRequest;
1414

1515
import java.util.List;
1616

@@ -30,8 +30,9 @@ protected void onCreate(Bundle savedInstanceState) {
3030

3131
supportViewModel = new ViewModelProvider(this).get(SupportViewModel.class);
3232

33-
AdUtils.loadBanner(binding.supportNativeAd);
34-
AdUtils.loadBanner(binding.bannerAdView);
33+
AdRequest adRequest = supportViewModel.initMobileAds();
34+
binding.supportNativeAd.loadAd(adRequest);
35+
binding.bannerAdView.loadAd(adRequest);
3536

3637
binding.buttonWebAd.setOnClickListener(v ->
3738
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://bit.ly/3p8bpjj"))));

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public SupportRepository.BillingFlowLauncher initiatePurchase(String productId)
4747
return initiatePurchaseUseCase.invoke(productId);
4848
}
4949

50-
public AdRequest initMobileAds() { // FIXME: Method 'initMobileAds()' is never used
50+
public AdRequest initMobileAds() {
5151
return initMobileAdsUseCase.invoke();
5252
}
5353
}

app/src/main/java/com/d4rk/androidtutorials/java/utils/ReviewHelper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public static void launchInAppReviewIfEligible(Activity activity,
2525
launchReview(activity, onReviewLaunched);
2626
}
2727

28-
public static void forceLaunchInAppReview(Activity activity) { // FIXME: Method 'forceLaunchInAppReview(android.app.Activity)' is never used
28+
public static void forceLaunchInAppReview(Activity activity) {
2929
launchReview(activity, null);
3030
}
3131

0 commit comments

Comments
 (0)