diff options
-rw-r--r-- | src/com/android/camera/CameraActivity.java | 43 | ||||
-rw-r--r-- | src/com/android/camera/PhotoModule.java | 6 | ||||
-rw-r--r-- | src/com/android/camera/WideAnglePanoramaModule.java | 2 | ||||
-rw-r--r-- | src/com/android/camera/WideAnglePanoramaUI.java | 2 | ||||
-rw-r--r-- | src/com/android/camera/data/CameraDataAdapter.java | 19 | ||||
-rw-r--r-- | src/com/android/camera/data/FixedFirstDataAdapter.java | 2 | ||||
-rw-r--r-- | src/com/android/camera/data/LocalDataList.java | 10 |
7 files changed, 74 insertions, 10 deletions
diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java index 168c9064a..33fe20ae3 100644 --- a/src/com/android/camera/CameraActivity.java +++ b/src/com/android/camera/CameraActivity.java @@ -144,9 +144,9 @@ public class CameraActivity extends Activity private static final int SUPPORT_ALL = 0xffffffff; /** This data adapter is used by FilmStripView. */ - private LocalDataAdapter mDataAdapter; + private LocalDataAdapter mDataAdapter = null; /** This data adapter represents the real local camera data. */ - private LocalDataAdapter mWrappedDataAdapter; + private LocalDataAdapter mWrappedDataAdapter = null; private PanoramaStitchingManager mPanoramaManager; private PlaceholderManager mPlaceholderManager; @@ -1239,6 +1239,35 @@ public class CameraActivity extends Activity @Override public void onResume() { + if (!mSecureCamera) { + if (mWrappedDataAdapter == null) { + mWrappedDataAdapter = new FixedFirstDataAdapter( + new CameraDataAdapter(new ColorDrawable( + getResources().getColor(R.color.photo_placeholder))), + mCameraPreviewData); + } + mDataAdapter = mWrappedDataAdapter; + mFilmStripView.setDataAdapter(mDataAdapter); + if (!isCaptureIntent()) { + mDataAdapter.requestLoad(getContentResolver()); + } + } else { + ImageView v = (ImageView) getLayoutInflater().inflate( + R.layout.secure_album_placeholder, null); + if (mDataAdapter == null) { + mDataAdapter = new FixedLastDataAdapter( + mWrappedDataAdapter, + new SimpleViewData( + v, + v.getDrawable().getIntrinsicWidth(), + v.getDrawable().getIntrinsicHeight(), + 0, 0)); + } + // Flush out all the original data. + mDataAdapter.flush(); + mFilmStripView.setDataAdapter(mDataAdapter); + } + // TODO: Handle this in OrientationManager. // Auto-rotate off if (Settings.System.getInt(getContentResolver(), @@ -1299,12 +1328,22 @@ public class CameraActivity extends Activity @Override protected void onStop() { super.onStop(); + if (mDataAdapter != null) { + mDataAdapter.removeData(CameraActivity.this,-1); + } + mDataAdapter = null; + mWrappedDataAdapter = null; mPanoramaViewHelper.onStop(); unbindMediaSaveService(); } @Override public void onDestroy() { + + if (mDataAdapter != null) { + mDataAdapter.removeData(CameraActivity.this,-1); + } + if (mSecureCamera) { unregisterReceiver(mScreenOffReceiver); } diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java index 56579f246..36acbbe05 100644 --- a/src/com/android/camera/PhotoModule.java +++ b/src/com/android/camera/PhotoModule.java @@ -3329,7 +3329,7 @@ class JpegEncodingQualityMappings { } class GraphView extends View { - private Bitmap mBitmap; + private Bitmap mBitmap = null; private Paint mPaint = new Paint(); private Paint mPaintRect = new Paint(); private Canvas mCanvas = new Canvas(); @@ -3352,6 +3352,10 @@ class GraphView extends View { } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { + if (mBitmap != null) { + mBitmap.recycle(); + mBitmap = null; + } mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.RGB_565); mCanvas.setBitmap(mBitmap); mWidth = w; diff --git a/src/com/android/camera/WideAnglePanoramaModule.java b/src/com/android/camera/WideAnglePanoramaModule.java index f6daa6019..16fc8bf10 100644 --- a/src/com/android/camera/WideAnglePanoramaModule.java +++ b/src/com/android/camera/WideAnglePanoramaModule.java @@ -91,7 +91,7 @@ public class WideAnglePanoramaModule private ContentResolver mContentResolver; private WideAnglePanoramaUI mUI; - private MosaicPreviewRenderer mMosaicPreviewRenderer; + private MosaicPreviewRenderer mMosaicPreviewRenderer = null; private Object mRendererLock = new Object(); private Object mWaitObject = new Object(); diff --git a/src/com/android/camera/WideAnglePanoramaUI.java b/src/com/android/camera/WideAnglePanoramaUI.java index f41653982..c2a31a987 100644 --- a/src/com/android/camera/WideAnglePanoramaUI.java +++ b/src/com/android/camera/WideAnglePanoramaUI.java @@ -276,6 +276,8 @@ public class WideAnglePanoramaUI implements } mReview.setImageBitmap(bitmap); + bitmap.recycle(); + bitmap = null; mCaptureLayout.setVisibility(View.GONE); mReviewLayout.setVisibility(View.VISIBLE); } diff --git a/src/com/android/camera/data/CameraDataAdapter.java b/src/com/android/camera/data/CameraDataAdapter.java index 4643d03bf..ac61934fc 100644 --- a/src/com/android/camera/data/CameraDataAdapter.java +++ b/src/com/android/camera/data/CameraDataAdapter.java @@ -44,7 +44,7 @@ public class CameraDataAdapter implements LocalDataAdapter { private static final int DEFAULT_DECODE_SIZE = 1600; private static final String[] CAMERA_PATH = { Storage.DIRECTORY + "/%" ,SDCard.instance().getDirectory() + "/%"}; - private LocalDataList mImages; + private LocalDataList mImages = null; private Listener mListener; private Drawable mPlaceHolder; @@ -124,11 +124,18 @@ public class CameraDataAdapter implements LocalDataAdapter { @Override public void removeData(Context c, int dataID) { if (dataID >= mImages.size()) return; - LocalData d = mImages.remove(dataID); - // Delete previously removed data first. - executeDeletion(c); - mLocalDataToDelete = d; - mListener.onDataRemoved(dataID, d); + if (dataID == -1) { + if ( (mImages != null) && (mImages.size() > 0) ) { + mImages.cleanup(); + mImages = null; + } + } else { + LocalData d = mImages.remove(dataID); + // Delete previously removed data first. + executeDeletion(c); + mLocalDataToDelete = d; + mListener.onDataRemoved(dataID, d); + } } // TODO: put the database query on background thread diff --git a/src/com/android/camera/data/FixedFirstDataAdapter.java b/src/com/android/camera/data/FixedFirstDataAdapter.java index e26ec2785..f89f1ca94 100644 --- a/src/com/android/camera/data/FixedFirstDataAdapter.java +++ b/src/com/android/camera/data/FixedFirstDataAdapter.java @@ -67,6 +67,8 @@ public class FixedFirstDataAdapter extends AbstractLocalDataAdapterWrapper public void removeData(Context context, int dataID) { if (dataID > 0) { mAdapter.removeData(context, dataID - 1); + } else { + mAdapter.removeData(context, dataID); } } diff --git a/src/com/android/camera/data/LocalDataList.java b/src/com/android/camera/data/LocalDataList.java index 3ccc4de54..7e6fc453d 100644 --- a/src/com/android/camera/data/LocalDataList.java +++ b/src/com/android/camera/data/LocalDataList.java @@ -64,6 +64,16 @@ public class LocalDataList { return mUriMap.get(uri); } + public void cleanup() { + if ((mList != null) && (mList.size() > 0)) { + for(int i=0;i<mList.size();i++) { + remove(i); + } + } + mList = null; + mUriMap = null; + } + public void set(int pos, LocalData data) { mList.set(pos, data); mUriMap.put(data.getContentUri(), data); |