public
class
BLEEvent {
private
final
boolean
connected;
BLEEvent(
boolean
connected) {
this
.connected = connected;
}
public
boolean
isConnected() {
return
connected;
}
}
interface
BLESubscriber {
void
onChanged(BLEEvent event);
}
public
class
BLEEventBus {
private
BLEEvent lastEvent;
private
final
Set<BLESubscriber> subscribers =
new
HashSet<>();
private
BLEEventBus() {
}
public
void
subscribe(BLESubscriber subscriber) {
subscribers.add(subscriber);
if
(lastEvent !=
null
) {
subscriber.onChanged(lastEvent);
}
}
public
void
unsubscribe(BLESubscriber subscriber) {
subscribers.remove(subscriber);
}
public
void
publish(BLEEvent event) {
this
.lastEvent = event;
for
(BLESubscriber subscriber : subscribers) {
subscriber.onChanged(event);
}
}
public
static
BLEEventBus getInstance() {
return
Impl.INSTANCE;
}
private
static
class
Impl {
static
BLEEventBus INSTANCE =
new
BLEEventBus();
}
}
public
class
BLEEventBusPublisher {
private
final
BLEEventBus eventBus;
public
BLEEventBusPublisher(BLEEventBus eventBus) {
this
.eventBus = eventBus;
}
public
void
publish(BLEEvent event) {
eventBus.publish(event);
}
}
public
class
BLEEventBusSubscriber {
private
final
BLEEventBus eventBus;
public
BLEEventBusSubscriber(BLEEventBus eventBus) {
this
.eventBus = eventBus;
}
public
void
subscribe(BLESubscriber subscriber) {
eventBus.subscribe(subscriber);
}
public
void
unsubscribe(BLESubscriber subscriber) {
eventBus.unsubscribe(subscriber);
}
}
final
BLEEventBusPublisher eventPublisher =
new
BLEEventBusPublisher(BLEEventBus.getInstance());
eventPublisher.publish(
new
BLEEvent(
true
));
final
BLEEventBusSubscriber eventSubscriber =
new
BLEEventBusSubscriber(BLEEventBus.getInstance());
@Override
public
void
onChanged(BLEEvent event) {
}
@Override
public
void
onStart() {
super
.onStart();
eventSubscriber.subscribe(
this
);
}
@Override
public
void
onStop() {
super
.onStop();
eventSubscriber.unsubscribe(
this
);
}