1 // Copyright 2018 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef ASH_PUBLIC_CPP_APP_LIST_APP_LIST_CONFIG_H_ 6 #define ASH_PUBLIC_CPP_APP_LIST_APP_LIST_CONFIG_H_ 7 8 #include "ash/public/cpp/app_list/app_list_types.h" 9 #include "ash/public/cpp/ash_public_export.h" 10 #include "ui/base/resource/resource_bundle.h" 11 #include "ui/gfx/geometry/insets.h" 12 #include "ui/gfx/geometry/size.h" 13 14 namespace gfx { 15 class FontList; 16 } 17 18 namespace ash { 19 20 // Shared layout type information for app list. Use the instance() method to 21 // obtain the AppListConfig. 22 class ASH_PUBLIC_EXPORT AppListConfig { 23 public: 24 // Constructor for unscaled configurations of the provided type. 25 explicit AppListConfig(AppListConfigType type); 26 27 // Constructor for scaled app list configuration. 28 // Used only if kScalableAppList feature is not enabled, in which case the 29 // app list configuration for small screens is created by scaling down 30 // AppListConfigType::kShared configuration. 31 // 32 // |scale_x| - The scale at which apps grid tile should be scaled 33 // horizontally. 34 // |scale_y| - The scale at which apps grid tile should be scaled 35 // vertically. 36 // |inner_title_scale_y| - The scale to use to vertically scale dimensions 37 // |min_y_scale| - Whether |scale_y| is the minimum scale allowed. 38 // within the apps grid tile. Different from |scale_y| because tile title 39 // height is not vertically scaled. 40 AppListConfig(const AppListConfig& base_config, 41 float scale_x, 42 float scale_y, 43 float inner_tile_scale_y, 44 bool min_y_scale); 45 ~AppListConfig(); 46 47 // Gets default app list configuration. 48 static AppListConfig& instance(); 49 type()50 AppListConfigType type() const { return type_; } scale_x()51 float scale_x() const { return scale_x_; } scale_y()52 float scale_y() const { return scale_y_; } grid_tile_width()53 int grid_tile_width() const { return grid_tile_width_; } grid_tile_height()54 int grid_tile_height() const { return grid_tile_height_; } grid_tile_spacing()55 int grid_tile_spacing() const { return grid_tile_spacing_; } grid_icon_dimension()56 int grid_icon_dimension() const { return grid_icon_dimension_; } grid_icon_bottom_padding()57 int grid_icon_bottom_padding() const { return grid_icon_bottom_padding_; } grid_title_top_padding()58 int grid_title_top_padding() const { return grid_title_top_padding_; } grid_title_bottom_padding()59 int grid_title_bottom_padding() const { return grid_title_bottom_padding_; } grid_title_horizontal_padding()60 int grid_title_horizontal_padding() const { 61 return grid_title_horizontal_padding_; 62 } grid_title_width()63 int grid_title_width() const { return grid_title_width_; } grid_focus_dimension()64 int grid_focus_dimension() const { return grid_focus_dimension_; } grid_focus_corner_radius()65 int grid_focus_corner_radius() const { return grid_focus_corner_radius_; } grid_title_color()66 SkColor grid_title_color() const { return grid_title_color_; } grid_fadeout_zone_height()67 int grid_fadeout_zone_height() const { return grid_fadeout_zone_height_; } grid_fadeout_mask_height()68 int grid_fadeout_mask_height() const { return grid_fadeout_mask_height_; } grid_to_page_switcher_margin()69 int grid_to_page_switcher_margin() const { 70 return grid_to_page_switcher_margin_; 71 } page_switcher_end_margin()72 int page_switcher_end_margin() const { return page_switcher_end_margin_; } search_tile_icon_dimension()73 int search_tile_icon_dimension() const { return search_tile_icon_dimension_; } search_tile_badge_icon_dimension()74 int search_tile_badge_icon_dimension() const { 75 return search_tile_badge_icon_dimension_; 76 } search_tile_badge_icon_offset()77 int search_tile_badge_icon_offset() const { 78 return search_tile_badge_icon_offset_; 79 } search_list_icon_dimension()80 int search_list_icon_dimension() const { return search_list_icon_dimension_; } search_list_icon_vertical_bar_dimension()81 int search_list_icon_vertical_bar_dimension() const { 82 return search_list_icon_vertical_bar_dimension_; 83 } search_list_badge_icon_dimension()84 int search_list_badge_icon_dimension() const { 85 return search_list_badge_icon_dimension_; 86 } suggestion_chip_icon_dimension()87 int suggestion_chip_icon_dimension() const { 88 return suggestion_chip_icon_dimension_; 89 } suggestion_chip_container_top_margin()90 int suggestion_chip_container_top_margin() const { 91 return suggestion_chip_container_top_margin_; 92 } suggestion_chip_container_height()93 int suggestion_chip_container_height() const { 94 return suggestion_chip_container_height_; 95 } app_title_max_line_height()96 int app_title_max_line_height() const { return app_title_max_line_height_; } app_title_font()97 const gfx::FontList& app_title_font() const { return app_title_font_; } peeking_app_list_height()98 int peeking_app_list_height() const { return peeking_app_list_height_; } search_box_closed_top_padding()99 int search_box_closed_top_padding() const { 100 return search_box_closed_top_padding_; 101 } search_box_peeking_top_padding()102 int search_box_peeking_top_padding() const { 103 return search_box_peeking_top_padding_; 104 } search_box_fullscreen_top_padding()105 int search_box_fullscreen_top_padding() const { 106 return search_box_fullscreen_top_padding_; 107 } search_box_height()108 int search_box_height() const { return search_box_height_; } search_box_height_for_dense_layout()109 int search_box_height_for_dense_layout() const { 110 return search_box_height_for_dense_layout_; 111 } preferred_cols()112 int preferred_cols() const { return preferred_cols_; } preferred_rows()113 int preferred_rows() const { return preferred_rows_; } page_spacing()114 int page_spacing() const { return page_spacing_; } expand_arrow_tile_height()115 int expand_arrow_tile_height() const { return expand_arrow_tile_height_; } folder_bubble_radius()116 int folder_bubble_radius() const { return folder_bubble_radius_; } folder_bubble_y_offset()117 int folder_bubble_y_offset() const { return folder_bubble_y_offset_; } folder_header_height()118 int folder_header_height() const { return folder_header_height_; } folder_header_min_width()119 int folder_header_min_width() const { return folder_header_min_width_; } folder_header_max_width()120 int folder_header_max_width() const { return folder_header_max_width_; } folder_header_min_tap_width()121 int folder_header_min_tap_width() const { 122 return folder_header_min_tap_width_; 123 } folder_name_border_radius()124 int folder_name_border_radius() const { return folder_name_border_radius_; } folder_name_border_thickness()125 int folder_name_border_thickness() const { 126 return folder_name_border_thickness_; 127 } folder_name_padding()128 int folder_name_padding() const { return folder_name_padding_; } folder_icon_dimension()129 int folder_icon_dimension() const { return folder_icon_dimension_; } folder_unclipped_icon_dimension()130 int folder_unclipped_icon_dimension() const { 131 return folder_unclipped_icon_dimension_; 132 } folder_icon_radius()133 int folder_icon_radius() const { return folder_icon_radius_; } folder_background_radius()134 int folder_background_radius() const { return folder_background_radius_; } folder_bubble_color()135 int folder_bubble_color() const { return folder_bubble_color_; } item_icon_in_folder_icon_dimension()136 int item_icon_in_folder_icon_dimension() const { 137 return item_icon_in_folder_icon_dimension_; 138 } item_icon_in_folder_icon_margin()139 int item_icon_in_folder_icon_margin() const { 140 return item_icon_in_folder_icon_margin_; 141 } folder_dropping_circle_radius()142 int folder_dropping_circle_radius() const { 143 return folder_dropping_circle_radius_; 144 } folder_dropping_delay()145 int folder_dropping_delay() const { return folder_dropping_delay_; } folder_background_color()146 SkColor folder_background_color() const { return folder_background_color_; } page_flip_zone_size()147 int page_flip_zone_size() const { return page_flip_zone_size_; } grid_tile_spacing_in_folder()148 int grid_tile_spacing_in_folder() const { 149 return grid_tile_spacing_in_folder_; 150 } blur_radius()151 int blur_radius() const { return blur_radius_; } grid_selected_color()152 SkColor grid_selected_color() const { return grid_selected_color_; } page_transition_duration()153 base::TimeDelta page_transition_duration() const { 154 return page_transition_duration_; 155 } overscroll_page_transition_duration()156 base::TimeDelta overscroll_page_transition_duration() const { 157 return overscroll_page_transition_duration_; 158 } folder_transition_in_duration()159 base::TimeDelta folder_transition_in_duration() const { 160 return folder_transition_in_duration_; 161 } folder_transition_out_duration()162 base::TimeDelta folder_transition_out_duration() const { 163 return folder_transition_out_duration_; 164 } num_start_page_tiles()165 size_t num_start_page_tiles() const { return num_start_page_tiles_; } max_search_results()166 size_t max_search_results() const { return max_search_results_; } max_folder_pages()167 size_t max_folder_pages() const { return max_folder_pages_; } max_folder_items_per_page()168 size_t max_folder_items_per_page() const { 169 return max_folder_items_per_page_; 170 } max_folder_name_chars()171 size_t max_folder_name_chars() const { return max_folder_name_chars_; } all_apps_opacity_start_px()172 float all_apps_opacity_start_px() const { return all_apps_opacity_start_px_; } all_apps_opacity_end_px()173 float all_apps_opacity_end_px() const { return all_apps_opacity_end_px_; } search_result_title_font_style()174 ui::ResourceBundle::FontStyle search_result_title_font_style() const { 175 return search_result_title_font_style_; 176 } search_tile_height()177 int search_tile_height() const { return search_tile_height_; } 178 max_search_result_tiles()179 size_t max_search_result_tiles() const { return max_search_result_tiles_; } 180 max_search_result_list_items()181 size_t max_search_result_list_items() const { 182 return max_search_result_list_items_; 183 } 184 max_assistant_search_result_list_items()185 size_t max_assistant_search_result_list_items() const { 186 return max_assistant_search_result_list_items_; 187 } 188 privacy_container_score()189 double privacy_container_score() const { return privacy_container_score_; } app_tiles_container_score()190 double app_tiles_container_score() const { 191 return app_tiles_container_score_; 192 } results_list_container_score()193 double results_list_container_score() const { 194 return results_list_container_score_; 195 } 196 grid_icon_size()197 gfx::Size grid_icon_size() const { 198 return gfx::Size(grid_icon_dimension_, grid_icon_dimension_); 199 } 200 grid_focus_size()201 gfx::Size grid_focus_size() const { 202 return gfx::Size(grid_focus_dimension_, grid_focus_dimension_); 203 } 204 search_tile_icon_size()205 gfx::Size search_tile_icon_size() const { 206 return gfx::Size(search_tile_icon_dimension_, search_tile_icon_dimension_); 207 } 208 search_tile_badge_icon_size()209 gfx::Size search_tile_badge_icon_size() const { 210 return gfx::Size(search_tile_badge_icon_dimension_, 211 search_tile_badge_icon_dimension_); 212 } 213 search_list_icon_size()214 gfx::Size search_list_icon_size() const { 215 return gfx::Size(search_list_icon_dimension_, search_list_icon_dimension_); 216 } 217 search_list_badge_icon_size()218 gfx::Size search_list_badge_icon_size() const { 219 return gfx::Size(search_list_badge_icon_dimension_, 220 search_list_badge_icon_dimension_); 221 } 222 folder_icon_size()223 gfx::Size folder_icon_size() const { 224 return gfx::Size(folder_icon_dimension_, folder_icon_dimension_); 225 } 226 folder_unclipped_icon_size()227 gfx::Size folder_unclipped_icon_size() const { 228 return gfx::Size(folder_unclipped_icon_dimension_, 229 folder_unclipped_icon_dimension_); 230 } 231 folder_icon_insets()232 gfx::Insets folder_icon_insets() const { 233 int folder_icon_dimension_diff = 234 folder_unclipped_icon_dimension_ - folder_icon_dimension_; 235 return gfx::Insets(folder_icon_dimension_diff / 2, 236 folder_icon_dimension_diff / 2, 237 (folder_icon_dimension_diff + 1) / 2, 238 (folder_icon_dimension_diff + 1) / 2); 239 } 240 item_icon_in_folder_icon_size()241 gfx::Size item_icon_in_folder_icon_size() const { 242 return gfx::Size(item_icon_in_folder_icon_dimension_, 243 item_icon_in_folder_icon_dimension_); 244 } 245 246 // Returns the dimension at which a result's icon should be displayed. 247 int GetPreferredIconDimension(SearchResultDisplayType display_type) const; 248 249 // Returns the maximum number of items allowed in specified page in apps grid. 250 int GetMaxNumOfItemsPerPage(int page) const; 251 252 // The minimal horizontal padding for the apps grid. 253 int GetMinGridHorizontalPadding() const; 254 255 // Returns the ideal apps container margins for the bounds available for app 256 // list content. 257 int GetIdealHorizontalMargin(const gfx::Rect& abailable_bounds) const; 258 int GetIdealVerticalMargin(const gfx::Rect& abailable_bounds) const; 259 260 // Returns the color and opacity for the page background. 261 SkColor GetCardifiedBackgroundColor(bool is_active) const; 262 263 private: 264 const AppListConfigType type_; 265 266 // Current config scale values - should be different from 1 for 267 // AppListConfigType::kShared only. 268 const float scale_x_; 269 const float scale_y_; 270 271 // The tile view's width and height of the item in apps grid view. 272 const int grid_tile_width_; 273 const int grid_tile_height_; 274 275 // The spacing between tile views in apps grid view. 276 const int grid_tile_spacing_; 277 278 // The icon dimension of tile views in apps grid view. 279 const int grid_icon_dimension_; 280 281 // The icon bottom padding in tile views in apps grid view. 282 const int grid_icon_bottom_padding_; 283 284 // The title top, bottom and horizontal padding in tile views in apps grid 285 // view. 286 const int grid_title_top_padding_; 287 const int grid_title_bottom_padding_; 288 const int grid_title_horizontal_padding_; 289 290 // The title width and color of tile views in apps grid view. 291 const int grid_title_width_; 292 const SkColor grid_title_color_; 293 294 // The focus dimension and corner radius of tile views in apps grid view. 295 const int grid_focus_dimension_; 296 const int grid_focus_corner_radius_; 297 298 // The vertical insets in the apps grid reserved for the grid fade out area. 299 const int grid_fadeout_zone_height_; 300 301 // The height of the masked area in the grid fade out zone. 302 // This is different from |grid_fadeout_zone_height_|, which may include 303 // additional margin outside the fadeout mask. 304 const int grid_fadeout_mask_height_; 305 306 // Horizontal margin between the apps grid and the page switcher UI. 307 const int grid_to_page_switcher_margin_; 308 309 // Minimal horizontal page switcher distance from the app list UI edge. 310 const int page_switcher_end_margin_; 311 312 // The icon dimension of tile views in search result page view. 313 const int search_tile_icon_dimension_; 314 315 // The badge icon dimension of tile views in search result page view. 316 const int search_tile_badge_icon_dimension_; 317 318 // The badge icon offset of tile views in search result page view. 319 const int search_tile_badge_icon_offset_; 320 321 // The icon dimension of list views in search result page view. 322 const int search_list_icon_dimension_; 323 324 // The vertical bar icon dimension of list views in search result page view. 325 const int search_list_icon_vertical_bar_dimension_; 326 327 // The badge background corner radius of list views in search result page 328 // view. 329 const int search_list_badge_icon_dimension_; 330 331 // The suggestion chip icon dimension. 332 const int suggestion_chip_icon_dimension_; 333 334 // The suggestion chip container top margin. 335 const int suggestion_chip_container_top_margin_; 336 337 // The suggestion chip container height. 338 const int suggestion_chip_container_height_; 339 340 // The maximum line height for app title in app list. 341 const int app_title_max_line_height_; 342 343 // The font for app title in app list. 344 const gfx::FontList app_title_font_; 345 346 // The height of app list in peeking mode. 347 const int peeking_app_list_height_; 348 349 // The top padding of search box in closed state. 350 const int search_box_closed_top_padding_; 351 352 // The top padding of search box in peeking state. 353 const int search_box_peeking_top_padding_; 354 355 // The top padding of search box in fullscreen state. 356 const int search_box_fullscreen_top_padding_; 357 358 // The preferred search box height. 359 const int search_box_height_; 360 361 // The preferred search box height when the vertical app list contents space 362 // is condensed - normally |search_box_height_| would be used. 363 const int search_box_height_for_dense_layout_; 364 365 // Preferred number of columns and rows in apps grid. 366 const int preferred_cols_; 367 const int preferred_rows_; 368 369 // The spacing between each page. 370 const int page_spacing_; 371 372 // The tile height of expand arrow. 373 const int expand_arrow_tile_height_; 374 375 // The folder image bubble radius. 376 const int folder_bubble_radius_; 377 378 // The y offset of folder image bubble center. 379 const int folder_bubble_y_offset_; 380 381 // The height of the in folder name and pagination buttons. 382 const int folder_header_height_; 383 384 // The min and max widths of the folder name. 385 const int folder_header_min_width_; 386 const int folder_header_max_width_; 387 388 // The min width of folder name for tap events. 389 const int folder_header_min_tap_width_; 390 391 // The border radius for folder name. 392 const int folder_name_border_radius_; 393 394 // The border thickness for folder name. 395 const int folder_name_border_thickness_; 396 397 // The inner padding for folder name. 398 const int folder_name_padding_; 399 400 // The icon dimension of folder. 401 const int folder_icon_dimension_; 402 403 // The unclipped icon dimension of folder. 404 const int folder_unclipped_icon_dimension_; 405 406 // The corner radius of folder icon. 407 const int folder_icon_radius_; 408 409 // The corner radius of folder background. 410 const int folder_background_radius_; 411 412 // The color of folder bubble. 413 const int folder_bubble_color_; 414 415 // The dimension of the item icon in folder icon. 416 const int item_icon_in_folder_icon_dimension_; 417 418 // The margin between item icons inside a folder icon. 419 const int item_icon_in_folder_icon_margin_; 420 421 // Radius of the circle, in which if entered, show folder dropping preview 422 // UI. 423 const int folder_dropping_circle_radius_; 424 425 // Delays in milliseconds to show folder dropping preview circle. 426 const int folder_dropping_delay_; 427 428 // The background color of folder. 429 const SkColor folder_background_color_; 430 431 // Width in pixels of the area on the sides that triggers a page flip. 432 const int page_flip_zone_size_; 433 434 // The spacing between tile views in folder. 435 const int grid_tile_spacing_in_folder_; 436 437 // The blur radius used in the app list. 438 const int blur_radius_; 439 440 // The keyboard select color for grid views, which are on top of a black 441 // shield view for new design (12% white). 442 const SkColor grid_selected_color_; 443 444 // Duration for page transition. 445 const base::TimeDelta page_transition_duration_; 446 447 // Duration for over scroll page transition. 448 const base::TimeDelta overscroll_page_transition_duration_; 449 450 // Duration for fading in the target page when opening 451 // or closing a folder, and the duration for the top folder icon animation 452 // for flying in or out the folder. 453 const base::TimeDelta folder_transition_in_duration_; 454 455 // Duration for fading out the old page when opening or 456 // closing a folder. 457 const base::TimeDelta folder_transition_out_duration_; 458 459 // The number of apps shown in the start page app grid. 460 const size_t num_start_page_tiles_; 461 462 // Maximum number of results to show in the launcher Search UI. 463 const size_t max_search_results_; 464 465 // Max pages allowed in a folder. 466 const size_t max_folder_pages_; 467 468 // Max items per page allowed in a folder. 469 const size_t max_folder_items_per_page_; 470 471 // Maximum length of the folder name in chars. 472 const size_t max_folder_name_chars_; 473 474 // Range of the height of centerline above screen bottom that all apps should 475 // change opacity. NOTE: this is used to change page switcher's opacity as 476 // well. 477 const float all_apps_opacity_start_px_ = 8.0f; 478 const float all_apps_opacity_end_px_ = 144.0f; 479 480 // Font style for AppListSearchResultTileItemViews that are not suggested 481 // apps. 482 const ui::ResourceBundle::FontStyle search_result_title_font_style_; 483 484 // The height of tiles in search result. 485 const int search_tile_height_ = 90; 486 487 // Max number of search result tiles in the launcher suggestion window. 488 const size_t max_search_result_tiles_ = 6; 489 490 // Max number of search result list items in the launcher suggestion window. 491 const size_t max_search_result_list_items_ = 5; 492 493 // Max number of Assistant search result list items in the launcher suggestion 494 // window. Appears in the list after normal search results. 495 const size_t max_assistant_search_result_list_items_ = 1; 496 497 // Scores for the containers within the search box view. These are displayed 498 // in high-to-low order. 499 // The privacy container is not always visible, but when available it should 500 // always be the first item underneath the search box. 501 const double privacy_container_score_ = 4.0; 502 const double app_tiles_container_score_ = 3.0; 503 const double results_list_container_score_ = 1.0; 504 505 // Cardified app list background properties 506 const SkColor cardified_background_color_; 507 const SkColor cardified_background_color_active_; 508 509 DISALLOW_COPY_AND_ASSIGN(AppListConfig); 510 }; 511 512 } // namespace ash 513 514 #endif // ASH_PUBLIC_CPP_APP_LIST_APP_LIST_CONFIG_H_ 515