[Android] [PATCH 1/6] rename PlaybackServiceController to PlaybackServiceClient
Jean-Baptiste Kempf
jb at videolan.org
Thu Jun 11 17:48:31 CEST 2015
+1000
On 11 Jun, Thomas Guillem wrote :
> ---
> .../org/videolan/vlc/PlaybackServiceClient.java | 536 +++++++++++++++++++++
> .../videolan/vlc/PlaybackServiceController.java | 536 ---------------------
> .../vlc/gui/AudioPlayerContainerActivity.java | 10 +-
> .../src/org/videolan/vlc/gui/HistoryAdapter.java | 8 +-
> .../src/org/videolan/vlc/gui/HistoryFragment.java | 4 +-
> .../org/videolan/vlc/gui/PreferencesActivity.java | 13 +-
> .../videolan/vlc/gui/audio/AudioAlbumFragment.java | 6 +-
> .../vlc/gui/audio/AudioAlbumsSongsFragment.java | 8 +-
> .../vlc/gui/audio/AudioBrowserFragment.java | 6 +-
> .../org/videolan/vlc/gui/audio/AudioPlayer.java | 6 +-
> .../vlc/gui/browser/BaseBrowserFragment.java | 7 +-
> .../videolan/vlc/gui/video/VideoGridFragment.java | 10 +-
> .../vlc/gui/video/VideoPlayerActivity.java | 12 +-
> vlc-android/src/org/videolan/vlc/util/Util.java | 8 +-
> .../videolan/vlc/widget/AudioMediaSwitcher.java | 4 +-
> .../vlc/gui/tv/MediaItemDetailsFragment.java | 8 +-
> .../gui/tv/audioplayer/AudioPlayerActivity.java | 8 +-
> 17 files changed, 593 insertions(+), 597 deletions(-)
> create mode 100644 vlc-android/src/org/videolan/vlc/PlaybackServiceClient.java
> delete mode 100644 vlc-android/src/org/videolan/vlc/PlaybackServiceController.java
>
> diff --git a/vlc-android/src/org/videolan/vlc/PlaybackServiceClient.java b/vlc-android/src/org/videolan/vlc/PlaybackServiceClient.java
> new file mode 100644
> index 0000000..bddb420
> --- /dev/null
> +++ b/vlc-android/src/org/videolan/vlc/PlaybackServiceClient.java
> @@ -0,0 +1,536 @@
> +/*****************************************************************************
> + * PlaybackServiceClient.java
> + *****************************************************************************
> + * Copyright © 2011-2015 VLC authors and VideoLAN
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
> + *****************************************************************************/
> +
> +package org.videolan.vlc;
> +
> +import android.content.ComponentName;
> +import android.content.Context;
> +import android.content.Intent;
> +import android.content.ServiceConnection;
> +import android.content.SharedPreferences;
> +import android.graphics.Bitmap;
> +import android.os.IBinder;
> +import android.os.RemoteException;
> +import android.preference.PreferenceManager;
> +import android.util.Log;
> +
> +import org.videolan.vlc.interfaces.IAudioPlayer;
> +import org.videolan.vlc.interfaces.IAudioPlayerControl;
> +import org.videolan.vlc.interfaces.IPlaybackService;
> +import org.videolan.vlc.interfaces.IPlaybackServiceCallback;
> +
> +import java.lang.reflect.InvocationTargetException;
> +import java.lang.reflect.Method;
> +import java.util.ArrayList;
> +import java.util.List;
> +
> +public class PlaybackServiceClient implements IAudioPlayerControl {
> + public static final String TAG = "PlaybackServiceClient";
> +
> + private static PlaybackServiceClient mInstance;
> + private static boolean mIsBound = false;
> + private IPlaybackService mAudioServiceBinder;
> + private ServiceConnection mAudioServiceConnection;
> + private final ArrayList<IAudioPlayer> mAudioPlayer;
> + private final ArrayList<MediaPlayedListener> mMediaPlayedListener;
> +
> + public interface MediaPlayedListener {
> + public void onMediaPlayedAdded(MediaWrapper media, int index);
> + public void onMediaPlayedRemoved(int index);
> + }
> +
> + private final IPlaybackServiceCallback mCallback = new IPlaybackServiceCallback.Stub() {
> + @Override
> + public void update() throws RemoteException {
> + updateAudioPlayer();
> + }
> +
> + @Override
> + public void updateProgress() throws RemoteException {
> + updateProgressAudioPlayer();
> + }
> +
> + @Override
> + public void onMediaPlayedAdded(MediaWrapper media, int index) throws RemoteException {
> + updateMediaPlayedAdded(media, index);
> + }
> +
> + @Override
> + public void onMediaPlayedRemoved(int index) throws RemoteException {
> + updateMediaPlayedRemoved(index);
> + }
> + };
> +
> + private PlaybackServiceClient() {
> + mAudioPlayer = new ArrayList<IAudioPlayer>();
> + mMediaPlayedListener = new ArrayList<MediaPlayedListener>();
> + }
> +
> + public static PlaybackServiceClient getInstance() {
> + if (mInstance == null) {
> + mInstance = new PlaybackServiceClient();
> + }
> + return mInstance;
> + }
> +
> + /**
> + * The connection listener interface for the audio service
> + */
> + public interface AudioServiceConnectionListener {
> + public void onConnectionSuccess();
> + public void onConnectionFailed();
> + }
> +
> + /**
> + * Bind to audio service if it is running
> + */
> + public void bindAudioService(Context context) {
> + bindAudioService(context, null);
> + }
> +
> + public void bindAudioService(Context context, final AudioServiceConnectionListener connectionListerner) {
> + if (context == null) {
> + Log.w(TAG, "bindAudioService() with null Context. Ooops" );
> + return;
> + }
> + context = context.getApplicationContext();
> +
> + if (!mIsBound) {
> + Intent service = new Intent(context, PlaybackService.class);
> +
> + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
> + final boolean enableHS = prefs.getBoolean("enable_headset_detection", true);
> +
> + // Setup audio service connection
> + mAudioServiceConnection = new ServiceConnection() {
> + @Override
> + public void onServiceDisconnected(ComponentName name) {
> + Log.d(TAG, "Service Disconnected");
> + mAudioServiceBinder = null;
> + mIsBound = false;
> + }
> +
> + @Override
> + public void onServiceConnected(ComponentName name, IBinder service) {
> + if (!mIsBound) // Can happen if unbind is called quickly before this callback
> + return;
> + Log.d(TAG, "Service Connected");
> + mAudioServiceBinder = IPlaybackService.Stub.asInterface(service);
> +
> + // Register controller to the service
> + try {
> + mAudioServiceBinder.addAudioCallback(mCallback);
> + mAudioServiceBinder.detectHeadset(enableHS);
> + if (connectionListerner != null)
> + connectionListerner.onConnectionSuccess();
> + } catch (RemoteException e) {
> + Log.e(TAG, "remote procedure call failed: addAudioCallback()");
> + if (connectionListerner != null)
> + connectionListerner.onConnectionFailed();
> + }
> + updateAudioPlayer();
> + }
> + };
> +
> + mIsBound = context.bindService(service, mAudioServiceConnection, Context.BIND_AUTO_CREATE);
> + } else {
> + // Register controller to the service
> + try {
> + if (mAudioServiceBinder != null)
> + mAudioServiceBinder.addAudioCallback(mCallback);
> + if (connectionListerner != null)
> + connectionListerner.onConnectionSuccess();
> + } catch (RemoteException e) {
> + Log.e(TAG, "remote procedure call failed: addAudioCallback()");
> + if (connectionListerner != null)
> + connectionListerner.onConnectionFailed();
> + }
> + }
> + }
> +
> + public void unbindAudioService(Context context) {
> + if (context == null) {
> + Log.w(TAG, "unbindAudioService() with null Context. Ooops" );
> + return;
> + }
> + context = context.getApplicationContext();
> +
> + if (mIsBound) {
> + mIsBound = false;
> + try {
> + if (mAudioServiceBinder != null)
> + mAudioServiceBinder.removeAudioCallback(mCallback);
> + } catch (RemoteException e) {
> + Log.e(TAG, "remote procedure call failed: removeAudioCallback()");
> + }
> + context.unbindService(mAudioServiceConnection);
> + mAudioServiceBinder = null;
> + mAudioServiceConnection = null;
> + }
> + }
> +
> + /**
> + * Add a MediaPlayedListener
> + * @param li
> + */
> + public void addMediaPlayedListener(MediaPlayedListener li) {
> + if (!mMediaPlayedListener.contains(li))
> + mMediaPlayedListener.add(li);
> + }
> +
> + /**
> + * Remove MediaPlayedListener from list
> + * @param li
> + */
> + public void removeMediaPlayedListener(MediaPlayedListener li) {
> + if (mMediaPlayedListener.contains(li))
> + mMediaPlayedListener.remove(li);
> + }
> +
> + /**
> + * Add a AudioPlayer
> + * @param ap
> + */
> + public void addAudioPlayer(IAudioPlayer ap) {
> + if (!mAudioPlayer.contains(ap))
> + mAudioPlayer.add(ap);
> + }
> +
> + /**
> + * Remove AudioPlayer from list
> + * @param ap
> + */
> + public void removeAudioPlayer(IAudioPlayer ap) {
> + if (mAudioPlayer.contains(ap))
> + mAudioPlayer.remove(ap);
> + }
> +
> + /**
> + * Update all AudioPlayer
> + */
> + private void updateAudioPlayer() {
> + for (IAudioPlayer player : mAudioPlayer)
> + player.update();
> + }
> +
> + /**
> + * Update the progress of all AudioPlayers
> + */
> + private void updateProgressAudioPlayer() {
> + for (IAudioPlayer player : mAudioPlayer)
> + player.updateProgress();
> + }
> +
> + private void updateMediaPlayedAdded(MediaWrapper media, int index) {
> + for (MediaPlayedListener listener : mMediaPlayedListener) {
> + listener.onMediaPlayedAdded(media, index);
> + }
> + }
> +
> + private void updateMediaPlayedRemoved(int index) {
> + for (MediaPlayedListener listener : mMediaPlayedListener) {
> + listener.onMediaPlayedRemoved(index);
> + }
> + }
> +
> + /**
> + * This is a handy utility function to call remote procedure calls from mAudioServiceBinder
> + * to reduce code duplication across methods of AudioServiceController.
> + *
> + * @param instance The instance of IPlaybackService to call, usually mAudioServiceBinder
> + * @param returnType Return type of the method being called
> + * @param defaultValue Default value to return in case of null or exception
> + * @param functionName The function name to call, e.g. "stop"
> + * @param parameterTypes List of parameter types. Pass null if none.
> + * @param parameters List of parameters. Must be in same order as parameterTypes. Pass null if none.
> + * @return The results of the RPC or defaultValue if error
> + */
> + private <T> T remoteProcedureCall(IPlaybackService instance, Class<T> returnType, T defaultValue, String functionName, Class<?> parameterTypes[], Object parameters[]) {
> + if(instance == null) {
> + return defaultValue;
> + }
> +
> + try {
> + Method m = IPlaybackService.class.getMethod(functionName, parameterTypes);
> + @SuppressWarnings("unchecked")
> + T returnVal = (T) m.invoke(instance, parameters);
> + return returnVal;
> + } catch(NoSuchMethodException e) {
> + e.printStackTrace();
> + return defaultValue;
> + } catch (IllegalArgumentException e) {
> + e.printStackTrace();
> + return defaultValue;
> + } catch (IllegalAccessException e) {
> + e.printStackTrace();
> + return defaultValue;
> + } catch (InvocationTargetException e) {
> + if(e.getTargetException() instanceof RemoteException) {
> + Log.e(TAG, "remote procedure call failed: " + functionName + "()");
> + }
> + return defaultValue;
> + }
> + }
> +
> + public void loadLocation(String mediaPath) {
> + ArrayList < String > arrayList = new ArrayList<String>();
> + arrayList.add(mediaPath);
> + loadLocations(arrayList, 0);
> + }
> +
> +
> + public void load(MediaWrapper media, boolean forceAudio) {
> + ArrayList<MediaWrapper> arrayList = new ArrayList<MediaWrapper>();
> + arrayList.add(media);
> + load(arrayList, 0, forceAudio);
> + }
> +
> + public void load(MediaWrapper media) {
> + load(media, false);
> + }
> +
> + public void loadLocations(List<String> mediaPathList, int position) {
> + remoteProcedureCall(mAudioServiceBinder, Void.class, (Void) null, "loadLocations",
> + new Class<?>[]{List.class, int.class},
> + new Object[]{mediaPathList, position});
> + }
> +
> + public void load(List<MediaWrapper> mediaList, int position) {
> + load(mediaList, position, false);
> + }
> +
> + public void load(List<MediaWrapper> mediaList, int position, boolean forceAudio) {
> + remoteProcedureCall(mAudioServiceBinder, Void.class, (Void) null, "load",
> + new Class<?>[]{List.class, int.class, boolean.class},
> + new Object[]{mediaList, position, forceAudio});
> + }
> +
> + public void append(MediaWrapper media) {
> + ArrayList<MediaWrapper> arrayList = new ArrayList<MediaWrapper>();
> + arrayList.add(media);
> + append(arrayList);
> + }
> +
> + public void append(List<MediaWrapper> mediaList) {
> + remoteProcedureCall(mAudioServiceBinder, Void.class, (Void) null, "append",
> + new Class<?>[]{List.class},
> + new Object[]{mediaList});
> + }
> +
> + public void moveItem(int positionStart, int positionEnd) {
> + remoteProcedureCall(mAudioServiceBinder, Void.class, (Void)null, "moveItem",
> + new Class<?>[] { int.class, int.class },
> + new Object[] { positionStart, positionEnd } );
> + }
> +
> + public void remove(int position) {
> + remoteProcedureCall(mAudioServiceBinder, Void.class, (Void)null, "remove",
> + new Class<?>[] { int.class },
> + new Object[] { position } );
> + }
> +
> + public void removeLocation(String location) {
> + remoteProcedureCall(mAudioServiceBinder, Void.class, (Void)null, "removeLocation",
> + new Class<?>[] { String.class },
> + new Object[] { location } );
> + }
> +
> + @SuppressWarnings("unchecked")
> + public List<MediaWrapper> getMedias() {
> + return remoteProcedureCall(mAudioServiceBinder, List.class, null, "getMedias", null, null);
> + }
> +
> + @SuppressWarnings("unchecked")
> + public List<String> getMediaLocations() {
> + List<String> def = new ArrayList<String>();
> + return remoteProcedureCall(mAudioServiceBinder, List.class, def, "getMediaLocations", null, null);
> + }
> +
> + public String getCurrentMediaLocation() {
> + return remoteProcedureCall(mAudioServiceBinder, String.class, (String)null, "getCurrentMediaLocation", null, null);
> + }
> +
> + public MediaWrapper getCurrentMediaWrapper() {
> + return remoteProcedureCall(mAudioServiceBinder, MediaWrapper.class, (MediaWrapper)null, "getCurrentMediaWrapper", null, null);
> + }
> +
> + public void stop() {
> + remoteProcedureCall(mAudioServiceBinder, Void.class, (Void)null, "stop", null, null);
> + }
> +
> + public void showWithoutParse(int u) {
> + remoteProcedureCall(mAudioServiceBinder, Void.class, (Void)null, "showWithoutParse",
> + new Class<?>[] { int.class },
> + new Object[] { u } );
> + }
> +
> + public void playIndex(int i) {
> + remoteProcedureCall(mAudioServiceBinder, Void.class, (Void)null, "playIndex",
> + new Class<?>[] { int.class },
> + new Object[] { i } );
> + }
> +
> + @Override
> + public String getAlbum() {
> + return remoteProcedureCall(mAudioServiceBinder, String.class, (String)null, "getAlbum", null, null);
> + }
> +
> + @Override
> + public String getArtist() {
> + return remoteProcedureCall(mAudioServiceBinder, String.class, (String)null, "getArtist", null, null);
> + }
> +
> + @Override
> + public String getArtistPrev() {
> + return remoteProcedureCall(mAudioServiceBinder, String.class, (String)null, "getArtistPrev", null, null);
> + }
> +
> + @Override
> + public String getArtistNext() {
> + return remoteProcedureCall(mAudioServiceBinder, String.class, (String)null, "getArtistNext", null, null);
> + }
> +
> + @Override
> + public String getTitle() {
> + return remoteProcedureCall(mAudioServiceBinder, String.class, (String)null, "getTitle", null, null);
> + }
> +
> + @Override
> + public String getTitlePrev() {
> + return remoteProcedureCall(mAudioServiceBinder, String.class, (String)null, "getTitlePrev", null, null);
> + }
> +
> + @Override
> + public String getTitleNext() {
> + return remoteProcedureCall(mAudioServiceBinder, String.class, (String)null, "getTitleNext", null, null);
> + }
> +
> + @Override
> + public boolean isPlaying() {
> + return hasMedia() && remoteProcedureCall(mAudioServiceBinder, boolean.class, false, "isPlaying", null, null);
> + }
> +
> + @Override
> + public void pause() {
> + remoteProcedureCall(mAudioServiceBinder, Void.class, (Void)null, "pause", null, null);
> + }
> +
> + @Override
> + public void play() {
> + remoteProcedureCall(mAudioServiceBinder, Void.class, (Void)null, "play", null, null);
> + }
> +
> + @Override
> + public boolean hasMedia() {
> + return remoteProcedureCall(mAudioServiceBinder, boolean.class, false, "hasMedia", null, null);
> + }
> +
> + @Override
> + public int getLength() {
> + return remoteProcedureCall(mAudioServiceBinder, int.class, 0, "getLength", null, null);
> + }
> +
> + @Override
> + public int getTime() {
> + return remoteProcedureCall(mAudioServiceBinder, int.class, 0, "getTime", null, null);
> + }
> +
> + @Override
> + public Bitmap getCover() {
> + return remoteProcedureCall(mAudioServiceBinder, Bitmap.class, (Bitmap)null, "getCover", null, null);
> + }
> +
> + @Override
> + public Bitmap getCoverPrev() {
> + return remoteProcedureCall(mAudioServiceBinder, Bitmap.class, (Bitmap)null, "getCoverPrev", null, null);
> + }
> +
> + @Override
> + public Bitmap getCoverNext() {
> + return remoteProcedureCall(mAudioServiceBinder, Bitmap.class, (Bitmap)null, "getCoverNext", null, null);
> + }
> +
> + @Override
> + public void next() {
> + remoteProcedureCall(mAudioServiceBinder, Void.class, (Void)null, "next", null, null);
> + }
> +
> + @Override
> + public void previous() {
> + remoteProcedureCall(mAudioServiceBinder, Void.class, (Void)null, "previous", null, null);
> + }
> +
> + public void setTime(long time) {
> + remoteProcedureCall(mAudioServiceBinder, Void.class, (Void)null, "setTime",
> + new Class<?>[] { long.class },
> + new Object[] { time } );
> + }
> +
> + @Override
> + public boolean hasNext() {
> + return remoteProcedureCall(mAudioServiceBinder, boolean.class, false, "hasNext", null, null);
> + }
> +
> + @Override
> + public boolean hasPrevious() {
> + return remoteProcedureCall(mAudioServiceBinder, boolean.class, false, "hasPrevious", null, null);
> + }
> +
> + @Override
> + public void shuffle() {
> + remoteProcedureCall(mAudioServiceBinder, Void.class, (Void)null, "shuffle", null, null);
> + }
> +
> + @Override
> + public void setRepeatType(PlaybackService.RepeatType t) {
> + remoteProcedureCall(mAudioServiceBinder, Void.class, (Void)null, "setRepeatType",
> + new Class<?>[] { int.class },
> + new Object[] { t.ordinal() } );
> + }
> +
> + @Override
> + public boolean isShuffling() {
> + return remoteProcedureCall(mAudioServiceBinder, boolean.class, false, "isShuffling", null, null);
> + }
> +
> + @Override
> + public PlaybackService.RepeatType getRepeatType() {
> + return PlaybackService.RepeatType.values()[
> + remoteProcedureCall(mAudioServiceBinder, int.class, PlaybackService.RepeatType.None.ordinal(), "getRepeatType", null, null)
> + ];
> + }
> +
> + @Override
> + public void detectHeadset(boolean enable) {
> + remoteProcedureCall(mAudioServiceBinder, Void.class, null, "detectHeadset",
> + new Class<?>[] { boolean.class },
> + new Object[] { enable } );
> + }
> +
> + @Override
> + public float getRate() {
> + return remoteProcedureCall(mAudioServiceBinder, Float.class, (float) 1.0, "getRate", null, null);
> + }
> +
> + @Override
> + public void handleVout() {
> + remoteProcedureCall(mAudioServiceBinder, Void.class, (Void)null, "handleVout", null, null);
> + }
> +}
> diff --git a/vlc-android/src/org/videolan/vlc/PlaybackServiceController.java b/vlc-android/src/org/videolan/vlc/PlaybackServiceController.java
> deleted file mode 100644
> index 9938777..0000000
> --- a/vlc-android/src/org/videolan/vlc/PlaybackServiceController.java
> +++ /dev/null
> @@ -1,536 +0,0 @@
> -/*****************************************************************************
> - * AudioServiceController.java
> - *****************************************************************************
> - * Copyright © 2011-2012 VLC authors and VideoLAN
> - *
> - * This program is free software; you can redistribute it and/or modify
> - * it under the terms of the GNU General Public License as published by
> - * the Free Software Foundation; either version 2 of the License, or
> - * (at your option) any later version.
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> - * GNU General Public License for more details.
> - *
> - * You should have received a copy of the GNU General Public License
> - * along with this program; if not, write to the Free Software
> - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
> - *****************************************************************************/
> -
> -package org.videolan.vlc;
> -
> -import android.content.ComponentName;
> -import android.content.Context;
> -import android.content.Intent;
> -import android.content.ServiceConnection;
> -import android.content.SharedPreferences;
> -import android.graphics.Bitmap;
> -import android.os.IBinder;
> -import android.os.RemoteException;
> -import android.preference.PreferenceManager;
> -import android.util.Log;
> -
> -import org.videolan.vlc.interfaces.IAudioPlayer;
> -import org.videolan.vlc.interfaces.IAudioPlayerControl;
> -import org.videolan.vlc.interfaces.IPlaybackService;
> -import org.videolan.vlc.interfaces.IPlaybackServiceCallback;
> -
> -import java.lang.reflect.InvocationTargetException;
> -import java.lang.reflect.Method;
> -import java.util.ArrayList;
> -import java.util.List;
> -
> -public class PlaybackServiceController implements IAudioPlayerControl {
> - public static final String TAG = "VLC/PlaylistServiceCtrl";
> -
> - private static PlaybackServiceController mInstance;
> - private static boolean mIsBound = false;
> - private IPlaybackService mAudioServiceBinder;
> - private ServiceConnection mAudioServiceConnection;
> - private final ArrayList<IAudioPlayer> mAudioPlayer;
> - private final ArrayList<MediaPlayedListener> mMediaPlayedListener;
> -
> - public interface MediaPlayedListener {
> - public void onMediaPlayedAdded(MediaWrapper media, int index);
> - public void onMediaPlayedRemoved(int index);
> - }
> -
> - private final IPlaybackServiceCallback mCallback = new IPlaybackServiceCallback.Stub() {
> - @Override
> - public void update() throws RemoteException {
> - updateAudioPlayer();
> - }
> -
> - @Override
> - public void updateProgress() throws RemoteException {
> - updateProgressAudioPlayer();
> - }
> -
> - @Override
> - public void onMediaPlayedAdded(MediaWrapper media, int index) throws RemoteException {
> - updateMediaPlayedAdded(media, index);
> - }
> -
> - @Override
> - public void onMediaPlayedRemoved(int index) throws RemoteException {
> - updateMediaPlayedRemoved(index);
> - }
> - };
> -
> - private PlaybackServiceController() {
> - mAudioPlayer = new ArrayList<IAudioPlayer>();
> - mMediaPlayedListener = new ArrayList<MediaPlayedListener>();
> - }
> -
> - public static PlaybackServiceController getInstance() {
> - if (mInstance == null) {
> - mInstance = new PlaybackServiceController();
> - }
> - return mInstance;
> - }
> -
> - /**
> - * The connection listener interface for the audio service
> - */
> - public interface AudioServiceConnectionListener {
> - public void onConnectionSuccess();
> - public void onConnectionFailed();
> - }
> -
> - /**
> - * Bind to audio service if it is running
> - */
> - public void bindAudioService(Context context) {
> - bindAudioService(context, null);
> - }
> -
> - public void bindAudioService(Context context, final AudioServiceConnectionListener connectionListerner) {
> - if (context == null) {
> - Log.w(TAG, "bindAudioService() with null Context. Ooops" );
> - return;
> - }
> - context = context.getApplicationContext();
> -
> - if (!mIsBound) {
> - Intent service = new Intent(context, PlaybackService.class);
> -
> - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
> - final boolean enableHS = prefs.getBoolean("enable_headset_detection", true);
> -
> - // Setup audio service connection
> - mAudioServiceConnection = new ServiceConnection() {
> - @Override
> - public void onServiceDisconnected(ComponentName name) {
> - Log.d(TAG, "Service Disconnected");
> - mAudioServiceBinder = null;
> - mIsBound = false;
> - }
> -
> - @Override
> - public void onServiceConnected(ComponentName name, IBinder service) {
> - if (!mIsBound) // Can happen if unbind is called quickly before this callback
> - return;
> - Log.d(TAG, "Service Connected");
> - mAudioServiceBinder = IPlaybackService.Stub.asInterface(service);
> -
> - // Register controller to the service
> - try {
> - mAudioServiceBinder.addAudioCallback(mCallback);
> - mAudioServiceBinder.detectHeadset(enableHS);
> - if (connectionListerner != null)
> - connectionListerner.onConnectionSuccess();
> - } catch (RemoteException e) {
> - Log.e(TAG, "remote procedure call failed: addAudioCallback()");
> - if (connectionListerner != null)
> - connectionListerner.onConnectionFailed();
> - }
> - updateAudioPlayer();
> - }
> - };
> -
> - mIsBound = context.bindService(service, mAudioServiceConnection, Context.BIND_AUTO_CREATE);
> - } else {
> - // Register controller to the service
> - try {
> - if (mAudioServiceBinder != null)
> - mAudioServiceBinder.addAudioCallback(mCallback);
> - if (connectionListerner != null)
> - connectionListerner.onConnectionSuccess();
> - } catch (RemoteException e) {
> - Log.e(TAG, "remote procedure call failed: addAudioCallback()");
> - if (connectionListerner != null)
> - connectionListerner.onConnectionFailed();
> - }
> - }
> - }
> -
> - public void unbindAudioService(Context context) {
> - if (context == null) {
> - Log.w(TAG, "unbindAudioService() with null Context. Ooops" );
> - return;
> - }
> - context = context.getApplicationContext();
> -
> - if (mIsBound) {
> - mIsBound = false;
> - try {
> - if (mAudioServiceBinder != null)
> - mAudioServiceBinder.removeAudioCallback(mCallback);
> - } catch (RemoteException e) {
> - Log.e(TAG, "remote procedure call failed: removeAudioCallback()");
> - }
> - context.unbindService(mAudioServiceConnection);
> - mAudioServiceBinder = null;
> - mAudioServiceConnection = null;
> - }
> - }
> -
> - /**
> - * Add a MediaPlayedListener
> - * @param li
> - */
> - public void addMediaPlayedListener(MediaPlayedListener li) {
> - if (!mMediaPlayedListener.contains(li))
> - mMediaPlayedListener.add(li);
> - }
> -
> - /**
> - * Remove MediaPlayedListener from list
> - * @param li
> - */
> - public void removeMediaPlayedListener(MediaPlayedListener li) {
> - if (mMediaPlayedListener.contains(li))
> - mMediaPlayedListener.remove(li);
> - }
> -
> - /**
> - * Add a AudioPlayer
> - * @param ap
> - */
> - public void addAudioPlayer(IAudioPlayer ap) {
> - if (!mAudioPlayer.contains(ap))
> - mAudioPlayer.add(ap);
> - }
> -
> - /**
> - * Remove AudioPlayer from list
> - * @param ap
> - */
> - public void removeAudioPlayer(IAudioPlayer ap) {
> - if (mAudioPlayer.contains(ap))
> - mAudioPlayer.remove(ap);
> - }
> -
> - /**
> - * Update all AudioPlayer
> - */
> - private void updateAudioPlayer() {
> - for (IAudioPlayer player : mAudioPlayer)
> - player.update();
> - }
> -
> - /**
> - * Update the progress of all AudioPlayers
> - */
> - private void updateProgressAudioPlayer() {
> - for (IAudioPlayer player : mAudioPlayer)
> - player.updateProgress();
> - }
> -
> - private void updateMediaPlayedAdded(MediaWrapper media, int index) {
> - for (MediaPlayedListener listener : mMediaPlayedListener) {
> - listener.onMediaPlayedAdded(media, index);
> - }
> - }
> -
> - private void updateMediaPlayedRemoved(int index) {
> - for (MediaPlayedListener listener : mMediaPlayedListener) {
> - listener.onMediaPlayedRemoved(index);
> - }
> - }
> -
> - /**
> - * This is a handy utility function to call remote procedure calls from mAudioServiceBinder
> - * to reduce code duplication across methods of AudioServiceController.
> - *
> - * @param instance The instance of IPlaybackService to call, usually mAudioServiceBinder
> - * @param returnType Return type of the method being called
> - * @param defaultValue Default value to return in case of null or exception
> - * @param functionName The function name to call, e.g. "stop"
> - * @param parameterTypes List of parameter types. Pass null if none.
> - * @param parameters List of parameters. Must be in same order as parameterTypes. Pass null if none.
> - * @return The results of the RPC or defaultValue if error
> - */
> - private <T> T remoteProcedureCall(IPlaybackService instance, Class<T> returnType, T defaultValue, String functionName, Class<?> parameterTypes[], Object parameters[]) {
> - if(instance == null) {
> - return defaultValue;
> - }
> -
> - try {
> - Method m = IPlaybackService.class.getMethod(functionName, parameterTypes);
> - @SuppressWarnings("unchecked")
> - T returnVal = (T) m.invoke(instance, parameters);
> - return returnVal;
> - } catch(NoSuchMethodException e) {
> - e.printStackTrace();
> - return defaultValue;
> - } catch (IllegalArgumentException e) {
> - e.printStackTrace();
> - return defaultValue;
> - } catch (IllegalAccessException e) {
> - e.printStackTrace();
> - return defaultValue;
> - } catch (InvocationTargetException e) {
> - if(e.getTargetException() instanceof RemoteException) {
> - Log.e(TAG, "remote procedure call failed: " + functionName + "()");
> - }
> - return defaultValue;
> - }
> - }
> -
> - public void loadLocation(String mediaPath) {
> - ArrayList < String > arrayList = new ArrayList<String>();
> - arrayList.add(mediaPath);
> - loadLocations(arrayList, 0);
> - }
> -
> -
> - public void load(MediaWrapper media, boolean forceAudio) {
> - ArrayList<MediaWrapper> arrayList = new ArrayList<MediaWrapper>();
> - arrayList.add(media);
> - load(arrayList, 0, forceAudio);
> - }
> -
> - public void load(MediaWrapper media) {
> - load(media, false);
> - }
> -
> - public void loadLocations(List<String> mediaPathList, int position) {
> - remoteProcedureCall(mAudioServiceBinder, Void.class, (Void) null, "loadLocations",
> - new Class<?>[]{List.class, int.class},
> - new Object[]{mediaPathList, position});
> - }
> -
> - public void load(List<MediaWrapper> mediaList, int position) {
> - load(mediaList, position, false);
> - }
> -
> - public void load(List<MediaWrapper> mediaList, int position, boolean forceAudio) {
> - remoteProcedureCall(mAudioServiceBinder, Void.class, (Void) null, "load",
> - new Class<?>[]{List.class, int.class, boolean.class},
> - new Object[]{mediaList, position, forceAudio});
> - }
> -
> - public void append(MediaWrapper media) {
> - ArrayList<MediaWrapper> arrayList = new ArrayList<MediaWrapper>();
> - arrayList.add(media);
> - append(arrayList);
> - }
> -
> - public void append(List<MediaWrapper> mediaList) {
> - remoteProcedureCall(mAudioServiceBinder, Void.class, (Void) null, "append",
> - new Class<?>[]{List.class},
> - new Object[]{mediaList});
> - }
> -
> - public void moveItem(int positionStart, int positionEnd) {
> - remoteProcedureCall(mAudioServiceBinder, Void.class, (Void)null, "moveItem",
> - new Class<?>[] { int.class, int.class },
> - new Object[] { positionStart, positionEnd } );
> - }
> -
> - public void remove(int position) {
> - remoteProcedureCall(mAudioServiceBinder, Void.class, (Void)null, "remove",
> - new Class<?>[] { int.class },
> - new Object[] { position } );
> - }
> -
> - public void removeLocation(String location) {
> - remoteProcedureCall(mAudioServiceBinder, Void.class, (Void)null, "removeLocation",
> - new Class<?>[] { String.class },
> - new Object[] { location } );
> - }
> -
> - @SuppressWarnings("unchecked")
> - public List<MediaWrapper> getMedias() {
> - return remoteProcedureCall(mAudioServiceBinder, List.class, null, "getMedias", null, null);
> - }
> -
> - @SuppressWarnings("unchecked")
> - public List<String> getMediaLocations() {
> - List<String> def = new ArrayList<String>();
> - return remoteProcedureCall(mAudioServiceBinder, List.class, def, "getMediaLocations", null, null);
> - }
> -
> - public String getCurrentMediaLocation() {
> - return remoteProcedureCall(mAudioServiceBinder, String.class, (String)null, "getCurrentMediaLocation", null, null);
> - }
> -
> - public MediaWrapper getCurrentMediaWrapper() {
> - return remoteProcedureCall(mAudioServiceBinder, MediaWrapper.class, (MediaWrapper)null, "getCurrentMediaWrapper", null, null);
> - }
> -
> - public void stop() {
> - remoteProcedureCall(mAudioServiceBinder, Void.class, (Void)null, "stop", null, null);
> - }
> -
> - public void showWithoutParse(int u) {
> - remoteProcedureCall(mAudioServiceBinder, Void.class, (Void)null, "showWithoutParse",
> - new Class<?>[] { int.class },
> - new Object[] { u } );
> - }
> -
> - public void playIndex(int i) {
> - remoteProcedureCall(mAudioServiceBinder, Void.class, (Void)null, "playIndex",
> - new Class<?>[] { int.class },
> - new Object[] { i } );
> - }
> -
> - @Override
> - public String getAlbum() {
> - return remoteProcedureCall(mAudioServiceBinder, String.class, (String)null, "getAlbum", null, null);
> - }
> -
> - @Override
> - public String getArtist() {
> - return remoteProcedureCall(mAudioServiceBinder, String.class, (String)null, "getArtist", null, null);
> - }
> -
> - @Override
> - public String getArtistPrev() {
> - return remoteProcedureCall(mAudioServiceBinder, String.class, (String)null, "getArtistPrev", null, null);
> - }
> -
> - @Override
> - public String getArtistNext() {
> - return remoteProcedureCall(mAudioServiceBinder, String.class, (String)null, "getArtistNext", null, null);
> - }
> -
> - @Override
> - public String getTitle() {
> - return remoteProcedureCall(mAudioServiceBinder, String.class, (String)null, "getTitle", null, null);
> - }
> -
> - @Override
> - public String getTitlePrev() {
> - return remoteProcedureCall(mAudioServiceBinder, String.class, (String)null, "getTitlePrev", null, null);
> - }
> -
> - @Override
> - public String getTitleNext() {
> - return remoteProcedureCall(mAudioServiceBinder, String.class, (String)null, "getTitleNext", null, null);
> - }
> -
> - @Override
> - public boolean isPlaying() {
> - return hasMedia() && remoteProcedureCall(mAudioServiceBinder, boolean.class, false, "isPlaying", null, null);
> - }
> -
> - @Override
> - public void pause() {
> - remoteProcedureCall(mAudioServiceBinder, Void.class, (Void)null, "pause", null, null);
> - }
> -
> - @Override
> - public void play() {
> - remoteProcedureCall(mAudioServiceBinder, Void.class, (Void)null, "play", null, null);
> - }
> -
> - @Override
> - public boolean hasMedia() {
> - return remoteProcedureCall(mAudioServiceBinder, boolean.class, false, "hasMedia", null, null);
> - }
> -
> - @Override
> - public int getLength() {
> - return remoteProcedureCall(mAudioServiceBinder, int.class, 0, "getLength", null, null);
> - }
> -
> - @Override
> - public int getTime() {
> - return remoteProcedureCall(mAudioServiceBinder, int.class, 0, "getTime", null, null);
> - }
> -
> - @Override
> - public Bitmap getCover() {
> - return remoteProcedureCall(mAudioServiceBinder, Bitmap.class, (Bitmap)null, "getCover", null, null);
> - }
> -
> - @Override
> - public Bitmap getCoverPrev() {
> - return remoteProcedureCall(mAudioServiceBinder, Bitmap.class, (Bitmap)null, "getCoverPrev", null, null);
> - }
> -
> - @Override
> - public Bitmap getCoverNext() {
> - return remoteProcedureCall(mAudioServiceBinder, Bitmap.class, (Bitmap)null, "getCoverNext", null, null);
> - }
> -
> - @Override
> - public void next() {
> - remoteProcedureCall(mAudioServiceBinder, Void.class, (Void)null, "next", null, null);
> - }
> -
> - @Override
> - public void previous() {
> - remoteProcedureCall(mAudioServiceBinder, Void.class, (Void)null, "previous", null, null);
> - }
> -
> - public void setTime(long time) {
> - remoteProcedureCall(mAudioServiceBinder, Void.class, (Void)null, "setTime",
> - new Class<?>[] { long.class },
> - new Object[] { time } );
> - }
> -
> - @Override
> - public boolean hasNext() {
> - return remoteProcedureCall(mAudioServiceBinder, boolean.class, false, "hasNext", null, null);
> - }
> -
> - @Override
> - public boolean hasPrevious() {
> - return remoteProcedureCall(mAudioServiceBinder, boolean.class, false, "hasPrevious", null, null);
> - }
> -
> - @Override
> - public void shuffle() {
> - remoteProcedureCall(mAudioServiceBinder, Void.class, (Void)null, "shuffle", null, null);
> - }
> -
> - @Override
> - public void setRepeatType(PlaybackService.RepeatType t) {
> - remoteProcedureCall(mAudioServiceBinder, Void.class, (Void)null, "setRepeatType",
> - new Class<?>[] { int.class },
> - new Object[] { t.ordinal() } );
> - }
> -
> - @Override
> - public boolean isShuffling() {
> - return remoteProcedureCall(mAudioServiceBinder, boolean.class, false, "isShuffling", null, null);
> - }
> -
> - @Override
> - public PlaybackService.RepeatType getRepeatType() {
> - return PlaybackService.RepeatType.values()[
> - remoteProcedureCall(mAudioServiceBinder, int.class, PlaybackService.RepeatType.None.ordinal(), "getRepeatType", null, null)
> - ];
> - }
> -
> - @Override
> - public void detectHeadset(boolean enable) {
> - remoteProcedureCall(mAudioServiceBinder, Void.class, null, "detectHeadset",
> - new Class<?>[] { boolean.class },
> - new Object[] { enable } );
> - }
> -
> - @Override
> - public float getRate() {
> - return remoteProcedureCall(mAudioServiceBinder, Float.class, (float) 1.0, "getRate", null, null);
> - }
> -
> - @Override
> - public void handleVout() {
> - remoteProcedureCall(mAudioServiceBinder, Void.class, (Void)null, "handleVout", null, null);
> - }
> -}
> diff --git a/vlc-android/src/org/videolan/vlc/gui/AudioPlayerContainerActivity.java b/vlc-android/src/org/videolan/vlc/gui/AudioPlayerContainerActivity.java
> index 0555bbc..281f706 100644
> --- a/vlc-android/src/org/videolan/vlc/gui/AudioPlayerContainerActivity.java
> +++ b/vlc-android/src/org/videolan/vlc/gui/AudioPlayerContainerActivity.java
> @@ -39,7 +39,7 @@ import android.view.ViewGroup;
> import android.widget.TextView;
>
> import org.videolan.vlc.BuildConfig;
> -import org.videolan.vlc.PlaybackServiceController;
> +import org.videolan.vlc.PlaybackServiceClient;
> import org.videolan.vlc.R;
> import org.videolan.vlc.gui.audio.AudioPlayer;
> import org.videolan.vlc.util.Util;
> @@ -53,7 +53,7 @@ public class AudioPlayerContainerActivity extends AppCompatActivity {
> protected ActionBar mActionBar;
> protected Toolbar mToolbar;
> protected AudioPlayer mAudioPlayer;
> - protected PlaybackServiceController mAudioController;
> + protected PlaybackServiceClient mAudioController;
> protected SlidingPaneLayout mSlidingPane;
> protected View mAudioPlayerFilling;
> protected SharedPreferences mSettings;
> @@ -83,7 +83,7 @@ public class AudioPlayerContainerActivity extends AppCompatActivity {
> /* Set up the audio player */
> mAudioPlayer = new AudioPlayer();
> mAudioPlayer.setUserVisibleHint(false);
> - mAudioController = PlaybackServiceController.getInstance();
> + mAudioController = PlaybackServiceClient.getInstance();
>
> getSupportFragmentManager().beginTransaction()
> .replace(R.id.audio_player, mAudioPlayer)
> @@ -112,14 +112,14 @@ public class AudioPlayerContainerActivity extends AppCompatActivity {
> protected void onResume() {
> super.onResume();
> mAudioController.addAudioPlayer(mAudioPlayer);
> - PlaybackServiceController.getInstance().bindAudioService(this);
> + PlaybackServiceClient.getInstance().bindAudioService(this);
> }
>
> @Override
> protected void onPause() {
> super.onPause();
> mAudioController.removeAudioPlayer(mAudioPlayer);
> - PlaybackServiceController.getInstance().unbindAudioService(this);
> + PlaybackServiceClient.getInstance().unbindAudioService(this);
> }
>
> private void applyTheme() {
> diff --git a/vlc-android/src/org/videolan/vlc/gui/HistoryAdapter.java b/vlc-android/src/org/videolan/vlc/gui/HistoryAdapter.java
> index a69e4e0..a118d9b 100644
> --- a/vlc-android/src/org/videolan/vlc/gui/HistoryAdapter.java
> +++ b/vlc-android/src/org/videolan/vlc/gui/HistoryAdapter.java
> @@ -31,7 +31,7 @@ import android.widget.ImageView;
> import android.widget.TextView;
>
> import org.videolan.vlc.MediaWrapper;
> -import org.videolan.vlc.PlaybackServiceController;
> +import org.videolan.vlc.PlaybackServiceClient;
> import org.videolan.vlc.R;
> import org.videolan.vlc.VLCApplication;
> import org.videolan.vlc.gui.audio.AudioUtil;
> @@ -39,17 +39,17 @@ import org.videolan.vlc.util.Util;
>
> import java.util.ArrayList;
>
> -public class HistoryAdapter extends BaseAdapter implements PlaybackServiceController.MediaPlayedListener {
> +public class HistoryAdapter extends BaseAdapter implements PlaybackServiceClient.MediaPlayedListener {
> public final static String TAG = "VLC/HistoryAdapter";
>
> private LayoutInflater mInflater;
> - private final PlaybackServiceController mAudioController;
> + private final PlaybackServiceClient mAudioController;
> private final ArrayList<MediaWrapper> mMediaList;
>
> public HistoryAdapter(Context context) {
> mInflater = LayoutInflater.from(context);
>
> - mAudioController = PlaybackServiceController.getInstance();
> + mAudioController = PlaybackServiceClient.getInstance();
>
> mMediaList = new ArrayList<MediaWrapper>();
>
> diff --git a/vlc-android/src/org/videolan/vlc/gui/HistoryFragment.java b/vlc-android/src/org/videolan/vlc/gui/HistoryFragment.java
> index 0c66079..ae8bd2e 100644
> --- a/vlc-android/src/org/videolan/vlc/gui/HistoryFragment.java
> +++ b/vlc-android/src/org/videolan/vlc/gui/HistoryFragment.java
> @@ -36,7 +36,7 @@ import android.widget.AdapterView.AdapterContextMenuInfo;
> import android.widget.ListView;
>
> import org.videolan.libvlc.util.AndroidUtil;
> -import org.videolan.vlc.PlaybackServiceController;
> +import org.videolan.vlc.PlaybackServiceClient;
> import org.videolan.vlc.R;
> import org.videolan.vlc.gui.browser.MediaBrowserFragment;
> import org.videolan.vlc.interfaces.IRefreshable;
> @@ -124,7 +124,7 @@ public class HistoryFragment extends MediaBrowserFragment implements IRefreshabl
> }
>
> private void playListIndex(int position) {
> - PlaybackServiceController audioController = PlaybackServiceController.getInstance();
> + PlaybackServiceClient audioController = PlaybackServiceClient.getInstance();
>
> audioController.playIndex(position);
> }
> diff --git a/vlc-android/src/org/videolan/vlc/gui/PreferencesActivity.java b/vlc-android/src/org/videolan/vlc/gui/PreferencesActivity.java
> index 38fedc8..184650c 100644
> --- a/vlc-android/src/org/videolan/vlc/gui/PreferencesActivity.java
> +++ b/vlc-android/src/org/videolan/vlc/gui/PreferencesActivity.java
> @@ -50,10 +50,9 @@ import android.widget.LinearLayout;
> import android.widget.ListView;
>
> import org.videolan.libvlc.util.HWDecoderUtil;
> -import org.videolan.libvlc.LibVLC;
> import org.videolan.vlc.MediaDatabase;
> import org.videolan.vlc.PlaybackService;
> -import org.videolan.vlc.PlaybackServiceController;
> +import org.videolan.vlc.PlaybackServiceClient;
> import org.videolan.vlc.R;
> import org.videolan.vlc.gui.audio.AudioUtil;
> import org.videolan.vlc.util.AndroidDevices;
> @@ -125,7 +124,7 @@ public class PreferencesActivity extends PreferenceActivity implements OnSharedP
> new OnPreferenceClickListener() {
> @Override
> public boolean onPreferenceClick(Preference preference) {
> - PlaybackServiceController.getInstance().detectHeadset(checkboxHS.isChecked());
> + PlaybackServiceClient.getInstance().detectHeadset(checkboxHS.isChecked());
> return true;
> }
> });
> @@ -375,22 +374,22 @@ public class PreferencesActivity extends PreferenceActivity implements OnSharedP
> @Override
> protected void onResume() {
> super.onResume();
> - PlaybackServiceController.getInstance().bindAudioService(this);
> + PlaybackServiceClient.getInstance().bindAudioService(this);
> }
>
> @Override
> protected void onPause() {
> super.onPause();
> - PlaybackServiceController.getInstance().unbindAudioService(this);
> + PlaybackServiceClient.getInstance().unbindAudioService(this);
> }
>
> private void restartService(Context context) {
> Intent service = new Intent(context, PlaybackService.class);
>
> - PlaybackServiceController.getInstance().unbindAudioService(PreferencesActivity.this);
> + PlaybackServiceClient.getInstance().unbindAudioService(PreferencesActivity.this);
> context.stopService(service);
>
> context.startService(service);
> - PlaybackServiceController.getInstance().bindAudioService(PreferencesActivity.this);
> + PlaybackServiceClient.getInstance().bindAudioService(PreferencesActivity.this);
> }
> }
> diff --git a/vlc-android/src/org/videolan/vlc/gui/audio/AudioAlbumFragment.java b/vlc-android/src/org/videolan/vlc/gui/audio/AudioAlbumFragment.java
> index 2a6e119..d9e50e3 100644
> --- a/vlc-android/src/org/videolan/vlc/gui/audio/AudioAlbumFragment.java
> +++ b/vlc-android/src/org/videolan/vlc/gui/audio/AudioAlbumFragment.java
> @@ -46,7 +46,7 @@ import android.widget.ListView;
>
> import org.videolan.libvlc.util.AndroidUtil;
> import org.videolan.vlc.MediaWrapper;
> -import org.videolan.vlc.PlaybackServiceController;
> +import org.videolan.vlc.PlaybackServiceClient;
> import org.videolan.vlc.R;
> import org.videolan.vlc.util.AndroidDevices;
>
> @@ -56,7 +56,7 @@ public class AudioAlbumFragment extends Fragment implements AdapterView.OnItemCl
>
> public final static String TAG = "VLC/AudioAlbumFragment";
>
> - PlaybackServiceController mAudioController;
> + PlaybackServiceClient mAudioController;
>
> private AlbumAdapter mAdapter;
> private ArrayList<MediaWrapper> mMediaList;
> @@ -70,7 +70,7 @@ public class AudioAlbumFragment extends Fragment implements AdapterView.OnItemCl
>
> mAdapter.setContextPopupMenuListener(mContextPopupMenuListener);
>
> - mAudioController = PlaybackServiceController.getInstance();
> + mAudioController = PlaybackServiceClient.getInstance();
> if (savedInstanceState != null)
> setMediaList(savedInstanceState.<MediaWrapper>getParcelableArrayList("list"), savedInstanceState.getString("title"));
> }
> diff --git a/vlc-android/src/org/videolan/vlc/gui/audio/AudioAlbumsSongsFragment.java b/vlc-android/src/org/videolan/vlc/gui/audio/AudioAlbumsSongsFragment.java
> index 4d87f4e..a54e14c 100644
> --- a/vlc-android/src/org/videolan/vlc/gui/audio/AudioAlbumsSongsFragment.java
> +++ b/vlc-android/src/org/videolan/vlc/gui/audio/AudioAlbumsSongsFragment.java
> @@ -52,14 +52,12 @@ import com.android.widget.SlidingTabLayout;
> import org.videolan.libvlc.util.AndroidUtil;
> import org.videolan.vlc.MediaLibrary;
> import org.videolan.vlc.MediaWrapper;
> -import org.videolan.vlc.PlaybackServiceController;
> +import org.videolan.vlc.PlaybackServiceClient;
> import org.videolan.vlc.R;
> import org.videolan.vlc.VLCApplication;
> -import org.videolan.vlc.gui.dialogs.CommonDialogs;
> import org.videolan.vlc.gui.SecondaryActivity;
> import org.videolan.vlc.util.AndroidDevices;
> import org.videolan.vlc.util.Util;
> -import org.videolan.vlc.util.VLCRunnable;
> import org.videolan.vlc.util.WeakHandler;
> import org.videolan.vlc.widget.SwipeRefreshLayout;
>
> @@ -76,7 +74,7 @@ public class AudioAlbumsSongsFragment extends Fragment implements SwipeRefreshLa
> private static final int DELETE_MEDIA = 0;
> private static final int DELETE_DURATION = 3000;
>
> - PlaybackServiceController mAudioController;
> + PlaybackServiceClient mAudioController;
> private MediaLibrary mMediaLibrary;
>
> private SwipeRefreshLayout mSwipeRefreshLayout;
> @@ -108,7 +106,7 @@ public class AudioAlbumsSongsFragment extends Fragment implements SwipeRefreshLa
> mAlbumsAdapter.setContextPopupMenuListener(mContextPopupMenuListener);
> mSongsAdapter.setContextPopupMenuListener(mContextPopupMenuListener);
>
> - mAudioController = PlaybackServiceController.getInstance();
> + mAudioController = PlaybackServiceClient.getInstance();
> mMediaLibrary = MediaLibrary.getInstance();
> if (savedInstanceState != null)
> setMediaList(savedInstanceState.<MediaWrapper>getParcelableArrayList("list"), savedInstanceState.getString("title"));
> diff --git a/vlc-android/src/org/videolan/vlc/gui/audio/AudioBrowserFragment.java b/vlc-android/src/org/videolan/vlc/gui/audio/AudioBrowserFragment.java
> index 632d91d..cfdbe9c 100644
> --- a/vlc-android/src/org/videolan/vlc/gui/audio/AudioBrowserFragment.java
> +++ b/vlc-android/src/org/videolan/vlc/gui/audio/AudioBrowserFragment.java
> @@ -56,7 +56,7 @@ import org.videolan.libvlc.util.MediaBrowser;
> import org.videolan.vlc.MediaDatabase;
> import org.videolan.vlc.MediaLibrary;
> import org.videolan.vlc.MediaWrapper;
> -import org.videolan.vlc.PlaybackServiceController;
> +import org.videolan.vlc.PlaybackServiceClient;
> import org.videolan.vlc.R;
> import org.videolan.vlc.VLCApplication;
> import org.videolan.vlc.gui.MainActivity;
> @@ -82,7 +82,7 @@ import java.util.concurrent.Executors;
> public class AudioBrowserFragment extends MediaBrowserFragment implements SwipeRefreshLayout.OnRefreshListener, SlidingTabLayout.OnTabChangedListener, MediaBrowser.EventListener, IBrowser {
> public final static String TAG = "VLC/AudioBrowserFragment";
>
> - private PlaybackServiceController mAudioController;
> + private PlaybackServiceClient mAudioController;
> private MediaLibrary mMediaLibrary;
> private MediaBrowser mMediaBrowser;
> private MainActivity mMainActivity;
> @@ -121,7 +121,7 @@ public class AudioBrowserFragment extends MediaBrowserFragment implements SwipeR
> public void onCreate(Bundle savedInstanceState) {
> super.onCreate(savedInstanceState);
>
> - mAudioController = PlaybackServiceController.getInstance();
> + mAudioController = PlaybackServiceClient.getInstance();
>
> mMediaLibrary = MediaLibrary.getInstance();
>
> diff --git a/vlc-android/src/org/videolan/vlc/gui/audio/AudioPlayer.java b/vlc-android/src/org/videolan/vlc/gui/audio/AudioPlayer.java
> index f13510d..9d8f9bd 100644
> --- a/vlc-android/src/org/videolan/vlc/gui/audio/AudioPlayer.java
> +++ b/vlc-android/src/org/videolan/vlc/gui/audio/AudioPlayer.java
> @@ -52,7 +52,7 @@ import android.widget.ViewSwitcher;
>
> import org.videolan.vlc.MediaWrapper;
> import org.videolan.vlc.PlaybackService;
> -import org.videolan.vlc.PlaybackServiceController;
> +import org.videolan.vlc.PlaybackServiceClient;
> import org.videolan.vlc.R;
> import org.videolan.vlc.VLCApplication;
> import org.videolan.vlc.gui.AudioPlayerContainerActivity;
> @@ -91,7 +91,7 @@ public class AudioPlayer extends Fragment implements IAudioPlayer, View.OnClickL
>
> ViewSwitcher mSwitcher;
>
> - private PlaybackServiceController mAudioController;
> + private PlaybackServiceClient mAudioController;
> private boolean mShowRemainingTime = false;
> private boolean mPreviewingSeek = false;
>
> @@ -112,7 +112,7 @@ public class AudioPlayer extends Fragment implements IAudioPlayer, View.OnClickL
> public void onCreate(Bundle savedInstanceState) {
> super.onCreate(savedInstanceState);
>
> - mAudioController = PlaybackServiceController.getInstance();
> + mAudioController = PlaybackServiceClient.getInstance();
>
> mSongsListAdapter = new AudioPlaylistAdapter(getActivity());
> }
> diff --git a/vlc-android/src/org/videolan/vlc/gui/browser/BaseBrowserFragment.java b/vlc-android/src/org/videolan/vlc/gui/browser/BaseBrowserFragment.java
> index 76e98a5..350da67 100644
> --- a/vlc-android/src/org/videolan/vlc/gui/browser/BaseBrowserFragment.java
> +++ b/vlc-android/src/org/videolan/vlc/gui/browser/BaseBrowserFragment.java
> @@ -46,13 +46,12 @@ import android.view.View;
> import android.view.ViewGroup;
> import android.widget.TextView;
>
> -import org.videolan.libvlc.LibVLC;
> import org.videolan.libvlc.Media;
> import org.videolan.libvlc.util.AndroidUtil;
> import org.videolan.libvlc.util.MediaBrowser;
> import org.videolan.vlc.MediaLibrary;
> import org.videolan.vlc.MediaWrapper;
> -import org.videolan.vlc.PlaybackServiceController;
> +import org.videolan.vlc.PlaybackServiceClient;
> import org.videolan.vlc.R;
> import org.videolan.vlc.VLCApplication;
> import org.videolan.vlc.gui.SecondaryActivity;
> @@ -405,7 +404,7 @@ public abstract class BaseBrowserFragment extends MediaBrowserFragment implement
> Util.openMedia(getActivity(), (MediaWrapper) mAdapter.getItem(position));
> return true;
> case R.id.directory_view_append:
> - PlaybackServiceController.getInstance().append(mw);
> + PlaybackServiceClient.getInstance().append(mw);
> return true;
> case R.id.directory_view_delete:
> AlertDialog alertDialog = CommonDialogs.deleteMedia(
> @@ -425,7 +424,7 @@ public abstract class BaseBrowserFragment extends MediaBrowserFragment implement
> startActivity(i);
> return true;
> case R.id.directory_view_play_audio:
> - PlaybackServiceController.getInstance().load(mw);
> + PlaybackServiceClient.getInstance().load(mw);
> return true;
> case R.id.directory_view_play_video:
> VideoPlayerActivity.start(getActivity(), mw.getUri());
> diff --git a/vlc-android/src/org/videolan/vlc/gui/video/VideoGridFragment.java b/vlc-android/src/org/videolan/vlc/gui/video/VideoGridFragment.java
> index 9291332..50e9284 100644
> --- a/vlc-android/src/org/videolan/vlc/gui/video/VideoGridFragment.java
> +++ b/vlc-android/src/org/videolan/vlc/gui/video/VideoGridFragment.java
> @@ -60,7 +60,7 @@ import org.videolan.vlc.MediaDatabase;
> import org.videolan.vlc.MediaGroup;
> import org.videolan.vlc.MediaLibrary;
> import org.videolan.vlc.MediaWrapper;
> -import org.videolan.vlc.PlaybackServiceController;
> +import org.videolan.vlc.PlaybackServiceClient;
> import org.videolan.vlc.R;
> import org.videolan.vlc.Thumbnailer;
> import org.videolan.vlc.VLCApplication;
> @@ -113,7 +113,7 @@ public class VideoGridFragment extends MediaBrowserFragment implements ISortable
> private VideoGridAnimator mAnimator;
>
> private MainActivity mMainActivity;
> - private PlaybackServiceController mAudioController;
> + private PlaybackServiceClient mAudioController;
>
> // Gridview position saved in onPause()
> private int mGVFirstVisiblePos;
> @@ -125,7 +125,7 @@ public class VideoGridFragment extends MediaBrowserFragment implements ISortable
> public void onCreate(Bundle savedInstanceState) {
> super.onCreate(savedInstanceState);
>
> - mAudioController = PlaybackServiceController.getInstance();
> + mAudioController = PlaybackServiceClient.getInstance();
>
> mVideoAdapter = new VideoListAdapter(this);
> mMediaLibrary = MediaLibrary.getInstance();
> @@ -187,7 +187,7 @@ public class VideoGridFragment extends MediaBrowserFragment implements ISortable
> public void onPause() {
> super.onPause();
> if (!(getActivity() instanceof MainActivity))
> - PlaybackServiceController.getInstance().unbindAudioService(getActivity());
> + PlaybackServiceClient.getInstance().unbindAudioService(getActivity());
> mGVFirstVisiblePos = mGridView.getFirstVisiblePosition();
> mMediaLibrary.setBrowser(null);
> mMediaLibrary.removeUpdateHandler(mHandler);
> @@ -201,7 +201,7 @@ public class VideoGridFragment extends MediaBrowserFragment implements ISortable
> public void onResume() {
> super.onResume();
> if (!(getActivity() instanceof MainActivity))
> - PlaybackServiceController.getInstance().bindAudioService(getActivity());
> + PlaybackServiceClient.getInstance().bindAudioService(getActivity());
> else
> mMainActivity = (MainActivity) getActivity();
> mMediaLibrary.setBrowser(this);
> diff --git a/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java b/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java
> index 75e0a8f..d1bcdda 100644
> --- a/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java
> +++ b/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java
> @@ -106,7 +106,7 @@ import org.videolan.vlc.BuildConfig;
> import org.videolan.vlc.MediaDatabase;
> import org.videolan.vlc.MediaWrapper;
> import org.videolan.vlc.MediaWrapperListPlayer;
> -import org.videolan.vlc.PlaybackServiceController;
> +import org.videolan.vlc.PlaybackServiceClient;
> import org.videolan.vlc.R;
> import org.videolan.vlc.VLCApplication;
> import org.videolan.vlc.gui.dialogs.CommonDialogs;
> @@ -656,8 +656,8 @@ public class VideoPlayerActivity extends AppCompatActivity implements IVideoPlay
> if (mBound)
> return;
> mBound = true;
> - PlaybackServiceController.getInstance().bindAudioService(this,
> - new PlaybackServiceController.AudioServiceConnectionListener() {
> + PlaybackServiceClient.getInstance().bindAudioService(this,
> + new PlaybackServiceClient.AudioServiceConnectionListener() {
> @Override
> public void onConnectionSuccess() {
> mAudioServiceReady = true;
> @@ -673,7 +673,7 @@ public class VideoPlayerActivity extends AppCompatActivity implements IVideoPlay
> });
> }
> private void unbindAudioService() {
> - PlaybackServiceController.getInstance().unbindAudioService(this);
> + PlaybackServiceClient.getInstance().unbindAudioService(this);
> mAudioServiceReady = false;
> mBound = false;
> }
> @@ -750,7 +750,7 @@ public class VideoPlayerActivity extends AppCompatActivity implements IVideoPlay
>
> if(mSwitchingView) {
> Log.d(TAG, "mLocation = \"" + mUri + "\"");
> - PlaybackServiceController.getInstance().showWithoutParse(savedIndexPosition);
> + PlaybackServiceClient.getInstance().showWithoutParse(savedIndexPosition);
> unbindAudioService();
> return;
> }
> @@ -2799,7 +2799,7 @@ public class VideoPlayerActivity extends AppCompatActivity implements IVideoPlay
> savedIndexPosition = openedPosition;
> } else {
> /* prepare playback */
> - PlaybackServiceController.getInstance().stop(); // Stop the previous playback.
> + PlaybackServiceClient.getInstance().stop(); // Stop the previous playback.
> if (savedIndexPosition == -1 && mUri != null) {
> mMediaListPlayer.getMediaList().clear();
> final Media media = new Media(LibVLC(), mUri);
> diff --git a/vlc-android/src/org/videolan/vlc/util/Util.java b/vlc-android/src/org/videolan/vlc/util/Util.java
> index 5699eb9..055aff6 100644
> --- a/vlc-android/src/org/videolan/vlc/util/Util.java
> +++ b/vlc-android/src/org/videolan/vlc/util/Util.java
> @@ -43,7 +43,7 @@ import org.videolan.libvlc.Media;
> import org.videolan.libvlc.util.AndroidUtil;
> import org.videolan.vlc.MediaLibrary;
> import org.videolan.vlc.MediaWrapper;
> -import org.videolan.vlc.PlaybackServiceController;
> +import org.videolan.vlc.PlaybackServiceClient;
> import org.videolan.vlc.R;
> import org.videolan.vlc.VLCApplication;
> import org.videolan.vlc.VLCCallbackTask;
> @@ -216,7 +216,7 @@ public class Util {
> VLCCallbackTask task = new VLCCallbackTask(context) {
> @Override
> public void run() {
> - PlaybackServiceController c = PlaybackServiceController.getInstance();
> + PlaybackServiceClient c = PlaybackServiceClient.getInstance();
> c.load(media);
> }
> };
> @@ -228,7 +228,7 @@ public class Util {
> VLCCallbackTask task = new VLCCallbackTask(context){
> @Override
> public void run() {
> - PlaybackServiceController c = PlaybackServiceController.getInstance();
> + PlaybackServiceClient c = PlaybackServiceClient.getInstance();
>
> /* Use the audio player by default. If a video track is
> * detected, then it will automatically switch to the video
> @@ -246,7 +246,7 @@ public class Util {
> VLCCallbackTask task = new VLCCallbackTask(context){
> @Override
> public void run() {
> - PlaybackServiceController c = PlaybackServiceController.getInstance();
> + PlaybackServiceClient c = PlaybackServiceClient.getInstance();
>
> /* Use the audio player by default. If a video track is
> * detected, then it will automatically switch to the video
> diff --git a/vlc-android/src/org/videolan/vlc/widget/AudioMediaSwitcher.java b/vlc-android/src/org/videolan/vlc/widget/AudioMediaSwitcher.java
> index 060bb1b..0afd6ff 100644
> --- a/vlc-android/src/org/videolan/vlc/widget/AudioMediaSwitcher.java
> +++ b/vlc-android/src/org/videolan/vlc/widget/AudioMediaSwitcher.java
> @@ -20,7 +20,7 @@
>
> package org.videolan.vlc.widget;
>
> -import org.videolan.vlc.PlaybackServiceController;
> +import org.videolan.vlc.PlaybackServiceClient;
>
> import android.content.Context;
> import android.graphics.Bitmap;
> @@ -42,7 +42,7 @@ public abstract class AudioMediaSwitcher extends FlingViewGroup {
> }
>
> public void updateMedia() {
> - PlaybackServiceController audioController = PlaybackServiceController.getInstance();
> + PlaybackServiceClient audioController = PlaybackServiceClient.getInstance();
> if (audioController == null)
> return;
>
> diff --git a/vlc-android/tv/src/org/videolan/vlc/gui/tv/MediaItemDetailsFragment.java b/vlc-android/tv/src/org/videolan/vlc/gui/tv/MediaItemDetailsFragment.java
> index 8efd250..718bcc0 100644
> --- a/vlc-android/tv/src/org/videolan/vlc/gui/tv/MediaItemDetailsFragment.java
> +++ b/vlc-android/tv/src/org/videolan/vlc/gui/tv/MediaItemDetailsFragment.java
> @@ -26,7 +26,7 @@ import org.videolan.libvlc.util.AndroidUtil;
> import org.videolan.vlc.MediaDatabase;
> import org.videolan.vlc.MediaLibrary;
> import org.videolan.vlc.MediaWrapper;
> -import org.videolan.vlc.PlaybackServiceController;
> +import org.videolan.vlc.PlaybackServiceClient;
> import org.videolan.vlc.R;
> import org.videolan.vlc.gui.audio.AudioUtil;
> import org.videolan.vlc.gui.tv.audioplayer.AudioPlayerActivity;
> @@ -46,7 +46,7 @@ import android.support.v17.leanback.widget.ListRowPresenter;
> import android.support.v17.leanback.widget.OnActionClickedListener;
> import android.widget.Toast;
>
> -public class MediaItemDetailsFragment extends DetailsFragment implements PlaybackServiceController.AudioServiceConnectionListener {
> +public class MediaItemDetailsFragment extends DetailsFragment implements PlaybackServiceClient.AudioServiceConnectionListener {
> private static final String TAG = "MediaItemDetailsFragment";
> private static final int ID_PLAY = 1;
> private static final int ID_LISTEN = 2;
> @@ -54,7 +54,7 @@ public class MediaItemDetailsFragment extends DetailsFragment implements Playbac
> private static final int ID_FAVORITE_DELETE = 4;
> private static final int ID_BROWSE = 5;
> private ArrayObjectAdapter mRowsAdapter;
> - private PlaybackServiceController mAudioController;
> + private PlaybackServiceClient mAudioController;
> private MediaItemDetails mMedia;
> private MediaWrapper mMediaWrapper;
> private MediaDatabase mDb;
> @@ -63,7 +63,7 @@ public class MediaItemDetailsFragment extends DetailsFragment implements Playbac
> public void onCreate(Bundle savedInstanceState) {
> super.onCreate(savedInstanceState);
>
> - mAudioController = PlaybackServiceController.getInstance();
> + mAudioController = PlaybackServiceClient.getInstance();
> buildDetails();
> }
>
> diff --git a/vlc-android/tv/src/org/videolan/vlc/gui/tv/audioplayer/AudioPlayerActivity.java b/vlc-android/tv/src/org/videolan/vlc/gui/tv/audioplayer/AudioPlayerActivity.java
> index 0614a11..1a6164a 100644
> --- a/vlc-android/tv/src/org/videolan/vlc/gui/tv/audioplayer/AudioPlayerActivity.java
> +++ b/vlc-android/tv/src/org/videolan/vlc/gui/tv/audioplayer/AudioPlayerActivity.java
> @@ -26,7 +26,7 @@ import java.util.Collections;
> import org.videolan.vlc.MediaLibrary;
> import org.videolan.vlc.MediaWrapper;
> import org.videolan.vlc.PlaybackService;
> -import org.videolan.vlc.PlaybackServiceController;
> +import org.videolan.vlc.PlaybackServiceClient;
> import org.videolan.vlc.R;
> import org.videolan.vlc.gui.DividerItemDecoration;
> import org.videolan.vlc.gui.audio.AudioUtil;
> @@ -47,12 +47,12 @@ import android.widget.ImageView;
> import android.widget.ProgressBar;
> import android.widget.TextView;
>
> -public class AudioPlayerActivity extends Activity implements PlaybackServiceController.AudioServiceConnectionListener, IAudioPlayer, View.OnFocusChangeListener {
> +public class AudioPlayerActivity extends Activity implements PlaybackServiceClient.AudioServiceConnectionListener, IAudioPlayer, View.OnFocusChangeListener {
> public static final String TAG = "VLC/AudioPlayerActivity";
>
> public static final String MEDIA_LIST = "media_list";
>
> - private PlaybackServiceController mAudioController;
> + private PlaybackServiceClient mAudioController;
> private RecyclerView mRecyclerView;
> private PlaylistAdapter mAdapter;
> private LinearLayoutManager mLayoutManager;
> @@ -84,7 +84,7 @@ public class AudioPlayerActivity extends Activity implements PlaybackServiceCont
> mAdapter = new PlaylistAdapter(this, mMediaList);
> mRecyclerView.setAdapter(mAdapter);
>
> - mAudioController = PlaybackServiceController.getInstance();
> + mAudioController = PlaybackServiceClient.getInstance();
>
> mAudioController.getRepeatType();
> mTitleTv = (TextView)findViewById(R.id.media_title);
> --
> 2.1.4
>
> _______________________________________________
> Android mailing list
> Android at videolan.org
> https://mailman.videolan.org/listinfo/android
--
With my kindest regards,
--
Jean-Baptiste Kempf
http://www.jbkempf.com/ - +33 672 704 734
Sent from my Electronic Device
More information about the Android
mailing list