feat(privacy): add personalized ads toggle in settings

- Add PrivacySettings schema with can_sell field (default: false)
- Move privacy toggle to GeneralSettingsScreen with clear labeling
- Update l10n for zh/en/zh_hant with user-friendly copy
- Clean up redundant PrivacyNotificationSettingsScreen
- Update profile-protocol.md to reflect new privacy schema
- Fix basedpyright warnings in user.py
This commit is contained in:
qzl
2026-04-17 13:11:09 +08:00
parent be30eb6eab
commit 913ed26f8d
17 changed files with 417 additions and 163 deletions
+5 -1
View File
@@ -483,5 +483,9 @@
"settingsInviteEmptyDescription": "Each friend who registers using your invite code gives you bonus credits",
"settingsInviteInputLabel": "Enter invite code (optional)",
"settingsInviteInputHint": "Enter code to bind your inviter",
"settingsInviteInvalidCode": "Please enter a valid 6-character invite code"
"settingsInviteInvalidCode": "Please enter a valid 6-character invite code",
"settingsDoNotSellTitle": "Personalized Ads",
"settingsDoNotSellDescription": "When off, your personal info won't be used for ad recommendations",
"settingsDoNotSellEnabled": "Off",
"settingsDoNotSellDisabled": "On"
}
+24
View File
@@ -2300,6 +2300,30 @@ abstract class AppLocalizations {
/// In zh, this message translates to:
/// **'请输入有效的6位邀请码'**
String get settingsInviteInvalidCode;
/// No description provided for @settingsDoNotSellTitle.
///
/// In zh, this message translates to:
/// **'个性化广告推荐'**
String get settingsDoNotSellTitle;
/// No description provided for @settingsDoNotSellDescription.
///
/// In zh, this message translates to:
/// **'关闭后,我们不会将您的个人信息用于广告推荐'**
String get settingsDoNotSellDescription;
/// No description provided for @settingsDoNotSellEnabled.
///
/// In zh, this message translates to:
/// **'已关闭'**
String get settingsDoNotSellEnabled;
/// No description provided for @settingsDoNotSellDisabled.
///
/// In zh, this message translates to:
/// **'已开启'**
String get settingsDoNotSellDisabled;
}
class _AppLocalizationsDelegate
+13
View File
@@ -1211,4 +1211,17 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get settingsInviteInvalidCode =>
'Please enter a valid 6-character invite code';
@override
String get settingsDoNotSellTitle => 'Personalized Ads';
@override
String get settingsDoNotSellDescription =>
'When off, your personal info won\'t be used for ad recommendations';
@override
String get settingsDoNotSellEnabled => 'Off';
@override
String get settingsDoNotSellDisabled => 'On';
}
+24
View File
@@ -1159,6 +1159,18 @@ class AppLocalizationsZh extends AppLocalizations {
@override
String get settingsInviteInvalidCode => '请输入有效的6位邀请码';
@override
String get settingsDoNotSellTitle => '个性化广告推荐';
@override
String get settingsDoNotSellDescription => '关闭后,我们不会将您的个人信息用于广告推荐';
@override
String get settingsDoNotSellEnabled => '已关闭';
@override
String get settingsDoNotSellDisabled => '已开启';
}
/// The translations for Chinese, using the Han script (`zh_Hant`).
@@ -2072,4 +2084,16 @@ class AppLocalizationsZhHant extends AppLocalizationsZh {
@override
String get settingsInviteInvalidCode => '請輸入有效的6位邀請碼';
@override
String get settingsDoNotSellTitle => '個人化廣告推薦';
@override
String get settingsDoNotSellDescription => '關閉後,我們不會將您的個人資訊用於廣告推薦';
@override
String get settingsDoNotSellEnabled => '已關閉';
@override
String get settingsDoNotSellDisabled => '已開啟';
}
+5 -1
View File
@@ -483,5 +483,9 @@
"settingsInviteEmptyDescription": "每成功邀请一位好友注册,您将获得积分奖励",
"settingsInviteInputLabel": "输入邀请码(选填)",
"settingsInviteInputHint": "输入邀请码绑定您的邀请人",
"settingsInviteInvalidCode": "请输入有效的6位邀请码"
"settingsInviteInvalidCode": "请输入有效的6位邀请码",
"settingsDoNotSellTitle": "个性化广告推荐",
"settingsDoNotSellDescription": "关闭后,我们不会将您的个人信息用于广告推荐",
"settingsDoNotSellEnabled": "已关闭",
"settingsDoNotSellDisabled": "已开启"
}
+5 -1
View File
@@ -385,5 +385,9 @@
"wuXingTu": "土",
"wuXingJin": "金",
"wuXingShui": "水",
"retry": "重試"
"retry": "重試",
"settingsDoNotSellTitle": "個人化廣告推薦",
"settingsDoNotSellDescription": "關閉後,我們不會將您的個人資訊用於廣告推薦",
"settingsDoNotSellEnabled": "已關閉",
"settingsDoNotSellDisabled": "已開啟"
}