diff --git a/media/android/NewsBlur/libs/gson-2.1.jar b/media/android/NewsBlur/libs/gson-2.1.jar
new file mode 100644
index 000000000..b85f091a0
Binary files /dev/null and b/media/android/NewsBlur/libs/gson-2.1.jar differ
diff --git a/media/android/NewsBlur/res/layout/fragment_login.xml b/media/android/NewsBlur/res/layout/fragment_login.xml
index b800614ca..40f8feba0 100644
--- a/media/android/NewsBlur/res/layout/fragment_login.xml
+++ b/media/android/NewsBlur/res/layout/fragment_login.xml
@@ -1,48 +1,66 @@
-
-
+
-
+
-
+
-
+
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/media/android/NewsBlur/res/layout/login.xml b/media/android/NewsBlur/res/layout/login.xml
index cba28766e..946310e2e 100644
--- a/media/android/NewsBlur/res/layout/login.xml
+++ b/media/android/NewsBlur/res/layout/login.xml
@@ -2,8 +2,8 @@
+ android:background="@drawable/activity_background"
+ android:gravity="center" >
+ android:layout_below="@+id/login_logo"
+ android:layout_marginTop="50dp" />
\ No newline at end of file
diff --git a/media/android/NewsBlur/res/values/strings.xml b/media/android/NewsBlur/res/values/strings.xml
index a99e17eb2..c84be45bd 100644
--- a/media/android/NewsBlur/res/values/strings.xml
+++ b/media/android/NewsBlur/res/values/strings.xml
@@ -7,6 +7,7 @@
password
Log In
Sign Up
+ There was problem connecting to NewsBlur. Check your internet connection.
Hello World!
diff --git a/media/android/NewsBlur/src/com/newsblur/fragment/LoginFragment.java b/media/android/NewsBlur/src/com/newsblur/fragment/LoginFragment.java
index 920b60247..83d2df137 100644
--- a/media/android/NewsBlur/src/com/newsblur/fragment/LoginFragment.java
+++ b/media/android/NewsBlur/src/com/newsblur/fragment/LoginFragment.java
@@ -1,5 +1,6 @@
package com.newsblur.fragment;
+import android.content.res.Resources;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
@@ -9,14 +10,18 @@ import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
+import android.widget.Toast;
+import android.widget.ViewSwitcher;
import com.newsblur.R;
import com.newsblur.network.APIManager;
+import com.newsblur.network.domain.LoginResponse;
public class LoginFragment extends Fragment implements OnClickListener {
public APIManager apiManager;
private EditText username, password;
+ private ViewSwitcher viewSwitcher;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
@@ -25,6 +30,8 @@ public class LoginFragment extends Fragment implements OnClickListener {
Button loginButton = (Button) v.findViewById(R.id.login_button);
loginButton.setOnClickListener(this);
+ viewSwitcher = (ViewSwitcher) v.findViewById(R.id.login_viewswitcher);
+
username = (EditText) v.findViewById(R.id.login_username);
password = (EditText) v.findViewById(R.id.login_password);
@@ -45,25 +52,31 @@ public class LoginFragment extends Fragment implements OnClickListener {
}
}
- private class LoginTask extends AsyncTask {
+ private class LoginTask extends AsyncTask {
@Override
protected void onPreExecute() {
-
+ viewSwitcher.showNext();
}
@Override
- protected Boolean doInBackground(String... params) {
+ protected LoginResponse doInBackground(String... params) {
final String username = params[0];
final String password = params[1];
return apiManager.login(username, password);
}
@Override
- protected void onPostExecute(Boolean result) {
- if (result) {
+ protected void onPostExecute(LoginResponse result) {
+ if (result.authenticated) {
((LoginFragmentInterface) getActivity()).loginSuccessful();
} else {
+ viewSwitcher.showPrevious();
+ if (result.errors != null && result.errors.message.length > 0) {
+ Toast.makeText(getActivity(), result.errors.message[0], Toast.LENGTH_LONG).show();
+ } else {
+ Toast.makeText(getActivity(), Resources.getSystem().getString(R.string.login_message_error), Toast.LENGTH_LONG).show();
+ }
((LoginFragmentInterface) getActivity()).loginUnsuccessful();
}
}
diff --git a/media/android/NewsBlur/src/com/newsblur/network/APIManager.java b/media/android/NewsBlur/src/com/newsblur/network/APIManager.java
index c10b8cb12..2759f2759 100644
--- a/media/android/NewsBlur/src/com/newsblur/network/APIManager.java
+++ b/media/android/NewsBlur/src/com/newsblur/network/APIManager.java
@@ -2,6 +2,9 @@ package com.newsblur.network;
import org.apache.http.HttpStatus;
+import com.google.gson.Gson;
+import com.newsblur.network.domain.LoginResponse;
+
import android.content.ContentValues;
import android.content.Context;
@@ -13,16 +16,19 @@ public class APIManager {
this.context = context;
}
- public boolean login(final String username, final String password) {
+ public LoginResponse login(final String username, final String password) {
APIClient client = new APIClient(context);
final ContentValues values = new ContentValues();
values.put(APIConstants.USERNAME, username);
values.put(APIConstants.PASSWORD, password);
final APIResponse response = client.post(APIConstants.URL_LOGIN, values);
-
- // Consider the login complete if we've got a HTTP 200 and we've not been redirected
- // This could be made more granular depending on validity requirements.
- return (response.responseCode == HttpStatus.SC_OK && response.hasRedirected == false);
+ if (response.responseCode == HttpStatus.SC_OK && response.hasRedirected == false) {
+ Gson gson = new Gson();
+ LoginResponse loginResponse = gson.fromJson(response.responseString, LoginResponse.class);
+ return loginResponse;
+ } else {
+ return new LoginResponse();
+ }
}
}
diff --git a/media/android/NewsBlur/src/com/newsblur/network/domain/LoginErrors.java b/media/android/NewsBlur/src/com/newsblur/network/domain/LoginErrors.java
new file mode 100644
index 000000000..b03e3040f
--- /dev/null
+++ b/media/android/NewsBlur/src/com/newsblur/network/domain/LoginErrors.java
@@ -0,0 +1,9 @@
+package com.newsblur.network.domain;
+
+import com.google.gson.annotations.SerializedName;
+
+public class LoginErrors {
+
+ @SerializedName("__all__")
+ public String[] message;
+}
diff --git a/media/android/NewsBlur/src/com/newsblur/network/domain/LoginResponse.java b/media/android/NewsBlur/src/com/newsblur/network/domain/LoginResponse.java
new file mode 100644
index 000000000..10404d0d7
--- /dev/null
+++ b/media/android/NewsBlur/src/com/newsblur/network/domain/LoginResponse.java
@@ -0,0 +1,12 @@
+package com.newsblur.network.domain;
+
+public class LoginResponse {
+
+ // {"code": -1, "authenticated": false, "errors": {"__all__": ["That username is not registered. Create an account with it instead."]}, "result": "ok"}
+
+ public boolean authenticated;
+ public int code;
+ public LoginErrors errors;
+ public String result;
+
+}