Search in sources :

Example 6 with MediaTrack

use of com.google.android.gms.cast.MediaTrack in project Shuttle by timusus.

the class Utils method bundleToMediaInfo.

/**
 * Builds and returns a {@link MediaInfo} that was wrapped in a {@link Bundle} by
 * <code>mediaInfoToBundle</code>. It is assumed that the type of the {@link MediaInfo} is
 * {@code MediaMetaData.MEDIA_TYPE_MOVIE}
 *
 * @see <code>mediaInfoToBundle()</code>
 */
public static MediaInfo bundleToMediaInfo(Bundle wrapper) {
    if (wrapper == null) {
        return null;
    }
    MediaMetadata metaData = new MediaMetadata(wrapper.getInt(KEY_MEDIA_TYPE));
    metaData.putString(MediaMetadata.KEY_SUBTITLE, wrapper.getString(MediaMetadata.KEY_SUBTITLE));
    metaData.putString(MediaMetadata.KEY_TITLE, wrapper.getString(MediaMetadata.KEY_TITLE));
    metaData.putString(MediaMetadata.KEY_STUDIO, wrapper.getString(MediaMetadata.KEY_STUDIO));
    metaData.putString(MediaMetadata.KEY_ALBUM_ARTIST, wrapper.getString(MediaMetadata.KEY_ALBUM_ARTIST));
    metaData.putString(MediaMetadata.KEY_ALBUM_TITLE, wrapper.getString(MediaMetadata.KEY_ALBUM_TITLE));
    metaData.putString(MediaMetadata.KEY_COMPOSER, wrapper.getString(MediaMetadata.KEY_COMPOSER));
    metaData.putString(MediaMetadata.KEY_SERIES_TITLE, wrapper.getString(MediaMetadata.KEY_SERIES_TITLE));
    metaData.putInt(MediaMetadata.KEY_SEASON_NUMBER, wrapper.getInt(MediaMetadata.KEY_SEASON_NUMBER));
    metaData.putInt(MediaMetadata.KEY_EPISODE_NUMBER, wrapper.getInt(MediaMetadata.KEY_EPISODE_NUMBER));
    long releaseDateMillis = wrapper.getLong(MediaMetadata.KEY_RELEASE_DATE, 0);
    if (releaseDateMillis > 0) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(releaseDateMillis);
        metaData.putDate(MediaMetadata.KEY_RELEASE_DATE, calendar);
    }
    ArrayList<String> images = wrapper.getStringArrayList(KEY_IMAGES);
    if (images != null && !images.isEmpty()) {
        for (String url : images) {
            Uri uri = Uri.parse(url);
            metaData.addImage(new WebImage(uri));
        }
    }
    String customDataStr = wrapper.getString(KEY_CUSTOM_DATA);
    JSONObject customData = null;
    if (!TextUtils.isEmpty(customDataStr)) {
        try {
            customData = new JSONObject(customDataStr);
        } catch (JSONException e) {
            LOGE(TAG, "Failed to deserialize the custom data string: custom data= " + customDataStr);
        }
    }
    List<MediaTrack> mediaTracks = null;
    if (wrapper.getString(KEY_TRACKS_DATA) != null) {
        try {
            JSONArray jsonArray = new JSONArray(wrapper.getString(KEY_TRACKS_DATA));
            mediaTracks = new ArrayList<>();
            if (jsonArray.length() > 0) {
                for (int i = 0; i < jsonArray.length(); i++) {
                    JSONObject jsonObj = (JSONObject) jsonArray.get(i);
                    MediaTrack.Builder builder = new MediaTrack.Builder(jsonObj.getLong(KEY_TRACK_ID), jsonObj.getInt(KEY_TRACK_TYPE));
                    if (jsonObj.has(KEY_TRACK_NAME)) {
                        builder.setName(jsonObj.getString(KEY_TRACK_NAME));
                    }
                    if (jsonObj.has(KEY_TRACK_SUBTYPE)) {
                        builder.setSubtype(jsonObj.getInt(KEY_TRACK_SUBTYPE));
                    }
                    if (jsonObj.has(KEY_TRACK_CONTENT_ID)) {
                        builder.setContentId(jsonObj.getString(KEY_TRACK_CONTENT_ID));
                    }
                    if (jsonObj.has(KEY_TRACK_CONTENT_TYPE)) {
                        builder.setContentType(jsonObj.getString(KEY_TRACK_CONTENT_TYPE));
                    }
                    if (jsonObj.has(KEY_TRACK_LANGUAGE)) {
                        builder.setLanguage(jsonObj.getString(KEY_TRACK_LANGUAGE));
                    }
                    if (jsonObj.has(KEY_TRACKS_DATA)) {
                        builder.setCustomData(new JSONObject(jsonObj.getString(KEY_TRACKS_DATA)));
                    }
                    mediaTracks.add(builder.build());
                }
            }
        } catch (JSONException e) {
            LOGE(TAG, "Failed to build media tracks from the wrapper bundle", e);
        }
    }
    MediaInfo.Builder mediaBuilder = new MediaInfo.Builder(wrapper.getString(KEY_URL)).setStreamType(wrapper.getInt(KEY_STREAM_TYPE)).setContentType(wrapper.getString(KEY_CONTENT_TYPE)).setMetadata(metaData).setCustomData(customData).setMediaTracks(mediaTracks);
    if (wrapper.containsKey(KEY_STREAM_DURATION) && wrapper.getLong(KEY_STREAM_DURATION) >= 0) {
        mediaBuilder.setStreamDuration(wrapper.getLong(KEY_STREAM_DURATION));
    }
    return mediaBuilder.build();
}
Also used : Calendar(java.util.Calendar) JSONArray(org.json.JSONArray) WebImage(com.google.android.gms.common.images.WebImage) JSONException(org.json.JSONException) Uri(android.net.Uri) Point(android.graphics.Point) MediaTrack(com.google.android.gms.cast.MediaTrack) MediaInfo(com.google.android.gms.cast.MediaInfo) JSONObject(org.json.JSONObject) MediaMetadata(com.google.android.gms.cast.MediaMetadata)

Example 7 with MediaTrack

use of com.google.android.gms.cast.MediaTrack in project zype-android by zype.

the class TracksChooserDialog method onCreateDialog.

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    LayoutInflater inflater = getActivity().getLayoutInflater();
    View view = inflater.inflate(R.layout.custom_tracks_dialog_layout, null);
    setUpView(view);
    builder.setView(view).setPositiveButton(getString(R.string.ccl_ok), new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int id) {
            List<MediaTrack> selectedTracks = new ArrayList<>();
            MediaTrack textTrack = mTextAdapter.getSelectedTrack();
            if (textTrack.getId() != TEXT_TRACK_NONE_ID) {
                selectedTracks.add(textTrack);
            }
            MediaTrack audioVideoTrack = mAudioVideoAdapter.getSelectedTrack();
            if (audioVideoTrack != null) {
                selectedTracks.add(audioVideoTrack);
            }
            mCastManager.notifyTracksSelectedListeners(selectedTracks);
            TracksChooserDialog.this.getDialog().cancel();
        }
    }).setNegativeButton(R.string.ccl_cancel, new DialogInterface.OnClickListener() {

        public void onClick(DialogInterface dialog, int id) {
            TracksChooserDialog.this.getDialog().cancel();
        }
    }).setOnCancelListener(new DialogInterface.OnCancelListener() {

        @Override
        public void onCancel(DialogInterface dialog) {
            TracksChooserDialog.this.getDialog().cancel();
        }
    });
    return builder.create();
}
Also used : AlertDialog(android.app.AlertDialog) DialogInterface(android.content.DialogInterface) TextView(android.widget.TextView) View(android.view.View) ListView(android.widget.ListView) MediaTrack(com.google.android.gms.cast.MediaTrack) LayoutInflater(android.view.LayoutInflater) ArrayList(java.util.ArrayList) List(java.util.List)

Example 8 with MediaTrack

use of com.google.android.gms.cast.MediaTrack in project zype-android by zype.

the class TracksChooserDialog method partitionTracks.

/**
 * This method loops through the tracks and partitions them into a group of Text tracks and a
 * group of Audio tracks, and skips over the Video tracks.
 */
private void partitionTracks() {
    List<MediaTrack> allTracks = mMediaInfo.getMediaTracks();
    mAudioTracks.clear();
    mTextTracks.clear();
    mTextTracks.add(buildNoneTrack());
    mSelectedTextPosition = 0;
    mSelectedAudioPosition = -1;
    if (allTracks != null) {
        int textPosition = 1;
        /* start from 1 since we have a NONE selection at the beginning */
        int audioPosition = 0;
        for (MediaTrack track : allTracks) {
            switch(track.getType()) {
                case MediaTrack.TYPE_TEXT:
                    mTextTracks.add(track);
                    if (mActiveTracks != null) {
                        for (long mActiveTrack : mActiveTracks) {
                            if (mActiveTrack == track.getId()) {
                                mSelectedTextPosition = textPosition;
                            }
                        }
                    }
                    textPosition++;
                    break;
                case MediaTrack.TYPE_AUDIO:
                    mAudioTracks.add(track);
                    if (mActiveTracks != null) {
                        for (long mActiveTrack : mActiveTracks) {
                            if (mActiveTrack == track.getId()) {
                                mSelectedAudioPosition = audioPosition;
                            }
                        }
                    }
                    audioPosition++;
                    break;
            }
        }
    }
}
Also used : MediaTrack(com.google.android.gms.cast.MediaTrack)

Example 9 with MediaTrack

use of com.google.android.gms.cast.MediaTrack in project zype-android by zype.

the class Utils method mediaInfoToBundle.

/**
 * Builds and returns a {@link Bundle} which contains a select subset of data in the
 * {@link MediaInfo}. Since {@link MediaInfo} is not {@link Parcelable}, one can use this
 * container bundle to pass around from one activity to another.
 *
 * @see <code>bundleToMediaInfo()</code>
 */
public static Bundle mediaInfoToBundle(MediaInfo info) {
    if (info == null) {
        return null;
    }
    MediaMetadata md = info.getMetadata();
    Bundle wrapper = new Bundle();
    wrapper.putString(MediaMetadata.KEY_TITLE, md.getString(MediaMetadata.KEY_TITLE));
    wrapper.putString(MediaMetadata.KEY_SUBTITLE, md.getString(MediaMetadata.KEY_SUBTITLE));
    wrapper.putString(KEY_URL, info.getContentId());
    wrapper.putString(MediaMetadata.KEY_STUDIO, md.getString(MediaMetadata.KEY_STUDIO));
    wrapper.putString(KEY_CONTENT_TYPE, info.getContentType());
    wrapper.putInt(KEY_STREAM_TYPE, info.getStreamType());
    wrapper.putLong(KEY_STREAM_DURATION, info.getStreamDuration());
    if (!md.getImages().isEmpty()) {
        ArrayList<String> urls = new ArrayList<>();
        for (WebImage img : md.getImages()) {
            urls.add(img.getUrl().toString());
        }
        wrapper.putStringArrayList(KEY_IMAGES, urls);
    }
    JSONObject customData = info.getCustomData();
    if (customData != null) {
        wrapper.putString(KEY_CUSTOM_DATA, customData.toString());
    }
    if (info.getMediaTracks() != null && !info.getMediaTracks().isEmpty()) {
        try {
            JSONArray jsonArray = new JSONArray();
            for (MediaTrack mt : info.getMediaTracks()) {
                JSONObject jsonObject = new JSONObject();
                jsonObject.put(KEY_TRACK_NAME, mt.getName());
                jsonObject.put(KEY_TRACK_CONTENT_ID, mt.getContentId());
                jsonObject.put(KEY_TRACK_ID, mt.getId());
                jsonObject.put(KEY_TRACK_LANGUAGE, mt.getLanguage());
                jsonObject.put(KEY_TRACK_TYPE, mt.getType());
                if (mt.getSubtype() != MediaTrack.SUBTYPE_UNKNOWN) {
                    jsonObject.put(KEY_TRACK_SUBTYPE, mt.getSubtype());
                }
                if (mt.getCustomData() != null) {
                    jsonObject.put(KEY_TRACK_CUSTOM_DATA, mt.getCustomData().toString());
                }
                jsonArray.put(jsonObject);
            }
            wrapper.putString(KEY_TRACKS_DATA, jsonArray.toString());
        } catch (JSONException e) {
            LOGE(TAG, "mediaInfoToBundle(): Failed to convert Tracks data to json", e);
        }
    }
    return wrapper;
}
Also used : MediaTrack(com.google.android.gms.cast.MediaTrack) JSONObject(org.json.JSONObject) Bundle(android.os.Bundle) ArrayList(java.util.ArrayList) JSONArray(org.json.JSONArray) MediaMetadata(com.google.android.gms.cast.MediaMetadata) WebImage(com.google.android.gms.common.images.WebImage) JSONException(org.json.JSONException)

Example 10 with MediaTrack

use of com.google.android.gms.cast.MediaTrack in project Shuttle by timusus.

the class TracksChooserDialog method partitionTracks.

/**
 * This method loops through the tracks and partitions them into a group of Text tracks and a
 * group of Audio tracks, and skips over the Video tracks.
 */
private void partitionTracks() {
    List<MediaTrack> allTracks = mMediaInfo.getMediaTracks();
    mAudioTracks.clear();
    mTextTracks.clear();
    mVideoTracks.clear();
    mTextTracks.add(buildNoneTrack());
    mSelectedTextPosition = 0;
    mSelectedAudioPosition = -1;
    if (allTracks != null) {
        int textPosition = 1;
        /* start from 1 since we have a NONE selection at the beginning */
        int audioPosition = 0;
        for (MediaTrack track : allTracks) {
            switch(track.getType()) {
                case MediaTrack.TYPE_TEXT:
                    mTextTracks.add(track);
                    if (mActiveTracks != null) {
                        for (long mActiveTrack : mActiveTracks) {
                            if (mActiveTrack == track.getId()) {
                                mSelectedTextPosition = textPosition;
                            }
                        }
                    }
                    textPosition++;
                    break;
                case MediaTrack.TYPE_AUDIO:
                    mAudioTracks.add(track);
                    if (mActiveTracks != null) {
                        for (long mActiveTrack : mActiveTracks) {
                            if (mActiveTrack == track.getId()) {
                                mSelectedAudioPosition = audioPosition;
                            }
                        }
                    }
                    audioPosition++;
                    break;
                case MediaTrack.TYPE_VIDEO:
                    mVideoTracks.add(track);
            }
        }
    }
}
Also used : MediaTrack(com.google.android.gms.cast.MediaTrack) SuppressLint(android.annotation.SuppressLint)

Aggregations

MediaTrack (com.google.android.gms.cast.MediaTrack)11 Bundle (android.os.Bundle)4 MediaMetadata (com.google.android.gms.cast.MediaMetadata)4 WebImage (com.google.android.gms.common.images.WebImage)4 ArrayList (java.util.ArrayList)4 JSONArray (org.json.JSONArray)4 JSONException (org.json.JSONException)4 JSONObject (org.json.JSONObject)4 SuppressLint (android.annotation.SuppressLint)2 AlertDialog (android.app.AlertDialog)2 DialogInterface (android.content.DialogInterface)2 Point (android.graphics.Point)2 Uri (android.net.Uri)2 LayoutInflater (android.view.LayoutInflater)2 View (android.view.View)2 ListView (android.widget.ListView)2 TextView (android.widget.TextView)2 MediaInfo (com.google.android.gms.cast.MediaInfo)2 Calendar (java.util.Calendar)2 List (java.util.List)2