@@ -52,9 +52,9 @@ class _AppConfigurationPageState extends State<AppConfigurationPage>
52
52
controller: _tabController,
53
53
isScrollable: true ,
54
54
tabs: const [
55
- Tab (text: 'User Preferences ' ),
56
- Tab (text: 'Ad Config ' ),
57
- Tab (text: 'Account Actions ' ),
55
+ Tab (text: 'User Content Limits ' ),
56
+ Tab (text: 'Ad Settings ' ),
57
+ Tab (text: 'In-App Prompts ' ),
58
58
Tab (text: 'App Operational Status' ),
59
59
Tab (text: 'Force Update' ),
60
60
],
@@ -231,12 +231,15 @@ class _AppConfigurationPageState extends State<AppConfigurationPage>
231
231
crossAxisAlignment: CrossAxisAlignment .start,
232
232
children: [
233
233
Text (
234
- 'User Preference Limits' ,
234
+ 'User Content Limits' ,
235
235
style: Theme .of (context).textTheme.headlineSmall,
236
236
),
237
237
const SizedBox (height: AppSpacing .md),
238
238
Text (
239
- 'These settings define the maximum number of items a user can follow or save, tiered by user role. Changes here directly impact user capabilities.' ,
239
+ 'These settings define the maximum number of countries, news sources, '
240
+ 'categories, and saved headlines a user can follow or save. '
241
+ 'Limits vary by user type (Guest, Standard, Premium) and directly '
242
+ 'impact what content users can curate.' ,
240
243
style: Theme .of (context).textTheme.bodySmall? .copyWith (
241
244
color: Theme .of (context).colorScheme.onSurface.withOpacity (0.7 ),
242
245
),
@@ -313,12 +316,16 @@ class _AppConfigurationPageState extends State<AppConfigurationPage>
313
316
crossAxisAlignment: CrossAxisAlignment .start,
314
317
children: [
315
318
Text (
316
- 'Ad Configuration ' ,
319
+ 'Ad Settings ' ,
317
320
style: Theme .of (context).textTheme.headlineSmall,
318
321
),
319
322
const SizedBox (height: AppSpacing .md),
320
323
Text (
321
- 'These settings control how ads are injected and displayed in the application, tiered by user role. AdFrequency determines how often an ad can be injected, and AdPlacementInterval sets a minimum number of primary items before the first ad.' ,
324
+ 'These settings control how advertisements are displayed within '
325
+ 'the app\' s news feed, with different rules for Guest, Standard, '
326
+ 'and Premium users. "Ad Frequency" determines how often an ad '
327
+ 'can appear, while "Ad Placement Interval" sets how many news '
328
+ 'items must be shown before the very first ad appears.' ,
322
329
style: Theme .of (context).textTheme.bodySmall? .copyWith (
323
330
color: Theme .of (context).colorScheme.onSurface.withOpacity (0.7 ),
324
331
),
@@ -327,7 +334,7 @@ class _AppConfigurationPageState extends State<AppConfigurationPage>
327
334
TabBar (
328
335
tabs: const [
329
336
Tab (text: 'Guest' ),
330
- Tab (text: 'Authenticated ' ),
337
+ Tab (text: 'Standard User ' ),
331
338
Tab (text: 'Premium' ),
332
339
],
333
340
labelColor: Theme .of (context).colorScheme.primary,
@@ -398,12 +405,16 @@ class _AppConfigurationPageState extends State<AppConfigurationPage>
398
405
crossAxisAlignment: CrossAxisAlignment .start,
399
406
children: [
400
407
Text (
401
- 'Account Action Configuration ' ,
408
+ 'In-App Prompts ' ,
402
409
style: Theme .of (context).textTheme.headlineSmall,
403
410
),
404
411
const SizedBox (height: AppSpacing .md),
405
412
Text (
406
- 'These settings control the display frequency of in-feed account actions (e.g., link account, upgrade prompts), tiered by user role.' ,
413
+ 'These settings control how often special in-app messages or '
414
+ '"prompts" are shown to users in their news feed. These prompts '
415
+ 'encourage actions like linking an account (for guests) or '
416
+ 'upgrading to a premium subscription (for authenticated users). '
417
+ 'The frequency varies by user type.' ,
407
418
style: Theme .of (context).textTheme.bodySmall? .copyWith (
408
419
color: Theme .of (context).colorScheme.onSurface.withOpacity (0.7 ),
409
420
),
@@ -972,7 +983,8 @@ class _UserPreferenceLimitsFormState extends State<_UserPreferenceLimitsForm> {
972
983
context,
973
984
label: 'Guest Followed Items Limit' ,
974
985
description:
975
- 'Max countries, sources, or categories a Guest user can follow (each).' ,
986
+ 'Maximum number of countries, news sources, or categories a '
987
+ 'Guest user can follow (each type has its own limit).' ,
976
988
value: userPreferenceLimits.guestFollowedItemsLimit,
977
989
onChanged: (value) {
978
990
widget.onConfigChanged (
@@ -988,7 +1000,7 @@ class _UserPreferenceLimitsFormState extends State<_UserPreferenceLimitsForm> {
988
1000
widget.buildIntField (
989
1001
context,
990
1002
label: 'Guest Saved Headlines Limit' ,
991
- description: 'Max headlines a Guest user can save.' ,
1003
+ description: 'Maximum number of headlines a Guest user can save.' ,
992
1004
value: userPreferenceLimits.guestSavedHeadlinesLimit,
993
1005
onChanged: (value) {
994
1006
widget.onConfigChanged (
@@ -1008,9 +1020,10 @@ class _UserPreferenceLimitsFormState extends State<_UserPreferenceLimitsForm> {
1008
1020
children: [
1009
1021
widget.buildIntField (
1010
1022
context,
1011
- label: 'Authenticated Followed Items Limit' ,
1023
+ label: 'Standard User Followed Items Limit' ,
1012
1024
description:
1013
- 'Max countries, sources, or categories an Authenticated user can follow (each).' ,
1025
+ 'Maximum number of countries, news sources, or categories a '
1026
+ 'Standard user can follow (each type has its own limit).' ,
1014
1027
value: userPreferenceLimits.authenticatedFollowedItemsLimit,
1015
1028
onChanged: (value) {
1016
1029
widget.onConfigChanged (
@@ -1025,8 +1038,9 @@ class _UserPreferenceLimitsFormState extends State<_UserPreferenceLimitsForm> {
1025
1038
),
1026
1039
widget.buildIntField (
1027
1040
context,
1028
- label: 'Authenticated Saved Headlines Limit' ,
1029
- description: 'Max headlines an Authenticated user can save.' ,
1041
+ label: 'Standard User Saved Headlines Limit' ,
1042
+ description:
1043
+ 'Maximum number of headlines a Standard user can save.' ,
1030
1044
value: userPreferenceLimits.authenticatedSavedHeadlinesLimit,
1031
1045
onChanged: (value) {
1032
1046
widget.onConfigChanged (
@@ -1048,7 +1062,8 @@ class _UserPreferenceLimitsFormState extends State<_UserPreferenceLimitsForm> {
1048
1062
context,
1049
1063
label: 'Premium Followed Items Limit' ,
1050
1064
description:
1051
- 'Max countries, sources, or categories a Premium user can follow (each).' ,
1065
+ 'Maximum number of countries, news sources, or categories a '
1066
+ 'Premium user can follow (each type has its own limit).' ,
1052
1067
value: userPreferenceLimits.premiumFollowedItemsLimit,
1053
1068
onChanged: (value) {
1054
1069
widget.onConfigChanged (
@@ -1064,7 +1079,8 @@ class _UserPreferenceLimitsFormState extends State<_UserPreferenceLimitsForm> {
1064
1079
widget.buildIntField (
1065
1080
context,
1066
1081
label: 'Premium Saved Headlines Limit' ,
1067
- description: 'Max headlines a Premium user can save.' ,
1082
+ description:
1083
+ 'Maximum number of headlines a Premium user can save.' ,
1068
1084
value: userPreferenceLimits.premiumSavedHeadlinesLimit,
1069
1085
onChanged: (value) {
1070
1086
widget.onConfigChanged (
@@ -1302,7 +1318,8 @@ class _AdConfigFormState extends State<_AdConfigForm> {
1302
1318
context,
1303
1319
label: 'Guest Ad Frequency' ,
1304
1320
description:
1305
- 'How often an ad can be injected for Guest users (e.g., 5 means after every 5 primary items).' ,
1321
+ 'How often an ad can appear for Guest users (e.g., a value '
1322
+ 'of 5 means an ad could be placed after every 5 news items).' ,
1306
1323
value: adConfig.guestAdFrequency,
1307
1324
onChanged: (value) {
1308
1325
widget.onConfigChanged (
@@ -1317,7 +1334,8 @@ class _AdConfigFormState extends State<_AdConfigForm> {
1317
1334
context,
1318
1335
label: 'Guest Ad Placement Interval' ,
1319
1336
description:
1320
- 'Minimum primary items before the first ad for Guest users.' ,
1337
+ 'Minimum number of news items that must be shown before the '
1338
+ 'very first ad appears for Guest users.' ,
1321
1339
value: adConfig.guestAdPlacementInterval,
1322
1340
onChanged: (value) {
1323
1341
widget.onConfigChanged (
@@ -1334,7 +1352,8 @@ class _AdConfigFormState extends State<_AdConfigForm> {
1334
1352
context,
1335
1353
label: 'Guest Articles Before Interstitial Ads' ,
1336
1354
description:
1337
- 'Number of articles a Guest user reads before an interstitial ad is shown.' ,
1355
+ 'Number of articles a Guest user needs to read before a '
1356
+ 'full-screen interstitial ad is shown.' ,
1338
1357
value: adConfig.guestArticlesToReadBeforeShowingInterstitialAds,
1339
1358
onChanged: (value) {
1340
1359
widget.onConfigChanged (
@@ -1355,9 +1374,10 @@ class _AdConfigFormState extends State<_AdConfigForm> {
1355
1374
children: [
1356
1375
widget.buildIntField (
1357
1376
context,
1358
- label: 'Authenticated Ad Frequency' ,
1377
+ label: 'Standard User Ad Frequency' ,
1359
1378
description:
1360
- 'How often an ad can be injected for Authenticated users.' ,
1379
+ 'How often an ad can appear for Standard users (e.g., a value '
1380
+ 'of 10 means an ad could be placed after every 10 news items).' ,
1361
1381
value: adConfig.authenticatedAdFrequency,
1362
1382
onChanged: (value) {
1363
1383
widget.onConfigChanged (
@@ -1372,9 +1392,10 @@ class _AdConfigFormState extends State<_AdConfigForm> {
1372
1392
),
1373
1393
widget.buildIntField (
1374
1394
context,
1375
- label: 'Authenticated Ad Placement Interval' ,
1395
+ label: 'Standard User Ad Placement Interval' ,
1376
1396
description:
1377
- 'Minimum primary items before the first ad for Authenticated users.' ,
1397
+ 'Minimum number of news items that must be shown before the '
1398
+ 'very first ad appears for Standard users.' ,
1378
1399
value: adConfig.authenticatedAdPlacementInterval,
1379
1400
onChanged: (value) {
1380
1401
widget.onConfigChanged (
@@ -1391,7 +1412,8 @@ class _AdConfigFormState extends State<_AdConfigForm> {
1391
1412
context,
1392
1413
label: 'Standard User Articles Before Interstitial Ads' ,
1393
1414
description:
1394
- 'Number of articles a Standard user reads before an interstitial ad is shown.' ,
1415
+ 'Number of articles a Standard user needs to read before a '
1416
+ 'full-screen interstitial ad is shown.' ,
1395
1417
value: adConfig
1396
1418
.standardUserArticlesToReadBeforeShowingInterstitialAds,
1397
1419
onChanged: (value) {
@@ -1416,7 +1438,7 @@ class _AdConfigFormState extends State<_AdConfigForm> {
1416
1438
context,
1417
1439
label: 'Premium Ad Frequency' ,
1418
1440
description:
1419
- 'How often an ad can be injected for Premium users (0 for no ads).' ,
1441
+ 'How often an ad can appear for Premium users (0 for no ads).' ,
1420
1442
value: adConfig.premiumAdFrequency,
1421
1443
onChanged: (value) {
1422
1444
widget.onConfigChanged (
@@ -1431,7 +1453,8 @@ class _AdConfigFormState extends State<_AdConfigForm> {
1431
1453
context,
1432
1454
label: 'Premium Ad Placement Interval' ,
1433
1455
description:
1434
- 'Minimum primary items before the first ad for Premium users.' ,
1456
+ 'Minimum number of news items that must be shown before the '
1457
+ 'very first ad appears for Premium users.' ,
1435
1458
value: adConfig.premiumAdPlacementInterval,
1436
1459
onChanged: (value) {
1437
1460
widget.onConfigChanged (
@@ -1448,7 +1471,8 @@ class _AdConfigFormState extends State<_AdConfigForm> {
1448
1471
context,
1449
1472
label: 'Premium User Articles Before Interstitial Ads' ,
1450
1473
description:
1451
- 'Number of articles a Premium user reads before an interstitial ad is shown.' ,
1474
+ 'Number of articles a Premium user needs to read before a '
1475
+ 'full-screen interstitial ad is shown.' ,
1452
1476
value: adConfig
1453
1477
.premiumUserArticlesToReadBeforeShowingInterstitialAds,
1454
1478
onChanged: (value) {
@@ -1574,9 +1598,10 @@ class _AccountActionConfigFormState extends State<_AccountActionConfigForm> {
1574
1598
children: [
1575
1599
widget.buildIntField (
1576
1600
context,
1577
- label: 'Guest Days Between Account Actions ' ,
1601
+ label: 'Guest Days Between In-App Prompts ' ,
1578
1602
description:
1579
- 'Minimum days between showing account actions to Guest users.' ,
1603
+ 'Minimum number of days that must pass before a Guest user '
1604
+ 'sees another in-app prompt.' ,
1580
1605
value: accountActionConfig.guestDaysBetweenAccountActions,
1581
1606
onChanged: (value) {
1582
1607
widget.onConfigChanged (
@@ -1596,9 +1621,10 @@ class _AccountActionConfigFormState extends State<_AccountActionConfigForm> {
1596
1621
children: [
1597
1622
widget.buildIntField (
1598
1623
context,
1599
- label: 'Standard User Days Between Account Actions ' ,
1624
+ label: 'Standard User Days Between In-App Prompts ' ,
1600
1625
description:
1601
- 'Minimum days between showing account actions to Standard users.' ,
1626
+ 'Minimum number of days that must pass before a Standard user '
1627
+ 'sees another in-app prompt.' ,
1602
1628
value: accountActionConfig.standardUserDaysBetweenAccountActions,
1603
1629
onChanged: (value) {
1604
1630
widget.onConfigChanged (
0 commit comments