blob: 41166007047a4fe99933f244cc21118f1ebc275c [file] [log] [blame]
// Copyright 2014 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_PROFILES_PROFILE_AVATAR_ICON_UTIL_H_
#define CHROME_BROWSER_PROFILES_PROFILE_AVATAR_ICON_UTIL_H_
#include <stddef.h>
#include <memory>
#include <string>
#include <unordered_set>
#include <vector>
#include "base/files/file_path.h"
#include "base/values.h"
#include "build/build_config.h"
#include "third_party/skia/include/core/SkColor.h"
#include "ui/base/models/image_model.h"
#include "ui/gfx/image/image_skia.h"
namespace base {
class FilePath;
}
namespace gfx {
class Image;
}
class Profile;
class ProfileAttributesEntry;
class SkBitmap;
namespace profiles {
#if BUILDFLAG(IS_WIN)
// The avatar badge size needs to be half of the shortcut icon size because
// the Windows taskbar icon is 32x32 and the avatar icon overlay is 16x16. So to
// get the shortcut avatar badge and the avatar icon overlay to match up, we
// need to preserve those ratios when creating the shortcut icon.
const int kShortcutIconSizeWin = 48;
const int kProfileAvatarBadgeSizeWin = kShortcutIconSizeWin / 2;
#endif // BUILDFLAG(IS_WIN)
// Size of the small identity images for list of profiles to switch to.
constexpr int kMenuAvatarIconSize = 20;
// Avatar access.
extern const base::FilePath::CharType kGAIAPictureFileName[];
extern const base::FilePath::CharType kHighResAvatarFolderName[];
// Avatar formatting.
extern const int kAvatarIconSize;
extern const SkColor kAvatarTutorialBackgroundColor;
extern const SkColor kAvatarTutorialContentTextColor;
extern const SkColor kAvatarBubbleAccountsBackgroundColor;
extern const SkColor kAvatarBubbleGaiaBackgroundColor;
extern const SkColor kUserManagerBackgroundColor;
// Avatar shape.
enum AvatarShape {
SHAPE_CIRCLE, // Only available for desktop platforms
SHAPE_SQUARE,
};
// Returns the default guest avatar.
ui::ImageModel GetGuestAvatar(int size = 256);
// Returns a version of |image| of a specific size. Note that no checks are
// done on the width/height so make sure they're reasonable values; in the
// range of 16-256 is probably best.
gfx::Image GetSizedAvatarIcon(const gfx::Image& image,
int width,
int height,
AvatarShape shape);
gfx::Image GetSizedAvatarIcon(const gfx::Image& image, int width, int height);
// Returns a version of |image| suitable for use in WebUI.
gfx::Image GetAvatarIconForWebUI(const gfx::Image& image);
// Returns a version of |image| suitable for use in title bars. The returned
// image is scaled to fit |dst_width| and |dst_height|.
gfx::Image GetAvatarIconForTitleBar(const gfx::Image& image,
int dst_width,
int dst_height);
#if BUILDFLAG(IS_MAC)
// Returns the image for the profile at |profile_path| that is suitable for use
// in the macOS menu bar.
gfx::Image GetAvatarIconForNSMenu(const base::FilePath& profile_path);
#endif
// Gets the number of default avatar icons that exist.
size_t GetDefaultAvatarIconCount();
// Gets the number of generic avatar icons that exist.
size_t GetGenericAvatarIconCount();
// Gets the index for the (grey silhouette) avatar used as a placeholder.
size_t GetPlaceholderAvatarIndex();
// Gets the start index of the modern profile avatar icons.
size_t GetModernAvatarIconStartIndex();
// Returns whether |icon_index| corresponds to one of the modern profile avatar
// icons.
bool IsModernAvatarIconIndex(size_t icon_index);
// Gets the resource ID of the placeholder avatar icon.
int GetPlaceholderAvatarIconResourceID();
// Returns a URL for the placeholder avatar icon.
std::string GetPlaceholderAvatarIconUrl();
// Returns colored generic avatar.
gfx::Image GetPlaceholderAvatarIconWithColors(SkColor fill_color,
SkColor stroke_color,
int size);
// Gets the resource ID of the default avatar icon at |index|.
int GetDefaultAvatarIconResourceIDAtIndex(size_t index);
#if BUILDFLAG(IS_WIN)
// Gets the resource ID of the 2x sized version of the old profile avatar icon
// at |index|.
int GetOldDefaultAvatar2xIconResourceIDAtIndex(size_t index);
#endif // BUILDFLAG(IS_WIN)
// Gets the resource filename of the default avatar icon at |index|.
const char* GetDefaultAvatarIconFileNameAtIndex(size_t index);
// Gets the resource ID of the default avatar label at |index|.
int GetDefaultAvatarLabelResourceIDAtIndex(size_t index);
// Gets the full path of the high res avatar icon at |index|.
base::FilePath GetPathOfHighResAvatarAtIndex(size_t index);
// Returns a URL for the default avatar icon with specified index.
std::string GetDefaultAvatarIconUrl(size_t index);
// Checks if |index| is a valid avatar icon index
bool IsDefaultAvatarIconIndex(size_t index);
// Checks if the given URL points to one of the default avatar icons. If it
// is, returns true and its index through |icon_index|. If not, returns false.
bool IsDefaultAvatarIconUrl(const std::string& icon_url, size_t *icon_index);
// Returns dictionary containing the avatar icon info in the format expected by
// the WebUI component 'cr-profile-avatar-selector'.
base::Value::Dict GetAvatarIconAndLabelDict(const std::string& url,
const std::u16string& label,
size_t index,
bool selected,
bool is_gaia_avatar);
// Returns dictionary containing the default generic avatar icon, label, index
// and selected state.
base::Value::Dict GetDefaultProfileAvatarIconAndLabel(SkColor fill_color,
SkColor stroke_color,
bool selected);
// Returns a list of dictionaries containing modern profile avatar icons as
// well as avatar labels used for accessibility purposes. The list is ordered
// according to the avatars' default order. If |selected_avatar_idx| is one of
// the available indices, the corresponding avatar is marked as selected.
base::Value::List GetCustomProfileAvatarIconsAndLabels(
size_t selected_avatar_idx = SIZE_MAX);
// This method tries to find a random avatar index that is not in
// |used_icon_indices|. If there is no such index, a random index is returned.
size_t GetRandomAvatarIconIndex(
const std::unordered_set<size_t>& used_icon_indices);
#if !BUILDFLAG(IS_ANDROID)
// Get all the available profile icons to choose from for a specific profile
// with |profile_path|.
base::Value::List GetIconsAndLabelsForProfileAvatarSelector(
const base::FilePath& profile_path);
#endif // !BUILDFLAG(IS_ANDROID)
// Set the default profile avatar icon index to |avatar_icon_index| for a
// specific |profile|.
void SetDefaultProfileAvatarIndex(Profile* profile, size_t avatar_icon_index);
#if BUILDFLAG(IS_WIN)
// Get the 2x avatar image for a ProfileAttributesEntry.
SkBitmap GetWin2xAvatarImage(ProfileAttributesEntry* entry);
// Returns a bitmap with a couple of columns shaved off so it is more square,
// so that when resized to a square aspect ratio it looks pretty.
SkBitmap GetWin2xAvatarIconAsSquare(const SkBitmap& source_bitmap);
// Badges |app_icon_bitmap| with |avatar_bitmap| at the bottom right corner and
// returns the resulting SkBitmap.
SkBitmap GetBadgedWinIconBitmapForAvatar(const SkBitmap& app_icon_bitmap,
const SkBitmap& avatar_bitmap);
#endif // BUILDFLAG(IS_WIN)
} // namespace profiles
#endif // CHROME_BROWSER_PROFILES_PROFILE_AVATAR_ICON_UTIL_H_