Skip to content

Instantly share code, notes, and snippets.

View DavidRyan's full-sized avatar

David Ryan DavidRyan

  • Spothero
  • Chicago
View GitHub Profile
" Environment {
" Basics {
set nocompatible " must be first line
set background=dark " Assume a dark background
if has ("unix") && "Darwin" != system("echo -n \"$(uname)\"")
" on Linux use + register for copy-paste
set clipboard=unnamedplus
else
" one mac and windows, use * register for copy-paste
set clipboard=unnamed
import json
import urllib2
import urllib
from flask import Flask
from flask import request
app = Flask(__name__)
post_url = 'https://api.groupme.com/v3/bots/post'
bot_id = 'a63fa8c46207f5b791ae25b3f8'
/** Perform action of waiting for a specific view id. */
public static ViewAction waitForId(final int viewId, final long millis) {
return new ViewAction() {
@Override
public Matcher<View> getConstraints() {
return isDisplayed();
}
@Override
public String getDescription() {
import datetime
from google.appengine.ext import db
from random import randint
from google.appengine.api import users
import json
import urllib2
import urllib
from flask import Flask
from flask import request
from threading import Timer
Observable<Boolean> passwordObservable = Observable.combineLatest(
validatePassword(RxViewUtils.text(mPassword)),
(RxViewUtils.text(mPasswordConfirm)),
(password, confirm) -> password.equals(confirm));
Observable.combineLatest(
validateFirstName(RxViewUtils.text(mUsername)),
passwordObservable,
(username, password) -> username && password
Observable<Boolean> passwordObservable = Observable.combineLatest(
validatePassword(RxViewUtils.text(mPassword)),
(RxViewUtils.text(mPasswordConfirm)),
(password, confirm) -> password.equals(confirm));
Observable.combineLatest(
validateFirstName(RxViewUtils.text(mUsername)),
passwordObservable,
(username, password) -> username && password
Observable<Boolean> passwordObservable = Observable.combineLatest(
validatePassword(RxViewUtils.text(mPassword)),
(RxViewUtils.text(mPasswordConfirm)),
(password, confirm) -> password.equals(confirm));
Observable.combineLatest(
validateFirstName(RxViewUtils.text(mUsername)),
passwordObservable,
(username, password) -> username && password
public class RxValidationActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rx_validation);
TextView mInputField = (TextView) findViewById(R.id.input);
TextInputLayout mInputLayout = (TextInputLayout) findViewById(R.id.input_layout);

Form Validation and In-line Errors with RxAndroid and TextInputLayout

Functional Reactive Programming in Android using RxAndroid has been talked about a lot recently in the Android community. It is great for for cleaning up a variety of aspects of Android programming, but in this post I'm going to focus on form validation (exciting, right?). The problem that needs to be solved is showing in-line error messages on a payment form and enabling a button if all input forms check out. Observing character changes on the EditTexts, using the new Design Support Library's InputFieldLayouts, and making use of some nifty RxAndroid operators makes solving this problem pretty simple. We'll be using the RetroLambda plugin to give us lambda support for RxJava.

(http://i.imgur.com/SouI7G6.gif)

This post assumes some knowledge of how RxJava and lambdas work. If you need more of a refresher[]

Setup layout with textInputLayout

Pbservable.combineLatest(
validate(text(mFirstControl)),
validate(text(mSecondControl)),
(boolean1, boolean2) -> {
return boolean1 || boolean2
}).subscribe()