Skip to content

Commit 23823ff

Browse files
Merge pull request #21 from D4rK7355608/ay1kg0-codex/create-helper-class-for-consent-handling
Refactor consent handling
2 parents b5cff48 + 9ea5b30 commit 23823ff

File tree

3 files changed

+75
-32
lines changed

3 files changed

+75
-32
lines changed

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

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import android.os.Handler;
88
import android.os.Looper;
99
import android.util.Log;
10+
import android.view.View;
1011

1112
import androidx.activity.result.ActivityResultLauncher;
1213
import androidx.activity.result.IntentSenderRequest;
@@ -35,6 +36,7 @@
3536
import com.d4rk.androidtutorials.java.ui.screens.startup.StartupViewModel;
3637
import com.d4rk.androidtutorials.java.ui.screens.support.SupportActivity;
3738
import com.d4rk.androidtutorials.java.utils.EdgeToEdgeDelegate;
39+
import com.d4rk.androidtutorials.java.utils.ConsentUtils;
3840
import com.google.android.gms.ads.AdRequest;
3941
import com.google.android.gms.ads.MobileAds;
4042
import com.google.android.material.bottomnavigation.BottomNavigationView;
@@ -154,8 +156,13 @@ private void observeViewModel() {
154156

155157
((BottomNavigationView) mBinding.navView).setLabelVisibilityMode(visibilityMode);
156158
if (mBinding.adView != null) {
157-
MobileAds.initialize(this);
158-
mBinding.adView.loadAd(new AdRequest.Builder().build());
159+
if (ConsentUtils.canShowAds(this)) {
160+
MobileAds.initialize(this);
161+
mBinding.adView.setVisibility(View.VISIBLE);
162+
mBinding.adView.loadAd(new AdRequest.Builder().build());
163+
} else {
164+
mBinding.adView.setVisibility(View.GONE);
165+
}
159166
}
160167
} else {
161168
edgeToEdgeDelegate.applyEdgeToEdge(mBinding.container);
@@ -237,6 +244,18 @@ public void onBackPressed() {
237244
@Override
238245
protected void onResume() {
239246
super.onResume();
247+
ConsentUtils.applyStoredConsent(this);
248+
if (mBinding.adView != null) {
249+
if (ConsentUtils.canShowAds(this)) {
250+
if (mBinding.adView.getVisibility() != View.VISIBLE) {
251+
MobileAds.initialize(this);
252+
mBinding.adView.setVisibility(View.VISIBLE);
253+
mBinding.adView.loadAd(new AdRequest.Builder().build());
254+
}
255+
} else {
256+
mBinding.adView.setVisibility(View.GONE);
257+
}
258+
}
240259
AppUsageNotificationsManager appUsageNotificationsManager = new AppUsageNotificationsManager(this);
241260
appUsageNotificationsManager.scheduleAppUsageCheck();
242261
appUpdateNotificationsManager.checkAndSendUpdateNotification();

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/startup/StartupActivity.java

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

33
import android.Manifest;
44
import android.content.Intent;
5-
import android.content.SharedPreferences;
65
import android.net.Uri;
76
import android.os.Build;
87
import android.os.Bundle;
98

109
import androidx.appcompat.app.AppCompatActivity;
1110
import androidx.lifecycle.ViewModelProvider;
12-
import androidx.preference.PreferenceManager;
1311

1412
import com.d4rk.androidtutorials.java.R;
1513
import com.d4rk.androidtutorials.java.databinding.ActivityStartupBinding;
@@ -18,10 +16,8 @@
1816
import com.google.android.ump.ConsentInformation;
1917
import com.google.android.ump.ConsentRequestParameters;
2018
import com.google.android.ump.UserMessagingPlatform;
21-
import com.google.firebase.analytics.FirebaseAnalytics;
19+
import com.d4rk.androidtutorials.java.utils.ConsentUtils;
2220

23-
import java.util.EnumMap;
24-
import java.util.Map;
2521

2622
import me.zhanghai.android.fastscroll.FastScrollerBuilder;
2723

@@ -36,7 +32,7 @@ protected void onCreate(Bundle savedInstanceState) {
3632
com.d4rk.androidtutorials.java.databinding.ActivityStartupBinding binding = ActivityStartupBinding.inflate(getLayoutInflater());
3733
setContentView(binding.getRoot());
3834

39-
applyStoredConsent();
35+
ConsentUtils.applyStoredConsent(this);
4036

4137
startupViewModel = new ViewModelProvider(this).get(StartupViewModel.class);
4238

@@ -52,10 +48,11 @@ protected void onCreate(Bundle savedInstanceState) {
5248
if (consentInformation.isConsentFormAvailable()) {
5349
startupViewModel.loadConsentForm(
5450
this,
55-
formError -> updateFirebaseConsent(false, false, false, false)
51+
formError -> ConsentUtils.updateFirebaseConsent(this,
52+
false, false, false, false)
5653
);
5754
} else if (consentInformation.getConsentStatus() == ConsentInformation.ConsentStatus.OBTAINED) {
58-
applyStoredConsent();
55+
ConsentUtils.applyStoredConsent(this);
5956
}
6057
},
6158
formError -> {}
@@ -73,7 +70,8 @@ protected void onCreate(Bundle savedInstanceState) {
7370
binding.floatingButtonAgree.setOnClickListener(v -> {
7471
ConsentDialogFragment dialog = new ConsentDialogFragment();
7572
dialog.setConsentListener((analytics, adStorage, adUserData, adPersonalization) -> {
76-
updateFirebaseConsent(analytics, adStorage, adUserData, adPersonalization);
73+
ConsentUtils.updateFirebaseConsent(this,
74+
analytics, adStorage, adUserData, adPersonalization);
7775
proceedToMainActivity();
7876
});
7977
dialog.show(getSupportFragmentManager(), "consent_dialog");
@@ -89,25 +87,4 @@ private void proceedToMainActivity() {
8987
finish();
9088
}
9189

92-
private void applyStoredConsent() {
93-
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
94-
boolean analytics = prefs.getBoolean(getString(R.string.key_consent_analytics), true);
95-
boolean adStorage = prefs.getBoolean(getString(R.string.key_consent_ad_storage), true);
96-
boolean adUserData = prefs.getBoolean(getString(R.string.key_consent_ad_user_data), true);
97-
boolean adPersonalization = prefs.getBoolean(getString(R.string.key_consent_ad_personalization), true);
98-
updateFirebaseConsent(analytics, adStorage, adUserData, adPersonalization);
99-
}
100-
101-
private void updateFirebaseConsent(boolean analytics,
102-
boolean adStorage,
103-
boolean adUserData,
104-
boolean adPersonalization) {
105-
Map<FirebaseAnalytics.ConsentType, FirebaseAnalytics.ConsentStatus> consentMap = new EnumMap<>(FirebaseAnalytics.ConsentType.class);
106-
consentMap.put(FirebaseAnalytics.ConsentType.ANALYTICS_STORAGE, analytics ? FirebaseAnalytics.ConsentStatus.GRANTED : FirebaseAnalytics.ConsentStatus.DENIED);
107-
consentMap.put(FirebaseAnalytics.ConsentType.AD_STORAGE, adStorage ? FirebaseAnalytics.ConsentStatus.GRANTED : FirebaseAnalytics.ConsentStatus.DENIED);
108-
consentMap.put(FirebaseAnalytics.ConsentType.AD_USER_DATA, adUserData ? FirebaseAnalytics.ConsentStatus.GRANTED : FirebaseAnalytics.ConsentStatus.DENIED);
109-
consentMap.put(FirebaseAnalytics.ConsentType.AD_PERSONALIZATION, adPersonalization ? FirebaseAnalytics.ConsentStatus.GRANTED : FirebaseAnalytics.ConsentStatus.DENIED);
110-
111-
FirebaseAnalytics.getInstance(this).setConsent(consentMap);
112-
}
11390
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package com.d4rk.androidtutorials.java.utils;
2+
3+
import android.content.Context;
4+
import android.content.SharedPreferences;
5+
6+
import androidx.preference.PreferenceManager;
7+
8+
import com.d4rk.androidtutorials.java.R;
9+
import com.google.firebase.analytics.FirebaseAnalytics;
10+
11+
import java.util.EnumMap;
12+
import java.util.Map;
13+
14+
public class ConsentUtils {
15+
16+
public static void applyStoredConsent(Context context) {
17+
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
18+
boolean analytics = prefs.getBoolean(context.getString(R.string.key_consent_analytics), true);
19+
boolean adStorage = prefs.getBoolean(context.getString(R.string.key_consent_ad_storage), true);
20+
boolean adUserData = prefs.getBoolean(context.getString(R.string.key_consent_ad_user_data), true);
21+
boolean adPersonalization = prefs.getBoolean(context.getString(R.string.key_consent_ad_personalization), true);
22+
updateFirebaseConsent(context, analytics, adStorage, adUserData, adPersonalization);
23+
}
24+
25+
public static void updateFirebaseConsent(Context context,
26+
boolean analytics,
27+
boolean adStorage,
28+
boolean adUserData,
29+
boolean adPersonalization) {
30+
Map<FirebaseAnalytics.ConsentType, FirebaseAnalytics.ConsentStatus> consentMap =
31+
new EnumMap<>(FirebaseAnalytics.ConsentType.class);
32+
consentMap.put(FirebaseAnalytics.ConsentType.ANALYTICS_STORAGE,
33+
analytics ? FirebaseAnalytics.ConsentStatus.GRANTED : FirebaseAnalytics.ConsentStatus.DENIED);
34+
consentMap.put(FirebaseAnalytics.ConsentType.AD_STORAGE,
35+
adStorage ? FirebaseAnalytics.ConsentStatus.GRANTED : FirebaseAnalytics.ConsentStatus.DENIED);
36+
consentMap.put(FirebaseAnalytics.ConsentType.AD_USER_DATA,
37+
adUserData ? FirebaseAnalytics.ConsentStatus.GRANTED : FirebaseAnalytics.ConsentStatus.DENIED);
38+
consentMap.put(FirebaseAnalytics.ConsentType.AD_PERSONALIZATION,
39+
adPersonalization ? FirebaseAnalytics.ConsentStatus.GRANTED : FirebaseAnalytics.ConsentStatus.DENIED);
40+
FirebaseAnalytics.getInstance(context).setConsent(consentMap);
41+
}
42+
43+
public static boolean canShowAds(Context context) {
44+
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
45+
return prefs.getBoolean(context.getString(R.string.key_consent_ad_storage), true);
46+
}
47+
}

0 commit comments

Comments
 (0)