mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00: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
|
||||
#[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 {
|
||||
|
|
|
@ -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 {
|
||||
|
@ -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(..) |
|
||||
|
|
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue