From f6ecb97c49f13c6835c1290f2a89d97050777a69 Mon Sep 17 00:00:00 2001 From: Roberto Orgiu Date: Thu, 14 Jan 2016 14:54:18 +0100 Subject: [PATCH 1/2] Updates part 6 with RxBinding --- app/build.gradle | 2 + app/src/main/AndroidManifest.xml | 9 ++ .../it/tiwiz/rxjavacrunch/MainActivity.java | 5 + .../rxjavacrunch/part6/Part6Activity.java | 119 ++++++++++++++++++ app/src/main/res/layout/activity_main.xml | 6 + app/src/main/res/layout/activity_part6.xml | 34 +++++ app/src/main/res/layout/content_part6.xml | 41 ++++++ app/src/main/res/menu/part6.xml | 15 +++ app/src/main/res/values/strings.xml | 1 + 9 files changed, 232 insertions(+) create mode 100644 app/src/main/java/it/tiwiz/rxjavacrunch/part6/Part6Activity.java create mode 100644 app/src/main/res/layout/activity_part6.xml create mode 100644 app/src/main/res/layout/content_part6.xml create mode 100644 app/src/main/res/menu/part6.xml diff --git a/app/build.gradle b/app/build.gradle index b83b672..10ce2b8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -50,4 +50,6 @@ dependencies { compile 'com.squareup.retrofit:retrofit:1.9.0' compile 'com.trello:rxlifecycle:0.3.0' compile 'com.trello:rxlifecycle-components:0.3.0' + compile 'com.jakewharton.rxbinding:rxbinding:0.3.0' + compile 'com.jakewharton.rxbinding:rxbinding-appcompat-v7:0.3.0' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e6d5db0..fd9d478 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -66,6 +66,15 @@ android:name="android.support.PARENT_ACTIVITY" android:value="it.tiwiz.rxjavacrunch.MainActivity" /> + + + diff --git a/app/src/main/java/it/tiwiz/rxjavacrunch/MainActivity.java b/app/src/main/java/it/tiwiz/rxjavacrunch/MainActivity.java index 1987f6a..a82bbf4 100644 --- a/app/src/main/java/it/tiwiz/rxjavacrunch/MainActivity.java +++ b/app/src/main/java/it/tiwiz/rxjavacrunch/MainActivity.java @@ -13,6 +13,7 @@ import it.tiwiz.rxjavacrunch.part3.Part3Activity; import it.tiwiz.rxjavacrunch.part4.Part4Activity; import it.tiwiz.rxjavacrunch.part5.Part5Activity; +import it.tiwiz.rxjavacrunch.part6.Part6Activity; public class MainActivity extends AppCompatActivity implements View.OnClickListener{ @@ -31,6 +32,7 @@ private void wireUi() { setTapListener(R.id.btnPart3); setTapListener(R.id.btnPart4); setTapListener(R.id.btnPart5); + setTapListener(R.id.btnPart6); } private void setTapListener(int viewId) { @@ -61,6 +63,9 @@ private Intent getLaunchIntentFor(int viewId) { case R.id.btnPart5: launchIntent = new Intent(this, Part5Activity.class); break; + case R.id.btnPart6: + launchIntent = new Intent(this, Part6Activity.class); + break; } return launchIntent; diff --git a/app/src/main/java/it/tiwiz/rxjavacrunch/part6/Part6Activity.java b/app/src/main/java/it/tiwiz/rxjavacrunch/part6/Part6Activity.java new file mode 100644 index 0000000..68dcdd0 --- /dev/null +++ b/app/src/main/java/it/tiwiz/rxjavacrunch/part6/Part6Activity.java @@ -0,0 +1,119 @@ +package it.tiwiz.rxjavacrunch.part6; + +import android.os.Bundle; +import android.support.design.widget.FloatingActionButton; +import android.support.design.widget.Snackbar; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.text.Editable; +import android.text.TextWatcher; +import android.view.KeyEvent; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +import com.jakewharton.rxbinding.support.design.widget.RxSnackbar; +import com.jakewharton.rxbinding.support.v7.widget.RxToolbar; +import com.jakewharton.rxbinding.view.RxView; +import com.jakewharton.rxbinding.widget.RxTextView; + +import it.tiwiz.rxjavacrunch.R; +import rx.functions.Action1; + +public class Part6Activity extends AppCompatActivity { + TextView responseTextView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_part6); + responseTextView = (TextView) findViewById(R.id.response); + + manageToolbar(); + manageFloatingActionButton(); + manageEditTexts(); + } + + private void manageToolbar() { + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + + /** + * Here, we manage the two events of the toolbar + **/ + RxToolbar.itemClicks(toolbar).subscribe(this::onToolbarItemClicked); + RxToolbar.navigationClicks(toolbar).subscribe(aVoid -> onToolbarNavigationClicked()); + } + + private void onToolbarItemClicked(MenuItem menuItem) { + String message = "Item \"" + menuItem.getTitle() + "\" clicked"; + Toast.makeText(this, message, Toast.LENGTH_SHORT).show(); + } + + private void onToolbarNavigationClicked() { + Toast.makeText(this, "Navigation item clicked", Toast.LENGTH_SHORT).show(); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.part6, menu); + return true; + } + + private void manageFloatingActionButton() { + FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); + RxView.clicks(fab).subscribe(aVoid -> onFabClicked()); + } + + private void onFabClicked() { + Snackbar testSnackbar = Snackbar.make(findViewById(android.R.id.content), "Snackbar clicked", Snackbar.LENGTH_SHORT); + testSnackbar.show(); + /** + * Managing the {@link Snackbar} is not that hard either + */ + RxSnackbar.dismisses(testSnackbar).subscribe(this::onSnackbarDismissed); + } + + private void onSnackbarDismissed(Integer integer) { + String text = "Snackbar dismissed with code " + integer; + Toast.makeText(this, text, Toast.LENGTH_SHORT).show(); + } + + private void manageEditTexts() { + EditText usualApproachEditText, reactiveApproachEditText; + + usualApproachEditText = (EditText) findViewById(R.id.editTextUsualApproach); + + usualApproachEditText.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + onNewTextChanged(s); + } + + @Override + public void afterTextChanged(Editable s) { + + } + }); + + /** + * Here, we see how it can be easy to manage text changes with RxBindings + */ + reactiveApproachEditText = (EditText) findViewById(R.id.editTextReactiveApproach); + RxTextView.textChanges(reactiveApproachEditText).subscribe(this::onNewTextChanged); + } + + private void onNewTextChanged(CharSequence text) { + responseTextView.setText(text); + } + +} diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 1a84fda..40f61e1 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -38,4 +38,10 @@ android:text="Part 5" android:layout_below="@id/btnPart4"/> +