]> cvs.zerfleddert.de Git - FreeShisen/blobdiff - src/de/cwde/freeshisen/ShisenShoView.java
remove checks for app.timeCounter. timer is always running, but not
[FreeShisen] / src / de / cwde / freeshisen / ShisenShoView.java
index 76d7fc65671cf8bc008e8e3b462c9cc4136526b7..d8af2963872909bab996c489889ead278d1a5df8 100644 (file)
@@ -1,5 +1,6 @@
 package de.cwde.freeshisen;
 
+import java.lang.ref.WeakReference;
 import java.util.List;
 import java.util.Locale;
 import java.util.Timer;
@@ -45,17 +46,33 @@ class ShisenShoView extends SurfaceView implements SurfaceHolder.Callback {
        private int tileWidth;
        private Bitmap bg;
        private Bitmap tile[];
-       private Point selection1 = new Point(0,0);
-       private Point selection2 = new Point(0,0);
-       private List<Point> path=null;
-       private List<Line> pairs=null;
+       private Point selection1 = new Point(0, 0);
+       private Point selection2 = new Point(0, 0);
+       private List<Point> path = null;
+       private List<Line> pairs = null;
        private long startTime;
        private long playTime;
        private long baseTime;
        private Timer timer;
-       private static Handler timerHandler;
 
-       private boolean timerRegistered=false;
+       static class hHandler extends Handler {
+               private final WeakReference<ShisenShoView> mTarget;
+
+               hHandler(ShisenShoView target) {
+                       mTarget = new WeakReference<ShisenShoView>(target);
+               }
+
+               @Override
+               public void handleMessage(Message msg) {
+                       ShisenShoView target = mTarget.get();
+                       if (target != null)
+                               target.onUpdateTime();
+               }
+       }
+
+       private Handler timerHandler = new hHandler(this);
+
+       private boolean timerRegistered = false;
        private ShisenSho app;
        private StatePlay cstate;
        private StatePaint pstate;
@@ -132,27 +149,23 @@ class ShisenShoView extends SurfaceView implements SurfaceHolder.Callback {
        }
 
        private void registerTimer() {
-               if (timer!=null) return; // Already registered
-               timerHandler = new Handler() {
-                       public void handleMessage(Message msg) {
-                               onUpdateTime();
-                       }
-               };
-               timer=new Timer();
+               if (timer != null)
+                       return; // Already registered
+               timer = new Timer();
                timer.scheduleAtFixedRate(new TimerTask() {
                        public void run() {
                                timerHandler.sendEmptyMessage(Activity.RESULT_OK);
                        }
                }, 0, 1000);
-               timerRegistered=true;
+               timerRegistered = true;
        }
 
        private void unregisterTimer() {
-               if (timer==null) return; // Already unregistered
+               if (timer == null)
+                       return; // Already unregistered
                timer.cancel();
                timer = null;
-               timerHandler = null;
-               timerRegistered=false;
+               timerRegistered = false;
        }
 
        public void pauseTime() {
@@ -185,7 +198,7 @@ class ShisenShoView extends SurfaceView implements SurfaceHolder.Callback {
                startTime=System.currentTimeMillis();
                playTime=0;
                baseTime=0;
-               if (app.timeCounter && !timerRegistered) {
+               if (!timerRegistered) {
                        registerTimer();
                }
                pairs=app.board.getPairs(1);
@@ -229,7 +242,7 @@ class ShisenShoView extends SurfaceView implements SurfaceHolder.Callback {
 
        private void onUndoActivate() {
                if (app.board.getCanUndo()) {
-                       if (cstate==StatePlay.GAMEOVER && app.timeCounter && !timerRegistered) {
+                       if (cstate==StatePlay.GAMEOVER && !timerRegistered) {
                                // Reprogram the time update that had been
                                // deactivated with the game over status
                                registerTimer();
@@ -242,7 +255,7 @@ class ShisenShoView extends SurfaceView implements SurfaceHolder.Callback {
        }
 
        public void onTimeCounterActivate() {
-               if (app.timeCounter && cstate!=StatePlay.GAMEOVER && !timerRegistered) {
+               if (cstate!=StatePlay.GAMEOVER && !timerRegistered) {
                        // Reprogram the time update that had been
                        // deactivated with the time_counter=false
                        registerTimer();
@@ -251,7 +264,7 @@ class ShisenShoView extends SurfaceView implements SurfaceHolder.Callback {
 
        private void onUpdateTime() {
                paint(pstate);
-               if (!(app.timeCounter && cstate!=StatePlay.GAMEOVER)) {
+               if (cstate==StatePlay.GAMEOVER) {
                        unregisterTimer();
                }
        }
@@ -551,7 +564,7 @@ class ShisenShoView extends SurfaceView implements SurfaceHolder.Callback {
        public void surfaceChanged(SurfaceHolder holder, int format, int width,
                        int height) {
                surfaceHolder = holder;
-               if (cstate!=StatePlay.GAMEOVER && app.timeCounter && !timerRegistered) {
+               if (cstate!=StatePlay.GAMEOVER && !timerRegistered) {
                        registerTimer();
                }
                repaint();
Impressum, Datenschutz