Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2634fe5f authored by Angus Kong's avatar Angus Kong Committed by Android (Google) Code Review
Browse files

Merge "Integrate FilmStripView." into gb-ub-photos-bryce

parents 34a50f0c 84eb27a4
Loading
Loading
Loading
Loading
+10 −4
Original line number Diff line number Diff line
@@ -13,9 +13,15 @@
     See the License for the specific language governing permissions and
     limitations under the License.
-->
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <!-- NewCameraRootView needs to be in a FrameLayout to set margins
         in the layout parameters. -->
    <com.android.camera.ui.NewCameraRootView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/camera_app_root"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </com.android.camera.ui.NewCameraRootView>
</FrameLayout>
+20 −0
Original line number Diff line number Diff line
<?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.
-->
<com.android.camera.ui.FilmStripView
xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/filmstrip_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
+25 −5
Original line number Diff line number Diff line
@@ -24,9 +24,11 @@ import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.os.IBinder;
import android.provider.Settings;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.OrientationEventListener;
import android.view.View;
@@ -34,7 +36,9 @@ import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;

import com.android.camera.data.CameraDataAdapter;
import com.android.camera.ui.CameraSwitcher.CameraSwitchListener;
import com.android.camera.ui.FilmStripView;
import com.android.camera.ui.NewCameraRootView;
import com.android.gallery3d.R;
import com.android.gallery3d.common.ApiHelper;
@@ -56,10 +60,11 @@ public class NewCameraActivity extends Activity
    // panorama. If the extra is not set, it is in the normal camera mode.
    public static final String SECURE_CAMERA_EXTRA = "secure_camera";


    private CameraDataAdapter mDataAdapter;
    private int mCurrentModuleIndex;
    private NewCameraModule mCurrentModule;
    private View mRootView;
    private FilmStripView mFilmStripView;
    private int mResultCodeForTesting;
    private Intent mResultDataForTesting;
    private OnScreenHint mStorageHint;
@@ -116,7 +121,7 @@ public class NewCameraActivity extends Activity
    @Override
    public void onCreate(Bundle state) {
        super.onCreate(state);
        setContentView(R.layout.camera);
        setContentView(R.layout.camera_filmstrip);
        if (ApiHelper.HAS_ROTATION_ANIMATION) {
            setRotationAnimation();
        }
@@ -140,7 +145,16 @@ public class NewCameraActivity extends Activity
                getApplicationContext().registerReceiver(sScreenOffReceiver, filter);
            }
        }*/
        mRootView = findViewById(R.id.camera_app_root);
        LayoutInflater inflater = getLayoutInflater();
        View rootLayout = inflater.inflate(R.layout.camera, null, false);
        mRootView = rootLayout.findViewById(R.id.camera_app_root);
        mDataAdapter = new CameraDataAdapter(
                new ColorDrawable(getResources().getColor(R.color.photo_placeholder)));
        mFilmStripView = (FilmStripView) findViewById(R.id.filmstrip_view);
        // Set up the camera preview first so the preview shows up ASAP.
        mDataAdapter.setCameraPreviewInfo(rootLayout,
                FilmStripView.ImageData.SIZE_FULL, FilmStripView.ImageData.SIZE_FULL);
        mFilmStripView.setDataAdapter(mDataAdapter);
        mCurrentModule = new NewPhotoModule();
        mCurrentModule.init(this, mRootView);
        mOrientationListener = new MyOrientationEventListener(this);
@@ -184,6 +198,9 @@ public class NewCameraActivity extends Activity
        mCurrentModule.onResumeBeforeSuper();
        super.onResume();
        mCurrentModule.onResumeAfterSuper();

        // The loading is done in background and will update the filmstrip later.
        mDataAdapter.requestLoad(getContentResolver());
    }

    @Override
@@ -200,7 +217,10 @@ public class NewCameraActivity extends Activity

    @Override
    public boolean dispatchTouchEvent(MotionEvent m) {
        return mCurrentModule.dispatchTouchEvent(m);
        //if (mFilmStripView.isInCameraFullscreen()) {
        //    return mCurrentModule.dispatchTouchEvent(m);
        //}
        return mFilmStripView.dispatchTouchEvent(m);
    }
    public boolean isAutoRotateScreen() {
        return mAutoRotateScreen;
+7 −7
Original line number Diff line number Diff line
@@ -270,7 +270,7 @@ public class NewPhotoUI implements PieListener,
    }

    private void initIndicators() {
        mOnScreenIndicators = mActivity.findViewById(R.id.on_screen_indicators);
        mOnScreenIndicators = mRootView.findViewById(R.id.on_screen_indicators);
        mExposureIndicator = (ImageView) mOnScreenIndicators.findViewById(R.id.menu_exposure_indicator);
        mFlashIndicator = (ImageView) mOnScreenIndicators.findViewById(R.id.menu_flash_indicator);
        mSceneIndicator = (ImageView) mOnScreenIndicators.findViewById(R.id.menu_scenemode_indicator);
@@ -333,8 +333,8 @@ public class NewPhotoUI implements PieListener,
    }

    public void initializeControlByIntent() {
        mBlocker = mActivity.findViewById(R.id.blocker);
        mMenuButton = mActivity.findViewById(R.id.menu);
        mBlocker = mRootView.findViewById(R.id.blocker);
        mMenuButton = mRootView.findViewById(R.id.menu);
        mMenuButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
@@ -343,12 +343,12 @@ public class NewPhotoUI implements PieListener,
        });
        if (mController.isImageCaptureIntent()) {
            hideSwitcher();
            ViewGroup cameraControls = (ViewGroup) mActivity.findViewById(R.id.camera_controls);
            ViewGroup cameraControls = (ViewGroup) mRootView.findViewById(R.id.camera_controls);
            mActivity.getLayoutInflater().inflate(R.layout.review_module_control, cameraControls);

            mReviewDoneButton = mActivity.findViewById(R.id.btn_done);
            mReviewCancelButton = mActivity.findViewById(R.id.btn_cancel);
            mReviewRetakeButton = mActivity.findViewById(R.id.btn_retake);
            mReviewDoneButton = mRootView.findViewById(R.id.btn_done);
            mReviewCancelButton = mRootView.findViewById(R.id.btn_cancel);
            mReviewRetakeButton = mRootView.findViewById(R.id.btn_retake);
            mReviewCancelButton.setVisibility(View.VISIBLE);

            mReviewDoneButton.setOnClickListener(new OnClickListener() {
+64 −27
Original line number Diff line number Diff line
@@ -22,7 +22,6 @@ import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.provider.MediaStore;
@@ -43,10 +42,10 @@ import java.util.List;
 * A FilmStripDataProvider that provide data in the camera folder.
 *
 * The given view for camera preview won't be added until the preview info
 * has been set by setPreviewInfo(int, int, int)
 * has been set by setCameraPreviewInfo(int, int).
 */
public class CameraDataAdapter implements FilmStripView.DataAdapter {
    private static final String TAG = "CamreaFilmStripDataProvider";
    private static final String TAG = CameraDataAdapter.class.getSimpleName();

    private static final int DEFAULT_DECODE_SIZE = 3000;
    private static final String[] CAMERA_PATH = { Storage.DIRECTORY + "%" };
@@ -55,20 +54,25 @@ public class CameraDataAdapter implements FilmStripView.DataAdapter {

    private Listener mListener;
    private View mCameraPreviewView;
    private ColorDrawable mPlaceHolder;
    private Drawable mPlaceHolder;

    private int mSuggestedWidth = DEFAULT_DECODE_SIZE;
    private int mSuggestedHeight = DEFAULT_DECODE_SIZE;

    public CameraDataAdapter(View cameraPreviewView, int placeHolderColor) {
        mCameraPreviewView = cameraPreviewView;
        mPlaceHolder = new ColorDrawable(placeHolderColor);
    public CameraDataAdapter(Drawable placeHolder) {
        mPlaceHolder = placeHolder;
    }

    public void setCameraPreviewInfo(int width, int height) {
    public void setCameraPreviewInfo(View cameraPreview, int width, int height) {
        mCameraPreviewView = cameraPreview;
        addOrReplaceCameraData(buildCameraImageData(width, height));
    }

    public void requestLoad(ContentResolver resolver) {
        QueryTask qtask = new QueryTask();
        qtask.execute(resolver);
    }

    @Override
    public int getTotalNumber() {
        return mImages.size();
@@ -90,11 +94,6 @@ public class CameraDataAdapter implements FilmStripView.DataAdapter {
        }
    }

    public void requestLoad(ContentResolver resolver) {
        QueryTask qtask = new QueryTask();
        qtask.execute(resolver);
    }

    @Override
    public View getView(Context c, int dataID) {
        if (dataID >= mImages.size() || dataID < 0) {
@@ -108,6 +107,7 @@ public class CameraDataAdapter implements FilmStripView.DataAdapter {
    @Override
    public void setListener(Listener listener) {
        mListener = listener;
        if (mImages != null) mListener.onDataLoaded();
    }

    private LocalData buildCameraImageData(int width, int height) {
@@ -118,15 +118,36 @@ public class CameraDataAdapter implements FilmStripView.DataAdapter {
    private void addOrReplaceCameraData(LocalData data) {
        if (mImages == null) mImages = new ArrayList<LocalData>();
        if (mImages.size() == 0) {
            // No data at all.
            mImages.add(0, data);
            if (mListener != null) mListener.onDataLoaded();
            return;
        }

        LocalData first = mImages.get(0);
        if (first.getType() == ImageData.TYPE_CAMERA_PREVIEW) {
            // Replace the old camera data.
            mImages.set(0, data);
            if (mListener != null) {
                mListener.onDataUpdated(new StatusReporter() {
                    @Override
                    public boolean isDataRemoved(int id) {
                        return false;
                    }

                    @Override
                    public boolean isDataUpdated(int id) {
                        if (id == 0) return true;
                        return false;
                    }
                });
            }
        } else {
            // Add a new camera data.
            mImages.add(0, data);
            if (mListener != null) {
                mListener.onDataLoaded();
            }
        }
    }

@@ -161,17 +182,35 @@ public class CameraDataAdapter implements FilmStripView.DataAdapter {
        @Override
        protected void onPostExecute(List<LocalData> l) {
            boolean changed = (l != mImages);
            LocalData first = null;
            LocalData cameraData = null;
            if (mImages != null && mImages.size() > 0) {
                first = mImages.get(0);
                if (first.getType() != ImageData.TYPE_CAMERA_PREVIEW) first = null;
                cameraData = mImages.get(0);
                if (cameraData.getType() != ImageData.TYPE_CAMERA_PREVIEW) cameraData = null;
            }

            mImages = l;
            if (first != null) addOrReplaceCameraData(first);
            if (cameraData != null) {
                l.add(0, cameraData);
                if (mListener != null) {
                    mListener.onDataUpdated(new StatusReporter() {
                        @Override
                        public boolean isDataRemoved(int id) {
                            return false;
                        }

                        @Override
                        public boolean isDataUpdated(int id) {
                            if (id == 0) return false;
                            return true;
                        }
                    });
                }
            } else {
                // both might be null.
                if (changed) mListener.onDataLoaded();
            }
        }
    }

    private abstract static class LocalData implements FilmStripView.ImageData {
        public int id;
@@ -199,28 +238,25 @@ public class CameraDataAdapter implements FilmStripView.DataAdapter {
        }

        @Override
        abstract public int getType();
        public abstract int getType();

        abstract View getView(Context c, int width, int height, Drawable placeHolder);
    }

    private class CameraPreviewData extends LocalData {
        private int mWidth;
        private int mHeight;

        CameraPreviewData(int w, int h) {
            mWidth = w;
            mHeight = h;
            width = w;
            height = h;
        }

        @Override
        public int getWidth() {
            return mWidth;
            return width;
        }

        @Override
        public int getHeight() {
            return mHeight;
            return height;
        }

        @Override
@@ -380,6 +416,7 @@ public class CameraDataAdapter implements FilmStripView.DataAdapter {
                    Log.e(TAG, "Cannot decode bitmap file:" + path);
                    return;
                }
                mView.setScaleType(ImageView.ScaleType.FIT_XY);
                mView.setImageBitmap(bitmap);
            }
        }
Loading