diff options
-rw-r--r-- | res/layout/camera_filmstrip.xml | 75 | ||||
-rw-r--r-- | res/layout/filmstrip_bottom_controls.xml | 6 | ||||
-rw-r--r-- | res/layout/undo_bar.xml | 37 | ||||
-rw-r--r-- | src/com/android/camera/CameraActivity.java | 61 | ||||
-rw-r--r-- | src/com/android/camera/data/CameraDataAdapter.java | 2 | ||||
-rw-r--r-- | src/com/android/camera/ui/FilmStripView.java | 48 |
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) { |