This commit is contained in:
danijoo
2015-11-07 11:43:10 +01:00
parent 0dee7bda1a
commit 484910bced
6 changed files with 54 additions and 35 deletions

View File

@@ -34,4 +34,5 @@ dependencies {
freeCompile 'com.google.android.gms:play-services-ads:8.3.0'
compile project(path: ':jokesbackend', configuration: 'android-endpoints')
compile 'com.android.support:design:23.1.0'
compile 'de.greenrobot:eventbus:2.4.0'
}

View File

@@ -2,29 +2,32 @@ package com.udacity.gradle.builditbigger;
import android.test.AndroidTestCase;
import com.google.common.eventbus.Subscribe;
import net.headlezz.jokesbackend.myApi.model.Joke;
public class JokeLoaderTaskTest extends AndroidTestCase implements JokeLoaderTask.JokeLoaderCallback {
public class JokeLoaderTaskTest extends AndroidTestCase {
SyncronizeTalker talker;
public void testJokeLoader() {
JokeLoaderTask task = new JokeLoaderTask(this);
JokeLoaderTask task = new JokeLoaderTask();
talker = new SyncronizeTalker();
MyBus.getInstance().register(this);
task.execute();
talker.doWait();
MyBus.getInstance().unregister(this);
}
@Override
@Subscribe
public void onJokeLoaded(Joke joke) {
assertNotNull(joke);
assertTrue(joke.getJoke() != null && !joke.getJoke().isEmpty());
talker.doNotify();
}
@Override
@Subscribe
public void onError() {
assertTrue(false);
talker.doNotify();

View File

@@ -1,7 +1,7 @@
package com.udacity.gradle.builditbigger;
import android.os.AsyncTask;
import android.support.annotation.NonNull;
import android.util.Log;
import com.google.api.client.extensions.android.http.AndroidHttp;
import com.google.api.client.extensions.android.json.AndroidJsonFactory;
@@ -15,18 +15,11 @@ import java.io.IOException;
public class JokeLoaderTask extends AsyncTask<Void, Void, Joke> {
public static final String TAG = JokeLoaderTask.class.getSimpleName();
static final String ROOT_URL = "http://10.0.3.2:8080/_ah/api/";
MyApi mApi;
JokeLoaderCallback mCallback;
interface JokeLoaderCallback {
void onJokeLoaded(Joke joke);
void onError();
}
public JokeLoaderTask(@NonNull JokeLoaderCallback cb) {
mCallback = cb;
public JokeLoaderTask() {
mApi = new MyApi.Builder(AndroidHttp.newCompatibleTransport(), new AndroidJsonFactory(), null)
.setRootUrl(ROOT_URL)
.setGoogleClientRequestInitializer(new GoogleClientRequestInitializer() {
@@ -39,6 +32,7 @@ public class JokeLoaderTask extends AsyncTask<Void, Void, Joke> {
@Override
protected Joke doInBackground(Void... params) {
Log.d(TAG, "download started");
try {
return mApi.tellJoke().execute();
} catch (IOException e) {
@@ -48,13 +42,20 @@ public class JokeLoaderTask extends AsyncTask<Void, Void, Joke> {
@Override
protected void onPostExecute(Joke joke) {
if(isCancelled())
if(isCancelled()) {
Log.d(TAG, "download cancelled");
return;
}
if(joke != null) {
mCallback.onJokeLoaded(joke);
MyBus.getInstance().post(joke);
Log.d(TAG, "download finished");
} else {
mCallback.onError();
MyBus.getInstance().post(new JokeDownloadException());
Log.d(TAG, "download finished with error");
}
}
static class JokeDownloadException extends Exception {}
}

View File

@@ -14,7 +14,6 @@ public class MainActivity extends AppCompatActivity {
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.

View File

@@ -1,5 +1,6 @@
package com.udacity.gradle.builditbigger;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.Snackbar;
@@ -11,15 +12,17 @@ import android.view.ViewGroup;
import net.headlezz.androidjokepresenter.JokePresenterActivity;
import net.headlezz.jokesbackend.myApi.model.Joke;
/**
* A placeholder fragment containing a simple view.
*/
public abstract class MainActivityFragment extends Fragment implements View.OnClickListener, JokeLoaderTask.JokeLoaderCallback {
public abstract class MainActivityFragment extends Fragment implements View.OnClickListener {
JokeLoaderTask mJokeLoaderTask;
public MainActivityFragment() {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyBus.getInstance().register(this);
}
@Override
@@ -27,6 +30,7 @@ public abstract class MainActivityFragment extends Fragment implements View.OnCl
Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_main, container, false);
root.findViewById(R.id.btShowJoke).setOnClickListener(this);
return root;
}
@@ -35,30 +39,29 @@ public abstract class MainActivityFragment extends Fragment implements View.OnCl
downloadNewJoke();
}
/**
* starts the async task to download and show a new joke
* cancels old downloads if theres already a running one
*/
private void downloadNewJoke() {
mJokeLoaderTask = new JokeLoaderTask(this);
if(mJokeLoaderTask != null) {
mJokeLoaderTask.cancel(true);
}
mJokeLoaderTask = new JokeLoaderTask();
mJokeLoaderTask.execute();
}
@Override
public void onJokeLoaded(Joke joke) {
public void onEvent(Joke joke) {
Intent i = new Intent(getContext(), JokePresenterActivity.class);
i.putExtra(JokePresenterActivity.BUNDLE_ARG_JOKE, joke.getJoke());
startActivity(i);
}
@Override
public void onError() {
if (getView() != null)
Snackbar.make(getView(), R.string.joke_download_error, Snackbar.LENGTH_LONG)
public void onEvent(JokeLoaderTask.JokeDownloadException e) {
if (getActivity() != null)
Snackbar.make(getActivity().findViewById(android.R.id.content), R.string.joke_download_error, Snackbar.LENGTH_LONG)
.setAction(R.string.retry, this)
.show();
}
@Override
public void onStop() {
if(mJokeLoaderTask != null && !mJokeLoaderTask.isCancelled())
mJokeLoaderTask.cancel(true);
super.onStop();
}
}

View File

@@ -0,0 +1,12 @@
package com.udacity.gradle.builditbigger;
import de.greenrobot.event.EventBus;
public class MyBus {
private static EventBus bus = new EventBus();
public static EventBus getInstance() {
return bus;
}
}