File: remote_command_center_delegate_cocoa.mm

package info (click to toggle)
chromium 120.0.6099.224-1~deb11u1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 6,112,112 kB
  • sloc: cpp: 32,907,025; ansic: 8,148,123; javascript: 3,679,536; python: 2,031,248; asm: 959,718; java: 804,675; xml: 617,256; sh: 111,417; objc: 100,835; perl: 88,443; cs: 53,032; makefile: 29,579; fortran: 24,137; php: 21,162; tcl: 21,147; sql: 20,809; ruby: 17,735; pascal: 12,864; yacc: 8,045; lisp: 3,388; lex: 1,323; ada: 727; awk: 329; jsp: 267; csh: 117; exp: 43; sed: 37
file content (144 lines) | stat: -rw-r--r-- 5,134 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "components/system_media_controls/mac/remote_command_center_delegate_cocoa.h"

#import <MediaPlayer/MediaPlayer.h>

#include "base/memory/raw_ptr.h"
#include "base/time/time.h"
#include "components/system_media_controls/mac/remote_command_center_delegate.h"

@interface RemoteCommandCenterDelegateCocoa ()

- (void)setCommand:(MPRemoteCommand*)command enabled:(bool)enabled;
- (void)enableCommand:(MPRemoteCommand*)command;
- (void)disableCommand:(MPRemoteCommand*)command;

@end

@implementation RemoteCommandCenterDelegateCocoa {
  raw_ptr<system_media_controls::internal::RemoteCommandCenterDelegate>
      _delegate;
}

- (instancetype)initWithDelegate:
    (system_media_controls::internal::RemoteCommandCenterDelegate*)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();
  } else if (event.command == commandCenter.changePlaybackPositionCommand) {
    MPChangePlaybackPositionCommandEvent* changePlaybackPositionCommandEvent =
        (MPChangePlaybackPositionCommandEvent*)event;
    _delegate->OnSeekTo(
        base::Seconds(changePlaybackPositionCommandEvent.positionTime));
  }
  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)setCanSeekTo:(bool)can_seek_to {
  MPRemoteCommandCenter* commandCenter =
      [MPRemoteCommandCenter sharedCommandCenter];
  [self setCommand:commandCenter.changePlaybackPositionCommand
           enabled:can_seek_to];
}

- (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