camera_roll_view.h 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. // Copyright 2021 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. #ifndef ASH_SYSTEM_PHONEHUB_CAMERA_ROLL_VIEW_H_
  5. #define ASH_SYSTEM_PHONEHUB_CAMERA_ROLL_VIEW_H_
  6. #include "ash/ash_export.h"
  7. #include "ash/components/phonehub/camera_roll_manager.h"
  8. #include "base/gtest_prod_util.h"
  9. #include "ui/views/view.h"
  10. #include "ui/views/view_model.h"
  11. namespace ash {
  12. namespace phonehub {
  13. class UserActionRecorder;
  14. }
  15. // A view in Phone Hub bubble that allows user view and access recently taken
  16. // photos and videos from a connected device.
  17. // Contains the header and one or more lines of clickable thumbnails.
  18. // This view will automatically hide if no Camera Roll items are available.
  19. class ASH_EXPORT CameraRollView : public views::View,
  20. public phonehub::CameraRollManager::Observer {
  21. public:
  22. CameraRollView(phonehub::CameraRollManager* camera_roll_manager,
  23. phonehub::UserActionRecorder* user_action_recorder);
  24. ~CameraRollView() override;
  25. CameraRollView(CameraRollView&) = delete;
  26. CameraRollView operator=(CameraRollView&) = delete;
  27. // phonehub::CameraRollManager::Observer:
  28. void OnCameraRollViewUiStateUpdated() override;
  29. // views::View:
  30. const char* GetClassName() const override;
  31. private:
  32. friend class CameraRollViewTest;
  33. FRIEND_TEST_ALL_PREFIXES(CameraRollViewTest, OptInAlready);
  34. FRIEND_TEST_ALL_PREFIXES(CameraRollViewTest, ViewLayout);
  35. FRIEND_TEST_ALL_PREFIXES(CameraRollViewTest, ImageThumbnail);
  36. FRIEND_TEST_ALL_PREFIXES(CameraRollViewTest, VideoThumbnail);
  37. class CameraRollItemsView : public views::View {
  38. public:
  39. CameraRollItemsView();
  40. ~CameraRollItemsView() override;
  41. CameraRollItemsView(CameraRollItemsView&) = delete;
  42. CameraRollItemsView operator=(CameraRollItemsView&) = delete;
  43. void AddCameraRollItem(views::View* camera_roll_item);
  44. void Reset();
  45. // views::View:
  46. gfx::Size CalculatePreferredSize() const override;
  47. void Layout() override;
  48. const char* GetClassName() const override;
  49. private:
  50. FRIEND_TEST_ALL_PREFIXES(CameraRollViewTest, ViewLayout);
  51. FRIEND_TEST_ALL_PREFIXES(CameraRollViewTest, ImageThumbnail);
  52. FRIEND_TEST_ALL_PREFIXES(CameraRollViewTest, VideoThumbnail);
  53. gfx::Point GetCameraRollItemPosition(int index);
  54. void CalculateIdealBounds();
  55. views::ViewModelT<views::View> camera_roll_items_;
  56. };
  57. // Update the camera roll section to display the latest items.
  58. void Update();
  59. phonehub::CameraRollManager* camera_roll_manager_ = nullptr;
  60. phonehub::UserActionRecorder* user_action_recorder_ = nullptr;
  61. CameraRollItemsView* items_view_ = nullptr;
  62. bool content_present_metric_emitted_ = false;
  63. };
  64. } // namespace ash
  65. #endif // ASH_SYSTEM_PHONEHUB_CAMERA_ROLL_VIEW_H_