From 78c64cdbd82a4d8feb7faf43109b86ab87252dd1 Mon Sep 17 00:00:00 2001 From: RoboErik Date: Thu, 14 Aug 2014 18:42:09 -0700 Subject: [PATCH] Fix crash in legacy apps that register without a looper Some legacy apps registered their media button receiver in a thread without a looper. If this happens we need to use the main looper to prevent a crash. bug: 16306226 Change-Id: Idf472e649393e2a7ce2a3e1cbb3476003ab17f34 --- cmds/media/src/com/android/commands/media/Media.java | 10 +++++++++- .../media/session/MediaSessionLegacyHelper.java | 7 +++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/cmds/media/src/com/android/commands/media/Media.java b/cmds/media/src/com/android/commands/media/Media.java index b13b0093db360..b37f896c6c42b 100644 --- a/cmds/media/src/com/android/commands/media/Media.java +++ b/cmds/media/src/com/android/commands/media/Media.java @@ -225,7 +225,7 @@ public class Media extends BaseCommand { void printUsageMessage() { try { System.out.println("V2Monitoring session " + mController.getTag() - + "... available commands:"); + + "... available commands: play, pause, next, previous"); } catch (RemoteException e) { System.out.println("Error trying to monitor session!"); } @@ -257,6 +257,14 @@ public class Media extends BaseCommand { addNewline = false; } else if ("q".equals(line) || "quit".equals(line)) { break; + } else if ("play".equals(line)) { + mController.play(); + } else if ("pause".equals(line)) { + mController.pause(); + } else if ("next".equals(line)) { + mController.next(); + } else if ("previous".equals(line)) { + mController.previous(); } else { System.out.println("Invalid command: " + line); } diff --git a/media/java/android/media/session/MediaSessionLegacyHelper.java b/media/java/android/media/session/MediaSessionLegacyHelper.java index a182982e2a7cf..aa196a9fea48a 100644 --- a/media/java/android/media/session/MediaSessionLegacyHelper.java +++ b/media/java/android/media/session/MediaSessionLegacyHelper.java @@ -290,7 +290,6 @@ public class MediaSessionLegacyHelper { if (DEBUG) { Log.d(TAG, "addMediaButtonListener already added " + pi); } - return; } holder.mMediaButtonListener = new MediaButtonListener(pi, context); // TODO determine if handling transport performer commands should also @@ -468,7 +467,11 @@ public class MediaSessionLegacyHelper { mSessions.remove(mPi); } else if (mCb == null) { mCb = new SessionCallback(); - mSession.setCallback(mCb); + Handler handler = null; + if (Looper.myLooper() == null) { + handler = new Handler(Looper.getMainLooper()); + } + mSession.setCallback(mCb, handler); } }