summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/com/android/gallery3d/app/AbstractGalleryActivity.java11
-rw-r--r--src/com/android/gallery3d/app/Gallery.java12
-rw-r--r--src/com/android/gallery3d/util/SpinnerVisibilitySetter.java14
3 files changed, 21 insertions, 16 deletions
diff --git a/src/com/android/gallery3d/app/AbstractGalleryActivity.java b/src/com/android/gallery3d/app/AbstractGalleryActivity.java
index 9a1d3d300..899e9bfa4 100644
--- a/src/com/android/gallery3d/app/AbstractGalleryActivity.java
+++ b/src/com/android/gallery3d/app/AbstractGalleryActivity.java
@@ -181,6 +181,17 @@ public class AbstractGalleryActivity extends Activity implements GalleryActivity
}
@Override
+ protected void onDestroy() {
+ super.onDestroy();
+ mGLRootView.lockRenderThread();
+ try {
+ getStateManager().destroy();
+ } finally {
+ mGLRootView.unlockRenderThread();
+ }
+ }
+
+ @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
mGLRootView.lockRenderThread();
try {
diff --git a/src/com/android/gallery3d/app/Gallery.java b/src/com/android/gallery3d/app/Gallery.java
index e3937bcd0..60eb069fa 100644
--- a/src/com/android/gallery3d/app/Gallery.java
+++ b/src/com/android/gallery3d/app/Gallery.java
@@ -245,18 +245,6 @@ public final class Gallery extends AbstractGalleryActivity implements OnCancelLi
}
@Override
- public void onDestroy() {
- super.onDestroy();
- GLRoot root = getGLRoot();
- root.lockRenderThread();
- try {
- getStateManager().destroy();
- } finally {
- root.unlockRenderThread();
- }
- }
-
- @Override
protected void onResume() {
Utils.assertTrue(getStateManager().getStateCount() > 0);
super.onResume();
diff --git a/src/com/android/gallery3d/util/SpinnerVisibilitySetter.java b/src/com/android/gallery3d/util/SpinnerVisibilitySetter.java
index 6ccc26460..1e0534e90 100644
--- a/src/com/android/gallery3d/util/SpinnerVisibilitySetter.java
+++ b/src/com/android/gallery3d/util/SpinnerVisibilitySetter.java
@@ -21,6 +21,7 @@ import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
+import java.lang.ref.WeakReference;
import java.util.WeakHashMap;
/**
@@ -47,25 +48,29 @@ public class SpinnerVisibilitySetter {
new WeakHashMap<Activity, SpinnerVisibilitySetter>();
private long mSpinnerVisibilityStartTime = -1;
- private Activity mActivity;
+ private WeakReference<Activity> mActivityRef;
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
+ Activity activity = mActivityRef.get();
+
switch(msg.what) {
case MSG_SHOW_SPINNER:
removeMessages(MSG_SHOW_SPINNER);
+ if (activity == null) break;
if (mSpinnerVisibilityStartTime >= 0) break;
mSpinnerVisibilityStartTime = SystemClock.elapsedRealtime();
- mActivity.setProgressBarIndeterminateVisibility(true);
+ activity.setProgressBarIndeterminateVisibility(true);
break;
case MSG_HIDE_SPINNER:
removeMessages(MSG_HIDE_SPINNER);
+ if (activity == null) break;
if (mSpinnerVisibilityStartTime < 0) break;
long t = SystemClock.elapsedRealtime() - mSpinnerVisibilityStartTime;
if (t >= MIN_SPINNER_DISPLAY_TIME) {
mSpinnerVisibilityStartTime = -1;
- mActivity.setProgressBarIndeterminateVisibility(false);
+ activity.setProgressBarIndeterminateVisibility(false);
} else {
sendEmptyMessageDelayed(MSG_HIDE_SPINNER, MIN_SPINNER_DISPLAY_TIME - t);
}
@@ -91,7 +96,8 @@ public class SpinnerVisibilitySetter {
}
private SpinnerVisibilitySetter(Activity activity) {
- mActivity = activity;
+ // Activity are keys. Value objects should not strongly refer to keys.
+ mActivityRef = new WeakReference<Activity>(activity);
}
public void setSpinnerVisibility(boolean visible) {