package com.f2prateek.rx.receivers.battery;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
import android.support.annotation.CheckResult;
import android.support.annotation.NonNull;
import com.f2prateek.rx.receivers.RxBroadcastReceiver;
import rx.Observable;
import rx.functions.Func1;
import static com.f2prateek.rx.receivers.internal.Preconditions.checkNotNull;
public class RxBatteryManager {
private RxBatteryManager() {
throw new AssertionError("no instances");
}
/** TODO: docs. */
@CheckResult @NonNull //
public static Observable<BatteryState> batteryChanges(@NonNull final Context context) {
checkNotNull(context, "context == null");
IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
return RxBroadcastReceiver.create(context, filter) //
.map(new Func1<Intent, BatteryState>() {
@Override public BatteryState call(Intent intent) {
int health = intent.getIntExtra(BatteryManager.EXTRA_HEALTH, -1);
int iconSmall = intent.getIntExtra(BatteryManager.EXTRA_ICON_SMALL, -1);
int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
boolean present = intent.getBooleanExtra(BatteryManager.EXTRA_PRESENT, false);
int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
String technology = intent.getStringExtra(BatteryManager.EXTRA_TECHNOLOGY);
int temperature = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1);
int voltage = intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, -1);
return BatteryState.create(BatteryHealth.of(health), iconSmall, level, plugged, present,
scale, BatteryStatus.of(status), technology, temperature, voltage);
}
});
}
}