diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/provider/UltraSonicAppWidgetProvider.java b/ultrasonic/src/main/java/org/moire/ultrasonic/provider/UltraSonicAppWidgetProvider.java index f710fe8e..849ded07 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/provider/UltraSonicAppWidgetProvider.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/provider/UltraSonicAppWidgetProvider.java @@ -17,6 +17,7 @@ import org.moire.ultrasonic.R; import org.moire.ultrasonic.activity.DownloadActivity; import org.moire.ultrasonic.activity.MainActivity; import org.moire.ultrasonic.domain.MusicDirectory; +import org.moire.ultrasonic.receiver.MediaButtonIntentReceiver; import org.moire.ultrasonic.service.MediaPlayerController; import org.moire.ultrasonic.util.Constants; import org.moire.ultrasonic.util.FileUtil; @@ -199,19 +200,22 @@ public class UltraSonicAppWidgetProvider extends AppWidgetProvider // Emulate media button clicks. intent = new Intent(Constants.CMD_PROCESS_KEYCODE); - intent.setPackage(context.getPackageName()); + //intent.setPackage(context.getPackageName()); + intent.setComponent(new ComponentName(context, MediaButtonIntentReceiver.class)); intent.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE)); pendingIntent = PendingIntent.getBroadcast(context, 11, intent, 0); views.setOnClickPendingIntent(R.id.control_play, pendingIntent); intent = new Intent(Constants.CMD_PROCESS_KEYCODE); - intent.setPackage(context.getPackageName()); + //intent.setPackage(context.getPackageName()); + intent.setComponent(new ComponentName(context, MediaButtonIntentReceiver.class)); intent.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_NEXT)); pendingIntent = PendingIntent.getBroadcast(context, 12, intent, 0); views.setOnClickPendingIntent(R.id.control_next, pendingIntent); intent = new Intent(Constants.CMD_PROCESS_KEYCODE); - intent.setPackage(context.getPackageName()); + //intent.setPackage(context.getPackageName()); + intent.setComponent(new ComponentName(context, MediaButtonIntentReceiver.class)); intent.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_PREVIOUS)); pendingIntent = PendingIntent.getBroadcast(context, 13, intent, 0); views.setOnClickPendingIntent(R.id.control_previous, pendingIntent); diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/receiver/MediaButtonIntentReceiver.java b/ultrasonic/src/main/java/org/moire/ultrasonic/receiver/MediaButtonIntentReceiver.java index ee636c40..51b9db57 100644 --- a/ultrasonic/src/main/java/org/moire/ultrasonic/receiver/MediaButtonIntentReceiver.java +++ b/ultrasonic/src/main/java/org/moire/ultrasonic/receiver/MediaButtonIntentReceiver.java @@ -44,37 +44,40 @@ public class MediaButtonIntentReceiver extends BroadcastReceiver @Override public void onReceive(Context context, Intent intent) { - if (Util.getMediaButtonsPreference(context)) + String intentAction = intent.getAction(); + + // If media button are turned off and we received a media button, exit + if (!Util.getMediaButtonsPreference(context) && + Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) return; + + // Only process media buttons and CMD_PROCESS_KEYCODE, which is received from the widgets + if (!Intent.ACTION_MEDIA_BUTTON.equals(intentAction) && + !Constants.CMD_PROCESS_KEYCODE.equals(intentAction)) return; + + Bundle extras = intent.getExtras(); + + if (extras == null) { - String intentAction = intent.getAction(); + return; + } - if (!Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) return; + Parcelable event = (Parcelable) extras.get(Intent.EXTRA_KEY_EVENT); + Log.i(TAG, "Got MEDIA_BUTTON key event: " + event); - Bundle extras = intent.getExtras(); + try + { + Intent serviceIntent = new Intent(Constants.CMD_PROCESS_KEYCODE); + serviceIntent.putExtra(Intent.EXTRA_KEY_EVENT, event); + lifecycleSupport.getValue().receiveIntent(serviceIntent); - if (extras == null) + if (isOrderedBroadcast()) { - return; - } - - Parcelable event = (Parcelable) extras.get(Intent.EXTRA_KEY_EVENT); - Log.i(TAG, "Got MEDIA_BUTTON key event: " + event); - - try - { - Intent serviceIntent = new Intent(Constants.CMD_PROCESS_KEYCODE); - serviceIntent.putExtra(Intent.EXTRA_KEY_EVENT, event); - lifecycleSupport.getValue().receiveIntent(serviceIntent); - - if (isOrderedBroadcast()) - { - abortBroadcast(); - } - } - catch (Exception x) - { - // Ignored. + abortBroadcast(); } } + catch (Exception x) + { + // Ignored. + } } }