chromium/ios/chrome/browser/autofill/ui_bundled/branding/branding_mediator.mm

// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#import "ios/chrome/browser/autofill/ui_bundled/branding/branding_mediator.h"

#import "base/memory/raw_ptr.h"
#import "base/metrics/user_metrics.h"
#import "components/prefs/pref_service.h"
#import "ios/chrome/browser/shared/model/prefs/pref_names.h"
#import "ios/chrome/browser/autofill/ui_bundled/branding/branding_consumer.h"

@implementation BrandingMediator {
  // Weak pointer to the local state that stores the number of times the
  // branding has shown and animated.
  raw_ptr<PrefService> _localState;
}

- (instancetype)initWithLocalState:(PrefService*)localState {
  self = [super init];
  if (self) {
    _localState = localState;
  }
  return self;
}

- (void)setConsumer:(id<BrandingConsumer>)consumer {
  _consumer = consumer;
  // Initial set up of the consumer.
  _consumer.visible =
      _localState->GetInteger(prefs::kAutofillBrandingIconDisplayCount) < 2;
  _consumer.shouldPerformPopAnimation =
      _localState->GetInteger(
          prefs::kAutofillBrandingIconAnimationRemainingCount) > 0;
}

- (void)disconnect {
  _localState = nil;
}

#pragma mark - BrandingViewControllerDelegate

- (void)brandingIconDidPress {
  base::RecordAction(base::UserMetricsAction("Autofill_BrandingTapped"));
}

- (void)brandingIconDidShow {
  int displayCount =
      _localState->GetInteger(prefs::kAutofillBrandingIconDisplayCount) + 1;
  _localState->SetInteger(prefs::kAutofillBrandingIconDisplayCount,
                          displayCount);
  self.consumer.visible = displayCount < 2;
}

- (void)brandingIconDidPerformPopAnimation {
  int popAnimationRemainingCount = _localState->GetInteger(
      prefs::kAutofillBrandingIconAnimationRemainingCount);
  popAnimationRemainingCount -= 1;
  self.consumer.shouldPerformPopAnimation = popAnimationRemainingCount > 0;
  _localState->SetInteger(prefs::kAutofillBrandingIconAnimationRemainingCount,
                          popAnimationRemainingCount);
}

@end