Gate New Stats behind remote feature flag#22996
Open
adalpari wants to merge 8 commits into
Open
Conversation
Replace the local NEW_STATS experimental flag with a server-controlled remote feature flag so the New Stats rollout can be managed remotely. Because the remote flag is read-only, the manual opt-in/opt-out toggles are removed and the flag is now the single source of truth. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Collaborator
Generated by 🚫 Danger |
Contributor
|
|
Contributor
|
|
Contributor
🤖 Build Failure AnalysisThis build has failures. Claude has analyzed them - check the build annotations for details. |
…rrors The previous commit removed the New Stats opt-in/opt-out strings from the default locale but left them in the translation files, causing 204 ExtraTranslation lint errors. Remove the orphaned translations. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## trunk #22996 +/- ##
==========================================
- Coverage 37.42% 37.42% -0.01%
==========================================
Files 2325 2326 +1
Lines 125399 125408 +9
Branches 17205 17207 +2
==========================================
+ Hits 46929 46930 +1
- Misses 74656 74664 +8
Partials 3814 3814 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
Re-add the "Try new stats" toolbar menu and suggestion dialog on the classic Stats screen, and the "Disable new stats" overflow on the new Stats screen. The latter is shown only when the android_new_stats remote flag is off, so users on the rollout cannot switch back. Controls are plain navigation now; the remote flag remains the routing source of truth (no local ExperimentalFeatures flag is reintroduced). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…o companion The previous cleanup removed translations for eight New Stats string keys, but only two (experimental_new_stats, experimental_new_stats_description) are actually orphaned. The other six are still rendered by the kept controls (stats_try_new_stats, stats_switch_to_old_stats, and the four stats_new_stats_suggestion_* strings), so deleting their translations made non-English users see English text. Restore those six across all locales while keeping the two genuinely-orphaned experimental keys removed. Also move NEW_STATS_REMOTE_FIELD into a companion object const referenced from @feature, matching the convention used by the other FeatureConfig classes. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Show New Stats when the remote feature flag is on or the user has opted in locally. Opting in via the old Stats screen sets the preference, and switching back to old Stats clears it. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


Description
The New Stats experience was previously gated by a local experimental
feature flag (
ExperimentalFeatures.Feature.NEW_STATS), toggled both from theexperimental-features settings screen and from in-app "Try new stats" /
"Disable new stats" controls.
This PR replaces that local flag with a new remote feature flag,
android_new_stats, so the rollout can be controlled server-side. The remoteflag is the single source of truth for routing (which Stats screen opens by
default) and defaults to
falsewhen the remote value is unavailable (offline /not yet fetched).
The in-app switch controls are kept so users can move between the classic
and new experiences, with one rule tied to the remote flag: when
android_new_statsis on, the new experience is the rollout default and theuser is locked into it (no "Disable new stats" action). When the flag is
off, both directions are available. The controls are now plain navigation —
they no longer persist any local flag, so the remote flag remains the routing
source of truth.
Changes
NewStatsFeatureConfig(@Feature("android_new_stats", false))and the
NEW_STATSbuildConfigField. The@Featureannotation auto-registersthe default in the KSP-generated
RemoteFeatureConfigDefaults.ListItemActionHandlernow decides new vs. classicStats via
newStatsFeatureConfig.isEnabled()(test updated accordingly).NEW_STATSentry fromExperimentalFeatures(it disappears from the experimental-features settings screen automatically).
(
res/menu/stats_toolbar_menu.xml) and the "new Stats experience" suggestiondialog in
StatsFragmentremain. Selecting them now simply launchesNewStatsActivity(no local flag write).overflow action in
NewStatsActivityis shown only whennewStatsFeatureConfig.isEnabled()isfalse. When the remote flag istruethe action is hidden, so users on the rollout cannot switch back. Selecting it
launches the classic
StatsActivity(no local flag write).AppPrefs/AppPrefsWrapper), baseEnglish strings, and the
STATS_NEW_STATS_ENABLED/STATS_NEW_STATS_DISABLEDanalytics events used by these controls.
Testing instructions
1. The experimental flag is gone
2. a8c user → New Stats is presented
android_new_statsresolves to on).3. Random (non-a8c) user → ~90% see classic Stats, and can switch both ways