summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDanesh M <daneshm90@gmail.com>2015-02-03 20:05:13 -0800
committerDanesh M <daneshm90@gmail.com>2015-02-04 13:26:25 -0800
commit4160876350e6f52d4d0d23c3b9fe3697a2155cce (patch)
tree3733e46afdae1f0921dcd77fdc272302a25fcaca
parent4fdf3fe239d9b3240901aad599c7f79a868a5556 (diff)
downloadandroid_packages_apps_Camera2-4160876350e6f52d4d0d23c3b9fe3697a2155cce.tar.gz
android_packages_apps_Camera2-4160876350e6f52d4d0d23c3b9fe3697a2155cce.tar.bz2
android_packages_apps_Camera2-4160876350e6f52d4d0d23c3b9fe3697a2155cce.zip
Camera: Powerkey shutter (2/2)
Change-Id: I70c5cd4dad547e2a9a96541b3104d52af5b5dd5c
-rw-r--r--Android.mk3
-rw-r--r--AndroidManifest.xml1
-rw-r--r--res/values/cm_strings.xml20
-rw-r--r--res/xml/camera_preferences.xml4
-rw-r--r--src/android/util/Pools.java165
-rw-r--r--src/com/android/camera/CameraActivity.java34
-rw-r--r--src/com/android/camera/settings/AppUpgrader.java23
-rw-r--r--src/com/android/camera/settings/Keys.java9
8 files changed, 91 insertions, 168 deletions
diff --git a/Android.mk b/Android.mk
index 8a50335ed..5758c2b47 100644
--- a/Android.mk
+++ b/Android.mk
@@ -25,8 +25,9 @@ LOCAL_AAPT_FLAGS := \
--version-code $(version_code_package) \
LOCAL_PACKAGE_NAME := Camera2
+LOCAL_CERTIFICATE := platform
-LOCAL_SDK_VERSION := current
+#LOCAL_SDK_VERSION := current
LOCAL_PROGUARD_FLAG_FILES := proguard.flags
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index e187f99fd..0e2ae4404 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -32,6 +32,7 @@
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
+ <uses-permission android:name="android.permission.PREVENT_POWER_KEY" />
<supports-screens
android:anyDensity="true"
diff --git a/res/values/cm_strings.xml b/res/values/cm_strings.xml
new file mode 100644
index 000000000..7440bcaf2
--- /dev/null
+++ b/res/values/cm_strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2015 The CyanogenMod Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- More Settings screen, power button title -->
+ <string name="pref_camera_power_shutter_title">Power shutter</string>
+</resources>
diff --git a/res/xml/camera_preferences.xml b/res/xml/camera_preferences.xml
index 3266caeb9..c9eaef9d2 100644
--- a/res/xml/camera_preferences.xml
+++ b/res/xml/camera_preferences.xml
@@ -68,6 +68,10 @@
android:defaultValue="false"
android:key="pref_camera_exposure_compensation_key"
android:title="@string/pref_camera_exposure_compensation" />
+ <com.android.camera.settings.ManagedSwitchPreference
+ android:key="pref_power_shutter"
+ android:defaultValue="false"
+ android:title="@string/pref_camera_power_shutter_title" />
</PreferenceScreen>
<!-- Google Help and feedback launcher -->
diff --git a/src/android/util/Pools.java b/src/android/util/Pools.java
deleted file mode 100644
index 40bab1eae..000000000
--- a/src/android/util/Pools.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.util;
-
-/**
- * Helper class for crating pools of objects. An example use looks like this:
- * <pre>
- * public class MyPooledClass {
- *
- * private static final SynchronizedPool<MyPooledClass> sPool =
- * new SynchronizedPool<MyPooledClass>(10);
- *
- * public static MyPooledClass obtain() {
- * MyPooledClass instance = sPool.acquire();
- * return (instance != null) ? instance : new MyPooledClass();
- * }
- *
- * public void recycle() {
- * // Clear state if needed.
- * sPool.release(this);
- * }
- *
- * . . .
- * }
- * </pre>
- *
- * @hide
- */
-public final class Pools {
-
- /**
- * Interface for managing a pool of objects.
- *
- * @param <T> The pooled type.
- */
- public static interface Pool<T> {
-
- /**
- * @return An instance from the pool if such, null otherwise.
- */
- public T acquire();
-
- /**
- * Release an instance to the pool.
- *
- * @param instance The instance to release.
- * @return Whether the instance was put in the pool.
- *
- * @throws IllegalStateException If the instance is already in the pool.
- */
- public boolean release(T instance);
- }
-
- private Pools() {
- /* do nothing - hiding constructor */
- }
-
- /**
- * Simple (non-synchronized) pool of objects.
- *
- * @param <T> The pooled type.
- */
- public static class SimplePool<T> implements Pool<T> {
- private final Object[] mPool;
-
- private int mPoolSize;
-
- /**
- * Creates a new instance.
- *
- * @param maxPoolSize The max pool size.
- *
- * @throws IllegalArgumentException If the max pool size is less than zero.
- */
- public SimplePool(int maxPoolSize) {
- if (maxPoolSize <= 0) {
- throw new IllegalArgumentException("The max pool size must be > 0");
- }
- mPool = new Object[maxPoolSize];
- }
-
- @Override
- @SuppressWarnings("unchecked")
- public T acquire() {
- if (mPoolSize > 0) {
- final int lastPooledIndex = mPoolSize - 1;
- T instance = (T) mPool[lastPooledIndex];
- mPool[lastPooledIndex] = null;
- mPoolSize--;
- return instance;
- }
- return null;
- }
-
- @Override
- public boolean release(T instance) {
- if (isInPool(instance)) {
- throw new IllegalStateException("Already in the pool!");
- }
- if (mPoolSize < mPool.length) {
- mPool[mPoolSize] = instance;
- mPoolSize++;
- return true;
- }
- return false;
- }
-
- private boolean isInPool(T instance) {
- for (int i = 0; i < mPoolSize; i++) {
- if (mPool[i] == instance) {
- return true;
- }
- }
- return false;
- }
- }
-
- /**
- * Synchronized) pool of objects.
- *
- * @param <T> The pooled type.
- */
- public static class SynchronizedPool<T> extends SimplePool<T> {
- private final Object mLock = new Object();
-
- /**
- * Creates a new instance.
- *
- * @param maxPoolSize The max pool size.
- *
- * @throws IllegalArgumentException If the max pool size is less than zero.
- */
- public SynchronizedPool(int maxPoolSize) {
- super(maxPoolSize);
- }
-
- @Override
- public T acquire() {
- synchronized (mLock) {
- return super.acquire();
- }
- }
-
- @Override
- public boolean release(T element) {
- synchronized (mLock) {
- return super.release(element);
- }
- }
- }
-} \ No newline at end of file
diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java
index 680b117c8..dc7298e51 100644
--- a/src/com/android/camera/CameraActivity.java
+++ b/src/com/android/camera/CameraActivity.java
@@ -157,7 +157,7 @@ import java.util.concurrent.TimeUnit;
public class CameraActivity extends Activity
implements AppController, CameraAgent.CameraOpenCallback,
ShareActionProvider.OnShareTargetSelectedListener,
- OrientationManager.OnOrientationChangeListener {
+ OrientationManager.OnOrientationChangeListener, SettingsManager.OnSettingChangedListener {
private static final Log.Tag TAG = new Log.Tag("CameraActivity");
@@ -260,6 +260,8 @@ public class CameraActivity extends Activity
};
private MemoryManager mMemoryManager;
private MotionManager mMotionManager;
+ // Keep track of powershutter state
+ public boolean mPowerShutter;
@Override
public CameraAppUI getCameraAppUI() {
@@ -561,6 +563,13 @@ public class CameraActivity extends Activity
CameraUtil.showErrorAndFinish(this, R.string.cannot_connect_camera);
}
+ @Override
+ public void onSettingChanged(SettingsManager settingsManager, String key) {
+ if (key.equals(Keys.KEY_POWER_SHUTTER)) {
+ initPowerShutter();
+ }
+ }
+
private static class MainHandler extends Handler {
final WeakReference<CameraActivity> mActivity;
@@ -1345,6 +1354,9 @@ public class CameraActivity extends Activity
ModulesInfo.setupModules(mAppContext, mModuleManager);
mSettingsManager = getServices().getSettingsManager();
+ mSettingsManager.addListener(this);
+ initPowerShutter();
+
AppUpgrader appUpgrader = new AppUpgrader(this);
appUpgrader.upgrade(mSettingsManager);
Keys.setDefaults(mSettingsManager, mAppContext);
@@ -1901,9 +1913,25 @@ public class CameraActivity extends Activity
}
}
+ protected void initPowerShutter() {
+ mPowerShutter = Keys.isPowerShutterOn(mSettingsManager);
+ if (mPowerShutter) {
+ getWindow().addPrivateFlags(
+ WindowManager.LayoutParams.PRIVATE_FLAG_PREVENT_POWER_KEY);
+ } else {
+ getWindow().clearPrivateFlags(
+ WindowManager.LayoutParams.PRIVATE_FLAG_PREVENT_POWER_KEY);
+ }
+ }
+
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (!mFilmstripVisible) {
+ if (mPowerShutter && keyCode == KeyEvent.KEYCODE_POWER &&
+ event.getRepeatCount() == 0) {
+ mCurrentModule.onShutterButtonFocus(true);
+ return true;
+ }
if (mCurrentModule.onKeyDown(keyCode, event)) {
return true;
}
@@ -1922,6 +1950,10 @@ public class CameraActivity extends Activity
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (!mFilmstripVisible) {
+ if (mPowerShutter && keyCode == KeyEvent.KEYCODE_POWER) {
+ mCurrentModule.onShutterButtonClick();
+ return true;
+ }
// If a module is in the middle of capture, it should
// consume the key event.
if (mCurrentModule.onKeyUp(keyCode, event)) {
diff --git a/src/com/android/camera/settings/AppUpgrader.java b/src/com/android/camera/settings/AppUpgrader.java
index 64dad6449..fd92a50cb 100644
--- a/src/com/android/camera/settings/AppUpgrader.java
+++ b/src/com/android/camera/settings/AppUpgrader.java
@@ -70,9 +70,14 @@ public class AppUpgrader extends SettingsUpgrader {
private static final int CAMERA_SETTINGS_SELECTED_MODULE_INDEX = 5;
/**
+ * With this version, port over power shutter settings.
+ */
+ private static final int CAMERA_SETTINGS_POWER_SHUTTER = 6;
+
+ /**
* Increment this value whenever new AOSP UpgradeSteps need to be executed.
*/
- public static final int APP_UPGRADE_VERSION = 5;
+ public static final int APP_UPGRADE_VERSION = 6;
private final AppController mAppController;
@@ -133,6 +138,10 @@ public class AppUpgrader extends SettingsUpgrader {
if (lastVersion < CAMERA_SETTINGS_SELECTED_MODULE_INDEX) {
upgradeSelectedModeIndex(settingsManager, context);
}
+
+ if (lastVersion < CAMERA_SETTINGS_POWER_SHUTTER) {
+ upgradePowerShutter(settingsManager);
+ }
}
/**
@@ -403,6 +412,18 @@ public class AppUpgrader extends SettingsUpgrader {
}
}
+ private void upgradePowerShutter(SettingsManager settingsManager) {
+ SharedPreferences oldGlobalPreferences =
+ settingsManager.openPreferences(OLD_GLOBAL_PREFERENCES_FILENAME);
+ if (oldGlobalPreferences.contains(Keys.KEY_POWER_SHUTTER)) {
+ String powerShutter = removeString(oldGlobalPreferences, Keys.KEY_POWER_SHUTTER);
+ if (OLD_SETTINGS_VALUE_ON.equals(powerShutter)) {
+ settingsManager.set(SettingsManager.SCOPE_GLOBAL, Keys.KEY_POWER_SHUTTER,
+ true);
+ }
+ }
+ }
+
/**
* The R.integer.camera_mode_* indices were cleaned up, resulting in
* removals and renaming of certain values. In particular camera_mode_gcam
diff --git a/src/com/android/camera/settings/Keys.java b/src/com/android/camera/settings/Keys.java
index 02ab48f75..54e83a662 100644
--- a/src/com/android/camera/settings/Keys.java
+++ b/src/com/android/camera/settings/Keys.java
@@ -74,6 +74,7 @@ public class Keys {
public static final String KEY_HDR_PLUS_FLASH_MODE = "pref_hdr_plus_flash_mode";
public static final String KEY_SHOULD_SHOW_SETTINGS_BUTTON_CLING =
"pref_should_show_settings_button_cling";
+ public static final String KEY_POWER_SHUTTER = "pref_power_shutter";
/**
* Set some number of defaults for the defined keys.
@@ -214,6 +215,14 @@ public class Keys {
}
/**
+ * Returns whether power shutter is set on.
+ */
+ public static boolean isPowerShutterOn(SettingsManager settingsManager) {
+ return settingsManager.getBoolean(SettingsManager.SCOPE_GLOBAL,
+ KEY_POWER_SHUTTER);
+ }
+
+ /**
* Returns whether pano orientation is horizontal.
*/
public static boolean isPanoOrientationHorizontal(SettingsManager settingsManager) {