Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement mediasession set positon state #24885

Merged

extended HostTrait with on_media_session_set_position_state

  • Loading branch information
shnmorimoto committed Dec 3, 2019
commit 4d215c95573f486f628281d3bb5fc40477446a1d
@@ -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) {
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.