Back to project page Sertimus.
The source code is released under:
GNU General Public License
If you think the Android project Sertimus listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
/* Sertimus - A live wallpaper featuring a cute Chao. //from w w w . j a va 2 s. co m Copyright (C) 2013 Kevin Negrin This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ // LogicThread.java - Thread for managing LiveObjects and timing of the DrawThread thread. package gameaddict30.wallpaper.sertimus; import gameaddict30.wallpaper.sertimus.events.LiveObjectMotionEvent; import gameaddict30.wallpaper.sertimus.utilities.Arithmetic; import java.util.ArrayList; import android.view.MotionEvent; public class LogicThread extends Thread { private Object logicLock; private Object drawLock; private MainCanvas canv; private DrawThread drawT; public boolean paused = false; private boolean stillRunning = true; private ArrayList<LiveObjectMotionEvent> evtQ = new ArrayList<LiveObjectMotionEvent>(); public LogicThread(MainCanvas canv, Object lock) { this.canv = canv; logicLock = lock; drawLock = new Object(); drawT = new DrawThread(canv, drawLock); start(); } public void run() { while (stillRunning) { synchronized (logicLock) { try { if (paused) { logicLock.wait(); paused = false; } for (LiveObjectMotionEvent e : evtQ) onTouchEvent(e); evtQ.clear(); canv.updateObjects(); if (drawT == null) break; else { synchronized (drawLock) { if (!drawT.isActive()) drawLock.notify(); } } logicLock.wait(Arithmetic.frameRateToMillis(MainService.frameRate)); } catch (InterruptedException e) { return; } } } } public boolean isPaused() { return paused; } public void onTouchEvent(LiveObjectMotionEvent e) { canv.onTouchEvent(e); } public void queueMotionEvent(MotionEvent e) { synchronized (logicLock) { if (!paused) evtQ.add(new LiveObjectMotionEvent(e)); } } public void onSurfaceChanged(int width, int height) { canv.onSurfaceChanged(width, height); } public void finish() { stillRunning = false; drawT.finish(); if (this.paused) { this.paused = false; synchronized (logicLock) { if (this.getState() == Thread.State.WAITING) logicLock.notify(); } } try { drawT.join(); } catch (InterruptedException e) { ; } drawT = null; } public void setPause(boolean paused) { if (this.stillRunning) { this.paused = paused; if (!this.paused && this.getState() == Thread.State.WAITING) { synchronized (logicLock) { logicLock.notify(); } } } } }