From 174b8b7fc4d55e8c63eb3ed0b71f1519a13e345d Mon Sep 17 00:00:00 2001 From: Angus Kong Date: Mon, 31 Oct 2011 15:16:31 +0800 Subject: Add forced sound for panorama mode. bug:5538024 Change-Id: I59b662a0cc53471ba905391c016c78ebd9ae1d73 --- .../android/camera/panorama/PanoramaActivity.java | 42 ++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'src') diff --git a/src/com/android/camera/panorama/PanoramaActivity.java b/src/com/android/camera/panorama/PanoramaActivity.java index 43d33a8..7a7cf78 100755 --- a/src/com/android/camera/panorama/PanoramaActivity.java +++ b/src/com/android/camera/panorama/PanoramaActivity.java @@ -26,6 +26,7 @@ import com.android.camera.ModePicker; import com.android.camera.OnClickAttr; import com.android.camera.R; import com.android.camera.ShutterButton; +import com.android.camera.SoundPlayer; import com.android.camera.Storage; import com.android.camera.Thumbnail; import com.android.camera.Util; @@ -37,6 +38,7 @@ import android.app.ProgressDialog; import android.content.ContentResolver; import android.content.Context; import android.content.DialogInterface; +import android.content.res.AssetFileDescriptor; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; @@ -54,6 +56,8 @@ import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Message; +import android.os.ParcelFileDescriptor; +import android.os.SystemProperties; import android.util.Log; import android.view.Gravity; import android.view.Menu; @@ -65,6 +69,7 @@ import android.widget.ImageView; import android.widget.TextView; import java.io.ByteArrayOutputStream; +import java.io.FileNotFoundException; import java.io.File; import java.util.List; @@ -96,6 +101,8 @@ public class PanoramaActivity extends ActivityBase implements // Ratio of nanosecond to second private static final float NS2S = 1.0f / 1000000000.0f; + private static final String VIDEO_RECORD_SOUND = "/system/media/audio/ui/VideoRecord.ogg"; + private boolean mPausing; private View mPanoLayout; @@ -158,6 +165,8 @@ public class PanoramaActivity extends ActivityBase implements private float[] mTransformMatrix; private float mHorizontalViewAngle; + private SoundPlayer mRecordSound; + // Prefer FOCUS_MODE_INFINITY to FOCUS_MODE_CONTINUOUS_VIDEO because of // getting a better image quality by the former. private String mTargetFocusMode = Parameters.FOCUS_MODE_INFINITY; @@ -704,9 +713,11 @@ public class PanoramaActivity extends ActivityBase implements // right now. switch (mCaptureState) { case CAPTURE_STATE_VIEWFINDER: + if (mRecordSound != null) mRecordSound.play(); startCapture(); break; case CAPTURE_STATE_MOSAIC: + if (mRecordSound != null) mRecordSound.play(); stopCapture(false); } } @@ -890,6 +901,34 @@ public class PanoramaActivity extends ActivityBase implements mMosaicFrameProcessor.initialize(); } + private void initSoundRecorder() { + // Construct sound player; use enforced sound output if necessary + File recordSoundFile = new File(VIDEO_RECORD_SOUND); + try { + ParcelFileDescriptor recordSoundParcel = + ParcelFileDescriptor.open(recordSoundFile, + ParcelFileDescriptor.MODE_READ_ONLY); + AssetFileDescriptor recordSoundAsset = + new AssetFileDescriptor(recordSoundParcel, 0, + AssetFileDescriptor.UNKNOWN_LENGTH); + if (SystemProperties.get("ro.camera.sound.forced", "0").equals("0")) { + mRecordSound = new SoundPlayer(recordSoundAsset, false); + } else { + mRecordSound = new SoundPlayer(recordSoundAsset, true); + } + } catch (java.io.FileNotFoundException e) { + Log.e(TAG, "System video record sound not found"); + mRecordSound = null; + } + } + + private void releaseSoundRecorder() { + if (mRecordSound != null) { + mRecordSound.release(); + mRecordSound = null; + } + } + @Override protected void onPause() { super.onPause(); @@ -908,6 +947,7 @@ public class PanoramaActivity extends ActivityBase implements } releaseCamera(); + releaseSoundRecorder(); mMosaicView.onPause(); clearMosaicFrameProcessorIfNeeded(); mOrientationEventListener.disable(); @@ -922,6 +962,8 @@ public class PanoramaActivity extends ActivityBase implements mCaptureState = CAPTURE_STATE_VIEWFINDER; setupCamera(); + initSoundRecorder(); + // Camera must be initialized before MosaicFrameProcessor is initialized. The preview size // has to be decided by camera device. initMosaicFrameProcessorIfNeeded(); -- cgit v1.1