blob: 7bb97455baded098bc2b227afc1fb12660c6641f [file] [log] [blame]
// Copyright 2019 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/base/now_playing/remote_command_center_delegate_ns.h"
#import <MediaPlayer/MediaPlayer.h>
#include "ui/base/now_playing/remote_command_center_delegate_impl.h"
API_AVAILABLE(macos(10.12.2))
@interface RemoteCommandCenterDelegateNS ()
- (void)setCommand:(MPRemoteCommand*)command enabled:(bool)enabled;
- (void)enableCommand:(MPRemoteCommand*)command;
- (void)disableCommand:(MPRemoteCommand*)command;
@end
@implementation RemoteCommandCenterDelegateNS
- (instancetype)initWithDelegate:
(now_playing::RemoteCommandCenterDelegateImpl*)delegate {
if (self = [super init]) {
delegate_ = delegate;
// Initialize all commands as disabled.
MPRemoteCommandCenter* commandCenter =
[MPRemoteCommandCenter sharedCommandCenter];
commandCenter.pauseCommand.enabled = NO;
commandCenter.playCommand.enabled = NO;
commandCenter.stopCommand.enabled = NO;
commandCenter.togglePlayPauseCommand.enabled = NO;
commandCenter.nextTrackCommand.enabled = NO;
commandCenter.previousTrackCommand.enabled = NO;
commandCenter.changeRepeatModeCommand.enabled = NO;
commandCenter.changeShuffleModeCommand.enabled = NO;
commandCenter.changePlaybackRateCommand.enabled = NO;
commandCenter.seekBackwardCommand.enabled = NO;
commandCenter.seekForwardCommand.enabled = NO;
commandCenter.skipBackwardCommand.enabled = NO;
commandCenter.skipForwardCommand.enabled = NO;
commandCenter.changePlaybackPositionCommand.enabled = NO;
commandCenter.ratingCommand.enabled = NO;
commandCenter.likeCommand.enabled = NO;
commandCenter.dislikeCommand.enabled = NO;
commandCenter.bookmarkCommand.enabled = NO;
commandCenter.enableLanguageOptionCommand.enabled = NO;
commandCenter.disableLanguageOptionCommand.enabled = NO;
}
return self;
}
- (MPRemoteCommandHandlerStatus)onCommand:(MPRemoteCommandEvent*)event {
MPRemoteCommandCenter* commandCenter =
[MPRemoteCommandCenter sharedCommandCenter];
if (event.command == commandCenter.pauseCommand) {
delegate_->OnPause();
} else if (event.command == commandCenter.playCommand) {
delegate_->OnPlay();
} else if (event.command == commandCenter.stopCommand) {
delegate_->OnStop();
} else if (event.command == commandCenter.togglePlayPauseCommand) {
delegate_->OnPlayPause();
} else if (event.command == commandCenter.nextTrackCommand) {
delegate_->OnNext();
} else if (event.command == commandCenter.previousTrackCommand) {
delegate_->OnPrevious();
}
return MPRemoteCommandHandlerStatusSuccess;
}
- (void)setCanPlay:(bool)can_play {
MPRemoteCommandCenter* commandCenter =
[MPRemoteCommandCenter sharedCommandCenter];
[self setCommand:commandCenter.playCommand enabled:can_play];
}
- (void)setCanPause:(bool)can_pause {
MPRemoteCommandCenter* commandCenter =
[MPRemoteCommandCenter sharedCommandCenter];
[self setCommand:commandCenter.pauseCommand enabled:can_pause];
}
- (void)setCanStop:(bool)can_stop {
MPRemoteCommandCenter* commandCenter =
[MPRemoteCommandCenter sharedCommandCenter];
[self setCommand:commandCenter.stopCommand enabled:can_stop];
}
- (void)setCanPlayPause:(bool)can_playpause {
MPRemoteCommandCenter* commandCenter =
[MPRemoteCommandCenter sharedCommandCenter];
[self setCommand:commandCenter.togglePlayPauseCommand enabled:can_playpause];
}
- (void)setCanGoNextTrack:(bool)can_go_next_track {
MPRemoteCommandCenter* commandCenter =
[MPRemoteCommandCenter sharedCommandCenter];
[self setCommand:commandCenter.nextTrackCommand enabled:can_go_next_track];
}
- (void)setCanGoPreviousTrack:(bool)can_go_prev_track {
MPRemoteCommandCenter* commandCenter =
[MPRemoteCommandCenter sharedCommandCenter];
[self setCommand:commandCenter.previousTrackCommand
enabled:can_go_prev_track];
}
- (void)setCommand:(MPRemoteCommand*)command enabled:(bool)enabled {
if (enabled) {
[self enableCommand:command];
} else {
[self disableCommand:command];
}
}
- (void)enableCommand:(MPRemoteCommand*)command {
command.enabled = YES;
[command addTarget:self action:@selector(onCommand:)];
}
- (void)disableCommand:(MPRemoteCommand*)command {
command.enabled = NO;
[command removeTarget:self];
}
@end