Last active
August 29, 2015 14:07
-
-
Save burntcookie90/47571ef09d3963c2a30d to your computer and use it in GitHub Desktop.
RxLoginExample
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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