/*
MediaPlayerProfile.java
Copyright (c) 2014 NTT DOCOMO,INC.
Released under the MIT license
http://opensource.org/licenses/mit-license.php
*/
package org.deviceconnect.android.profile;
import android.content.Intent;
import android.os.Bundle;
import org.deviceconnect.profile.MediaPlayerProfileConstants;
/**
* MediaPlayer プロファイル.
*
* <p>
* スマートデバイス上のメディアの再生状態の変更要求を通知するAPI.<br>
* メディア操作を提供するデバイスプラグインは当クラスを継承し、対応APIを実装すること。 <br>
* </p>
*
* @deprecated
* swagger定義ファイルで定数を管理することになったので、このクラスは使用しないこととする。
* プロファイルを実装する際は本クラスではなく、{@link DConnectProfile} クラスを継承すること。
*
* @author NTT DOCOMO, INC.
*/
public class MediaPlayerProfile extends DConnectProfile implements MediaPlayerProfileConstants {
@Override
public final String getProfileName() {
return PROFILE_NAME;
}
// ------------------------------------
// リクエストゲッターメソッド群
// ------------------------------------
// Setter
/**
* レスポンスにメディア数を設定する.
*
* @param response レスポンスデータ
* @param count メディア数
*/
public static final void setCount(final Intent response, final int count) {
response.putExtra(PARAM_COUNT, count);
}
/**
* レスポンスにメディアを設定する.
*
* @param response レスポンスデータ
* @param media メディア
*/
public static final void setMedia(final Intent response, final Bundle[] media) {
response.putExtra(PARAM_MEDIA, media);
}
/**
* レスポンスにメディアIDを設定する.
*
* @param response レスポンスデータ
* @param mediaId メディアID
*/
public static final void setMediaId(final Intent response, final String mediaId) {
response.putExtra(PARAM_MEDIA_ID, mediaId);
}
/**
* 再生情報にメディアIDを設定する.
*
* @param playStatus 再生情報
* @param mediaId メディアID
*/
public static final void setMediaId(final Bundle playStatus, final String mediaId) {
playStatus.putString(PARAM_MEDIA_ID, mediaId);
}
/**
* メッセージにメディアプレイヤー情報を設定する.
*
* @param message メッセージ
* @param mediaPlayer メディアプレイヤー
*/
public static final void setMediaPlayer(final Intent message, final Bundle mediaPlayer) {
message.putExtra(PARAM_MEDIA_PLAYER, mediaPlayer);
}
/**
* レスポンスにコンテンツの再生状態を設定する.
*
* @param response レスポンスデータ
* @param playStatus コンテンツの再生状態
*/
public static final void setStatus(final Intent response, final PlayStatus playStatus) {
response.putExtra(PARAM_STATUS, playStatus.getValue());
}
/**
* レスポンスに再生状態を設定する.
*
* @param response レスポンスデータ
* @param status 再生状態
*/
public static final void setStatus(final Intent response, final Status status) {
response.putExtra(PARAM_STATUS, status.getValue());
}
/**
* メディア情報に再生状態を設定する.
*
* @param media メディア情報
* @param status 再生状態
*/
public static final void setStatus(final Bundle media, final Status status) {
setStatus(media, status.getValue());
}
/**
* メディア情報に再生状態を設定する.
*
* @param media メディア情報
* @param status 再生状態
*/
public static final void setStatus(final Bundle media, final String status) {
media.putString(PARAM_STATUS, status);
}
/**
* レスポンスに再生位置を設定する.
*
* @param response レスポンスデータ
* @param pos 再生位置
*/
public static final void setPos(final Intent response, final int pos) {
if (pos < 0) {
throw new IllegalArgumentException("pos is negative.");
}
response.putExtra(PARAM_POS, pos);
}
/**
* 再生情報に再生位置を設定する.
*
* @param playStatus 再生情報
* @param pos 再生位置
*/
public static final void setPos(final Bundle playStatus, final int pos) {
if (pos < 0) {
throw new IllegalArgumentException("pos is negative.");
}
playStatus.putInt(PARAM_POS, pos);
}
/**
* レスポンスにMIMEタイプを設定する.
*
* @param response レスポンスデータ
* @param mimeType MIMEタイプ
*/
public static final void setMIMEType(final Intent response, final String mimeType) {
response.putExtra(PARAM_MIME_TYPE, mimeType);
}
/**
* メディア情報にMIMEタイプを設定する.
*
* @param media メディア情報
* @param mimeType MIMEタイプ
*/
public static final void setMIMEType(final Bundle media, final String mimeType) {
media.putString(PARAM_MIME_TYPE, mimeType);
}
/**
* レスポンスにタイトルを設定する.
*
* @param response レスポンスデータ
* @param title タイトル
*/
public static final void setTitle(final Intent response, final String title) {
response.putExtra(PARAM_TITLE, title);
}
/**
* メディア情報にタイトルを設定する.
*
* @param media メディア情報
* @param title タイトル
*/
public static final void setTitle(final Bundle media, final String title) {
media.putString(PARAM_TITLE, title);
}
/**
* レスポンスにタイプ名を設定する.
*
* @param response レスポンスデータ
* @param type タイプ名
*/
public static final void setType(final Intent response, final String type) {
response.putExtra(PARAM_TYPE, type);
}
/**
* メディア情報にタイプ名を設定する.
*
* @param media メディア情報
* @param type タイプ名
*/
public static final void setType(final Bundle media, final String type) {
media.putString(PARAM_TYPE, type);
}
/**
* レスポンスに言語を設定する.
*
* @param response レスポンスデータ
* @param language 言語
*/
public static final void setLanguage(final Intent response, final String language) {
response.putExtra(PARAM_LANGUAGE, language);
}
/**
* メディア情報に言語を設定する.
*
* @param media メディア情報
* @param language 言語
*/
public static final void setLanguage(final Bundle media, final String language) {
media.putString(PARAM_LANGUAGE, language);
}
/**
* レスポンスに画像へのURIを設定する.
*
* @param response レスポンスデータ
* @param uri 画像へのURI
*/
public static final void setImageUri(final Intent response, final String uri) {
response.putExtra(PARAM_IMAGE_URI, uri);
}
/**
* メディア情報に画像へのURIを設定する.
*
* @param media メディア情報
* @param uri 画像へのURI
*/
public static final void setImageUri(final Bundle media, final String uri) {
media.putString(PARAM_IMAGE_URI, uri);
}
/**
* レスポンスに説明文を設定する.
*
* @param response レスポンスデータ
* @param description 説明文
*/
public static final void setDescription(final Intent response, final String description) {
response.putExtra(PARAM_DESCRIPTION, description);
}
/**
* メディア情報に説明文を設定する.
*
* @param media メディア情報
* @param description 説明文
*/
public static final void setDescription(final Bundle media, final String description) {
media.putString(PARAM_DESCRIPTION, description);
}
/**
* レスポンスに曲の長さを設定する.
*
* @param response レスポンスデータ
* @param duration 曲の長さ
*/
public static final void setDuration(final Intent response, final int duration) {
if (duration < 0) {
throw new IllegalArgumentException("duration is invalid.");
}
response.putExtra(PARAM_DURATION, duration);
}
/**
* メディア情報に曲の長さを設定する.
*
* @param media メディア情報
* @param duration 曲の長さ
*/
public static final void setDuration(final Bundle media, final int duration) {
if (duration < 0) {
throw new IllegalArgumentException("duration is invalid.");
}
media.putInt(PARAM_DURATION, duration);
}
/**
* レスポンスに制作者情報一覧を設定する.
*
* @param response レスポンスデータ
* @param creators 制作者情報一覧
*/
public static final void setCreators(final Intent response, final Bundle[] creators) {
response.putExtra(PARAM_CREATORS, creators);
}
/**
* メディア情報に制作者情報一覧を設定する.
*
* @param media メディア情報
* @param creators 制作者情報一覧
*/
public static final void setCreators(final Bundle media, final Bundle[] creators) {
media.putParcelableArray(PARAM_CREATORS, creators);
}
/**
* 制作者情報に制作者名を設定する.
*
* @param bundle 制作者情報
* @param creator 制作者名
*/
public static final void setCreator(final Bundle bundle, final String creator) {
bundle.putString(PARAM_CREATOR, creator);
}
/**
* 制作者情報に役割を設定する.
*
* @param bundle 制作者情報
* @param role 役割
*/
public static final void setRole(final Bundle bundle, final String role) {
bundle.putString(PARAM_ROLE, role);
}
/**
* レスポンスデータにキーワード一覧を設定する.
*
* @param response レスポンスデータ
* @param keywords キーワード一覧
*/
public static final void setKeywords(final Intent response, final String[] keywords) {
response.putExtra(PARAM_KEYWORDS, keywords);
}
/**
* メディア情報にキーワード一覧を設定する.
*
* @param media メディア情報
* @param keywords キーワード一覧
*/
public static final void setKeywords(final Bundle media, final String[] keywords) {
media.putStringArray(PARAM_KEYWORDS, keywords);
}
/**
* レスポンスデータにジャンル一覧を設定する.
*
* @param response レスポンスデータ
* @param genres ジャンル一覧
*/
public static final void setGenres(final Intent response, final String[] genres) {
response.putExtra(PARAM_GENRES, genres);
}
/**
* メディア情報にジャンル一覧を設定する.
*
* @param media メディア情報
* @param genres ジャンル一覧
*/
public static final void setGenres(final Bundle media, final String[] genres) {
media.putStringArray(PARAM_GENRES, genres);
}
/**
* レスポンスにボリュームを設定する.
*
* @param response レスポンスデータ
* @param volume ボリューム(0.0 〜 1.0)
*/
public static final void setVolume(final Intent response, final double volume) {
if (volume < 0.0 || volume > 1.0) {
throw new IllegalArgumentException("volume is invalid. volume=" + volume);
}
response.putExtra(PARAM_VOLUME, volume);
}
/**
* メディアプレイヤー情報にボリュームを設定する.
*
* @param mediaPlayer メディアプレイヤー
* @param volume ボリューム(0.0 〜 1.0)
*/
public static final void setVolume(final Bundle mediaPlayer, final double volume) {
if (volume < 0.0 || volume > 1.0) {
throw new IllegalArgumentException("volume is invalid. volume=" + volume);
}
mediaPlayer.putDouble(PARAM_VOLUME, volume);
}
/**
* レスポンスにボリュームを設定する.
*
* @param response レスポンスデータ
* @param mute ミュート有りはtrue、ミュート無しはfalse
*/
public static final void setMute(final Intent response, final boolean mute) {
response.putExtra(PARAM_MUTE, mute);
}
// Getter
/**
* リクエストからstatusを取得する.
* <p>
* 以下の属性以外の値が設定されていた場合にもnullを返却する。
* <ul>
* <li>play</li>
* <li>stop</li>
* <li>resume</li>
* </ul>
* </p>
* @param request リクエストデータ
* @return status。無い場合はnullを返す。
*/
public static final PlayStatus getPlayStatus(final Intent request) {
String value = request.getStringExtra(PARAM_STATUS);
return PlayStatus.getInstance(value);
}
/**
* リクエストからメディアIDを取得する.
*
* @param request リクエストデータ
* @return メディアID。無い場合はnullを返す。
*/
public static final String getMediaId(final Intent request) {
return request.getStringExtra(PARAM_MEDIA_ID);
}
/**
* リクエストから再生位置を取得する.
*
* @param request リクエストデータ
* @return 再生位置。無い場合は0を返す。
*/
public static Integer getPos(final Intent request) {
return parseInteger(request, PARAM_POS);
}
/**
* リクエストから再生状態を取得する.
*
* @param request リクエストデータ
* @return 再生状態。無い場合はnullを返す。
*/
public static final Status getStatus(final Intent request) {
String statusStr = request.getStringExtra(PARAM_STATUS);
return Status.getInstance(statusStr);
}
/**
* リクエストからボリュームを取得する.
*
* @param request リクエストデータ
* @return ボリューム。無い場合は-1を返す。
*/
public static Double getVolume(final Intent request) {
return parseDouble(request, PARAM_VOLUME);
}
/**
* リクエストからクエリーを取得する.
*
*
* @param request リクエストデータ
* @return クエリー。無い場合はnullを返す。
*/
public static final String getQuery(final Intent request) {
String query = request.getStringExtra(PARAM_QUERY);
return query;
}
/**
* リクエストからマイムタイプを取得する.
* @param request リクエストデータ
* @return マイムタイプ。無い場合はnullを返す。
*/
public static final String getMIMEType(final Intent request) {
String mimeType = request.getStringExtra(PARAM_MIME_TYPE);
return mimeType;
}
/**
* リクエストからオーダーを取得する.
*
* @param request リクエストデータ
* @return オーダー。無い場合はnullを返す。
*/
public static final String[] getOrder(final Intent request) {
String order = request.getStringExtra(PARAM_ORDER);
if (order == null) {
return null;
}
return order.split(",");
}
/**
* リクエストからオフセットを取得する.
*
* @param request リクエストデータ
* @return オフセット。無い場合には0を返す。
*/
public static Integer getOffset(final Intent request) {
return parseInteger(request, PARAM_OFFSET);
}
/**
* リクエストからリミットを取得する.
*
* @param request リクエストデータ
* @return リミット。無い場合には0を返す。
*/
public static Integer getLimit(final Intent request) {
return parseInteger(request, PARAM_LIMIT);
}
}