mirror of
https://github.com/servo/servo.git
synced 2025-08-03 20:50:07 +01:00
extended HostTrait with on_media_session_set_position_state
This commit is contained in:
parent
e268193b8d
commit
4d215c9557
4 changed files with 53 additions and 4 deletions
|
@ -243,9 +243,9 @@ pub enum MediaSessionPlaybackState {
|
||||||
/// https://w3c.github.io/mediasession/#dictdef-mediapositionstate
|
/// https://w3c.github.io/mediasession/#dictdef-mediapositionstate
|
||||||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||||||
pub struct MediaPositionState {
|
pub struct MediaPositionState {
|
||||||
pub duration: Option<f64>,
|
pub duration: f64,
|
||||||
pub playback_rate: Option<f64>,
|
pub playback_rate: f64,
|
||||||
pub position: Option<f64>,
|
pub position: f64,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl MediaPositionState {
|
impl MediaPositionState {
|
||||||
|
|
|
@ -132,8 +132,10 @@ pub trait HostTrait {
|
||||||
fn set_clipboard_contents(&self, contents: String);
|
fn set_clipboard_contents(&self, contents: String);
|
||||||
/// Called when we get the media session metadata/
|
/// Called when we get the media session metadata/
|
||||||
fn on_media_session_metadata(&self, title: String, artist: String, album: String);
|
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);
|
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 {
|
pub struct ServoGlue {
|
||||||
|
@ -594,6 +596,14 @@ impl ServoGlue {
|
||||||
.callbacks
|
.callbacks
|
||||||
.host_callbacks
|
.host_callbacks
|
||||||
.on_media_session_playback_state_change(state as i32),
|
.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(..) |
|
EmbedderMsg::Status(..) |
|
||||||
|
|
|
@ -219,6 +219,8 @@ pub struct CHostCallbacks {
|
||||||
pub on_media_session_metadata:
|
pub on_media_session_metadata:
|
||||||
extern "C" fn(title: *const c_char, album: *const c_char, artist: *const c_char),
|
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_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
|
/// Servo options
|
||||||
|
@ -727,4 +729,17 @@ impl HostTrait for HostCallbacks {
|
||||||
debug!("on_media_session_playback_state_change {:?}", state);
|
debug!("on_media_session_playback_state_change {:?}", state);
|
||||||
(self.0.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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -560,6 +560,30 @@ impl HostTrait for HostCallbacks {
|
||||||
)
|
)
|
||||||
.unwrap();
|
.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) {
|
fn initialize_android_glue(env: &JNIEnv, activity: JObject) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue