Merge "NFC: Move playSound to BeamManager"
diff --git a/src/com/android/nfc/beam/BeamManager.java b/src/com/android/nfc/beam/BeamManager.java
index ba16aa5..87ea881 100644
--- a/src/com/android/nfc/beam/BeamManager.java
+++ b/src/com/android/nfc/beam/BeamManager.java
@@ -15,6 +15,7 @@
 */
 package com.android.nfc.beam;
 
+import com.android.nfc.NfcService;
 import com.android.nfc.handover.HandoverDataParser;
 
 import android.bluetooth.BluetoothDevice;
@@ -45,6 +46,8 @@
     private boolean mBeamInProgress;
     private final Handler mCallback;
 
+    private NfcService mNfcService;
+
     private static final class Singleton {
         public static final BeamManager INSTANCE = new BeamManager();
     }
@@ -53,6 +56,7 @@
         mLock = new Object();
         mBeamInProgress = false;
         mCallback = new Handler(Looper.getMainLooper(), this);
+        mNfcService = NfcService.getInstance();
     }
 
     public static BeamManager getInstance() {
@@ -118,6 +122,11 @@
             synchronized (mLock) {
                 mBeamInProgress = false;
             }
+
+            boolean success = msg.arg1 == 1;
+            if (success) {
+                mNfcService.playSound(NfcService.SOUND_END);
+            }
             return true;
         }
         return false;
diff --git a/src/com/android/nfc/beam/BeamReceiveService.java b/src/com/android/nfc/beam/BeamReceiveService.java
index 7deb014..9d24dd0 100644
--- a/src/com/android/nfc/beam/BeamReceiveService.java
+++ b/src/com/android/nfc/beam/BeamReceiveService.java
@@ -1,15 +1,11 @@
 package com.android.nfc.beam;
 
-import com.android.nfc.R;
-
 import android.app.Service;
 import android.bluetooth.BluetoothAdapter;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
-import android.media.AudioManager;
-import android.media.SoundPool;
 import android.os.Handler;
 import android.os.IBinder;
 import android.os.Message;
@@ -33,8 +29,6 @@
     private BeamStatusReceiver mBeamStatusReceiver;
     private boolean mBluetoothEnabledByNfc;
     private int mStartId;
-    private SoundPool mSoundPool;
-    private int mSuccessSound;
     private BeamTransferManager mTransferManager;
     private Messenger mCompleteCallback;
 
@@ -75,7 +69,7 @@
             if (DBG) Log.i(TAG, "Ready for incoming Beam transfer");
             return START_STICKY;
         } else {
-            invokeCompleteCallback();
+            invokeCompleteCallback(false);
             stopSelf(startId);
             return START_NOT_STICKY;
         }
@@ -86,9 +80,6 @@
     public void onCreate() {
         super.onCreate();
 
-        mSoundPool = new SoundPool(1, AudioManager.STREAM_NOTIFICATION, 0);
-        mSuccessSound = mSoundPool.load(this, R.raw.end, 1);
-
         // register BT state receiver
         IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
         registerReceiver(mBluetoothStateReceiver, filter);
@@ -97,10 +88,6 @@
     @Override
     public void onDestroy() {
         super.onDestroy();
-        if (mSoundPool != null) {
-            mSoundPool.release();
-        }
-
         if (mBeamStatusReceiver != null) {
             unregisterReceiver(mBeamStatusReceiver);
         }
@@ -139,10 +126,12 @@
         return true;
     }
 
-    private void invokeCompleteCallback() {
+    private void invokeCompleteCallback(boolean success) {
         if (mCompleteCallback != null) {
             try {
-                mCompleteCallback.send(Message.obtain(null, BeamManager.MSG_BEAM_COMPLETE));
+                Message msg = Message.obtain(null, BeamManager.MSG_BEAM_COMPLETE);
+                msg.arg1 = success ? 1 : 0;
+                mCompleteCallback.send(msg);
             } catch (RemoteException e) {
                 Log.e(TAG, "failed to invoke Beam complete callback", e);
             }
@@ -152,9 +141,7 @@
     @Override
     public void onTransferComplete(BeamTransferManager transfer, boolean success) {
         // Play success sound
-        if (success) {
-            mSoundPool.play(mSuccessSound, 1.0f, 1.0f, 0, 0, 1.0f);
-        } else {
+        if (!success) {
             if (DBG) Log.d(TAG, "Transfer failed, final state: " +
                     Integer.toString(transfer.mState));
         }
@@ -164,7 +151,7 @@
             mBluetoothAdapter.disable();
         }
 
-        invokeCompleteCallback();
+        invokeCompleteCallback(success);
         stopSelf(mStartId);
     }
 
diff --git a/src/com/android/nfc/beam/BeamSendService.java b/src/com/android/nfc/beam/BeamSendService.java
index 59019d5..6c013ea 100644
--- a/src/com/android/nfc/beam/BeamSendService.java
+++ b/src/com/android/nfc/beam/BeamSendService.java
@@ -16,16 +16,12 @@
 
 package com.android.nfc.beam;
 
-import com.android.nfc.R;
-
 import android.app.Service;
 import android.bluetooth.BluetoothAdapter;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
-import android.media.AudioManager;
-import android.media.SoundPool;
 import android.os.Handler;
 import android.os.IBinder;
 import android.os.Message;
@@ -47,8 +43,6 @@
     private boolean mBluetoothEnabledByNfc;
     private Messenger mCompleteCallback;
     private int mStartId;
-    SoundPool mSoundPool;
-    int mSuccessSound;
 
     private final BluetoothAdapter mBluetoothAdapter;
     private final BroadcastReceiver mBluetoothStateReceiver = new BroadcastReceiver() {
@@ -69,9 +63,6 @@
     public void onCreate() {
         super.onCreate();
 
-        mSoundPool = new SoundPool(1, AudioManager.STREAM_NOTIFICATION, 0);
-        mSuccessSound = mSoundPool.load(this, R.raw.end, 1);
-
         // register BT state receiver
         IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
         registerReceiver(mBluetoothStateReceiver, filter);
@@ -80,9 +71,6 @@
     @Override
     public void onDestroy() {
         super.onDestroy();
-        if (mSoundPool != null) {
-            mSoundPool.release();
-        }
 
         if (mBeamStatusReceiver != null) {
             unregisterReceiver(mBeamStatusReceiver);
@@ -108,7 +96,7 @@
             if (DBG) Log.i(TAG, "Starting outgoing Beam transfer");
             return START_STICKY;
         } else {
-            invokeCompleteCallback();
+            invokeCompleteCallback(false);
             stopSelf(startId);
             return START_NOT_STICKY;
         }
@@ -170,10 +158,12 @@
         }
     }
 
-    private void invokeCompleteCallback() {
+    private void invokeCompleteCallback(boolean success) {
         if (mCompleteCallback != null) {
             try {
-                mCompleteCallback.send(Message.obtain(null, BeamManager.MSG_BEAM_COMPLETE));
+                Message msg = Message.obtain(null, BeamManager.MSG_BEAM_COMPLETE);
+                msg.arg1 = success ? 1 : 0;
+                mCompleteCallback.send(msg);
             } catch (RemoteException e) {
                 Log.e(TAG, "failed to invoke Beam complete callback", e);
             }
@@ -183,9 +173,7 @@
     @Override
     public void onTransferComplete(BeamTransferManager transfer, boolean success) {
         // Play success sound
-        if (success) {
-            mSoundPool.play(mSuccessSound, 1.0f, 1.0f, 0, 0, 1.0f);
-        } else {
+        if (!success) {
             if (DBG) Log.d(TAG, "Transfer failed, final state: " +
                     Integer.toString(transfer.mState));
         }
@@ -195,7 +183,7 @@
             mBluetoothAdapter.disable();
         }
 
-        invokeCompleteCallback();
+        invokeCompleteCallback(success);
         stopSelf(mStartId);
     }