diff --git a/.gitignore b/.gitignore
index 499e65d..9e0d470 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,3 +7,7 @@ gen
*.iml
*.ipr
*.iws
+
+*.settings
+.classpath
+
diff --git a/cleanandroidcode/AndroidManifest.xml b/cleanandroidcode/AndroidManifest.xml
index 48e1915..b75b213 100644
--- a/cleanandroidcode/AndroidManifest.xml
+++ b/cleanandroidcode/AndroidManifest.xml
@@ -9,6 +9,9 @@
android:minSdkVersion="8"
android:targetSdkVersion="17"
tools:ignore="OldTargetApi" />
+
+
+
+
+
+
\ No newline at end of file
diff --git a/cleanandroidcode/pom.xml b/cleanandroidcode/pom.xml
index 9f3a09b..dc7cfff 100644
--- a/cleanandroidcode/pom.xml
+++ b/cleanandroidcode/pom.xml
@@ -48,6 +48,14 @@
com.squareup
dagger-compiler
+
+ com.squareup.retrofit
+ retrofit
+
+
+ com.octo.android.robospice
+ robospice-retrofit
+
diff --git a/cleanandroidcode/res/layout/hello_activity.xml b/cleanandroidcode/res/layout/hello_activity.xml
index 2eba9ed..9a92b33 100644
--- a/cleanandroidcode/res/layout/hello_activity.xml
+++ b/cleanandroidcode/res/layout/hello_activity.xml
@@ -10,4 +10,9 @@
android:layout_height="wrap_content"
class="info.piwai.cleanandroidcode.HelloFragment_" />
+
\ No newline at end of file
diff --git a/cleanandroidcode/res/layout/hello_github_fragment.xml b/cleanandroidcode/res/layout/hello_github_fragment.xml
new file mode 100644
index 0000000..edb887e
--- /dev/null
+++ b/cleanandroidcode/res/layout/hello_github_fragment.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/cleanandroidcode/src/main/java/info/piwai/cleanandroidcode/GitHubFragment.java b/cleanandroidcode/src/main/java/info/piwai/cleanandroidcode/GitHubFragment.java
new file mode 100644
index 0000000..09ab239
--- /dev/null
+++ b/cleanandroidcode/src/main/java/info/piwai/cleanandroidcode/GitHubFragment.java
@@ -0,0 +1,62 @@
+package info.piwai.cleanandroidcode;
+
+import info.piwai.cleanandroidcode.base.BaseFragment;
+import info.piwai.cleanandroidcode.network.GitHubRetrofitSpiceRequest;
+import info.piwai.cleanandroidcode.network.ListContributor;
+
+import javax.inject.Inject;
+
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.googlecode.androidannotations.annotations.EFragment;
+import com.googlecode.androidannotations.annotations.ViewById;
+import com.octo.android.robospice.persistence.DurationInMillis;
+import com.octo.android.robospice.persistence.exception.SpiceException;
+import com.octo.android.robospice.request.listener.RequestListener;
+import com.squareup.otto.Bus;
+import com.squareup.otto.Subscribe;
+
+@EFragment(R.layout.hello_github_fragment)
+public class GitHubFragment extends BaseFragment {
+
+ @Inject
+ Bus bus;
+
+ @ViewById(R.id.my_label)
+ TextView mylabel;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ bus.register(this);
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ spiceManager.addListenerIfPending(ListContributor.class, "square", new GitHubRequestListenerRequestListener());
+ return super.onCreateView(inflater, container, savedInstanceState);
+ }
+
+ @Subscribe
+ public void onUpdateTitle(UpdateTitleEvent event) {
+ spiceManager.execute(new GitHubRetrofitSpiceRequest(), "square", DurationInMillis.ALWAYS_RETURNED, new GitHubRequestListenerRequestListener());
+ mylabel.setText("Requesting contributors on github...");
+ }
+
+ private final class GitHubRequestListenerRequestListener implements RequestListener {
+ @Override
+ public void onRequestFailure(SpiceException spiceException) {
+ Toast.makeText(getActivity(), "failure", Toast.LENGTH_SHORT).show();
+ }
+
+ @Override
+ public void onRequestSuccess(ListContributor result) {
+ mylabel.setText("Square contributors: " + result.size());
+ }
+ }
+}
diff --git a/cleanandroidcode/src/main/java/info/piwai/cleanandroidcode/HelloAndroidActivity.java b/cleanandroidcode/src/main/java/info/piwai/cleanandroidcode/HelloAndroidActivity.java
index 3b0770e..7f6576d 100644
--- a/cleanandroidcode/src/main/java/info/piwai/cleanandroidcode/HelloAndroidActivity.java
+++ b/cleanandroidcode/src/main/java/info/piwai/cleanandroidcode/HelloAndroidActivity.java
@@ -8,9 +8,9 @@
@EActivity(R.layout.hello_activity)
public class HelloAndroidActivity extends BaseActivity {
- @Subscribe
- public void onUpdateTitle(UpdateTitleEvent event) {
- setTitle(event.title);
- }
+ @Subscribe
+ public void onUpdateTitle(UpdateTitleEvent event) {
+ setTitle(event.title);
+ }
}
diff --git a/cleanandroidcode/src/main/java/info/piwai/cleanandroidcode/HelloFragment.java b/cleanandroidcode/src/main/java/info/piwai/cleanandroidcode/HelloFragment.java
index 285deca..a98c738 100644
--- a/cleanandroidcode/src/main/java/info/piwai/cleanandroidcode/HelloFragment.java
+++ b/cleanandroidcode/src/main/java/info/piwai/cleanandroidcode/HelloFragment.java
@@ -11,11 +11,11 @@
@EFragment(R.layout.hello_fragment)
public class HelloFragment extends BaseFragment {
- @Inject
- Bus bus;
+ @Inject
+ Bus bus;
- @Click
- void fragmentButtonClicked() {
- bus.post(new UpdateTitleEvent("Button clicked at " + System.currentTimeMillis()));
- }
+ @Click
+ void fragmentButtonClicked() {
+ bus.post(new UpdateTitleEvent("Button clicked at " + System.currentTimeMillis()));
+ }
}
diff --git a/cleanandroidcode/src/main/java/info/piwai/cleanandroidcode/base/BaseFragment.java b/cleanandroidcode/src/main/java/info/piwai/cleanandroidcode/base/BaseFragment.java
index 10028b9..e3433ee 100644
--- a/cleanandroidcode/src/main/java/info/piwai/cleanandroidcode/base/BaseFragment.java
+++ b/cleanandroidcode/src/main/java/info/piwai/cleanandroidcode/base/BaseFragment.java
@@ -3,12 +3,29 @@
import android.os.Bundle;
import android.support.v4.app.Fragment;
+import com.octo.android.robospice.SpiceManager;
+import com.octo.android.robospice.retrofit.RetrofitGsonSpiceService;
+
public abstract class BaseFragment extends Fragment {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- GraphRetriever.from(getActivity()).inject(this);
- }
+ protected SpiceManager spiceManager = new SpiceManager(RetrofitGsonSpiceService.class);
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ GraphRetriever.from(getActivity()).inject(this);
+ }
+
+ @Override
+ public void onStart() {
+ super.onStart();
+ spiceManager.start(getActivity());
+ }
+
+ @Override
+ public void onStop() {
+ spiceManager.shouldStop();
+ super.onStop();
+ }
}
diff --git a/cleanandroidcode/src/main/java/info/piwai/cleanandroidcode/network/Contributor.java b/cleanandroidcode/src/main/java/info/piwai/cleanandroidcode/network/Contributor.java
new file mode 100644
index 0000000..fb5d06c
--- /dev/null
+++ b/cleanandroidcode/src/main/java/info/piwai/cleanandroidcode/network/Contributor.java
@@ -0,0 +1,6 @@
+package info.piwai.cleanandroidcode.network;
+
+class Contributor {
+ String login;
+ int contributions;
+}
\ No newline at end of file
diff --git a/cleanandroidcode/src/main/java/info/piwai/cleanandroidcode/network/GitHub.java b/cleanandroidcode/src/main/java/info/piwai/cleanandroidcode/network/GitHub.java
new file mode 100644
index 0000000..a08f8a0
--- /dev/null
+++ b/cleanandroidcode/src/main/java/info/piwai/cleanandroidcode/network/GitHub.java
@@ -0,0 +1,9 @@
+package info.piwai.cleanandroidcode.network;
+
+import retrofit.http.GET;
+import retrofit.http.Name;
+
+interface GitHub {
+ @GET("/repos/{owner}/{repo}/contributors")
+ ListContributor contributors(@Name("owner") String owner, @Name("repo") String repo);
+}
diff --git a/cleanandroidcode/src/main/java/info/piwai/cleanandroidcode/network/GitHubRetrofitSpiceRequest.java b/cleanandroidcode/src/main/java/info/piwai/cleanandroidcode/network/GitHubRetrofitSpiceRequest.java
new file mode 100644
index 0000000..9d6fb9e
--- /dev/null
+++ b/cleanandroidcode/src/main/java/info/piwai/cleanandroidcode/network/GitHubRetrofitSpiceRequest.java
@@ -0,0 +1,29 @@
+package info.piwai.cleanandroidcode.network;
+
+import retrofit.http.RestAdapter;
+import roboguice.util.temp.Ln;
+
+import com.octo.android.robospice.request.retrofit.RetrofitSpiceRequest;
+
+public class GitHubRetrofitSpiceRequest extends RetrofitSpiceRequest {
+
+ private static final String BASE_URL = "https://api.github.com";
+
+ public GitHubRetrofitSpiceRequest() {
+ super(ListContributor.class);
+ }
+
+ @Override
+ public ListContributor loadDataFromNetwork() {
+ Ln.d("Call web service " + BASE_URL);
+
+ // Create a very simple REST adapter which points the GitHub API endpoint.
+ RestAdapter restAdapter = new RestAdapter.Builder().setServer(BASE_URL).build();
+
+ // Create an instance of our GitHub API interface.
+ GitHub github = restAdapter.create(GitHub.class);
+
+ return github.contributors("square", "retrofit");
+ }
+
+}
diff --git a/cleanandroidcode/src/main/java/info/piwai/cleanandroidcode/network/ListContributor.java b/cleanandroidcode/src/main/java/info/piwai/cleanandroidcode/network/ListContributor.java
new file mode 100644
index 0000000..a7c8f5e
--- /dev/null
+++ b/cleanandroidcode/src/main/java/info/piwai/cleanandroidcode/network/ListContributor.java
@@ -0,0 +1,15 @@
+package info.piwai.cleanandroidcode.network;
+
+import java.util.ArrayList;
+
+/**
+ * Necessary for RoboSpice. All types included in results of request's type tree must be real Java
+ * types. As Java doesn't accept expression like List.class, we must create a
+ * full java type as a workaround.
+ * @author SNI
+ */
+public class ListContributor extends ArrayList {
+
+ private static final long serialVersionUID = -2518157580598657864L;
+
+}
diff --git a/pom.xml b/pom.xml
index 20b77f9..40961fc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,6 +23,8 @@
2.0.0-SNAPSHOT
0.9.1
2.7
+ 1.0.0-SNAPSHOT
+ 1.4.1-SNAPSHOT
@@ -89,6 +91,16 @@
androidannotations-api
${androidannotations.version}
+
+ com.squareup.retrofit
+ retrofit
+ ${retrofit.version}
+
+
+ com.octo.android.robospice
+ robospice-retrofit
+ ${robospice-retrofit.version}
+