Skip to content

Instantly share code, notes, and snippets.

@burntcookie90
Last active August 29, 2015 14:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save burntcookie90/47571ef09d3963c2a30d to your computer and use it in GitHub Desktop.
Save burntcookie90/47571ef09d3963c2a30d to your computer and use it in GitHub Desktop.
RxLoginExample
package com.example.vrajeevan.rxloginexample.rx;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.MotionEvent;
import android.widget.Button;
import android.widget.TextView;
import rx.Observable;
import rx.subjects.BehaviorSubject;
import rx.subjects.PublishSubject;
/**
* Created by vrajeevan on 10/9/14.
*/
public class Events {
/*
* Creates a subject that emits events for the current text and each text change event
*/
public static Observable<String> observableFromTextView(TextView view) {
String currentText = String.valueOf(view.getText());
final BehaviorSubject<String> subject = BehaviorSubject.create(currentText);
view.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
}
@Override
public void afterTextChanged(Editable editable) {
subject.onNext(editable.toString());
}
});
return subject;
}
public static Observable<Boolean> observableFromButtonClick(Button button) {
final PublishSubject<Boolean> subject = PublishSubject.create();
button.setOnClickListener(v -> subject.onNext(true));
return subject;
}
public static Observable<Boolean> observableFromButtonDown(Button button) {
final PublishSubject<Boolean> subject = PublishSubject.create();
button.setOnTouchListener((v, event) -> {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
subject.onNext(true);
break;
case MotionEvent.ACTION_UP:
subject.onNext(false);
break;
}
return false;
});
return subject;
}
}
package com.example.vrajeevan.rxloginexample;
import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.EditText;
import com.example.vrajeevan.rxloginexample.rx.Events;
import butterknife.ButterKnife;
import butterknife.InjectView;
import rx.Observable;
/**
* A login screen that offers login via email/password.
*/
public class LoginActivity extends Activity {
@InjectView(R.id.email) AutoCompleteTextView mEmail;
@InjectView(R.id.password) EditText mPassword;
@InjectView(R.id.email_sign_in_button) Button mEmailSignInButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
ButterKnife.inject(this);
// Set up the login form.
mEmailSignInButton.setBackgroundColor(getResources().getColor(android.R.color.holo_red_dark));
Observable.combineLatest(Events.observableFromTextView(mEmail),
Events.observableFromTextView(mPassword),
(emailText, passwordText) -> !TextUtils.isEmpty(emailText) && !TextUtils.isEmpty(passwordText))
.map(fieldsFilled -> getResources().getColor(fieldsFilled
? android.R.color.holo_green_light
: android.R.color.holo_red_dark))
.subscribe(color -> mEmailSignInButton.setBackgroundColor(color));
Events.observableFromButtonDown(mEmailSignInButton)
.map(isDown -> isDown ? "Down" : "Up")
.subscribe(s -> mEmailSignInButton.setText(s));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment