mirror of
https://github.com/pierre42100/ComunicAndroid
synced 2024-11-27 07:49:28 +00:00
The application can store login tokens
This commit is contained in:
parent
f7b80e8f6d
commit
554d597a0e
@ -1,5 +1,8 @@
|
|||||||
package org.communiquons.android.comunic.client;
|
package org.communiquons.android.comunic.client;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.net.ConnectivityManager;
|
||||||
|
import android.net.NetworkInfo;
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
|
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
@ -20,7 +23,6 @@ import java.net.URL;
|
|||||||
*
|
*
|
||||||
* Created by pierre on 10/31/17.
|
* Created by pierre on 10/31/17.
|
||||||
*/
|
*/
|
||||||
//TODO Create APIResponse class
|
|
||||||
abstract class APIRequestTask extends AsyncTask<APIRequestParameters, Void, APIResponse> {
|
abstract class APIRequestTask extends AsyncTask<APIRequestParameters, Void, APIResponse> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -83,11 +85,9 @@ abstract class APIRequestTask extends AsyncTask<APIRequestParameters, Void, APIR
|
|||||||
|
|
||||||
|
|
||||||
//Send request parameters
|
//Send request parameters
|
||||||
OutputStream out = conn.getOutputStream();
|
OutputStream out = new BufferedOutputStream(conn.getOutputStream());
|
||||||
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(out, "UTF-8");
|
BufferedWriter writer = new BufferedWriter (new OutputStreamWriter(out, "UTF-8"));
|
||||||
BufferedWriter writer = new BufferedWriter(outputStreamWriter);
|
writer.write(parameters.get_parameters_encoded());
|
||||||
String parameters_encoded = parameters.get_parameters_encoded();
|
|
||||||
writer.write(parameters_encoded);
|
|
||||||
writer.flush();
|
writer.flush();
|
||||||
writer.close();
|
writer.close();
|
||||||
out.close();
|
out.close();
|
||||||
@ -95,7 +95,6 @@ abstract class APIRequestTask extends AsyncTask<APIRequestParameters, Void, APIR
|
|||||||
//Connect to the server
|
//Connect to the server
|
||||||
conn.connect();
|
conn.connect();
|
||||||
|
|
||||||
|
|
||||||
//Get response code
|
//Get response code
|
||||||
result.setResponse_code(conn.getResponseCode());
|
result.setResponse_code(conn.getResponseCode());
|
||||||
|
|
||||||
@ -116,10 +115,24 @@ abstract class APIRequestTask extends AsyncTask<APIRequestParameters, Void, APIR
|
|||||||
|
|
||||||
// Reads an InputStream and converts it to a String.
|
// Reads an InputStream and converts it to a String.
|
||||||
private String readIt(InputStream stream, int len) throws IOException {
|
private String readIt(InputStream stream, int len) throws IOException {
|
||||||
Reader reader = null;
|
Reader reader = new InputStreamReader(stream, "UTF-8");
|
||||||
reader = new InputStreamReader(stream, "UTF-8");
|
|
||||||
char[] buffer = new char[len];
|
char[] buffer = new char[len];
|
||||||
reader.read(buffer);
|
reader.read(buffer);
|
||||||
return new String(buffer);
|
return new String(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine it is possible or not to connect to the API now
|
||||||
|
*
|
||||||
|
* @param context The context used to perform the test
|
||||||
|
* @return True if a network connection is available
|
||||||
|
*/
|
||||||
|
static boolean isAPIavailable(Context context){
|
||||||
|
ConnectivityManager connMgr = (ConnectivityManager)
|
||||||
|
context.getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||||
|
|
||||||
|
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
|
||||||
|
|
||||||
|
return networkInfo != null && networkInfo.isConnected();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -110,7 +110,7 @@ class Account {
|
|||||||
* @param toks The array containing the tokens
|
* @param toks The array containing the tokens
|
||||||
* @return False in case of failure
|
* @return False in case of failure
|
||||||
*/
|
*/
|
||||||
private boolean save_new_tokens(ArrayList<String> toks){
|
boolean save_new_tokens(ArrayList<String> toks){
|
||||||
|
|
||||||
//Create tokens array
|
//Create tokens array
|
||||||
JSONArray tokens = new JSONArray();
|
JSONArray tokens = new JSONArray();
|
||||||
|
@ -1,16 +1,20 @@
|
|||||||
package org.communiquons.android.comunic.client;
|
package org.communiquons.android.comunic.client;
|
||||||
|
|
||||||
|
import android.content.Intent;
|
||||||
import android.support.v7.app.AppCompatActivity;
|
import android.support.v7.app.AppCompatActivity;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.Log;
|
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.ProgressBar;
|
import android.widget.ProgressBar;
|
||||||
import android.widget.ScrollView;
|
import android.widget.ScrollView;
|
||||||
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
public class LoginActivity extends AppCompatActivity {
|
public class LoginActivity extends AppCompatActivity {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -26,14 +30,17 @@ public class LoginActivity extends AppCompatActivity {
|
|||||||
//Create utilities object
|
//Create utilities object
|
||||||
utils = new Utilities(this);
|
utils = new Utilities(this);
|
||||||
|
|
||||||
|
//Check for connectivity
|
||||||
|
if(!APIRequestTask.isAPIavailable(this)){
|
||||||
|
Toast.makeText(this, R.string.err_no_internet_connection, Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
|
||||||
//Make login submit button lives
|
//Make login submit button lives
|
||||||
findViewById(R.id.login_submit).setOnClickListener(new View.OnClickListener() {
|
findViewById(R.id.login_submit).setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
|
|
||||||
//Submit login form
|
//Submit login form
|
||||||
submitLogin();
|
submitLogin();
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -46,7 +53,7 @@ public class LoginActivity extends AppCompatActivity {
|
|||||||
void submitLogin(){
|
void submitLogin(){
|
||||||
|
|
||||||
//Get the fields
|
//Get the fields
|
||||||
EditText login_mail = (EditText) findViewById(R.id.email_field);
|
final EditText login_mail = (EditText) findViewById(R.id.email_field);
|
||||||
EditText login_password = (EditText) findViewById(R.id.password_field);
|
EditText login_password = (EditText) findViewById(R.id.password_field);
|
||||||
|
|
||||||
|
|
||||||
@ -66,11 +73,20 @@ public class LoginActivity extends AppCompatActivity {
|
|||||||
stop = 1;
|
stop = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Check internet connection
|
||||||
|
if(!APIRequestTask.isAPIavailable(this)){
|
||||||
|
show_form_error(getString(R.string.err_no_internet_connection));
|
||||||
|
stop = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//Stop if required
|
//Stop if required
|
||||||
if(stop != 0)
|
if(stop != 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
open_loading_state(true);
|
show_form_error("");
|
||||||
|
enter_loading_state(true);
|
||||||
|
|
||||||
|
|
||||||
//Perform a request on the API to check user credentials and get login tokens
|
//Perform a request on the API to check user credentials and get login tokens
|
||||||
APIRequestParameters params = new APIRequestParameters("user/connectUSER");
|
APIRequestParameters params = new APIRequestParameters("user/connectUSER");
|
||||||
@ -82,20 +98,73 @@ public class LoginActivity extends AppCompatActivity {
|
|||||||
@Override
|
@Override
|
||||||
protected void onPostExecute(APIResponse result) {
|
protected void onPostExecute(APIResponse result) {
|
||||||
|
|
||||||
open_loading_state(false);
|
//Check for errors
|
||||||
|
if(result == null) {
|
||||||
|
|
||||||
|
//Hide loading wheel
|
||||||
|
enter_loading_state(false);
|
||||||
|
|
||||||
|
//Put the error on the login mail field
|
||||||
|
show_form_error(getString(R.string.activity_login_err_invalid_credentials));
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
//Perform next actions
|
||||||
|
handle_server_response(result);
|
||||||
|
|
||||||
}
|
}
|
||||||
}.execute(params);
|
}.execute(params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle server responses that seems to accept a response
|
||||||
|
*
|
||||||
|
* @param response The server reponse
|
||||||
|
*/
|
||||||
|
void handle_server_response(APIResponse response){
|
||||||
|
|
||||||
|
JSONObject data = response.getJSONObject();
|
||||||
|
|
||||||
|
//Check for decoding response errors
|
||||||
|
if(data == null) {
|
||||||
|
show_err_server_response();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
//Search for tokens
|
||||||
|
JSONObject tokensObj = data.getJSONObject("tokens");
|
||||||
|
|
||||||
|
//Extract tokens
|
||||||
|
ArrayList<String> tokens = new ArrayList<>();
|
||||||
|
tokens.add(tokensObj.getString("token1"));
|
||||||
|
tokens.add(tokensObj.getString("token2"));
|
||||||
|
|
||||||
|
//Save tokens
|
||||||
|
Account account = new Account(this);
|
||||||
|
if(!account.save_new_tokens(tokens)) {
|
||||||
|
show_err_server_response();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (JSONException e){
|
||||||
|
e.printStackTrace();
|
||||||
|
show_err_server_response();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Redirect to the main activity
|
||||||
|
Intent redirect = new Intent(this, MainActivity.class);
|
||||||
|
startActivity(redirect);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Switch between loading state and ready state for the login form
|
* Switch between loading state and ready state for the login form
|
||||||
*
|
*
|
||||||
* @param show_progress Specify wether a progress bar should be shown or not
|
* @param show_progress Specify wether a progress bar should be shown or not
|
||||||
*/
|
*/
|
||||||
void open_loading_state(boolean show_progress){
|
void enter_loading_state(boolean show_progress){
|
||||||
//Grab elements
|
//Grab elements
|
||||||
ProgressBar progressBar = (ProgressBar) findViewById(R.id.progress_bar);
|
ProgressBar progressBar = (ProgressBar) findViewById(R.id.progress_bar);
|
||||||
ScrollView login_form = (ScrollView) findViewById(R.id.login_form);
|
ScrollView login_form = (ScrollView) findViewById(R.id.login_form);
|
||||||
@ -103,4 +172,33 @@ public class LoginActivity extends AppCompatActivity {
|
|||||||
progressBar.setVisibility(show_progress ? View.VISIBLE : View.GONE);
|
progressBar.setVisibility(show_progress ? View.VISIBLE : View.GONE);
|
||||||
login_form.setVisibility(show_progress ? View.GONE : View.VISIBLE);
|
login_form.setVisibility(show_progress ? View.GONE : View.VISIBLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display an error message on the login screen
|
||||||
|
*
|
||||||
|
* @param message The message to display on the screen
|
||||||
|
*/
|
||||||
|
void show_form_error(String message){
|
||||||
|
|
||||||
|
//Retrieve error field
|
||||||
|
TextView v_error = (TextView) findViewById(R.id.login_error_message);
|
||||||
|
|
||||||
|
//Check what to do
|
||||||
|
boolean display = message.length() > 0;
|
||||||
|
|
||||||
|
//Make it visible (or hide it)
|
||||||
|
v_error.setVisibility(display ? View.VISIBLE : View.GONE);
|
||||||
|
|
||||||
|
//Set the text
|
||||||
|
v_error.setText(message);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display an error message to say the server responded incorrectly to the request
|
||||||
|
*/
|
||||||
|
void show_err_server_response(){
|
||||||
|
show_form_error(getString(R.string.activity_login_err_server_response));
|
||||||
|
enter_loading_state(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ package org.communiquons.android.comunic.client;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.support.v7.app.AppCompatActivity;
|
import android.support.v7.app.AppCompatActivity;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
public class MainActivity extends AppCompatActivity {
|
public class MainActivity extends AppCompatActivity {
|
||||||
|
|
||||||
@ -16,6 +17,11 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setContentView(R.layout.activity_main);
|
setContentView(R.layout.activity_main);
|
||||||
|
|
||||||
|
//Check for connectivity
|
||||||
|
if(!APIRequestTask.isAPIavailable(this)){
|
||||||
|
Toast.makeText(this, R.string.err_no_internet_connection, Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
|
||||||
//Initialize account object
|
//Initialize account object
|
||||||
account = new Account(this);
|
account = new Account(this);
|
||||||
|
|
||||||
|
@ -31,6 +31,16 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<!-- Error message -->
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/login_error_message"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textAlignment="center"
|
||||||
|
android:textColor="#FF2222"
|
||||||
|
tools:text="Error message"
|
||||||
|
android:visibility="gone"/>
|
||||||
|
|
||||||
<!-- Email field -->
|
<!-- Email field -->
|
||||||
<android.support.design.widget.TextInputLayout
|
<android.support.design.widget.TextInputLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
@ -6,4 +6,7 @@
|
|||||||
<string name="activity_login_submit_form">Login</string>
|
<string name="activity_login_submit_form">Login</string>
|
||||||
<string name="activity_login_err_invalid_password">The password is invalid!</string>
|
<string name="activity_login_err_invalid_password">The password is invalid!</string>
|
||||||
<string name="activity_login_err_invalid_email">The email specified is invalid !</string>
|
<string name="activity_login_err_invalid_email">The email specified is invalid !</string>
|
||||||
|
<string name="activity_login_err_invalid_credentials">The connexion couldn\'t be etablished. Please check your credentials !</string>
|
||||||
|
<string name="err_no_internet_connection">No Internet connexion !</string>
|
||||||
|
<string name="activity_login_err_server_response">The server sent an unexcepted response…</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
Loading…
Reference in New Issue
Block a user