Search in sources :

Example 1 with ResponseListener

use of com.connectsdk.service.capability.listeners.ResponseListener in project butter-android by butterproject.

the class BeamPlayerNotificationService method handleIntent.

private void handleIntent(Intent intent) {
    if (intent == null || intent.getAction() == null) {
        return;
    }
    String action = intent.getAction();
    if (mediaControl == null) {
        Intent stopIntent = new Intent(getApplicationContext(), BeamPlayerNotificationService.class);
        stopService(stopIntent);
        return;
    }
    if (action.equalsIgnoreCase(ACTION_PLAY) || action.equalsIgnoreCase(ACTION_PAUSE)) {
        ResponseListener<Object> responseListener = new ResponseListener<Object>() {

            @Override
            public void onSuccess(Object object) {
                mediaControl.getPlayState(playStateListener);
            }

            @Override
            public void onError(ServiceCommandError error) {
                mediaControl.getPlayState(playStateListener);
            }
        };
        if (isPlaying) {
            isPlaying = false;
            mediaControl.pause(responseListener);
            buildNotification(generateAction(R.drawable.ic_av_play, "Play", ACTION_PLAY));
        } else {
            isPlaying = true;
            mediaControl.play(responseListener);
            buildNotification(generateAction(R.drawable.ic_av_pause, "Pause", ACTION_PAUSE));
        }
        mediaControl.getPlayState(playStateListener);
    } else if (action.equalsIgnoreCase(ACTION_FAST_FORWARD)) {
        mediaControl.getPosition(new MediaControl.PositionListener() {

            @Override
            public void onSuccess(Long object) {
                long seek = object + 10000;
                mediaControl.seek(seek, null);
            }

            @Override
            public void onError(ServiceCommandError error) {
            }
        });
    } else if (action.equalsIgnoreCase(ACTION_REWIND)) {
        mediaControl.getPosition(new MediaControl.PositionListener() {

            @Override
            public void onSuccess(Long object) {
                long seek = object - 10000;
                mediaControl.seek(seek, null);
            }

            @Override
            public void onError(ServiceCommandError error) {
            }
        });
    } else if (action.equalsIgnoreCase(ACTION_STOP)) {
        manager.stopVideo();
    }
}
Also used : MediaControl(com.connectsdk.service.capability.MediaControl) Intent(android.content.Intent) PendingIntent(android.app.PendingIntent) ServiceCommandError(com.connectsdk.service.command.ServiceCommandError) ResponseListener(com.connectsdk.service.capability.listeners.ResponseListener)

Example 2 with ResponseListener

use of com.connectsdk.service.capability.listeners.ResponseListener in project butter-android by butterproject.

the class AirPlayService method startTimer.

/**
 * We send periodically a command to keep connection alive and for avoiding
 * stopping media session
 *
 * Fix for https://github.com/ConnectSDK/Connect-SDK-Cordova-Plugin/issues/5
 */
private void startTimer() {
    stopTimer();
    timer = new Timer();
    timer.scheduleAtFixedRate(new TimerTask() {

        @Override
        public void run() {
            Log.d("Timer", "Timer");
            getPlaybackPosition(new PlaybackPositionListener() {

                @Override
                public void onGetPlaybackPositionSuccess(long duration, long position) {
                    if (position >= duration) {
                        stopTimer();
                    }
                }

                @Override
                public void onGetPlaybackPositionFailed(ServiceCommandError error) {
                }
            });
        }
    }, KEEP_ALIVE_PERIOD, KEEP_ALIVE_PERIOD);
    updateTimer = new Timer();
    updateTimer.scheduleAtFixedRate(new TimerTask() {

        @Override
        public void run() {
            getPlaybackInfo(new ResponseListener<Object>() {

                @Override
                public void onSuccess(Object object) {
                    PlayStateStatus playState = PlayStateStatus.Unknown;
                    try {
                        JSONObject response = new PListParser().parse(object.toString());
                        if (response.length() > 0) {
                            boolean readyToPlay = false;
                            if (response.has("readyToPlay")) {
                                readyToPlay = response.getBoolean("readyToPlay");
                            }
                            if (!readyToPlay) {
                                playState = PlayStateStatus.Buffering;
                            } else {
                                if (!response.has("rate")) {
                                    playState = PlayStateStatus.Finished;
                                } else {
                                    int rate = response.getInt("rate");
                                    if (rate == 0) {
                                        playState = PlayStateStatus.Paused;
                                    } else if (rate == 1) {
                                        playState = PlayStateStatus.Playing;
                                    }
                                }
                            }
                            if (mSubscriptions.size() > 0) {
                                for (URLServiceSubscription<?> subscription : mSubscriptions) {
                                    if (subscription.getTarget().equalsIgnoreCase(PLAY_STATE)) {
                                        for (int i = 0; i < subscription.getListeners().size(); i++) {
                                            @SuppressWarnings("unchecked") ResponseListener<Object> listener = (ResponseListener<Object>) subscription.getListeners().get(i);
                                            Util.postSuccess(listener, playState);
                                        }
                                    }
                                }
                            }
                        }
                    } catch (Exception e) {
                    }
                }

                @Override
                public void onError(ServiceCommandError error) {
                }
            });
        }
    }, 0, UPDATE_PERIOD);
}
Also used : ServiceCommandError(com.connectsdk.service.command.ServiceCommandError) ResponseListener(com.connectsdk.service.capability.listeners.ResponseListener) PListParser(com.connectsdk.service.airplay.PListParser) MalformedURLException(java.net.MalformedURLException) IOException(java.io.IOException) NoSuchAlgorithmException(java.security.NoSuchAlgorithmException) Timer(java.util.Timer) TimerTask(java.util.TimerTask) JSONObject(org.json.JSONObject) JSONObject(org.json.JSONObject)

Example 3 with ResponseListener

use of com.connectsdk.service.capability.listeners.ResponseListener in project butter-android by butterproject.

the class AirPlayService method playVideo.

public void playVideo(final String url, String mimeType, String title, String description, String iconSrc, boolean shouldLoop, final LaunchListener listener) {
    ResponseListener<Object> responseListener = new ResponseListener<Object>() {

        @Override
        public void onSuccess(Object response) {
            LaunchSession launchSession = new LaunchSession();
            launchSession.setService(AirPlayService.this);
            launchSession.setSessionType(LaunchSessionType.Media);
            Util.postSuccess(listener, new MediaLaunchObject(launchSession, AirPlayService.this));
            startTimer();
        }

        @Override
        public void onError(ServiceCommandError error) {
            Util.postError(listener, error);
        }
    };
    String uri = getRequestURL("play");
    String payload = null;
    PListBuilder builder = new PListBuilder();
    builder.putString("Content-Location", url);
    builder.putReal("Start-Position", 0);
    payload = builder.toString();
    ServiceCommand<ResponseListener<Object>> request = new ServiceCommand<ResponseListener<Object>>(this, uri, payload, responseListener);
    request.send();
}
Also used : LaunchSession(com.connectsdk.service.sessions.LaunchSession) PListBuilder(com.connectsdk.service.airplay.PListBuilder) JSONObject(org.json.JSONObject) ServiceCommandError(com.connectsdk.service.command.ServiceCommandError) ResponseListener(com.connectsdk.service.capability.listeners.ResponseListener) ServiceCommand(com.connectsdk.service.command.ServiceCommand)

Example 4 with ResponseListener

use of com.connectsdk.service.capability.listeners.ResponseListener in project butter-android by butterproject.

the class DLNAService method sendCommand.

@Override
public void sendCommand(final ServiceCommand<?> mCommand) {
    Util.runInBackground(new Runnable() {

        @SuppressWarnings("unchecked")
        @Override
        public void run() {
            ServiceCommand<ResponseListener<Object>> command = (ServiceCommand<ResponseListener<Object>>) mCommand;
            String method = command.getTarget();
            String payload = (String) command.getPayload();
            String targetURL = null;
            String serviceURN = null;
            if (payload == null) {
                Util.postError(command.getResponseListener(), new ServiceCommandError(0, "Cannot process the command, \"payload\" is missed", null));
                return;
            }
            if (payload.contains(AV_TRANSPORT_URN)) {
                targetURL = avTransportURL;
                serviceURN = AV_TRANSPORT_URN;
            } else if (payload.contains(RENDERING_CONTROL_URN)) {
                targetURL = renderingControlURL;
                serviceURN = RENDERING_CONTROL_URN;
            } else if (payload.contains(CONNECTION_MANAGER_URN)) {
                targetURL = connectionControlURL;
                serviceURN = CONNECTION_MANAGER_URN;
            }
            if (serviceURN == null) {
                Util.postError(command.getResponseListener(), new ServiceCommandError(0, "Cannot process the command, \"serviceURN\" is missed", null));
                return;
            }
            if (targetURL == null) {
                Util.postError(command.getResponseListener(), new ServiceCommandError(0, "Cannot process the command, \"targetURL\" is missed", null));
                return;
            }
            try {
                HttpConnection connection = createHttpConnection(targetURL);
                connection.setHeader("Content-Type", "text/xml; charset=utf-8");
                connection.setHeader("SOAPAction", String.format("\"%s#%s\"", serviceURN, method));
                connection.setMethod(HttpConnection.Method.POST);
                connection.setPayload(payload);
                connection.execute();
                int code = connection.getResponseCode();
                if (code == 200) {
                    Util.postSuccess(command.getResponseListener(), connection.getResponseString());
                } else {
                    Util.postError(command.getResponseListener(), ServiceCommandError.getError(code));
                }
            } catch (IOException e) {
                Util.postError(command.getResponseListener(), new ServiceCommandError(0, e.getMessage(), null));
            }
        }
    });
}
Also used : HttpConnection(com.connectsdk.etc.helper.HttpConnection) JSONObject(org.json.JSONObject) ServiceCommandError(com.connectsdk.service.command.ServiceCommandError) ResponseListener(com.connectsdk.service.capability.listeners.ResponseListener) IOException(java.io.IOException) ServiceCommand(com.connectsdk.service.command.ServiceCommand)

Example 5 with ResponseListener

use of com.connectsdk.service.capability.listeners.ResponseListener in project butter-android by butterproject.

the class DLNAService method displayMedia.

public void displayMedia(String url, String subsUrl, String mimeType, String title, String description, String iconSrc, final LaunchListener listener) {
    final String instanceId = "0";
    String[] mediaElements = mimeType.split("/");
    String mediaType = mediaElements[0];
    String mediaFormat = mediaElements[1];
    if (mediaType == null || mediaType.length() == 0 || mediaFormat == null || mediaFormat.length() == 0) {
        Util.postError(listener, new ServiceCommandError(0, "You must provide a valid mimeType (audio/*,  video/*, etc)", null));
        return;
    }
    mediaFormat = "mp3".equals(mediaFormat) ? "mpeg" : mediaFormat;
    String mMimeType = String.format("%s/%s", mediaType, mediaFormat);
    ResponseListener<Object> responseListener = new ResponseListener<Object>() {

        @Override
        public void onSuccess(Object response) {
            String method = "Play";
            Map<String, String> parameters = new HashMap<String, String>();
            parameters.put("Speed", "1");
            String payload = getMessageXml(AV_TRANSPORT_URN, method, "0", parameters);
            ResponseListener<Object> playResponseListener = new ResponseListener<Object>() {

                @Override
                public void onSuccess(Object response) {
                    LaunchSession launchSession = new LaunchSession();
                    launchSession.setService(DLNAService.this);
                    launchSession.setSessionType(LaunchSessionType.Media);
                    Util.postSuccess(listener, new MediaLaunchObject(launchSession, DLNAService.this, DLNAService.this));
                }

                @Override
                public void onError(ServiceCommandError error) {
                    Util.postError(listener, error);
                }
            };
            ServiceCommand<ResponseListener<Object>> request = new ServiceCommand<ResponseListener<Object>>(DLNAService.this, method, payload, playResponseListener);
            request.send();
        }

        @Override
        public void onError(ServiceCommandError error) {
            Util.postError(listener, error);
        }
    };
    String method = "SetAVTransportURI";
    String metadata = getMetadata(url, subsUrl, mMimeType, title, description, iconSrc);
    if (metadata == null) {
        Util.postError(listener, ServiceCommandError.getError(500));
        return;
    }
    Map<String, String> params = new LinkedHashMap<String, String>();
    try {
        params.put("CurrentURI", encodeURL(url));
    } catch (Exception e) {
        Util.postError(listener, ServiceCommandError.getError(500));
        return;
    }
    params.put("CurrentURIMetaData", metadata);
    String payload = getMessageXml(AV_TRANSPORT_URN, method, instanceId, params);
    ServiceCommand<ResponseListener<Object>> request = new ServiceCommand<ResponseListener<Object>>(DLNAService.this, method, payload, responseListener);
    request.send();
}
Also used : HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) LaunchSession(com.connectsdk.service.sessions.LaunchSession) ServiceCommandError(com.connectsdk.service.command.ServiceCommandError) ResponseListener(com.connectsdk.service.capability.listeners.ResponseListener) URISyntaxException(java.net.URISyntaxException) JSONException(org.json.JSONException) ParseException(java.text.ParseException) UnsupportedEncodingException(java.io.UnsupportedEncodingException) TransformerException(javax.xml.transform.TransformerException) MalformedURLException(java.net.MalformedURLException) IOException(java.io.IOException) UnknownHostException(java.net.UnknownHostException) LinkedHashMap(java.util.LinkedHashMap) JSONObject(org.json.JSONObject) ServiceCommand(com.connectsdk.service.command.ServiceCommand)

Aggregations

ResponseListener (com.connectsdk.service.capability.listeners.ResponseListener)76 JSONObject (org.json.JSONObject)75 ServiceCommandError (com.connectsdk.service.command.ServiceCommandError)65 ServiceCommand (com.connectsdk.service.command.ServiceCommand)64 JSONException (org.json.JSONException)54 URLServiceSubscription (com.connectsdk.service.command.URLServiceSubscription)14 SuppressLint (android.annotation.SuppressLint)10 LaunchSession (com.connectsdk.service.sessions.LaunchSession)9 IOException (java.io.IOException)9 JSONArray (org.json.JSONArray)7 AppInfo (com.connectsdk.core.AppInfo)6 ChannelInfo (com.connectsdk.core.ChannelInfo)6 UnsupportedEncodingException (java.io.UnsupportedEncodingException)5 ByteArrayInputStream (java.io.ByteArrayInputStream)4 ArrayList (java.util.ArrayList)4 HashMap (java.util.HashMap)4 NameNotFoundException (android.content.pm.PackageManager.NameNotFoundException)3 HttpConnection (com.connectsdk.etc.helper.HttpConnection)3 InputStream (java.io.InputStream)3 ParserConfigurationException (javax.xml.parsers.ParserConfigurationException)3