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, viewerBottomAppBarButtons,
homeCollectionsNavBarButtons, homeCollectionsNavBarButtons,
lastAdRewardTime, lastAdRewardTime,
isPersonalizedAds,
; ;
@override @override
@ -221,6 +222,8 @@ enum PrefKey implements PrefKeyInterface {
return "homeCollectionsNavBarButtons"; return "homeCollectionsNavBarButtons";
case PrefKey.lastAdRewardTime: case PrefKey.lastAdRewardTime:
return "lastAdRewardTime"; return "lastAdRewardTime";
case PrefKey.isPersonalizedAds:
return "isPersonalizedAds";
} }
} }
} }

View file

@ -172,6 +172,13 @@ extension PrefExtension on Pref {
PrefKey.lastAdRewardTime, PrefKey.lastAdRewardTime,
value, value,
(key, value) => provider.setInt(key, 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 { extension AccountPrefExtension on AccountPref {

View file

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

View file

@ -214,4 +214,5 @@ class RewardedAdHandler {
static final _log = Logger("widget.ad.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/app_localizations.dart';
import 'package:nc_photos/controller/pref_controller.dart'; import 'package:nc_photos/controller/pref_controller.dart';
import 'package:nc_photos/debug_util.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/k.dart' as k;
import 'package:nc_photos/language_util.dart' as language_util; import 'package:nc_photos/language_util.dart' as language_util;
import 'package:nc_photos/mobile/platform.dart' import 'package:nc_photos/mobile/platform.dart'
@ -280,6 +281,9 @@ class _PrivacySettingsState extends State<_PrivacySettings> {
_isEnableAnalytics = _isEnableAnalytics =
FirebaseCrashlytics.instance.isCrashlyticsCollectionEnabled; FirebaseCrashlytics.instance.isCrashlyticsCollectionEnabled;
} }
if (features.isSupportAds) {
_isEnablePersonalizedAds = Pref().isPersonalizedAdsOr(false);
}
} }
@override @override
@ -308,6 +312,13 @@ class _PrivacySettingsState extends State<_PrivacySettings> {
value: _isEnableAnalytics, value: _isEnableAnalytics,
onChanged: (value) => _onAnalyticsChanged(value), 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( ListTile(
title: Text(L10n.global().settingsPrivacyPolicyTitle), title: Text(L10n.global().settingsPrivacyPolicyTitle),
onTap: () { onTap: () {
@ -328,5 +339,13 @@ class _PrivacySettingsState extends State<_PrivacySettings> {
FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(value); FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(value);
} }
void _onPersonalizedAdsChanged(bool value) {
Pref().setPersonalizedAds(value);
setState(() {
_isEnablePersonalizedAds = value;
});
}
late bool _isEnableAnalytics; late bool _isEnableAnalytics;
late bool _isEnablePersonalizedAds;
} }

View file

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