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

96 lines
2.2 KiB
Java
Raw Normal View History

2013-10-25 17:19:00 +02:00
/*
2019-01-23 18:03:33 +01:00
* This is the source code of Telegram for Android v. 5.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).
*
2019-01-23 18:03:33 +01:00
* Copyright Nikolai Kudashov, 2013-2018.
2013-10-25 17:19:00 +02:00
*/
package org.telegram.messenger;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
2015-11-26 22:04:02 +01:00
import java.util.concurrent.CountDownLatch;
2013-10-25 17:19:00 +02:00
public class DispatchQueue extends Thread {
2015-11-26 22:04:02 +01:00
private volatile Handler handler = null;
private CountDownLatch syncLatch = new CountDownLatch(1);
2013-10-25 17:19:00 +02:00
public DispatchQueue(final String threadName) {
setName(threadName);
start();
}
2017-07-08 18:32:04 +02:00
public void sendMessage(Message msg, int delay) {
2015-11-26 22:04:02 +01:00
try {
syncLatch.await();
2013-10-25 17:19:00 +02:00
if (delay <= 0) {
handler.sendMessage(msg);
} else {
handler.sendMessageDelayed(msg, delay);
}
2015-11-26 22:04:02 +01:00
} catch (Exception e) {
2017-03-31 01:58:05 +02:00
FileLog.e(e);
2013-10-25 17:19:00 +02:00
}
}
2014-07-10 13:30:55 +02:00
public void cancelRunnable(Runnable runnable) {
2015-11-26 22:04:02 +01:00
try {
syncLatch.await();
2014-07-10 13:30:55 +02:00
handler.removeCallbacks(runnable);
2015-11-26 22:04:02 +01:00
} catch (Exception e) {
2017-03-31 01:58:05 +02:00
FileLog.e(e);
2014-07-10 13:30:55 +02:00
}
}
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) {
2015-11-26 22:04:02 +01:00
try {
syncLatch.await();
} catch (Exception e) {
2017-03-31 01:58:05 +02:00
FileLog.e(e);
2013-10-25 17:19:00 +02:00
}
2019-03-03 21:40:48 +01:00
if (delay <= 0) {
handler.post(runnable);
} else {
handler.postDelayed(runnable, delay);
}
2013-10-25 17:19:00 +02:00
}
2014-06-13 17:03:06 +02:00
public void cleanupQueue() {
2015-11-26 22:04:02 +01:00
try {
syncLatch.await();
2014-06-13 17:03:06 +02:00
handler.removeCallbacksAndMessages(null);
2015-11-26 22:04:02 +01:00
} catch (Exception e) {
2017-03-31 01:58:05 +02:00
FileLog.e(e);
2014-06-13 17:03:06 +02:00
}
}
2017-07-08 18:32:04 +02:00
public void handleMessage(Message inputMessage) {
}
2019-03-03 21:40:48 +01:00
public void recycle() {
handler.getLooper().quit();
}
2015-11-26 22:04:02 +01:00
@Override
2013-10-25 17:19:00 +02:00
public void run() {
Looper.prepare();
2017-07-08 18:32:04 +02:00
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
DispatchQueue.this.handleMessage(msg);
}
};
2015-11-26 22:04:02 +01:00
syncLatch.countDown();
2013-10-25 17:19:00 +02:00
Looper.loop();
}
}