NekoX/TMessagesProj/src/main/java/org/telegram/messenger/DispatchQueue.java

103 lines
2.6 KiB
Java
Raw Normal View History

2013-10-25 17:19:00 +02:00
/*
2015-10-29 18:10:07 +01:00
* This is the source code of Telegram for Android v. 3.x.x.
2013-10-25 17:19:00 +02:00
* It is licensed under GNU GPL v. 2 or later.
* You should have received a copy of the license in this archive (see LICENSE).
*
2015-05-21 23:27:27 +02:00
* Copyright Nikolai Kudashov, 2013-2015.
2013-10-25 17:19:00 +02:00
*/
package org.telegram.messenger;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
public class DispatchQueue extends Thread {
public volatile Handler handler = null;
2013-10-25 17:19:00 +02:00
private final Object handlerSyncObject = new Object();
public DispatchQueue(final String threadName) {
setName(threadName);
start();
}
private void sendMessage(Message msg, int delay) {
if (handler == null) {
try {
synchronized (handlerSyncObject) {
handlerSyncObject.wait();
}
} catch (Throwable t) {
t.printStackTrace();
}
}
if (handler != null) {
if (delay <= 0) {
handler.sendMessage(msg);
} else {
handler.sendMessageDelayed(msg, delay);
}
}
}
2014-07-10 13:30:55 +02:00
public void cancelRunnable(Runnable runnable) {
if (handler == null) {
synchronized (handlerSyncObject) {
if (handler == null) {
try {
handlerSyncObject.wait();
} catch (Throwable t) {
t.printStackTrace();
}
}
}
}
if (handler != null) {
handler.removeCallbacks(runnable);
}
}
2013-10-25 17:19:00 +02:00
public void postRunnable(Runnable runnable) {
postRunnable(runnable, 0);
2013-10-25 17:19:00 +02:00
}
2014-10-14 10:13:16 +02:00
public void postRunnable(Runnable runnable, long delay) {
2013-10-25 17:19:00 +02:00
if (handler == null) {
synchronized (handlerSyncObject) {
if (handler == null) {
try {
handlerSyncObject.wait();
} catch (Throwable t) {
t.printStackTrace();
}
2013-10-25 17:19:00 +02:00
}
}
}
if (handler != null) {
if (delay <= 0) {
handler.post(runnable);
2013-10-25 17:19:00 +02:00
} else {
handler.postDelayed(runnable, delay);
}
}
}
2014-06-13 17:03:06 +02:00
public void cleanupQueue() {
if (handler != null) {
handler.removeCallbacksAndMessages(null);
}
}
2013-10-25 17:19:00 +02:00
public void run() {
Looper.prepare();
synchronized (handlerSyncObject) {
handler = new Handler();
2013-10-25 17:19:00 +02:00
handlerSyncObject.notify();
}
Looper.loop();
}
}