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} +