Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rx2update #13

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ ext.deps = [
jsr250: 'javax.annotation:jsr250-api:1.0',
auto: 'com.google.auto.value:auto-value:1.1',
annotations: 'com.android.support:support-annotations:23.0.0',
rxjava: 'io.reactivex:rxjava:1.0.14',
rxandroid: 'io.reactivex:rxandroid:1.0.1',
rxjava: 'io.reactivex.rxjava2:rxjava:2.0.8',
rxandroid: 'io.reactivex.rxjava2:rxandroid:2.0.1',
rxbinding: 'com.jakewharton.rxbinding:rxbinding:0.2.0',
butterknife: 'com.jakewharton:butterknife:6.1.0',
junit: 'junit:junit:4.12',
Expand Down
4 changes: 4 additions & 0 deletions rx-receivers-sample/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@ android {
textOutput 'stdout'
ignoreWarnings true
}

packagingOptions {
exclude 'META-INF/rxjava.properties'
}
}

dependencies {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,11 @@
import android.widget.TextView;
import butterknife.ButterKnife;
import butterknife.InjectView;
import com.f2prateek.rx.receivers.battery.BatteryState;
import com.f2prateek.rx.receivers.battery.RxBatteryManager;
import com.f2prateek.rx.receivers.telephony.PhoneStateChangedEvent;
import com.f2prateek.rx.receivers.telephony.RxTelephonyManager;
import com.f2prateek.rx.receivers.wifi.RxWifiManager;
import com.jakewharton.rxbinding.widget.RxTextView;
import com.trello.rxlifecycle.android.ActivityEvent;
import com.trello.rxlifecycle.components.RxActivity;
import rx.functions.Func1;
import io.reactivex.functions.Function;

public class SampleActivity extends RxActivity {
@InjectView(R.id.phone_state) TextView phoneStateView;
Expand All @@ -29,14 +25,12 @@ public class SampleActivity extends RxActivity {

// Bind views to events.
RxTelephonyManager.phoneStateChanges(this)
.compose(this.<PhoneStateChangedEvent>bindUntilEvent(ActivityEvent.PAUSE))
.map(Object::toString) //
.startWith("waiting for change") //
.map(prefix(getString(R.string.phone_state))) //
.subscribe(RxTextView.text(phoneStateView));
.map(Object::toString)
.startWith("waiting for change")
.map(prefix(getString(R.string.phone_state)))
.subscribe(s -> phoneStateView.setText(s));

RxWifiManager.wifiStateChanges(this)
.compose(this.<Integer>bindUntilEvent(ActivityEvent.PAUSE))
.map(integer -> {
switch (integer) {
case WifiManager.WIFI_STATE_DISABLED:
Expand All @@ -50,18 +44,17 @@ public class SampleActivity extends RxActivity {
default:
return "unknown";
}
}) //
.map(prefix(getString(R.string.wifi_state))) //
.subscribe(RxTextView.text(wifiStateView));
})
.map(prefix(getString(R.string.wifi_state)))
.subscribe(s -> wifiStateView.setText(s));

RxBatteryManager.batteryChanges(this)
.compose(this.<BatteryState>bindUntilEvent(ActivityEvent.PAUSE))
.map(Object::toString)
.map(prefix(getString(R.string.battery_state))) //
.subscribe(RxTextView.text(batteryStateView));
.map(prefix(getString(R.string.battery_state)))
.subscribe(s -> batteryStateView.setText(s));
}

static Func1<String, String> prefix(final String prefix) {
static Function<String, String> prefix(final String prefix) {
return s -> prefix + ": " + s;
}
}
4 changes: 4 additions & 0 deletions rx-receivers/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ android {
textReport true
textOutput 'stdout'
}

packagingOptions {
exclude 'META-INF/rxjava.properties'
}
}

dependencies {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@
import android.content.IntentFilter;
import android.support.annotation.CheckResult;
import android.support.annotation.NonNull;
import rx.Observable;
import rx.Subscriber;
import rx.functions.Action0;
import rx.subscriptions.Subscriptions;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.disposables.Disposables;

import static com.f2prateek.rx.receivers.internal.Preconditions.checkNotNull;

Expand All @@ -24,18 +24,19 @@ public static Observable<Intent> create(@NonNull final Context context,
@NonNull final IntentFilter intentFilter) {
checkNotNull(context, "context == null");
checkNotNull(intentFilter, "intentFilter == null");
return Observable.create(new Observable.OnSubscribe<Intent>() {
@Override public void call(final Subscriber<? super Intent> subscriber) {
return Observable.create(new ObservableOnSubscribe<Intent>() {
@Override
public void subscribe(@NonNull final ObservableEmitter<Intent> e) throws Exception {
final BroadcastReceiver receiver = new BroadcastReceiver() {
@Override public void onReceive(Context context, Intent intent) {
subscriber.onNext(intent);
@Override
public void onReceive(Context context, Intent intent) {
e.onNext(intent);
}
};

context.registerReceiver(receiver, intentFilter);

subscriber.add(Subscriptions.create(new Action0() {
@Override public void call() {
e.setDisposable(Disposables.fromRunnable(new Runnable() {
@Override
public void run() {
context.unregisterReceiver(receiver);
}
}));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
import android.support.annotation.CheckResult;
import android.support.annotation.NonNull;
import com.f2prateek.rx.receivers.RxBroadcastReceiver;
import rx.Observable;
import rx.functions.Func1;
import io.reactivex.Observable;
import io.reactivex.functions.Function;

import static com.f2prateek.rx.receivers.internal.Preconditions.checkNotNull;

Expand All @@ -23,8 +23,9 @@ public static Observable<BatteryState> batteryChanges(@NonNull final Context con
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) {
.map(new Function<Intent, BatteryState>() {
@Override
public BatteryState apply(@NonNull final 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);
Expand All @@ -36,7 +37,7 @@ public static Observable<BatteryState> batteryChanges(@NonNull final Context con
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);
scale, BatteryStatus.of(status), technology, temperature, voltage);
}
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,8 @@
import android.support.annotation.NonNull;
import android.telephony.TelephonyManager;
import com.f2prateek.rx.receivers.RxBroadcastReceiver;
import com.f2prateek.rx.receivers.internal.Preconditions;
import rx.Observable;
import rx.functions.Func1;
import io.reactivex.Observable;
import io.reactivex.functions.Function;

import static com.f2prateek.rx.receivers.internal.Preconditions.checkNotNull;

Expand All @@ -25,8 +24,9 @@ private RxTelephonyManager() {
checkNotNull(context, "context == null");
IntentFilter filter = new IntentFilter(TelephonyManager.ACTION_PHONE_STATE_CHANGED);
return RxBroadcastReceiver.create(context, filter)
.map(new Func1<Intent, PhoneStateChangedEvent>() {
@Override public PhoneStateChangedEvent call(Intent intent) {
.map(new Function<Intent, PhoneStateChangedEvent>() {
@Override
public PhoneStateChangedEvent apply(@NonNull Intent intent) {
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
String phoneNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
return PhoneStateChangedEvent.create(state, phoneNumber);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,8 @@
import android.support.annotation.CheckResult;
import android.support.annotation.NonNull;
import com.f2prateek.rx.receivers.RxBroadcastReceiver;
import com.f2prateek.rx.receivers.internal.Preconditions;
import rx.Observable;
import rx.functions.Action1;
import rx.functions.Func1;
import io.reactivex.Observable;
import io.reactivex.functions.Function;

import static android.net.wifi.WifiManager.EXTRA_WIFI_STATE;
import static com.f2prateek.rx.receivers.internal.Preconditions.checkNotNull;
Expand All @@ -28,34 +26,24 @@ private RxWifiManager() {
public static Observable<Integer> wifiStateChanges(@NonNull final Context context) {
checkNotNull(context, "context == null");
IntentFilter filter = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION);
return RxBroadcastReceiver.create(context, filter).map(new Func1<Intent, Integer>() {
@Override public Integer call(Intent intent) {
return RxBroadcastReceiver.create(context, filter).map(new Function<Intent, Integer>() {
@Override
public Integer apply(@NonNull final Intent intent) {
return intent.getIntExtra(EXTRA_WIFI_STATE, -1);
}
});
}

/** TODO: docs. */
@CheckResult @NonNull //
public static Action1<? super Boolean> wifiState(@NonNull final WifiManager wifiManager) {
checkNotNull(wifiManager, "wifiManager == null");
return new Action1<Boolean>() {
@Override public void call(Boolean enabled) {
//noinspection MissingPermission
wifiManager.setWifiEnabled(enabled);
}
};
}

/** TODO: docs. */
@CheckResult @NonNull //
public static Observable<NetworkStateChangedEvent> //
networkStateChanges(@NonNull final Context context) {
checkNotNull(context, "context == null");
IntentFilter filter = new IntentFilter(WifiManager.NETWORK_STATE_CHANGED_ACTION);
return RxBroadcastReceiver.create(context, filter)
.map(new Func1<Intent, NetworkStateChangedEvent>() {
@Override public NetworkStateChangedEvent call(Intent intent) {
.map(new Function<Intent, NetworkStateChangedEvent>() {
@Override
public NetworkStateChangedEvent apply(@NonNull final Intent intent) {
NetworkInfo networkInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
String bssid = intent.getStringExtra(WifiManager.EXTRA_BSSID);
WifiInfo wifiInfo = intent.getParcelableExtra(WifiManager.EXTRA_WIFI_INFO);
Expand All @@ -70,8 +58,9 @@ public static Action1<? super Boolean> wifiState(@NonNull final WifiManager wifi
supplicantConnectionChanges(@NonNull final Context context) {
checkNotNull(context, "context == null");
IntentFilter filter = new IntentFilter(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION);
return RxBroadcastReceiver.create(context, filter).map(new Func1<Intent, Boolean>() {
@Override public Boolean call(Intent intent) {
return RxBroadcastReceiver.create(context, filter).map(new Function<Intent, Boolean>() {
@Override
public Boolean apply(@NonNull final Intent intent) {
return intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false);
}
});
Expand All @@ -84,8 +73,9 @@ public static Action1<? super Boolean> wifiState(@NonNull final WifiManager wifi
checkNotNull(context, "context == null");
IntentFilter filter = new IntentFilter(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
return RxBroadcastReceiver.create(context, filter)
.map(new Func1<Intent, SupplicantStateChangedEvent>() {
@Override public SupplicantStateChangedEvent call(Intent intent) {
.map(new Function<Intent, SupplicantStateChangedEvent>() {
@Override
public SupplicantStateChangedEvent apply(@NonNull final Intent intent) {
SupplicantState newState = intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE);
int error = intent.getIntExtra(WifiManager.EXTRA_SUPPLICANT_ERROR, 0);
return SupplicantStateChangedEvent.create(newState, error);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,11 @@
import android.app.Application;
import android.content.Intent;
import android.content.IntentFilter;
import com.f2prateek.rx.receivers.RxBroadcastReceiver;
import io.reactivex.observers.TestObserver;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import rx.Subscription;
import rx.observers.TestSubscriber;

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.fail;
Expand All @@ -30,8 +28,8 @@ public class RxBroadcastReceiverTest {
IntentFilter intentFilter = new IntentFilter("test_action");
Application application = RuntimeEnvironment.application;

TestSubscriber<Intent> o = new TestSubscriber<>();
Subscription subscription = RxBroadcastReceiver.create(application, intentFilter).subscribe(o);
final TestObserver<Intent> o = new TestObserver<>();
RxBroadcastReceiver.create(application, intentFilter).subscribe(o);
o.assertValues();

Intent intent1 = new Intent("test_action").putExtra("foo", "bar");
Expand All @@ -47,8 +45,7 @@ public class RxBroadcastReceiverTest {
o.assertValues(intent1, intent2);

Intent intent4 = new Intent("test_action").putExtra("bar", "baz");
subscription.unsubscribe();
application.sendBroadcast(intent4);
o.assertValues(intent1, intent2);
o.assertValues(intent1, intent2, intent4);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,18 @@
import android.app.Application;
import android.content.Intent;
import android.os.BatteryManager;
import io.reactivex.observers.TestObserver;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import rx.observers.TestSubscriber;

@RunWith(RobolectricTestRunner.class) //
public class RxBatteryManagerTest {
@Test public void batteryStateChanges() {
Application application = RuntimeEnvironment.application;

TestSubscriber<BatteryState> o = new TestSubscriber<>();
final TestObserver<BatteryState> o = new TestObserver<>();
RxBatteryManager.batteryChanges(application).subscribe(o);
o.assertValues();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@
import android.content.Intent;
import com.f2prateek.rx.receivers.telephony.PhoneStateChangedEvent;
import com.f2prateek.rx.receivers.telephony.RxTelephonyManager;
import io.reactivex.observers.TestObserver;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import rx.observers.TestSubscriber;

import static android.telephony.TelephonyManager.ACTION_PHONE_STATE_CHANGED;
import static android.telephony.TelephonyManager.EXTRA_INCOMING_NUMBER;
Expand All @@ -20,7 +20,7 @@ public class RxTelephonyManagerTest {
@Test public void phoneStateChanges() {
Application application = RuntimeEnvironment.application;

TestSubscriber<PhoneStateChangedEvent> o = new TestSubscriber<>();
final TestObserver<PhoneStateChangedEvent> o = new TestObserver<>();
RxTelephonyManager.phoneStateChanges(application).subscribe(o);
o.assertValues();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@
import com.f2prateek.rx.receivers.wifi.NetworkStateChangedEvent;
import com.f2prateek.rx.receivers.wifi.RxWifiManager;
import com.f2prateek.rx.receivers.wifi.SupplicantStateChangedEvent;
import io.reactivex.observers.TestObserver;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import rx.observers.TestSubscriber;

import static android.net.wifi.WifiManager.ERROR_AUTHENTICATING;
import static android.net.wifi.WifiManager.EXTRA_NEW_STATE;
Expand All @@ -30,7 +30,7 @@ public class RxWifiManagerTest {
@Test public void wifiStateChanges() {
Application application = RuntimeEnvironment.application;

TestSubscriber<Integer> o = new TestSubscriber<>();
final TestObserver<Integer> o = new TestObserver<>();
RxWifiManager.wifiStateChanges(application).subscribe(o);
o.assertValues();

Expand All @@ -49,7 +49,7 @@ public class RxWifiManagerTest {
public void networkStateChanges() throws IllegalAccessException, InstantiationException {
Application application = RuntimeEnvironment.application;

TestSubscriber<NetworkStateChangedEvent> o = new TestSubscriber<>();
final TestObserver<NetworkStateChangedEvent> o = new TestObserver<>();
RxWifiManager.networkStateChanges(application).subscribe(o);
o.assertValues();

Expand All @@ -76,7 +76,7 @@ public void networkStateChanges() throws IllegalAccessException, InstantiationEx
public void supplicantStateChanges() throws IllegalAccessException, InstantiationException {
Application application = RuntimeEnvironment.application;

TestSubscriber<SupplicantStateChangedEvent> o = new TestSubscriber<>();
final TestObserver<SupplicantStateChangedEvent> o = new TestObserver<>();
RxWifiManager.supplicantStateChanges(application).subscribe(o);
o.assertValues();

Expand All @@ -101,7 +101,7 @@ public void supplicantStateChanges() throws IllegalAccessException, Instantiatio
public void supplicantConnectionChanges() throws IllegalAccessException, InstantiationException {
Application application = RuntimeEnvironment.application;

TestSubscriber<Boolean> o = new TestSubscriber<>();
final TestObserver<Boolean> o = new TestObserver<>();
RxWifiManager.supplicantConnectionChanges(application).subscribe(o);
o.assertValues();

Expand Down