Login tokens can be saved

This commit is contained in:
Pierre 2017-10-30 10:40:32 +01:00
parent 727b66b65c
commit aeba9a615b
4 changed files with 263 additions and 0 deletions

View File

@ -0,0 +1,159 @@
package org.communiquons.android.comunic.client;
import android.content.Context;
import android.util.Log;
import org.json.JSONArray;
import org.json.JSONException;
import java.util.ArrayList;
import java.util.Objects;
/**
* Comunic account class
*
* Created by pierre on 10/29/17.
*/
class Account {
/**
* Utilities object
*/
private Utilities utils;
/**
* Tokens list
*/
private ArrayList<String> tokens;
/**
* Tokens file
*/
private String tokFilename = "login_tokens.json";
/**
* Application context
*/
private Context mContext;
/**
* Account class constructor
*
* @param context Context of the application
*/
Account(Context context){
mContext = context;
utils = new Utilities(context);
//Initializate tokens array
tokens = new ArrayList<>();
//Debug test
/*ArrayList<String> tokens = new ArrayList<>();
tokens.add("cXNkZjVxNnM1NGRmNTRxczZkNGZxc2RmNAo");
tokens.add("cXNkZjVxNnM1cXM4ZDdmODdxczhkZ3FzZGp");
save_new_tokens(tokens);
Log.v("Account", utils.file_get_content(tokFilename));
Log.v("Account", "You are signed in: " + (signed_in() ? "Yes" : "No"));*/
}
/**
* Determine whether user is signed in or not
*
* @return True if signed in
*/
boolean signed_in(){
//Check if tokens are already loaded
if(tokens.size() < 1){
if(!load_tokens())
return false;
}
return true;
}
/**
* Try to load tokens in tokens array
*
* @return False in case of failure
*/
private boolean load_tokens(){
String tokens_file;
//Get the tokens file content
tokens_file = utils.file_get_content(tokFilename);
//Check if there was an error
if(Objects.equals(tokens_file, ""))
return false;
//Try to parse tokens file
try {
JSONArray tokens_array = new JSONArray(tokens_file);
//Process login tokens
if(tokens_array.length() == 0)
return false; //No tokens to process
for (int i = 0; i < tokens_array.length(); i++) {
tokens.add(tokens_array.getString(i));
}
} catch (JSONException e) {
e.printStackTrace();
return false;
}
//Success
return true;
}
/**
* Save new tokens in tokens file
*
* @param toks The array containing the tokens
* @return False in case of failure
*/
private boolean save_new_tokens(ArrayList<String> toks){
//Create tokens array
JSONArray tokens = new JSONArray();
//Populate tokens array with new tokens
for(int i = 0; i < toks.size(); i++){
tokens.put(toks.get(i));
}
//Convert JSON array into a string
String tokens_string = tokens.toString();
//Try to write result to file
if(!utils.file_put_contents(tokFilename, tokens_string)){
Log.e("Account", "Couldn't save new tokens !");
return false;
}
return true;
}
/**
* Remove login tokens from device
* @return False in case of failure
*/
private boolean remove_login_tokens(){
if(!utils.file_put_contents(tokFilename, "[]"))
return false;
//Create new array
tokens = new ArrayList<>();
//Success
return true;
}
}

View File

@ -5,9 +5,16 @@ import android.os.Bundle;
public class MainActivity extends AppCompatActivity { public class MainActivity extends AppCompatActivity {
/**
* Acount object
*/
Account account;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); setContentView(R.layout.activity_main);
account = new Account(this);
} }
} }

View File

@ -0,0 +1,94 @@
package org.communiquons.android.comunic.client;
import android.content.Context;
import android.util.Log;
import java.io.FileInputStream;
import java.io.FileOutputStream;
/**
* Application utilities
*
* Created by pierre on 10/29/17.
*/
class Utilities {
/**
* Application context
*/
private Context mContext;
/**
* Account class constructor
*
* @param context Context of the application
*/
Utilities(Context context){
mContext = context;
}
/**
* Get the content of a file
*
* @param filename the name of the file to get
* @return The content of the file
*/
String file_get_content(String filename){
FileInputStream fileInputStream;
try {
fileInputStream = mContext.openFileInput(filename);
String result = "";
int currByte = 0;
while(currByte != -1){
currByte = fileInputStream.read();
if(currByte != -1)
result += (char) currByte;
}
fileInputStream.close();
return result;
}
catch (Exception e){
//Print error stack
Log.e("Utilities", "Couldn't get file content !");
e.printStackTrace();
return ""; //This is a failure
}
}
/**
* Write something to a file
*
* @param filename The name of the file to write
* @param content The new content of the file
* @return FALSE in case of failure
*/
boolean file_put_contents(String filename, String content){
FileOutputStream fileOutputStream;
try {
fileOutputStream = mContext.openFileOutput(filename, Context.MODE_PRIVATE);
fileOutputStream.write(content.getBytes());
fileOutputStream.close();
} catch (Exception e){
e.printStackTrace();
return false;
}
//Success
return true;
}
}

View File

@ -6,4 +6,7 @@
--> -->
<full-backup-content> <full-backup-content>
<!-- Login tokens -->
<include domain="file" path="login_tokens.json" />
</full-backup-content> </full-backup-content>