diff options
author | Doris Liu <tianliu@google.com> | 2013-09-26 15:23:41 -0700 |
---|---|---|
committer | Doris Liu <tianliu@google.com> | 2013-09-26 16:19:45 -0700 |
commit | 2b86d873ca4fb3a921139633ed7be9959ab452df (patch) | |
tree | ccd04a8b5453a0287aaa2a7b14bb890067ae12a4 /src | |
parent | 667880948de7a051f62359878cb61c1e0a867e24 (diff) | |
download | android_packages_apps_Snap-2b86d873ca4fb3a921139633ed7be9959ab452df.tar.gz android_packages_apps_Snap-2b86d873ca4fb3a921139633ed7be9959ab452df.tar.bz2 android_packages_apps_Snap-2b86d873ca4fb3a921139633ed7be9959ab452df.zip |
Fix memory leak of context in LocalMediaObserver
Bug: 10728773
Change-Id: Ie5a50590e71fd4b853cb7590db4fa14f5b6dc73b
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/camera/CameraActivity.java | 27 | ||||
-rw-r--r-- | src/com/android/camera/data/LocalMediaObserver.java | 32 |
2 files changed, 29 insertions, 30 deletions
diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java index 83314f061..21be8e740 100644 --- a/src/com/android/camera/CameraActivity.java +++ b/src/com/android/camera/CameraActivity.java @@ -175,8 +175,6 @@ public class CameraActivity extends Activity private Intent mPanoramaShareIntent; private LocalMediaObserver mLocalImagesObserver; private LocalMediaObserver mLocalVideosObserver; - private boolean mActivityPaused; - private boolean mMediaDataChangedDuringPause; private final int DEFAULT_SYSTEM_UI_VISIBILITY = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION; @@ -986,8 +984,8 @@ public class CameraActivity extends Activity setupNfcBeamPush(); - mLocalImagesObserver = new LocalMediaObserver(mMainHandler, this); - mLocalVideosObserver = new LocalMediaObserver(mMainHandler, this); + mLocalImagesObserver = new LocalMediaObserver(); + mLocalVideosObserver = new LocalMediaObserver(); getContentResolver().registerContentObserver( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, true, @@ -1035,7 +1033,9 @@ public class CameraActivity extends Activity mCurrentModule.onPauseBeforeSuper(); super.onPause(); mCurrentModule.onPauseAfterSuper(); - mActivityPaused = true; + + mLocalImagesObserver.setActivityPaused(true); + mLocalVideosObserver.setActivityPaused(true); } @Override @@ -1075,11 +1075,12 @@ public class CameraActivity extends Activity // than the preview. mResetToPreviewOnResume = true; - mActivityPaused = false; - if (mMediaDataChangedDuringPause) { + if (mLocalVideosObserver.isMediaDataChangedDuringPause() + || mLocalImagesObserver.isMediaDataChangedDuringPause()) { mDataAdapter.requestLoad(getContentResolver()); - mMediaDataChangedDuringPause = false; } + mLocalImagesObserver.setActivityPaused(false); + mLocalVideosObserver.setActivityPaused(false); } @Override @@ -1448,14 +1449,4 @@ public class CameraActivity extends Activity public CameraOpenErrorCallback getCameraOpenErrorCallback() { return mCameraOpenErrorCallback; } - - /** - * When the activity is paused and MediaObserver get onChange() call, then - * we would like to set a dirty bit to reload the data at onResume(). - */ - public void setDirtyWhenPaused() { - if (mActivityPaused && !mMediaDataChangedDuringPause) { - mMediaDataChangedDuringPause = true; - } - } } diff --git a/src/com/android/camera/data/LocalMediaObserver.java b/src/com/android/camera/data/LocalMediaObserver.java index 4dd0f8897..d676396a7 100644 --- a/src/com/android/camera/data/LocalMediaObserver.java +++ b/src/com/android/camera/data/LocalMediaObserver.java @@ -17,10 +17,6 @@ package com.android.camera.data; import android.database.ContentObserver; -import android.net.Uri; -import android.os.Handler; - -import com.android.camera.CameraActivity; /** * Listening to the changes to the local image and video data. onChange will @@ -28,20 +24,32 @@ import com.android.camera.CameraActivity; */ public class LocalMediaObserver extends ContentObserver { - private final CameraActivity mActivity; + private boolean mActivityPaused = false; + private boolean mMediaDataChangedDuringPause = false; - public LocalMediaObserver(Handler handler, CameraActivity activity) { - super(handler); - mActivity = activity; + public LocalMediaObserver() { + super(null); } + /** + * When the activity is paused and MediaObserver get onChange() call, then + * we would like to set a dirty bit to reload the data at onResume(). + */ @Override public void onChange(boolean selfChange) { - this.onChange(selfChange, null); + if (mActivityPaused) { + mMediaDataChangedDuringPause = true; + } } - @Override - public void onChange(boolean selfChange, Uri uri) { - mActivity.setDirtyWhenPaused(); + public void setActivityPaused(boolean paused) { + mActivityPaused = paused; + if (!paused) { + mMediaDataChangedDuringPause = false; + } + } + + public boolean isMediaDataChangedDuringPause() { + return mMediaDataChangedDuringPause; } } |