diff --git a/app/src/main/java/com/simplemobiletools/camera/Config.java b/app/src/main/java/com/simplemobiletools/camera/Config.java index 5a93ce63..deb65a90 100644 --- a/app/src/main/java/com/simplemobiletools/camera/Config.java +++ b/app/src/main/java/com/simplemobiletools/camera/Config.java @@ -37,4 +37,12 @@ public class Config { public void setForceRatioEnabled(boolean enabled) { mPrefs.edit().putBoolean(Constants.FORCE_RATIO, enabled).apply(); } + + public int getMaxResolution() { + return mPrefs.getInt(Constants.MAX_RESOLUTION, 1); + } + + public void setMaxResolution(int maxRes) { + mPrefs.edit().putInt(Constants.MAX_RESOLUTION, maxRes).apply(); + } } diff --git a/app/src/main/java/com/simplemobiletools/camera/Constants.java b/app/src/main/java/com/simplemobiletools/camera/Constants.java index dc6be245..17490041 100644 --- a/app/src/main/java/com/simplemobiletools/camera/Constants.java +++ b/app/src/main/java/com/simplemobiletools/camera/Constants.java @@ -10,4 +10,5 @@ public class Constants { public static final String LONG_TAP = "long_tap"; public static final String FOCUS_BEFORE_CAPTURE = "focus_before_capture"; public static final String FORCE_RATIO = "force_ratio"; + public static final String MAX_RESOLUTION = "max_resolution"; } diff --git a/app/src/main/java/com/simplemobiletools/camera/Preview.java b/app/src/main/java/com/simplemobiletools/camera/Preview.java index 5e558361..a89cd3a9 100644 --- a/app/src/main/java/com/simplemobiletools/camera/Preview.java +++ b/app/src/main/java/com/simplemobiletools/camera/Preview.java @@ -256,12 +256,13 @@ public class Preview extends ViewGroup implements SurfaceHolder.Callback, View.O }; private Camera.Size getOptimalPictureSize() { + final int maxResolution = getMaxResolution(); final List sizes = mParameters.getSupportedPictureSizes(); Camera.Size maxSize = sizes.get(0); for (Camera.Size size : sizes) { - final boolean isEightMegapixelsMax = isEightMegapixelsMax(size); final boolean isProperRatio = isProperRatio(size); - if (isEightMegapixelsMax && isProperRatio) { + final boolean isProperResolution = isProperResolution(size, maxResolution); + if (isProperResolution && isProperRatio) { maxSize = size; break; } @@ -269,8 +270,20 @@ public class Preview extends ViewGroup implements SurfaceHolder.Callback, View.O return maxSize; } - private boolean isEightMegapixelsMax(Camera.Size size) { - return size.width * size.height < 9000000; + private int getMaxResolution() { + final int maxRes = Config.newInstance(getContext()).getMaxResolution(); + switch (maxRes) { + case 0: + return 6000000; + case 1: + return 9000000; + default: + return 0; + } + } + + private boolean isProperResolution(Camera.Size size, int maxRes) { + return maxRes == 0 || size.width * size.height < maxRes; } private boolean isProperRatio(Camera.Size size) { diff --git a/app/src/main/java/com/simplemobiletools/camera/activities/SettingsActivity.java b/app/src/main/java/com/simplemobiletools/camera/activities/SettingsActivity.java index 85c2b559..205526a8 100644 --- a/app/src/main/java/com/simplemobiletools/camera/activities/SettingsActivity.java +++ b/app/src/main/java/com/simplemobiletools/camera/activities/SettingsActivity.java @@ -2,6 +2,7 @@ package com.simplemobiletools.camera.activities; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.AppCompatSpinner; import android.support.v7.widget.SwitchCompat; import com.simplemobiletools.camera.Config; @@ -10,11 +11,13 @@ import com.simplemobiletools.camera.R; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; +import butterknife.OnItemSelected; public class SettingsActivity extends AppCompatActivity { @BindView(R.id.settings_long_tap) SwitchCompat mLongTapSwitch; @BindView(R.id.settings_focus_before_capture) SwitchCompat mFocusBeforeCaptureSwitch; @BindView(R.id.settings_force_ratio) SwitchCompat mForceRatioSwitch; + @BindView(R.id.settings_max_resolution) AppCompatSpinner mMaxResolutionSpinner; private static Config mConfig; @@ -28,6 +31,7 @@ public class SettingsActivity extends AppCompatActivity { setupLongTap(); setupFocusBeforeCapture(); setupForceRatio(); + setupMaxResolution(); } private void setupLongTap() { @@ -42,6 +46,10 @@ public class SettingsActivity extends AppCompatActivity { mForceRatioSwitch.setChecked(mConfig.getForceRatioEnabled()); } + private void setupMaxResolution() { + mMaxResolutionSpinner.setSelection(mConfig.getMaxResolution()); + } + @OnClick(R.id.settings_long_tap_holder) public void handleLongTapToTrigger() { mLongTapSwitch.setChecked(!mLongTapSwitch.isChecked()); @@ -59,4 +67,9 @@ public class SettingsActivity extends AppCompatActivity { mForceRatioSwitch.setChecked(!mForceRatioSwitch.isChecked()); mConfig.setForceRatioEnabled(mForceRatioSwitch.isChecked()); } + + @OnItemSelected(R.id.settings_max_resolution) + public void handleMaxResolution() { + mConfig.setMaxResolution(mMaxResolutionSpinner.getSelectedItemPosition()); + } } diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index 8ed1cfb4..53a744a3 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -85,7 +85,7 @@ + android:entries="@array/max_resolutions"/> diff --git a/app/src/main/res/values/array.xml b/app/src/main/res/values/array.xml index 186d17d0..2f137d9b 100644 --- a/app/src/main/res/values/array.xml +++ b/app/src/main/res/values/array.xml @@ -1,6 +1,6 @@ - + 5 MP 8 MP @string/no_limit