blob: 1d8ff968285fe4b7aa6c4ecf324893f8025ee5b6 [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// 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_SYNC_DICE_BUBBLE_SYNC_PROMO_VIEW_H_
#define CHROME_BROWSER_UI_VIEWS_SYNC_DICE_BUBBLE_SYNC_PROMO_VIEW_H_
#include <memory>
#include <vector>
#include "base/macros.h"
#include "chrome/browser/ui/sync/bubble_sync_promo_delegate.h"
#include "chrome/browser/ui/views/profiles/dice_accounts_menu.h"
#include "components/signin/core/browser/signin_metrics.h"
#include "ui/views/controls/button/button.h"
#include "ui/views/view.h"
class Profile;
class DiceSigninButtonView;
// A personalized sync promo used when Desktop Identity Consistency is enabled.
// Its display a message informing the user the benefits of enabling sync and
// a button that allows the user to enable sync.
// The button has 2 different displays:
// * If Chrome has no accounts, then the promo button is a MD button allowing
// the user to sign in to Chrome.
// * If Chrome has at least one account, then the promo button is personalized
// with the user full name and avatar icon and allows the user to enable sync.
class DiceBubbleSyncPromoView : public views::View,
public views::ButtonListener {
public:
// Creates a personalized sync promo view.
// |delegate| is not owned by DiceBubbleSyncPromoView.
// The promo message is set to |no_accounts_promo_message_resource_id| when
// Chrome has no accounts. If no value is given, then no message is shown.
// The promo message is set to |accounts_promo_message_resource_id| when
// Chrome has at least one account.
// If |signin_button_prominent| is false and a non-personalized signin button
// is shown, the button is set to non-prominent. Otherwise the button remains
// prominent.
// The promo message is set in a font given by |text_style|. It is defaulted
// to a primary style font.
DiceBubbleSyncPromoView(Profile* profile,
BubbleSyncPromoDelegate* delegate,
signin_metrics::AccessPoint access_point,
int no_accounts_promo_message_resource_id = 0,
int accounts_promo_message_resource_id = 0,
bool signin_button_prominent = true,
int text_style = views::style::STYLE_PRIMARY);
~DiceBubbleSyncPromoView() override;
// views::ButtonListener:
void ButtonPressed(views::Button* sender, const ui::Event& event) override;
// Returns the sign-in button.
views::View* GetSigninButtonForTesting();
private:
// Used to enable sync in the DiceAccountsMenu and when |signin_button_| is
// pressed.
void EnableSync(bool is_default_promo_account,
const base::Optional<AccountInfo>& account);
// views::View:
const char* GetClassName() const override;
// Delegate, to handle clicks on the sign-in buttons.
BubbleSyncPromoDelegate* delegate_;
DiceSigninButtonView* signin_button_view_ = nullptr;
// Accounts submenu that is shown when |signin_button_->drop_down_arrow()| is
// pressed.
std::unique_ptr<DiceAccountsMenu> dice_accounts_menu_;
std::vector<AccountInfo> accounts_for_submenu_;
std::vector<gfx::Image> images_for_submenu_;
DISALLOW_COPY_AND_ASSIGN(DiceBubbleSyncPromoView);
};
#endif // CHROME_BROWSER_UI_VIEWS_SYNC_DICE_BUBBLE_SYNC_PROMO_VIEW_H_