summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLikai Ding <likaid@codeaurora.org>2014-12-15 16:05:14 +0800
committerLikai Ding <likaid@codeaurora.org>2014-12-22 11:24:02 +0800
commit750861a411cd44eef5c56cd7f0a1a3d46ef00a32 (patch)
tree741d1e6708eaf3c2a076710c4ce6486763a939e9
parent5c3a14e425dabf710b58c87c44a368469cbb5baf (diff)
downloadandroid_packages_apps_Snap-750861a411cd44eef5c56cd7f0a1a3d46ef00a32.tar.gz
android_packages_apps_Snap-750861a411cd44eef5c56cd7f0a1a3d46ef00a32.tar.bz2
android_packages_apps_Snap-750861a411cd44eef5c56cd7f0a1a3d46ef00a32.zip
SnapdragonCamera: show how many more pictures can be taken
Prompt to user an estimation of how many more pictures can be taken, calculated based on available storage. Change-Id: Iabc8268d548d3f6d86a6d065b511641b837a1de5
-rw-r--r--res/layout-land/camera_controls.xml8
-rw-r--r--res/layout-port/camera_controls.xml8
-rw-r--r--res/values-zh-rCN/strings.xml2
-rw-r--r--res/values/dimens.xml2
-rw-r--r--res/values/qcomarrays.xml13
-rw-r--r--res/values/strings.xml2
-rw-r--r--src/com/android/camera/PhotoModule.java33
-rw-r--r--src/com/android/camera/PhotoUI.java3
-rw-r--r--src/com/android/camera/ui/CameraControls.java51
9 files changed, 122 insertions, 0 deletions
diff --git a/res/layout-land/camera_controls.xml b/res/layout-land/camera_controls.xml
index 65a17caae..eecc13f2e 100644
--- a/res/layout-land/camera_controls.xml
+++ b/res/layout-land/camera_controls.xml
@@ -109,4 +109,12 @@
android:layout_gravity="center" />
</com.android.camera.ui.RotatableLayout>
+ <TextView
+ android:id="@+id/remaining_photos"
+ android:background="@android:color/transparent"
+ android:textColor="@android:color/white"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:visibility="gone" />
+
</com.android.camera.ui.CameraControls>
diff --git a/res/layout-port/camera_controls.xml b/res/layout-port/camera_controls.xml
index bf3cda0ab..52be755dd 100644
--- a/res/layout-port/camera_controls.xml
+++ b/res/layout-port/camera_controls.xml
@@ -109,4 +109,12 @@
android:layout_gravity="center" />
</com.android.camera.ui.RotatableLayout>
+ <TextView
+ android:id="@+id/remaining_photos"
+ android:background="@android:color/transparent"
+ android:textColor="@android:color/white"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:visibility="gone" />
+
</com.android.camera.ui.CameraControls>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index e1a8f7985..e248a4523 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -527,4 +527,6 @@
<!-- The alas of CameraActivity for gesture operation -->
<string name="camera_gesture_title">打开相机</string>
+
+ <string name="remaining_photos_format">剩余 %d 张</string>
</resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 6b81ab906..03e3ce3cd 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -164,4 +164,6 @@
<dimen name="filter_mode_height">100dp</dimen>
<dimen name="filter_mode_width">80dp</dimen>
<dimen name="filter_mode_padding">10dp</dimen>
+
+ <dimen name="remaining_photos_margin">67dp</dimen>
</resources>
diff --git a/res/values/qcomarrays.xml b/res/values/qcomarrays.xml
index 73c34bd39..23ba3d382 100644
--- a/res/values/qcomarrays.xml
+++ b/res/values/qcomarrays.xml
@@ -203,6 +203,19 @@
<item>normal</item>
</string-array>
+ <!-- Rough estimates of jpeg compression ratio corresponding to qualities defined above. -->
+ <integer-array name="jpegquality_compression_ratio">
+ <item>48</item>
+ <item>38</item>
+ <item>31</item>
+ <item>20</item>
+ <item>11</item>
+ <item>6</item>
+ <item>20</item>
+ <item>31</item>
+ <item>38</item>
+ </integer-array>
+
<!-- Camera Preferences Color effect dialog box entries -->
<string-array name="pref_camera_coloreffect_entries" translatable="false">
<item>@string/pref_camera_coloreffect_entry_none</item>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 54ef31f9d..0ad549a41 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -712,4 +712,6 @@ CHAR LIMIT = NONE] -->
<string name="pref_camera_video_rotation_label_90">90</string>
<string name="pref_camera_video_rotation_label_180">180</string>
<string name="pref_camera_video_rotation_label_270">270</string>
+
+ <string name="remaining_photos_format">%d left</string>
</resources>
diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java
index 14e80ceb2..f181fa0e3 100644
--- a/src/com/android/camera/PhotoModule.java
+++ b/src/com/android/camera/PhotoModule.java
@@ -357,6 +357,8 @@ public class PhotoModule
private static final int MANUAL_EXPOSURE = 4;
private boolean mAnimateCapture = true;
+ private int mJpegFileSizeEstimation = 0;
+
private MediaSaveService.OnMediaSavedListener mOnMediaSavedListener =
new MediaSaveService.OnMediaSavedListener() {
@Override
@@ -1319,6 +1321,7 @@ public class PhotoModule
// the mean time and fill it, but that could have happened between the
// shutter press and saving the JPEG too.
mActivity.updateStorageSpaceAndHint();
+ updateRemainingPhotos();
long now = System.currentTimeMillis();
mJpegCallbackFinishTime = now - mJpegPictureCallbackTime;
Log.v(TAG, "mJpegCallbackFinishTime = "
@@ -2207,10 +2210,20 @@ public class PhotoModule
@Override
public void run(){
mActivity.updateStorageSpaceAndHint();
+ updateRemainingPhotos();
}
});
}
+ private void updateRemainingPhotos() {
+ if (mJpegFileSizeEstimation != 0) {
+ mUI.updateRemainingPhotos((int) (mActivity.getStorageSpaceBytes()
+ / mJpegFileSizeEstimation));
+ } else {
+ mUI.updateRemainingPhotos(-1);
+ }
+ }
+
private void onResumeTasks() {
Log.v(TAG, "Executing onResumeTasks.");
if (mOpenCameraFail || mCameraDisabled) return;
@@ -2808,6 +2821,7 @@ public class PhotoModule
//mUnsupportedJpegQuality = true;
}else {
mParameters.setJpegQuality(JpegEncodingQualityMappings.getQualityNumber(jpegQuality));
+ setJpegFileSizeEstimation(pic_size, jpegQuality);
}
}
@@ -3205,6 +3219,25 @@ public class PhotoModule
}
}
+ private void setJpegFileSizeEstimation(final Size size, final String quality) {
+ int[] ratios = mActivity.getResources().getIntArray(R.array.jpegquality_compression_ratio);
+ String[] qualities = mActivity.getResources().getStringArray(
+ R.array.pref_camera_jpegquality_entryvalues);
+ int ratio = 0;
+ for (int i = ratios.length - 1; i >= 0; --i) {
+ if (qualities[i].equals(quality)) {
+ ratio = ratios[i];
+ break;
+ }
+ }
+
+ if (ratio == 0) {
+ mJpegFileSizeEstimation = 0;
+ } else {
+ mJpegFileSizeEstimation = size.width * size.height * 3 / ratio;
+ }
+ }
+
private void setFlipValue() {
// Read Flip mode from adb command
//value: 0(default) - FLIP_MODE_OFF
diff --git a/src/com/android/camera/PhotoUI.java b/src/com/android/camera/PhotoUI.java
index 48fb2f704..eb55b72be 100644
--- a/src/com/android/camera/PhotoUI.java
+++ b/src/com/android/camera/PhotoUI.java
@@ -1159,4 +1159,7 @@ public class PhotoUI implements PieListener,
mMenu.setPreference(key, value);
}
+ public void updateRemainingPhotos(int remaining) {
+ mCameraControls.updateRemainingPhotos(remaining);
+ }
}
diff --git a/src/com/android/camera/ui/CameraControls.java b/src/com/android/camera/ui/CameraControls.java
index 1c9419569..181bd991e 100644
--- a/src/com/android/camera/ui/CameraControls.java
+++ b/src/com/android/camera/ui/CameraControls.java
@@ -26,6 +26,7 @@ import android.util.AttributeSet;
import android.view.View;
import android.view.ViewPropertyAnimator;
import android.widget.FrameLayout;
+import android.widget.TextView;
import java.util.ArrayList;
import org.codeaurora.snapcam.R;
@@ -66,6 +67,8 @@ public class CameraControls extends RotatableLayout {
private boolean[] mTempEnabled = new boolean[9];
private boolean mLocSet = false;
+ private TextView mRemainingPhotos;
+
AnimatorListener outlistener = new AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
@@ -205,6 +208,7 @@ public class CameraControls extends RotatableLayout {
mPreview = findViewById(R.id.preview_thumb);
mSceneModeSwitcher = findViewById(R.id.scene_mode_switcher);
mFilterModeSwitcher = findViewById(R.id.filter_mode_switcher);
+ mRemainingPhotos = (TextView) findViewById(R.id.remaining_photos);
}
@Override
@@ -238,6 +242,8 @@ public class CameraControls extends RotatableLayout {
View done = findViewById(R.id.btn_done);
toRight(done, shutter, rotation);
}
+
+ layoutRemaingPhotos();
}
private void setLocation(int w, int h) {
@@ -388,6 +394,7 @@ public class CameraControls extends RotatableLayout {
mPreview.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
break;
}
+ mRemainingPhotos.setVisibility(View.INVISIBLE);
}
public void showUI() {
@@ -475,6 +482,9 @@ public class CameraControls extends RotatableLayout {
mPreview.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
break;
}
+ if (mRemainingPhotos.getVisibility() == View.INVISIBLE) {
+ mRemainingPhotos.setVisibility(View.VISIBLE);
+ }
}
private void center(View v, Rect other, int rotation) {
@@ -646,4 +656,45 @@ public class CameraControls extends RotatableLayout {
mBackgroundView.setBackgroundResource(R.drawable.switcher_bg);
}
+ private void layoutRemaingPhotos() {
+ int rl = mPreview.getLeft();
+ int rt = mPreview.getTop();
+ int rr = mPreview.getRight();
+ int rb = mPreview.getBottom();
+ int w = mRemainingPhotos.getMeasuredWidth();
+ int h = mRemainingPhotos.getMeasuredHeight();
+ int m = getResources().getDimensionPixelSize(R.dimen.remaining_photos_margin);
+
+ int hc, vc;
+ int rotation = getUnifiedRotation();
+ switch (rotation) {
+ case 90:
+ hc = (rl + rr) / 2 - m;
+ vc = (rt + rb) / 2;
+ break;
+ case 180:
+ hc = (rl + rr) / 2;
+ vc = (rt + rb) / 2 + m;
+ break;
+ case 270:
+ hc = (rl + rr) / 2 + m;
+ vc = (rt + rb) / 2;
+ break;
+ default:
+ hc = (rl + rr) / 2;
+ vc = (rt + rb) / 2 - m;
+ break;
+ }
+ mRemainingPhotos.layout(hc - w / 2, vc - h / 2, hc + w / 2, vc + h / 2);
+ }
+
+ public void updateRemainingPhotos(int remaining) {
+ if (remaining < 0) {
+ mRemainingPhotos.setVisibility(View.GONE);
+ } else {
+ mRemainingPhotos.setVisibility(View.VISIBLE);
+ mRemainingPhotos.setText(String.format(
+ getResources().getString(R.string.remaining_photos_format), remaining));
+ }
+ }
}