Rename callbackevents to topic/subscribers

This commit is contained in:
topjohnwu
2017-08-04 00:12:11 +08:00
parent 2ecbca303b
commit 8e7b8825f5
16 changed files with 137 additions and 137 deletions

View File

@@ -1,68 +0,0 @@
package com.topjohnwu.magisk.utils;
import java.lang.ref.WeakReference;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class CallbackEvent {
public boolean isTriggered = false;
private List<WeakReference<Listener>> listeners;
public void register(Listener l) {
if (listeners == null) {
listeners = new LinkedList<>();
}
listeners.add(new WeakReference<>(l));
}
public void unregister() {
listeners = null;
}
public void unregister(Listener l) {
for (Iterator<WeakReference<Listener>> i = listeners.iterator(); i.hasNext();) {
WeakReference<Listener> listener = i.next();
if (listener.get() == null || listener.get() == l) {
i.remove();
}
}
}
public void trigger() {
trigger(true);
}
public void trigger(boolean b) {
isTriggered = b;
if (listeners != null) {
for (WeakReference<Listener> listener : listeners) {
if (listener.get() != null)
listener.get().onTrigger(this);
}
}
}
public interface Listener {
default void registerEvents() {
for (CallbackEvent event : getRegisterEvents()) {
if (event.isTriggered) {
onTrigger(event);
}
event.register(this);
}
}
default void unregisterEvents() {
for (CallbackEvent event : getRegisterEvents()) {
event.unregister(this);
}
}
default void onTrigger() {
onTrigger(null);
}
void onTrigger(CallbackEvent event);
CallbackEvent[] getRegisterEvents();
}
}

View File

@@ -0,0 +1,68 @@
package com.topjohnwu.magisk.utils;
import java.lang.ref.WeakReference;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class Topic {
public boolean hasPublished = false;
private List<WeakReference<Subscriber>> subscribers;
public void subscribe(Subscriber sub) {
if (subscribers == null) {
subscribers = new LinkedList<>();
}
subscribers.add(new WeakReference<>(sub));
}
public void unsubscribe() {
subscribers = null;
}
public void unsubscribe(Subscriber sub) {
for (Iterator<WeakReference<Subscriber>> i = subscribers.iterator(); i.hasNext();) {
WeakReference<Subscriber> subscriber = i.next();
if (subscriber.get() == null || subscriber.get() == sub) {
i.remove();
}
}
}
public void publish() {
publish(true);
}
public void publish(boolean b) {
hasPublished = b;
if (subscribers != null) {
for (WeakReference<Subscriber> subscriber : subscribers) {
if (subscriber.get() != null)
subscriber.get().onTopicPublished(this);
}
}
}
public interface Subscriber {
default void subscribeTopics() {
for (Topic topic : getSubscription()) {
if (topic.hasPublished) {
onTopicPublished(topic);
}
topic.subscribe(this);
}
}
default void unsubscribeTopics() {
for (Topic event : getSubscription()) {
event.unsubscribe(this);
}
}
default void onTopicPublished() {
onTopicPublished(null);
}
void onTopicPublished(Topic topic);
Topic[] getSubscription();
}
}

View File

@@ -140,7 +140,7 @@ public class Utils {
@Override
public void handleResults(Result result) {
getMagiskManager(mActivity).SNCheckResult = result;
getMagiskManager(mActivity).safetyNetDone.trigger();
getMagiskManager(mActivity).safetyNetDone.publish();
}
}.requestTest();
}