summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--res/layout/camera_filmstrip.xml75
-rw-r--r--res/layout/filmstrip_bottom_controls.xml6
-rw-r--r--res/layout/undo_bar.xml37
-rw-r--r--src/com/android/camera/CameraActivity.java61
-rw-r--r--src/com/android/camera/data/CameraDataAdapter.java2
-rw-r--r--src/com/android/camera/ui/FilmStripView.java48
6 files changed, 162 insertions, 67 deletions
diff --git a/res/layout/camera_filmstrip.xml b/res/layout/camera_filmstrip.xml
index 4281aac3d..80e6c4b3a 100644
--- a/res/layout/camera_filmstrip.xml
+++ b/res/layout/camera_filmstrip.xml
@@ -16,6 +16,7 @@
-->
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/camera_layout_root"
android:layout_width="match_parent"
android:layout_height="match_parent" >
@@ -24,43 +25,51 @@
android:layout_width="match_parent"
android:layout_height="match_parent" />
- <include layout="@layout/filmstrip_bottom_controls" />
-
- <LinearLayout
- android:id="@+id/pano_stitching_progress_panel"
+ <!--com.android.camera.ui.FitSystemUiFrameLayout-->
+ <FrameLayout
+ android:id="@+id/camera_above_filmstrip_layout"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="bottom|center_horizontal"
- android:paddingBottom="52dp"
- android:paddingLeft="5dp"
- android:paddingRight="5dp"
- android:paddingTop="5dp"
- android:visibility="gone"
- android:orientation="vertical">
+ android:layout_height="match_parent" >
- <TextView
- android:id="@+id/pano_stitching_progress_text"
- android:text="@string/pano_progress_text"
- android:textColor="#ffffffff"
- android:textSize="14dp"
- android:shadowColor="#ff000000"
- android:shadowDx="0"
- android:shadowDy="0"
- android:shadowRadius="2"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentRight="true"
- android:paddingBottom="8dp"
- android:visibility="visible"
- android:layout_gravity="right"/>
+ <include layout="@layout/filmstrip_bottom_controls" />
- <ProgressBar
- android:id="@+id/pano_stitching_progress_bar"
- style="@android:style/Widget.Holo.Light.ProgressBar.Horizontal"
+ <LinearLayout
+ android:id="@+id/pano_stitching_progress_panel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:visibility="visible"
- android:layout_gravity="bottom|center_horizontal" />
- </LinearLayout>
+ android:layout_gravity="bottom|center_horizontal"
+ android:paddingBottom="52dp"
+ android:paddingLeft="5dp"
+ android:paddingRight="5dp"
+ android:paddingTop="5dp"
+ android:visibility="gone"
+ android:orientation="vertical">
+
+ <TextView
+ android:id="@+id/pano_stitching_progress_text"
+ android:text="@string/pano_progress_text"
+ android:textColor="#ffffffff"
+ android:textSize="14dp"
+ android:shadowColor="#ff000000"
+ android:shadowDx="0"
+ android:shadowDy="0"
+ android:shadowRadius="2"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentRight="true"
+ android:paddingBottom="8dp"
+ android:visibility="visible"
+ android:layout_gravity="right"/>
+
+ <ProgressBar
+ android:id="@+id/pano_stitching_progress_bar"
+ style="@android:style/Widget.Holo.Light.ProgressBar.Horizontal"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:visibility="visible"
+ android:layout_gravity="bottom|center_horizontal" />
+ </LinearLayout>
+ </FrameLayout>
+ <!--/com.android.camera.ui.FitSystemUiFrameLayout-->
</FrameLayout>
diff --git a/res/layout/filmstrip_bottom_controls.xml b/res/layout/filmstrip_bottom_controls.xml
index 14f0ee9fd..5b049fe5e 100644
--- a/res/layout/filmstrip_bottom_controls.xml
+++ b/res/layout/filmstrip_bottom_controls.xml
@@ -20,9 +20,7 @@
android:id="@+id/filmstrip_bottom_controls"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_alignParentBottom="true"
- android:layout_alignParentLeft="true"
- android:orientation="horizontal"
+ android:layout_gravity="bottom"
android:padding="10dp"
android:visibility="visible" >
@@ -65,4 +63,4 @@
android:src="@drawable/ic_menu_tiny_planet"
android:visibility="gone" />
-</com.android.camera.ui.FilmstripBottomControls> \ No newline at end of file
+</com.android.camera.ui.FilmstripBottomControls>
diff --git a/res/layout/undo_bar.xml b/res/layout/undo_bar.xml
new file mode 100644
index 000000000..37701b199
--- /dev/null
+++ b/res/layout/undo_bar.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2013 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.
+-->
+<!-- This layout is shared by phone and tablet in portrait or landscape orientation. -->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/camera_undo_deletion_bar"
+ android:orientation="horizontal"
+ android:visibility="gone"
+ android:layout_gravity="bottom"
+ style="@style/UndoBar">
+
+ <TextView android:text="@string/deleted"
+ style="@style/UndoBarTextAppearance"
+ android:layout_width="0dp"
+ android:layout_height="match_parent"
+ android:layout_weight="1"
+ android:gravity="left|center_vertical" />
+
+ <View style="@style/UndoBarSeparator" />
+
+ <TextView android:id="@+id/camera_undo_deletion_button"
+ style="@style/UndoButton"
+ android:text="@string/undo"
+ android:drawableLeft="@drawable/ic_menu_revert_holo_dark"/>
+</LinearLayout>
diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java
index 411b29ea7..6f8530612 100644
--- a/src/com/android/camera/CameraActivity.java
+++ b/src/com/android/camera/CameraActivity.java
@@ -46,6 +46,7 @@ import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
+import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.ProgressBar;
@@ -106,7 +107,9 @@ public class CameraActivity extends Activity
private PanoramaStitchingManager mPanoramaManager;
private int mCurrentModuleIndex;
private CameraModule mCurrentModule;
- private View mRootView;
+ private FrameLayout mLayoutRoot;
+ private FrameLayout mAboveFilmstripControlLayout;
+ private View mCameraModuleRootView;
private FilmStripView mFilmStripView;
private ProgressBar mBottomProgress;
private View mPanoStitchingPanel;
@@ -126,6 +129,7 @@ public class CameraActivity extends Activity
private CameraPreviewData mCameraPreviewData;
private ActionBar mActionBar;
private Menu mActionBarMenu;
+ private ViewGroup mUndoDeletionBar;
public void gotoGallery() {
mFilmStripView.getController().goToNextItem();
@@ -327,6 +331,7 @@ public class CameraActivity extends Activity
private Runnable mDeletionRunnable = new Runnable() {
@Override
public void run() {
+ hideUndoDeletionBar();
mDataAdapter.executeDeletion(CameraActivity.this);
}
};
@@ -404,6 +409,7 @@ public class CameraActivity extends Activity
private void removeData(int dataID) {
mDataAdapter.removeData(CameraActivity.this, dataID);
+ showUndoDeletionBar();
mMainHandler.removeCallbacks(mDeletionRunnable);
mMainHandler.postDelayed(mDeletionRunnable, 3000);
}
@@ -539,11 +545,19 @@ public class CameraActivity extends Activity
registerReceiver(sScreenOffReceiver, filter);
}
}
+ mLayoutRoot = (FrameLayout) findViewById(R.id.camera_layout_root);
+
+ mAboveFilmstripControlLayout =
+ (FrameLayout) findViewById(R.id.camera_above_filmstrip_layout);
+ mAboveFilmstripControlLayout.setFitsSystemWindows(true);
+ mAboveFilmstripControlLayout.setSystemUiVisibility(
+ View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
+ | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
mPanoramaManager = new PanoramaStitchingManager(CameraActivity.this);
mPanoramaManager.addTaskListener(mStitchingListener);
LayoutInflater inflater = getLayoutInflater();
View rootLayout = inflater.inflate(R.layout.camera, null, false);
- mRootView = rootLayout.findViewById(R.id.camera_app_root);
+ mCameraModuleRootView = rootLayout.findViewById(R.id.camera_app_root);
mPanoStitchingPanel = findViewById(R.id.pano_stitching_progress_panel);
mBottomProgress = (ProgressBar) findViewById(R.id.pano_stitching_progress_bar);
mCameraPreviewData = new CameraPreviewData(rootLayout,
@@ -569,7 +583,7 @@ public class CameraActivity extends Activity
} else {
mCurrentModule = new PhotoModule();
}
- mCurrentModule.init(this, mRootView);
+ mCurrentModule.init(this, mCameraModuleRootView);
mOrientationListener = new MyOrientationEventListener(this);
mMainHandler = new Handler(getMainLooper());
@@ -797,7 +811,7 @@ public class CameraActivity extends Activity
}
private void openModule(CameraModule module) {
- module.init(this, mRootView);
+ module.init(this, mCameraModuleRootView);
module.onResumeBeforeSuper();
module.onResumeAfterSuper();
}
@@ -805,7 +819,44 @@ public class CameraActivity extends Activity
private void closeModule(CameraModule module) {
module.onPauseBeforeSuper();
module.onPauseAfterSuper();
- ((ViewGroup) mRootView).removeAllViews();
+ ((ViewGroup) mCameraModuleRootView).removeAllViews();
+ }
+
+ private void showUndoDeletionBar() {
+ if (mUndoDeletionBar == null) {
+ Log.v(TAG, "showing undo bar");
+ ViewGroup v = (ViewGroup) getLayoutInflater().inflate(
+ R.layout.undo_bar, mAboveFilmstripControlLayout, true);
+ mUndoDeletionBar = (ViewGroup) v.findViewById(R.id.camera_undo_deletion_bar);
+ View button = mUndoDeletionBar.findViewById(R.id.camera_undo_deletion_button);
+ button.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ mDataAdapter.undoDataRemoval();
+ mMainHandler.removeCallbacks(mDeletionRunnable);
+ hideUndoDeletionBar();
+ }
+ });
+ }
+ mUndoDeletionBar.setAlpha(0f);
+ mUndoDeletionBar.setVisibility(View.VISIBLE);
+ mUndoDeletionBar.animate().setDuration(200).alpha(1f).start();
+ }
+
+ private void hideUndoDeletionBar() {
+ Log.v(TAG, "Hiding undo deletion bar");
+ if (mUndoDeletionBar != null) {
+ mUndoDeletionBar.animate()
+ .setDuration(200)
+ .alpha(0f)
+ .withEndAction(new Runnable() {
+ @Override
+ public void run() {
+ mUndoDeletionBar.setVisibility(View.GONE);
+ }
+ })
+ .start();
+ }
}
@Override
diff --git a/src/com/android/camera/data/CameraDataAdapter.java b/src/com/android/camera/data/CameraDataAdapter.java
index 2b9e77754..2d19a5ee6 100644
--- a/src/com/android/camera/data/CameraDataAdapter.java
+++ b/src/com/android/camera/data/CameraDataAdapter.java
@@ -40,7 +40,7 @@ import java.util.List;
public class CameraDataAdapter implements LocalDataAdapter {
private static final String TAG = "CAM_CameraDataAdapter";
- private static final int DEFAULT_DECODE_SIZE = 3000;
+ private static final int DEFAULT_DECODE_SIZE = 1600;
private static final String[] CAMERA_PATH = { Storage.DIRECTORY + "%" };
private List<LocalData> mImages;
diff --git a/src/com/android/camera/ui/FilmStripView.java b/src/com/android/camera/ui/FilmStripView.java
index 85ebd6cc5..1d60f07ac 100644
--- a/src/com/android/camera/ui/FilmStripView.java
+++ b/src/com/android/camera/ui/FilmStripView.java
@@ -589,6 +589,20 @@ public class FilmStripView extends ViewGroup implements BottomControlsListener {
return ret;
}
+ private void measureViewItem(ViewItem item, int boundWidth, int boundHeight) {
+ int id = item.getID();
+ int[] dim = calculateChildDimension(
+ mDataAdapter.getImageData(id).getWidth(),
+ mDataAdapter.getImageData(id).getHeight(),
+ boundWidth, boundHeight);
+
+ item.getView().measure(
+ MeasureSpec.makeMeasureSpec(
+ dim[0], MeasureSpec.EXACTLY),
+ MeasureSpec.makeMeasureSpec(
+ dim[1], MeasureSpec.EXACTLY));
+ }
+
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
@@ -605,36 +619,22 @@ public class FilmStripView extends ViewGroup implements BottomControlsListener {
}
for (ViewItem item : mViewItem) {
- if (item == null) {
- continue;
+ if (item != null) {
+ measureViewItem(item, boundWidth, boundHeight);
}
-
- int id = item.getID();
- int[] dim = calculateChildDimension(
- mDataAdapter.getImageData(id).getWidth(),
- mDataAdapter.getImageData(id).getHeight(),
- boundWidth, boundHeight);
-
- item.getView().measure(
- MeasureSpec.makeMeasureSpec(
- dim[0], MeasureSpec.EXACTLY),
- MeasureSpec.makeMeasureSpec(
- dim[1], MeasureSpec.EXACTLY));
}
}
@Override
protected boolean fitSystemWindows(Rect insets) {
- if (mBottomControls != null) {
- // Set the position of the "View Photo Sphere" button.
- FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) mBottomControls
- .getLayoutParams();
- params.leftMargin = insets.left;
- params.rightMargin = insets.right;
- params.bottomMargin = insets.bottom;
- mBottomControls.setLayoutParams(params);
- }
- return super.fitSystemWindows(insets);
+ // Since the camera preview needs this callback to layout the camera
+ // controls correctly, we need to call super here.
+ super.fitSystemWindows(insets);
+ // After calling super, we need to return false because we have other
+ // layouts such as bottom controls that needs this callback. The
+ // framework behavior is to stop propagating this after the first
+ // child returning true is found.
+ return false;
}
private int findTheNearestView(int pointX) {