summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorByunghun Jeon <bjeon@codeaurora.org>2014-10-13 18:34:37 -0700
committerByunghun Jeon <bjeon@codeaurora.org>2014-11-19 17:53:26 -0800
commita19529b701c6d74b91657441cdb7c3463fa7e8c6 (patch)
treeec2840164d498e39fec70b4735e1523ab3cc601d
parenta41a7928433d60533548c115f3741a980159e656 (diff)
downloadandroid_packages_apps_Snap-a19529b701c6d74b91657441cdb7c3463fa7e8c6.tar.gz
android_packages_apps_Snap-a19529b701c6d74b91657441cdb7c3463fa7e8c6.tar.bz2
android_packages_apps_Snap-a19529b701c6d74b91657441cdb7c3463fa7e8c6.zip
SnapdragonCamera: Add preview thumbnail button
Add preview thumbnail button and touch it to go to gallery Change-Id: Ib80ef94c677c204d7f0826356792aba2aa11d4d1
-rw-r--r--res/layout-land/camera_controls.xml15
-rw-r--r--res/layout-port/camera_controls.xml15
-rw-r--r--res/values/qcomstrings.xml2
-rw-r--r--src/com/android/camera/CameraActivity.java111
-rw-r--r--src/com/android/camera/CustomPhotoMenu.java7
-rw-r--r--src/com/android/camera/PhotoModule.java4
-rw-r--r--src/com/android/camera/PhotoUI.java24
-rw-r--r--src/com/android/camera/VideoModule.java4
-rw-r--r--src/com/android/camera/VideoUI.java25
-rw-r--r--src/com/android/camera/WideAnglePanoramaModule.java4
-rw-r--r--src/com/android/camera/WideAnglePanoramaUI.java32
-rw-r--r--src/com/android/camera/data/FixedFirstDataAdapter.java1
-rw-r--r--src/com/android/camera/ui/CameraControls.java80
-rw-r--r--src/com/android/camera/ui/FilmStripView.java12
14 files changed, 243 insertions, 93 deletions
diff --git a/res/layout-land/camera_controls.xml b/res/layout-land/camera_controls.xml
index 1d911badc..65a17caae 100644
--- a/res/layout-land/camera_controls.xml
+++ b/res/layout-land/camera_controls.xml
@@ -64,14 +64,14 @@
android:scaleType="center"
android:src="@drawable/btn_new_shutter" />
- <ImageView
+ <com.android.camera.ui.RotateImageView
android:id="@+id/preview_thumb"
android:layout_width="@dimen/capture_size"
android:layout_height="@dimen/capture_size"
android:layout_gravity="top|right"
+ android:background="@android:color/black"
android:contentDescription="@string/switch_photo_filmstrip"
- android:scaleType="centerInside"
- android:visibility="invisible" />
+ android:scaleType="fitCenter" />
<com.android.camera.ui.RotatableLayout
android:id="@+id/front_back_switcher"
@@ -83,15 +83,6 @@
</com.android.camera.ui.RotatableLayout>
<com.android.camera.ui.RotatableLayout
- android:id="@+id/flash_switcher"
- style="@style/ToggleButtonOuter" >
-
- <com.android.camera.ui.RotateImageView
- style="@style/ToggleButton"
- android:layout_gravity="center" />
- </com.android.camera.ui.RotatableLayout>
-
- <com.android.camera.ui.RotatableLayout
android:id="@+id/hdr_switcher"
style="@style/ToggleButtonOuter" >
diff --git a/res/layout-port/camera_controls.xml b/res/layout-port/camera_controls.xml
index 130efc748..bf3cda0ab 100644
--- a/res/layout-port/camera_controls.xml
+++ b/res/layout-port/camera_controls.xml
@@ -64,14 +64,14 @@
android:scaleType="center"
android:src="@drawable/btn_new_shutter" />
- <ImageView
+ <com.android.camera.ui.RotateImageView
android:id="@+id/preview_thumb"
android:layout_width="@dimen/capture_size"
android:layout_height="@dimen/capture_size"
android:layout_gravity="top|right"
+ android:background="@android:color/black"
android:contentDescription="@string/switch_photo_filmstrip"
- android:scaleType="centerInside"
- android:visibility="invisible" />
+ android:scaleType="fitCenter" />
<com.android.camera.ui.RotatableLayout
android:id="@+id/front_back_switcher"
@@ -83,15 +83,6 @@
</com.android.camera.ui.RotatableLayout>
<com.android.camera.ui.RotatableLayout
- android:id="@+id/flash_switcher"
- style="@style/ToggleButtonOuter" >
-
- <com.android.camera.ui.RotateImageView
- style="@style/ToggleButton"
- android:layout_gravity="center" />
- </com.android.camera.ui.RotatableLayout>
-
- <com.android.camera.ui.RotatableLayout
android:id="@+id/hdr_switcher"
style="@style/ToggleButtonOuter" >
diff --git a/res/values/qcomstrings.xml b/res/values/qcomstrings.xml
index c72f9bb1e..c76f5c658 100644
--- a/res/values/qcomstrings.xml
+++ b/res/values/qcomstrings.xml
@@ -283,7 +283,7 @@
<string name="pref_camera_video_tnr_default" translatable="false">off</string>
<!-- Default face detection setting. -->
- <string name="pref_camera_facedetection_default" translatable="false">on</string>
+ <string name="pref_camera_facedetection_default" translatable="false">off</string>
<!-- Settings screen, Select Face Detection -->
<string name="pref_camera_facedetection_title">Face Detection</string>
diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java
index bc8e2f152..b5fc0a676 100644
--- a/src/com/android/camera/CameraActivity.java
+++ b/src/com/android/camera/CameraActivity.java
@@ -33,8 +33,12 @@ import android.content.ServiceConnection;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
+import android.database.Cursor;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
import android.graphics.drawable.ColorDrawable;
import android.net.Uri;
+import android.media.ThumbnailUtils;
import android.nfc.NfcAdapter;
import android.nfc.NfcAdapter.CreateBeamUrisCallback;
import android.nfc.NfcEvent;
@@ -83,6 +87,7 @@ import com.android.camera.tinyplanet.TinyPlanetFragment;
import com.android.camera.ui.ModuleSwitcher;
import com.android.camera.ui.DetailsDialog;
import com.android.camera.ui.FilmStripView;
+import com.android.camera.ui.FilmStripView.ImageData;
import com.android.camera.util.ApiHelper;
import com.android.camera.util.CameraUtil;
import com.android.camera.util.GcamHelper;
@@ -183,6 +188,8 @@ public class CameraActivity extends Activity
private boolean mIsUndoingDeletion = false;
private boolean mIsEditActivityInProgress = false;
protected boolean mIsModuleSwitchInProgress = false;
+ private View mPreviewCover;
+ private FrameLayout mPreviewContentLayout;
private Uri[] mNfcPushUris = new Uri[1];
@@ -201,6 +208,7 @@ public class CameraActivity extends Activity
private Intent mImageShareIntent;
public static int SETTING_LIST_WIDTH_1 = 250;
public static int SETTING_LIST_WIDTH_2 = 250;
+ private Bitmap mPreviewThumbnailBitmap;
private class MyOrientationEventListener
extends OrientationEventListener {
@@ -511,10 +519,13 @@ public class CameraActivity extends Activity
};
public void gotoGallery() {
- UsageStatistics.onEvent(UsageStatistics.COMPONENT_CAMERA, UsageStatistics.ACTION_FILMSTRIP,
- "thumbnailTap");
-
- mFilmStripView.getController().goToNextItem();
+ LocalDataAdapter adapter = getDataAdapter();
+ ImageData img = adapter.getImageData(1);
+ if (img == null)
+ return;
+ Uri uri = img.getContentUri();
+ Intent intent = new Intent(Intent.ACTION_VIEW, uri);
+ startActivity(intent);
}
/**
@@ -598,6 +609,98 @@ public class CameraActivity extends Activity
mNfcPushUris[0] = uri;
}
+ public LocalDataAdapter getDataAdapter() {
+ return mDataAdapter;
+ }
+
+ private String getPathFromUri(Uri uri) {
+ String[] projection = {
+ MediaStore.Images.Media.DATA
+ };
+ Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
+ if (cursor == null)
+ return null;
+ int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
+ cursor.moveToFirst();
+ String s = cursor.getString(column_index);
+ cursor.close();
+ return s;
+ }
+
+ public void setPreviewThumbnailBitmap(Bitmap bitmap) {
+ mPreviewThumbnailBitmap = bitmap;
+ }
+
+ public Bitmap getPreviewThumbBitmap() {
+ return mPreviewThumbnailBitmap;
+ }
+
+ public void updatePreviewThumbnail() {
+ if (mCurrentModule != null) {
+ if (mCurrentModule instanceof VideoModule) {
+ ((VideoModule) mCurrentModule).updatePreviewThumbnail();
+ }
+ else if (mCurrentModule instanceof WideAnglePanoramaModule) {
+ ((WideAnglePanoramaModule) mCurrentModule).updatePreviewThumbnail();
+ }
+ else if (mCurrentModule instanceof PhotoModule) {
+ ((PhotoModule) mCurrentModule).updatePreviewThumbnail();
+ }
+ }
+ }
+
+ public void updatePreviewThumbnailForVideo() {
+ if (mCurrentModule != null) {
+ if (mCurrentModule instanceof VideoModule) {
+ ((VideoModule) mCurrentModule).updatePreviewThumbnail();
+ }
+ }
+ }
+
+ public class UpdatePreviewThumbnail extends AsyncTask<Void, Void, Bitmap> {
+ private ImageView imgView;
+ private Bitmap imgBitmap = null;
+
+ public UpdatePreviewThumbnail(ImageView view) {
+ imgView = view;
+ }
+
+ @Override
+ protected Bitmap doInBackground(Void... params) {
+ if (imgBitmap != null)
+ return imgBitmap;
+
+ LocalDataAdapter adapter = getDataAdapter();
+ ImageData img = adapter.getImageData(1);
+ if (img == null) {
+ return null;
+ }
+ Uri uri = img.getContentUri();
+ String path = getPathFromUri(uri);
+ if (path == null) {
+ return null;
+ }
+ else {
+ if (img.isPhoto()) {
+ BitmapFactory.Options opt = new BitmapFactory.Options();
+ opt.inSampleSize = 4;
+ return BitmapFactory.decodeFile(path, opt);
+ } else {
+ return ThumbnailUtils
+ .createVideoThumbnail(path, MediaStore.Video.Thumbnails.MICRO_KIND);
+ }
+ }
+ }
+
+ @Override
+ protected void onPostExecute(Bitmap bitmap) {
+ if (imgView == null)
+ return;
+ imgView.setImageBitmap(bitmap);
+ setPreviewThumbnailBitmap(bitmap);
+ }
+ }
+
private void setStandardShareIntent(Uri contentUri, String mimeType) {
mStandardShareIntent = getShareIntentFromType(mimeType);
if (mStandardShareIntent != null) {
diff --git a/src/com/android/camera/CustomPhotoMenu.java b/src/com/android/camera/CustomPhotoMenu.java
index f8230c0c2..551412a27 100644
--- a/src/com/android/camera/CustomPhotoMenu.java
+++ b/src/com/android/camera/CustomPhotoMenu.java
@@ -81,7 +81,6 @@ public class CustomPhotoMenu extends MenuController
private static final int MODE_FILTER = 1;
private static final int DEVELOPER_MENU_TOUCH_COUNT = 10;
private int mSceneStatus;
- private View mFlashSwitcher;
private View mHdrSwitcher;
private View mFrontBackSwitcher;
private View mSceneModeSwitcher;
@@ -103,7 +102,6 @@ public class CustomPhotoMenu extends MenuController
mSettingOff = activity.getString(R.string.setting_off_value);
mActivity = activity;
mFrontBackSwitcher = ui.getRootView().findViewById(R.id.front_back_switcher);
- mFlashSwitcher = ui.getRootView().findViewById(R.id.flash_switcher);
mHdrSwitcher = ui.getRootView().findViewById(R.id.hdr_switcher);
mSceneModeSwitcher = ui.getRootView().findViewById(R.id.scene_mode_switcher);
mFilterModeSwitcher = ui.getRootView().findViewById(R.id.filter_mode_switcher);
@@ -122,7 +120,6 @@ public class CustomPhotoMenu extends MenuController
initSceneModeButton(mSceneModeSwitcher);
initFilterModeButton(mFilterModeSwitcher);
mHdrSwitcher.setVisibility(View.INVISIBLE);
- mFlashSwitcher.setVisibility(View.INVISIBLE);
mFrontBackSwitcher.setVisibility(View.INVISIBLE);
// HDR.
@@ -179,7 +176,6 @@ public class CustomPhotoMenu extends MenuController
};
initSwitchItem(CameraSettings.KEY_CAMERA_ID, mFrontBackSwitcher);
- initSwitchItem(CameraSettings.KEY_FLASH_MODE, mFlashSwitcher);
}
@Override
@@ -457,9 +453,6 @@ public class CustomPhotoMenu extends MenuController
@Override
public void overrideSettings(final String... keyvalues) {
for (int i = 0; i < keyvalues.length; i += 2) {
- if (keyvalues[i].equals(CameraSettings.KEY_FLASH_MODE)) {
- buttonSetEnabled(mFlashSwitcher, keyvalues[i + 1] == null);
- }
if (keyvalues[i].equals(CameraSettings.KEY_SCENE_MODE)) {
buttonSetEnabled(mSceneModeSwitcher, keyvalues[i + 1] == null);
}
diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java
index 81b9f695d..5fb7ac726 100644
--- a/src/com/android/camera/PhotoModule.java
+++ b/src/com/android/camera/PhotoModule.java
@@ -2557,6 +2557,10 @@ public class PhotoModule
}
}
+ public void updatePreviewThumbnail() {
+ mUI.updatePreviewThumbnail();
+ }
+
private void setDisplayOrientation() {
mDisplayRotation = CameraUtil.getDisplayRotation(mActivity);
mDisplayOrientation = CameraUtil.getDisplayOrientation(mDisplayRotation, mCameraId);
diff --git a/src/com/android/camera/PhotoUI.java b/src/com/android/camera/PhotoUI.java
index 803c2b19b..40672547a 100644
--- a/src/com/android/camera/PhotoUI.java
+++ b/src/com/android/camera/PhotoUI.java
@@ -53,6 +53,7 @@ import android.widget.PopupWindow;
import android.widget.Toast;
import android.graphics.drawable.AnimationDrawable;
+import com.android.camera.CameraActivity.UpdatePreviewThumbnail;
import com.android.camera.CameraPreference.OnPreferenceChangedListener;
import com.android.camera.FocusOverlayManager.FocusUI;
import com.android.camera.ui.AbstractSettingPopup;
@@ -229,7 +230,7 @@ public class PhotoUI implements PieListener,
@Override
protected void onPostExecute(Bitmap bitmap) {
mPreviewThumb.setImageBitmap(bitmap);
- mAnimationManager.startCaptureAnimation(mPreviewThumb);
+ updatePreviewThumbnail(bitmap);
}
}
@@ -286,6 +287,24 @@ public class PhotoUI implements PieListener,
mPrevOrientationResize = false;
}
+ public void updatePreviewThumbnail() {
+ mPreviewThumb.setVisibility(View.VISIBLE);
+ Bitmap bitmap = mActivity.getPreviewThumbBitmap();
+ if (bitmap != null) {
+ mPreviewThumb.setImageBitmap(bitmap);
+ }
+ else {
+ UpdatePreviewThumbnail task = mActivity.new UpdatePreviewThumbnail(mPreviewThumb);
+ task.execute();
+ }
+ }
+
+ public void updatePreviewThumbnail(Bitmap bitmap) {
+ mPreviewThumb.setVisibility(View.VISIBLE);
+ mPreviewThumb.setImageBitmap(bitmap);
+ mActivity.setPreviewThumbnailBitmap(bitmap);
+ }
+
public void setDownFactor(int factor) {
mDownSampleFactor = factor;
}
@@ -382,6 +401,7 @@ public class PhotoUI implements PieListener,
// Re-apply transform matrix for new surface texture
setTransformMatrix(mPreviewWidth, mPreviewHeight);
}
+ updatePreviewThumbnail();
}
@Override
@@ -537,7 +557,7 @@ public class PhotoUI implements PieListener,
mSwitcher.setVisibility(View.VISIBLE);
}
// called from onResume but only the first time
- public void initializeFirstTime() {
+ public void initializeFirstTime() {
// Initialize shutter button.
mShutterButton.setImageBitmap(null);
mShutterButton.setBackgroundResource(R.drawable.shutter_button_anim);
diff --git a/src/com/android/camera/VideoModule.java b/src/com/android/camera/VideoModule.java
index 876905f93..5bec8ef14 100644
--- a/src/com/android/camera/VideoModule.java
+++ b/src/com/android/camera/VideoModule.java
@@ -1524,6 +1524,10 @@ public class VideoModule implements CameraModule,
mCurrentVideoValues = null;
}
+ public void updatePreviewThumbnail() {
+ mUI.updateWithNewPreviewThumbnail();
+ }
+
private void deleteVideoFile(String fileName) {
Log.v(TAG, "Deleting video " + fileName);
File f = new File(fileName);
diff --git a/src/com/android/camera/VideoUI.java b/src/com/android/camera/VideoUI.java
index 66a9d6b99..6d0e12548 100644
--- a/src/com/android/camera/VideoUI.java
+++ b/src/com/android/camera/VideoUI.java
@@ -45,6 +45,7 @@ import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.TextView;
+import com.android.camera.CameraActivity.UpdatePreviewThumbnail;
import com.android.camera.CameraPreference.OnPreferenceChangedListener;
import com.android.camera.ui.AbstractSettingPopup;
import com.android.camera.ui.CameraControls;
@@ -94,7 +95,7 @@ public class VideoUI implements PieRenderer.PieListener,
private VideoController mController;
private int mZoomMax;
private List<Integer> mZoomRatios;
- private View mPreviewThumb;
+ private ImageView mPreviewThumb;
private View mFlashOverlay;
private boolean mOrientationResize;
private boolean mPrevOrientationResize;
@@ -240,6 +241,23 @@ public class VideoUI implements PieRenderer.PieListener,
mPrevOrientationResize = false;
}
+ public void updatePreviewThumbnail() {
+ mPreviewThumb.setVisibility(View.VISIBLE);
+ Bitmap bitmap = mActivity.getPreviewThumbBitmap();
+ if (bitmap != null)
+ mPreviewThumb.setImageBitmap(bitmap);
+ else {
+ UpdatePreviewThumbnail task = mActivity.new UpdatePreviewThumbnail(mPreviewThumb);
+ task.execute();
+ }
+ }
+
+ public void updateWithNewPreviewThumbnail() {
+ mPreviewThumb.setVisibility(View.VISIBLE);
+ UpdatePreviewThumbnail task = mActivity.new UpdatePreviewThumbnail(mPreviewThumb);
+ task.execute();
+ }
+
public void cameraOrientationPreviewResize(boolean orientation){
mPrevOrientationResize = mOrientationResize;
mOrientationResize = orientation;
@@ -388,7 +406,7 @@ public class VideoUI implements PieRenderer.PieListener,
Log.e(TAG, "No valid bitmap for capture animation.");
return;
}
- ((ImageView) mPreviewThumb).setImageBitmap(bitmap);
+ mPreviewThumb.setImageBitmap(bitmap);
mAnimationManager.startCaptureAnimation(mPreviewThumb);
}
@@ -532,7 +550,7 @@ public class VideoUI implements PieRenderer.PieListener,
mGestures.setRenderOverlay(mRenderOverlay);
- mPreviewThumb = mRootView.findViewById(R.id.preview_thumb);
+ mPreviewThumb = (ImageView) mRootView.findViewById(R.id.preview_thumb);
mPreviewThumb.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
@@ -964,6 +982,7 @@ public class VideoUI implements PieRenderer.PieListener,
// Re-apply transform matrix for new surface texture
setTransformMatrix(mPreviewWidth, mPreviewHeight);
}
+ updatePreviewThumbnail();
}
@Override
diff --git a/src/com/android/camera/WideAnglePanoramaModule.java b/src/com/android/camera/WideAnglePanoramaModule.java
index d9f0032bb..40878581e 100644
--- a/src/com/android/camera/WideAnglePanoramaModule.java
+++ b/src/com/android/camera/WideAnglePanoramaModule.java
@@ -736,6 +736,10 @@ public class WideAnglePanoramaModule
}
}
+ public void updatePreviewThumbnail() {
+ mUI.updatePreviewThumbnail();
+ }
+
// This function will be called upon the first camera frame is available.
private void reset() {
mCaptureState = CAPTURE_STATE_VIEWFINDER;
diff --git a/src/com/android/camera/WideAnglePanoramaUI.java b/src/com/android/camera/WideAnglePanoramaUI.java
index 97c7d43ec..8f9643971 100644
--- a/src/com/android/camera/WideAnglePanoramaUI.java
+++ b/src/com/android/camera/WideAnglePanoramaUI.java
@@ -34,12 +34,14 @@ import android.util.Log;
import android.view.LayoutInflater;
import android.view.TextureView;
import android.view.View;
+import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
+import com.android.camera.CameraActivity.UpdatePreviewThumbnail;
import com.android.camera.ui.CameraControls;
import com.android.camera.ui.CameraRootView;
import com.android.camera.ui.ModuleSwitcher;
@@ -78,6 +80,7 @@ public class WideAnglePanoramaUI implements
private TextureView mTextureView;
private ShutterButton mShutterButton;
private CameraControls mCameraControls;
+ private ImageView mPreviewThumb;
private Matrix mProgressDirectionMatrix = new Matrix();
private float[] mProgressAngle = new float[2];
@@ -104,6 +107,14 @@ public class WideAnglePanoramaUI implements
mSwitcher = (ModuleSwitcher) mRootView.findViewById(R.id.camera_switcher);
mSwitcher.setCurrentIndex(ModuleSwitcher.WIDE_ANGLE_PANO_MODULE_INDEX);
mSwitcher.setSwitchListener(mActivity);
+ mPreviewThumb = (ImageView) mRootView.findViewById(R.id.preview_thumb);
+ mPreviewThumb.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (!CameraControls.isAnimating())
+ mActivity.gotoGallery();
+ }
+ });
}
public void onStartCapture() {
@@ -202,6 +213,23 @@ public class WideAnglePanoramaUI implements
mProgressDirectionMatrix.postRotate(orientation);
}
+ public void updatePreviewThumbnail(Bitmap bitmap) {
+ mPreviewThumb.setVisibility(View.VISIBLE);
+ mPreviewThumb.setImageBitmap(bitmap);
+ mActivity.setPreviewThumbnailBitmap(bitmap);
+ }
+
+ public void updatePreviewThumbnail() {
+ mPreviewThumb.setVisibility(View.VISIBLE);
+ Bitmap bitmap = mActivity.getPreviewThumbBitmap();
+ if (bitmap != null)
+ mPreviewThumb.setImageBitmap(bitmap);
+ else {
+ UpdatePreviewThumbnail task = mActivity.new UpdatePreviewThumbnail(mPreviewThumb);
+ task.execute();
+ }
+ }
+
public void showDirectionIndicators(int direction) {
switch (direction) {
case PanoProgressBar.DIRECTION_NONE:
@@ -227,6 +255,7 @@ public class WideAnglePanoramaUI implements
public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int i, int i2) {
mSurfaceTexture = surfaceTexture;
mController.onPreviewUIReady();
+ updatePreviewThumbnail();
}
@Override
@@ -282,6 +311,9 @@ public class WideAnglePanoramaUI implements
// is sometimes not shown due to wrong layout result. It's likely to be
// a framework bug. Call requestLayout() as a workaround.
mSavingProgressBar.requestLayout();
+
+ updatePreviewThumbnail(Bitmap.createScaledBitmap(bitmap,
+ bitmap.getWidth() / 2, bitmap.getHeight() / 2, false));
}
public void onConfigurationChanged(
diff --git a/src/com/android/camera/data/FixedFirstDataAdapter.java b/src/com/android/camera/data/FixedFirstDataAdapter.java
index e26ec2785..03402da43 100644
--- a/src/com/android/camera/data/FixedFirstDataAdapter.java
+++ b/src/com/android/camera/data/FixedFirstDataAdapter.java
@@ -158,6 +158,7 @@ public class FixedFirstDataAdapter extends AbstractLocalDataAdapterWrapper
return (dataID != 0);
}
});
+ mListener.onDataLoaded();
}
@Override
diff --git a/src/com/android/camera/ui/CameraControls.java b/src/com/android/camera/ui/CameraControls.java
index aeaa0d4e7..1c9419569 100644
--- a/src/com/android/camera/ui/CameraControls.java
+++ b/src/com/android/camera/ui/CameraControls.java
@@ -41,7 +41,6 @@ public class CameraControls extends RotatableLayout {
private View mSwitcher;
private View mMenu;
private View mFrontBackSwitcher;
- private View mFlashSwitcher;
private View mHdrSwitcher;
private View mIndicators;
private View mPreview;
@@ -53,13 +52,13 @@ public class CameraControls extends RotatableLayout {
private static boolean isAnimating = false;
private ArrayList<View> mViewList;
private static final int FRONT_BACK_INDEX = 0;
- private static final int FLASH_INDEX = 1;
- private static final int HDR_INDEX = 2;
- private static final int SCENE_MODE_INDEX = 3;
- private static final int FILTER_MODE_INDEX = 4;
+ private static final int HDR_INDEX = 1;
+ private static final int SCENE_MODE_INDEX = 2;
+ private static final int FILTER_MODE_INDEX = 3;
+ private static final int MENU_INDEX = 4;
private static final int SWITCHER_INDEX = 5;
private static final int SHUTTER_INDEX = 6;
- private static final int MENU_INDEX = 7;
+ private static final int PREVIEW_INDEX = 7;
private static final int INDICATOR_INDEX = 8;
private static final int ANIME_DURATION = 300;
private float[][] mLocX = new float[4][9];
@@ -82,7 +81,6 @@ public class CameraControls extends RotatableLayout {
resetLocation(0, 0);
mFrontBackSwitcher.setVisibility(View.INVISIBLE);
- mFlashSwitcher.setVisibility(View.INVISIBLE);
mHdrSwitcher.setVisibility(View.INVISIBLE);
mSceneModeSwitcher.setVisibility(View.INVISIBLE);
mFilterModeSwitcher.setVisibility(View.INVISIBLE);
@@ -101,7 +99,6 @@ public class CameraControls extends RotatableLayout {
resetLocation(0, 0);
mFrontBackSwitcher.setVisibility(View.INVISIBLE);
- mFlashSwitcher.setVisibility(View.INVISIBLE);
mHdrSwitcher.setVisibility(View.INVISIBLE);
mSceneModeSwitcher.setVisibility(View.INVISIBLE);
mFilterModeSwitcher.setVisibility(View.INVISIBLE);
@@ -161,21 +158,19 @@ public class CameraControls extends RotatableLayout {
mSwitcher.setPressed(false);
mMenu.setPressed(false);
mFrontBackSwitcher.setPressed(false);
- mFlashSwitcher.setPressed(false);
mHdrSwitcher.setPressed(false);
mSceneModeSwitcher.setPressed(false);
mFilterModeSwitcher.setPressed(false);
} else {
- mTempEnabled[FLASH_INDEX] = mFlashSwitcher.isEnabled();
mTempEnabled[FILTER_MODE_INDEX] = mFilterModeSwitcher.isEnabled();
}
((ShutterButton) mShutter).enableTouch(enable);
((ModuleSwitcher) mSwitcher).enableTouch(enable);
mMenu.setEnabled(enable);
mFrontBackSwitcher.setEnabled(enable);
- mFlashSwitcher.setEnabled(enable && mTempEnabled[FLASH_INDEX]);
mHdrSwitcher.setEnabled(enable);
mSceneModeSwitcher.setEnabled(enable);
+ mPreview.setEnabled(enable);
mFilterModeSwitcher.setEnabled(enable && mTempEnabled[FILTER_MODE_INDEX]);
}
@@ -183,8 +178,6 @@ public class CameraControls extends RotatableLayout {
mViewList = new ArrayList<View>();
if (mFrontBackSwitcher.getVisibility() == View.VISIBLE)
mViewList.add(mFrontBackSwitcher);
- if (mFlashSwitcher.getVisibility() == View.VISIBLE)
- mViewList.add(mFlashSwitcher);
if (mHdrSwitcher.getVisibility() == View.VISIBLE)
mViewList.add(mHdrSwitcher);
if (mSceneModeSwitcher.getVisibility() == View.VISIBLE)
@@ -206,7 +199,6 @@ public class CameraControls extends RotatableLayout {
mSwitcher = findViewById(R.id.camera_switcher);
mShutter = findViewById(R.id.shutter_button);
mFrontBackSwitcher = findViewById(R.id.front_back_switcher);
- mFlashSwitcher = findViewById(R.id.flash_switcher);
mHdrSwitcher = findViewById(R.id.hdr_switcher);
mMenu = findViewById(R.id.menu);
mIndicators = findViewById(R.id.on_screen_indicators);
@@ -232,7 +224,6 @@ public class CameraControls extends RotatableLayout {
v.layout(l, t, r, b);
}
Rect shutter = new Rect();
- topRight(mPreview, l, t, r, b);
center(mShutter, l, t, r, b, orientation, rotation, shutter, SHUTTER_INDEX);
mSize = (int) (Math.max(shutter.right - shutter.left, shutter.bottom - shutter.top) * 1.2f);
center(mBackgroundView, l, t, r, b, orientation, rotation, new Rect(), -1);
@@ -252,11 +243,11 @@ public class CameraControls extends RotatableLayout {
private void setLocation(int w, int h) {
int rotation = getUnifiedRotation();
toIndex(mSwitcher, w, h, rotation, 4, 6, SWITCHER_INDEX);
- toIndex(mMenu, w, h, rotation, 0, 6, MENU_INDEX);
+ toIndex(mMenu, w, h, rotation, 4, 0, MENU_INDEX);
toIndex(mIndicators, w, h, rotation, 0, 6, INDICATOR_INDEX);
toIndex(mFrontBackSwitcher, w, h, rotation, 2, 0, FRONT_BACK_INDEX);
- toIndex(mFlashSwitcher, w, h, rotation, 3, 0, FLASH_INDEX);
- toIndex(mHdrSwitcher, w, h, rotation, 4, 0, HDR_INDEX);
+ toIndex(mPreview, w, h, rotation, 0, 6, PREVIEW_INDEX);
+ toIndex(mHdrSwitcher, w, h, rotation, 3, 0, HDR_INDEX);
toIndex(mFilterModeSwitcher, w, h, rotation, 1, 0, FILTER_MODE_INDEX);
toIndex(mSceneModeSwitcher, w, h, rotation, 0, 0, SCENE_MODE_INDEX);
}
@@ -310,24 +301,24 @@ public class CameraControls extends RotatableLayout {
int idx1 = rotation / 90;
mFrontBackSwitcher.setX(mLocX[idx1][FRONT_BACK_INDEX] + x);
- mFlashSwitcher.setX(mLocX[idx1][FLASH_INDEX] + x);
mHdrSwitcher.setX(mLocX[idx1][HDR_INDEX] + x);
mSceneModeSwitcher.setX(mLocX[idx1][SCENE_MODE_INDEX] + x);
mFilterModeSwitcher.setX(mLocX[idx1][FILTER_MODE_INDEX] + x);
+ mMenu.setX(mLocX[idx1][MENU_INDEX] + x);
mSwitcher.setX(mLocX[idx1][SWITCHER_INDEX] - x);
mShutter.setX(mLocX[idx1][SHUTTER_INDEX] - x);
- mMenu.setX(mLocX[idx1][MENU_INDEX] - x);
mIndicators.setX(mLocX[idx1][INDICATOR_INDEX] - x);
+ mPreview.setX(mLocX[idx1][PREVIEW_INDEX] - x);
mFrontBackSwitcher.setY(mLocY[idx1][FRONT_BACK_INDEX] + y);
- mFlashSwitcher.setY(mLocY[idx1][FLASH_INDEX] + y);
mHdrSwitcher.setY(mLocY[idx1][HDR_INDEX] + y);
mSceneModeSwitcher.setY(mLocY[idx1][SCENE_MODE_INDEX] + y);
mFilterModeSwitcher.setY(mLocY[idx1][FILTER_MODE_INDEX] + y);
+ mMenu.setY(mLocY[idx1][MENU_INDEX] + y);
mSwitcher.setY(mLocY[idx1][SWITCHER_INDEX] - y);
mShutter.setY(mLocY[idx1][SHUTTER_INDEX] - y);
- mMenu.setY(mLocY[idx1][MENU_INDEX] - y);
mIndicators.setY(mLocY[idx1][INDICATOR_INDEX] - y);
+ mPreview.setY(mLocY[idx1][PREVIEW_INDEX] - y);
}
public void hideUI() {
@@ -335,7 +326,6 @@ public class CameraControls extends RotatableLayout {
enableTouch(false);
int rotation = getUnifiedRotation();
mFrontBackSwitcher.animate().cancel();
- mFlashSwitcher.animate().cancel();
mHdrSwitcher.animate().cancel();
mSceneModeSwitcher.animate().cancel();
mFilterModeSwitcher.animate().cancel();
@@ -343,6 +333,7 @@ public class CameraControls extends RotatableLayout {
mShutter.animate().cancel();
mMenu.animate().cancel();
mIndicators.animate().cancel();
+ mPreview.animate().cancel();
mFrontBackSwitcher.animate().setListener(outlistener);
((ModuleSwitcher) mSwitcher).removePopup();
resetLocation(0, 0);
@@ -350,51 +341,51 @@ public class CameraControls extends RotatableLayout {
switch (rotation) {
case 0:
mFrontBackSwitcher.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
- mFlashSwitcher.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
mHdrSwitcher.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
mSceneModeSwitcher.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
mFilterModeSwitcher.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
+ mMenu.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
mSwitcher.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
mShutter.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
- mMenu.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
mIndicators.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
+ mPreview.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
break;
case 90:
mFrontBackSwitcher.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
- mFlashSwitcher.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
mHdrSwitcher.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
mSceneModeSwitcher.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
mFilterModeSwitcher.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
+ mMenu.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
mSwitcher.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
mShutter.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
- mMenu.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
mIndicators.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
+ mPreview.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
break;
case 180:
mFrontBackSwitcher.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
- mFlashSwitcher.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
mHdrSwitcher.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
mSceneModeSwitcher.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
mFilterModeSwitcher.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
+ mMenu.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
mSwitcher.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
mShutter.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
- mMenu.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
mIndicators.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
+ mPreview.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
break;
case 270:
mFrontBackSwitcher.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
- mFlashSwitcher.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
mHdrSwitcher.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
mSceneModeSwitcher.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
mFilterModeSwitcher.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
+ mMenu.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
mSwitcher.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
mShutter.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
- mMenu.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
mIndicators.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
+ mPreview.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
break;
}
}
@@ -404,7 +395,6 @@ public class CameraControls extends RotatableLayout {
enableTouch(false);
int rotation = getUnifiedRotation();
mFrontBackSwitcher.animate().cancel();
- mFlashSwitcher.animate().cancel();
mHdrSwitcher.animate().cancel();
mSceneModeSwitcher.animate().cancel();
mFilterModeSwitcher.animate().cancel();
@@ -412,6 +402,7 @@ public class CameraControls extends RotatableLayout {
mShutter.animate().cancel();
mMenu.animate().cancel();
mIndicators.animate().cancel();
+ mPreview.animate().cancel();
if (mViewList != null)
for (View v : mViewList) {
v.setVisibility(View.VISIBLE);
@@ -423,6 +414,7 @@ public class CameraControls extends RotatableLayout {
mMenu.setVisibility(View.VISIBLE);
mIndicators.setVisibility(View.VISIBLE);
+ mPreview.setVisibility(View.VISIBLE);
mFrontBackSwitcher.animate().setListener(inlistener);
switch (rotation) {
@@ -430,57 +422,57 @@ public class CameraControls extends RotatableLayout {
resetLocation(0, -mSize);
mFrontBackSwitcher.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
- mFlashSwitcher.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
mHdrSwitcher.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
mSceneModeSwitcher.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
mFilterModeSwitcher.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
+ mMenu.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
mSwitcher.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
mShutter.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
- mMenu.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
mIndicators.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
+ mPreview.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
break;
case 90:
resetLocation(-mSize, 0);
mFrontBackSwitcher.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
- mFlashSwitcher.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
mHdrSwitcher.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
mSceneModeSwitcher.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
mFilterModeSwitcher.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
+ mMenu.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
mSwitcher.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
mShutter.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
- mMenu.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
mIndicators.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
+ mPreview.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
break;
case 180:
resetLocation(0, mSize);
mFrontBackSwitcher.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
- mFlashSwitcher.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
mHdrSwitcher.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
mSceneModeSwitcher.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
mFilterModeSwitcher.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
+ mMenu.animate().translationYBy(-mSize).setDuration(ANIME_DURATION);
mSwitcher.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
mShutter.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
- mMenu.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
mIndicators.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
+ mPreview.animate().translationYBy(mSize).setDuration(ANIME_DURATION);
break;
case 270:
resetLocation(mSize, 0);
mFrontBackSwitcher.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
- mFlashSwitcher.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
mHdrSwitcher.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
mSceneModeSwitcher.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
mFilterModeSwitcher.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
+ mMenu.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
mSwitcher.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
mShutter.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
- mMenu.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
mIndicators.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
+ mPreview.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
break;
}
}
@@ -632,14 +624,6 @@ public class CameraControls extends RotatableLayout {
v.layout(l, t, r, b);
}
- private void topRight(View v, int l, int t, int r, int b) {
- // layout using the specific margins; the rotation code messes up the
- // others
- int mt = getContext().getResources().getDimensionPixelSize(R.dimen.capture_margin_top);
- int mr = getContext().getResources().getDimensionPixelSize(R.dimen.capture_margin_right);
- v.layout(r - v.getMeasuredWidth() - mr, t + mt, r - mr, t + mt + v.getMeasuredHeight());
- }
-
private void adjustBackground() {
int rotation = getUnifiedRotation();
// remove current drawable and reset rotation
diff --git a/src/com/android/camera/ui/FilmStripView.java b/src/com/android/camera/ui/FilmStripView.java
index 8da49a10a..7f197caf4 100644
--- a/src/com/android/camera/ui/FilmStripView.java
+++ b/src/com/android/camera/ui/FilmStripView.java
@@ -106,6 +106,8 @@ public class FilmStripView extends ViewGroup implements BottomControlsListener {
private boolean mSendToPreviewMenu;
private boolean mSendToMenu;
private boolean mReset;
+ private boolean mIsLoaded = false;
+
/**
* Common interface for all images in the filmstrip.
*/
@@ -1733,7 +1735,10 @@ public class FilmStripView extends ViewGroup implements BottomControlsListener {
mDataAdapter.setListener(new DataAdapter.Listener() {
@Override
public void onDataLoaded() {
- reload();
+ mActivity.updatePreviewThumbnail();
+ if (!mIsLoaded)
+ reload();
+ mIsLoaded = true;
}
@Override
@@ -1749,6 +1754,7 @@ public class FilmStripView extends ViewGroup implements BottomControlsListener {
return;
}
updateInsertion(dataID);
+ mActivity.updatePreviewThumbnailForVideo();
}
@Override
@@ -1807,9 +1813,7 @@ public class FilmStripView extends ViewGroup implements BottomControlsListener {
&& deltaX < mSlop * (-1)) {
// intercept left swipe
if (Math.abs(deltaX) >= Math.abs(deltaY) * 2) {
- UsageStatistics.onEvent(UsageStatistics.COMPONENT_CAMERA,
- UsageStatistics.ACTION_FILMSTRIP, null);
- return true;
+ return false;
}
}
}