/*
* Copyright 2012 Bitcoin Austria
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package at.bitcoin_austria.bitfluids.trafficSignal;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import at.bitcoin_austria.bitfluids.BitcoinTransactionListener;
import at.bitcoin_austria.bitfluids.Consumer;
import at.bitcoin_austria.bitfluids.PriceService;
/**
* @author apetersson
*/
public class TrafficSignal {
private final Context context;
private final PriceService priceService;
private final BitcoinTransactionListener bitcoinNet;
public TrafficSignal(Context context, BitcoinTransactionListener bitcoinNet, PriceService priceService) {
this.bitcoinNet = bitcoinNet;
this.context = context;
this.priceService = priceService;
}
/**
* @param trafficSignReciever where you will be notified
* @return the BroadcastReceiver to unregister by the UI
*/
public BroadcastReceiver addNotifier(final TrafficSignalReciever trafficSignReciever) {
checkInternet(trafficSignReciever);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
checkInternet(trafficSignReciever);
}
};
context.registerReceiver(receiver, intentFilter);
bitcoinNet.addPeerCountListener(new Consumer<Integer>() {
@Override
public void consume(Integer count) {
if (count < 1) {
trafficSignReciever.onStatusChanged(SignalType.PEERS, Status.RED);
} else if (count < BitcoinTransactionListener.MAX_CONNECTIONS) {
trafficSignReciever.onStatusChanged(SignalType.PEERS, Status.YELLOW);
} else {
trafficSignReciever.onStatusChanged(SignalType.PEERS, Status.GREEN);
}
}
});
priceService.addLastQuoteListener(new Consumer<Status>() {
@Override
public void consume(Status status) {
trafficSignReciever.onStatusChanged(SignalType.EXCHANGERATE, status);
}
});
return receiver;
}
private void checkInternet(TrafficSignalReciever trafficSignalReciever) {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
Status status = activeNetworkInfo == null ? Status.RED : Status.GREEN;
trafficSignalReciever.onStatusChanged(SignalType.NETWORK, status);
}
}