summaryrefslogtreecommitdiffstats
path: root/src/com/android
diff options
context:
space:
mode:
authorMichael Bestas <mikeioannina@gmail.com>2013-11-05 16:43:50 +0200
committerSteve Kondik <steve@cyngn.com>2016-11-02 12:22:26 -0700
commit82d5347870e831cbfca5b8329776a091fcc43eeb (patch)
tree3451ed50731fec7664e75affcb72c6247ff2ef0c /src/com/android
parent85c301a49187a33e766766591a1a1de97377608a (diff)
downloadandroid_packages_apps_Snap-82d5347870e831cbfca5b8329776a091fcc43eeb.tar.gz
android_packages_apps_Snap-82d5347870e831cbfca5b8329776a091fcc43eeb.tar.bz2
android_packages_apps_Snap-82d5347870e831cbfca5b8329776a091fcc43eeb.zip
Camera: Cleanup hardware key handling
* Fix power shutter behaviour in camcorder mode * Disable volume change while in panorama mode, volume buttons should only handle camera operations while in the camera * Add camera/power/volume key shutter handling in panorama mode On devices with a hardware camera key: * Disable power & volume shutter features * Volume buttons control the zoom On devices without a hardware camera key: * When power shutter is disabled, volume buttons control the shutter (like AOSP) * When power shutter is enabled, volume buttons control the zoom Change-Id: I141946d5b6f5aec8b1e9a9f99270d30295596079
Diffstat (limited to 'src/com/android')
-rwxr-xr-xsrc/com/android/camera/CameraActivity.java4
-rw-r--r--src/com/android/camera/CameraSettings.java4
-rwxr-xr-xsrc/com/android/camera/PhotoModule.java27
-rw-r--r--src/com/android/camera/VideoModule.java41
-rw-r--r--src/com/android/camera/WideAnglePanoramaModule.java33
-rw-r--r--src/com/android/camera/util/CameraUtil.java12
6 files changed, 107 insertions, 14 deletions
diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java
index f34bf7386..4522720a7 100755
--- a/src/com/android/camera/CameraActivity.java
+++ b/src/com/android/camera/CameraActivity.java
@@ -1930,7 +1930,9 @@ public class CameraActivity extends Activity
protected void initPowerShutter(ComboPreferences prefs) {
String val = prefs.getString(CameraSettings.KEY_POWER_SHUTTER,
getResources().getString(R.string.pref_camera_power_shutter_default));
- mPowerShutter = val.equals(CameraSettings.VALUE_ON);
+ if (!CameraUtil.hasCameraKey()) {
+ mPowerShutter = val.equals(CameraSettings.VALUE_ON);
+ }
if (mPowerShutter /*TODO: && mShowCameraAppView*/) {
getWindow().addPrivateFlags(
WindowManager.LayoutParams.PRIVATE_FLAG_PREVENT_POWER_KEY);
diff --git a/src/com/android/camera/CameraSettings.java b/src/com/android/camera/CameraSettings.java
index 19de894c7..7b2739520 100644
--- a/src/com/android/camera/CameraSettings.java
+++ b/src/com/android/camera/CameraSettings.java
@@ -847,6 +847,7 @@ public class CameraSettings {
ListPreference cameraHdr = group.findPreference(KEY_CAMERA_HDR);
ListPreference disMode = group.findPreference(KEY_DIS);
ListPreference cameraHdrPlus = group.findPreference(KEY_CAMERA_HDR_PLUS);
+ ListPreference powerShutter = group.findPreference(KEY_POWER_SHUTTER);
ListPreference videoHfrMode =
group.findPreference(KEY_VIDEO_HIGH_FRAME_RATE);
ListPreference seeMoreMode = group.findPreference(KEY_SEE_MORE);
@@ -956,6 +957,9 @@ public class CameraSettings {
!GcamHelper.hasGcamCapture() || isFrontCamera)) {
removePreference(group, cameraHdrPlus.getKey());
}
+ if (powerShutter != null && CameraUtil.hasCameraKey()) {
+ removePreference(group, powerShutter.getKey());
+ }
if (SystemProperties.getBoolean("persist.env.camera.saveinsd", false)) {
final String CAMERA_SAVEPATH_SDCARD = "1";
diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java
index 9305392cc..5b8548bb3 100755
--- a/src/com/android/camera/PhotoModule.java
+++ b/src/com/android/camera/PhotoModule.java
@@ -2756,7 +2756,25 @@ public class PhotoModule
}*/
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_UP:
+ if (/*TODO: mActivity.isInCameraApp() &&*/ mFirstTimeInitialized
+ && (mUI.mMenuInitialized)) {
+ if (!CameraActivity.mPowerShutter && !CameraUtil.hasCameraKey()) {
+ onShutterButtonFocus(true);
+ } else {
+ mUI.onScaleStepResize(true);
+ }
+ }
+ return true;
case KeyEvent.KEYCODE_VOLUME_DOWN:
+ if (/*TODO: mActivity.isInCameraApp() &&*/ mFirstTimeInitialized
+ && (mUI.mMenuInitialized)) {
+ if (!CameraActivity.mPowerShutter && !CameraUtil.hasCameraKey()) {
+ onShutterButtonFocus(true);
+ } else {
+ mUI.onScaleStepResize(false);
+ }
+ }
+ return true;
case KeyEvent.KEYCODE_FOCUS:
if (/*TODO: mActivity.isInCameraApp() &&*/ mFirstTimeInitialized) {
if (event.getRepeatCount() == 0) {
@@ -2783,7 +2801,7 @@ public class PhotoModule
return true;
case KeyEvent.KEYCODE_POWER:
if (mFirstTimeInitialized && event.getRepeatCount() == 0
- && CameraActivity.mPowerShutter) {
+ && CameraActivity.mPowerShutter && !CameraUtil.hasCameraKey()) {
onShutterButtonFocus(true);
}
return true;
@@ -2799,9 +2817,11 @@ public class PhotoModule
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_UP:
case KeyEvent.KEYCODE_VOLUME_DOWN:
- if (/*mActivity.isInCameraApp() && */ mFirstTimeInitialized) {
+ if (!CameraActivity.mPowerShutter && !CameraUtil.hasCameraKey()
+ && mFirstTimeInitialized) {
onShutterButtonClick();
return true;
+
}
return false;
case KeyEvent.KEYCODE_FOCUS:
@@ -2810,7 +2830,8 @@ public class PhotoModule
}
return true;
case KeyEvent.KEYCODE_POWER:
- if (CameraActivity.mPowerShutter && mFirstTimeInitialized) {
+ if (CameraActivity.mPowerShutter && !CameraUtil.hasCameraKey()
+ && mFirstTimeInitialized) {
onShutterButtonClick();
}
return true;
diff --git a/src/com/android/camera/VideoModule.java b/src/com/android/camera/VideoModule.java
index 1a7b8b0b6..5fe584562 100644
--- a/src/com/android/camera/VideoModule.java
+++ b/src/com/android/camera/VideoModule.java
@@ -1369,25 +1369,41 @@ public class VideoModule implements CameraModule,
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_UP:
- mUI.onScaleStepResize(true);
+ if (event.getRepeatCount() == 0 && !CameraActivity.mPowerShutter &&
+ !CameraUtil.hasCameraKey()) {
+ mUI.clickShutter();
+ } else {
+ mUI.onScaleStepResize(true);
+ }
return true;
case KeyEvent.KEYCODE_VOLUME_DOWN:
- mUI.onScaleStepResize(false);
+ if (event.getRepeatCount() == 0 && !CameraActivity.mPowerShutter &&
+ !CameraUtil.hasCameraKey()) {
+ mUI.clickShutter();
+ } else {
+ mUI.onScaleStepResize(false);
+ }
return true;
case KeyEvent.KEYCODE_CAMERA:
if (event.getRepeatCount() == 0) {
mUI.clickShutter();
- return true;
}
- break;
+ return true;
case KeyEvent.KEYCODE_DPAD_CENTER:
if (event.getRepeatCount() == 0) {
mUI.clickShutter();
- return true;
}
- break;
+ return true;
+ case KeyEvent.KEYCODE_POWER:
+ if (event.getRepeatCount() == 0 && CameraActivity.mPowerShutter &&
+ !CameraUtil.hasCameraKey()) {
+ mUI.clickShutter();
+ }
+ return true;
case KeyEvent.KEYCODE_MENU:
- if (mMediaRecorderRecording) return true;
+ if (mMediaRecorderRecording) {
+ return true;
+ }
break;
}
return false;
@@ -1397,14 +1413,21 @@ public class VideoModule implements CameraModule,
public boolean onKeyUp(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_UP:
+ if (!CameraActivity.mPowerShutter && !CameraUtil.hasCameraKey()) {
+ mUI.pressShutter(false);
+ }
+ return true;
case KeyEvent.KEYCODE_VOLUME_DOWN:
+ if (!CameraActivity.mPowerShutter && !CameraUtil.hasCameraKey()) {
+ mUI.pressShutter(false);
+ }
return true;
case KeyEvent.KEYCODE_CAMERA:
mUI.pressShutter(false);
return true;
case KeyEvent.KEYCODE_POWER:
- if (CameraActivity.mPowerShutter) {
- onShutterButtonClick();
+ if (CameraActivity.mPowerShutter && !CameraUtil.hasCameraKey()) {
+ mUI.pressShutter(false);
}
return true;
}
diff --git a/src/com/android/camera/WideAnglePanoramaModule.java b/src/com/android/camera/WideAnglePanoramaModule.java
index 8d7243c5c..b88ec9e09 100644
--- a/src/com/android/camera/WideAnglePanoramaModule.java
+++ b/src/com/android/camera/WideAnglePanoramaModule.java
@@ -310,6 +310,9 @@ public class WideAnglePanoramaModule
CameraSettings.upgradeGlobalPreferences(mPreferences.getGlobal(), activity);
mLocationManager = new LocationManager(mActivity, null);
+ // Power shutter
+ mActivity.initPowerShutter(mPreferences);
+
mMainHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
@@ -938,6 +941,10 @@ public class WideAnglePanoramaModule
}
mUI.showPreviewCover();
releaseCamera();
+
+ // Load the power shutter
+ mActivity.initPowerShutter(mPreferences);
+
synchronized (mRendererLock) {
mCameraTexture = null;
@@ -1226,14 +1233,38 @@ public class WideAnglePanoramaModule
public void onActivityResult(int requestCode, int resultCode, Intent data) {
}
-
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
+ switch (keyCode) {
+ case KeyEvent.KEYCODE_VOLUME_UP:
+ case KeyEvent.KEYCODE_VOLUME_DOWN:
+ return true;
+ case KeyEvent.KEYCODE_CAMERA:
+ if (event.getRepeatCount() == 0) {
+ onShutterButtonClick();
+ }
+ return true;
+ case KeyEvent.KEYCODE_POWER:
+ return true;
+ }
return false;
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
+ switch (keyCode) {
+ case KeyEvent.KEYCODE_VOLUME_UP:
+ case KeyEvent.KEYCODE_VOLUME_DOWN:
+ if (!CameraActivity.mPowerShutter && !CameraUtil.hasCameraKey()) {
+ onShutterButtonClick();
+ }
+ return true;
+ case KeyEvent.KEYCODE_POWER:
+ if (CameraActivity.mPowerShutter && !CameraUtil.hasCameraKey()) {
+ onShutterButtonClick();
+ }
+ return true;
+ }
return false;
}
diff --git a/src/com/android/camera/util/CameraUtil.java b/src/com/android/camera/util/CameraUtil.java
index 18b6542c2..54dd34cd8 100644
--- a/src/com/android/camera/util/CameraUtil.java
+++ b/src/com/android/camera/util/CameraUtil.java
@@ -122,6 +122,9 @@ public class CameraUtil {
public static final String TRUE = "true";
public static final String FALSE = "false";
+ // Hardware camera key mask
+ private static final int KEY_MASK_CAMERA = 0x20;
+
// Fields for the show-on-maps-functionality
private static final String MAPS_PACKAGE_NAME = "com.google.android.apps.maps";
private static final String MAPS_CLASS_NAME = "com.google.android.maps.MapsActivity";
@@ -158,6 +161,10 @@ public class CameraUtil {
return (supported != null) && supported.contains(SCENE_MODE_HDR);
}
+ public static boolean hasCameraKey() {
+ return (sDeviceKeysPresent & KEY_MASK_CAMERA) != 0;
+ }
+
public static boolean isMeteringAreaSupported(Parameters params) {
return params.getMaxNumMeteringAreas() > 0;
}
@@ -183,6 +190,9 @@ public class CameraUtil {
private static float sPixelDensity = 1;
private static ImageFileNamer sImageFileNamer;
+ // Get available hardware keys
+ private static int sDeviceKeysPresent;
+
private CameraUtil() {
}
@@ -194,6 +204,8 @@ public class CameraUtil {
sPixelDensity = metrics.density;
sImageFileNamer = new ImageFileNamer(
context.getString(R.string.image_file_name_format));
+ sDeviceKeysPresent = context.getResources().getInteger(
+ com.android.internal.R.integer.config_deviceHardwareKeys);
}
public static int dpToPixel(int dp) {