1  /*
2   * Copyright (C) 2022 The Android Open Source Project
3   *
4   * Licensed under the Apache License, Version 2.0 (the "License");
5   * you may not use this file except in compliance with the License.
6   * You may obtain a copy of the License at
7   *
8   *      http://www.apache.org/licenses/LICENSE-2.0
9   *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package com.android.systemui.flags
17  
18  import android.provider.DeviceConfig
19  import com.android.internal.annotations.Keep
20  import com.android.systemui.R
21  import com.android.systemui.flags.FlagsFactory.releasedFlag
22  import com.android.systemui.flags.FlagsFactory.resourceBooleanFlag
23  import com.android.systemui.flags.FlagsFactory.sysPropBooleanFlag
24  import com.android.systemui.flags.FlagsFactory.unreleasedFlag
25  
26  /**
27   * List of [Flag] objects for use in SystemUI.
28   *
29   * Flag Ids are integers. Ids must be unique. This is enforced in a unit test. Ids need not be
30   * sequential. Flags can "claim" a chunk of ids for flags in related features with a comment. This
31   * is purely for organizational purposes.
32   *
33   * On public release builds, flags will always return their default value. There is no way to change
34   * their value on release builds.
35   *
36   * See [FeatureFlagsDebug] for instructions on flipping the flags via adb.
37   */
38  object Flags {
39      @JvmField val TEAMFOOD = unreleasedFlag("teamfood")
40  
41      // 100 - notification
42      // TODO(b/297792660): Tracking Bug
43      val ADD_TRANSIENT_HUN_IN_STACK_STATE_ANIMATOR =
44          unreleasedFlag("add_transient_hun_in_stack_state_animator", teamfood = false)
45  
46      // TODO(b/254512751): Tracking Bug
47      val NOTIFICATION_PIPELINE_DEVELOPER_LOGGING =
48          unreleasedFlag("notification_pipeline_developer_logging")
49  
50      // TODO(b/254512732): Tracking Bug
51      @JvmField val NSSL_DEBUG_LINES = unreleasedFlag("nssl_debug_lines")
52  
53      // TODO(b/254512505): Tracking Bug
54      @JvmField val NSSL_DEBUG_REMOVE_ANIMATION = unreleasedFlag("nssl_debug_remove_animation")
55  
56      // TODO(b/254512624): Tracking Bug
57      @JvmField
58      val NOTIFICATION_DRAG_TO_CONTENTS =
59          resourceBooleanFlag(
60              R.bool.config_notificationToContents,
61              "notification_drag_to_contents"
62          )
63  
64      // TODO(b/254512538): Tracking Bug
65      val INSTANT_VOICE_REPLY = unreleasedFlag("instant_voice_reply")
66  
67      /**
68       * This flag controls whether we register a listener for StatsD notification memory reports.
69       * For statsd to actually call the listener however, a server-side toggle needs to be
70       * enabled as well.
71       */
72      val NOTIFICATION_MEMORY_LOGGING_ENABLED =
73              releasedFlag("notification_memory_logging_enabled")
74  
75      // TODO(b/260335638): Tracking Bug
76      @JvmField
77      val NOTIFICATION_INLINE_REPLY_ANIMATION =
78          unreleasedFlag("notification_inline_reply_animation")
79  
80      /** Makes sure notification panel is updated before the user switch is complete. */
81      // TODO(b/278873737): Tracking Bug
82      @JvmField
83      val LOAD_NOTIFICATIONS_BEFORE_THE_USER_SWITCH_IS_COMPLETE =
84          releasedFlag("load_notifications_before_the_user_switch_is_complete")
85  
86      // TODO(b/277338665): Tracking Bug
87      @JvmField
88      val NOTIFICATION_SHELF_REFACTOR =
89          unreleasedFlag("notification_shelf_refactor", teamfood = true)
90  
91      // TODO(b/290787599): Tracking Bug
92      @JvmField
93      val NOTIFICATION_ICON_CONTAINER_REFACTOR =
94          unreleasedFlag("notification_icon_container_refactor")
95  
96      // TODO(b/288326013): Tracking Bug
97      @JvmField
98      val NOTIFICATION_ASYNC_HYBRID_VIEW_INFLATION =
99          unreleasedFlag("notification_async_hybrid_view_inflation", teamfood = false)
100  
101      @JvmField
102      val ANIMATED_NOTIFICATION_SHADE_INSETS =
103          releasedFlag("animated_notification_shade_insets")
104  
105      // TODO(b/268005230): Tracking Bug
106      @JvmField
107      val SENSITIVE_REVEAL_ANIM = unreleasedFlag("sensitive_reveal_anim", teamfood = true)
108  
109      // TODO(b/280783617): Tracking Bug
110      @Keep
111      @JvmField
112      val BUILDER_EXTRAS_OVERRIDE =
113          sysPropBooleanFlag(
114              "persist.sysui.notification.builder_extras_override",
115              default = false
116          )
117  
118      /** Only notify group expansion listeners when a change happens. */
119      // TODO(b/292213543): Tracking Bug
120      @JvmField
121      val NOTIFICATION_GROUP_EXPANSION_CHANGE =
122              unreleasedFlag("notification_group_expansion_change")
123  
124      // 200 - keyguard/lockscreen
125      // ** Flag retired **
126      // public static final BooleanFlag KEYGUARD_LAYOUT =
127      //         new BooleanFlag(true);
128  
129      // TODO(b/254512750): Tracking Bug
130      val NEW_UNLOCK_SWIPE_ANIMATION = releasedFlag("new_unlock_swipe_animation")
131      val CHARGING_RIPPLE = resourceBooleanFlag(R.bool.flag_charging_ripple, "charging_ripple")
132  
133      // TODO(b/254512281): Tracking Bug
134      @JvmField
135      val BOUNCER_USER_SWITCHER =
136          resourceBooleanFlag(R.bool.config_enableBouncerUserSwitcher, "bouncer_user_switcher")
137  
138      // TODO(b/254512676): Tracking Bug
139      @JvmField
140      val LOCKSCREEN_CUSTOM_CLOCKS =
141          resourceBooleanFlag(
142              R.bool.config_enableLockScreenCustomClocks,
143              "lockscreen_custom_clocks"
144          )
145  
146      // TODO(b/275694445): Tracking Bug
147      @JvmField
148      val LOCKSCREEN_WITHOUT_SECURE_LOCK_WHEN_DREAMING =
149          releasedFlag("lockscreen_without_secure_lock_when_dreaming")
150  
151      // TODO(b/286092087): Tracking Bug
152      @JvmField
153      val ENABLE_SYSTEM_UI_DREAM_CONTROLLER = unreleasedFlag("enable_system_ui_dream_controller")
154  
155      // TODO(b/288287730): Tracking Bug
156      @JvmField
157      val ENABLE_SYSTEM_UI_DREAM_HOSTING = unreleasedFlag("enable_system_ui_dream_hosting")
158  
159      /**
160       * Whether the clock on a wide lock screen should use the new "stepping" animation for moving
161       * the digits when the clock moves.
162       */
163      @JvmField val STEP_CLOCK_ANIMATION = releasedFlag("step_clock_animation")
164  
165      /**
166       * Migration from the legacy isDozing/dozeAmount paths to the new KeyguardTransitionRepository
167       * will occur in stages. This is one stage of many to come.
168       */
169      // TODO(b/255607168): Tracking Bug
170      @JvmField val DOZING_MIGRATION_1 = unreleasedFlag("dozing_migration_1")
171  
172      /**
173       * Migrates control of the LightRevealScrim's reveal effect and amount from legacy code to the
174       * new KeyguardTransitionRepository.
175       */
176      // TODO(b/281655028): Tracking bug
177      @JvmField
178      val LIGHT_REVEAL_MIGRATION = unreleasedFlag("light_reveal_migration", teamfood = false)
179  
180      /** Flag to control the migration of face auth to modern architecture. */
181      // TODO(b/262838215): Tracking bug
182      @JvmField val FACE_AUTH_REFACTOR = unreleasedFlag("face_auth_refactor")
183  
184      /** Flag to control the revamp of keyguard biometrics progress animation */
185      // TODO(b/244313043): Tracking bug
186      @JvmField val BIOMETRICS_ANIMATION_REVAMP = unreleasedFlag("biometrics_animation_revamp")
187  
188      // TODO(b/262780002): Tracking Bug
189      @JvmField val REVAMPED_WALLPAPER_UI = releasedFlag("revamped_wallpaper_ui")
190  
191      // flag for controlling auto pin confirmation and material u shapes in bouncer
192      @JvmField
193      val AUTO_PIN_CONFIRMATION = releasedFlag("auto_pin_confirmation", "auto_pin_confirmation")
194  
195      // TODO(b/262859270): Tracking Bug
196      @JvmField val FALSING_OFF_FOR_UNFOLDED = releasedFlag("falsing_off_for_unfolded")
197  
198      /** Enables code to show contextual loyalty cards in wallet entrypoints */
199      // TODO(b/294110497): Tracking Bug
200      @JvmField
201      val ENABLE_WALLET_CONTEXTUAL_LOYALTY_CARDS =
202          releasedFlag("enable_wallet_contextual_loyalty_cards")
203  
204      // TODO(b/242908637): Tracking Bug
205      @JvmField val WALLPAPER_FULLSCREEN_PREVIEW = releasedFlag("wallpaper_fullscreen_preview")
206  
207      /** Whether the long-press gesture to open wallpaper picker is enabled. */
208      // TODO(b/266242192): Tracking Bug
209      @JvmField
210      val LOCK_SCREEN_LONG_PRESS_ENABLED = releasedFlag("lock_screen_long_press_enabled")
211  
212      /** Enables UI updates for AI wallpapers in the wallpaper picker. */
213      // TODO(b/267722622): Tracking Bug
214      @JvmField val WALLPAPER_PICKER_UI_FOR_AIWP = releasedFlag("wallpaper_picker_ui_for_aiwp")
215  
216      /** Whether to use a new data source for intents to run on keyguard dismissal. */
217      // TODO(b/275069969): Tracking bug.
218      @JvmField
219      val REFACTOR_KEYGUARD_DISMISS_INTENT = unreleasedFlag("refactor_keyguard_dismiss_intent")
220  
221      /** Whether to allow long-press on the lock screen to directly open wallpaper picker. */
222      // TODO(b/277220285): Tracking bug.
223      @JvmField
224      val LOCK_SCREEN_LONG_PRESS_DIRECT_TO_WPP =
225          unreleasedFlag("lock_screen_long_press_directly_opens_wallpaper_picker")
226  
227      /** Whether page transition animations in the wallpaper picker are enabled */
228      // TODO(b/291710220): Tracking bug.
229      @JvmField
230      val WALLPAPER_PICKER_PAGE_TRANSITIONS =
231          unreleasedFlag("wallpaper_picker_page_transitions")
232  
233      /** Add "Apply" button to wall paper picker's grid preview page. */
234      // TODO(b/294866904): Tracking bug.
235      @JvmField
236      val WALLPAPER_PICKER_GRID_APPLY_BUTTON =
237              unreleasedFlag("wallpaper_picker_grid_apply_button")
238  
239      /** Whether to run the new udfps keyguard refactor code. */
240      // TODO(b/279440316): Tracking bug.
241      @JvmField
242      val REFACTOR_UDFPS_KEYGUARD_VIEWS = unreleasedFlag("refactor_udfps_keyguard_views")
243  
244      /** Provide new auth messages on the bouncer. */
245      // TODO(b/277961132): Tracking bug.
246      @JvmField val REVAMPED_BOUNCER_MESSAGES = unreleasedFlag("revamped_bouncer_messages")
247  
248      /** Whether to delay showing bouncer UI when face auth or active unlock are enrolled. */
249      // TODO(b/279794160): Tracking bug.
250      @JvmField val DELAY_BOUNCER = releasedFlag("delay_bouncer")
251  
252      /** Keyguard Migration */
253  
254      /**
255       * Migrate the bottom area to the new keyguard root view. Because there is no such thing as a
256       * "bottom area" after this, this also breaks it up into many smaller, modular pieces.
257       */
258      // TODO(b/290652751): Tracking bug.
259      @JvmField
260      val MIGRATE_SPLIT_KEYGUARD_BOTTOM_AREA =
261          unreleasedFlag("migrate_split_keyguard_bottom_area")
262  
263      /** Whether to listen for fingerprint authentication over keyguard occluding activities. */
264      // TODO(b/283260512): Tracking bug.
265      @JvmField val FP_LISTEN_OCCLUDING_APPS = releasedFlag("fp_listen_occluding_apps")
266  
267      /** Flag meant to guard the talkback fix for the KeyguardIndicationTextView */
268      // TODO(b/286563884): Tracking bug
269      @JvmField val KEYGUARD_TALKBACK_FIX = releasedFlag("keyguard_talkback_fix")
270  
271      // TODO(b/287268101): Tracking bug.
272      @JvmField val TRANSIT_CLOCK = releasedFlag("lockscreen_custom_transit_clock")
273  
274      /** Migrate the lock icon view to the new keyguard root view. */
275      // TODO(b/286552209): Tracking bug.
276      @JvmField val MIGRATE_LOCK_ICON = unreleasedFlag("migrate_lock_icon")
277  
278      // TODO(b/288276738): Tracking bug.
279      @JvmField val WIDGET_ON_KEYGUARD = unreleasedFlag("widget_on_keyguard")
280  
281      /** Migrate the NSSL to the a sibling to both the panel and keyguard root view. */
282      // TODO(b/288074305): Tracking bug.
283      @JvmField val MIGRATE_NSSL = unreleasedFlag("migrate_nssl")
284  
285      /** Migrate the status view from the notification panel to keyguard root view. */
286      // TODO(b/291767565): Tracking bug.
287      @JvmField val MIGRATE_KEYGUARD_STATUS_VIEW = unreleasedFlag("migrate_keyguard_status_view")
288  
289      /** Enables preview loading animation in the wallpaper picker. */
290      // TODO(b/274443705): Tracking Bug
291      @JvmField
292      val WALLPAPER_PICKER_PREVIEW_ANIMATION = releasedFlag("wallpaper_picker_preview_animation")
293  
294      /** Stop running face auth when the display state changes to OFF. */
295      // TODO(b/294221702): Tracking bug.
296      @JvmField val STOP_FACE_AUTH_ON_DISPLAY_OFF = resourceBooleanFlag(
297              R.bool.flag_stop_face_auth_on_display_off, "stop_face_auth_on_display_off")
298  
299      /** Flag to disable the face scanning animation pulsing. */
300      // TODO(b/295245791): Tracking bug.
301      @JvmField val STOP_PULSING_FACE_SCANNING_ANIMATION = resourceBooleanFlag(
302              R.bool.flag_stop_pulsing_face_scanning_animation,
303              "stop_pulsing_face_scanning_animation")
304  
305      /**
306       * TODO(b/278086361): Tracking bug
307       * Complete rewrite of the interactions between System UI and Window Manager involving keyguard
308       * state. When enabled, calls to ActivityTaskManagerService from System UI will exclusively
309       * occur from [WmLockscreenVisibilityManager] rather than the legacy KeyguardViewMediator.
310       *
311       * This flag is under development; some types of unlock may not animate properly if you enable
312       * it.
313       */
314      @JvmField
315      val KEYGUARD_WM_STATE_REFACTOR: UnreleasedFlag =
316              unreleasedFlag("keyguard_wm_state_refactor")
317  
318      // 300 - power menu
319      // TODO(b/254512600): Tracking Bug
320      @JvmField val POWER_MENU_LITE = releasedFlag("power_menu_lite")
321  
322      // 400 - smartspace
323  
324      // TODO(b/254513100): Tracking Bug
325      val SMARTSPACE_SHARED_ELEMENT_TRANSITION_ENABLED =
326          releasedFlag("smartspace_shared_element_transition_enabled")
327  
328      // TODO(b/258517050): Clean up after the feature is launched.
329      @JvmField
330      val SMARTSPACE_DATE_WEATHER_DECOUPLED =
331          sysPropBooleanFlag("persist.sysui.ss.dw_decoupled", default = true)
332  
333      // TODO(b/270223352): Tracking Bug
334      @JvmField
335      val HIDE_SMARTSPACE_ON_DREAM_OVERLAY = releasedFlag("hide_smartspace_on_dream_overlay")
336  
337      // TODO(b/271460958): Tracking Bug
338      @JvmField
339      val SHOW_WEATHER_COMPLICATION_ON_DREAM_OVERLAY =
340          releasedFlag("show_weather_complication_on_dream_overlay")
341  
342      // 500 - quick settings
343  
344      val PEOPLE_TILE = resourceBooleanFlag(R.bool.flag_conversations, "people_tile")
345  
346      @JvmField
347      val QS_USER_DETAIL_SHORTCUT =
348          resourceBooleanFlag(
349              R.bool.flag_lockscreen_qs_user_detail_shortcut,
350              "qs_user_detail_shortcut"
351          )
352  
353      @JvmField
354      val QS_PIPELINE_NEW_HOST = unreleasedFlag("qs_pipeline_new_host", teamfood = true)
355  
356      // TODO(b/278068252): Tracking Bug
357      @JvmField
358      val QS_PIPELINE_AUTO_ADD = unreleasedFlag("qs_pipeline_auto_add", teamfood = false)
359  
360      // TODO(b/254512383): Tracking Bug
361      @JvmField
362      val FULL_SCREEN_USER_SWITCHER =
363          resourceBooleanFlag(
364              R.bool.config_enableFullscreenUserSwitcher,
365              "full_screen_user_switcher"
366          )
367  
368      // TODO(b/244064524): Tracking Bug
369      @JvmField val QS_SECONDARY_DATA_SUB_INFO = releasedFlag("qs_secondary_data_sub_info")
370  
371      /** Enables Font Scaling Quick Settings tile */
372      // TODO(b/269341316): Tracking Bug
373      @JvmField val ENABLE_FONT_SCALING_TILE = releasedFlag("enable_font_scaling_tile")
374  
375      /** Enables new QS Edit Mode visual refresh */
376      // TODO(b/269787742): Tracking Bug
377      @JvmField
378      val ENABLE_NEW_QS_EDIT_MODE = unreleasedFlag("enable_new_qs_edit_mode", teamfood = false)
379  
380      // 600- status bar
381  
382      // TODO(b/291315866): Tracking Bug
383      @JvmField val SIGNAL_CALLBACK_DEPRECATION = unreleasedFlag("signal_callback_deprecation")
384  
385      // TODO(b/265892345): Tracking Bug
386      val PLUG_IN_STATUS_BAR_CHIP = releasedFlag("plug_in_status_bar_chip")
387  
388      // TODO(b/280426085): Tracking Bug
389      @JvmField val NEW_BLUETOOTH_REPOSITORY = releasedFlag("new_bluetooth_repository")
390  
391      // TODO(b/311222557): Tracking bug
392      val ROAMING_INDICATOR_VIA_DISPLAY_INFO =
393          releasedFlag("roaming_indicator_via_display_info")
394  
395      // TODO(b/292533677): Tracking Bug
396      val WIFI_TRACKER_LIB_FOR_WIFI_ICON =
397          unreleasedFlag("wifi_tracker_lib_for_wifi_icon", teamfood = true)
398  
399      // TODO(b/293863612): Tracking Bug
400      @JvmField val INCOMPATIBLE_CHARGING_BATTERY_ICON =
401          releasedFlag("incompatible_charging_battery_icon")
402  
403      // TODO(b/293585143): Tracking Bug
404      val INSTANT_TETHER = unreleasedFlag("instant_tether")
405  
406      // TODO(b/294588085): Tracking Bug
407      val WIFI_SECONDARY_NETWORKS = releasedFlag("wifi_secondary_networks")
408  
409      // TODO(b/290676905): Tracking Bug
410      val NEW_SHADE_CARRIER_GROUP_MOBILE_ICONS =
411          unreleasedFlag("new_shade_carrier_group_mobile_icons")
412  
413      // 700 - dialer/calls
414      // TODO(b/254512734): Tracking Bug
415      val ONGOING_CALL_STATUS_BAR_CHIP = releasedFlag("ongoing_call_status_bar_chip")
416  
417      // TODO(b/254512681): Tracking Bug
418      val ONGOING_CALL_IN_IMMERSIVE = releasedFlag("ongoing_call_in_immersive")
419  
420      // TODO(b/254512753): Tracking Bug
421      val ONGOING_CALL_IN_IMMERSIVE_CHIP_TAP = releasedFlag("ongoing_call_in_immersive_chip_tap")
422  
423      // 800 - general visual/theme
424      @JvmField val MONET = resourceBooleanFlag(R.bool.flag_monet, "monet")
425  
426      // 801 - region sampling
427      // TODO(b/254512848): Tracking Bug
428      val REGION_SAMPLING = unreleasedFlag("region_sampling")
429  
430      // 803 - screen contents translation
431      // TODO(b/254513187): Tracking Bug
432      val SCREEN_CONTENTS_TRANSLATION = unreleasedFlag("screen_contents_translation")
433  
434      // 804 - monochromatic themes
435      @JvmField val MONOCHROMATIC_THEME = releasedFlag("monochromatic")
436  
437      // TODO(b/293380347): Tracking Bug
438      @JvmField val COLOR_FIDELITY = unreleasedFlag("color_fidelity")
439  
440      // 900 - media
441      // TODO(b/254512697): Tracking Bug
442      val MEDIA_TAP_TO_TRANSFER = releasedFlag("media_tap_to_transfer")
443  
444      // TODO(b/254512502): Tracking Bug
445      val MEDIA_SESSION_ACTIONS = unreleasedFlag("media_session_actions")
446  
447      // TODO(b/254512654): Tracking Bug
448      @JvmField val DREAM_MEDIA_COMPLICATION = unreleasedFlag("dream_media_complication")
449  
450      // TODO(b/254512673): Tracking Bug
451      @JvmField val DREAM_MEDIA_TAP_TO_OPEN = unreleasedFlag("dream_media_tap_to_open")
452  
453      // TODO(b/254513168): Tracking Bug
454      @JvmField val UMO_SURFACE_RIPPLE = releasedFlag("umo_surface_ripple")
455  
456      // TODO(b/261734857): Tracking Bug
457      @JvmField val UMO_TURBULENCE_NOISE = releasedFlag("umo_turbulence_noise")
458  
459      // TODO(b/263272731): Tracking Bug
460      val MEDIA_TTT_RECEIVER_SUCCESS_RIPPLE = releasedFlag("media_ttt_receiver_success_ripple")
461  
462      // TODO(b/266157412): Tracking Bug
463      val MEDIA_RETAIN_SESSIONS = unreleasedFlag("media_retain_sessions")
464  
465      // TODO(b/267007629): Tracking Bug
466      val MEDIA_RESUME_PROGRESS = releasedFlag("media_resume_progress")
467  
468      // TODO(b/267166152) : Tracking Bug
469      val MEDIA_RETAIN_RECOMMENDATIONS = unreleasedFlag("media_retain_recommendations")
470  
471      // TODO(b/270437894): Tracking Bug
472      val MEDIA_REMOTE_RESUME = unreleasedFlag("media_remote_resume")
473  
474      // 1000 - dock
475      val SIMULATE_DOCK_THROUGH_CHARGING = releasedFlag("simulate_dock_through_charging")
476  
477      // TODO(b/254512758): Tracking Bug
478      @JvmField val ROUNDED_BOX_RIPPLE = releasedFlag("rounded_box_ripple")
479  
480      // TODO(b/273509374): Tracking Bug
481      @JvmField
482      val ALWAYS_SHOW_HOME_CONTROLS_ON_DREAMS =
483          releasedFlag("always_show_home_controls_on_dreams")
484  
485      // 1100 - windowing
486      @Keep
487      @JvmField
488      val WM_ENABLE_SHELL_TRANSITIONS =
489          sysPropBooleanFlag("persist.wm.debug.shell_transit", default = true)
490  
491      // TODO(b/254513207): Tracking Bug
492      @Keep
493      @JvmField
494      val WM_ENABLE_PARTIAL_SCREEN_SHARING =
495          unreleasedFlag(
496              name = "record_task_content",
497              namespace = DeviceConfig.NAMESPACE_WINDOW_MANAGER,
498              teamfood = true
499          )
500  
501      // TODO(b/254512674): Tracking Bug
502      @Keep
503      @JvmField
504      val HIDE_NAVBAR_WINDOW =
505          sysPropBooleanFlag("persist.wm.debug.hide_navbar_window", default = false)
506  
507      @Keep
508      @JvmField
509      val WM_DESKTOP_WINDOWING =
510          sysPropBooleanFlag("persist.wm.debug.desktop_mode", default = false)
511  
512      @Keep
513      @JvmField
514      val WM_CAPTION_ON_SHELL =
515          sysPropBooleanFlag("persist.wm.debug.caption_on_shell", default = true)
516  
517      // TODO(b/256873975): Tracking Bug
518      @JvmField
519      @Keep
520      val WM_BUBBLE_BAR = sysPropBooleanFlag("persist.wm.debug.bubble_bar", default = false)
521  
522      // TODO(b/260271148): Tracking bug
523      @Keep
524      @JvmField
525      val WM_DESKTOP_WINDOWING_2 =
526          sysPropBooleanFlag("persist.wm.debug.desktop_mode_2", default = false)
527  
528      // TODO(b/254513207): Tracking Bug to delete
529      @Keep
530      @JvmField
531      val WM_ENABLE_PARTIAL_SCREEN_SHARING_ENTERPRISE_POLICIES =
532          unreleasedFlag(
533              name = "screen_record_enterprise_policies",
534              namespace = DeviceConfig.NAMESPACE_WINDOW_MANAGER,
535              teamfood = false
536          )
537  
538      // TODO(b/293252410) : Tracking Bug
539      @JvmField
540      val LOCKSCREEN_ENABLE_LANDSCAPE =
541              unreleasedFlag("lockscreen.enable_landscape")
542  
543      // TODO(b/273443374): Tracking Bug
544      @Keep
545      @JvmField
546      val LOCKSCREEN_LIVE_WALLPAPER =
547          sysPropBooleanFlag("persist.wm.debug.lockscreen_live_wallpaper", default = true)
548  
549      // TODO(b/281648899): Tracking bug
550      @Keep
551      @JvmField
552      val WALLPAPER_MULTI_CROP =
553          sysPropBooleanFlag("persist.wm.debug.wallpaper_multi_crop", default = false)
554  
555      // TODO(b/290220798): Tracking Bug
556      @Keep
557      @JvmField
558      val ENABLE_PIP2_IMPLEMENTATION =
559          sysPropBooleanFlag("persist.wm.debug.enable_pip2_implementation", default = false)
560  
561      // 1200 - predictive back
562      @Keep
563      @JvmField
564      val WM_ENABLE_PREDICTIVE_BACK =
565          sysPropBooleanFlag("persist.wm.debug.predictive_back", default = true)
566  
567      @Keep
568      @JvmField
569      val WM_ENABLE_PREDICTIVE_BACK_ANIM =
570          sysPropBooleanFlag("persist.wm.debug.predictive_back_anim", default = true)
571  
572      @Keep
573      @JvmField
574      val WM_ALWAYS_ENFORCE_PREDICTIVE_BACK =
575          sysPropBooleanFlag("persist.wm.debug.predictive_back_always_enforce", default = false)
576  
577      // TODO(b/254512728): Tracking Bug
578      @JvmField val NEW_BACK_AFFORDANCE = releasedFlag("new_back_affordance")
579  
580      // TODO(b/255854141): Tracking Bug
581      @JvmField
582      val WM_ENABLE_PREDICTIVE_BACK_SYSUI =
583          unreleasedFlag("persist.wm.debug.predictive_back_sysui_enable", teamfood = true)
584  
585      // TODO(b/270987164): Tracking Bug
586      @JvmField val TRACKPAD_GESTURE_FEATURES = releasedFlag("trackpad_gesture_features")
587  
588      // TODO(b/263826204): Tracking Bug
589      @JvmField
590      val WM_ENABLE_PREDICTIVE_BACK_BOUNCER_ANIM =
591          unreleasedFlag("persist.wm.debug.predictive_back_bouncer_anim", teamfood = true)
592  
593      // TODO(b/238475428): Tracking Bug
594      @JvmField
595      val WM_SHADE_ALLOW_BACK_GESTURE =
596          sysPropBooleanFlag("persist.wm.debug.shade_allow_back_gesture", default = false)
597  
598      // TODO(b/238475428): Tracking Bug
599      @JvmField
600      val WM_SHADE_ANIMATE_BACK_GESTURE =
601          unreleasedFlag("persist.wm.debug.shade_animate_back_gesture", teamfood = false)
602  
603      // TODO(b/265639042): Tracking Bug
604      @JvmField
605      val WM_ENABLE_PREDICTIVE_BACK_QS_DIALOG_ANIM =
606          unreleasedFlag("persist.wm.debug.predictive_back_qs_dialog_anim", teamfood = true)
607  
608      // TODO(b/273800936): Tracking Bug
609      @JvmField val TRACKPAD_GESTURE_COMMON = releasedFlag("trackpad_gesture_common")
610  
611      // 1300 - screenshots
612      // TODO(b/264916608): Tracking Bug
613      @JvmField val SCREENSHOT_METADATA = unreleasedFlag("screenshot_metadata")
614  
615      // TODO(b/266955521): Tracking bug
616      @JvmField val SCREENSHOT_DETECTION = releasedFlag("screenshot_detection")
617  
618      // TODO(b/251205791): Tracking Bug
619      @JvmField val SCREENSHOT_APP_CLIPS = releasedFlag("screenshot_app_clips")
620  
621      /** TODO(b/295143676): Tracking bug. When enable, captures a screenshot for each display. */
622      @JvmField
623      val MULTI_DISPLAY_SCREENSHOT = unreleasedFlag("multi_display_screenshot")
624  
625      // 1400 - columbus
626      // TODO(b/254512756): Tracking Bug
627      val QUICK_TAP_IN_PCC = releasedFlag("quick_tap_in_pcc")
628  
629      // TODO(b/261979569): Tracking Bug
630      val QUICK_TAP_FLOW_FRAMEWORK =
631          unreleasedFlag("quick_tap_flow_framework", teamfood = false)
632  
633      // 1500 - chooser aka sharesheet
634  
635      // 1700 - clipboard
636      @JvmField val CLIPBOARD_REMOTE_BEHAVIOR = releasedFlag("clipboard_remote_behavior")
637      // TODO(b/278714186) Tracking Bug
638      @JvmField
639      val CLIPBOARD_IMAGE_TIMEOUT = unreleasedFlag("clipboard_image_timeout", teamfood = true)
640      // TODO(b/279405451): Tracking Bug
641      @JvmField
642      val CLIPBOARD_SHARED_TRANSITIONS =
643              unreleasedFlag("clipboard_shared_transitions", teamfood = true)
644  
645      // TODO(b/283300105): Tracking Bug
646      @JvmField val SCENE_CONTAINER = unreleasedFlag("scene_container")
647  
648      // 1900
649      @JvmField val NOTE_TASKS = releasedFlag("keycode_flag")
650  
651      // 2000 - device controls
652      @JvmField val APP_PANELS_ALL_APPS_ALLOWED = releasedFlag("app_panels_all_apps_allowed")
653  
654      // 2200 - biometrics (udfps, sfps, BiometricPrompt, etc.)
655      // TODO(b/259264861): Tracking Bug
656      @JvmField val UDFPS_NEW_TOUCH_DETECTION = releasedFlag("udfps_new_touch_detection")
657      @JvmField val UDFPS_ELLIPSE_DETECTION = releasedFlag("udfps_ellipse_detection")
658      // TODO(b/278622168): Tracking Bug
659      @JvmField val BIOMETRIC_BP_STRONG = releasedFlag("biometric_bp_strong")
660  
661      // 2300 - stylus
662      @JvmField val TRACK_STYLUS_EVER_USED = releasedFlag("track_stylus_ever_used")
663      @JvmField val ENABLE_STYLUS_CHARGING_UI = releasedFlag("enable_stylus_charging_ui")
664      @JvmField
665      val ENABLE_USI_BATTERY_NOTIFICATIONS = releasedFlag("enable_usi_battery_notifications")
666      @JvmField val ENABLE_STYLUS_EDUCATION = releasedFlag("enable_stylus_education")
667  
668      // 2400 - performance tools and debugging info
669      // TODO(b/238923086): Tracking Bug
670      @JvmField
671      val WARN_ON_BLOCKING_BINDER_TRANSACTIONS =
672          unreleasedFlag("warn_on_blocking_binder_transactions")
673  
674      @JvmField
675      val COROUTINE_TRACING =
676          unreleasedFlag("coroutine_tracing")
677  
678      // TODO(b/283071711): Tracking bug
679      @JvmField
680      val TRIM_RESOURCES_WITH_BACKGROUND_TRIM_AT_LOCK =
681          unreleasedFlag("trim_resources_with_background_trim_on_lock")
682  
683      // TODO:(b/283203305): Tracking bug
684      @JvmField val TRIM_FONT_CACHES_AT_UNLOCK = unreleasedFlag("trim_font_caches_on_unlock")
685  
686      // 2700 - unfold transitions
687      // TODO(b/265764985): Tracking Bug
688      @Keep
689      @JvmField
690      val ENABLE_DARK_VIGNETTE_WHEN_FOLDING =
691          unreleasedFlag("enable_dark_vignette_when_folding")
692  
693      // TODO(b/265764985): Tracking Bug
694      @Keep
695      @JvmField
696      val ENABLE_UNFOLD_STATUS_BAR_ANIMATIONS =
697          unreleasedFlag("enable_unfold_status_bar_animations")
698  
699      // TODO(b259590361): Tracking bug
700      val EXPERIMENTAL_FLAG = unreleasedFlag("exp_flag_release")
701  
702      // 2600 - keyboard
703      // TODO(b/259352579): Tracking Bug
704      @JvmField val SHORTCUT_LIST_SEARCH_LAYOUT = releasedFlag("shortcut_list_search_layout")
705  
706      // TODO(b/259428678): Tracking Bug
707      @JvmField val KEYBOARD_BACKLIGHT_INDICATOR = releasedFlag("keyboard_backlight_indicator")
708  
709      // TODO(b/277192623): Tracking Bug
710      @JvmField val KEYBOARD_EDUCATION = unreleasedFlag("keyboard_education", teamfood = false)
711  
712      // TODO(b/277201412): Tracking Bug
713      @JvmField
714      val SPLIT_SHADE_SUBPIXEL_OPTIMIZATION = releasedFlag("split_shade_subpixel_optimization")
715  
716      // TODO(b/288868056): Tracking Bug
717      @JvmField
718      val PARTIAL_SCREEN_SHARING_TASK_SWITCHER = unreleasedFlag("pss_task_switcher")
719  
720      // TODO(b/278761837): Tracking Bug
721      @JvmField val USE_NEW_ACTIVITY_STARTER = releasedFlag(name = "use_new_activity_starter")
722  
723      // 2900 - Zero Jank fixes. Naming convention is: zj_<bug number>_<cuj name>
724  
725      // TODO:(b/285623104): Tracking bug
726      @JvmField
727      val ZJ_285570694_LOCKSCREEN_TRANSITION_FROM_AOD =
728          releasedFlag("zj_285570694_lockscreen_transition_from_aod")
729  
730      // 3000 - dream
731      // TODO(b/285059790) : Tracking Bug
732      @JvmField
733      val LOCKSCREEN_WALLPAPER_DREAM_ENABLED =
734          unreleasedFlag(name = "enable_lockscreen_wallpaper_dream")
735  
736      // TODO(b/283084712): Tracking Bug
737      @JvmField val IMPROVED_HUN_ANIMATIONS = unreleasedFlag("improved_hun_animations")
738  
739      // TODO(b/283447257): Tracking bug
740      @JvmField
741      val BIGPICTURE_NOTIFICATION_LAZY_LOADING =
742          unreleasedFlag("bigpicture_notification_lazy_loading")
743  
744      // TODO(b/292062937): Tracking bug
745      @JvmField
746      val NOTIFICATION_CLEARABLE_REFACTOR =
747              unreleasedFlag("notification_clearable_refactor")
748  
749      // TODO(b/283740863): Tracking Bug
750      @JvmField
751      val ENABLE_NEW_PRIVACY_DIALOG =
752          unreleasedFlag("enable_new_privacy_dialog", teamfood = true)
753  
754      // TODO(b/289573946): Tracking Bug
755      @JvmField val PRECOMPUTED_TEXT = unreleasedFlag("precomputed_text")
756  
757      // 2900 - CentralSurfaces-related flags
758  
759      // TODO(b/285174336): Tracking Bug
760      @JvmField
761      val USE_REPOS_FOR_BOUNCER_SHOWING =
762          unreleasedFlag("use_repos_for_bouncer_showing", teamfood = true)
763  
764      // 3100 - Haptic interactions
765  
766      // TODO(b/290213663): Tracking Bug
767      @JvmField
768      val ONE_WAY_HAPTICS_API_MIGRATION = unreleasedFlag("oneway_haptics_api_migration")
769  
770      /** TODO(b/296223317): Enables the new keyguard presentation containing a clock. */
771      @JvmField
772      val ENABLE_CLOCK_KEYGUARD_PRESENTATION = unreleasedFlag("enable_clock_keyguard_presentation")
773  
774      /** Enable the Compose implementation of the PeopleSpaceActivity. */
775      @JvmField
776      val COMPOSE_PEOPLE_SPACE = unreleasedFlag("compose_people_space")
777  
778      /** Enable the Compose implementation of the Quick Settings footer actions. */
779      @JvmField
780      val COMPOSE_QS_FOOTER_ACTIONS = unreleasedFlag("compose_qs_footer_actions")
781  
782      /** Enable the share wifi button in Quick Settings internet dialog. */
783      @JvmField
784      val SHARE_WIFI_QS_BUTTON = unreleasedFlag("share_wifi_qs_button")
785  
786      /** Enable haptic slider component in the brightness slider */
787      @JvmField
788      val HAPTIC_BRIGHTNESS_SLIDER = unreleasedFlag("haptic_brightness_slider")
789  }
790