summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDoris Liu <tianliu@google.com>2013-09-26 15:23:41 -0700
committerDoris Liu <tianliu@google.com>2013-09-26 16:19:45 -0700
commit2b86d873ca4fb3a921139633ed7be9959ab452df (patch)
treeccd04a8b5453a0287aaa2a7b14bb890067ae12a4 /src
parent667880948de7a051f62359878cb61c1e0a867e24 (diff)
downloadandroid_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.java27
-rw-r--r--src/com/android/camera/data/LocalMediaObserver.java32
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;
}
}