diff options
-rw-r--r-- | AndroidManifest.xml | 1 | ||||
-rw-r--r-- | res/drawable-hdpi/ic_muted_button.png | bin | 0 -> 3484 bytes | |||
-rw-r--r-- | res/drawable-hdpi/ic_unmuted_button.png | bin | 0 -> 2532 bytes | |||
-rw-r--r-- | res/drawable-xhdpi/ic_muted_button.png | bin | 0 -> 4559 bytes | |||
-rw-r--r-- | res/drawable-xhdpi/ic_unmuted_button.png | bin | 0 -> 3238 bytes | |||
-rw-r--r-- | res/drawable-xxhdpi/ic_muted_button.png | bin | 0 -> 7013 bytes | |||
-rw-r--r-- | res/drawable-xxhdpi/ic_unmuted_button.png | bin | 0 -> 4708 bytes | |||
-rw-r--r-- | res/layout/camera_controls.xml | 6 | ||||
-rw-r--r-- | res/values/dimens.xml | 1 | ||||
-rw-r--r-- | res/values/qcomstrings.xml | 2 | ||||
-rw-r--r-- | res/values/styles.xml | 5 | ||||
-rw-r--r-- | src/com/android/camera/PhotoUI.java | 7 | ||||
-rw-r--r-- | src/com/android/camera/VideoModule.java | 28 | ||||
-rw-r--r-- | src/com/android/camera/VideoUI.java | 21 | ||||
-rw-r--r-- | src/com/android/camera/WideAnglePanoramaUI.java | 4 | ||||
-rw-r--r-- | src/com/android/camera/ui/CameraControls.java | 32 |
16 files changed, 103 insertions, 4 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml index c84f7656a..cd9a41578 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -35,6 +35,7 @@ <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> + <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <supports-screens android:anyDensity="true" diff --git a/res/drawable-hdpi/ic_muted_button.png b/res/drawable-hdpi/ic_muted_button.png Binary files differnew file mode 100644 index 000000000..5068ae16e --- /dev/null +++ b/res/drawable-hdpi/ic_muted_button.png diff --git a/res/drawable-hdpi/ic_unmuted_button.png b/res/drawable-hdpi/ic_unmuted_button.png Binary files differnew file mode 100644 index 000000000..bcd722e99 --- /dev/null +++ b/res/drawable-hdpi/ic_unmuted_button.png diff --git a/res/drawable-xhdpi/ic_muted_button.png b/res/drawable-xhdpi/ic_muted_button.png Binary files differnew file mode 100644 index 000000000..db9ce97ba --- /dev/null +++ b/res/drawable-xhdpi/ic_muted_button.png diff --git a/res/drawable-xhdpi/ic_unmuted_button.png b/res/drawable-xhdpi/ic_unmuted_button.png Binary files differnew file mode 100644 index 000000000..78ad39d05 --- /dev/null +++ b/res/drawable-xhdpi/ic_unmuted_button.png diff --git a/res/drawable-xxhdpi/ic_muted_button.png b/res/drawable-xxhdpi/ic_muted_button.png Binary files differnew file mode 100644 index 000000000..dfc97b86c --- /dev/null +++ b/res/drawable-xxhdpi/ic_muted_button.png diff --git a/res/drawable-xxhdpi/ic_unmuted_button.png b/res/drawable-xxhdpi/ic_unmuted_button.png Binary files differnew file mode 100644 index 000000000..fd9ec79f9 --- /dev/null +++ b/res/drawable-xxhdpi/ic_unmuted_button.png diff --git a/res/layout/camera_controls.xml b/res/layout/camera_controls.xml index af47a13b6..66519d41c 100644 --- a/res/layout/camera_controls.xml +++ b/res/layout/camera_controls.xml @@ -39,6 +39,12 @@ android:contentDescription="@string/accessibility_menu_button" android:src="@drawable/ic_settings" /> + <com.android.camera.ui.RotateImageView + android:id="@+id/mute_button" + style="@style/MenuButton" + android:contentDescription="@string/mute_button_desc" + android:src="@drawable/ic_unmuted_button" /> + <com.android.camera.ui.ModuleSwitcher android:id="@+id/camera_switcher" style="@style/SwitcherButton" diff --git a/res/values/dimens.xml b/res/values/dimens.xml index 564cd099f..96394ad66 100644 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -94,6 +94,7 @@ <dimen name="switcher_size">72dp</dimen> <dimen name="menu_size">52dp</dimen> <dimen name="menu_outer_size">80dp</dimen> + <dimen name="mute_outer_size">80dp</dimen> <dimen name="toggle_size">30dp</dimen> <dimen name="toggle_outer_size">60dp</dimen> <dimen name="face_circle_stroke">2dip</dimen> diff --git a/res/values/qcomstrings.xml b/res/values/qcomstrings.xml index 388ac0ae5..4c681150d 100644 --- a/res/values/qcomstrings.xml +++ b/res/values/qcomstrings.xml @@ -910,5 +910,7 @@ <string name="camera_thermal_shutdown">Phone overheated, closing camera.</string> <string name="camera_server_died">Media server died, closing camera.</string> <string name="camera_unknown_error">Unknown error, closing camera.</string> + + <string name="mute_button_desc">Mute Button</string> </resources> diff --git a/res/values/styles.xml b/res/values/styles.xml index c6b99624e..bb13cc5c8 100644 --- a/res/values/styles.xml +++ b/res/values/styles.xml @@ -252,6 +252,11 @@ <item name="android:layout_height">@dimen/menu_outer_size</item> <item name="android:scaleType">center</item> </style> + <style name="MuteButton"> + <item name="android:layout_width">@dimen/mute_outer_size</item> + <item name="android:layout_height">@dimen/mute_outer_size</item> + <item name="android:scaleType">center</item> + </style> <style name="ToggleButton"> <item name="android:layout_width">@dimen/toggle_outer_size</item> <item name="android:layout_height">@dimen/toggle_outer_size</item> diff --git a/src/com/android/camera/PhotoUI.java b/src/com/android/camera/PhotoUI.java index 6f050d70a..1c09913b9 100644 --- a/src/com/android/camera/PhotoUI.java +++ b/src/com/android/camera/PhotoUI.java @@ -72,6 +72,7 @@ import com.android.camera.ui.ModuleSwitcher; import com.android.camera.ui.PieRenderer; import com.android.camera.ui.PieRenderer.PieListener; import com.android.camera.ui.RenderOverlay; +import com.android.camera.ui.RotateImageView; import com.android.camera.ui.RotateLayout; import com.android.camera.ui.RotateTextToast; import com.android.camera.ui.SelfieFlashView; @@ -289,6 +290,10 @@ public class PhotoUI implements PieListener, } }); mMenuButton = mRootView.findViewById(R.id.menu); + + RotateImageView muteButton = (RotateImageView)mRootView.findViewById(R.id.mute_button); + muteButton.setVisibility(View.GONE); + mCameraControls = (CameraControls) mRootView.findViewById(R.id.camera_controls); ViewStub faceViewStub = (ViewStub) mRootView .findViewById(R.id.face_view_stub); @@ -655,6 +660,8 @@ public class PhotoUI implements PieListener, if (mMenu != null) { mMenu.reloadPreferences(); } + RotateImageView muteButton = (RotateImageView)mRootView.findViewById(R.id.mute_button); + muteButton.setVisibility(View.GONE); } public void showLocationDialog() { diff --git a/src/com/android/camera/VideoModule.java b/src/com/android/camera/VideoModule.java index f6ff881c5..3b970455f 100644 --- a/src/com/android/camera/VideoModule.java +++ b/src/com/android/camera/VideoModule.java @@ -34,6 +34,7 @@ import android.hardware.Camera.CameraInfo; import android.hardware.Camera.Parameters; import android.hardware.Camera.Size; import android.location.Location; +import android.media.AudioManager; import android.media.CamcorderProfile; import android.media.CameraProfile; import android.media.MediaRecorder; @@ -63,6 +64,7 @@ import com.android.camera.CameraManager.CameraPictureCallback; import com.android.camera.CameraManager.CameraProxy; import com.android.camera.app.OrientationManager; import com.android.camera.exif.ExifInterface; +import com.android.camera.ui.RotateImageView; import com.android.camera.ui.RotateTextToast; import com.android.camera.util.AccessibilityUtils; import com.android.camera.util.ApiHelper; @@ -204,6 +206,9 @@ public class VideoModule implements CameraModule, // The preview window is on focus private boolean mPreviewFocused = false; + private boolean mIsMute = false; + private boolean mWasMute = false; + private final MediaSaveService.OnMediaSavedListener mOnVideoSavedListener = new MediaSaveService.OnMediaSavedListener() { @Override @@ -227,6 +232,19 @@ public class VideoModule implements CameraModule, } }; + public void setMute(boolean enable, boolean isValue) + { + AudioManager am = (AudioManager)mActivity.getSystemService(Context.AUDIO_SERVICE); + am.setMicrophoneMute(enable); + if(isValue) { + mIsMute = enable; + } + } + + public boolean isAudioMute() + { + return mIsMute; + } protected class CameraOpenThread extends Thread { @Override @@ -1039,6 +1057,12 @@ public class VideoModule implements CameraModule, mUI.enableShutter(false); mZoomValue = 0; + AudioManager am = (AudioManager)mActivity.getSystemService(Context.AUDIO_SERVICE); + mWasMute = am.isMicrophoneMute(); + if(mWasMute != mIsMute) { + setMute(mIsMute, false); + } + showVideoSnapshotUI(false); if (!mPreviewing) { @@ -1229,6 +1253,10 @@ public class VideoModule implements CameraModule, mUI.collapseCameraControls(); mUI.removeDisplayChangeListener(); + + if(mWasMute != mIsMute) { + setMute(mWasMute, false); + } } @Override diff --git a/src/com/android/camera/VideoUI.java b/src/com/android/camera/VideoUI.java index db27c7391..b5e7cc3df 100644 --- a/src/com/android/camera/VideoUI.java +++ b/src/com/android/camera/VideoUI.java @@ -51,6 +51,7 @@ import com.android.camera.ui.ListSubMenu; import com.android.camera.ui.ModuleSwitcher; import com.android.camera.ui.PieRenderer; import com.android.camera.ui.RenderOverlay; +import com.android.camera.ui.RotateImageView; import com.android.camera.ui.RotateLayout; import com.android.camera.ui.RotateTextToast; import com.android.camera.ui.ZoomRenderer; @@ -115,6 +116,7 @@ public class VideoUI implements PieRenderer.PieListener, private int mScreenRatio = CameraUtil.RATIO_UNKNOWN; private int mTopMargin = 0; private int mBottomMargin = 0; + private RotateImageView mMuteButton; private OnLayoutChangeListener mLayoutListener = new OnLayoutChangeListener() { @Override @@ -231,6 +233,25 @@ public class VideoUI implements PieRenderer.PieListener, } }); + mMuteButton = (RotateImageView)mRootView.findViewById(R.id.mute_button); + mMuteButton.setVisibility(View.VISIBLE); + if(!((VideoModule)mController).isAudioMute()) { + mMuteButton.setImageResource(R.drawable.ic_unmuted_button); + } else { + mMuteButton.setImageResource(R.drawable.ic_muted_button); + } + mMuteButton.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + boolean isEnabled = !((VideoModule)mController).isAudioMute(); + ((VideoModule)mController).setMute(isEnabled, true); + if(!isEnabled) + mMuteButton.setImageResource(R.drawable.ic_unmuted_button); + else + mMuteButton.setImageResource(R.drawable.ic_muted_button); + } + }); + initializeMiscControls(); initializeControlByIntent(); initializeOverlay(); diff --git a/src/com/android/camera/WideAnglePanoramaUI.java b/src/com/android/camera/WideAnglePanoramaUI.java index f79115449..5dab49f7c 100644 --- a/src/com/android/camera/WideAnglePanoramaUI.java +++ b/src/com/android/camera/WideAnglePanoramaUI.java @@ -50,6 +50,7 @@ import android.widget.TextView; import com.android.camera.ui.CameraControls; import com.android.camera.ui.CameraRootView; import com.android.camera.ui.ModuleSwitcher; +import com.android.camera.ui.RotateImageView; import com.android.camera.ui.RotateLayout; import com.android.camera.ui.RotateTextToast; import com.android.camera.util.CameraUtil; @@ -137,6 +138,9 @@ public class WideAnglePanoramaUI implements mSwitcher.setOrientation(mOrientation, false); } }); + + RotateImageView muteButton = (RotateImageView)mRootView.findViewById(R.id.mute_button); + muteButton.setVisibility(View.GONE); } public void onStartCapture() { diff --git a/src/com/android/camera/ui/CameraControls.java b/src/com/android/camera/ui/CameraControls.java index b1278536c..a6e3332ae 100644 --- a/src/com/android/camera/ui/CameraControls.java +++ b/src/com/android/camera/ui/CameraControls.java @@ -53,6 +53,7 @@ public class CameraControls extends RotatableLayout { private View mShutter; private View mSwitcher; private View mMenu; + private View mMute; private View mFrontBackSwitcher; private View mHdrSwitcher; private View mTsMakeupSwitcher; @@ -77,10 +78,11 @@ public class CameraControls extends RotatableLayout { private static final int SHUTTER_INDEX = 6; private static final int PREVIEW_INDEX = 7; private static final int INDICATOR_INDEX = 8; + private static final int MUTE_INDEX = 9; private static final int ANIME_DURATION = 300; - private float[][] mLocX = new float[4][9]; - private float[][] mLocY = new float[4][9]; - private boolean[] mTempEnabled = new boolean[9]; + private float[][] mLocX = new float[4][10]; + private float[][] mLocY = new float[4][10]; + private boolean[] mTempEnabled = new boolean[10]; private boolean mLocSet = false; private LinearLayout mRemainingPhotos; @@ -122,6 +124,7 @@ public class CameraControls extends RotatableLayout { mSwitcher.setVisibility(View.INVISIBLE); mShutter.setVisibility(View.INVISIBLE); mMenu.setVisibility(View.INVISIBLE); + mMute.setVisibility(View.INVISIBLE); mIndicators.setVisibility(View.INVISIBLE); mPreview.setVisibility(View.INVISIBLE); isAnimating = false; @@ -144,6 +147,7 @@ public class CameraControls extends RotatableLayout { mSwitcher.setVisibility(View.INVISIBLE); mShutter.setVisibility(View.INVISIBLE); mMenu.setVisibility(View.INVISIBLE); + mMute.setVisibility(View.INVISIBLE); mIndicators.setVisibility(View.INVISIBLE); mPreview.setVisibility(View.INVISIBLE); isAnimating = false; @@ -202,6 +206,7 @@ public class CameraControls extends RotatableLayout { ((ShutterButton) mShutter).setPressed(false); mSwitcher.setPressed(false); mMenu.setPressed(false); + mMute.setPressed(false); mFrontBackSwitcher.setPressed(false); if(TsMakeupManager.HAS_TS_MAKEUP) { mTsMakeupSwitcher.setPressed(false); @@ -216,6 +221,7 @@ public class CameraControls extends RotatableLayout { ((ShutterButton) mShutter).enableTouch(enable); ((ModuleSwitcher) mSwitcher).enableTouch(enable); mMenu.setEnabled(enable); + mMute.setEnabled(enable); mFrontBackSwitcher.setEnabled(enable); if(TsMakeupManager.HAS_TS_MAKEUP) { mTsMakeupSwitcher.setEnabled(enable); @@ -246,8 +252,12 @@ public class CameraControls extends RotatableLayout { mViewList.add(mShutter); if (mMenu.getVisibility() == View.VISIBLE) mViewList.add(mMenu); + if (mMute.getVisibility() == View.VISIBLE) + mViewList.add(mMute); if (mIndicators.getVisibility() == View.VISIBLE) mViewList.add(mIndicators); + if (mMute.getVisibility() == View.VISIBLE) + mViewList.add(mMute); } @Override @@ -263,6 +273,7 @@ public class CameraControls extends RotatableLayout { mHdrSwitcher = findViewById(R.id.hdr_switcher); } mMenu = findViewById(R.id.menu); + mMute = findViewById(R.id.mute_button); mIndicators = findViewById(R.id.on_screen_indicators); mPreview = findViewById(R.id.preview_thumb); mSceneModeSwitcher = findViewById(R.id.scene_mode_switcher); @@ -336,6 +347,7 @@ public class CameraControls extends RotatableLayout { int rotation = getUnifiedRotation(); toIndex(mSwitcher, w, h, rotation, 4, 6, SWITCHER_INDEX); toIndex(mMenu, w, h, rotation, 4, 0, MENU_INDEX); + toIndex(mMute, w, h, rotation, 3, 0, MUTE_INDEX); toIndex(mIndicators, w, h, rotation, 0, 6, INDICATOR_INDEX); toIndex(mFrontBackSwitcher, w, h, rotation, 2, 0, FRONT_BACK_INDEX); toIndex(mPreview, w, h, rotation, 0, 6, PREVIEW_INDEX); @@ -445,6 +457,7 @@ public class CameraControls extends RotatableLayout { mSceneModeSwitcher.setX(mLocX[idx1][SCENE_MODE_INDEX] + x); mFilterModeSwitcher.setX(mLocX[idx1][FILTER_MODE_INDEX] + x); mMenu.setX(mLocX[idx1][MENU_INDEX] + x); + mMute.setX(mLocX[idx1][MUTE_INDEX] + x); mSwitcher.setX(mLocX[idx1][SWITCHER_INDEX] - x); mShutter.setX(mLocX[idx1][SHUTTER_INDEX] - x); mIndicators.setX(mLocX[idx1][INDICATOR_INDEX] - x); @@ -459,6 +472,7 @@ public class CameraControls extends RotatableLayout { mSceneModeSwitcher.setY(mLocY[idx1][SCENE_MODE_INDEX] + y); mFilterModeSwitcher.setY(mLocY[idx1][FILTER_MODE_INDEX] + y); mMenu.setY(mLocY[idx1][MENU_INDEX] + y); + mMute.setY(mLocY[idx1][MUTE_INDEX] + y); mSwitcher.setY(mLocY[idx1][SWITCHER_INDEX] - y); mShutter.setY(mLocY[idx1][SHUTTER_INDEX] - y); mIndicators.setY(mLocY[idx1][INDICATOR_INDEX] - y); @@ -492,6 +506,7 @@ public class CameraControls extends RotatableLayout { mSwitcher.animate().cancel(); mShutter.animate().cancel(); mMenu.animate().cancel(); + mMute.animate().cancel(); mIndicators.animate().cancel(); mPreview.animate().cancel(); mFrontBackSwitcher.animate().setListener(outlistener); @@ -509,6 +524,7 @@ public class CameraControls extends RotatableLayout { mSceneModeSwitcher.animate().translationYBy(-mSize).setDuration(ANIME_DURATION); mFilterModeSwitcher.animate().translationYBy(-mSize).setDuration(ANIME_DURATION); mMenu.animate().translationYBy(-mSize).setDuration(ANIME_DURATION); + mMute.animate().translationYBy(-mSize).setDuration(ANIME_DURATION); mSwitcher.animate().translationYBy(mSize).setDuration(ANIME_DURATION); mShutter.animate().translationYBy(mSize).setDuration(ANIME_DURATION); @@ -525,6 +541,7 @@ public class CameraControls extends RotatableLayout { mSceneModeSwitcher.animate().translationXBy(-mSize).setDuration(ANIME_DURATION); mFilterModeSwitcher.animate().translationXBy(-mSize).setDuration(ANIME_DURATION); mMenu.animate().translationXBy(-mSize).setDuration(ANIME_DURATION); + mMute.animate().translationXBy(-mSize).setDuration(ANIME_DURATION); mSwitcher.animate().translationXBy(mSize).setDuration(ANIME_DURATION); mShutter.animate().translationXBy(mSize).setDuration(ANIME_DURATION); @@ -541,6 +558,7 @@ public class CameraControls extends RotatableLayout { mSceneModeSwitcher.animate().translationYBy(mSize).setDuration(ANIME_DURATION); mFilterModeSwitcher.animate().translationYBy(mSize).setDuration(ANIME_DURATION); mMenu.animate().translationYBy(mSize).setDuration(ANIME_DURATION); + mMute.animate().translationYBy(mSize).setDuration(ANIME_DURATION); mSwitcher.animate().translationYBy(-mSize).setDuration(ANIME_DURATION); mShutter.animate().translationYBy(-mSize).setDuration(ANIME_DURATION); @@ -557,6 +575,7 @@ public class CameraControls extends RotatableLayout { mSceneModeSwitcher.animate().translationXBy(mSize).setDuration(ANIME_DURATION); mFilterModeSwitcher.animate().translationXBy(mSize).setDuration(ANIME_DURATION); mMenu.animate().translationXBy(mSize).setDuration(ANIME_DURATION); + mMute.animate().translationXBy(mSize).setDuration(ANIME_DURATION); mSwitcher.animate().translationXBy(-mSize).setDuration(ANIME_DURATION); mShutter.animate().translationXBy(-mSize).setDuration(ANIME_DURATION); @@ -583,6 +602,7 @@ public class CameraControls extends RotatableLayout { mSwitcher.animate().cancel(); mShutter.animate().cancel(); mMenu.animate().cancel(); + mMute.animate().cancel(); mIndicators.animate().cancel(); mPreview.animate().cancel(); if (mViewList != null) @@ -612,6 +632,7 @@ public class CameraControls extends RotatableLayout { mSceneModeSwitcher.animate().translationYBy(mSize).setDuration(ANIME_DURATION); mFilterModeSwitcher.animate().translationYBy(mSize).setDuration(ANIME_DURATION); mMenu.animate().translationYBy(mSize).setDuration(ANIME_DURATION); + mMute.animate().translationYBy(mSize).setDuration(ANIME_DURATION); mSwitcher.animate().translationYBy(-mSize).setDuration(ANIME_DURATION); mShutter.animate().translationYBy(-mSize).setDuration(ANIME_DURATION); @@ -630,6 +651,7 @@ public class CameraControls extends RotatableLayout { mSceneModeSwitcher.animate().translationXBy(mSize).setDuration(ANIME_DURATION); mFilterModeSwitcher.animate().translationXBy(mSize).setDuration(ANIME_DURATION); mMenu.animate().translationXBy(mSize).setDuration(ANIME_DURATION); + mMute.animate().translationXBy(mSize).setDuration(ANIME_DURATION); mSwitcher.animate().translationXBy(-mSize).setDuration(ANIME_DURATION); mShutter.animate().translationXBy(-mSize).setDuration(ANIME_DURATION); @@ -648,6 +670,7 @@ public class CameraControls extends RotatableLayout { mSceneModeSwitcher.animate().translationYBy(-mSize).setDuration(ANIME_DURATION); mFilterModeSwitcher.animate().translationYBy(-mSize).setDuration(ANIME_DURATION); mMenu.animate().translationYBy(-mSize).setDuration(ANIME_DURATION); + mMute.animate().translationYBy(-mSize).setDuration(ANIME_DURATION); mSwitcher.animate().translationYBy(mSize).setDuration(ANIME_DURATION); mShutter.animate().translationYBy(mSize).setDuration(ANIME_DURATION); @@ -666,6 +689,7 @@ public class CameraControls extends RotatableLayout { mSceneModeSwitcher.animate().translationXBy(-mSize).setDuration(ANIME_DURATION); mFilterModeSwitcher.animate().translationXBy(-mSize).setDuration(ANIME_DURATION); mMenu.animate().translationXBy(-mSize).setDuration(ANIME_DURATION); + mMute.animate().translationXBy(-mSize).setDuration(ANIME_DURATION); mSwitcher.animate().translationXBy(mSize).setDuration(ANIME_DURATION); mShutter.animate().translationXBy(mSize).setDuration(ANIME_DURATION); @@ -932,7 +956,7 @@ public class CameraControls extends RotatableLayout { View[] views = { mSceneModeSwitcher, mFilterModeSwitcher, mFrontBackSwitcher, TsMakeupManager.HAS_TS_MAKEUP ? mTsMakeupSwitcher : mHdrSwitcher, - mMenu, mShutter, mPreview, mSwitcher + mMenu, mShutter, mPreview, mSwitcher, mMute }; for (View v : views) { ((RotateImageView) v).setOrientation(orientation, animation); |