// Copyright 2016 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.

#include "ui/gfx/animation/animation.h"

#import <Cocoa/Cocoa.h>

#include "base/mac/mac_util.h"
#include "base/task/current_thread.h"

// Only available since 10.12.
@interface NSWorkspace (AvailableSinceSierra)
@property(readonly) BOOL accessibilityDisplayShouldReduceMotion;
@end

namespace gfx {

// static
bool Animation::ShouldRenderRichAnimationImpl() {
  return !PrefersReducedMotion();
}

// static
bool Animation::ScrollAnimationsEnabledBySystem() {
  // Because of sandboxing, OS settings should only be queried from the browser
  // process.
  DCHECK(base::CurrentUIThread::IsSet() || base::CurrentIOThread::IsSet());

  bool enabled = false;
  id value = nil;
  value = [[NSUserDefaults standardUserDefaults]
      objectForKey:@"NSScrollAnimationEnabled"];
  if (value)
    enabled = [value boolValue];
  return enabled;
}

// static
void Animation::UpdatePrefersReducedMotion() {
  // prefers_reduced_motion_ should only be modified on the UI thread.
  // TODO(crbug.com/927163): DCHECK this assertion once tests are well-behaved.

  // We default to assuming that animations are enabled, to avoid impacting the
  // experience for users on pre-10.12 systems.
  prefers_reduced_motion_ = false;
  SEL sel = @selector(accessibilityDisplayShouldReduceMotion);
  if ([[NSWorkspace sharedWorkspace] respondsToSelector:sel]) {
    prefers_reduced_motion_ =
        [[NSWorkspace sharedWorkspace] accessibilityDisplayShouldReduceMotion];
  }
}

} // namespace gfx
