1/*
2 * Copyright (C) 2011 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.example.android.musicplayer;
18
19import android.content.BroadcastReceiver;
20import android.content.Context;
21import android.content.Intent;
22import android.util.Log;
23import android.view.KeyEvent;
24import android.widget.Toast;
25
26/**
27 * Receives broadcasted intents. In particular, we are interested in the
28 * android.media.AUDIO_BECOMING_NOISY and android.intent.action.MEDIA_BUTTON intents, which is
29 * broadcast, for example, when the user disconnects the headphones. This class works because we are
30 * declaring it in a <receiver> tag in AndroidManifest.xml.
31 */
32public class MusicIntentReceiver extends BroadcastReceiver {
33    @Override
34    public void onReceive(Context context, Intent intent) {
35        if (intent.getAction().equals(android.media.AudioManager.ACTION_AUDIO_BECOMING_NOISY)) {
36            Toast.makeText(context, "Headphones disconnected.", Toast.LENGTH_SHORT).show();
37
38            // send an intent to our MusicService to telling it to pause the audio
39            context.startService(new Intent(MusicService.ACTION_PAUSE));
40
41        } else if (intent.getAction().equals(Intent.ACTION_MEDIA_BUTTON)) {
42            KeyEvent keyEvent = (KeyEvent) intent.getExtras().get(Intent.EXTRA_KEY_EVENT);
43            if (keyEvent.getAction() != KeyEvent.ACTION_DOWN)
44                return;
45
46            switch (keyEvent.getKeyCode()) {
47                case KeyEvent.KEYCODE_HEADSETHOOK:
48                case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
49                    context.startService(new Intent(MusicService.ACTION_TOGGLE_PLAYBACK));
50                    break;
51                case KeyEvent.KEYCODE_MEDIA_PLAY:
52                    context.startService(new Intent(MusicService.ACTION_PLAY));
53                    break;
54                case KeyEvent.KEYCODE_MEDIA_PAUSE:
55                    context.startService(new Intent(MusicService.ACTION_PAUSE));
56                    break;
57                case KeyEvent.KEYCODE_MEDIA_STOP:
58                    context.startService(new Intent(MusicService.ACTION_STOP));
59                    break;
60                case KeyEvent.KEYCODE_MEDIA_NEXT:
61                    context.startService(new Intent(MusicService.ACTION_SKIP));
62                    break;
63                case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
64                    // TODO: ensure that doing this in rapid succession actually plays the
65                    // previous song
66                    context.startService(new Intent(MusicService.ACTION_REWIND));
67                    break;
68            }
69        }
70    }
71}
72