Work progress on signed in user requests

This commit is contained in:
Pierre 2017-11-05 17:23:28 +01:00
parent 5584840145
commit 6089b20b9a
9 changed files with 225 additions and 26 deletions

2
.idea/misc.xml generated
View File

@ -37,7 +37,7 @@
<ConfirmationsSetting value="0" id="Add" />
<ConfirmationsSetting value="0" id="Remove" />
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">

View File

@ -10,6 +10,8 @@ import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.Toast;
import org.communiquons.android.comunic.client.data.Account;
import org.communiquons.android.comunic.client.data.Utilities;
import org.json.JSONException;
import org.json.JSONObject;
@ -97,7 +99,7 @@ public class LoginActivity extends AppCompatActivity {
//Perform a request on the API to check user credentials and get login tokens
APIRequestParameters params = new APIRequestParameters("user/connectUSER");
APIRequestParameters params = new APIRequestParameters(this, "user/connectUSER");
params.addParameter("userMail", ""+login_mail.getText());
params.addParameter("userPassword", ""+login_password.getText());

View File

@ -10,6 +10,10 @@ import android.view.MenuItem;
import android.widget.Toast;
import org.communiquons.android.comunic.client.api.APIRequestTask;
import org.communiquons.android.comunic.client.data.Account;
import org.communiquons.android.comunic.client.data.DatabaseHelper;
import org.communiquons.android.comunic.client.data.UsersInfo.GetUsersInfos;
import org.communiquons.android.comunic.client.data.UsersInfo.UserInfo;
/**
@ -36,6 +40,21 @@ public class MainActivity extends AppCompatActivity {
//Initialize account object
account = new Account(this);
//DEVELOPMENT : Try to get information about a user over the network
GetUsersInfos uInfos = new GetUsersInfos(this, null);
//Get infos... about me!
int uID = 1;
uInfos.get(uID, new GetUsersInfos.getUserInfosCallback() {
@Override
public void callback(UserInfo info) {
if(info == null)
Toast.makeText(MainActivity.this, "Failure !", Toast.LENGTH_SHORT).show();
else
Toast.makeText(MainActivity.this, "Success !", Toast.LENGTH_SHORT).show();
}
});
}
@Override

View File

@ -1,5 +1,7 @@
package org.communiquons.android.comunic.client.api;
import android.content.Context;
import org.communiquons.android.comunic.client.api.APIPostData;
import java.util.ArrayList;
@ -13,6 +15,11 @@ import java.util.ArrayList;
public class APIRequestParameters {
/**
* The context of the request
*/
private Context context;
/**
* Parameters of the request
*/
@ -26,13 +33,18 @@ public class APIRequestParameters {
/**
* The class constructor
*
* @param context The context of the request
* @param uri The request URI on the server
*/
public APIRequestParameters(String uri){
public APIRequestParameters(Context context, String uri){
//Save the context
this.context = context;
//Save request URI
request_uri = uri;
//Intializate parametres array
//Intialize parameters array
parameters = new ArrayList<>();
}
@ -76,4 +88,13 @@ public class APIRequestParameters {
return result;
}
/**
* Get the context of the request
*
* @return The context of the request
*/
public Context getContext() {
return context;
}
}

View File

@ -4,9 +4,10 @@ import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import android.util.Log;
import org.communiquons.android.comunic.client.data.Account;
import org.communiquons.android.comunic.client.BuildConfig;
import org.json.JSONObject;
import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
@ -18,6 +19,7 @@ import java.io.OutputStreamWriter;
import java.io.Reader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
/**
* Perform an API request on the server
@ -33,11 +35,11 @@ import java.net.URL;
public abstract class APIRequestTask extends AsyncTask<APIRequestParameters, Void, APIResponse> {
/**
* Background task
* API request in a Background task
*
* Warning: This method support only one request per object
*
* @param params Parametres required to perform the API request
* @param params Parameters required to perform the API request
* @return JSONObject The result of the request
*/
@Override
@ -45,6 +47,7 @@ public abstract class APIRequestTask extends AsyncTask<APIRequestParameters, Voi
try {
//Perform the API request
addLoginTokens(params[0]);
return downloadUrl(params[0]);
} catch (Exception e) {
e.printStackTrace();
@ -142,4 +145,28 @@ public abstract class APIRequestTask extends AsyncTask<APIRequestParameters, Voi
return networkInfo != null && networkInfo.isConnected();
}
/**
* Add the login tokens to an API request object
*/
private void addLoginTokens(APIRequestParameters params){
//Create account object
Account account = new Account(params.getContext());
//Check if user is signed in or not
if(!account.signed_in())
return; //Do nothing
//Get login tokens
ArrayList<String> tokens = account.getLoginTokens();
if(tokens.size() < 2)
return; //Not enough tokens
//Add them to the request
params.addParameter("userToken1", tokens.get(0));
params.addParameter("userToken2", tokens.get(1));
}
}

View File

@ -1,4 +1,4 @@
package org.communiquons.android.comunic.client;
package org.communiquons.android.comunic.client.data;
import android.content.Context;
import android.util.Log;
@ -18,7 +18,7 @@ import java.util.Objects;
* Created by pierre on 10/29/17.
*/
class Account {
public class Account {
/**
* Utilities object
@ -45,7 +45,7 @@ class Account {
*
* @param context Context of the application
*/
Account(Context context){
public Account(Context context){
mContext = context;
utils = new Utilities(context);
@ -58,7 +58,7 @@ class Account {
*
* @return True if signed in
*/
boolean signed_in(){
public boolean signed_in(){
//Check if tokens are already loaded
if(tokens.size() < 1){
@ -73,7 +73,7 @@ class Account {
* Sign out user
* @return True in case of success / false else
*/
boolean sign_out(){
public boolean sign_out(){
return remove_login_tokens();
}
@ -115,13 +115,32 @@ class Account {
return true;
}
/**
* Get and return login tokens
*
* @return The list of tokens / null if user isn't signed in
*/
public ArrayList<String> getLoginTokens(){
//Check if tokens are already loaded or not
if(tokens.size()< 1)
load_tokens();
//Check if there is still no tokens
if(tokens.size() < 1)
return null; //Nothing to be done
//Return tokens list
return tokens;
}
/**
* Save new tokens in tokens file
*
* @param toks The array containing the tokens
* @return False in case of failure
*/
boolean save_new_tokens(ArrayList<String> toks){
public boolean save_new_tokens(ArrayList<String> toks){
//Create tokens array
JSONArray tokens = new JSONArray();

View File

@ -0,0 +1,86 @@
package org.communiquons.android.comunic.client.data.UsersInfo;
import android.content.Context;
import org.communiquons.android.comunic.client.api.APIRequestParameters;
import org.communiquons.android.comunic.client.api.APIRequestTask;
import org.communiquons.android.comunic.client.api.APIResponse;
import org.communiquons.android.comunic.client.data.DatabaseHelper;
/**
* This class handles informations requests about user informations
*
* @author Pierre HUBERT
* Created by pierre on 11/5/17.
*/
public class GetUsersInfos {
/**
* Database helper
*/
private DatabaseHelper dbHelper = null;
/**
* Operations context
*/
private Context context;
/**
* Public constructor
*
* @param context The context of the application
* @param dbHelper Database helper object
*/
public GetUsersInfos(Context context, DatabaseHelper dbHelper){
//Save context
this.context = context;
//Save database helper object
this.dbHelper = dbHelper;
}
/**
* This interface must be implemented to perform an API request
*/
public interface getUserInfosCallback{
/**
* Callback function called when we got informations about user
*
* @param info Information about the user
*/
void callback(UserInfo info);
}
/**
* Get and return the informations about a user
*
* @param id The ID of the user to get informations from
*/
public void get(int id, getUserInfosCallback callback){
//Perform a request on the API server
//Setup the request
APIRequestParameters requestParameters = new APIRequestParameters(context, "user/getInfos");
requestParameters.addParameter("userID", ""+id);
//Do it.
new APIRequestTask(){
@Override
protected void onPostExecute(APIResponse result) {
}
}.execute(requestParameters);
}
}

View File

@ -8,7 +8,7 @@ import org.communiquons.android.comunic.client.data.DatabaseContract.UsersInfoSc
import org.communiquons.android.comunic.client.data.DatabaseHelper;
/**
* Users informations helpers
* Users information helpers
*
* Makes the interface between the UsersInfo object and the SQLite object
*
@ -152,16 +152,17 @@ public class UsersInfosDbHelper {
c.moveToFirst();
//Extract the information and record them
result.setId(
c.getInt(
c.getColumnIndexOrThrow(
UsersInfoSchema.COLUMN_NAME_USER_ID
)
)
);
result.setId(c.getInt(c.getColumnIndexOrThrow(
UsersInfoSchema.COLUMN_NAME_USER_ID)));
result.setFirstName(c.getString(c.getColumnIndexOrThrow(
UsersInfoSchema.COLUMN_NAME_USER_FIRSTNAME)));
//TODO : finish extraction
result.setLastName(c.getString(c.getColumnIndexOrThrow(
UsersInfoSchema.COLUMN_NAME_USER_LASTNAME)));
result.setAccountImageURL(c.getString(c.getColumnIndexOrThrow(
UsersInfoSchema.COLUMN_NAME_USER_ACCOUNT_IMAGE)));
}
//Close the cursor
@ -172,4 +173,28 @@ public class UsersInfosDbHelper {
return result;
}
/**
* Remove a user from the database (if he is present)
*
* @param userID The ID of the user to delete
* @return False if nothing was deleted
*/
boolean delete(int userID){
//Get write access to the database
SQLiteDatabase db = dbHelper.getWritableDatabase();
//Prepare the request
String condition = UsersInfoSchema.COLUMN_NAME_USER_ID + " = ?";
String[] conditionArgs = {""+userID};
//Perform the request
int result = db.delete(UsersInfoSchema.TABLE_NAME, condition, conditionArgs);
//Close database
db.close();
return result > 0;
}
}

View File

@ -1,4 +1,4 @@
package org.communiquons.android.comunic.client;
package org.communiquons.android.comunic.client.data;
import android.content.Context;
import android.text.TextUtils;
@ -15,7 +15,7 @@ import java.io.FileOutputStream;
* Created by pierre on 10/29/17.
*/
class Utilities {
public class Utilities {
/**
* Application context
@ -27,7 +27,7 @@ class Utilities {
*
* @param context Context of the application
*/
Utilities(Context context){
public Utilities(Context context){
mContext = context;
}
@ -101,7 +101,7 @@ class Utilities {
* @param mail The E-Mail address to check
* @return True if the mail is valid / false else
*/
boolean isValidMail(CharSequence mail){
public boolean isValidMail(CharSequence mail){
return !TextUtils.isEmpty(mail) && Patterns.EMAIL_ADDRESS.matcher(mail).matches();
}
}