diff options
author | Danesh M <daneshm90@gmail.com> | 2015-02-03 20:05:13 -0800 |
---|---|---|
committer | Danesh M <daneshm90@gmail.com> | 2015-02-04 13:26:25 -0800 |
commit | 4160876350e6f52d4d0d23c3b9fe3697a2155cce (patch) | |
tree | 3733e46afdae1f0921dcd77fdc272302a25fcaca | |
parent | 4fdf3fe239d9b3240901aad599c7f79a868a5556 (diff) | |
download | android_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.mk | 3 | ||||
-rw-r--r-- | AndroidManifest.xml | 1 | ||||
-rw-r--r-- | res/values/cm_strings.xml | 20 | ||||
-rw-r--r-- | res/xml/camera_preferences.xml | 4 | ||||
-rw-r--r-- | src/android/util/Pools.java | 165 | ||||
-rw-r--r-- | src/com/android/camera/CameraActivity.java | 34 | ||||
-rw-r--r-- | src/com/android/camera/settings/AppUpgrader.java | 23 | ||||
-rw-r--r-- | src/com/android/camera/settings/Keys.java | 9 |
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) { |