, .
. :
:
class DataStore {
private static DataStore sDataStore;
private List<EmergencyZoneEventListener> mEmergencyZoneEventListeners = null;
static DataStore get() {
if (sDataStore == null) {
sDataStore = new DataStore();
}
return sDataStore;
}
void addEmergencyZoneEventListener(EmergencyZoneEventListener emergencyZoneEventListener) {
if (emergencyZoneEventListener != null && !sDataStore.mEmergencyZoneEventListeners.contains(emergencyZoneEventListener)) {
sDataStore.mEmergencyZoneEventListeners.add(emergencyZoneEventListener);
}
}
void removeEmergencyZoneEventListener(EmergencyZoneEventListener emergencyZoneEventListener) {
mEmergencyZoneEventListeners.remove(emergencyZoneEventListener);
}
DataStore() {
FirebaseDatabase.getInstance().getReference("/emergencyZones/").
addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
emergencyZoneAddedOrChangedRemotely(dataSnapshot);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
emergencyZoneAddedOrChangedRemotely(dataSnapshot);
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
emergencyZoneRemovedRemotely(dataSnapshot);
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) { }
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w(TAG, "onCancelled: " + databaseError.getMessage() + ": "
+ databaseError.getDetails());
}
});
}
}
emergencyZoneAddedOrChangedRemotely:
private void emergencyZoneAddedOrChangedRemotely(DataSnapshot dataSnapshot) {
EmergencyZone ez = dataSnapshot.getValue(EmergencyZone.class);
if (ez == null || ez.getKey() == null) {
Log.w(TAG, "emergencyZoneAddedRemotely: EmergencyZone or getKey is null");
return;
}
for (EmergencyZoneEventListener listener : mEmergencyZoneEventListeners) {
listener.onEmergencyZoneAdded(ez);
}
}
, Firebase , Firebase ChildEventListener, , listener.onEmergencyZondeAdded.
, :
public class NotificationService extends Service {
private static final String TAG = "NotificationService";
private DataStore mDataStore;
private DataStore.EmergencyZoneEventListener mEmergencyZoneEventListener = new DataStore.EmergencyZoneEventListener() {
@Override
public void onEmergencyZoneAdded(EmergencyZone emergencyZone) {
Log.i(TAG, "onEmergencyZoneAdded: " + emergencyZone.getKey());
}
@Override
public void onEmergencyZoneChanged(EmergencyZone emergencyZone) {
Log.i(TAG, "onEmergencyZoneChanged: " + emergencyZone.getKey());
}
@Override
public void onEmergencyZoneRemoved(EmergencyZone emergencyZone) { }
};
public static Intent getIntent(Context packageContext) {
return new Intent(packageContext, NotificationService.class);
}
@Override
public void onCreate() {
Log.i(TAG, "onCreate: NotificationService is being created...");
mDataStore = DataStore.get(this);
mDataStore.addEmergencyZoneEventListener(mEmergencyZoneEventListener);
QueryPreferences.setIsNotificationsOn(this, true);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i(TAG, "onStartCommand: Received start id " + startId + ": " + intent);
return START_STICKY;
}
@Override
public void onDestroy() {
Log.i(TAG, "onDestroy: NotificationService is being destroyed...");
mDataStore.removeEmergencyZoneEventListener(mEmergencyZoneEventListener);
QueryPreferences.setIsNotificationsOn(this, false);
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
, , , . , , .
, .
. 5 , firebase.