Config personalized ads

This commit is contained in:
Ming Ming 2021-04-17 23:43:42 +08:00
parent 5473ff5599
commit 677a73852f
6 changed files with 54 additions and 2 deletions

View file

@ -119,6 +119,7 @@ enum PrefKey implements PrefKeyInterface {
viewerBottomAppBarButtons,
homeCollectionsNavBarButtons,
lastAdRewardTime,
isPersonalizedAds,
;
@override
@ -221,6 +222,8 @@ enum PrefKey implements PrefKeyInterface {
return "homeCollectionsNavBarButtons";
case PrefKey.lastAdRewardTime:
return "lastAdRewardTime";
case PrefKey.isPersonalizedAds:
return "isPersonalizedAds";
}
}
}

View file

@ -172,6 +172,13 @@ extension PrefExtension on Pref {
PrefKey.lastAdRewardTime,
value,
(key, value) => provider.setInt(key, value));
bool? isPersonalizedAds() => provider.getBool(PrefKey.isPersonalizedAds);
bool isPersonalizedAdsOr(bool def) => isPersonalizedAds() ?? def;
Future<bool> setPersonalizedAds(bool value) => _set<bool>(
PrefKey.isPersonalizedAds,
value,
(key, value) => provider.setBool(key, value));
}
extension AccountPrefExtension on AccountPref {

View file

@ -9,6 +9,8 @@
"settingsPrivacyPageTitle": "Privacy settings",
"settingsAnalyticsTitle": "Analytics",
"settingsAnalyticsSubtitle": "Collect analytics after an error to help developers better diagnose the issue",
"settingsPersonalizedAdsTitle": "Personalized ads",
"settingsPersonalizedAdsSubtitle": "Show more relevant ads",
"settingsPrivacyPolicyTitle": "Privacy policy",
"setupPrivacyAgreeStatement": "Please read carefully the above privacy policy. By continuing, you agree to our privacy policy",
"photosTabLabel": "Photos",

View file

@ -214,4 +214,5 @@ class RewardedAdHandler {
static final _log = Logger("widget.ad.RewardedAdHandler");
}
const _request = AdRequest();
final _request =
AdRequest(nonPersonalizedAds: !Pref().isPersonalizedAdsOr(false));

View file

@ -7,6 +7,7 @@ import 'package:logging/logging.dart';
import 'package:nc_photos/app_localizations.dart';
import 'package:nc_photos/controller/pref_controller.dart';
import 'package:nc_photos/debug_util.dart';
import 'package:nc_photos/entity/pref.dart';
import 'package:nc_photos/k.dart' as k;
import 'package:nc_photos/language_util.dart' as language_util;
import 'package:nc_photos/mobile/platform.dart'
@ -280,6 +281,9 @@ class _PrivacySettingsState extends State<_PrivacySettings> {
_isEnableAnalytics =
FirebaseCrashlytics.instance.isCrashlyticsCollectionEnabled;
}
if (features.isSupportAds) {
_isEnablePersonalizedAds = Pref().isPersonalizedAdsOr(false);
}
}
@override
@ -308,6 +312,13 @@ class _PrivacySettingsState extends State<_PrivacySettings> {
value: _isEnableAnalytics,
onChanged: (value) => _onAnalyticsChanged(value),
),
if (features.isSupportAds)
SwitchListTile(
title: Text(L10n.global().settingsPersonalizedAdsTitle),
subtitle: Text(L10n.global().settingsPersonalizedAdsSubtitle),
value: _isEnablePersonalizedAds,
onChanged: (value) => _onPersonalizedAdsChanged(value),
),
ListTile(
title: Text(L10n.global().settingsPrivacyPolicyTitle),
onTap: () {
@ -328,5 +339,13 @@ class _PrivacySettingsState extends State<_PrivacySettings> {
FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(value);
}
void _onPersonalizedAdsChanged(bool value) {
Pref().setPersonalizedAds(value);
setState(() {
_isEnablePersonalizedAds = value;
});
}
late bool _isEnableAnalytics;
late bool _isEnablePersonalizedAds;
}

View file

@ -264,6 +264,17 @@ class _PrivacyState extends State<_Privacy> {
child: Text(L10n.global().settingsAnalyticsSubtitle),
),
const SizedBox(height: 16),
SwitchListTile(
title: Text(L10n.global().settingsPersonalizedAdsTitle),
value: _isEnablePersonalizedAds,
onChanged: _onPersonalizedAdsValueChanged,
),
const SizedBox(height: 8),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: Text(L10n.global().settingsPersonalizedAdsSubtitle),
),
const SizedBox(height: 16),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: InkWell(
@ -305,11 +316,13 @@ class _PrivacyState extends State<_Privacy> {
dispose() {
super.dispose();
// persist user's choice
_log.info("[dispose] Analytics: $_isEnableAnalytics");
_log.info(
"[dispose] Analytics: $_isEnableAnalytics, Personalized Ads: $_isEnablePersonalizedAds");
if (features.isSupportCrashlytics) {
FirebaseCrashlytics.instance
.setCrashlyticsCollectionEnabled(_isEnableAnalytics);
}
Pref().setPersonalizedAds(_isEnablePersonalizedAds);
}
void _onAnalyticsValueChanged(bool value) {
@ -318,7 +331,14 @@ class _PrivacyState extends State<_Privacy> {
});
}
void _onPersonalizedAdsValueChanged(bool value) {
setState(() {
_isEnablePersonalizedAds = value;
});
}
bool _isEnableAnalytics = true;
bool _isEnablePersonalizedAds = true;
static final _log = Logger("widget.setup._PrivacyState");
}