Skip to content

Commit

Permalink
extended HostTrait with on_media_session_set_position_state
Browse files Browse the repository at this point in the history
  • Loading branch information
shnmorimoto committed Dec 3, 2019
1 parent e268193 commit 4d215c9
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 4 deletions.
6 changes: 3 additions & 3 deletions components/embedder_traits/lib.rs
Expand Up @@ -243,9 +243,9 @@ pub enum MediaSessionPlaybackState {
/// https://w3c.github.io/mediasession/#dictdef-mediapositionstate
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct MediaPositionState {
pub duration: Option<f64>,
pub playback_rate: Option<f64>,
pub position: Option<f64>,
pub duration: f64,
pub playback_rate: f64,
pub position: f64,
}

impl MediaPositionState {
Expand Down
12 changes: 11 additions & 1 deletion ports/libsimpleservo/api/src/lib.rs
Expand Up @@ -132,8 +132,10 @@ pub trait HostTrait {
fn set_clipboard_contents(&self, contents: String);
/// Called when we get the media session metadata/
fn on_media_session_metadata(&self, title: String, artist: String, album: String);
/// Called when the media sessoin playback state changes.
/// Called when the media session playback state changes.
fn on_media_session_playback_state_change(&self, state: i32);
/// Called when the media session position state is set.
fn on_media_session_set_position_state(&self, duration: f64, position: f64, playback_rate: f64);
}

pub struct ServoGlue {
Expand Down Expand Up @@ -594,6 +596,14 @@ impl ServoGlue {
.callbacks
.host_callbacks
.on_media_session_playback_state_change(state as i32),
MediaSessionEvent::SetPositionState(position_state) => self
.callbacks
.host_callbacks
.on_media_session_set_position_state(
position_state.duration,
position_state.position,
position_state.playback_rate,
),
};
},
EmbedderMsg::Status(..) |
Expand Down
15 changes: 15 additions & 0 deletions ports/libsimpleservo/capi/src/lib.rs
Expand Up @@ -219,6 +219,8 @@ pub struct CHostCallbacks {
pub on_media_session_metadata:
extern "C" fn(title: *const c_char, album: *const c_char, artist: *const c_char),
pub on_media_session_playback_state_change: extern "C" fn(state: i32),
pub on_media_session_set_position_state:
extern "C" fn(duration: f64, position: f64, playback_rate: f64),
}

/// Servo options
Expand Down Expand Up @@ -727,4 +729,17 @@ impl HostTrait for HostCallbacks {
debug!("on_media_session_playback_state_change {:?}", state);
(self.0.on_media_session_playback_state_change)(state);
}

fn on_media_session_set_position_state(
&self,
duration: f64,
position: f64,
playback_rate: f64,
) {
debug!(
"on_media_session_set_position_state ({:?} {:?} {:?})",
duration, position, playback_rate
);
(self.0.on_media_session_set_position_state)(duration, position, playback_rate);
}
}
24 changes: 24 additions & 0 deletions ports/libsimpleservo/jniapi/src/lib.rs
Expand Up @@ -560,6 +560,30 @@ impl HostTrait for HostCallbacks {
)
.unwrap();
}

fn on_media_session_set_position_state(
&self,
duration: f64,
position: f64,
playback_rate: f64,
) {
info!(
"on_media_session_playback_state_change ({:?}, {:?}, {:?})",
duration, position, playback_rate
);
let env = self.jvm.get_env().unwrap();
let duration = JValue::Float(duration as jfloat);
let position = JValue::Float(position as jfloat);
let playback_rate = JValue::Float(playback_rate as jfloat);

env.call_method(
self.callbacks.as_obj(),
"onMediaSessionSetPositionState",
"(FFF)V",
&[duration, position, playback_rate],
)
.unwrap();
}
}

fn initialize_android_glue(env: &JNIEnv, activity: JObject) {
Expand Down

0 comments on commit 4d215c9

Please sign in to comment.