diff --git a/app/build.gradle b/app/build.gradle
index b83b672..001fce4 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -41,8 +41,8 @@ retrolambda {
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
- compile 'com.android.support:appcompat-v7:23.1.0'
- compile 'com.android.support:recyclerview-v7:23.1.0'
+ compile 'com.android.support:appcompat-v7:23.1.1'
+ compile 'com.android.support:recyclerview-v7:23.1.1'
compile 'com.squareup.picasso:picasso:2.5.2'
compile 'io.reactivex:rxandroid:1.0.1'
compile 'io.reactivex:rxjava:1.0.14'
@@ -50,4 +50,7 @@ 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'
+ compile 'com.jakewharton.rxbinding:rxbinding-design: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..fd2a7b9
--- /dev/null
+++ b/app/src/main/java/it/tiwiz/rxjavacrunch/part6/Part6Activity.java
@@ -0,0 +1,116 @@
+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.Menu;
+import android.view.MenuItem;
+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;
+
+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"/>
+
+
diff --git a/app/src/main/res/layout/activity_part6.xml b/app/src/main/res/layout/activity_part6.xml
new file mode 100644
index 0000000..bd0a72c
--- /dev/null
+++ b/app/src/main/res/layout/activity_part6.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/content_part6.xml b/app/src/main/res/layout/content_part6.xml
new file mode 100644
index 0000000..a2b8f57
--- /dev/null
+++ b/app/src/main/res/layout/content_part6.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/menu/part6.xml b/app/src/main/res/menu/part6.xml
new file mode 100644
index 0000000..987291b
--- /dev/null
+++ b/app/src/main/res/menu/part6.xml
@@ -0,0 +1,15 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index d7080cf..8588934 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -6,4 +6,5 @@
Crunching RxAndroid - Retrofit
Crunching RxAndroid - Retrofit Detail
Crunching RxAndroid - RxLifecycle
+ Part6Activity