blob: d5fb2cec72389ffdb2ce189ded2c016dc90d37b0 [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UI_VIEWS_TABS_GROUPS_AVATAR_CONTAINER_VIEW_H_
#define CHROME_BROWSER_UI_VIEWS_TABS_GROUPS_AVATAR_CONTAINER_VIEW_H_
#include <array>
#include "base/memory/raw_ptr.h"
#include "components/data_sharing/public/group_data.h"
#include "components/saved_tab_groups/public/types.h"
#include "components/sync/base/collaboration_id.h"
#include "ui/base/metadata/metadata_header_macros.h"
#include "ui/views/controls/image_view.h"
#include "ui/views/view.h"
class Profile;
namespace data_sharing {
class DataSharingService;
}
// A face pile of the avatars in a shared tab group, used for the tab group
// editor bubble view in the ManageSharingRow
class ManageSharingAvatarContainer : public views::View {
METADATA_HEADER(ManageSharingAvatarContainer, views::View)
public:
ManageSharingAvatarContainer(Profile* profile,
const syncer::CollaborationId& collaboration_id);
~ManageSharingAvatarContainer() override;
// destroys and rebuilds all member images, used for retheming. does not
// requery.
void RebuildChildren();
// views::View overrides.
void AddedToWidget() override;
void OnThemeChanged() override;
protected:
void OnDeviceScaleFactorChanged(float old_device_scale_factor,
float new_device_scale_factor) override;
private:
// Callback when data sharing service fetches the avatar.
void UpdateMemberGfxImage(size_t index, const gfx::Image&);
// function that clears out member info and gets it again.
void RequeryMemberInfo();
// The service that avatar images are being pulled from.
raw_ptr<data_sharing::DataSharingService> data_sharing_service_;
// The profile for pulling group information.
raw_ptr<Profile> const profile_;
// The saved GUID for the group (used to get the collaboration).
const syncer::CollaborationId collaboration_id_;
// the members list that were queried from the data_sharing_service.
std::vector<data_sharing::GroupMember> members_for_display_;
// images for each of the members displayed.
std::array<std::optional<gfx::Image>, 3> member_gfx_images_;
// ImageViews displayed for each of the members.
raw_ptr<views::ImageView> member_1_image_view_ = nullptr;
raw_ptr<views::ImageView> member_2_image_view_ = nullptr;
raw_ptr<views::ImageView> member_3_or_overflow_image_view_ = nullptr;
base::WeakPtrFactory<ManageSharingAvatarContainer> weak_ptr_factory_{this};
};
#endif // CHROME_BROWSER_UI_VIEWS_TABS_GROUPS_AVATAR_CONTAINER_VIEW_H_