Loading android/app/src/com/android/bluetooth/audio_util/BrowsablePlayerConnector.java +6 −11 Original line number Diff line number Diff line Loading @@ -43,7 +43,6 @@ import java.util.Set; */ public class BrowsablePlayerConnector extends Handler { private static final String TAG = "AvrcpBrowsablePlayerConnector"; private static final boolean DEBUG = true; private static final long CONNECT_TIMEOUT_MS = 10000; // Time in ms to wait for a connection private static final int MSG_GET_FOLDER_ITEMS_CB = 0; Loading Loading @@ -91,11 +90,9 @@ public class BrowsablePlayerConnector extends Handler { newConnector.mPendingPlayers.add(player); player.connect((int status, BrowsedPlayerWrapper wrapper) -> { // Use the handler to avoid concurrency issues if (DEBUG) { Log.d(TAG, "Browse player callback called: package=" + info.serviceInfo.packageName + " : status=" + status); } newConnector.obtainMessage(MSG_CONNECT_CB, status, 0, wrapper).sendToTarget(); }); } Loading @@ -111,7 +108,7 @@ public class BrowsablePlayerConnector extends Handler { private void removePendingPlayers() { for (BrowsedPlayerWrapper wrapper : mPendingPlayers) { if (DEBUG) Log.d(TAG, "Disconnecting " + wrapper.getPackageName()); Log.d(TAG, "Disconnecting " + wrapper.getPackageName()); wrapper.disconnect(); } mPendingPlayers.clear(); Loading @@ -127,7 +124,7 @@ public class BrowsablePlayerConnector extends Handler { @Override public void handleMessage(Message msg) { if (DEBUG) Log.d(TAG, "Received a message: msg.what=" + msg.what); Log.d(TAG, "Received a message: msg.what=" + msg.what); switch(msg.what) { case MSG_GET_FOLDER_ITEMS_CB: { int status = msg.arg1; Loading Loading @@ -163,9 +160,7 @@ public class BrowsablePlayerConnector extends Handler { } // Check to see if the root folder has any items if (DEBUG) { Log.i(TAG, "Checking root contents for " + wrapper.getPackageName()); } wrapper.getFolderItems(wrapper.getRootId(), (int status, String mediaId, List<ListItem> results) -> { // Send the response as a message so that it is properly Loading android/app/src/com/android/bluetooth/audio_util/BrowsedPlayerWrapper.java +12 −17 Original line number Diff line number Diff line Loading @@ -38,8 +38,7 @@ import java.util.Map; * Right now this is ok because the BrowsablePlayerConnector will handle timeouts. */ class BrowsedPlayerWrapper { private static final String TAG = "BrowsedPlayerWrapper"; private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); private static final String TAG = BrowsedPlayerWrapper.class.getSimpleName(); enum ConnectionState { DISCONNECTED, Loading Loading @@ -152,7 +151,7 @@ class BrowsedPlayerWrapper { * currently open. */ void disconnect() { if (DEBUG) Log.d(TAG, "disconnect: Disconnecting from " + mPackageName); Log.d(TAG, "disconnect: Disconnecting from " + mPackageName); mWrappedBrowser.disconnect(); clearCallback(); } Loading @@ -165,7 +164,7 @@ class BrowsedPlayerWrapper { } mCallback = callback; } if (DEBUG) Log.d(TAG, "Set mCallback, connecting to " + mPackageName); Log.d(TAG, "Set mCallback, connecting to " + mPackageName); mWrappedBrowser.connect(); return true; } Loading @@ -179,7 +178,7 @@ class BrowsedPlayerWrapper { } callback = mCallback; } if (DEBUG) Log.d(TAG, "Executing callback"); Log.d(TAG, "Executing callback"); callback.run(status, player); } Loading @@ -187,7 +186,7 @@ class BrowsedPlayerWrapper { synchronized (mCallbackLock) { mCallback = null; } if (DEBUG) Log.d(TAG, "mCallback = null"); Log.d(TAG, "mCallback = null"); } public String getPackageName() { Loading @@ -205,9 +204,9 @@ class BrowsedPlayerWrapper { * @return False if any other requests are being serviced, True otherwise */ public boolean playItem(String mediaId) { if (DEBUG) Log.d(TAG, "playItem: Play item from media ID: " + mediaId); Log.d(TAG, "playItem: Play item from media ID: " + mediaId); return setCallbackAndConnect((int status, BrowsedPlayerWrapper wrapper) -> { if (DEBUG) Log.d(TAG, "playItem: Connected to browsable player " + mPackageName); Log.d(TAG, "playItem: Connected to browsable player " + mPackageName); MediaController controller = MediaControllerFactory.make(mContext, wrapper.mWrappedBrowser.getSessionToken()); MediaController.TransportControls ctrl = controller.getTransportControls(); Loading Loading @@ -249,7 +248,7 @@ class BrowsedPlayerWrapper { + "with null browse callback"); } if (DEBUG) Log.d(TAG, "getFolderItems: Connecting to browsable player: " + mPackageName); Log.d(TAG, "getFolderItems: Connecting to browsable player: " + mPackageName); return setCallbackAndConnect((int status, BrowsedPlayerWrapper wrapper) -> { Log.i(TAG, "getFolderItems: Connected to browsable player: " + mPackageName); if (status != STATUS_SUCCESS) { Loading Loading @@ -390,7 +389,7 @@ class BrowsedPlayerWrapper { @Override public void onPlaybackStateChanged(@Nullable PlaybackState state) { if (DEBUG) Log.d(TAG, "MediaPlayback: " + mPackageName + " -> " + state.toString()); Log.d(TAG, "MediaPlayback: " + mPackageName + " -> " + state.toString()); if (state.getState() == PlaybackState.STATE_PLAYING) { mTimeoutHandler.removeMessages(TimeoutHandler.MSG_TIMEOUT); mPlaybackCallback.run(STATUS_SUCCESS); Loading Loading @@ -424,9 +423,7 @@ class BrowsedPlayerWrapper { @Override public void onChildrenLoaded(String parentId, List<MediaItem> children) { if (DEBUG) { Log.d(TAG, "onChildrenLoaded: mediaId=" + parentId + " size= " + children.size()); } if (mBrowseCallback == null) { Log.w(TAG, "onChildrenLoaded: " + mPackageName Loading @@ -441,10 +438,8 @@ class BrowsedPlayerWrapper { ArrayList<ListItem> return_list = new ArrayList<ListItem>(); for (MediaItem item : children) { if (DEBUG) { Log.d(TAG, "onChildrenLoaded: Child=\"" + item.toString() + "\", ID=\"" + item.getMediaId() + "\""); } if (item.isBrowsable()) { CharSequence titleCharSequence = item.getDescription().getTitle(); Loading android/app/src/com/android/bluetooth/audio_util/GPMWrapper.java +3 −6 Original line number Diff line number Diff line Loading @@ -28,7 +28,6 @@ import android.util.Log; */ class GPMWrapper extends MediaPlayerWrapper { private static final String TAG = "AvrcpGPMWrapper"; private static final boolean DEBUG = true; GPMWrapper(Context context, MediaController controller, Looper looper) { super(context, controller, looper); Loading @@ -54,11 +53,9 @@ class GPMWrapper extends MediaPlayerWrapper { Metadata qitem = Util.toMetadata(mContext, currItem); Metadata mdata = Util.toMetadata(mContext, getMetadata()); if (currItem == null || !qitem.equals(mdata)) { if (DEBUG) { Log.d(TAG, "Metadata currently out of sync for Google Play Music"); Log.d(TAG, " └ Current queueItem: " + qitem); Log.d(TAG, " └ Current metadata : " + mdata); } return false; } Loading android/app/src/com/android/bluetooth/audio_util/MediaPlayerList.java +3 −6 Original line number Diff line number Diff line Loading @@ -63,8 +63,7 @@ import java.util.regex.Pattern; * player would effectively cause player switch by sending a play command to that player. */ public class MediaPlayerList { private static final String TAG = "MediaPlayerList"; private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); private static final String TAG = MediaPlayerList.class.getSimpleName(); static boolean sTesting = false; private static final String PACKAGE_SCHEME = "package"; Loading Loading @@ -767,7 +766,7 @@ public class MediaPlayerList { || action.equals(Intent.ACTION_PACKAGE_CHANGED)) { String packageName = intent.getData().getSchemeSpecificPart(); if (packageName != null) { if (DEBUG) Log.d(TAG, "Name of package changed: " + packageName); Log.d(TAG, "Name of package changed: " + packageName); // TODO (apanicke): Handle either updating or adding the new package. // Check if its browsable and send the UIDS changed to update the // root folder Loading Loading @@ -968,8 +967,6 @@ public class MediaPlayerList { } private static void d(String message) { if (DEBUG) { Log.d(TAG, message); } } } android/app/src/com/android/bluetooth/audio_util/MediaPlayerWrapper.java +9 −12 Original line number Diff line number Diff line Loading @@ -42,7 +42,6 @@ import java.util.Objects; */ public class MediaPlayerWrapper { private static final String TAG = "AudioMediaPlayerWrapper"; private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); static boolean sTesting = false; private static final int PLAYBACK_STATE_CHANGE_EVENT_LOGGER_SIZE = 5; private static final String PLAYBACK_STATE_CHANGE_LOGGER_EVENT_TITLE = Loading Loading @@ -275,11 +274,9 @@ public class MediaPlayerWrapper { Metadata qitem = Util.toMetadata(mContext, currItem); Metadata mdata = Util.toMetadata(mContext, getMetadata()); if (currItem == null || !qitem.equals(mdata)) { if (DEBUG) { Log.d(TAG, "Metadata currently out of sync for " + mPackageName); Log.d(TAG, " └ Current queueItem: " + qitem); Log.d(TAG, " └ Current metadata : " + mdata); } // Some player do not provide full song info in queue item, allow case // that only title and artist match. Loading Loading @@ -469,10 +466,8 @@ public class MediaPlayerWrapper { return; } if (DEBUG) { Log.v(TAG, "onMetadataChanged(): " + mPackageName + " : " + Util.toMetadata(mContext, mediaMetadata)); } if (!Objects.equals(mediaMetadata, getMetadata())) { e("The callback metadata doesn't match controller metadata"); Loading Loading @@ -549,7 +544,9 @@ public class MediaPlayerWrapper { return; } if (DEBUG) { // The following is a large enough debug operation such that we want to guard it was an // isLoggable check if (Log.isLoggable(TAG, Log.DEBUG)) { for (int i = 0; i < current_queue.size(); i++) { Log.d(TAG, " └ QueueItem(" + i + "): " + current_queue.get(i)); } Loading Loading @@ -601,7 +598,7 @@ public class MediaPlayerWrapper { } private void d(String message) { if (DEBUG) Log.d(TAG, mPackageName + ": " + message); Log.d(TAG, mPackageName + ": " + message); } @VisibleForTesting Loading Loading
android/app/src/com/android/bluetooth/audio_util/BrowsablePlayerConnector.java +6 −11 Original line number Diff line number Diff line Loading @@ -43,7 +43,6 @@ import java.util.Set; */ public class BrowsablePlayerConnector extends Handler { private static final String TAG = "AvrcpBrowsablePlayerConnector"; private static final boolean DEBUG = true; private static final long CONNECT_TIMEOUT_MS = 10000; // Time in ms to wait for a connection private static final int MSG_GET_FOLDER_ITEMS_CB = 0; Loading Loading @@ -91,11 +90,9 @@ public class BrowsablePlayerConnector extends Handler { newConnector.mPendingPlayers.add(player); player.connect((int status, BrowsedPlayerWrapper wrapper) -> { // Use the handler to avoid concurrency issues if (DEBUG) { Log.d(TAG, "Browse player callback called: package=" + info.serviceInfo.packageName + " : status=" + status); } newConnector.obtainMessage(MSG_CONNECT_CB, status, 0, wrapper).sendToTarget(); }); } Loading @@ -111,7 +108,7 @@ public class BrowsablePlayerConnector extends Handler { private void removePendingPlayers() { for (BrowsedPlayerWrapper wrapper : mPendingPlayers) { if (DEBUG) Log.d(TAG, "Disconnecting " + wrapper.getPackageName()); Log.d(TAG, "Disconnecting " + wrapper.getPackageName()); wrapper.disconnect(); } mPendingPlayers.clear(); Loading @@ -127,7 +124,7 @@ public class BrowsablePlayerConnector extends Handler { @Override public void handleMessage(Message msg) { if (DEBUG) Log.d(TAG, "Received a message: msg.what=" + msg.what); Log.d(TAG, "Received a message: msg.what=" + msg.what); switch(msg.what) { case MSG_GET_FOLDER_ITEMS_CB: { int status = msg.arg1; Loading Loading @@ -163,9 +160,7 @@ public class BrowsablePlayerConnector extends Handler { } // Check to see if the root folder has any items if (DEBUG) { Log.i(TAG, "Checking root contents for " + wrapper.getPackageName()); } wrapper.getFolderItems(wrapper.getRootId(), (int status, String mediaId, List<ListItem> results) -> { // Send the response as a message so that it is properly Loading
android/app/src/com/android/bluetooth/audio_util/BrowsedPlayerWrapper.java +12 −17 Original line number Diff line number Diff line Loading @@ -38,8 +38,7 @@ import java.util.Map; * Right now this is ok because the BrowsablePlayerConnector will handle timeouts. */ class BrowsedPlayerWrapper { private static final String TAG = "BrowsedPlayerWrapper"; private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); private static final String TAG = BrowsedPlayerWrapper.class.getSimpleName(); enum ConnectionState { DISCONNECTED, Loading Loading @@ -152,7 +151,7 @@ class BrowsedPlayerWrapper { * currently open. */ void disconnect() { if (DEBUG) Log.d(TAG, "disconnect: Disconnecting from " + mPackageName); Log.d(TAG, "disconnect: Disconnecting from " + mPackageName); mWrappedBrowser.disconnect(); clearCallback(); } Loading @@ -165,7 +164,7 @@ class BrowsedPlayerWrapper { } mCallback = callback; } if (DEBUG) Log.d(TAG, "Set mCallback, connecting to " + mPackageName); Log.d(TAG, "Set mCallback, connecting to " + mPackageName); mWrappedBrowser.connect(); return true; } Loading @@ -179,7 +178,7 @@ class BrowsedPlayerWrapper { } callback = mCallback; } if (DEBUG) Log.d(TAG, "Executing callback"); Log.d(TAG, "Executing callback"); callback.run(status, player); } Loading @@ -187,7 +186,7 @@ class BrowsedPlayerWrapper { synchronized (mCallbackLock) { mCallback = null; } if (DEBUG) Log.d(TAG, "mCallback = null"); Log.d(TAG, "mCallback = null"); } public String getPackageName() { Loading @@ -205,9 +204,9 @@ class BrowsedPlayerWrapper { * @return False if any other requests are being serviced, True otherwise */ public boolean playItem(String mediaId) { if (DEBUG) Log.d(TAG, "playItem: Play item from media ID: " + mediaId); Log.d(TAG, "playItem: Play item from media ID: " + mediaId); return setCallbackAndConnect((int status, BrowsedPlayerWrapper wrapper) -> { if (DEBUG) Log.d(TAG, "playItem: Connected to browsable player " + mPackageName); Log.d(TAG, "playItem: Connected to browsable player " + mPackageName); MediaController controller = MediaControllerFactory.make(mContext, wrapper.mWrappedBrowser.getSessionToken()); MediaController.TransportControls ctrl = controller.getTransportControls(); Loading Loading @@ -249,7 +248,7 @@ class BrowsedPlayerWrapper { + "with null browse callback"); } if (DEBUG) Log.d(TAG, "getFolderItems: Connecting to browsable player: " + mPackageName); Log.d(TAG, "getFolderItems: Connecting to browsable player: " + mPackageName); return setCallbackAndConnect((int status, BrowsedPlayerWrapper wrapper) -> { Log.i(TAG, "getFolderItems: Connected to browsable player: " + mPackageName); if (status != STATUS_SUCCESS) { Loading Loading @@ -390,7 +389,7 @@ class BrowsedPlayerWrapper { @Override public void onPlaybackStateChanged(@Nullable PlaybackState state) { if (DEBUG) Log.d(TAG, "MediaPlayback: " + mPackageName + " -> " + state.toString()); Log.d(TAG, "MediaPlayback: " + mPackageName + " -> " + state.toString()); if (state.getState() == PlaybackState.STATE_PLAYING) { mTimeoutHandler.removeMessages(TimeoutHandler.MSG_TIMEOUT); mPlaybackCallback.run(STATUS_SUCCESS); Loading Loading @@ -424,9 +423,7 @@ class BrowsedPlayerWrapper { @Override public void onChildrenLoaded(String parentId, List<MediaItem> children) { if (DEBUG) { Log.d(TAG, "onChildrenLoaded: mediaId=" + parentId + " size= " + children.size()); } if (mBrowseCallback == null) { Log.w(TAG, "onChildrenLoaded: " + mPackageName Loading @@ -441,10 +438,8 @@ class BrowsedPlayerWrapper { ArrayList<ListItem> return_list = new ArrayList<ListItem>(); for (MediaItem item : children) { if (DEBUG) { Log.d(TAG, "onChildrenLoaded: Child=\"" + item.toString() + "\", ID=\"" + item.getMediaId() + "\""); } if (item.isBrowsable()) { CharSequence titleCharSequence = item.getDescription().getTitle(); Loading
android/app/src/com/android/bluetooth/audio_util/GPMWrapper.java +3 −6 Original line number Diff line number Diff line Loading @@ -28,7 +28,6 @@ import android.util.Log; */ class GPMWrapper extends MediaPlayerWrapper { private static final String TAG = "AvrcpGPMWrapper"; private static final boolean DEBUG = true; GPMWrapper(Context context, MediaController controller, Looper looper) { super(context, controller, looper); Loading @@ -54,11 +53,9 @@ class GPMWrapper extends MediaPlayerWrapper { Metadata qitem = Util.toMetadata(mContext, currItem); Metadata mdata = Util.toMetadata(mContext, getMetadata()); if (currItem == null || !qitem.equals(mdata)) { if (DEBUG) { Log.d(TAG, "Metadata currently out of sync for Google Play Music"); Log.d(TAG, " └ Current queueItem: " + qitem); Log.d(TAG, " └ Current metadata : " + mdata); } return false; } Loading
android/app/src/com/android/bluetooth/audio_util/MediaPlayerList.java +3 −6 Original line number Diff line number Diff line Loading @@ -63,8 +63,7 @@ import java.util.regex.Pattern; * player would effectively cause player switch by sending a play command to that player. */ public class MediaPlayerList { private static final String TAG = "MediaPlayerList"; private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); private static final String TAG = MediaPlayerList.class.getSimpleName(); static boolean sTesting = false; private static final String PACKAGE_SCHEME = "package"; Loading Loading @@ -767,7 +766,7 @@ public class MediaPlayerList { || action.equals(Intent.ACTION_PACKAGE_CHANGED)) { String packageName = intent.getData().getSchemeSpecificPart(); if (packageName != null) { if (DEBUG) Log.d(TAG, "Name of package changed: " + packageName); Log.d(TAG, "Name of package changed: " + packageName); // TODO (apanicke): Handle either updating or adding the new package. // Check if its browsable and send the UIDS changed to update the // root folder Loading Loading @@ -968,8 +967,6 @@ public class MediaPlayerList { } private static void d(String message) { if (DEBUG) { Log.d(TAG, message); } } }
android/app/src/com/android/bluetooth/audio_util/MediaPlayerWrapper.java +9 −12 Original line number Diff line number Diff line Loading @@ -42,7 +42,6 @@ import java.util.Objects; */ public class MediaPlayerWrapper { private static final String TAG = "AudioMediaPlayerWrapper"; private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); static boolean sTesting = false; private static final int PLAYBACK_STATE_CHANGE_EVENT_LOGGER_SIZE = 5; private static final String PLAYBACK_STATE_CHANGE_LOGGER_EVENT_TITLE = Loading Loading @@ -275,11 +274,9 @@ public class MediaPlayerWrapper { Metadata qitem = Util.toMetadata(mContext, currItem); Metadata mdata = Util.toMetadata(mContext, getMetadata()); if (currItem == null || !qitem.equals(mdata)) { if (DEBUG) { Log.d(TAG, "Metadata currently out of sync for " + mPackageName); Log.d(TAG, " └ Current queueItem: " + qitem); Log.d(TAG, " └ Current metadata : " + mdata); } // Some player do not provide full song info in queue item, allow case // that only title and artist match. Loading Loading @@ -469,10 +466,8 @@ public class MediaPlayerWrapper { return; } if (DEBUG) { Log.v(TAG, "onMetadataChanged(): " + mPackageName + " : " + Util.toMetadata(mContext, mediaMetadata)); } if (!Objects.equals(mediaMetadata, getMetadata())) { e("The callback metadata doesn't match controller metadata"); Loading Loading @@ -549,7 +544,9 @@ public class MediaPlayerWrapper { return; } if (DEBUG) { // The following is a large enough debug operation such that we want to guard it was an // isLoggable check if (Log.isLoggable(TAG, Log.DEBUG)) { for (int i = 0; i < current_queue.size(); i++) { Log.d(TAG, " └ QueueItem(" + i + "): " + current_queue.get(i)); } Loading Loading @@ -601,7 +598,7 @@ public class MediaPlayerWrapper { } private void d(String message) { if (DEBUG) Log.d(TAG, mPackageName + ": " + message); Log.d(TAG, mPackageName + ": " + message); } @VisibleForTesting Loading