diff options
Diffstat (limited to 'src/com/android/camera')
-rwxr-xr-x | src/com/android/camera/CaptureModule.java | 16 | ||||
-rwxr-xr-x | src/com/android/camera/SettingsManager.java | 41 | ||||
-rwxr-xr-x | src/com/android/camera/ui/ProMode.java | 76 |
3 files changed, 118 insertions, 15 deletions
diff --git a/src/com/android/camera/CaptureModule.java b/src/com/android/camera/CaptureModule.java index 057b17790..49d91394a 100755 --- a/src/com/android/camera/CaptureModule.java +++ b/src/com/android/camera/CaptureModule.java @@ -5531,7 +5531,7 @@ public class CaptureModule implements CameraModule, PhotoController, updatePreview = true; applyExposure(mPreviewRequestBuilder[cameraId]); break; - case SettingsManager.KEY_ISO: + case SettingsManager.KEY_MANUAL_ISO_VALUE: updatePreview = true; applyIso(mPreviewRequestBuilder[cameraId]); break; @@ -5636,9 +5636,11 @@ public class CaptureModule implements CameraModule, PhotoController, } private void applyIso(CaptureRequest.Builder request) { - String value = mSettingsManager.getValue(SettingsManager.KEY_ISO); if (applyManualIsoExposure(request)) return; - if (value == null) return; + final SharedPreferences sharedPref = mActivity.getSharedPreferences( + ComboPreferences.getLocalSharedPreferencesName(mActivity, getMainCameraId()), + Context.MODE_PRIVATE); + String value = sharedPref.getString(SettingsManager.KEY_MANUAL_ISO_VALUE, "100"); String scene = mSettingsManager.getValue(SettingsManager.KEY_SCENE_MODE); boolean promode = false; if (scene != null) { @@ -5657,9 +5659,15 @@ public class CaptureModule implements CameraModule, PhotoController, request.set(CaptureRequest.SENSOR_SENSITIVITY, mIsoSensitivity); } } else { - long intValue = SettingsManager.KEY_ISO_INDEX.get(value); + int isoValue = Integer.parseInt(value); VendorTagUtil.setIsoExpPrioritySelectPriority(request, 0); + long intValue = SettingsManager.KEY_ISO_INDEX.get( + SettingsManager.MAUNAL_ABSOLUTE_ISO_VALUE); VendorTagUtil.setIsoExpPriority(request, intValue); + VendorTagUtil.setUseIsoValues(request, isoValue); + if (DEBUG) { + Log.v(TAG, "applyIso ISO value :" + isoValue); + } if (request.get(CaptureRequest.SENSOR_EXPOSURE_TIME) != null) { mIsoExposureTime = request.get(CaptureRequest.SENSOR_EXPOSURE_TIME); } diff --git a/src/com/android/camera/SettingsManager.java b/src/com/android/camera/SettingsManager.java index 5ccf8002b..d57b0da5a 100755 --- a/src/com/android/camera/SettingsManager.java +++ b/src/com/android/camera/SettingsManager.java @@ -429,7 +429,7 @@ public class SettingsManager implements ListMenu.SettingsListener { try { newValue = dependencyList.getString(keyToProcess); } catch (JSONException e) { - e.printStackTrace(); + Log.w(TAG, "initializeValueMap JSONException No value for:" + keyToProcess); continue; } Values values = new Values(getValue(keyToProcess), newValue); @@ -498,7 +498,7 @@ public class SettingsManager implements ListMenu.SettingsListener { try { newValue = dependencyList.getString(keyToTurnOff); } catch (JSONException e) { - e.printStackTrace(); + Log.w(TAG, "checkDependencyAndUpdate JSONException No value for:" + keyToTurnOff); continue; } if (newValue == null) continue; @@ -603,6 +603,23 @@ public class SettingsManager implements ListMenu.SettingsListener { return sharedPreferences.getFloat(key, 0.5f); } + private boolean setIsoPref(String key, int value) { + boolean result = false; + final SharedPreferences sharedPref = mContext.getSharedPreferences( + ComboPreferences.getLocalSharedPreferencesName(mContext, getCurrentCameraId()), + Context.MODE_PRIVATE); + int prefValue = Integer.parseInt(sharedPref.getString(key, "100")); + if (prefValue != value) { + ListPreference pref = mPreferenceGroup.findPreference(key); + SharedPreferences.Editor editor = sharedPref.edit(); + editor.putString(key, String.valueOf(value)); + editor.apply(); + updateMapAndNotify(pref); + result = true; + } + return result; + } + public boolean isOverriden(String key) { Values values = mValuesMap.get(key); return values.overriddenValue != null; @@ -645,6 +662,20 @@ public class SettingsManager implements ListMenu.SettingsListener { } } + public void setIsoValue(String key, boolean forceNotify, float value, int maxIso) { + boolean isSuccess = false; + if (value >= 0) { + isSuccess = setIsoPref(key, (int)(value * maxIso)); + } + if (isSuccess || forceNotify) { + List<SettingState> list = new ArrayList<>(); + Values values = new Values("" + value * maxIso, null); + SettingState ss = new SettingState(KEY_MANUAL_ISO_VALUE, values); + list.add(ss); + notifyListeners(list); + } + } + private void updateMapAndNotify(ListPreference pref) { String key = pref.getKey(); List changed = checkDependencyAndUpdate(key); @@ -1012,7 +1043,7 @@ public class SettingsManager implements ListMenu.SettingsListener { } catch(NullPointerException e) { Log.w(TAG, "Supported iso range is null."); } catch(IllegalArgumentException e) { - Log.w(TAG, "Supported iso range is null."); + Log.w(TAG, "IllegalArgumentException Supported iso range is null."); } return result; } @@ -1847,7 +1878,7 @@ public class SettingsManager implements ListMenu.SettingsListener { try { return mDependency.getJSONObject(key); } catch (JSONException e) { - e.printStackTrace(); + Log.w(TAG, "getDependencyMapForKey JSONException No value for:" + key); return null; } } @@ -1861,7 +1892,7 @@ public class SettingsManager implements ListMenu.SettingsListener { try { return dependencyMap.getJSONObject(value); } catch (JSONException e) { - e.printStackTrace(); + Log.w(TAG, "getDependencyList JSONException No value for:" + key); return null; } } diff --git a/src/com/android/camera/ui/ProMode.java b/src/com/android/camera/ui/ProMode.java index 99182e242..97c9cdb83 100755 --- a/src/com/android/camera/ui/ProMode.java +++ b/src/com/android/camera/ui/ProMode.java @@ -30,6 +30,7 @@ package com.android.camera.ui; import android.content.Context; +import android.content.SharedPreferences; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; @@ -45,12 +46,14 @@ import android.widget.ImageView; import android.widget.TextView; import com.android.camera.SettingsManager; +import com.android.camera.ComboPreferences; import org.codeaurora.snapcam.R; import java.util.ArrayList; public class ProMode extends View { + private static final String TAG = "ProMode"; public static final int NO_MODE = -1; public static final int EXPOSURE_MODE = 0; public static final int MANUAL_MODE = 1; @@ -70,6 +73,7 @@ public class ProMode extends View { private int mCurveLeft; private int mCurveRight; private float mSlider = -1; + private float mIsoSlider = -1; private Paint mPaint = new Paint(); private int mNums; private int mIndex; @@ -106,11 +110,19 @@ public class ProMode extends View { } private void init(int mode) { - String key = getKey(mode); - if (key == null) return; - int index = mSettingsManager.getValueIndex(key); - CharSequence[] cc = mSettingsManager.getEntries(key); - mUI.updateProModeText(mode, cc[index].toString()); + if (mode == ISO_MODE) { + final SharedPreferences sharedPref = mContext.getSharedPreferences( + ComboPreferences.getLocalSharedPreferencesName(mContext, mSettingsManager.getCurrentCameraId()), + Context.MODE_PRIVATE); + String value = sharedPref.getString(SettingsManager.KEY_MANUAL_ISO_VALUE, "100"); + mUI.updateProModeText(mode, "Iso" + value); + } else { + String key = getKey(mode); + if (key == null) return; + int index = mSettingsManager.getValueIndex(key); + CharSequence[] cc = mSettingsManager.getEntries(key); + mUI.updateProModeText(mode, cc[index].toString()); + } } @Override @@ -133,6 +145,16 @@ public class ProMode extends View { canvas.drawCircle(curveCoordinate[0], curveCoordinate[1], SELECTED_DOT_SIZE, mPaint); } + } else if (mMode == ISO_MODE) { + mPaint.setColor(Color.WHITE); + canvas.drawCircle(mCurveLeft, mCurveY, DOT_SIZE, mPaint); + canvas.drawCircle(mCurveRight, mCurveY, DOT_SIZE, mPaint); + mPaint.setColor(BLUE); + if (mIsoSlider >= 0) { + mCurveMeasure.getPosTan(mCurveMeasure.getLength() * mIsoSlider, curveCoordinate, null); + canvas.drawCircle(curveCoordinate[0], curveCoordinate[1], SELECTED_DOT_SIZE, + mPaint); + } } else { for (int i = 0; i < mNums; i++) { if (i == mIndex) { @@ -228,6 +250,30 @@ public class ProMode extends View { mParent.addView(v); mAddedViews.add(v); } + } else if (mMode == ISO_MODE) { + int[] isoRange = mSettingsManager.getIsoRangeValues(mSettingsManager.getCurrentCameraId()); + int value = Integer.parseInt(mSettingsManager.getValue(SettingsManager.KEY_MANUAL_ISO_VALUE)); + if (isoRange == null) { + Log.v(TAG, "getIsoRangeValues is NULL"); + return; + } + setIsoSlider((float)value/isoRange[1],true); + int stride = mCurveRight - mCurveLeft; + for (int i = 0; i < 2; i++) { + TextView v = new TextView(mContext); + String s = "" + isoRange[0]; + if (i == 1) s = "" + isoRange[1]; + v.setText(s); + v.setTextColor(Color.WHITE); + v.measure(0, 0); + ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(v.getMeasuredWidth(), + v.getMeasuredHeight()); + v.setLayoutParams(lp); + v.setX(mCurveLeft + i * stride - v.getMeasuredWidth() / 2); + v.setY(mCurveY - 2 * v.getMeasuredHeight()); + mParent.addView(v); + mAddedViews.add(v); + } } else { if (key == null) return; CharSequence[] cc = mSettingsManager.getEntries(key); @@ -273,7 +319,7 @@ public class ProMode extends View { case WHITE_BALANCE_MODE: return SettingsManager.KEY_WHITE_BALANCE; case ISO_MODE: - return SettingsManager.KEY_ISO; + return SettingsManager.KEY_MANUAL_ISO_VALUE; } return null; } @@ -305,6 +351,19 @@ public class ProMode extends View { invalidate(); } + public void setIsoSlider(float slider, boolean forceNotify) { + mIsoSlider = slider; + int[] isoRange = mSettingsManager.getIsoRangeValues(mSettingsManager.getCurrentCameraId()); + int maxIso = 1600; + if (isoRange != null) { + maxIso = isoRange[1]; + } + mSettingsManager.setIsoValue(SettingsManager.KEY_MANUAL_ISO_VALUE, forceNotify, + mIsoSlider, maxIso); + mUI.updateProModeText(mMode, "Iso" + (int)(mIsoSlider * maxIso)); + invalidate(); + } + private void setIndex(int index, boolean force) { if (mIndex == index && !force) return; if (mIndex != -1) { @@ -351,6 +410,11 @@ public class ProMode extends View { if (slider >= 0) { setSlider(slider,false); } + } else if (mMode == ISO_MODE) { + float slider = getSlider(event.getX(), event.getY()); + if (slider >= 0) { + setIsoSlider(slider,false); + } } else { int idx = findButton(event.getX(), event.getY()); if (idx != -1) { |